]> code.delx.au - gnu-emacs/commitdiff
Merge from origin/emacs-25
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 2 May 2016 01:14:22 +0000 (18:14 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 2 May 2016 01:14:22 +0000 (18:14 -0700)
d8affa3 Use ‘T *restrict’ proto, not ‘T[restrict]’
d38d2a8 Fix documentation of 'url-retrieve-synchronously'
586b213 * lisp/url/url.el (url-retrieve-synchronously): Doc fix.  (Bu...

# Conflicts:
# doc/misc/url.texi
# lisp/url/url.el

958 files changed:
.dir-locals.el
.gitattributes
.gitignore
CONTRIBUTE
ChangeLog.2
GNUmakefile
INSTALL
INSTALL.REPO
Makefile.in
README
admin/CPP-DEFINES
admin/MAINTAINERS
admin/gitmerge.el
admin/merge-gnulib
admin/notes/bug-triage [new file with mode: 0644]
admin/release-process
admin/update_autogen
autogen.sh
build-aux/gitlog-to-emacslog
configure.ac
doc/emacs/buffers.texi
doc/emacs/building.texi
doc/emacs/calendar.texi
doc/emacs/cmdargs.texi
doc/emacs/custom.texi
doc/emacs/dired.texi
doc/emacs/display.texi
doc/emacs/entering.texi
doc/emacs/files.texi
doc/emacs/fixit.texi
doc/emacs/frames.texi
doc/emacs/help.texi
doc/emacs/killing.texi
doc/emacs/m-x.texi
doc/emacs/macos.texi
doc/emacs/maintaining.texi
doc/emacs/mark.texi
doc/emacs/mini.texi
doc/emacs/misc.texi
doc/emacs/msdos-xtra.texi
doc/emacs/msdos.texi
doc/emacs/mule.texi
doc/emacs/programs.texi
doc/emacs/rmail.texi
doc/emacs/search.texi
doc/emacs/text.texi
doc/emacs/trouble.texi
doc/emacs/windows.texi
doc/lispref/commands.texi
doc/lispref/customize.texi
doc/lispref/display.texi
doc/lispref/files.texi
doc/lispref/functions.texi
doc/lispref/hash.texi
doc/lispref/internals.texi
doc/lispref/intro.texi
doc/lispref/keymaps.texi
doc/lispref/loading.texi
doc/lispref/macros.texi
doc/lispref/minibuf.texi
doc/lispref/modes.texi
doc/lispref/nonascii.texi
doc/lispref/objects.texi
doc/lispref/os.texi
doc/lispref/processes.texi
doc/lispref/searching.texi
doc/lispref/sequences.texi
doc/lispref/strings.texi
doc/lispref/syntax.texi
doc/lispref/text.texi
doc/lispref/tips.texi
doc/lispref/windows.texi
doc/misc/Makefile.in
doc/misc/cc-mode.texi
doc/misc/cl.texi
doc/misc/ebrowse.texi
doc/misc/efaq.texi
doc/misc/emacs-gnutls.texi
doc/misc/emacs-mime.texi
doc/misc/eudc.texi
doc/misc/eww.texi
doc/misc/gnus-faq.texi
doc/misc/gnus.texi
doc/misc/idlwave.texi
doc/misc/info.texi
doc/misc/message.texi
doc/misc/mh-e.texi
doc/misc/rcirc.texi
doc/misc/sem-user.texi
doc/misc/ses.texi
doc/misc/speedbar.texi
doc/misc/tramp.texi
doc/misc/trampver.texi
doc/misc/url.texi
doc/misc/viper.texi
doc/misc/widget.texi
doc/misc/woman.texi
etc/DEBUG
etc/MACHINES
etc/NEWS
etc/PROBLEMS
etc/compilation.txt
etc/nxml/00000-0007F.el [deleted file]
etc/nxml/00080-000FF.el [deleted file]
etc/nxml/00100-0017F.el [deleted file]
etc/nxml/00180-0024F.el [deleted file]
etc/nxml/00250-002AF.el [deleted file]
etc/nxml/002B0-002FF.el [deleted file]
etc/nxml/00300-0036F.el [deleted file]
etc/nxml/00370-003FF.el [deleted file]
etc/nxml/00400-004FF.el [deleted file]
etc/nxml/00500-0052F.el [deleted file]
etc/nxml/00530-0058F.el [deleted file]
etc/nxml/00590-005FF.el [deleted file]
etc/nxml/00600-006FF.el [deleted file]
etc/nxml/00700-0074F.el [deleted file]
etc/nxml/00780-007BF.el [deleted file]
etc/nxml/00900-0097F.el [deleted file]
etc/nxml/00980-009FF.el [deleted file]
etc/nxml/00A00-00A7F.el [deleted file]
etc/nxml/00A80-00AFF.el [deleted file]
etc/nxml/00B00-00B7F.el [deleted file]
etc/nxml/00B80-00BFF.el [deleted file]
etc/nxml/00C00-00C7F.el [deleted file]
etc/nxml/00C80-00CFF.el [deleted file]
etc/nxml/00D00-00D7F.el [deleted file]
etc/nxml/00D80-00DFF.el [deleted file]
etc/nxml/00E00-00E7F.el [deleted file]
etc/nxml/00E80-00EFF.el [deleted file]
etc/nxml/00F00-00FFF.el [deleted file]
etc/nxml/01000-0109F.el [deleted file]
etc/nxml/010A0-010FF.el [deleted file]
etc/nxml/01100-011FF.el [deleted file]
etc/nxml/01200-0137F.el [deleted file]
etc/nxml/013A0-013FF.el [deleted file]
etc/nxml/01400-0167F.el [deleted file]
etc/nxml/01680-0169F.el [deleted file]
etc/nxml/016A0-016FF.el [deleted file]
etc/nxml/01700-0171F.el [deleted file]
etc/nxml/01720-0173F.el [deleted file]
etc/nxml/01740-0175F.el [deleted file]
etc/nxml/01760-0177F.el [deleted file]
etc/nxml/01780-017FF.el [deleted file]
etc/nxml/01800-018AF.el [deleted file]
etc/nxml/01E00-01EFF.el [deleted file]
etc/nxml/01F00-01FFF.el [deleted file]
etc/nxml/02000-0206F.el [deleted file]
etc/nxml/02070-0209F.el [deleted file]
etc/nxml/020A0-020CF.el [deleted file]
etc/nxml/020D0-020FF.el [deleted file]
etc/nxml/02100-0214F.el [deleted file]
etc/nxml/02150-0218F.el [deleted file]
etc/nxml/02190-021FF.el [deleted file]
etc/nxml/02200-022FF.el [deleted file]
etc/nxml/02300-023FF.el [deleted file]
etc/nxml/02400-0243F.el [deleted file]
etc/nxml/02440-0245F.el [deleted file]
etc/nxml/02460-024FF.el [deleted file]
etc/nxml/02500-0257F.el [deleted file]
etc/nxml/02580-0259F.el [deleted file]
etc/nxml/025A0-025FF.el [deleted file]
etc/nxml/02600-026FF.el [deleted file]
etc/nxml/02700-027BF.el [deleted file]
etc/nxml/027C0-027EF.el [deleted file]
etc/nxml/027F0-027FF.el [deleted file]
etc/nxml/02800-028FF.el [deleted file]
etc/nxml/02900-0297F.el [deleted file]
etc/nxml/02980-029FF.el [deleted file]
etc/nxml/02A00-02AFF.el [deleted file]
etc/nxml/02E80-02EFF.el [deleted file]
etc/nxml/02F00-02FDF.el [deleted file]
etc/nxml/02FF0-02FFF.el [deleted file]
etc/nxml/03000-0303F.el [deleted file]
etc/nxml/03040-0309F.el [deleted file]
etc/nxml/030A0-030FF.el [deleted file]
etc/nxml/03100-0312F.el [deleted file]
etc/nxml/03130-0318F.el [deleted file]
etc/nxml/03190-0319F.el [deleted file]
etc/nxml/031A0-031BF.el [deleted file]
etc/nxml/031F0-031FF.el [deleted file]
etc/nxml/03200-032FF.el [deleted file]
etc/nxml/03300-033FF.el [deleted file]
etc/nxml/03400-04DBF.el [deleted file]
etc/nxml/0A000-0A48F.el [deleted file]
etc/nxml/0A490-0A4CF.el [deleted file]
etc/nxml/0FB00-0FB4F.el [deleted file]
etc/nxml/0FB50-0FDFF.el [deleted file]
etc/nxml/0FE00-0FE0F.el [deleted file]
etc/nxml/0FE20-0FE2F.el [deleted file]
etc/nxml/0FE30-0FE4F.el [deleted file]
etc/nxml/0FE50-0FE6F.el [deleted file]
etc/nxml/0FE70-0FEFF.el [deleted file]
etc/nxml/0FF00-0FFEF.el [deleted file]
etc/nxml/0FFF0-0FFFF.el [deleted file]
etc/nxml/10300-1032F.el [deleted file]
etc/nxml/10330-1034F.el [deleted file]
etc/nxml/10400-1044F.el [deleted file]
etc/nxml/1D000-1D0FF.el [deleted file]
etc/nxml/1D100-1D1FF.el [deleted file]
etc/nxml/1D400-1D7FF.el [deleted file]
etc/nxml/E0000-E007F.el [deleted file]
lib-src/Makefile.in
lib-src/pop.c
lib/Makefile.am
lib/filevercmp.c [new file with mode: 0644]
lib/filevercmp.h [new file with mode: 0644]
lib/gnulib.mk
lisp/Makefile.in
lisp/abbrev.el
lisp/align.el
lisp/apropos.el
lisp/auth-source.el [moved from lisp/gnus/auth-source.el with 96% similarity]
lisp/autorevert.el
lisp/battery.el
lisp/bindings.el
lisp/calculator.el
lisp/calendar/appt.el
lisp/calendar/cal-hebrew.el
lisp/calendar/cal-iso.el
lisp/calendar/cal-tex.el
lisp/calendar/parse-time.el
lisp/calendar/solar.el
lisp/comint.el
lisp/cus-edit.el
lisp/cus-start.el
lisp/delsel.el
lisp/dired-aux.el
lisp/dired-x.el
lisp/dired.el
lisp/ecomplete.el [moved from lisp/gnus/ecomplete.el with 94% similarity]
lisp/emacs-lisp/autoload.el
lisp/emacs-lisp/byte-opt.el
lisp/emacs-lisp/byte-run.el
lisp/emacs-lisp/bytecomp.el
lisp/emacs-lisp/checkdoc.el
lisp/emacs-lisp/easy-mmode.el
lisp/emacs-lisp/eieio-compat.el
lisp/emacs-lisp/eieio-core.el
lisp/emacs-lisp/eieio-custom.el
lisp/emacs-lisp/eieio-opt.el
lisp/emacs-lisp/eieio.el
lisp/emacs-lisp/eldoc.el
lisp/emacs-lisp/ert-x.el
lisp/emacs-lisp/find-func.el
lisp/emacs-lisp/let-alist.el
lisp/emacs-lisp/lisp-mode.el
lisp/emacs-lisp/lisp.el
lisp/emacs-lisp/package.el
lisp/emacs-lisp/seq.el
lisp/emacs-lisp/syntax.el
lisp/emacs-lisp/timer-list.el [new file with mode: 0644]
lisp/emacs-lisp/timer.el
lisp/emulation/cua-base.el
lisp/epa.el
lisp/erc/erc-backend.el
lisp/erc/erc-button.el
lisp/erc/erc-capab.el
lisp/erc/erc-compat.el
lisp/erc/erc-dcc.el
lisp/erc/erc-goodies.el
lisp/erc/erc-match.el
lisp/erc/erc-stamp.el
lisp/erc/erc-track.el
lisp/erc/erc.el
lisp/eshell/esh-mode.el
lisp/eshell/eshell.el
lisp/faces.el
lisp/ffap.el
lisp/files-x.el
lisp/files.el
lisp/find-dired.el
lisp/find-file.el
lisp/find-lisp.el
lisp/font-core.el
lisp/font-lock.el
lisp/gnus/ChangeLog.1
lisp/gnus/ChangeLog.2
lisp/gnus/ChangeLog.3
lisp/gnus/canlock.el
lisp/gnus/gmm-utils.el
lisp/gnus/gnus-agent.el
lisp/gnus/gnus-art.el
lisp/gnus/gnus-async.el
lisp/gnus/gnus-bcklg.el
lisp/gnus/gnus-bookmark.el
lisp/gnus/gnus-cache.el
lisp/gnus/gnus-cite.el
lisp/gnus/gnus-cus.el
lisp/gnus/gnus-delay.el
lisp/gnus/gnus-demon.el
lisp/gnus/gnus-diary.el
lisp/gnus/gnus-dired.el
lisp/gnus/gnus-draft.el
lisp/gnus/gnus-ems.el [deleted file]
lisp/gnus/gnus-fun.el
lisp/gnus/gnus-gravatar.el
lisp/gnus/gnus-group.el
lisp/gnus/gnus-html.el
lisp/gnus/gnus-icalendar.el
lisp/gnus/gnus-int.el
lisp/gnus/gnus-ml.el
lisp/gnus/gnus-msg.el
lisp/gnus/gnus-notifications.el
lisp/gnus/gnus-picon.el
lisp/gnus/gnus-registry.el
lisp/gnus/gnus-rfc1843.el [new file with mode: 0644]
lisp/gnus/gnus-salt.el
lisp/gnus/gnus-score.el
lisp/gnus/gnus-spec.el
lisp/gnus/gnus-srvr.el
lisp/gnus/gnus-start.el
lisp/gnus/gnus-sum.el
lisp/gnus/gnus-sync.el
lisp/gnus/gnus-topic.el
lisp/gnus/gnus-undo.el
lisp/gnus/gnus-util.el
lisp/gnus/gnus-uu.el
lisp/gnus/gnus-win.el
lisp/gnus/gnus.el
lisp/gnus/legacy-gnus-agent.el
lisp/gnus/mail-source.el
lisp/gnus/message.el
lisp/gnus/mm-archive.el
lisp/gnus/mm-bodies.el
lisp/gnus/mm-decode.el
lisp/gnus/mm-partial.el
lisp/gnus/mm-url.el
lisp/gnus/mm-util.el
lisp/gnus/mm-uu.el
lisp/gnus/mm-view.el
lisp/gnus/mml-sec.el
lisp/gnus/mml-smime.el
lisp/gnus/mml.el
lisp/gnus/mml1991.el
lisp/gnus/mml2015.el
lisp/gnus/nndiary.el
lisp/gnus/nndoc.el
lisp/gnus/nndraft.el
lisp/gnus/nneething.el
lisp/gnus/nnfolder.el
lisp/gnus/nnheader.el
lisp/gnus/nnimap.el
lisp/gnus/nnir.el
lisp/gnus/nnmail.el
lisp/gnus/nnmaildir.el
lisp/gnus/nnmairix.el
lisp/gnus/nnmh.el
lisp/gnus/nnml.el
lisp/gnus/nnrss.el
lisp/gnus/nnspool.el
lisp/gnus/nntp.el
lisp/gnus/nnweb.el
lisp/gnus/smiley.el
lisp/gnus/smime.el
lisp/gnus/spam-report.el
lisp/gnus/spam-stat.el
lisp/gnus/spam.el
lisp/help-fns.el
lisp/help-mode.el
lisp/help.el
lisp/hfy-cmap.el
lisp/hi-lock.el
lisp/htmlfontify.el
lisp/ibuf-ext.el
lisp/ibuffer.el
lisp/icomplete.el
lisp/image-dired.el
lisp/image-mode.el
lisp/image.el
lisp/image/compface.el [moved from lisp/gnus/compface.el with 78% similarity]
lisp/image/gravatar.el [moved from lisp/gnus/gravatar.el with 92% similarity]
lisp/imenu.el
lisp/international/characters.el
lisp/international/fontset.el
lisp/international/mule-cmds.el
lisp/international/rfc1843.el [moved from lisp/gnus/rfc1843.el with 66% similarity]
lisp/international/utf7.el [moved from lisp/gnus/utf7.el with 94% similarity]
lisp/isearch.el
lisp/jit-lock.el
lisp/kmacro.el
lisp/language/european.el
lisp/ldefs-boot.el
lisp/leim/quail/latin-pre.el
lisp/linum.el
lisp/loadup.el
lisp/lpr.el
lisp/ls-lisp.el
lisp/mail/flow-fill.el [moved from lisp/gnus/flow-fill.el with 99% similarity]
lisp/mail/ietf-drums.el [moved from lisp/gnus/ietf-drums.el with 97% similarity]
lisp/mail/mail-extr.el
lisp/mail/mail-parse.el [moved from lisp/gnus/mail-parse.el with 100% similarity]
lisp/mail/mail-prsvr.el [moved from lisp/gnus/mail-prsvr.el with 100% similarity]
lisp/mail/qp.el [moved from lisp/gnus/qp.el with 89% similarity]
lisp/mail/rfc2045.el [moved from lisp/gnus/rfc2045.el with 100% similarity]
lisp/mail/rfc2047.el [moved from lisp/gnus/rfc2047.el with 92% similarity]
lisp/mail/rfc2231.el [moved from lisp/gnus/rfc2231.el with 97% similarity]
lisp/mail/rmail.el
lisp/mail/rmailedit.el
lisp/mail/rmailkwd.el
lisp/mail/rmailmm.el
lisp/mail/rmailmsc.el
lisp/mail/rmailsort.el
lisp/mail/rmailsum.el
lisp/mail/smtpmail.el
lisp/mail/undigest.el
lisp/mail/yenc.el [moved from lisp/gnus/yenc.el with 98% similarity]
lisp/menu-bar.el
lisp/mh-e/mh-comp.el
lisp/mh-e/mh-e.el
lisp/minibuffer.el
lisp/mouse.el
lisp/mpc.el
lisp/mwheel.el
lisp/net/eudc.el
lisp/net/eww.el
lisp/net/gnutls.el
lisp/net/html2text.el [moved from lisp/gnus/html2text.el with 100% similarity]
lisp/net/mailcap.el [moved from lisp/gnus/mailcap.el with 87% similarity]
lisp/net/net-utils.el
lisp/net/network-stream.el
lisp/net/nsm.el
lisp/net/pop3.el [moved from lisp/gnus/pop3.el with 97% similarity]
lisp/net/puny.el [new file with mode: 0644]
lisp/net/rcirc.el
lisp/net/shr.el
lisp/net/sieve-manage.el [moved from lisp/gnus/sieve-manage.el with 99% similarity]
lisp/net/sieve-mode.el [moved from lisp/gnus/sieve-mode.el with 98% similarity]
lisp/net/sieve.el [moved from lisp/gnus/sieve.el with 100% similarity]
lisp/net/soap-client.el
lisp/net/starttls.el [moved from lisp/gnus/starttls.el with 96% similarity]
lisp/net/tramp-adb.el
lisp/net/tramp-cache.el
lisp/net/tramp-cmds.el
lisp/net/tramp-compat.el
lisp/net/tramp-ftp.el
lisp/net/tramp-gvfs.el
lisp/net/tramp-gw.el
lisp/net/tramp-sh.el
lisp/net/tramp-smb.el
lisp/net/tramp.el
lisp/net/trampver.el
lisp/nxml/nxml-enc.el
lisp/nxml/nxml-glyph.el [deleted file]
lisp/nxml/nxml-maint.el
lisp/nxml/nxml-mode.el
lisp/nxml/nxml-outln.el
lisp/nxml/nxml-parse.el
lisp/nxml/nxml-rap.el
lisp/nxml/nxml-uchnm.el [deleted file]
lisp/nxml/nxml-util.el
lisp/nxml/rng-cmpct.el
lisp/nxml/rng-dt.el
lisp/nxml/rng-loc.el
lisp/nxml/rng-maint.el
lisp/nxml/rng-match.el
lisp/nxml/rng-nxml.el
lisp/nxml/rng-parse.el
lisp/nxml/rng-pttrn.el
lisp/nxml/rng-uri.el
lisp/nxml/rng-util.el
lisp/nxml/rng-valid.el
lisp/nxml/rng-xsd.el
lisp/nxml/xmltok.el
lisp/nxml/xsd-regexp.el
lisp/obsolete/awk-mode.el [deleted file]
lisp/obsolete/iso-acc.el [deleted file]
lisp/obsolete/iso-insert.el [deleted file]
lisp/obsolete/iso-swed.el [deleted file]
lisp/obsolete/resume.el [deleted file]
lisp/obsolete/scribe.el [deleted file]
lisp/obsolete/spell.el [deleted file]
lisp/obsolete/swedish.el [deleted file]
lisp/obsolete/sym-comp.el [deleted file]
lisp/org/ChangeLog.1
lisp/org/ob-core.el
lisp/org/org-src.el
lisp/org/org.el
lisp/pcmpl-gnu.el
lisp/play/fortune.el
lisp/play/snake.el
lisp/plstore.el [moved from lisp/gnus/plstore.el with 97% similarity]
lisp/proced.el
lisp/progmodes/cc-defs.el
lisp/progmodes/cc-engine.el
lisp/progmodes/cc-fonts.el
lisp/progmodes/cc-langs.el
lisp/progmodes/cc-mode.el
lisp/progmodes/cc-vars.el
lisp/progmodes/compile.el
lisp/progmodes/elisp-mode.el
lisp/progmodes/grep.el
lisp/progmodes/gud.el
lisp/progmodes/hideshow.el
lisp/progmodes/prog-mode.el
lisp/progmodes/ps-mode.el
lisp/progmodes/python.el
lisp/progmodes/scheme.el
lisp/progmodes/sh-script.el
lisp/progmodes/sql.el
lisp/progmodes/verilog-mode.el
lisp/progmodes/which-func.el
lisp/ps-mule.el
lisp/ps-print.el
lisp/rect.el
lisp/registry.el [moved from lisp/gnus/registry.el with 92% similarity]
lisp/replace.el
lisp/rtree.el [moved from lisp/gnus/rtree.el with 100% similarity]
lisp/scroll-bar.el
lisp/server.el
lisp/ses.el
lisp/simple.el
lisp/startup.el
lisp/subr.el
lisp/svg.el [new file with mode: 0644]
lisp/term.el
lisp/term/AT386.el
lisp/term/bobcat.el
lisp/term/cygwin.el
lisp/term/internal.el
lisp/term/iris-ansi.el
lisp/term/linux.el
lisp/term/lk201.el
lisp/term/news.el
lisp/term/ns-win.el
lisp/term/pc-win.el
lisp/term/rxvt.el
lisp/term/screen.el
lisp/term/sun.el
lisp/term/tty-colors.el
lisp/term/tvi970.el
lisp/term/vt100.el
lisp/term/vt200.el
lisp/term/w32-win.el
lisp/term/w32console.el
lisp/term/wyse50.el
lisp/term/x-win.el
lisp/term/xterm.el
lisp/textmodes/css-mode.el
lisp/textmodes/fill.el
lisp/textmodes/flyspell.el
lisp/textmodes/ispell.el
lisp/textmodes/reftex-auc.el
lisp/textmodes/reftex-cite.el
lisp/textmodes/reftex-dcr.el
lisp/textmodes/reftex-global.el
lisp/textmodes/reftex-index.el
lisp/textmodes/reftex-parse.el
lisp/textmodes/reftex-ref.el
lisp/textmodes/reftex-sel.el
lisp/textmodes/reftex-toc.el
lisp/textmodes/reftex.el
lisp/textmodes/sgml-mode.el
lisp/textmodes/tex-mode.el
lisp/textmodes/texinfo.el
lisp/thingatpt.el
lisp/time-stamp.el
lisp/time.el
lisp/url/url-cookie.el
lisp/url/url-gw.el
lisp/url/url-handlers.el
lisp/url/url-http.el
lisp/url/url-queue.el
lisp/url/url-util.el
lisp/url/url-vars.el
lisp/url/url.el
lisp/vc/add-log.el
lisp/vc/ediff-util.el
lisp/vc/ediff.el
lisp/vc/smerge-mode.el
lisp/vc/vc-dispatcher.el
lisp/vc/vc-git.el
lisp/vc/vc-hg.el
lisp/vc/vc-hooks.el
lisp/vc/vc-rcs.el
lisp/version.el
lisp/w32-fns.el
lisp/wdired.el
lisp/whitespace.el
lisp/window.el
lisp/winner.el
lwlib/Makefile.in
m4/gnulib-comp.m4
m4/std-gnu11.m4 [new file with mode: 0644]
make-dist
msdos/sed2v2.inp
nt/Makefile.in
nt/gnulib.mk
nt/inc/ms-w32.h
nt/inc/sys/socket.h
nt/mingw-cfg.site
oldXMenu/Makefile.in
src/Makefile.in
src/alloc.c
src/buffer.c
src/bytecode.c
src/callint.c
src/callproc.c
src/ccl.c
src/character.h
src/charset.c
src/coding.c
src/conf_post.h
src/dbusbind.c
src/decompress.c
src/dired.c
src/dispnew.c
src/doc.c
src/editfns.c
src/emacs-module.c
src/emacs-module.h
src/emacs.c
src/eval.c
src/fileio.c
src/filelock.c
src/fns.c
src/font.c
src/fontset.c
src/frame.c
src/frame.h
src/ftfont.c
src/gmalloc.c
src/gnutls.c
src/gnutls.h
src/image.c
src/keyboard.c
src/keymap.c
src/kqueue.c
src/lastfile.c
src/lisp.h
src/lread.c
src/marker.c
src/menu.c
src/minibuf.c
src/nsterm.h
src/nsterm.m
src/print.c
src/process.c
src/process.h
src/profiler.c
src/ralloc.c
src/regex.c
src/sheap.c
src/sheap.h [new file with mode: 0644]
src/syntax.c
src/sysdep.c
src/unexcw.c
src/unexelf.c
src/vm-limit.c
src/w32.c
src/w32console.c
src/w32fns.c
src/w32inevt.c
src/w32notify.c
src/w32select.c
src/w32term.c
src/w32term.h
src/w32xfns.c
src/window.c
src/window.h
src/xdisp.c
src/xfns.c
src/xml.c
src/xselect.c
src/xsmfns.c
src/xterm.c
test/Makefile.in [moved from test/automated/Makefile.in with 73% similarity]
test/README
test/data/decompress/foo.gz [moved from test/automated/data/decompress/foo.gz with 100% similarity]
test/data/epg/pubkey.asc [moved from test/automated/data/epg/pubkey.asc with 100% similarity]
test/data/epg/seckey.asc [moved from test/automated/data/epg/seckey.asc with 100% similarity]
test/data/files-bug18141.el.gz [moved from test/automated/data/files-bug18141.el.gz with 100% similarity]
test/data/net/cert.pem [new file with mode: 0644]
test/data/net/key.pem [new file with mode: 0644]
test/data/shr/div-div.html [new file with mode: 0644]
test/data/shr/div-div.txt [new file with mode: 0644]
test/data/shr/div-p.html [new file with mode: 0644]
test/data/shr/div-p.txt [new file with mode: 0644]
test/data/shr/li-div.html [new file with mode: 0644]
test/data/shr/li-div.txt [new file with mode: 0644]
test/data/shr/li-empty.html [new file with mode: 0644]
test/data/shr/li-empty.txt [new file with mode: 0644]
test/data/shr/nonbr.html [new file with mode: 0644]
test/data/shr/nonbr.txt [new file with mode: 0644]
test/data/shr/ul-empty.html [new file with mode: 0644]
test/data/shr/ul-empty.txt [new file with mode: 0644]
test/file-organisation.org [new file with mode: 0644]
test/lisp/abbrev-tests.el [moved from test/automated/abbrev-tests.el with 73% similarity]
test/lisp/auth-source-tests.el [moved from test/automated/auth-source-tests.el with 100% similarity]
test/lisp/autorevert-tests.el [moved from test/automated/auto-revert-tests.el with 77% similarity]
test/lisp/calc/calc-tests.el [moved from test/automated/calc-tests.el with 100% similarity]
test/lisp/calendar/icalendar-tests.el [moved from test/automated/icalendar-tests.el with 99% similarity]
test/lisp/calendar/parse-time-tests.el [new file with mode: 0644]
test/lisp/character-fold-tests.el [moved from test/automated/character-fold-tests.el with 100% similarity]
test/lisp/comint-tests.el [moved from test/automated/comint-testsuite.el with 100% similarity]
test/lisp/dabbrev-tests.el [moved from test/automated/dabbrev-tests.el with 100% similarity]
test/lisp/descr-text-tests.el [moved from test/automated/descr-text-test.el with 100% similarity]
test/lisp/dired-tests.el [new file with mode: 0644]
test/lisp/electric-tests.el [moved from test/automated/electric-tests.el with 100% similarity]
test/lisp/emacs-lisp/cl-generic-tests.el [moved from test/automated/cl-generic-tests.el with 100% similarity]
test/lisp/emacs-lisp/cl-lib-tests.el [moved from test/automated/cl-lib-tests.el with 100% similarity]
test/lisp/emacs-lisp/cl-seq-tests.el [moved from test/automated/cl-seq-tests.el with 100% similarity]
test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el [moved from test/automated/eieio-test-methodinvoke.el with 100% similarity]
test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el [moved from test/automated/eieio-test-persist.el with 100% similarity]
test/lisp/emacs-lisp/eieio-tests/eieio-tests.el [moved from test/automated/eieio-tests.el with 99% similarity]
test/lisp/emacs-lisp/ert-tests.el [moved from test/automated/ert-tests.el with 100% similarity]
test/lisp/emacs-lisp/ert-x-tests.el [moved from test/automated/ert-x-tests.el with 89% similarity]
test/lisp/emacs-lisp/generator-tests.el [moved from test/automated/generator-tests.el with 100% similarity]
test/lisp/emacs-lisp/let-alist-tests.el [moved from test/automated/let-alist.el with 100% similarity]
test/lisp/emacs-lisp/lisp-tests.el [new file with mode: 0644]
test/lisp/emacs-lisp/map-tests.el [moved from test/automated/map-tests.el with 100% similarity]
test/lisp/emacs-lisp/nadvice-tests.el [moved from test/automated/advice-tests.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/archive-contents [moved from test/automated/data/package/archive-contents with 100% similarity]
test/lisp/emacs-lisp/package-resources/key.pub [moved from test/automated/data/package/key.pub with 100% similarity]
test/lisp/emacs-lisp/package-resources/key.sec [moved from test/automated/data/package/key.sec with 100% similarity]
test/lisp/emacs-lisp/package-resources/macro-problem-package-1.0/macro-aux.el [moved from test/automated/data/package/macro-problem-package-1.0/macro-aux.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/macro-problem-package-1.0/macro-problem.el [moved from test/automated/data/package/macro-problem-package-1.0/macro-problem.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/macro-problem-package-2.0/macro-aux.el [moved from test/automated/data/package/macro-problem-package-2.0/macro-aux.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/macro-problem-package-2.0/macro-problem.el [moved from test/automated/data/package/macro-problem-package-2.0/macro-problem.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/multi-file-0.2.3.tar [moved from test/automated/data/package/multi-file-0.2.3.tar with 100% similarity]
test/lisp/emacs-lisp/package-resources/multi-file-readme.txt [moved from test/automated/data/package/multi-file-readme.txt with 100% similarity]
test/lisp/emacs-lisp/package-resources/newer-versions/archive-contents [moved from test/automated/data/package/newer-versions/archive-contents with 100% similarity]
test/lisp/emacs-lisp/package-resources/newer-versions/new-pkg-1.0.el [moved from test/automated/data/package/newer-versions/new-pkg-1.0.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/newer-versions/simple-single-1.4.el [moved from test/automated/data/package/newer-versions/simple-single-1.4.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/package-test-server.py [moved from test/automated/data/package/package-test-server.py with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/archive-contents [moved from test/automated/data/package/signed/archive-contents with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/archive-contents.sig [moved from test/automated/data/package/signed/archive-contents.sig with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/signed-bad-1.0.el [moved from test/automated/data/package/signed/signed-bad-1.0.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/signed-bad-1.0.el.sig [moved from test/automated/data/package/signed/signed-bad-1.0.el.sig with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/signed-good-1.0.el [moved from test/automated/data/package/signed/signed-good-1.0.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/signed-good-1.0.el.sig [moved from test/automated/data/package/signed/signed-good-1.0.el.sig with 100% similarity]
test/lisp/emacs-lisp/package-resources/simple-depend-1.0.el [moved from test/automated/data/package/simple-depend-1.0.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/simple-single-1.3.el [moved from test/automated/data/package/simple-single-1.3.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/simple-single-readme.txt [moved from test/automated/data/package/simple-single-readme.txt with 100% similarity]
test/lisp/emacs-lisp/package-resources/simple-two-depend-1.1.el [moved from test/automated/data/package/simple-two-depend-1.1.el with 100% similarity]
test/lisp/emacs-lisp/package-tests.el [moved from test/automated/package-test.el with 96% similarity]
test/lisp/emacs-lisp/pcase-tests.el [moved from test/automated/pcase-tests.el with 100% similarity]
test/lisp/emacs-lisp/regexp-opt-tests.el [moved from test/automated/regexp-tests.el with 100% similarity]
test/lisp/emacs-lisp/seq-tests.el [moved from test/automated/seq-tests.el with 95% similarity]
test/lisp/emacs-lisp/subr-x-tests.el [moved from test/automated/subr-x-tests.el with 100% similarity]
test/lisp/emacs-lisp/tabulated-list-test.el [moved from test/automated/tabulated-list-test.el with 100% similarity]
test/lisp/emacs-lisp/thunk-tests.el [moved from test/automated/thunk-tests.el with 100% similarity]
test/lisp/emacs-lisp/timer-tests.el [moved from test/automated/timer-tests.el with 100% similarity]
test/lisp/epg-tests.el [moved from test/automated/epg-tests.el with 100% similarity]
test/lisp/erc/erc-track-tests.el [new file with mode: 0644]
test/lisp/eshell/eshell.el [moved from test/automated/eshell.el with 100% similarity]
test/lisp/faces-tests.el [moved from test/automated/faces-tests.el with 100% similarity]
test/lisp/filenotify-tests.el [moved from test/automated/file-notify-tests.el with 93% similarity]
test/lisp/gnus/gnus-tests.el [moved from test/automated/gnus-tests.el with 100% similarity]
test/lisp/gnus/message-tests.el [moved from test/automated/message-mode-tests.el with 53% similarity]
test/lisp/help-fns-tests.el [moved from test/automated/help-fns.el with 100% similarity]
test/lisp/htmlfontify-tests.el [new file with mode: 0644]
test/lisp/ibuffer-tests.el [new file with mode: 0644]
test/lisp/imenu-tests.el [moved from test/automated/imenu-test.el with 100% similarity]
test/lisp/info-xref-tests.el [moved from test/automated/info-xref.el with 100% similarity]
test/lisp/international/mule-util-tests.el [moved from test/automated/mule-util.el with 100% similarity]
test/lisp/isearch-tests.el [moved from test/automated/isearch-tests.el with 100% similarity]
test/lisp/json-tests.el [moved from test/automated/json-tests.el with 100% similarity]
test/lisp/legacy/bytecomp-tests.el [moved from test/automated/bytecomp-tests.el with 100% similarity]
test/lisp/legacy/coding-tests.el [moved from test/automated/coding-tests.el with 100% similarity]
test/lisp/legacy/core-elisp-tests.el [moved from test/automated/core-elisp-tests.el with 100% similarity]
test/lisp/legacy/decoder-tests.el [moved from test/automated/decoder-tests.el with 100% similarity]
test/lisp/legacy/files-tests.el [moved from test/automated/files.el with 100% similarity]
test/lisp/legacy/font-parse-tests.el [moved from test/automated/font-parse-tests.el with 100% similarity]
test/lisp/legacy/lexbind-tests.el [moved from test/automated/lexbind-tests.el with 100% similarity]
test/lisp/legacy/occur-tests.el [moved from test/automated/occur-tests.el with 100% similarity]
test/lisp/legacy/process-tests.el [moved from test/automated/process-tests.el with 100% similarity]
test/lisp/legacy/syntax-tests.el [moved from test/automated/syntax-tests.el with 100% similarity]
test/lisp/legacy/textprop-tests.el [moved from test/automated/textprop-tests.el with 100% similarity]
test/lisp/legacy/undo-tests.el [moved from test/automated/undo-tests.el with 100% similarity]
test/lisp/mail/rmail-tests.el [new file with mode: 0644]
test/lisp/man-tests.el [moved from test/automated/man-tests.el with 100% similarity]
test/lisp/minibuffer-tests.el [moved from test/automated/completion-tests.el with 100% similarity]
test/lisp/net/dbus-tests.el [moved from test/automated/dbus-tests.el with 100% similarity]
test/lisp/net/network-stream-tests.el [new file with mode: 0644]
test/lisp/net/newsticker-tests.el [moved from test/automated/newsticker-tests.el with 100% similarity]
test/lisp/net/sasl-scram-rfc-tests.el [moved from test/automated/sasl-scram-rfc-tests.el with 100% similarity]
test/lisp/net/shr-tests.el [new file with mode: 0644]
test/lisp/net/tramp-tests.el [moved from test/automated/tramp-tests.el with 100% similarity]
test/lisp/obarray-tests.el [moved from test/automated/obarray-tests.el with 100% similarity]
test/lisp/progmodes/compile-tests.el [moved from test/automated/compile-tests.el with 98% similarity]
test/lisp/progmodes/elisp-mode-tests.el [moved from test/automated/elisp-mode-tests.el with 95% similarity]
test/lisp/progmodes/f90.el [moved from test/automated/f90.el with 100% similarity]
test/lisp/progmodes/flymake-resources/Makefile [moved from test/automated/data/flymake/Makefile with 100% similarity]
test/lisp/progmodes/flymake-resources/test.c [moved from test/automated/data/flymake/test.c with 100% similarity]
test/lisp/progmodes/flymake-resources/test.pl [moved from test/automated/data/flymake/test.pl with 100% similarity]
test/lisp/progmodes/flymake-tests.el [moved from test/automated/flymake-tests.el with 97% similarity]
test/lisp/progmodes/python-tests.el [moved from test/automated/python-tests.el with 100% similarity]
test/lisp/progmodes/ruby-mode-tests.el [moved from test/automated/ruby-mode-tests.el with 100% similarity]
test/lisp/progmodes/subword-tests.el [moved from test/automated/subword-tests.el with 100% similarity]
test/lisp/ps-print-tests.el [moved from lisp/obsolete/keyswap.el with 56% similarity]
test/lisp/replace-tests.el [moved from test/automated/replace-tests.el with 100% similarity]
test/lisp/simple-tests.el [moved from test/automated/simple-test.el with 100% similarity]
test/lisp/sort-tests.el [moved from test/automated/sort-tests.el with 100% similarity]
test/lisp/subr-tests.el [moved from test/automated/subr-tests.el with 100% similarity]
test/lisp/textmodes/css-mode-tests.el [new file with mode: 0644]
test/lisp/textmodes/reftex-tests.el [moved from test/automated/reftex-tests.el with 96% similarity]
test/lisp/textmodes/sgml-mode-tests.el [moved from test/automated/sgml-mode-tests.el with 100% similarity]
test/lisp/textmodes/tildify-tests.el [moved from test/automated/tildify-tests.el with 100% similarity]
test/lisp/thingatpt-tests.el [moved from test/automated/thingatpt.el with 100% similarity]
test/lisp/url/url-auth-tests.el [new file with mode: 0644]
test/lisp/url/url-expand-tests.el [moved from test/automated/url-expand-tests.el with 100% similarity]
test/lisp/url/url-future-tests.el [moved from test/automated/url-future-tests.el with 100% similarity]
test/lisp/url/url-parse-tests.el [moved from test/automated/url-parse-tests.el with 100% similarity]
test/lisp/url/url-util-tests.el [moved from test/automated/url-util-tests.el with 100% similarity]
test/lisp/vc/add-log-tests.el [moved from test/automated/add-log-tests.el with 100% similarity]
test/lisp/vc/vc-bzr-tests.el [moved from test/automated/vc-bzr.el with 96% similarity]
test/lisp/vc/vc-hg.el [moved from test/automated/vc-hg.el with 100% similarity]
test/lisp/vc/vc-tests.el [moved from test/automated/vc-tests.el with 75% similarity]
test/lisp/xml-tests.el [moved from test/automated/xml-parse-tests.el with 100% similarity]
test/lisp/xt-mouse-tests.el [moved from test/automated/xt-mouse-tests.el with 100% similarity]
test/make-test-deps.emacs-lisp [new file with mode: 0644]
test/manual/BidiCharacterTest.txt [moved from test/BidiCharacterTest.txt with 100% similarity]
test/manual/biditest.el [moved from test/biditest.el with 100% similarity]
test/manual/cedet/cedet-utests.el [moved from test/cedet/cedet-utests.el with 100% similarity]
test/manual/cedet/ede-tests.el [moved from test/cedet/ede-tests.el with 100% similarity]
test/manual/cedet/semantic-ia-utest.el [moved from test/cedet/semantic-ia-utest.el with 100% similarity]
test/manual/cedet/semantic-tests.el [moved from test/cedet/semantic-tests.el with 100% similarity]
test/manual/cedet/semantic-utest-c.el [moved from test/cedet/semantic-utest-c.el with 100% similarity]
test/manual/cedet/semantic-utest.el [moved from test/cedet/semantic-utest.el with 100% similarity]
test/manual/cedet/srecode-tests.el [moved from test/cedet/srecode-tests.el with 100% similarity]
test/manual/cedet/tests/test.c [moved from test/cedet/tests/test.c with 100% similarity]
test/manual/cedet/tests/test.el [moved from test/cedet/tests/test.el with 100% similarity]
test/manual/cedet/tests/test.make [moved from test/cedet/tests/test.make with 100% similarity]
test/manual/cedet/tests/testdoublens.cpp [moved from test/cedet/tests/testdoublens.cpp with 100% similarity]
test/manual/cedet/tests/testdoublens.hpp [moved from test/cedet/tests/testdoublens.hpp with 100% similarity]
test/manual/cedet/tests/testfriends.cpp [moved from test/cedet/tests/testfriends.cpp with 100% similarity]
test/manual/cedet/tests/testjavacomp.java [moved from test/cedet/tests/testjavacomp.java with 100% similarity]
test/manual/cedet/tests/testnsp.cpp [moved from test/cedet/tests/testnsp.cpp with 100% similarity]
test/manual/cedet/tests/testpolymorph.cpp [moved from test/cedet/tests/testpolymorph.cpp with 100% similarity]
test/manual/cedet/tests/testspp.c [moved from test/cedet/tests/testspp.c with 100% similarity]
test/manual/cedet/tests/testsppcomplete.c [moved from test/cedet/tests/testsppcomplete.c with 100% similarity]
test/manual/cedet/tests/testsppreplace.c [moved from test/cedet/tests/testsppreplace.c with 100% similarity]
test/manual/cedet/tests/testsppreplaced.c [moved from test/cedet/tests/testsppreplaced.c with 100% similarity]
test/manual/cedet/tests/testsubclass.cpp [moved from test/cedet/tests/testsubclass.cpp with 100% similarity]
test/manual/cedet/tests/testsubclass.hh [moved from test/cedet/tests/testsubclass.hh with 100% similarity]
test/manual/cedet/tests/testtypedefs.cpp [moved from test/cedet/tests/testtypedefs.cpp with 100% similarity]
test/manual/cedet/tests/testvarnames.c [moved from test/cedet/tests/testvarnames.c with 100% similarity]
test/manual/etags/CTAGS.good [moved from test/etags/CTAGS.good with 100% similarity]
test/manual/etags/ETAGS.good_1 [moved from test/etags/ETAGS.good_1 with 100% similarity]
test/manual/etags/ETAGS.good_2 [moved from test/etags/ETAGS.good_2 with 100% similarity]
test/manual/etags/ETAGS.good_3 [moved from test/etags/ETAGS.good_3 with 100% similarity]
test/manual/etags/ETAGS.good_4 [moved from test/etags/ETAGS.good_4 with 100% similarity]
test/manual/etags/ETAGS.good_5 [moved from test/etags/ETAGS.good_5 with 100% similarity]
test/manual/etags/ETAGS.good_6 [moved from test/etags/ETAGS.good_6 with 100% similarity]
test/manual/etags/Makefile [moved from test/etags/Makefile with 98% similarity]
test/manual/etags/a-src/empty.zz [moved from test/etags/a-src/empty.zz with 100% similarity]
test/manual/etags/a-src/empty.zz.gz [moved from test/etags/a-src/empty.zz.gz with 100% similarity]
test/manual/etags/ada-src/2ataspri.adb [moved from test/etags/ada-src/2ataspri.adb with 100% similarity]
test/manual/etags/ada-src/2ataspri.ads [moved from test/etags/ada-src/2ataspri.ads with 100% similarity]
test/manual/etags/ada-src/etags-test-for.ada [moved from test/etags/ada-src/etags-test-for.ada with 100% similarity]
test/manual/etags/ada-src/waroquiers.ada [moved from test/etags/ada-src/waroquiers.ada with 100% similarity]
test/manual/etags/c-src/a/b/b.c [moved from test/etags/c-src/a/b/b.c with 100% similarity]
test/manual/etags/c-src/abbrev.c [moved from test/etags/c-src/abbrev.c with 100% similarity]
test/manual/etags/c-src/c.c [moved from test/etags/c-src/c.c with 100% similarity]
test/manual/etags/c-src/dostorture.c [moved from test/etags/c-src/dostorture.c with 100% similarity]
test/manual/etags/c-src/emacs/src/gmalloc.c [moved from test/etags/c-src/emacs/src/gmalloc.c with 100% similarity]
test/manual/etags/c-src/emacs/src/keyboard.c [moved from test/etags/c-src/emacs/src/keyboard.c with 100% similarity]
test/manual/etags/c-src/emacs/src/lisp.h [moved from test/etags/c-src/emacs/src/lisp.h with 100% similarity]
test/manual/etags/c-src/emacs/src/regex.h [moved from test/etags/c-src/emacs/src/regex.h with 100% similarity]
test/manual/etags/c-src/etags.c [moved from test/etags/c-src/etags.c with 100% similarity]
test/manual/etags/c-src/exit.c [moved from test/etags/c-src/exit.c with 100% similarity]
test/manual/etags/c-src/exit.strange_suffix [moved from test/etags/c-src/exit.strange_suffix with 100% similarity]
test/manual/etags/c-src/fail.c [moved from test/etags/c-src/fail.c with 100% similarity]
test/manual/etags/c-src/getopt.h [moved from test/etags/c-src/getopt.h with 100% similarity]
test/manual/etags/c-src/h.h [moved from test/etags/c-src/h.h with 100% similarity]
test/manual/etags/c-src/machsyscalls.c [moved from test/etags/c-src/machsyscalls.c with 100% similarity]
test/manual/etags/c-src/machsyscalls.h [moved from test/etags/c-src/machsyscalls.h with 100% similarity]
test/manual/etags/c-src/sysdep.h [moved from test/etags/c-src/sysdep.h with 100% similarity]
test/manual/etags/c-src/tab.c [moved from test/etags/c-src/tab.c with 100% similarity]
test/manual/etags/c-src/torture.c [moved from test/etags/c-src/torture.c with 100% similarity]
test/manual/etags/cp-src/MDiagArray2.h [moved from test/etags/cp-src/MDiagArray2.h with 100% similarity]
test/manual/etags/cp-src/Range.h [moved from test/etags/cp-src/Range.h with 100% similarity]
test/manual/etags/cp-src/burton.cpp [moved from test/etags/cp-src/burton.cpp with 100% similarity]
test/manual/etags/cp-src/c.C [moved from test/etags/cp-src/c.C with 100% similarity]
test/manual/etags/cp-src/clheir.cpp.gz [moved from test/etags/cp-src/clheir.cpp.gz with 100% similarity]
test/manual/etags/cp-src/clheir.hpp [moved from test/etags/cp-src/clheir.hpp with 100% similarity]
test/manual/etags/cp-src/conway.cpp [moved from test/etags/cp-src/conway.cpp with 100% similarity]
test/manual/etags/cp-src/conway.hpp [moved from test/etags/cp-src/conway.hpp with 100% similarity]
test/manual/etags/cp-src/fail.C [moved from test/etags/cp-src/fail.C with 100% similarity]
test/manual/etags/cp-src/functions.cpp [moved from test/etags/cp-src/functions.cpp with 96% similarity]
test/manual/etags/cp-src/screen.cpp [moved from test/etags/cp-src/screen.cpp with 100% similarity]
test/manual/etags/cp-src/screen.hpp [moved from test/etags/cp-src/screen.hpp with 100% similarity]
test/manual/etags/cp-src/x.cc [moved from test/etags/cp-src/x.cc with 100% similarity]
test/manual/etags/el-src/TAGTEST.EL [moved from test/etags/el-src/TAGTEST.EL with 100% similarity]
test/manual/etags/el-src/emacs/lisp/progmodes/etags.el [moved from test/etags/el-src/emacs/lisp/progmodes/etags.el with 100% similarity]
test/manual/etags/erl-src/gs_dialog.erl [moved from test/etags/erl-src/gs_dialog.erl with 100% similarity]
test/manual/etags/f-src/entry.for [moved from test/etags/f-src/entry.for with 100% similarity]
test/manual/etags/f-src/entry.strange.gz [moved from test/etags/f-src/entry.strange.gz with 100% similarity]
test/manual/etags/f-src/entry.strange_suffix [moved from test/etags/f-src/entry.strange_suffix with 100% similarity]
test/manual/etags/forth-src/test-forth.fth [moved from test/etags/forth-src/test-forth.fth with 100% similarity]
test/manual/etags/html-src/algrthms.html [moved from test/etags/html-src/algrthms.html with 100% similarity]
test/manual/etags/html-src/index.shtml [moved from test/etags/html-src/index.shtml with 100% similarity]
test/manual/etags/html-src/software.html [moved from test/etags/html-src/software.html with 99% similarity]
test/manual/etags/html-src/softwarelibero.html [moved from test/etags/html-src/softwarelibero.html with 100% similarity]
test/manual/etags/lua-src/allegro.lua [moved from test/etags/lua-src/allegro.lua with 100% similarity]
test/manual/etags/lua-src/test.lua [moved from test/etags/lua-src/test.lua with 100% similarity]
test/manual/etags/make-src/Makefile [moved from test/etags/make-src/Makefile with 100% similarity]
test/manual/etags/objc-src/PackInsp.h [moved from test/etags/objc-src/PackInsp.h with 100% similarity]
test/manual/etags/objc-src/PackInsp.m [moved from test/etags/objc-src/PackInsp.m with 100% similarity]
test/manual/etags/objc-src/Subprocess.h [moved from test/etags/objc-src/Subprocess.h with 100% similarity]
test/manual/etags/objc-src/Subprocess.m [moved from test/etags/objc-src/Subprocess.m with 100% similarity]
test/manual/etags/objcpp-src/SimpleCalc.H [moved from test/etags/objcpp-src/SimpleCalc.H with 100% similarity]
test/manual/etags/objcpp-src/SimpleCalc.M [moved from test/etags/objcpp-src/SimpleCalc.M with 100% similarity]
test/manual/etags/pas-src/common.pas [moved from test/etags/pas-src/common.pas with 100% similarity]
test/manual/etags/perl-src/htlmify-cystic [moved from test/etags/perl-src/htlmify-cystic with 100% similarity]
test/manual/etags/perl-src/kai-test.pl [moved from test/etags/perl-src/kai-test.pl with 100% similarity]
test/manual/etags/perl-src/yagrip.pl [moved from test/etags/perl-src/yagrip.pl with 100% similarity]
test/manual/etags/php-src/lce_functions.php [moved from test/etags/php-src/lce_functions.php with 100% similarity]
test/manual/etags/php-src/ptest.php [moved from test/etags/php-src/ptest.php with 100% similarity]
test/manual/etags/php-src/sendmail.php [moved from test/etags/php-src/sendmail.php with 100% similarity]
test/manual/etags/prol-src/natded.prolog [moved from test/etags/prol-src/natded.prolog with 100% similarity]
test/manual/etags/prol-src/ordsets.prolog [moved from test/etags/prol-src/ordsets.prolog with 100% similarity]
test/manual/etags/ps-src/rfc1245.ps [moved from test/etags/ps-src/rfc1245.ps with 100% similarity]
test/manual/etags/pyt-src/server.py [moved from test/etags/pyt-src/server.py with 100% similarity]
test/manual/etags/ruby-src/test.rb [moved from test/etags/ruby-src/test.rb with 100% similarity]
test/manual/etags/ruby-src/test1.ruby [new file with mode: 0644]
test/manual/etags/tex-src/gzip.texi [moved from test/etags/tex-src/gzip.texi with 100% similarity]
test/manual/etags/tex-src/nonewline.tex [moved from test/etags/tex-src/nonewline.tex with 100% similarity]
test/manual/etags/tex-src/testenv.tex [moved from test/etags/tex-src/testenv.tex with 100% similarity]
test/manual/etags/tex-src/texinfo.tex [moved from test/etags/tex-src/texinfo.tex with 100% similarity]
test/manual/etags/y-src/atest.y [moved from test/etags/y-src/atest.y with 100% similarity]
test/manual/etags/y-src/cccp.c [moved from test/etags/y-src/cccp.c with 100% similarity]
test/manual/etags/y-src/cccp.y [moved from test/etags/y-src/cccp.y with 100% similarity]
test/manual/etags/y-src/parse.c [moved from test/etags/y-src/parse.c with 100% similarity]
test/manual/etags/y-src/parse.y [moved from test/etags/y-src/parse.y with 100% similarity]
test/manual/indent/Makefile [moved from test/indent/Makefile with 100% similarity]
test/manual/indent/css-mode.css [moved from test/indent/css-mode.css with 100% similarity]
test/manual/indent/js-indent-init-dynamic.js [moved from test/indent/js-indent-init-dynamic.js with 100% similarity]
test/manual/indent/js-indent-init-t.js [moved from test/indent/js-indent-init-t.js with 100% similarity]
test/manual/indent/js-jsx.js [moved from test/indent/js-jsx.js with 100% similarity]
test/manual/indent/js.js [moved from test/indent/js.js with 100% similarity]
test/manual/indent/latex-mode.tex [moved from test/indent/latex-mode.tex with 100% similarity]
test/manual/indent/modula2.mod [moved from test/indent/modula2.mod with 100% similarity]
test/manual/indent/nxml.xml [moved from test/indent/nxml.xml with 100% similarity]
test/manual/indent/octave.m [moved from test/indent/octave.m with 100% similarity]
test/manual/indent/pascal.pas [moved from test/indent/pascal.pas with 100% similarity]
test/manual/indent/perl.perl [moved from test/indent/perl.perl with 100% similarity]
test/manual/indent/prolog.prolog [moved from test/indent/prolog.prolog with 100% similarity]
test/manual/indent/ps-mode.ps [moved from test/indent/ps-mode.ps with 100% similarity]
test/manual/indent/ruby.rb [moved from test/indent/ruby.rb with 100% similarity]
test/manual/indent/scheme.scm [moved from test/indent/scheme.scm with 100% similarity]
test/manual/indent/scss-mode.scss [moved from test/indent/scss-mode.scss with 100% similarity]
test/manual/indent/sgml-mode-attribute.html [moved from test/indent/sgml-mode-attribute.html with 100% similarity]
test/manual/indent/shell.rc [moved from test/indent/shell.rc with 100% similarity]
test/manual/indent/shell.sh [moved from test/indent/shell.sh with 100% similarity]
test/manual/redisplay-testsuite.el [moved from test/redisplay-testsuite.el with 100% similarity]
test/manual/rmailmm.el [moved from test/rmailmm.el with 100% similarity]
test/src/alloc-tests.el [moved from test/automated/finalizer-tests.el with 93% similarity]
test/src/buffer-tests.el [moved from test/automated/buffer-tests.el with 100% similarity]
test/src/cmds-tests.el [moved from test/automated/cmds-tests.el with 100% similarity]
test/src/data-tests.el [moved from test/automated/data-tests.el with 100% similarity]
test/src/decompress-tests.el [moved from test/automated/zlib-tests.el with 92% similarity]
test/src/fns-tests.el [moved from test/automated/fns-tests.el with 79% similarity]
test/src/inotify-tests.el [moved from test/automated/inotify-test.el with 100% similarity]
test/src/keymap-tests.el [moved from test/automated/keymap-tests.el with 100% similarity]
test/src/lread-tests.el [new file with mode: 0644]
test/src/print-tests.el [moved from test/automated/print-tests.el with 100% similarity]
test/src/xml-tests.el [moved from test/automated/libxml-tests.el with 100% similarity]

index 9853d7b5d88b558b7ebd754c6ddbd3fbd77ca0a2..1aa71ff6f15e40202bf270afae5d99a6a1c915a7 100644 (file)
@@ -1,7 +1,10 @@
 ((nil . ((tab-width . 8)
          (sentence-end-double-space . t)
          (fill-column . 70)))
- (c-mode . ((c-file-style . "GNU")))
+ (c-mode . ((c-file-style . "GNU")
+            (c-noise-macro-with-parens-names . ("IF_LINT"))
+            (eval . (c-make-noise-macro-regexps))
+            ))
  (objc-mode . ((c-file-style . "GNU")))
  (log-edit-mode . ((log-edit-font-lock-gnu-style . t)
                    (log-edit-setup-add-author . t)))
index 5ccf9a5eabbc1209e116b674170bc573e6b16ae4..13e58a87e9fe38630c764ab1c657ac9c53c8a0bc 100644 (file)
@@ -47,6 +47,52 @@ doc/misc/texinfo.tex -whitespace=blank-at-eol
 *.tiff binary
 etc/e/eterm-color binary
 
+# Git's builtin diff hunk header styles.
+*.ada diff=ada
+*.[ch] diff=cpp
+*.cc diff=cpp
+*.cpp diff=cpp
+*.hh diff=cpp
+*.for diff=fortran
+*.html diff=html
+*.shtml diff=html
+*.xml diff=html
+*.java diff=java
+*.m diff=objc
+*.perl diff=perl
+*.pl diff=perl
+*.php diff=php
+*.py diff=python
+*.rb diff=ruby
+*.ruby diff=ruby
+*.tex diff=tex
+
 # Hooks for non-default diff hunk headers; see autogen.sh.
 *.el diff=elisp
+*.ac diff=m4
+*.m4 diff=m4
+*.mk diff=make
+*[Mm]akefile diff=make
+Makefile.in diff=make
+*.sh diff=shell
 *.texi diff=texinfo
+#
+# Diff hunk header special-case file names.
+admin/build-configs diff=perl
+admin/charsets/mapconv diff=shell
+admin/diff-tar-files diff=shell
+admin/make-emacs diff=perl
+admin/merge-gnulib diff=shell
+admin/merge-pkg-config diff=shell
+admin/quick-install-emacs diff=shell
+admin/update-copyright diff=shell
+admin/update_autogen diff=shell
+build-aux/git-hooks/commit-msg diff=shell
+build-aux/git-hooks/pre-commit diff=shell
+build-aux/gitlog-to-emacslog diff=shell
+build-aux/make-info-dir diff=shell
+build-aux/move-if-change diff=shell
+build-aux/msys-to-w32 diff=shell
+build-aux/update-subdirs diff=shell
+lib-src/rcs2log diff=shell
+/make-dist diff=shell
index 7c8b74336d0e6aca267d212ee17f10e26d14b478..94c4ba8e4bba77bd2f43177e3a0f3774610f5e38 100644 (file)
@@ -43,10 +43,10 @@ Makefile
 makefile
 !etc/refcards/Makefile
 !modules/mod-test/Makefile
-!test/automated/data/flymake/Makefile
-!test/indent/Makefile
-!test/etags/Makefile
-!test/etags/make-src/Makefile
+!test/lisp/progmodes/flymake-resources/Makefile
+!test/manual/indent/Makefile
+!test/manual/etags/Makefile
+!test/manual/etags/make-src/Makefile
 /*.cache
 /confdefs.h
 /config.status
@@ -116,6 +116,7 @@ lisp/leim/quail/quick-b5.el
 lisp/leim/quail/quick-cns.el
 lisp/leim/quail/tsang-b5.el
 lisp/leim/quail/tsang-cns.el
+lisp/mh-e/mh-autoloads.el
 lisp/subdirs.el
 
 # Dependencies.
@@ -151,11 +152,13 @@ src/*.map
 
 # Tests.
 test/indent/*.new
-test/biditest.txt
-test/etags/srclist
-test/etags/regexfile
-test/etags/ETAGS
-test/etags/CTAGS
+test/manual/biditest.txt
+test/manual/etags/srclist
+test/manual/etags/regexfile
+test/manual/etags/ETAGS
+test/manual/etags/CTAGS
+# Generated by test/make-test-deps.emacs-lisp
+test/make-test-deps.mk
 
 # ctags, etags.
 TAGS
index 5102b4fe4f14ee22e322cb52526d1d08dc0a66f0..e39c665f21680ff2828b0caa57b0046035445616 100644 (file)
@@ -233,6 +233,17 @@ above, are recorded by the tracker with the corresponding bugs/issues.
 GNU ELPA has a 'debbugs' package that allows accessing the tracker
 database from Emacs.
 
+Bugs needs regular attention.  A large backlog of bugs is
+disheartening to the developers, and a culture of ignoring bugs is
+harmful to users, who expect software that works.  Bugs have to be
+regularly looked at and acted upon.  Not all bugs are critical, but at
+the least, each bug needs to be regularly re-reviewed to make sure it
+is still reproducible.
+
+The process of going through old or new bugs and acting on them is
+called bug triage.  This process is described in the file
+admin/notes/bug-triage.
+
 ** Documenting your changes
 
 Any change that matters to end-users should have an entry in etc/NEWS.
@@ -264,10 +275,9 @@ If your test lasts longer than some few seconds, mark it in its
 'ert-deftest' definition with ":tags '(:expensive-test)".
 
 To run tests on the entire Emacs tree, run "make check" from the
-top-level directory.  Most tests are in the directory
-"test/automated".  From the "test/automated" directory, run "make
-<filename>" to run the tests for <filename>.el(c).  See "test/README"
-for more information.
+top-level directory.  Most tests are in the directory "test/".  From
+the "test/" directory, run "make <filename>" to run the tests for
+<filename>.el(c).  See "test/README" for more information.
 
 ** Understanding Emacs internals
 
index eb336c767e95f97251e36af2fae35817f00e399f..04ecc82901e8673bbdcd2ddeeb11a49d029c3e16 100644 (file)
@@ -1,11 +1,11 @@
-2016-03-02  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Fix Bug#22859
 
        * lisp/filenotify.el (file-notify-callback): Return a `deleted'
        event in case of kqueue and file1 is nil.  (Bug#22859)
 
-2016-03-01  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix reordering of bidi text in an isolate inside an override
 
@@ -15,7 +15,7 @@
        isolate when the FSI...PDI text is inside a directional override.
        (Bug#22786)
 
-2016-03-01  Alan Mackenzie  <acm@muc.de>
+2016-03-04  Alan Mackenzie  <acm@muc.de>
 
        Document c-guess-basic-syntax in the CC Mode manual.
 
        (Custom Line-Up): Add a note on using c-guess-basic-syntax with a pxref to
        Syntactic Analysis.
 
-2016-03-01  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Fix targets in test/automated/Makefile.in
 
        * test/automated/Makefile.in: Use $(SELECTOR_DEFAULT) also for
        empty target and target all.
 
-2016-03-01  Leo Liu  <sdl.web@gmail.com>
+2016-03-04  Leo Liu  <sdl.web@gmail.com>
 
        Comment on last change to define-derived-mode
 
        * lisp/emacs-lisp/derived.el (define-derived-mode): Add comment.
 
-2016-03-01  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Allow binding `url-mime-accept-string'
 
 
        (cherry picked from commit 144bb0cf322b9756d29def3e27a42303e2edce43)
 
-2016-03-01  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Also allow setting the paragraph direction to nil
 
        * lisp/net/eww.el (eww-toggle-paragraph-direction): Also allow
        setting the paragraph direction to nil ("auto").
 
-2016-02-29  Anders Lindgren  <andlind@gmail.com>
+2016-03-04  Anders Lindgren  <andlind@gmail.com>
 
        Made the new OS X visible bell more visible.
 
@@ -63,7 +63,7 @@
          "caution" image five times, as the image in its original size
          was hard to see.
 
-2016-02-29  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Use the correct background color when filling nested <divs>
 
@@ -74,7 +74,7 @@
 
        (cherry picked from commit cad0bc70558f9c28c808711c5295dec9fc5ad6e5)
 
-2016-02-29  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Make <div> in <li> not insert extra newlines
 
@@ -85,7 +85,7 @@
 
        (cherry picked from commit 379a846b8548dc32a9019ef0a37c02f62cd9bad1)
 
-2016-02-29  Dmitry Gutov  <dgutov@yandex.ru>
+2016-03-04  Dmitry Gutov  <dgutov@yandex.ru>
 
        Uncomment the next-error-function integration in xref
 
        Uncomment the next-error-function integration
        (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20489#110).
 
-2016-02-29  Dmitry Gutov  <dgutov@yandex.ru>
+2016-03-04  Dmitry Gutov  <dgutov@yandex.ru>
 
        Remove the word "valid", to avoid ambiguity
 
        * doc/emacs/maintaining.texi (Identifier Search)
        (Looking Up Identifiers): Remove the word "valid" (bug#22692).
 
-2016-02-28  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
 
-2016-02-28  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Set auto-revert-use-notify to nil in global-auto-revert-mode.  (Bug#22814)
 
        * lisp/autorevert.el (global-auto-revert-mode): Set
        `auto-revert-use-notify' to nil.  (Bug#22814)
 
-2016-02-28  Paul Eggert  <eggert@cs.ucla.edu>
+2016-03-04  Paul Eggert  <eggert@cs.ucla.edu>
 
        * etc/TODO: Minor quoting and grammar fixes.
 
-2016-02-28  Friedrich Beckmann  <friedrich.beckmann@gmx.de>  (tiny change)
+2016-03-04  Friedrich Beckmann  <friedrich.beckmann@gmx.de>  (tiny change)
 
        Fix ModelSim error parsing
 
        * lisp/progmodes/vhdl-mode.el (vhdl-compiler-alist): Fix
        ModelSim error parsing (bug#5768).
 
-2016-02-28  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Make parse-time-string-chars faster
 
        * lisp/calendar/parse-time.el (parse-time-string-chars): Clean
        up the code (backport:).
 
-2016-02-28  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Add a eww command to toggle paragraph direction
 
 
        * doc/misc/eww.texi (Advanced): Mention the `D' command.
 
-2016-02-27  Glenn Morris  <rgm@gnu.org>
+2016-03-04  Glenn Morris  <rgm@gnu.org>
 
        * nextstep/WISHLIST: Merge into etc/TODO and remove.
 
        * etc/TODO: Merge in items from nextstep/WISHLIST.
        * nextstep/README: Update for this change.
 
-2016-02-27  Andreas Schwab  <schwab@linux-m68k.org>
+2016-03-04  Andreas Schwab  <schwab@linux-m68k.org>
 
        Fix char signedness issue in bidi code
 
        * src/dispextern.h (struct bidi_t): Change type of resolved_level
        and isolate_level to signed char.  (Bug#22830)
 
-2016-02-27  Andreas Schwab  <schwab@linux-m68k.org>
+2016-03-04  Andreas Schwab  <schwab@linux-m68k.org>
 
        * lib-src/pop.c (socket_connection): Fix format string.
 
-2016-02-27  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Avoid inflooping in thing-at-point-looking-at
 
        (Bug#22756)
        Describe the argument DISTANCE in the doc string.
 
-2016-02-27  Leo Liu  <sdl.web@gmail.com>
+2016-03-04  Leo Liu  <sdl.web@gmail.com>
 
        * lisp/emacs-lisp/derived.el (define-derived-mode): Revert indent change.
 
-2016-02-26  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        etc/PROBLEMS: Mention problems with using file descriptors
 
        * etc/PROBLEMS: Mention problems with using file descriptors
        of kqueue file notification library.
 
-2016-02-26  Kaushal Modi  <kaushal.modi@gmail.com>
+2016-03-04  Kaushal Modi  <kaushal.modi@gmail.com>
 
        * lisp/apropos.el (apropos-variable): Doc fix.  (Bug#22813).
 
-2016-02-25  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Remove unneeded workaround in xftfont.c
 
        XftTextExtents8 behavior, as it is no longer needed.  Suggested by
        Fangwen Yu <yynyygy@gmail.com>.  (Bug#22383)
 
-2016-02-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+2016-03-04  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * lisp/saveplace.el (save-place-local-mode): New minor mode
 
        (save-place--setup-hooks): New function.
        (save-place-mode): Use it.
 
-2016-02-25  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix redisplay on a TTY after 'make-frame'
 
        * src/xdisp.c (clear_garbaged_frames): Don't clear/redraw a
        garbaged TTY frame if it is not the selected frame.  (Bug#22794)
 
-2016-02-25  Alan Mackenzie  <acm@muc.de>
+2016-03-04  Alan Mackenzie  <acm@muc.de>
 
        Make double-click-1 work with unbalanced parens in CC Mode.  Fixes bug#5560.
 
        * lisp/mouse.el (mouse-start-end): check the syntax of alleged parens with
        `syntax-after' to ensure syntax-table text properties are respected.
 
-2016-02-25  Magnus Henoch  <magnus.henoch@gmail.com>
+2016-03-04  Magnus Henoch  <magnus.henoch@gmail.com>
 
        Input method polish-slash should not use keyboard translation
 
        * lisp/leim/quail/latin-pre.el ("polish-slash"): Input method
        polish-slash should not use keyboard translation (bug#19081).
 
-2016-02-25  Chris Feng  <chris.w.feng@gmail.com>
+2016-03-04  Chris Feng  <chris.w.feng@gmail.com>
 
        Fix an assertion
 
        * src/dispnew.c (clear_glyph_matrix_rows): Test matrix->nrows == 0 (which
        implies start == 0) separately.
 
-2016-02-24  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix 'toggle-save-place'
 
        * lisp/saveplace.el (toggle-save-place): Set up hooks necessary to
        support save-place in the buffer.  Autoload the command.
 
-2016-02-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+2016-03-04  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * src/keyboard.c: Don't inadvertently set immediate_echo (bug#22581)
 
        immediate_echo when we don't want any echo-keystrokes.
        (echo_keystrokes_p): Move earlier.
 
-2016-02-24  Chris Zheng  <chriszheng99@gmail.com>  (tiny change)
+2016-03-04  Chris Zheng  <chriszheng99@gmail.com>  (tiny change)
 
        Minor fixes in calculator.el
 
        (calculator-last-input): Fix a bug with pressing F1.
        (Bug#20764)
 
-2016-02-24  Anders Lindgren  <andlind@gmail.com>
+2016-03-04  Anders Lindgren  <andlind@gmail.com>
 
        Update HISTORY section in readme for the NextStep interface.
 
        * nextstep/README: Update HISTORY after suggestion
        from former maintainer Adrian Robert.
 
-2016-02-24  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Improve documentation of 'save-place-mode'
 
        * etc/NEWS: Mention the need to call 'save-place-mode' for turning
        on the mode in all buffers.
 
-2016-02-24  Chris Feng  <chris.w.feng@gmail.com>  (tiny change)
+2016-03-04  Chris Feng  <chris.w.feng@gmail.com>  (tiny change)
 
        Allocate glyph matrices for the initial frame
 
 
        * src/dispnew.c (clear_glyph_matrix_rows): matrix->nrows can be 0.
 
-2016-02-24  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix white space in last checkin
 
-2016-02-24  Dima Kogan  <gnuplot@dima.secretsauce.net>
+2016-03-04  Dima Kogan  <gnuplot@dima.secretsauce.net>
 
        Make `insert-pair' always leave the cursor where documented
 
        after the opening character. This was not true if the pair was
        inserted to surround a region (bug#16949).
 
-2016-02-24  Kaushal Modi  <kaushal.modi@gmail.com>
+2016-03-04  Kaushal Modi  <kaushal.modi@gmail.com>
 
        etc/NEWS: Mention the new second parameter to `package-install'
 
        * etc/NEWS: Mention the new second parameter to
        `package-install' (bug#22784).
 
-2016-02-24  John F. Trudeau  <JFTrudeau@aetna.com>  (tiny change)
+2016-03-04  John F. Trudeau  <JFTrudeau@aetna.com>  (tiny change)
 
        Highlight assignments in Makefiles more correctly
 
 
        (cherry picked from commit bbd86c5642bd62c43d72391669f28eaa14459fd5)
 
-2016-02-23  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Improve documentation of focus-related hooks
 
        * doc/lispref/commands.texi (Focus Events): Mention focus-related
        hooks.  (Bug#21728)
 
-2016-02-23  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Further improve doc string of 'disable-point-adjustment'
 
        * src/keyboard.c (syms_of_keyboard): <disable-point-adjustment>
        <global-disable-point-adjustment>: Clarify doc strings.  (Bug#22771)
 
-2016-02-23  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Further adaptions in file-notify-tests.el for w32notify
 
        (file-notify-test08-watched-file-in-watched-dir):
        Adapt expected events for w32notify.
 
-2016-02-23  Jan Tatarik  <jan.tatarik@gmail.com>
+2016-03-04  Jan Tatarik  <jan.tatarik@gmail.com>
 
        Don't bug out on localised dates in gnus-icalendar
 
        (gnus-icalendar-event:org-timestamp): Don't bug out on
        localised dates.
 
-2016-02-23  Drew Adams  <drew.adams@oracle.com>
+2016-03-04  Drew Adams  <drew.adams@oracle.com>
 
        (ls-lisp-insert-directory): Make -B work
 
 
        (cherry picked from commit ef52e66efd78aac4c4e5bd5e11870e5ba3b37a1e)
 
-2016-02-23  Vaidheeswaran C  <vaidheeswaran.chinnaraju@gmail.com>
+2016-03-04  Vaidheeswaran C  <vaidheeswaran.chinnaraju@gmail.com>
 
        Make buttons in header lines work
 
 
        (cherry picked from commit c11e565a6b6d09fa39d4c3ef65bef08190eaecc1)
 
-2016-02-23  Christopher Wellons  <wellons@nullprogram.com>
+2016-03-04  Christopher Wellons  <wellons@nullprogram.com>
 
        Make setf for frame-height/width work again
 
        * lisp/emacs-lisp/cl-lib.el (frame-height): Make setf for
        frame-height/width work again (bug#21979).
 
-2016-02-23  Łukasz Stelmach  <stlman@poczta.fm>
+2016-03-04  Łukasz Stelmach  <stlman@poczta.fm>
 
        Encode header strings before printing
 
 
        (cherry picked from commit 3cedbdcc71ebefc12bd20ec84f74251fe99ee7d0)
 
-2016-02-23  Nicolas Richard  <youngfrog@members.fsf.org>
+2016-03-04  Nicolas Richard  <youngfrog@members.fsf.org>
 
        (cl-union): Do not ignore :test argument when lists are equal.
 
 
        * test/automated/cl-seq-tests.el: New file (bug#22729).
 
-2016-02-23  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Add `isearch' to `basic-faces'
 
        * lisp/replace.el (match): Add `isearch' to the `basic-faces'
        group, too (bug#22760).
 
-2016-02-23  Dmitry Gutov  <dgutov@yandex.ru>
+2016-03-04  Dmitry Gutov  <dgutov@yandex.ru>
 
        Make $, : and @ "prefix characters" in ruby-mode
 
        (ruby-font-lock-keywords): Adjust the constants matcher for `:'
        not being a symbol constituent anymore.
 
-2016-02-23  Dmitry Gutov  <dgutov@yandex.ru>
+2016-03-04  Dmitry Gutov  <dgutov@yandex.ru>
 
        Make find-tag-default-bounds more strict
 
        * lisp/subr.el (find-tag-default-bounds): Delegate to
        bounds-of-thing-at-point (bug#22692).
 
-2016-02-22  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Minor fixes in filenotify.el
 
        (file-notify--event-watched-file): Use cl-caadr.
        (file-notify-callback): Handle also `ignore' events from inotify.
 
-2016-02-22  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Additional fixes for file notification
 
        (file-notify-test07-backup): Adapt expected events for gfilenotify.
        (file-notify-test08-watched-file-in-watched-dir): Improve.
 
-2016-02-22  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix documentation of 'global-disable-point-adjustment'
 
        * src/keyboard.c (syms_of_keyboard) <disable-point-adjustment>
        <global-disable-point-adjustment>: Doc fixes.  (Bug#22771)
 
-2016-02-22  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Set file modes of pinentry socket for extra safety
 
        This is just for extra safety since the parent directory is already
        protected with `server-ensure-safe-dir'.
 
-2016-02-22  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Clarify GnuPG version compatibility chapter
 
        * doc/misc/epa.texi (GnuPG version compatibility): Make the gpg-agent
        description a bit clearer.
 
-2016-02-22  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Revert "Change the default socket location for pinentry"
 
        This reverts commit e34fbdee8aca84b98393b06b2450837d175999ca.
        It turned out that the address is fixed in Pinentry itself.
 
-2016-02-21  Dmitry Gutov  <dgutov@yandex.ru>
+2016-03-04  Dmitry Gutov  <dgutov@yandex.ru>
 
        Kill off xref--display-history
 
        (xref--show-pos-in-buf): Update accordingly.
        (xref--xref-buffer-mode-map): Remove xref-quit binding.
 
-2016-02-21  Dmitry Gutov  <dgutov@yandex.ru>
+2016-03-04  Dmitry Gutov  <dgutov@yandex.ru>
 
        Keep the xref buffer visible until the user quits it explicitly
 
        (xref--find-xrefs, xref--find-definitions): Rename WINDOW argument
        to DISPLAY-ACTION as well.
 
-2016-02-21  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Change the default socket location for pinentry
 
        This is just for extra safety since the parent directory is already
        protected with `server-ensure-safe-dir'.
 
-2016-02-21  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Mention how to enable pinentry feature
 
        * etc/NEWS: Mention "gpgconf --reload gpg-agent".
        * lisp/net/pinentry.el: Likewise.
 
-2016-02-21  Paul Eggert  <eggert@cs.ucla.edu>
+2016-03-04  Paul Eggert  <eggert@cs.ucla.edu>
 
        Sync with gnulib
 
        2016-02-10 stdalign: port to older HP and IBM cc
        * doc/misc/texinfo.tex, lib/stdalign.in.h: Copy from gnulib.
 
-2016-02-21  David Engster  <deng@randomsample.de>
+2016-03-04  David Engster  <deng@randomsample.de>
 
        Remove `semanticdb-save-all-db-idle' from `auto-save-hook'
 
          already be called in the `semantic-idle-work-core-handler', which
          runs when Emacs is actually idle.
 
-2016-02-21  David Engster  <deng@randomsample.de>
+2016-03-04  David Engster  <deng@randomsample.de>
 
        Restore point when writing semantic table to disk
 
          `semantic-fetch-tags' in `save-excursion', since it might move point
          in current buffer. (Bug #22287)
 
-2016-02-21  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Mention pinentry.el in epa manual
 
        to enable pinentry.el.
        (Caching Passphrases): Add xref to the compatibility chapter.
 
-2016-02-21  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Fix Bug#22736
 
        (file-notify-test08-watched-file-in-watched-dir): Bind
        `file-notify--test-tmpfile' temporarily in `dir-callback'.
 
-2016-02-21  Wieland Hoffmann  <themineo@gmail.com>  (tiny change)
+2016-03-04  Wieland Hoffmann  <themineo@gmail.com>  (tiny change)
 
        Grammar fix in doc string
 
        * lisp/custom.el (defgroup): Grammar fix in doc string.
 
-2016-02-20  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Naming fix for consistency
 
        `epg-configuration-find' to be consistent with other epg-* functions.
        Change all callers.
 
-2016-02-20  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Prefer customized value for GnuPG executable
 
        * lisp/epg-config.el (epg-configuration-find): Don't check GPG
        configuration if it is already set with custom.  (Bug#22747)
 
-2016-02-20  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix memory reservation on MS-Windows
 
        no one can use, since memory reservation must produce 64KB-aligned
        addresses.  (Bug#22526)
 
-2016-02-20  Anders Lindgren  <andlind@gmail.com>
+2016-03-04  Anders Lindgren  <andlind@gmail.com>
 
        Update NextStep readme and add wish list.
 
        * nextstep/WISHLIST: New file containing list of issues and ideas
        associated with the NS port of Emacs.
 
-2016-02-20  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Report also result in `file-notify--test-event-handler'
 
-2016-02-20  Michael Albinus  <michael.albinus@gmx.de>
+2016-03-04  Michael Albinus  <michael.albinus@gmx.de>
 
        Improve file-notify-test08-watched-file-in-watched-dir
 
        `file-notify--test-results'.
        (file-notify-test08-watched-file-in-watched-dir): Fix docstring.
 
-2016-02-20  Stephen Berman  <stephen.berman@gmx.net>
+2016-03-04  Stephen Berman  <stephen.berman@gmx.net>
 
        Fix todo-mode item date editing bugs
 
        (todo-read-date): When using the numerical month date component make
        sure to use `*' for an arbitrary month instead of its numerical value.
 
-2016-02-20  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix "[:upper:]" for non-ASCII characters
 
        * src/regex.c (re_match_2_internal): Support [:upper:] and
        [:lower:] for non-ASCII characters.  (Bug#18150)
 
-2016-02-20  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Allow customising the article mode cursor behavior
 
        * lisp/gnus/gnus-art.el (gnus-article-show-cursor): New variable.
        (gnus-article-mode): Use it.
 
-2016-02-20  Ari Roponen  <ari.roponen@gmail.com>
+2016-03-04  Ari Roponen  <ari.roponen@gmail.com>
 
        Use pop-to-buffer-same-window in woman.el
 
        the wrong buffer by using `pop-to-buffer-same-window' (bug#22332).
        (WoMan-find-buffer): Ditto.
 
-2016-02-20  Tassilo Horn  <tsdh@gnu.org>
+2016-03-04  Tassilo Horn  <tsdh@gnu.org>
 
        New filenotify test for bug#22736
 
        (file-notify-test08-watched-file-in-watched-dir):
        (file-notify--test-desc1): New filenotify test for bug#22736
 
-2016-02-20  Marcin Borkowski  <mbork@mbork.pl>
+2016-03-04  Marcin Borkowski  <mbork@mbork.pl>
 
        Report critical battery errors
 
        * lisp/battery.el (battery-pmset): Report critical battery
        errors (bug#18157).
 
-2016-02-19  Kaushal Modi  <kaushal.modi@gmail.com>  (tiny change)
+2016-03-04  Kaushal Modi  <kaushal.modi@gmail.com>  (tiny change)
 
        Make eww message toggling message clearer
 
        * lisp/net/eww.el (eww-toggle-fonts): Make the message
        clearer.
 
-2016-02-19  Mark Oteiza  <mvoteiza@udel.edu>
+2016-03-04  Mark Oteiza  <mvoteiza@udel.edu>
 
        * lisp/calc/calc-units.el (math-standard-units): Update to 2014 CODATA adjustment.
 
-2016-02-18  Martin Rudalics  <rudalics@gmx.at>
+2016-03-04  Martin Rudalics  <rudalics@gmx.at>
 
        Fix bugs in window resizing code
 
        with preserved size would not get resized.  Also now signal an
        error when the window cannot be shrunk or enlarged as requested.
 
-2016-02-17  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix decoding DOS EOL in a unibyte buffer
 
        * src/coding.c (decode_eol): Loop over bytes, not characters.
        (Bug#5251)
 
-2016-02-17  Alan Mackenzie  <acm@muc.de>
+2016-03-04  Alan Mackenzie  <acm@muc.de>
 
        Correct c-parse-state cache manipulation error.
 
        * lisp/progmodes/cc-engine.el (c-invalidate-state-cache-1): Correct a
        comparison bound.  Amend comments.
 
-2016-02-17  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Take advantage of new GnuPG version check function
 
        (package-refresh-contents): Use `epg-configuration-find' to check if EPG
        is usable.
 
-2016-02-17  Daiki Ueno  <ueno@gnu.org>
+2016-03-04  Daiki Ueno  <ueno@gnu.org>
 
        Make GnuPG version check robuster
 
        (epg-configuration): Mark as obsolete.
        * lisp/epg.el (epg-context): Use `epg-configuration-find'.
 
-2016-02-17  Paul Eggert  <eggert@cs.ucla.edu>
+2016-03-04  Paul Eggert  <eggert@cs.ucla.edu>
 
        Fix x-load-color-file pointer signedness
 
        For sscanf and int *, use %d, not %u.
        Problem found on Ubuntu 15.10 x32, which lacks X support.
 
-2016-02-17  Paul Eggert  <eggert@cs.ucla.edu>
+2016-03-04  Paul Eggert  <eggert@cs.ucla.edu>
 
        * lisp/time-stamp.el (time-stamp-time-zone): Fix doc string punct.
 
-2016-02-16  Mark Oteiza  <mvoteiza@udel.edu>
+2016-03-04  Mark Oteiza  <mvoteiza@udel.edu>
 
        Follow convention for greek letter constants.
 
        * lisp/calc/calc-units.el (math-standard-units):
        Add "sigma" and alias σ to it.
 
-2016-02-16  Mark Oteiza  <mvoteiza@udel.edu>
+2016-03-04  Mark Oteiza  <mvoteiza@udel.edu>
 
        Add Stefan-Boltzmann constant to calc units table.
 
        * lisp/calc/calc-units.el (math-standard-units):
        Add Stefan-Boltzmann constant.
 
-2016-02-16  Mark Oteiza  <mvoteiza@udel.edu>
+2016-03-04  Mark Oteiza  <mvoteiza@udel.edu>
 
        * lisp/calc/calc-units.el (math-build-units-table-buffer): Use special-mode.
 
-2016-02-16  Glenn Morris  <rgm@gnu.org>
+2016-03-04  Glenn Morris  <rgm@gnu.org>
 
        Avoid loading cl-lib for term/xterm.elc, eg in -Q -nw.  (Bug#22669)
 
        * lisp/emacs-lisp/cl-generic.el (cl--generic-dispatchers):
        Prefill with relevant elements for term/xterm.
 
-2016-02-16  Tassilo Horn  <tsdh@gnu.org>
+2016-03-04  Tassilo Horn  <tsdh@gnu.org>
 
        Fix soffice UserInstallation-URL for Windows
 
        * lisp/doc-view.el (doc-view-odf->pdf-converter-soffice): Fix
        UserInstallation-URL when calling soffice on Windows.
 
-2016-02-16  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix display of <pre> elements
 
        parsing so that <pre> elements don't render with ^M at the end
        of the lines.
 
-2016-02-15  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Minor fixes in global-auto-composition-mode
 
        * lisp/composite.el (global-auto-composition-mode): Make it a
        globalized mode.  (Bug#22682)
 
-2016-02-15  Alan Mackenzie  <acm@muc.de>
+2016-03-04  Alan Mackenzie  <acm@muc.de>
 
        Allow arithmetic operators inside C++ template constructs.
 
        multichar operator in place of the former c->-op-without->-cont-regexp.
        Add code to skip forwards over a balanced parenthesized expression.
 
-2016-02-15  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Avoid crashes in semi-malformed 'condition-case'
 
        * src/eval.c (internal_lisp_condition_case): Treat a handler
        '(nil)' as if it were '(nil nil)'.  (Bug#22675)
 
-2016-02-15  Alan Mackenzie  <acm@muc.de>
+2016-03-04  Alan Mackenzie  <acm@muc.de>
 
        Allow arithmetic operators inside C++ template constructs.
 
        multichar operator in place of the former c->-op-without->-cont-regexp.
        Add code to skip forwards over a balanced parenthesized expression.
 
-2016-02-15  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix regression with 'recent-keys' and keyboard macros
 
        * src/keyboard.c (record_char): Don't record in 'recent_keys'
        events that come from executing keyboard macros.  (Bug#22674)
 
-2016-02-15  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix wording in a doc-view.el comment
 
        * lisp/doc-view.el (doc-view--current-cache-dir): Don't use
        "illegal" for something that is not against the law.
 
-2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
+2016-03-04  Paul Eggert  <eggert@cs.ucla.edu>
 
        CONTRIBUTE cleanups and updates
 
        * admin/notes/git-workflow: Change emacs-24 to emacs-25,
        and trunk to master.  This file still needs work.
 
-2016-02-14  Paul Eggert  <eggert@cs.ucla.edu>
+2016-03-04  Paul Eggert  <eggert@cs.ucla.edu>
 
        Port USE_STACK_LISP_OBJECTS fix to Clang
 
        Recent versions of Clang claim to be GCC 4.2.1 but do not have
        the GCC bug.
 
-2016-02-14  Paul Eggert  <eggert@cs.ucla.edu>
+2016-03-04  Paul Eggert  <eggert@cs.ucla.edu>
 
        Port to x86 GCC 4.3.1 and earlier
 
        * src/lisp.h (USE_STACK_LISP_OBJECTS): Default to false
        for GCC 4.3.1 and earlier.
 
-2016-02-14  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix point movement under 'scroll-conservatively'
 
        * src/xdisp.c (redisplay_window): Correct a typo in computing the
        effective number of text lines in a window.  (Bug#22637)
 
-2016-02-14  Thomas Plass  <thomas.plass@arcor.de>
+2016-03-04  Thomas Plass  <thomas.plass@arcor.de>
 
        Replace colon in file name (not legal on Windows)
 
        * lisp/doc-view.el (doc-view--current-cache-dir): Replace colon in file
        name (not legal on Windows). [tiny change]
 
-2016-02-14  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Fix a typo in edt.texi
 
        * doc/misc/edt.texi: Fix a typo in an email address.  Reported by
        "Herbert J. Skuhra" <herbert@mailbox.org>.
 
-2016-02-14  Eli Zaretskii  <eliz@gnu.org>
+2016-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        Make 'mmap_realloc' on MS-Windows more reliable
 
        if the call to VirtualAlloc to commit more pages fails.
        (Bug#22526)
 
-2016-02-14  Oscar Fuentes  <ofv@wanadoo.es>
+2016-03-04  Oscar Fuentes  <ofv@wanadoo.es>
 
        Grep alias `all' shall not match parent directory
 
        * lisp/progmodes/grep.el (grep-files-aliases): Don't match parent
          directory for `all'. Fixes bug#22577
 
-2016-02-13  Nicolas Petton  <nicolas@petton.fr>
+2016-03-04  Nicolas Petton  <nicolas@petton.fr>
 
        Bump version to 25.0.91
 
        * configure.ac:
        * msdos/sed2v2.inp: Bump version to 25.0.91.
 
-2016-02-13  Nicolas Petton  <nicolas@petton.fr>
+2016-03-04  Nicolas Petton  <nicolas@petton.fr>
 
        * etc/AUTHORS: Update the AUTHORS file
 
-2016-02-13  Glenn Morris  <rgm@gnu.org>
+2016-03-04  Glenn Morris  <rgm@gnu.org>
+2016-02-15  Glenn Morris  <rgm@gnu.org>
 
        * lisp/dired-aux.el: Require cl-lib.  (Bug#22613)
 
-2016-02-13  Eli Zaretskii  <eliz@gnu.org>
+2016-02-15  Eli Zaretskii  <eliz@gnu.org>
 
        Index tilde characters in names of backup files
 
        * doc/emacs/files.texi (Backup Names): Improve indexing.
        (Bug#22625)
 
-2016-02-13  Eli Zaretskii  <eliz@gnu.org>
+2016-02-15  Eli Zaretskii  <eliz@gnu.org>
 
        Document deprecation of hi-lock-mode's 'C-x w' bindings
 
 
        * etc/NEWS: Mark the deprecation entry as documented.
 
-2016-02-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+2016-02-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        Announce that the `C-x w' bindings are deprecated
 
-2016-02-13  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Suppress GNUstep hardening
 
        (GNU_OBJC_CFLAGS): Omit options like
        ‘-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1’.
 
-2016-02-12  Eli Zaretskii  <eliz@gnu.org>
+2016-02-15  Eli Zaretskii  <eliz@gnu.org>
 
        Fix redisplay after a large insertion
 
        "optimization 3" if the cursor ends up in a partially visible
        glyph row.  (Bug22637)
 
-2016-02-12  Andreas Schwab  <schwab@linux-m68k.org>
+2016-02-15  Andreas Schwab  <schwab@linux-m68k.org>
 
        Revert "Fix gnus-group-get-new-news-this-group on group with closed server"
 
                * lisp/gnus/nnimap.el (nnimap-change-group): Revert last
                change.  (Bug#22634)
 
-2016-02-11  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        * lib-src/make-docfile.c: Include stdarg.h.
 
-2016-02-11  Alan Mackenzie  <acm@muc.de>
+2016-02-15  Alan Mackenzie  <acm@muc.de>
 
        Extend gpm-mouse-mode's doc string and doc to point out limitations.
 
        * doc/emacs/frames.texi (Text-Only Mouse): Note the inability to transfer text
        between Emacs and other progrmas which use GPM.
 
-2016-02-11  Eli Zaretskii  <eliz@gnu.org>
+2016-02-15  Eli Zaretskii  <eliz@gnu.org>
 
        Revert "Backport: * lisp/isearch.el: Turn char-folding off by default"
 
 
        This reverts commit 12c50e82c9b432b2fc31f8fb2215f43ceea80822.
 
-2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Revert "Support integer image rotation and respect EXIF rotations"
 
 
        This change does not work on Fedora.
 
-2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Revert "Document EXIF image rotation"
 
 
        This change does not work on Fedora, for instance.
 
-2016-02-11  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Document OS X LANG default
 
        Document OS X Language and Region system preference.
        Suggested by Alan Third.
 
-2016-02-11  Alan Third  <alan@idiocy.org>
+2016-02-15  Alan Third  <alan@idiocy.org>
 
        Set locale when run from OS X GUI
 
        * src/nsterm.m (ns_init_locale): Get locale from OS and set LANG.
        * src/nsterm.h: Include ns_init_locale.
 
-2016-02-10  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        make-docfile cleanup for I/O, etc.
 
        (search_lisp_doc_at_eol): Don't worry about ungetc of EOF; it's
        portable now.
 
-2016-02-10  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Memory-management cleanup in make-docfile
 
        (write_globals, scan_c_stream, scan_lisp_file): Avoid memory leak.
        (scan_c_stream): Check for add_global failure.
 
-2016-02-10  Kevin Gallagher  <Kevin.Gallagher@boeing.com>
+2016-02-15  Kevin Gallagher  <Kevin.Gallagher@boeing.com>
 
        Kevin Gallagher has new email address
 
        * etc/edt-user.el:
        * doc/misc/edt.texi: Update Kevin Gallagher's email address.
 
-2016-02-10  Eli Zaretskii  <eliz@gnu.org>
+2016-02-15  Eli Zaretskii  <eliz@gnu.org>
 
        Improve doc strings of 'forward/backward-word-strictly'
 
        * src/syntax.c (Fforward_word): Refer to 'forward-word-strictly'
        in the doc string.  (Bug#22560)
 
-2016-02-10  Michael Albinus  <michael.albinus@gmx.de>
+2016-02-15  Michael Albinus  <michael.albinus@gmx.de>
 
        Describe Makefile test targets in test/README
 
        * Makefile.in:
        * test/README: Describe Makefile test targets.
 
-2016-02-10  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-15  Artur Malabarba  <bruce.connor.am@gmail.com>
 
        Backport: * lisp/isearch.el: Turn char-folding off by default
 
        (search-default-mode): Set default value to nil.
 
-2016-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Document EXIF image rotation
 
        * doc/lispref/display.texi (ImageMagick Images): Mention EXIF rotation.
 
-2016-02-10  Dima Kogan  <dima@secretsauce.net>
+2016-02-15  Dima Kogan  <dima@secretsauce.net>
 
        Support integer image rotation and respect EXIF rotations
 
        pre-rotated.  All information such as width/height is reported for the
        rotated image.
 
-2016-02-10  Matthew Carter  <m@ahungry.com>
+2016-02-15  Matthew Carter  <m@ahungry.com>
 
        Quote table names for postgres listings (sql-mode)
 
        * lisp/progmodes/sql.el (sql-postgres-completion-object): Avoid passing
          unquoted table names to the completion list.
 
-2016-02-10  Juri Linkov  <juri@linkov.net>
+2016-02-15  Juri Linkov  <juri@linkov.net>
 
        * lisp/replace.el (replace-match-maybe-edit): Make arg `backward' optional.
 
        (replace-search, replace-highlight): Make arg `backward' optional.
        (Bug#18388)
 
-2016-02-10  Juri Linkov  <juri@linkov.net>
+2016-02-15  Juri Linkov  <juri@linkov.net>
 
        * lisp/simple.el (next-line-or-history-element): Reset temporary-goal-column.
 
        (previous-line-or-history-element): Reset temporary-goal-column.
        Use end-of-visual-line instead of line-end-position.  (Bug#22544)
 
-2016-02-10  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Suppress ACL ops if configured with --disable-acl
 
        * src/fileio.c [!USE_ACL]: Do not include sys/acl.h.
        (Ffile_acl, Fset_file_acl) [!USE_ACL]: Return nil in this case.
 
-2016-02-09  Katsumi Yamaoka  <yamaoka@jpl.org>
+2016-02-15  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        Mention web bugs
 
        * doc/misc/emacs-mime.texi (Display Customization):
        Mention web bugs in the mm-html-blocked-images section.
 
-2016-02-09  Katsumi Yamaoka  <yamaoka@jpl.org>
+2016-02-15  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        Make mm-html-blocked-images default to "" again
 
        * doc/misc/emacs-mime.texi (Display Customization):
        Mention that mm-html-blocked-images defaults to "".
 
-2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Minor alignas cleanup
 
        * src/lisp.h (alignas): Remove now-redundant #ifdef that was left
        over from the old way of doing things, before Bug#20862 was fixed.
 
-2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Add lmalloc commentary and tweak laligned
 
        * src/alloc.c (laligned): Help compiler in a tiny way by putting
        the more-commonly-failing disjunct first.
 
-2016-02-09  Eli Zaretskii  <eliz@gnu.org>
+2016-02-15  Eli Zaretskii  <eliz@gnu.org>
 
        Clarify documentation of key binding conventions
 
        * doc/lispref/tips.texi (Key Binding Conventions): Clarify which
        "punctuation characters" are reserved after "C-c".  (Bug#22604)
 
-2016-02-09  Oscar Fuentes  <ofv@wanadoo.es>
+2016-02-15  Oscar Fuentes  <ofv@wanadoo.es>
 
        * etc/NEWS: mention the `vc-faces' customization group
 
-2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Sync with gnulib
 
        * doc/misc/texinfo.tex, lib/stdalign.in.h, m4/acl.m4, m4/getgroups.m4:
        Copy from gnulib.
 
-2016-02-09  Michael Albinus  <michael.albinus@gmx.de>
+2016-02-15  Michael Albinus  <michael.albinus@gmx.de>
 
        * CONTRIBUTE: Add more examples for $(SELECTOR) make variable.
 
-2016-02-09  Katsumi Yamaoka  <yamaoka@jpl.org>
+2016-02-15  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        Make mm-html-inhibit-images and mm-html-blocked-images default to nil
 
        * etc/NEWS (Gnus): Document mm-html-inhibit-images and
        mm-html-blocked-images.
 
-2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Increase success rate of fallback lmalloc
 
        larger and larger sizes, to increase the probability that
        the allocator will return a Lisp-aligned pointer.
 
-2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Make backgrounds extend to the end of the lines in shr
 
        * lisp/net/shr.el (shr-face-background): Faces can also be on
        the form `(:background "#fff)' (bug#22547).
 
-2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Make the `R' command get the correct relative <img>s
 
 
        Backport:
 
-2016-02-09  Mike Kupfer  <m.kupfer@acm.org>
+2016-02-15  Mike Kupfer  <m.kupfer@acm.org>
 
        Fix typos in emacs-mime.texi and gnus.texi
 
        * doc/misc/emacs-mime.texi (Display Customization):
        * doc/misc/gnus.texi (HTML): Fix typo.
 
-2016-02-09  Katsumi Yamaoka  <yamaoka@jpl.org>
+2016-02-15  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * doc/misc/emacs-mime.texi (Display Customization):
        Doc fix for mm-html-inhibit-images.
 
-2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
 
        Fix message-cross-post-followup-to group names
 
        * lisp/gnus/message.el (message-cross-post-followup-to): Don't
        insert group names like "nntp+foo:zot", because those aren't valid.
 
-2016-02-09  David Edmondson  <dme@dme.org>
+2016-02-15  David Edmondson  <dme@dme.org>
 
        Compare recipient and keys case-insensitively
 
        recipient address with that from a key, do so in a case insensitive
        manner (bug#22603).
 
-2016-02-08  Glenn Morris  <rgm@gnu.org>
+2016-02-15  Glenn Morris  <rgm@gnu.org>
 
        * lisp/gnus/mm-decode.el (mm-alist-to-plist): Doc fix.
 
-2016-02-08  Katsumi Yamaoka  <yamaoka@jpl.org>
+2016-02-15  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        Refactor HTML images handling of Gnus and mm-* (a part of bug#21650)
 
        * lisp/gnus/mm-view.el (mm-setup-w3m): Use mm-html-inhibit-images
        instead of mm-inline-text-html-with-images.
 
-2016-02-08  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Port to FreeBSD 11-CURRENT i386
 
        * src/lisp.h (NONPOINTER_BITS): Remove.  All uses removed.
        No longer needed now that alloc.c uses lmalloc and lrealloc.
 
-2016-02-08  Michael Albinus  <michael.albinus@gmx.de>
+2016-02-15  Michael Albinus  <michael.albinus@gmx.de>
 
        Some fixes in file-notify-tests.el
 
        backends fire two `changed' events.  Backup by rename doesn't
        work for kqueue.
 
-2016-02-07  Michael Albinus  <michael.albinus@gmx.de>
+2016-02-15  Michael Albinus  <michael.albinus@gmx.de>
 
        Fix Bug#22557
 
        backup file.
        (file-notify-test07-backup): New test.
 
-2016-02-07  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-15  Paul Eggert  <eggert@cs.ucla.edu>
 
        Fix test for dladdr
 
        * configure.ac (dladdr): Link with LIBMODULES when checking for
        this function.
 
-2016-02-07  Andreas Schwab  <schwab@linux-m68k.org>
+2016-02-15  Andreas Schwab  <schwab@linux-m68k.org>
 
        Fix gnus-group-get-new-news-this-group on group with closed server
 
        * lisp/gnus/nnimap.el (nnimap-change-group): Lookup server
        method and pass to nnimap-open-server.
 
-2016-02-07  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-15  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-14  Nicolas Petton  <nicolas@petton.fr>
 
-       * lisp/comint.el (comint-prompt-read-only): Clean tabs in docstring
+       * doc/lispref/sequences.texi: Add documentation for seq-map-indexed
 
-       While tabs in code are mostly fine because the Emacs sources have a
-       .dir-locals file specifying tab-width, the same is not true of tabs in
-       code examples inside docstrings.  The docstring is printed on a *Help*
-       buffer, which can be created on any directory and won't necessarily have
-       the same tab-width set.
+2016-02-14  Nicolas Petton  <nicolas@petton.fr>
 
-2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+       New function seq-map-indexed
 
-       Don't inloop gnus-uu-mark-thread on the last thread
+       * lisp/emacs-lisp/seq.el (seq-map-indexed): New function.
+       * test/lisp/emacs-lisp/seq-tests.el: Add tests for seq-map-indexed.
 
-       * lisp/gnus/gnus-uu.el (gnus-uu-mark-thread): Don't infloop on the
-       final thread in the summary buffer (bug#16666).
+2016-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/gnus/mm-util.el: Remove the mm-string-as-multibyte alias.
 
-       Display non-ASCII group names better in prompts
+2016-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/gnus/gnus-sum.el (gnus-articles-to-read): To decode the
-       group name, we have to do that before we remove the prefix.
+       Fix problem with wrong encoding of non-ASCII message bodies
 
-2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/gnus/mml.el (mml-generate-mime-1): Disable
+       multibyteness before encoding the data.
 
-       Default to gpg2 instead of gpg
+2016-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/epg-config.el (epg-gpg-program): Prefer gpg2 over gpg, if
-       it exists.  This fixes many problems with using the GPG
-       authentication agent.
+       Remove codepage setup code from mm-util
 
-2016-02-06  David Edmondson  <dme@dme.org>
+       * lisp/gnus/mm-util.el (mm-codepage-setup): Remove.
+       (mm-codepage-iso-8859-list): Remove.
+       (mm-codepage-ibm-list, mm-setup-codepage-iso-8859)
+       (mm-setup-codepage-ibm): Remove.
+       (mm-charset-eval-alist): Remove the code pages from the
+       default value.
 
-       src/process.c Correctly convert AF_INET6 addresses
+2016-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/process.c (conv_lisp_to_sockaddr): AF_INET6 addresses are
-       converted to a list of 16 bit quantities by
-       conv_sockaddr_to_lisp(). conv_lisp_to_sockaddr() should follow the
-       same scheme rather than expecting a (longer) list of 8 bit
-       quantities.
+       Remove compat code for older Emacsen
 
-       Backport:
+       * lisp/gnus/gnus-art.el (gnus-button-url-regexp): Remove
+       XEmacs compat code.
 
-       (cherry picked from commit 55ce3c30d617c38eb086d5ad4ffbd881c20c559c)
+       * lisp/gnus/gnus-sync.el (gnus-sync-json-alist-p): Remove
+       unused compat function.
+       (gnus-sync-json-plist-p): Ditto.
 
-2016-02-06  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * lisp/gnus/message.el (message-default-charset): Make obsolete.
+       (message-info): Remove compat code.
+       (message-setup-fill-variables): Remove kludge needed earlier
+       to not overwrite `normal-auto-fill-function'.
+       (message-split-line): Remove compat code.
 
-       * lisp/isearch.el (isearch-define-mode-toggle): Improve logic
+       * lisp/gnus/mm-view.el (mm-display-inline-fontify): Remove
+       compat code.
 
-2016-02-06  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/menu-bar.el (menu-bar-options-menu): New search submenu
+       Remove some compat functions from gmm-utils.el
 
-       (menu-bar-search-options-menu): New variable
+       * lisp/gnus/gmm-utils.el (gmm-tool-bar-from-list): Remove
+       compat code.
+       (gmm-image-search-load-path): Remove.
+       (gmm-image-load-path-for-library): Remove.
 
-2016-02-06  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/isearch.el (search-default-mode)
+       Remove the gmm-lazy and nnmail-lazy compat widgets
 
-       (isearch-regexp-function): Improve docstrings.
+       * lisp/gnus/gmm-utils.el (gmm-lazy): Remove.
 
-2016-02-06  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * lisp/gnus/nnmail.el (nnmail-lazy): Remove.
 
-       * lisp/isearch.el: Rename search-default-regexp-mode to search-default-mode
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       (search-default-mode): New variable.
-       (isearch-mode, isearch-define-mode-toggle)
-       (isearch--describe-regexp-mode): Update accordingly.
-       * lisp/menu-bar.el (nonincremental-search-forward): Update accordingly.
-       * etc/NEWS: Update accordingly.
-       * doc/emacs/search.texi: Update accordingly.
+       Clean up nnimap-request-move-article slightly
 
-2016-02-06  Oscar Fuentes  <ofv@wanadoo.es>
+       * lisp/gnus/nnheader.el (subr-x): Require.
 
-       Use monitor's resolution for positioning tooltips
+       * lisp/gnus/nnimap.el (nnimap-request-move-article): Clean up
+       the code slightly.
 
-       * src/xfns.c (compute_tip_xy): Use the resolution of the monitor where
-         the mouse pointer is to avoid placing the tooltip over the border of
-         the monitor on multi-head displays. Fixes bug#22549.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-06  Eli Zaretskii  <eliz@gnu.org>
+       Use open-network-stream instead of open-protocol-stream
 
-       Fix file-notify-test on MS-Windows
+       * lisp/gnus/nnimap.el: Use open-network-stream instead of
+       open-protocol-stream.
 
-       * test/automated/file-notify-tests.el (file-notify--test-timeout):
-       Reduce w32notify timeout to 10 sec.
-       (file-notify-test06-many-events): Call read-event after each
-       rename, to keep the w32notify backend happy in batch mode.
-       (Bug#22534)
+       * lisp/gnus/nntp.el: Ditto.
 
-2016-02-06  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/gnus/pop3.el: Ditto.
 
-       Fix issues found by auditing w32notify code
+       * lisp/gnus/sieve-manage.el: Ditto.
 
-       * src/w32inevt.c (handle_file_notifications): Count the number of
-       events to be returned.
-       * src/w32notify.c (send_notifications): Don't copy to the file
-       notification buffer more than it can hold.  (Bug#22534)
+       * lisp/net/network-stream.el (open-protocol-stream): Make obsolete.
 
-2016-02-06  Eli Zaretskii  <eliz@gnu.org>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Extend etags Ruby support for accessors
+       Remove compat code that relies on (featurep 'mule)
 
-       * lib-src/etags.c (Ruby_functions): Support accessors defined with
-       parentheses.  (Bug#22563)
+       * lisp/gnus/gnus-group.el (gnus-group-name-decode): Remove
+       compat code.
 
-       * test/etags/ruby-src/test1.ru (A::B): Add tests for accessors
-       defined with parentheses.
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to changes in Ruby tests.
+       * lisp/gnus/gnus-start.el (gnus-read-descriptions-file):
+       Remove compat code.
 
-2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/gnus/mm-bodies.el (mm-decode-body, mm-decode-string):
+       Remove compat code.
 
-       Update publicsuffix.txt.
+       * lisp/gnus/mm-view.el (mm-w3m-standalone-supports-m17n-p):
+       Remove compat code.
+       (mm-w3m-standalone-supports-m17n-p): Ditto.
 
-       * etc/publicsuffix.txt: Updated from
-       https://publicsuffix.org/list/public_suffix_list.dat.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+       Remove compat functions from starttls.el
 
-       Ensure that Gnus dribble handling allows removing entries
+       * lisp/gnus/starttls.el
+       (starttls-set-process-query-on-exit-flag): Remove.
 
-       * lisp/gnus/gnus-start.el (gnus-dribble-enter): Ensure that each
-       entry is on a single line.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-05  OGAWA Hirofumi  <hirofumi@mail.parknet.co.jp>  (tiny change)
+       Remove compat functions from smime.el
 
-       Be consistent when using encoded strings in nnimap data
+       * lisp/gnus/smime.el (smime-replace-in-string): Remove.
+       (smime-make-temp-file): Remove.
 
-       * lisp/gnus/nnimap.el (nnimap-encode-gnus-group): New function
-       (nnimap-request-list): Use it.
-       (nnimap-request-newgroups): Ditto.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-05  OGAWA Hirofumi  <hirofumi@mail.parknet.co.jp>  (tiny change)
+       Remove compat code from smiley
 
-       Display the decoded Gnus group name
+       * lisp/gnus/smiley.el (smiley-style): Remove compat code.
 
-       * lisp/gnus/gnus-sum.el (gnus-summary-read-group-1): Use the
-       decoded group name in the message.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+       Remove compat code from rfc2047
 
-       Use completion-ignore-case instead of defining command
+       * lisp/gnus/rfc2047.el (rfc2047-encode-message-header): Remove
+       compat code.
+       (rfc2047-decode-string): Ditto.
 
-       * lisp/erc/erc.el (erc-mode): Set completion-ignore-case so
-       that we get case-insensitive completion.
-       (erc-completion-at-point): Remove.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-05  Eli Zaretskii  <eliz@gnu.org>
+       Remove compat function from pop3
 
-       Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+       * lisp/gnus/pop3.el (pop3-set-process-query-on-exit-flag): Remove.
 
-2016-02-05  Michael Albinus  <michael.albinus@gmx.de>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       Remove compat code in Gnus backends
 
-       Reduce the number of iterations to 250 in case of w32notify.
+       * lisp/gnus/nndiary.el (nndiary-error): Remove.
 
-2016-02-05  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/gnus/nndraft.el (nndraft-request-associate-buffer): Ditto.
 
-       Fix problems caused by new implementation of sub-word mode
+       * lisp/gnus/nnfolder.el (nnfolder-read-folder): Ditto.
 
-       * lisp/subr.el (forward-word-strictly, backward-word-strictly):
-       New functions.
-       (word-move-empty-char-table): New variable.
+       * lisp/gnus/nnheader.el (nnheader-find-file-noselect): Ditto.
 
-       * etc/NEWS: Mention 'forward-word-strictly' and
-       'backward-word-strictly'.
+       * lisp/gnus/nnimap.el (nnimap-log-buffer): Remove compat code.
 
-       * doc/lispref/positions.texi (Word Motion): Document
-       'find-word-boundary-function-table', 'forward-word-strictly', and
-       'backward-word-strictly'.  (Bug#22560)
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/syntax.c (syms_of_syntax)
-       <find-word-boundary-function-table>: Doc fix.
+       Remove compat code from some mml files
 
-       * lisp/wdired.el (wdired-xcase-word):
-       * lisp/textmodes/texnfo-upd.el (texinfo-copy-node-name)
-       (texinfo-copy-section-title, texinfo-start-menu-description)
-       (texinfo-copy-menu-title, texinfo-specific-section-type)
-       (texinfo-insert-node-lines, texinfo-copy-next-section-title):
-       * lisp/textmodes/texinfo.el (texinfo-clone-environment)
-       (texinfo-insert-@end):
-       * lisp/textmodes/texinfmt.el (texinfo-format-scan)
-       (texinfo-anchor, texinfo-multitable-widths)
-       (texinfo-multitable-item):
-       * lisp/textmodes/tex-mode.el (latex-env-before-change):
-       * lisp/textmodes/flyspell.el (texinfo-mode-flyspell-verify):
-       * lisp/skeleton.el (skeleton-insert):
-       * lisp/simple.el (count-words):
-       * lisp/progmodes/vhdl-mode.el (vhdl-beginning-of-libunit)
-       (vhdl-beginning-of-defun, vhdl-beginning-of-statement-1)
-       (vhdl-update-sensitivity-list, vhdl-template-block)
-       (vhdl-template-break, vhdl-template-case, vhdl-template-default)
-       (vhdl-template-default-indent, vhdl-template-for-loop)
-       (vhdl-template-if-then-use, vhdl-template-bare-loop)
-       (vhdl-template-nature, vhdl-template-procedural)
-       (vhdl-template-process, vhdl-template-selected-signal-asst)
-       (vhdl-template-type, vhdl-template-variable)
-       (vhdl-template-while-loop, vhdl-beginning-of-block)
-       (vhdl-hooked-abbrev, vhdl-port-copy, vhdl-hs-forward-sexp-func):
-       * lisp/progmodes/verilog-mode.el (verilog-backward-sexp)
-       (verilog-forward-sexp, verilog-beg-of-statement)
-       (verilog-set-auto-endcomments, verilog-backward-token)
-       (verilog-do-indent):
-       * lisp/progmodes/vera-mode.el (vera-guess-basic-syntax)
-       (vera-indent-block-closing):
-       * lisp/progmodes/simula.el (simula-context)
-       (simula-backward-up-level, simula-forward-down-level)
-       (simula-previous-statement, simula-next-statement)
-       (simula-skip-comment-backward, simula-calculate-indent)
-       (simula-find-if, simula-electric-keyword):
-       * lisp/progmodes/sh-script.el (sh-smie--rc-newline-semi-p):
-       * lisp/progmodes/ruby-mode.el (ruby-smie--redundant-do-p)
-       (ruby-smie--forward-token, ruby-smie--backward-token)
-       (ruby-singleton-class-p, ruby-calculate-indent)
-       (ruby-forward-sexp, ruby-backward-sexp):
-       * lisp/progmodes/ps-mode.el (ps-run-goto-error):
-       * lisp/progmodes/perl-mode.el (perl-syntax-propertize-function)
-       (perl-syntax-propertize-special-constructs)
-       (perl-backward-to-start-of-continued-exp):
-       * lisp/progmodes/pascal.el (pascal-indent-declaration):
-       * lisp/progmodes/octave.el (octave-function-file-p):
-       * lisp/progmodes/mantemp.el (mantemp-insert-cxx-syntax):
-       * lisp/progmodes/js.el (js--forward-function-decl):
-       * lisp/progmodes/idlwave.el (idlwave-show-begin-check)
-       (idlwave-beginning-of-block, idlwave-end-of-block)
-       (idlwave-block-jump-out, idlwave-determine-class):
-       * lisp/progmodes/icon.el (icon-is-continuation-line)
-       (icon-backward-to-start-of-continued-exp, end-of-icon-defun):
-       * lisp/progmodes/hideif.el (hide-ifdef-define):
-       * lisp/progmodes/f90.el (f90-change-keywords):
-       * lisp/progmodes/cperl-mode.el (cperl-electric-pod)
-       (cperl-linefeed, cperl-electric-terminator)
-       (cperl-find-pods-heres, cperl-fix-line-spacing)
-       (cperl-invert-if-unless):
-       * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur):
-       * lisp/progmodes/cc-align.el (c-lineup-java-inher):
-       * lisp/progmodes/ada-mode.el (ada-compile-goto-error)
-       (ada-adjust-case-skeleton, ada-create-case-exception)
-       (ada-create-case-exception-substring)
-       (ada-case-read-exceptions-from-file, ada-after-keyword-p)
-       (ada-scan-paramlist, ada-get-current-indent, ada-get-indent-end)
-       (ada-get-indent-if, ada-get-indent-block-start)
-       (ada-get-indent-loop, ada-get-indent-type)
-       (ada-search-prev-end-stmt, ada-check-defun-name)
-       (ada-goto-decl-start, ada-goto-matching-start)
-       (ada-goto-matching-end, ada-looking-at-semi-or)
-       (ada-looking-at-semi-private, ada-in-paramlist-p)
-       (ada-search-ignore-complex-boolean, ada-move-to-start)
-       (ada-move-to-end, ada-which-function, ada-gen-treat-proc):
-       * lisp/net/quickurl.el (quickurl-grab-url):
-       * lisp/mail/sendmail.el (mail-do-fcc):
-       * lisp/mail/rmail.el (rmail-resend):
-       * lisp/mail/mailabbrev.el (mail-abbrev-complete-alias):
-       * lisp/mail/mail-extr.el (mail-extract-address-components):
-       * lisp/json.el (json-read-keyword):
-       * lisp/files.el (insert-directory):
-       * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
-       * lisp/completion.el (symbol-under-point, symbol-before-point)
-       (symbol-before-point-for-complete, next-cdabbrev)
-       (add-completions-from-c-buffer):
-       * lisp/cedet/semantic/texi.el (semantic-up-context)
-       (semantic-beginning-of-context):
-       * lisp/cedet/semantic/bovine/el.el (semantic-get-local-variables):
-       use 'forward-word-strictly' and 'backward-word-strictly' instead
-       of 'forward-word' and 'backward-word'.
+       * lisp/gnus/mml-sec.el (mml-secure-passphrase-cache-expiry):
+       Remove compat code.
 
-2016-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/gnus/mml-smime.el (mml-smime-openssl-sign-query):
+       Always use `mail-extract-address-components', since this isn't
+       time critical.
+       (mml-smime-get-dns-cert): Ditto.
 
-       Fix doc string of tls-program
+       * lisp/gnus/mml.el (mml-preview): Remove compat code.
 
-       * lisp/net/tls.el (tls-program): Document the %t parameter (bug#22559).
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+       Remove compat code and compat functions from mm-util.el
 
-       Restore window conf in nsm
+       * lisp/gnus/mm-util.el (mm-mime-mule-charset-alist): Remove
+       compat code.
+       (mm-coding-system-priorities)
+       (mm-mule-charset-to-mime-charset, mm-charset-after)
+       (mm-mime-charset, mm-iso-8859-x-to-15-region): Remove compat code.
+       (mm-detect-coding-region): Define unconditionally.
+       (mm-detect-mime-charset-region): Ditto.
+       (mm-coding-system-to-mime-charset): It's 'mime-charset now.
+       (coding-system-name)
+       (find-file-coding-system-for-read-from-filename)
+       (find-operation-coding-system): Remove aliases.
 
-       * lisp/net/nsm.el (nsm-query-user): Restore the window configuration.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Backport:
+       Remove some compat code from mm-*.el
 
-2016-02-05  Mark Oteiza  <mvoteiza@udel.edu>
+       * lisp/gnus/mm-bodies.el (mm-decode-body): Ditto.
 
-       * etc/NEWS: Document new mpc.el features
+       * lisp/gnus/mm-decode.el (mm-tmp-directory)
+       (mm-valid-image-format-p): Remove compat code.
 
-2016-02-04  Leo Liu  <sdl.web@gmail.com>
+       * lisp/gnus/mm-url.el (mm-url-insert-file-contents): Remove
+       "Connection" "Close" workaround for older Emacsen.
 
-       * lisp/custom.el (defface): Revert indentation change.  (Bug#22524)
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-04  Alan Mackenzie  <acm@muc.de>
+       Remove compat code and functions from message.el
 
-       Correctly fontify C++ initializations which "look like" functions.
+       * lisp/gnus/message.el (message-send-mail-function): Remove
+       compat code.
+       (message-dont-reply-to-names, message-mode)
+       (message-setup-fill-variables, message-fill-paragraph)
+       (message-remove-blank-cited-lines, message-make-from)
+       (message-forward-rmail-make-body, message-tool-bar-gnome)
+       (message-tab): Remove compat code.
+       (message-completion-in-region): Remove.
+       (message-read-from-minibuffer): Remove compat code.
 
-       Fixes bug#7579.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       lisp/progmodes/cc-engine.el (c-forward-declarator): Add extra optional
-       parameter to enable handling of "anonymous" declarators in declarations.
+       Declare rfc1843 instead of autoloading
 
-       lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Check more rigorously
-       whether a "(" opens a parameter list of a function, or an initialization of a
-       variable.
+       * lisp/gnus/gnus-art.el (rfc1843-decode-region): Declare
+       instead of autoload.
 
-2016-02-04  Ulf Jasper  <ulf.jasper@web.de>
+2016-02-13  Eli Zaretskii  <eliz@gnu.org>
 
-       Improve newsticker-treeview-selection-face
+       Avoid signaling an error in 'dired-do-find-regexp-and-replace'
 
-       * lisp/net/newst-treeview.el (newsticker-treeview-selection-face): Improve
-       readability for dark background.
+       * lisp/dired-aux.el: Require cl-lib, so that 'cl-mapcan' is
+       autoloaded correctly.  (Bug#22613)
 
-2016-02-04  Eli Zaretskii  <eliz@gnu.org>
+2016-02-13  Eli Zaretskii  <eliz@gnu.org>
 
-       Minor fix in tagging Ruby accessors by etags
+       Fix network-stream-tests.el for MS-Windows
 
-       * lib-src/etags.c (Ruby_functions): Don't tag accessors whose
-       names are not literal symbols.  (Bug#22241)
+       * test/lisp/net/network-stream-tests.el
+       (connect-to-tls-ipv6-nowait): Skip for MS-Windows builds.
+       (connect-to-tls-ipv4-wait): Add a 0.1 sleep-for.
 
-2016-02-04  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Spelling fixes
+       Remove some Message compat functions
 
-2016-02-04  Dmitry Gutov  <dgutov@yandex.ru>
+       * lisp/gnus/message.el (message-kill-all-overlays): Define
+       unconditionally.
+       (message-window-inside-pixel-edges): Remove.
+       (mail-dont-reply-to): Remove.
 
-       Remove 'def X' from the example
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * test/etags/ruby-src/test1.ru (A::B): Remove 'def X'
-       (http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00167.html).
-       * test/etags/CTAGS.good:
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6: Adjust accordingly.
+       Remove some Gnus compat code
 
-2016-02-04  Vasilij Schneidermann  <v.schneidermann@gmail.com>  (tiny change)
+       * lisp/gnus/gnus-art.el (gnus-mime-inline-part): Remove compat code.
+       (gnus-mm-display-part): Ditto.
 
-       Allow sending empty hidden values in eww
+       * lisp/gnus/gnus-start.el (gnus-dribble-read-file): Remove
+       compat code.
 
-       * lisp/net/eww.el (eww-tag-input): Allow sending empty hidden
-       values (bug#22388).
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       (cherry picked from commit 5898da8210af7953e638ddf7821c05260979c3f0)
+       Sort groups before inserting them into the group buffer
 
-       Backport:
+       * lisp/gnus/gnus-group.el (gnus-group-describe-all-groups):
+       Sort groups before inserting them.
 
-2016-02-04  David Edmondson  <dme@dme.org>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Make erc work better when encountering unknown prefix chars
+       Make "unseen" tracking work again in Gnus
 
-       * lisp/erc/erc.el (erc-channel-receive-names): Output a warning
-       instead of erroring out on unknown prefix chars (bug#22380).
+       * lisp/gnus/gnus-sum.el (gnus-update-marks): Make "unseen"
+       tracking work again.
 
-2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Make erc completion case-insensitive again
+       Remove Gnus compat functions defined in gnus.el
 
-       * lisp/erc/erc.el (erc-completion-at-point): Make erc completion
-       case-insensitive again (bug#11360).
+       * lisp/gnus/gnus.el (gnus-extent-detached-p): Remove.
+       (gnus-extent-start-open, gnus-character-to-event)
+       (gnus-assq-delete-all, gnus-add-text-properties)
+       (gnus-put-text-property, gnus-key-press-event-p):
 
-2016-02-04  Carlos Pita  <carlosjosepita@gmail.com>  (tiny change)
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Make complection in erc use consistent casing
+       Remove compat code from gnus-uu and win
 
-       * lisp/erc/erc-pcomplete.el (pcomplete-erc-all-nicks): Make
-       case in the complection consistent (bug#18509).
+       * lisp/gnus/gnus-util.el (gnus-image-type-available-p): Remove
+       compat code.
 
-2016-02-04  Francis Litterio  <flitterio@gmail.com>
+       * lisp/gnus/gnus-uu.el (gnus-uu-tmp-dir): Remove compat code.
 
-       Make /QUIT in erc more robust
+       * lisp/gnus/gnus-win.el (gnus-frames-on-display-list): Remove.
 
-       * lisp/erc/erc.el (erc-kill-query-buffers): Don't bug out if we're
-       issuing /QUIT to disconnected servers (bug#22099).
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-04  Kevin Brubeck Unhammer  <unhammer@fsfe.org>  (tiny change)
+       Remove several gnus-util compat functions
 
-       Make tracking faces in Emacs work more reliably
+       * lisp/gnus/gnus-util.el (gnus-set-process-query-on-exit-flag): Remove.
+       (gnus-read-shell-command): Remove.
+       (gnus-match-substitute-replacement): Remove.
+       (gnus-string-match-p): Remove.
+       (gnus-string-prefix-p): Remove.
 
-       * lisp/erc/erc-track.el (erc-faces-in): Always return lists of
-       faces to avoid later ambiguity (bug#22424).
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+       Remove the gnus-merge alias
 
-       Make shr not bug out on images on non-graphical displays
+       * lisp/gnus/gnus-util.el (gnus-merge): Remove.
 
-       * lisp/net/shr.el (shr-put-image): Don't bug out on alt-less
-       images on non-graphical displays (bug#22327).
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+       Remove the gnus-union alias
 
-       Fix bookmark display widths
+       * lisp/gnus/gnus-util.el (gnus-union): Remove.
 
-       * lisp/net/eww.el (eww-list-bookmarks): Pop to the buffer before
-       preparing it so that the widths are computed correctly (bug#22328).
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+       Remove the gnus-delete-alist alias
 
-       Fix typo in eww-make-unique-file-name
+       * lisp/gnus/gnus-util.el (gnus-run-mode-hooks): Remove compat code.
+       (gnus-delete-alist): Remove.
 
-       * lisp/net/eww.el (eww-make-unique-file-name): Make this function
-       actually work.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-03  Lars Ingebrigtsen  <larsi@gnus.org>
+       Remove the gnus-float-time alias
 
-       Make it possible to TAB to input fields
+       * lisp/gnus/gnus-util.el (gnus-completion-styles): Remove
+       compat code.
+       (gnus-float-time): Remove.
 
-       * lisp/net/eww.el (eww-tag-input): Make it possible to TAB to
-       input fields (bug#22540).
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-03  Lars Ingebrigtsen  <larsi@gnus.org>
+       Remove compat code from gnus-srvr, start and sum
 
-       Insert complete alt texts when images are disabled
+       * lisp/gnus/gnus-srvr.el (gnus-browse-foreign-server): Remove
+       compat code.
 
-       * lisp/net/shr.el (shr-tag-img): When images are disabled, insert
-       the complete alt/title string (bug#22293).
+       * lisp/gnus/gnus-start.el (gnus-check-reasonable-setup):
+       Remove compat code.
 
-2016-02-03  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/gnus/gnus-sum.el (gnus-summary-display-arrow)
+       (gnus-summary-make-menu-bar, gnus-summary-make-tool-bar)
+       (gnus-recenter)
+       (gnus-summary-limit-strange-charsets-predicate)
+       (gnus-summary-show-thread): Remove compat code.
 
-       Allow eww text fields to grow
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/net/eww.el (eww-process-text-input): Allow text fields to
-       grow when typing in stuff that's longer than the original width.
+       Remove compat code from gnus-spec.el
 
-2016-02-03  Dima Kogan  <dima@secretsauce.net>
+       * lisp/gnus/gnus-spec.el (gnus-lrm-string-p): Remove compat code.
+       (gnus-balloon-face-function): Remove compat code.
 
-       Make erc work when subword-mode is switched on
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/erc/erc-backend.el (erc-forward-word, erc-word-at-arg-p)
-       (erc-bounds-of-word-at-point): New functions to do word-based
-       things when subword-mode is switched on.
+       Fix compat change in last check-in
 
-       * lisp/erc/erc-button.el (erc-button-add-nickname-buttons): Use them
-       (bug#17558).
+       * lisp/gnus/gnus-group.el
+       (gnus-group-name-charset-group-alist): `find-coding-system'
+       doesn't exist in Emacs.
 
-2016-02-03  Teemu Likonen  <tlikonen@iki.fi>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix IMAP doc example
+       Always use url-queue
 
-       * doc/misc/gnus.texi (Client-Side IMAP Splitting): Fix example.
+       * lisp/gnus/gnus-html.el (gnus-html-schedule-image-fetching):
+       Always use url-queue.
 
-2016-02-03  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Quoting fixes in doc strings and diagnostics
+       Remove compat functions from gnus-html.el
 
-       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq, byte-compile-funcall):
-       * lisp/gnus/mml-smime.el (mml-smime-get-dns-cert)
-       (mml-smime-get-ldap-cert):
-       Follow user style preference when quoting diagnostics.
+       * lisp/gnus/gnus-html.el (gnus-html-encode-url-chars): Remove.
 
-2016-02-03  Noam Postavsky  <npostavs@gmail.com>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix warning message in hack-local-variables
+       Remove compat code from gnus-group.el
 
-       * lisp/files.el (hack-local-variables): use 'thisbuf' to reference
-       the original buffer name in the warning message.  (Bug#21681)
+       * lisp/gnus/gnus-group.el (gnus-group-name-charset-group-alist)
+       (gnus-group-make-tool-bar, gnus-group-update-tool-bar): Remove compat code.
 
-2016-02-03  Eli Zaretskii  <eliz@gnu.org>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Etags: yet another improvement in Ruby tags
+       Define gnus-diary-kill-entire-line unconditionally
 
-       * lib-src/etags.c (Ruby_functions): Handle continuation lines in
-       Ruby accessor definitions.  (Bug#22241)
+       * lisp/gnus/gnus-diary.el (gnus-diary-kill-entire-line):
+       Define unconditionally.
 
-       * test/etags/ruby-src/test1.ru (A::B#X): Add some more tests for
-       accessors and multiline definitions.
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to changes in Ruby tags.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-03  Eli Zaretskii  <eliz@gnu.org>
+       Remove compat code from gnus-cache and gnus-bookmark
 
-       Fix x-popup-menu on TTYs without a mouse
+       * lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-mode-map): Ditto.
 
-       * src/menu.c (Fx_popup_menu): Be sure to initialize 'x' and 'y'
-       for the TTY case without a mouse.  (Bug#22538)
+       * lisp/gnus/gnus-cache.el (gnus-cache-decoded-group-name):
+       Remove compat code.
 
-2016-02-03  Nicolas Petton  <nicolas@petton.fr>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/emacs-lisp/map.el: Improvements to the docstring of the pcase macro
+       Remove compat code from gnus-art.el
 
-2016-02-02  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/gnus/gnus-art.el (gnus-article-prepare)
+       (gnus-mime-copy-part, gnus-output-to-file)
+       (gnus-article-reply-with-original)
+       (gnus-button-handle-apropos-variable)
+       (gnus-button-handle-apropos-documentation):
 
-       Use pop-to-buffer-same-window in eww
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/net/eww.el: pop-to-buffer-same-window throughout instead of
-       switch-to-buffer (bug#22244).
+       Remove compat code from gnus-agent.el
 
-2016-02-02  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/gnus/gnus-agent.el (gnus-agent-make-mode-line-string):
+       Remove compat code.
 
-       * autogen.sh: Revert all recent changes.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-02  Glenn Morris  <rgm@gnu.org>
+       Rewrite gmm-labels usage to use cl-labels
 
-       * make-dist: Updates related to nt/.
+       * lisp/gnus/gmm-utils.el (gmm-tool-bar-style): Remove compat code.
+       (gmm-labels): Remove.
 
-       * make-dist: Add modules/.
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * make-dist: Update for super-special file that can't live in etc/.
+       Remove compat code from canlock.el
 
-2016-02-02  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/gnus/canlock.el (defmacro): Remove
 
-       Fix failure to compile ns-win.el in parallel builds
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/Makefile.in ($(lispsource)/term/ns-win.elc): Add order-only
-       dependency on $(lispsource)/international/charprop.el.
-       (Bug#22501)
+       Remove compat code from auth-source
 
-2016-02-02  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/gnus/auth-source.el (auth-source-read-char-choice):
+       Remove compat code.
 
-       Fix names of tags generated for Ruby accessors
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lib-src/etags.c (Ruby_functions): Don't include the leading
-       colon ':' in tags for Ruby accessors and aliases.  (Bug#22241)
+       Fix gnus-group.el compilation warnings about unprefixed variables
 
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to changes in Ruby tags.
+       * lisp/gnus/gnus-group.el (gnus-group-update-eval-form): Avoid
+       compilation warnings by passing in the dynamic variables as
+       explicit lexical parameters to `eval'.
 
-2016-02-02  Eli Zaretskii  <eliz@gnu.org>
+2016-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix file-name recognition in 'etags'
+       Fix the :tracker slot name
 
-       * lib-src/etags.c (get_language_from_filename): If FILE includes a
-       leading directory, compare only its basename to the known file
-       names in lang_names[].
+       * lisp/gnus/registry.el (registry-lookup-secondary): The
+       `tracker' slot is called `tracker', not `:tracker'.
 
-       * test/etags/Makefile (RBSRC): Adapt to recent test1.ruby
-       renaming.
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to changes in Ruby file names and
-       to the results in Makefile due to the above etags.c fix.
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-02  Eli Zaretskii  <eliz@gnu.org>
+       Fix compilation warnings in gnus-art.el
 
-       Change Ruby file names and extensions recognized by 'etags'
+       * lisp/gnus/gnus-art.el (rfc1843-decode-region): Autoload.
+       (gnus-article-hide): Avoid compilation warnings.
 
-       * lib-src/etags.c <Ruby_filenames>: New variable, holds names
-       of Ruby files.
-       <Ruby_suffixes>: Treat .rb, .ru, and .rbw as Ruby extensions.
-       <lang_names>: Add Ruby_filenames to the Ruby entry.
-       * test/etags/ruby-src/test1.ru: Renamed from test1.ruby.
-       (Bug#22241)
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-02  Eli Zaretskii  <eliz@gnu.org>
+       Fix compilation warning in gnus-score.el
 
-       More improvements for Ruby support in 'etags'
+       * lisp/gnus/gnus-score.el (gnus-art): Require to silence byte
+       compiler.
 
-       * lib-src/etags.c (Ruby_functions): Tag Ruby accessors and
-       alias_method.  Identify constants even if the assignment is not
-       followed by whitespace.  (Bug#22241)
+2016-02-12  Andreas Schwab  <schwab@linux-m68k.org>
 
-       * test/etags/ruby-src/test1.ru: Add tests for constants,
-       accessors, and alias_method.
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to changes in Ruby tests.
+       Revert "Fix gnus-group-get-new-news-this-group on group with closed server"
 
-2016-02-02  Paul Eggert  <eggert@cs.ucla.edu>
+       This reverts commit 9dc77e37aa84c6df9b3ddb4609f3c09201b0580e.
 
-       Add --git-config option to autogen.sh
+       This makes nnimap groups not be activated.
 
-       * autogen.sh: New options --git-config, --help.
-       (git_config): New shell var.  Alter function to respect this var.
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-02  Lars Ingebrigtsen  <larsi@gnus.org>
+       Fix encoding problem introduced by previous patch series
 
-       Fix editing undo changes in eww fields
+       * lisp/gnus/rfc2047.el: Ditto (bug#22648).
 
-       * eww.el (eww-tag-form): Don't overwrite initial form data in text
-       fields.
-       (eww-process-text-input): Make `M-t' at the end of text fields work
-       better (bug#19085).
+       * lisp/gnus/rfc2231.el: Fix problem created by the
+       mm-replace-in-string conversion.
 
-2016-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Allow the user more control of popping up the eww window
+       Revert "Avoid defvarring prefix-less variables"
 
-       * eww.el (eww): Use pop-to-buffer-same-window (suggested by
-       Michael Heerdegen) (bug#22244).
+       This reverts commit 303390bda34f98b400798d5383cf0d722e35ba19.
 
-2016-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
+       The defvars are needed if we're doing lexical-binding
 
-       Make eww-browse-url with new-window parameter work again
+2016-02-12  Glenn Morris  <rgm@gnu.org>
 
-       * eww.el (eww-browse-url): Stay in the same buffer if we're
-       already in a eww mode buffer so that eww-browse-url with a
-       new-window parameter works (bug#22244).
+       * test/lisp/url/url-auth-tests.el (url-auth-test-digest-auth):
+       Make it pass.
 
-2016-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
+       * test/lisp/url/url-auth-tests.el
+       (url-auth-test-digest-auth-retrieve-cache): Fix obvious typo.
 
-       Clean up eww code slightly
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * eww.el (eww-browse-url): Clean up code slightly.
+       Finish up cl-defmethoding registry,el
 
-2016-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/gnus/registry.el (initialize-instance): Use cl-defmethod.
 
-       Don't insert nil faces in shr
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * shr.el (shr-insert-table): Don't add nil faces, because that
-       will show up in *Messages* as "Invalid face reference: nil [32
-       times]".
+       Revert the gnus-replace-in-string change, fix arguments, reapply
 
-2016-02-01  Glenn Morris  <rgm@gnu.org>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Improve the custom type of some user options.
+       Silence more message.el compilation warnings
 
-       * lisp/autoinsert.el (auto-insert-alist):
-       * lisp/replace.el (query-replace-from-to-separator):
-       * lisp/gnus/gnus-art.el (gnus-hidden-properties):
-       * lisp/gnus/gnus-gravatar.el (gnus-gravatar-properties):
-       * lisp/gnus/gnus-picon.el (gnus-picon-properties):
-       * lisp/progmodes/prolog.el (prolog-keywords, prolog-types)
-       (prolog-mode-specificators, prolog-determinism-specificators)
-       (prolog-directives, prolog-program-name, prolog-program-switches)
-       (prolog-consult-string, prolog-compile-string, prolog-eof-string)
-       (prolog-prompt-regexp): Improve custom type.
+       * lisp/gnus/message.el (message-generate-headers): Don't use
+       variable values directly to get the header values, because
+       that breaks with lexical binding (without unprefixed defvars).
 
-2016-02-01  Glenn Morris  <rgm@gnu.org>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Mark some risky calendar variables.
+       Fix various compilation warnings in message.el
 
-       * lisp/calendar/cal-china.el (chinese-calendar-time-zone):
-       Remove risky setting for deleted obsolete alias.
-       (calendar-chinese-standard-time-zone-name)
-       (calendar-chinese-daylight-saving-start)
-       (calendar-chinese-daylight-saving-end):
-       * lisp/calendar/calendar.el (calendar-iso-date-display-form)
-       (calendar-european-date-display-form)
-       (calendar-american-date-display-form, calendar-date-display-form):
-       * lisp/calendar/diary-lib.el (diary-remind-message)
-       (diary-header-line-format):
-       * lisp/calendar/solar.el (calendar-time-display-form)
-       (calendar-location-name): Mark as risky.
+       * lisp/gnus/message.el (message-fix-before-sending): Use
+       read-multiple-choice instead of gnus-multiple-choice.
+       (mm-util): Require.
+       (rfc2047): Require.
+       (message-remove-blank-cited-lines): Use message instead of
+       gnus-message.
+       (message-send): Use y-or-n-p instead of gnus-y-or-n-p.
 
-2016-02-01  Simen Heggestøyl  <simenheg@gmail.com>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Highlight two additional SCSS keywords
+       Silence compilation warning in mm-view
 
-       * lisp/textmodes/css-mode.el (css-bang-ids): New defconst holding CSS
-       identifiers on the form !foo.
-       (scss-bang-ids): New defconst holding SCSS identifiers on the form
-       !foo.
-       (css--font-lock-keywords): Highlight the new SCSS bang identifiers in
-       `font-lock-builtin-face'.
+       * lisp/gnus/mm-view.el (mm-display-inline-fontify): Silence
+       compilation warning.
 
-       * test/indent/css-mode.css: Add bang rule test case.
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * test/indent/scss-mode.scss: Add test cases for the introduced bang
-       rules.
+       Fix epg-related compilation warnings in mml-sec
 
-2016-02-01  Karl Fogel  <kfogel@red-bean.com>
+       * lisp/gnus/mml-sec.el: Fix compilation warnings from the epg
+       library.
 
-       Recommend enabling integrity-checking in git
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * admin/notes/git-workflow:  Recommend setting transfer.fsckObjects.
+       rmail-dont-reply-to-names is obsolete
 
-       This is related to the autogen.sh changes made by Paul Eggert in
-       commit d766ca8f (2016-02-01) and commit cedd7cad (2016-02-01), and to
-       my edits today to http://www.emacswiki.org/emacs/GitForEmacsDevs and
-       to emacswiki.org/emacs/GitQuickStartForEmacsDevs.  See also the thread
-       "Recommend these .gitconfig settings for git integrity." at
-       https://lists.gnu.org/archive/html/emacs-devel/2016-01/threads.html#01802.
+       * lisp/gnus/nnmail.el (nnmail-fancy-expiry-target): Don't bind
+       the obsolete `rmail-dont-reply-to-names' variable.
 
-2016-02-01  Martin Rudalics  <rudalics@gmx.at>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Some corrections in Elisp manual
+       Partially revert the defmethod->cl-defmethod change in registry.el
 
-       * doc/lispref/buffers.texi (Read Only Buffers): Describe optional
-       argument POSITION.
-       * doc/lispref/debugging.texi (Error Debugging): `debug-on-signal'
-       is an option.
-       * doc/lispref/display.texi (Refresh Screen): Describe optional
-       argument FRAME of `redraw-frame'.
-       (Attribute Functions): Describe optional argument CHARACTER of
-       `face-font'.
-       (Defining Images): `image-load-path' is an option.
-       (Beeping): `ring-bell-function' is an option.
-       * doc/lispref/frames.texi (Size and Position): The PIXELWISE
-       argument of `set-frame-size' is optional.
-       (Raising and Lowering): The TERMINAL argument of `tty-top-frame'
-       is optional.
-       * doc/lispref/keymaps.texi (Controlling Active Maps): Fix doc of
-       `set-transient-map'.
-       * doc/lispref/minibuf.texi (Text from Minibuffer):
-       `read-regexp-defaults-function' is an option.
-       (Minibuffer Contents): `delete-minibuffer-contents' is a command.
-       * doc/lispref/modes.texi (Mode Line Variables):
-       `mode-line-position' and `mode-line-modes' are variables, not
-       options.
-       * doc/lispref/strings.texi (Creating Strings): The START argument
-       of `substring' is optional.
-       * doc/lispref/text.texi (Buffer Contents): Describe optional
-       argument NO-PROPERTIES of `thing-at-point'.
-       (User-Level Deletion): Both arguments of
-       `delete-trailing-whitespace' are optional.
-       (Margins): Use @key{RET} instead of @kbd{RET}.
-       * doc/lispref/windows.texi (Display Action Functions): Write
-       non-@code{nil} instead of non-nil.
-       (Choosing Window Options): The WINDOW arg of
-       `split-window-sensibly' is optional.
-       (Choosing Window Options): Write non-@code{nil} instead of
-       non-nil.
-       (Window Start and End): Both args of `window-group-end' are
-       optional.
+       * lisp/gnus/registry.el (initialize-instance): Use defmethod,
+       since cl-defmethod doesn't work with :after.
+       (initialize-instance): Ditto, but with :before.
 
-       * src/buffer.c (Fbarf_if_buffer_read_only): Rename argument POS
-       to POSITION to keep consisteny with doc-string.
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-01  Paul Eggert  <eggert@cs.ucla.edu>
+       Avoid obsolete function in plstore
 
-       Chatter when autogen.sh changes Git configuration
+       * lisp/gnus/plstore.el (plstore--insert-buffer): Use setf
+       instead of the obsolete epg-context-set-armor.
 
-       * autogen.sh (git_config): New function.  Use it instead of ‘git config’.
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-02-01  Kyle Meyer  <kyle@kyleam.com>
+       Use cl-defmethod in registry.el
 
-       * lisp/org/org-compat.el (org-font-lock-ensure): Fix bogus test (bug#22399)
+       * lisp/gnus/registry.el: Use cl-defmethod instead of the
+       obsolete defmethod.
 
-2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Omit unnecessary history from Lisp intro
+       Make sieve-manage require sasl
 
-       * doc/lispintro/emacs-lisp-intro.texi (Review, Digression into C)
-       (Conclusion): Reword so as not to talk about earlier versions
-       of Emacs in what should be an intro.
+       * lisp/gnus/sieve-manage.el: Fix compilation warning by
+       requiring sasl.
 
-2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * etc/HISTORY: Add some more history, plus git tags.
+       Avoid defvarring prefix-less variable
 
-2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/gnus/mm-uu.el (mm-uu-entry): Rename from `entry'.
 
-       Improve elisp “Security Considerations” doc
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * doc/lispref/os.texi (Security Considerations):
-       Mention call-process and rename-file as opposed to shell commands.
-       Add some more cross-references.
+       * lisp/gnus/mailcap.el: Remove usage of mailcap-delete-duplicates.
 
-2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       autogen.sh now arranges for git to check hashes
+       Don't use the obsolete char-valid-p function
 
-       Suggested by Karl Fogel in:
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01802.html
-       * autogen.sh: Do "git config transfer.fsckObjects true".
+       * lisp/gnus/mm-url.el (mm-url-decode-entities): Don't use the
+       obsolete char-valid-p function.
 
-2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix (c & 040) typo in emergency escapes
+       Fix missed translation in a previous commit
 
-       * src/keyboard.c (handle_interrupt): Fix recently-introduced
-       typo (040 should have been ~040) that silently suppressed
-       auto-saves after emergency escapes.  Redo comparison to avoid
-       similar problems.
+       * lisp/gnus/mailcap.el (mailcap-mime-types): Fix missed
+       translation of mailcap-delete-duplicates.
 
-2016-01-31  Eli Zaretskii  <eliz@gnu.org>
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix display of overlay strings with 'display' and 'box' property
+       Avoid using mm-make-temp-file
 
-       * src/xdisp.c (get_next_display_element): Take the box face from
-       display stack level that comes from a buffer, not an overlay
-       string.  (Bug#22499)
+       * lisp/gnus/mail-source.el (mail-source-delete-crash-box): Ditto.
 
-2016-01-31  Andreas Schwab  <schwab@linux-m68k.org>
+       * lisp/gnus/mm-decode.el (mm-display-external): Ditto.
 
-       Fix imap-starttls-open
+       * lisp/gnus/mml-smime.el (mml-smime-openssl-encrypt): Ditto.
 
-       * lisp/net/imap.el (imap-starttls-open): Log imap process
-       output.  Call imap-parse-greeting.  (Bug#22500)
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-31  Andreas Schwab  <schwab@linux-m68k.org>
+       Fix compilation warning in gnus-start
 
-       Fix return value of imap-starttls-open
+       * lisp/gnus/gnus-start.el (gnus-slave-save-newsrc): Avoid
+       mm-make-temp-file.
 
-       * lisp/net/imap.el (imap-starttls-open): Fix return value.
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-31  John Wiegley  <johnw@newartisans.com>
+       Avoid the obsoleted defmethod
 
-       Correct reference to DARWIN_OS preprocessor symbol
+       * lisp/gnus/gnus-icalendar.el: Use cl-defmethod instead of
+       defmethod.
 
-       * src/alloc.c: Correct a preprocessor reference to DARWIN_OS, which may
-         not be defined.
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
+       Avoid defvarring prefix-less variables
 
-       Spelling fix
+       * lisp/gnus/gnus-group.el (gnus-group-update-eval-form): We
+       don't need to `defvar' the short variables to allow `eval' to
+       use them.
 
-       Spelling fixes
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
+       nnweb doesn't need unibyte buffers
 
-       Pacify GCC on C library without glibc API
+       * lisp/gnus/nnweb.el (nnweb-retrieve-headers)
+       (nnweb-read-overview, nnweb-request-article)
+       (nnweb-google-reference): Unibyte buffers are not needed here.
 
-       Without this change, with --enable-gcc-warnings GCC would complain
-       “error: redundant redeclaration of ‘aligned_alloc’”.
-       * configure.ac: Simplify aligned_alloc testing.
-       * src/alloc.c (aligned_alloc): Don’t use if DARWIN_OS,
-       since the simplified configure.ac no longer checks for that.
-       Don’t declare if HAVE_ALIGNED_ALLOC.
-       Correct misspelling of HAVE_ALIGNED_ALLOC in ifdef.
+2016-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Encode before sending from nnspool
 
-       Backport: * lisp/files.el: Remove support for extra .dir-locals file
+       * lisp/gnus/nnspool.el (nnspool-request-post): Encode data
+       before sending it to the news server.
 
-       (dir-locals-file-2, dir-locals--all-files): Remove.
-       (dir-locals-collect-variables, dir-locals-file, dir-locals-find-file)
-       (dir-locals-read-from-file, hack-dir-local-variables): Revert changes.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/files-x.el (modify-dir-local-variable): Revert changes.
+       nnrss buffers don't have to be unibyte
 
-       * lisp/help-fns.el (describe-variable): Revert changes.
+       * lisp/gnus/nnrss.el (nnrss-insert): The buffer doesn't have
+       to be unibyte just to receive data, I think.
 
-       * doc/emacs/custom.texi (Directory Variables): Revert changes.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * etc/NEWS: Revert changes.
+       Don't use mm-with-unibyte-current-buffer in mml2015
 
-2016-01-30  Glenn Morris  <rgm@gnu.org>
+       * lisp/gnus/mml2015.el (mml2015-mailcrypt-encrypt): Don't use
+       mm-with-unibyte-current-buffer.
 
-       * lisp/net/browse-url.el (browse-url-default-browser):
-       Lower priority of non-free Chrome.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Glenn Morris  <rgm@gnu.org>
+       Don't use mm-with-unibyte-current in mml1991
 
-       Improve the custom type of some user options.
+       * lisp/gnus/mml1991.el (mml1991-epg-sign): Don't use
+       mm-with-unibyte-current.
 
-       * lisp/desktop.el (desktop-minor-mode-table):
-       * lisp/man.el (Man-frame-parameters):
-       * lisp/midnight.el (midnight-delay):
-       * lisp/speedbar.el (speedbar-select-frame-method):
-       * lisp/tooltip.el (tooltip-frame-parameters):
-       * lisp/tree-widget.el (tree-widget-space-width):
-       * lisp/type-break.el (type-break-keystroke-threshold):
-       * lisp/woman.el (woman-imenu-generic-expression):
-       * lisp/cedet/ede.el (ede-debug-program-function):
-       * lisp/cedet/ede/project-am.el (project-am-debug-target-function):
-       * lisp/emulation/viper-keym.el (viper-toggle-key):
-       * lisp/erc/erc-networks.el (erc-server-alist):
-       * lisp/gnus/message.el (message-deletable-headers, message-signature):
-       * lisp/mail/mailalias.el (mail-directory-stream):
-       * lisp/play/tetris.el (tetris-x-colors):
-       * lisp/progmodes/gud.el (gud-tooltip-modes): Improve custom type.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Simen Heggestøyl  <simenheg@gmail.com>
+       Don't use mm-with-unibyte-current in mml1991
 
-       Highlight CSS variables with variable name face
+       * lisp/gnus/mml1991.el (mml1991-pgg-sign): Don't use
+       mm-with-unibyte-current.
 
-       * lisp/textmodes/css-mode.el (css-nmstart-re): Don't match variables.
-       (css--font-lock-keywords): Highlight variables in
-       `font-lock-variable-name-face'.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Glenn Morris  <rgm@gnu.org>
+       Don't use mm-with-unibyte-buffer in utf7
 
-       * lisp/gnus/gnus-kill.el (gnus-winconf-kill-file): Not user-serviceable.
+       * lisp/gnus/utf7.el (utf7-fragment-encode): Don't use
+       mm-with-unibyte-buffer.
 
-2016-01-30  Glenn Morris  <rgm@gnu.org>
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Mark some user options that can get evalled as risky.
+       Remove XEmacs compat code from Gnus helper libraries
 
-       * lisp/allout.el (allout-title):
-       * lisp/emacs-lisp/edebug.el (edebug-global-break-condition):
-       * lisp/gnus/message.el (message-mailer-swallows-blank-line):
-       * lisp/progmodes/gud.el (gud-tooltip-display):
-       * lisp/vc/ediff-mult.el (ediff-default-filtering-regexp):
-       Mark as risky.
+       * lisp/gnus/plstore.el (plstore-called-interactively-p): Remove.
 
-2016-01-30  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/gnus/pop3.el (pop3-make-date): Remove XEmacs compat.
 
-       Disable DebPrint in sys_read on MS-Windows
+       * lisp/gnus/sieve-mode.el: Remove XEmacs compat.
 
-       * src/w32.c (sys_read): Disable a debugging print that is normal
-       when non-blocking reads are retried.
+       * lisp/gnus/spam-stat.el (spam-stat-called-interactively-p): Remove.
 
-2016-01-30  Martin Rudalics  <rudalics@gmx.at>
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       ;Fix ChangeLog entry
+       Remove XEmacs compat code from Gnus backends
 
-2016-01-30  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/gnus/mm-view.el (mm-inline-image-xemacs): Remove.
+       (mm-inline-image): Rename from mm-inline-image-emacs.
 
-       Fix typos in Introduction to Emacs Lisp manual
+       * lisp/gnus/mml.el: Remove XEmacs compat code.
 
-       * doc/lispintro/emacs-lisp-intro.texi (Emacs Initialization)
-       (kill-new function, Digression into C)
-       (Complete forward-sentence, Divide and Conquer, Find a File)
-       (lengths-list-many-files, Columns of a graph, defcustom)
-       (recursive-count-words): Fix typos.  Reported by Daniel Bastos
-       <dbastos@toledo.com>.
+       * lisp/gnus/nnheader.el: Remove XEmacs compat code.
 
-2016-01-30  Nicolas Petton  <nicolas@petton.fr>
+       * lisp/gnus/nnimap.el (nnimap-open-connection-1): Remove
+       XEmacs compat code.
 
-       Bump version to 25.0.90
+       * lisp/gnus/nnir.el (nnir-run-gmane): Remove XEmacs compat code.
 
-       * README:
-       * configure.ac:
-       * msdos/sed2v2.inp: Bump version to 25.0.90.
+       * lisp/gnus/nnmail.el (nnmail-pathname-coding-system): Remove
+       XEmacs compat code.
 
-2016-01-30  Nicolas Petton  <nicolas@petton.fr>
+       * lisp/gnus/nnmairix.el: Remove XEmacs compat code.
 
-       * etc/AUTHORS: Update the AUTHORS file
+       * lisp/gnus/nnrss.el: Remove XEmacs compat code.
 
-2016-01-30  Nicolas Petton  <nicolas@petton.fr>
+       * lisp/gnus/nntp.el: Remove XEmacs compat code.
 
-       Bump version to 25.0.90
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * README:
-       * configure.ac:
-       * msdos/sed2v2.inp: Bump version to 25.0.90.
+       Remove XEmacs compat functions from mm-util.el
+
+       * lisp/gnus/mm-util.el (mm-special-display-p): Remove.
+       (mm-decode-coding-string, mm-encode-coding-string)
+       (mm-decode-coding-region, mm-encode-coding-region): Remove.
+       (mm-string-to-multibyte): Remove.
+       (mm-char-or-char-int-p): Remove.
+       (mm-ucs-to-char): Remove compat versions of the function.
+       (mm-read-coding-system): Remove.
+       (mm-coding-system-p): Remove compat code.
+       (mm-enrich-utf-8-by-mule-ucs): Remove.
+       (mm-enable-multibyte, mm-disable-multibyte): Remove compat versions.
+       (mm-delete-duplicates): Remove.
+       (mm-multibyte-p): Remove compat versions.
+       (mm-xemacs-find-mime-charset-1): Remove.
+       (mm-xemacs-find-mime-charset): Remove.
+       (mm-make-temp-file): Made obsolete.
+       (mm-find-buffer-file-coding-system): Remove XEmacs compat.
 
-2016-01-30  Nicolas Petton  <nicolas@petton.fr>
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * etc/AUTHORS: Update the AUTHORS file
+       Remove Message and mm-decode XEmacs compat code
 
-2016-01-30  Nicolas Petton  <nicolas@petton.fr>
+       * lisp/gnus/message.el: Remove XEmacs compat code.
 
-       authors.el updates
+       * lisp/gnus/mm-decode.el (mm-create-image-xemacs): Remove.
 
-       * admin/authors.el (authors-renamed-files-alist): Additions.
+       * lisp/gnus/mm-util.el: Remove some XEmacs compat code.
 
-2016-01-30  Nicolas Petton  <nicolas@petton.fr>
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Make it possible to run make change-history on emacs-25
+       Remove som XEmacs compat code from message.el
 
-       * Makefile.in: Check if the current branch is emacs-25 instead of
-         master.
+       * lisp/gnus/message.el: Remove some XEmacs compat code.
 
-2016-01-30  lu4nx  <lx@shellcodes.org>
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Support Go language in 'etags'
+       Remove XEmacs compat code from ietf-drums.el
 
-       * lib-src/etags.c <Ruby_help>: Fix documentation of Ruby tags.
-       <Go_help>: New help.
-       <Go_suffixes>: New variable.
-       (Go_functions): New function.
-       <lang_names>: Add entry for Go.  (Bug#22370)
+       * lisp/gnus/ietf-drums.el (ietf-drums-syntax-table): Drop
+       XEmacs compat.
 
-       * doc/emacs/maintaining.texi (Tag Syntax): Document Go support.
-       * doc/man/etags.1: Mention Go support.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * etc/NEWS: Mention Go support.
+       Remove XEmacs compat code from gravatar.el
 
-       * test/etags/go-src/test.go:
-       * test/etags/go-src/test1.go: New test files.
-       * test/etags/Makefile (GOSRC): New variable.
-       (SRCS): Add $(GOSRC).
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to addition of Go tests.
+       * lisp/gnus/gravatar.el: Remove XEmacs compat code from
+       gravatar.el.
 
-2016-01-30  Eli Zaretskii  <eliz@gnu.org>
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Improve Ruby support in 'etags'
+       Remove more XEmacs compat code from Gnus
 
-       * lib-src/etags.c (Ruby_functions): Tag constants.  Don't tag
-       singleton classes.  Remove class qualifiers from tags generated
-       for method and constant names.  (Bug#22241)
+       * lisp/gnus/gnus-util.el (gnus-bound-and-true-p): Remove.
+       (gnus-timer--function): Remove.
 
-       * doc/emacs/maintaining.texi (Tag Syntax): Mention that constants
-       are tagged by etags in Ruby.
+       * lisp/gnus/gnus-uu.el (gnus-uu-save-article): Remove XEmacs
+       19.2 compat.
 
-       * etc/NEWS: Mention that constants are tagged by etags in Ruby.
+       * lisp/gnus/gnus-win.el: Remove XEmacs compat code.
 
-       * test/etags/ruby-src/test1.ru: Add more tests.
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to the changes in etags and in Ruby
-       tests.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Eli Zaretskii  <eliz@gnu.org>
+       Remove more XEmacs compat functions from gnus-util.el
 
-       Adjust etags test results to changes in copyright years
+       * lisp/gnus/gnus-util.el (gnus-put-display-table): Remove.
+       (gnus-get-display-table): Remove.
+       (gnus-format-message): Remove.
 
-       * test/etags/CTAGS.good:
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6: Adjust to shift in characters and
-       in line numbers.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Andreas Schwab  <schwab@linux-m68k.org>
+       Remove more XEmacs compat functions from Gnus
 
-       Revert "Re-enable checks in member, memql, delete to complain about non-lists"
+       * lisp/gnus/gnus-util.el (gnus-next-char-property-change): Remove.
+       (gnus-previous-char-property-change): Remove.
+       (gnus-graphic-display-p): Remove.
+       (gnus-select-frame-set-input-focus): Remove.
 
-       This reverts commit f524e8b7f12d9b5a8b92084e5385429fe7b085b9.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Nicolas Petton  <nicolas@petton.fr>
+       Remove more XEmacs compat code from gnus-util
 
-       Make it possible to run make change-history on emacs-25
+       * lisp/gnus/gnus-util.el (gnus-make-local-hook): Remove (and
+       all its usages).
+       (gnus-invisible-p): Remove.
 
-       * Makefile.in: Check if the current branch is emacs-25 instead of
-         master.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Dmitry Gutov  <dgutov@yandex.ru>
+       Remove gnus-make-local-hook
 
-       Don't fiddle with DEFAULT
+       * lisp/gnus/gnus-util.el (gnus-make-local-hook): Remove (and
+       all its usages).
 
-       * lisp/progmodes/project.el (project--completing-read-strict):
-       Don't change DEFAULT, whether is has any matches in
-       COLLECTION, or not.
+2016-02-11  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Eli Zaretskii  <eliz@gnu.org>
+       gnus-replace-in-string -> replace-regexp-in-string
 
-       Document xwidget commands and functions
+       * lisp/gnus/gnus-util.el (gnus-replace-in-string): Declare
+       obsolete.  Transform all usages of it into
+       replace-regexp-in-string.
 
-       * doc/lispref/display.texi (Xwidgets): New section, describes some
-       of the xwidget primitives.
-       * doc/lispref/display.texi (Display): Update the chapter menu.
-       * doc/emacs/misc.texi (Embedded WebKit Widgets): New section.
-       * doc/emacs/emacs.texi (Top): Update the master menu to include
-       the xwidget node.
+       * lisp/gnus/mailcap.el (mailcap-replace-in-string): Remove.
 
-2016-01-30  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Build fix for shr.el
+       Remove Gnus XEmacs compat
 
-       * shr.el (seq): Require.
+       * lisp/gnus/gnus-start.el (gnus-dribble-enter): Remove comment
+       about code that doesn't work in XEmacs.
 
-2016-01-30  Dmitry Gutov  <dgutov@yandex.ru>
+       * lisp/gnus/gnus-sum.el: Remove XEmacs compat.
 
-       Improve project-find-file yet again!
+       * lisp/gnus/gnus-topic.el: Remove XEmacs compat.
 
-       * lisp/progmodes/project.el (project--completing-read-strict):
-       New function.
-       (project-find-file-in): Use it.
-       (project-file-completion-table): Move the default
-       implementation inside the cl-defgeneric form.
-       (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01720.html)
+2016-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-30  Dmitry Gutov  <dgutov@yandex.ru>
+       Remove compat functions in gnus-spec.el
 
-       Don't pass DIR to 'hg status'
+       * lisp/gnus/gnus-spec.el (gnus-string-width-function): Remove.
+       (gnus-substring-function): Remove.
+       (gnus-use-correct-string-widths): Remove.
+       (gnus-make-format-preserve-properties): Remove.
+       (gnus-xmas-format): Remove.
 
-       * lisp/vc/vc-hg.el (vc-hg-dir-status-files):
-       Don't pass DIR to 'hg status' (bug#22481).
+       * lisp/gnus/gnus-srvr.el (gnus-server-mode): Remove XEmacs compat.
 
-2016-01-30  Stephen Leake  <stephen_leake@stephe-leake.org>
+2016-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix typo in previous commits
+       Remove Gnus XEmacs compat functions
 
-       * lisp/progmodes/project.el (project-find-file-in):
-       * lisp/vc/vc-mtn.el (vc-mtn-find-ignore-file): Fix typo in previous
-       commit.
+       * lisp/gnus/gnus-registry.el: Remove XEmacs compat.
 
-2016-01-30  Stephen Leake  <stephen_leake@stephe-leake.org>
+       * lisp/gnus/gnus-salt.el: Remove XEmacs compat.
 
-       Improve project-find-file
+       * lisp/gnus/gnus-score.el (gnus-decay-score): Remove XEmacs compat.
 
-       * lisp/progmodes/project.el (project-file-completion-table): New.
-       (project-find-file, project-or-external-find-file): Default to filename
-       at point.
-       (project-file-completion-table): New, split out from
-       project--find-file-in.
-       (project-find-file-in): Renamed from project--find-file-in, use
-       project-file-completion-table.
+2016-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/progmodes/xref.el (ede-minor-mode): New declaration.
-       (xref--find-ignores-arguments): Add doc string.
+       Remove Gnus XEmacs compatibility
 
-2016-01-30  Stephen Leake  <stephen_leake@stephe-leake.org>
+       * lisp/gnus/gnus-demon.el (gnus-demon-idle-since): Remove
+       XEmacs compat.
 
-       Implement vc-mtn-find-ignore-file, fix some doc strings
+       * lisp/gnus/gnus-dired.el: Remove XEmacs compat.
 
-       * lisp/cedet/cedet-global.el (cedet-gnu-global-root): Improve doc string.
+       * lisp/gnus/gnus-draft.el: Remove XEmacs compat.
 
-       * lisp/cedet/ede/locate.el (initialize-instance): Improve doc string.
+       * lisp/gnus/gnus-gravatar.el (gnus-gravatar-insert): Remove
+       XEmacs compat.
 
-       * lisp/vc/vc-git.el (vc-git-find-ignore-file): Fix doc string.
+       * lisp/gnus/gnus-group.el: Remove XEmacs compat.
 
-       * lisp/vc/vc-mtn.el (vc-mtn-find-ignore-file): New function.
+       * lisp/gnus/gnus-html.el: Remove XEmacs compat.
 
-2016-01-29  Vincent Belaïche  <vincentb1@users.sourceforge.net>
+       * lisp/gnus/gnus-ml.el: Remove XEmacs compat.
 
-       Correct a whole bunch of bugs coming with renamed cell relocation.
+       * lisp/gnus/gnus-picon.el (gnus-picon-style): Remove XEmacs comment.
 
-       This is the same change as commit on master branch. See
-       http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=badcd38aa86ed7973f2be2743c405710973a0bdd
+2016-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/ses.el (ses-localvars): rename variable
-       `ses--renamed-cell-symb-list' into `ses--in-killing-named-cell-list'
-       and adjust the comment about it.
-       (ses-plist-delq): new defun.
-       (ses--ses-buffer-list): new defvar.
-       (ses--unbind-cell-name): new defun.
-       (ses-relocate-symbol): Do not relocate symbol when it is a named cell.
-       (ses-relocate-formula): Undo change of
-       2011-12-27T19:30:39Z!vincentb1@users.sourceforge.net that was
-       preventing relocation for named cell --- now doing this is delegated
-       to function `ses-relocate-symbol'.
-       (ses-relocate-range): In docstring, undo change of
-       2016-01-03T07:31:52Z!johnw@newartisans.com, `ses-range' must remain
-       lower case as it is not a variable.
-       (ses-relocate-all): Cell name relocation : 1) check that cell is a
-       renamed cell by testing `ses-cell' property to :ses-named, rather than
-       comparing name to corresponding standard name. Set rowcol of renamed
-       cell into the hashmap --- `ses-cell' property must not be used for
-       that as the same name can be used for different locations in different
-       SES sheets ; 2) use `local-variable-if-set-p' rather than `boundp' and
-       `local-variable-p' to check if cell name is already in use in this
-       sheet or needs initialization.
-       (ses-relocate-all): Cell value relocation : 1) like for name
-       relocation use the `ses-cell' property rather than comparing actual
-       name to corresponding standard name. 2) Correct bug introduced in
-       2011-12-27T19:30:39Z!vincentb1@users.sourceforge.net, as the test was
-       made the other way round than the intention --- ie value relocation
-       was disabled for standard cell, not for renamed cell as was the
-       intention.
-       (ses-relocate-all): Add loop for unbinding deleted renamed cells
-       names.
-       (ses-killbuffer-hook): new defun.
-       (ses-mode): Add the ses--ses-buffer-list maintenance mechanism ---
-       kill buffer hook, plus pushing current buffer if new in list.
-       (ses-delete-row, ses-delete-column): Collect deleted renamed cells
-       into `ses--in-killing-named-cell-list'.
-       (ses-rename-cell): Remove update of variable
-       `ses--renamed-cell-symb-list', this variable is renamed to
-       `ses--in-killing-named-cell-list', and its setting is done in
-       functions `ses-delete-row' and , `ses-delete-column' now.
-       (ses-rename-cell): Make cell new name a buffer local variable.
-       (ses-rename-cell): Change correction of
-       2015-12-30T23:10:37Z!vincentb1@users.sourceforge.net concerning
-       computation of the range over which `cursor-intangible' property was
-       to be updated. This correction was ok for non spilling cells, but not
-       for cells spilling over following blank cells. Simply use
-       `next-single-property-change' rather than computing the end column
-       from column widths.
+       Don't use image-map if it isn't defined
 
-2016-01-29  Andreas Schwab  <schwab@linux-m68k.org>
+       * lisp/net/shr.el (shr-image-map): Only use image-map as a
+       parent if it's defined (bug#22614).
 
-       Re-enable checks in member, memql, delete to complain about non-lists
+2016-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/fns.c (Fmember, Fmemql, Fdelete): Revert 2007-10-16 change.
+       Check for MagickAutoOrientImage
 
-2016-01-29  Martin Rudalics  <rudalics@gmx.at>
+       * configure.ac: Check for MagickAutoOrientImage.
 
-       Minor doc(-string) tweaks
+       * src/image.c (imagemagick_load_image): Don't use
+       MagickAutoOrientImage unless it's available.
 
-       * lisp/window.el (window-in-direction): Fix doc-string typo.
-       * doc/lispref/frames.texi (Frame Font): Mention canonical
-       character width/height.
-       * doc/lispref/windows.texi (Windows and Frames): Clarify
-       handling of minibuffer window for `window-in-direction'.
-       (Window Sizes): Minor tweaks in descriptions of
-       `window-max-chars-per-line', `window-min-width' and
-       `window-min-size'.
-       (Deleting Windows): Minor tweak in `delete-window' description.
-       (Selecting Windows): Clarify window use time description.
-       (Cyclic Window Ordering): Minor tweak.
-       (Switching Buffers): Clarify description of
-       `switch-to-buffer-in-dedicated-window'.
+2016-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-29  Eli Zaretskii  <eliz@gnu.org>
+       Document EXIF image rotation
 
-       Minor improvements to 'pcase' documentation
+       * doc/lispref/display.texi (ImageMagick Images): Mention EXIF rotation.
 
-       * doc/lispref/control.texi (Pattern matching case statement):
-       Improve the documentation of 'pcase' per comments.  See two
-       discussion threads on emacs-devel@gnu.org for the details:
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01335.html
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01336.html.
+2016-02-10  Dima Kogan  <dima@secretsauce.net>
 
-2016-01-29  Glenn Morris  <rgm@gnu.org>
+       Support integer image rotation and respect EXIF rotations
 
-       Don't use eval to quieten prolog.el compilation.
+       * src/image.c (imagemagick_load_image): Allow integer rotations in
+       addition to floating point rotations (bug#22591).
+       * src/image.c (imagemagick_load_image): Images that have an
+       orientation given in EXIF and have no explicit :rotation tag are now
+       pre-rotated.  All information such as width/height is reported for the
+       rotated image.
 
-       * lisp/progmodes/prolog.el (pltrace-on, pltrace-off): Declare.
-       (prolog-enable-sicstus-sd, prolog-disable-sicstus-sd): Don't use eval.
+2016-02-10  Wolfgang Jenkner  <wjenkner@inode.at>
 
-2016-01-29  Glenn Morris  <rgm@gnu.org>
+       * lisp/net/shr.el (image-map): Defvar it.  (Bug#22614)
 
-       Mark some risky prolog variables.
+2016-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/progmodes/prolog.el (prolog-system-version)
-       (prolog-keywords, prolog-types, prolog-mode-specificators)
-       (prolog-determinism-specificators, prolog-directives)
-       (prolog-program-name, prolog-program-switches)
-       (prolog-consult-string, prolog-compile-string)
-       (prolog-eof-string, prolog-prompt-regexp, prolog-help-function):
-       Mark anything processed by prolog-find-value-by-system as risky.
+       * lisp/gnus/gnus-cite.el: Remove XEmacs compat code.
 
-2016-01-28  Glenn Morris  <rgm@gnu.org>
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/custom.el (defcustom): Doc fix.
+       Remove compat code from gnus-bookmark.el
 
-       * doc/lispref/customize.texi (Variable Definitions):
-       Defcustom should always have a type.
+       * lisp/gnus/gnus-bookmark.el (gnus-bookmark-mouse-available-p): Remove.
+       (gnus-bookmark-remove-properties): Remove.
 
-2016-01-28  Glenn Morris  <rgm@gnu.org>
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/cedet/semantic/db-file.el (semanticdb-persistent-path):
-       Fix :type.
+       Remove XEmacs compat code from gnus-a*.el
 
-       * lisp/emacs-lisp/package.el (package-load-list): Improve :type.
+       * lisp/gnus/gnus-agent.el: Remove compat code.
 
-2016-01-28  Michael Albinus  <michael.albinus@gmx.de>
+       * lisp/gnus/gnus-art.el: Remove compat code.
 
-       Fix Bug#22452
+       * lisp/gnus/gnus-async.el: Remove compat code.
 
-       * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection):
-       * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
-       * lisp/net/tramp-sh.el (tramp-maybe-open-connection):
-       * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection):
-       Mark it as connected.
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/net/tramp.el (tramp-handle-file-remote-p): Check also, if
-       connection property "connected" is set.  (Bug#22452)
+       Remove gmm compat functions
 
-2016-01-27  Glenn Morris  <rgm@gnu.org>
+       * lisp/gnus/gmm-utils.el (gmm-image-search-load-path): Remove.
+       (gmm-write-region): Remove.
+       (gmm-called-interactively-p): Remove.
 
-       * lisp/xwidget.el (xwidget-query-on-exit-flag): Declare.
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/xwidget.el (xwidget-webkit-browse-url): Give explicit error
-       if not compiled with xwidgets.
+       * lisp/gnus/ecomplete.el: Remove XEmacs compat code.
 
-2016-01-27  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       C-u C-x = example doc fix
+       Remove compat code from compface.el
 
-       * doc/emacs/mule.texi (International Chars):
-       Adjust example to match current behavior of C-u C-x =.
+       * lisp/gnus/compface.el: Remove XEmacs compat code throughout.
 
-2016-01-27  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       malloc.h hygiene
+       Remove the now empty gnus-ems.el and references to it
 
-       This attempts to future-proof Emacs a bit against possible glibc
-       changes, by having Emacs use <malloc.h> declarations rather than
-       coding them up by hand.  Problem noted by Florian Weimer in:
-       https://sourceware.org/ml/libc-alpha/2016-01/msg00777.html
-       Implement this mainly by moving malloc.h-related functions from
-       emacs.c (which does not include <malloc.h>) to alloc.c (which does).
-       * src/alloc.c (my_heap_start) [DOUG_LEA_MALLOC || GNU_LINUX]:
-       New function.
-       The remaining changes to this file apply only if DOUG_LEA_MALLOC.
-       (alloc_unexec_pre, alloc_unexec_post): New functions.
-       (malloc_initialize_hook): Use my_heap_start and alloc_unexec_post.
-       (__MALLOC_HOOK_VOLATILE): New macro, if not already defined.
-       (__malloc_initialize_hook): Use it.
-       (malloc_state_ptr, malloc_initialize_hook, __malloc_initialize_hook):
-       Move here from ...
-       * src/emacs.c: ... here.
-       (malloc_get_state, malloc_set_state): Remove extern decls.
-       (my_heap_start) [DOUG_LEA_MALLOC || GNU_LINUX]: Remove static var.
-       All uses changed to similarly-named new function.
-       (Fdump_emacs): Use new functions alloc_unexec_pre, alloc_unexec_post.
-       * src/lisp.h (my_heap_start, alloc_unexec_pre, alloc_unexec_post):
-       New decls.
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-26  Eli Zaretskii  <eliz@gnu.org>
+       Remove Gnus compat names for mouse bindings
 
-       * doc/emacs/mark.texi (Using Region): Clarify wording.  (Bug#22467)
+       * lisp/gnus/gnus-ems.el (gnus-widget-button-keymap): Remove.
+       (gnus-down-mouse-2): Remove.
+       (gnus-down-mouse-3): Remove.
 
-2016-01-26  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Remove never-set var handle_user_signal_hook
+       Drop Gnus compat functions
 
-       * src/keyboard.c, src/keyboard.h (handle_user_signal_hook):
-       Remove never-set var.  All uses removed.
+       * lisp/gnus/gnus-ems.el (gnus-mule-max-width-function): Remove.
 
-2016-01-26  K. Handa  <handa@gnu.org>
+       * lisp/gnus/gnus-util.el (gnus-kill-all-overlays): Move here.
 
-       Backport:fix previous change of src/ftfont.c (ftfont_shape_by_flt)
+       * lisp/gnus/gnus.el (gnus-mode-line-modified): Remove.
 
-       * src/ftfont.c (ftfont_shape_by_flt): Fix previous change.  Access the
-       second glyph only when there are enough glyphs.
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       (cherry picked from commit 9835757013569673854b692ccbb58bfb3c3ed1f7)
+       Get rid of gnus-ems-redefine
 
-2016-01-26  K. Handa  <handa@gnu.org>
+       * lisp/gnus/gnus-ems.el (gnus-mouse-face-prop): Remove.
 
-       support rendering of wider range of combinging characters by ftfont backend
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/language/hebrew.el (hebrew-shape-gstring): If the font backend
-       supports rendering of combining characters, call
-       font-shape-gstring.
+       * lisp/gnus/gnus-spec.el: Move definition here from gnus-ems.el.
 
-       * src/font.c (Ffont_get): Handle `combining-capability' property.
-       (syms_of_font): New symbol ":combining-capability'.
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/font.h (struct font_driver): New member combining_capability.
+       Remove Gnus compat code
 
-       * src/ftfont.c: Include "category.h".
-       (ftfont_driver): Initialize combining_capability to
-       ftfont_combining_capability.
-       (ftfont_shape_by_flt): If OTF is null, try to find a suitable
-       FLT in advance.
-       (ftfont_combining_capability): New function.
+       * lisp/gnus/gnus-ems.el (gnus-ems-redefine): Remove
+       transitional code from ten years ago.
 
-       (cherry picked from commit 536f48e9a2251b9e654ea974bd90ff2f40218753)
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-26  Anders Lindgren  <andlind@gmail.com>
+       Allow interactively scaling past :max-width etc
 
-       Fixed NextStep fullscreen issue (bug#22468)
+       * lisp/image.el (image--current-scaling)
+       (image--image-without-parameters): New functions.
+       (image--change-size): Use them to allow changing the size of a
+       image even if it has :width/:max-width (etc.) already set.
 
-       When in fullscreen mode, `[screen visibleFrame]' sometimes
-       includes, sometimes excludes the menu bar. This could cause
-       a frame to be placed too low when in fullscreen mode.
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/nsterm.m (ns_menu_bar_should_be_hidden): Trace.
-       (constrain_frame_rect): New parameter, isFullscreen, when true don't
-       query the height of the menu bar.
-       (ns_constrain_all_frames): Pass `false' (isFullscreen) to
-       `constrain_frame_rect'.
-       ([EmacsView initFrameFromEmacs:]): Trace.
-       ([EmacsView isFullscreen]): Trace.
-       ([EmacsWindow constrainFrameRect:toScreen:]): Pass fullscreen
-       state to `constrain_frame_rect'.
+       * lisp/gnus/mm-decode.el (shr-image-map): Compilation fix.
 
-2016-01-26  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/files.el: Use a fixed file name for the second dir-locals file
+       Allow accessing the image commands via shr
 
-       (dir-locals-file): Revert to its original fixed value.
-       (dir-locals-file-2): New const.
-       (dir-locals--all-files): Don't use `file-name-all-completions'.
-       Instead, just check for the 2 dir-locals files and return a list
-       of the ones that exit (if any).
+       * lisp/gnus/mm-decode.el (mm-convert-shr-links): Allow
+       accessing the image commands.
 
-       * etc/NEWS: Document the change.
+       * lisp/net/shr.el (shr-image-map): New map used for images.
+       (shr-urlify): Don't overwrite image maps when applying URL maps.
 
-       * doc/emacs/custom.texi (Directory Variables): Document the change.
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * doc/lispref/variables.texi (Directory Local Variables): Update
-       accordingly.
+       Use a sparse image keymap
 
-2016-01-26  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * lisp/image.el (image-map): Use a sparse keymap.
 
-       * lisp/files-x.el (modify-dir-local-variable): Small rewrite
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Change a variable name to be more meaningful, and reorder some of
-       the code with no change in behaviour.
+       Put a keymap on images created with insert-image and friends
 
-2016-01-26  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * lisp/image.el (image-save): New command.
+       (image-rotate): Ditto.
+       (image-map): New keymap.
+       (insert-image): Put the image-map on all images.
+       (insert-sliced-image): Ditto.
+       * doc/lispref/display.texi (Showing Images): Document the
+       image map.
 
-       * lisp/files.el (dir-locals-find-file): Refactor return values
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Returning a cache remains unchanged, but the case of returning a
-       file (or pattern) is now changed to return the contaning
-       directory.
+       Fix some folding issues in read-multiple-choice
 
-       (dir-locals-read-from-file): Rename to `dir-locals-read-from-dir'
-       and make obsolete.
-       (dir-locals-read-from-dir): Simplify accordingly.
-       (hack-dir-local-variables): Simplify accordingly and rename a
-       variable.
+       * lisp/subr.el (read-multiple-choice): Fix folding when you
+       have many items.
 
-2016-01-26  Glenn Morris  <rgm@gnu.org>
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/textmodes/flyspell.el (flyspell--prev-meta-tab-binding):
-       Declare.
+       Fix typo in last checkin
 
-       * configure.ac (USE_CAIRO): Rename to more standard HAVE_CAIRO.
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * configure.ac (--with-cairo): Say it's experimental.
+       Remove Gnus compat functions
 
-       * lisp/xwidget.el (xwidget-webkit-scroll-behavior):
-       Rename using American spelling.  Update all uses.
+       * lisp/gnus/gnus-ems.el (gnus-mark-active-p)
+       (gnus-region-active-p, gnus-select-lowest-window)
+       (gnus-summary-display-table, gnus-max-width-function): Remove
+       compat functions.
 
-2016-01-26  Glenn Morris  <rgm@gnu.org>
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Yet more xwidget doc fixes.
+       Move non-compat Gnus functions to gnus-util.el
 
-       * lisp/xwidget.el (xwidget-webkit-scroll-behaviour)
-       (xwidget-insert, xwidget-webkit-browse-url)
-       (xwidget-webkit-scroll-up, xwidget-webkit-scroll-down)
-       (xwidget-webkit-scroll-forward, xwidget-webkit-scroll-backward)
-       (xwidget-webkit-insert-string, xwidget-webkit-show-named-element)
-       (xwidget-webkit-show-id-element)
-       (xwidget-webkit-show-id-or-named-element)
-       (xwidget-webkit-adjust-size, xwidget-webkit-current-url)
-       (xwidget-webkit-execute-script-rv)
-       (xwidget-webkit-copy-selection-as-kill, xwidget-get)
-       (xwidget-put):  Doc fixes.
-       (xwidget-webkit-insert-string, xwidget-webkit-show-named-element)
-       (xwidget-webkit-show-id-element)
-       (xwidget-webkit-show-id-or-named-element): Prompt fixes.
+       * lisp/gnus/gnus-util.el (gnus-remove-image, gnus-put-image)
+       (gnus-create-image, gnus-image-type-available-p): Move here
+       from gnus-ems.el, since these aren't compat functions.
 
-2016-01-25  Ted Zlatanov  <tzz@lifelogs.com>
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/gnus/gnus-art.el (gnus-blocked-images):
-       Add explicit nil choice and tags.
+       Omit valloc decl if redundant
 
-2016-01-25  Paul Eggert  <eggert@cs.ucla.edu>
+       * src/gmalloc.c (valloc): Omit decl if malloc.h is included,
+       to pacify --enable-gcc-warnings.
 
-       Spelling fixes
+2016-02-09  Wolfgang Jenkner  <wjenkner@inode.at>
 
-2016-01-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+       Restore the calloc family.
 
-       (font-lock-ensure-function): Fix bug#22399
+       * src/gmalloc.c (calloc, gcalloc, hybrid_calloc): Restore definitions.
+       They were lost in a4817d8 but calloc is still (marginally) used in
+       code statically liked with emacs, so hybrid_calloc is needed.
+       Also, in the non-hybrid case, we can't get rid of calloc anyway as
+       other libraries liked with emacs may need it.
+       * src/conf_post.h: Restore redefinition of calloc to hybrid_calloc.
 
-       * lisp/font-lock.el (font-lock-ensure-function): Fix handling when
-       font-lock-mode is not enabled (bug#22399).
+2016-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-25  Alan Mackenzie  <acm@muc.de>
+       Remove some Gnus compat functions
 
-       Expunge "allow" + infinitive from source and doc, part 2.
+       * lisp/gnus/gnus-ems.el (gnus-string-mark-left-to-right)
+       (gnus-window-inside-pixel-edges, gnus-set-process-plist)
+       (gnus-process-plist, gnus-process-get, gnus-process-put): Remove.
 
-       Do the same for "permit", "enable", "prevent", and (where appropriate)
-       "require".
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-       doc/misc/reftex.texi:
-       doc/misc/url.texi:
-       lib/get-permissions.c:
-       lib/strftime.c:
-       lisp/org/org-element.el:
-       lisp/org/org-mobile.el:
-       lisp/textmodes/reftex-vars.el:
-       src/bidi.c:
-       src/emacs.c:
-       src/xdisp.c:
-       test/etags/c-src/emacs/src/lisp.h:
+       -
 
-       Expunge the likes of "This allows to do something" from the above files.
+       -
 
-2016-01-25  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode): Redundant line
+       Merge from origin/emacs-25
 
-       `special-mode' is already read-only.
+       4feb962 * lisp/comint.el (comint-prompt-read-only): Clean tabs in docstring
+       cc419fb Don't inloop gnus-uu-mark-thread on the last thread
+       51c77a2 Display non-ASCII group names better in prompts
+       f93d669 Default to gpg2 instead of gpg
 
-2016-01-25  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/emacs-lisp/ert.el (ert--results-move): Change error to user-error
+       Merge from origin/emacs-25
+
+       9ffe7dd * lisp/isearch.el (isearch-define-mode-toggle): Improve logic
+       16140f7 * lisp/menu-bar.el (menu-bar-options-menu): New search submenu
+       3db6adb * lisp/isearch.el (search-default-mode)
+       4ea1ea7 * lisp/isearch.el: Rename search-default-regexp-mode to search-default-mode
+       c77ffc8 Use monitor's resolution for positioning tooltips
+       49e5749 Fix file-notify-test on MS-Windows
+       be1d874 Fix issues found by auditing w32notify code
+       87ae218 Extend etags Ruby support for accessors
+       aa35257 Update publicsuffix.txt.
+       6816bff Ensure that Gnus dribble handling allows removing entries
+       691feae Be consistent when using encoded strings in nnimap data
+       3ed423b Display the decoded Gnus group name
+       5428b5b Use completion-ignore-case instead of defining command
 
-2016-01-25  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Port "$@" to OpenIndiana ksh93
+       Merge from origin/emacs-25
 
-       In http://lists.gnu.org/archive/html/bug-autoconf/2015-12/msg00000.html
-       Pavel Raiskup reports that ${1+"$@"} runs afoul of a bug in /bin/sh
-       (derived from ksh 93t+ 2010-03-05).  ${1+"$@"} works around an ancient
-       bug in long-dead shells, so remove the workaround.
-       * admin/check-doc-strings, configure.ac, lib-src/rcs2log:
-       Use plain "$@" rather than ${1+"$@"}.
+       1eaf68f * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       d333716 ; * etc/NEWS: Expand news entry for scss-mode
+       c32c16f ; Better document changes in ls-lisp default behavior
+       dc6eed2 Fix doc string of tls-program
 
-2016-01-25  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * src/xwidget.c (Fxwidget_set_adjustment): Fix doc string quoting typo.
+       Merge from origin/emacs-25
 
-2016-01-25  Paul Eggert  <eggert@cs.ucla.edu>
+       2c117fc * etc/NEWS: Document new mpc.el features
+       71a0496 * lisp/custom.el (defface): Revert indentation change.  (Bug#22524)
+       9dfece1 Correctly fontify C++ initializations which "look like" functions.
+       4485222 Improve newsticker-treeview-selection-face
+       4236944 Minor fix in tagging Ruby accessors by etags
+       35fc77d Spelling fixes
+       3dda110 Remove 'def X' from the example
 
-       Improve wording for SMB support
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * doc/misc/tramp.texi (External methods): Improve and modernize
-       wording for discussion of smbclient.  There is no longer any
-       need to mention the laundry list of old MS Windows implementations
-       of SMB and CIFS, nor to mention CIFS.  Also, give a URL for Samba.
+       Minor alignas cleanup
 
-2016-01-24  Paul Eggert  <eggert@cs.ucla.edu>
+       * src/lisp.h (alignas): Remove now-redundant #ifdef that was left
+       over from the old way of doing things, before Bug#20862 was fixed.
 
-       Merge from gnulib
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-       This incorporates:
-       2016-01-24 openat_proc_name: fix last '/' overwritten on OS/2 kLIBC
-       2016-01-24 closedir, dirfd, opendir: port to OpenSolaris 5.10
-       2016-01-15 detect utimes() correctly on OS/2 kLIBC
-       2016-01-15 openat_proc_name: port to OS/2 kLIBC
-       2016-01-14 stdint: check _INTPTR_T_DECLARED for intptr_t etc.
-       2016-01-14 opendir, closedir, dirfd, fdopendir: port to OS/2 kLIBC
-       2016-01-14 dup, dup2, fcntl: support a directory fd on OS/2 kLIBC
-       2016-01-14 binary-io: don't put fd in binary mode if a console on EMX
-       2016-01-14 sig2str: list all signals on FreeBSD >= 7
-       2016-01-13 acl-permissions: port to USE_ACL==0 platforms
-       2016-01-12 mktime: rename macro to avoid glibc clash
-       2016-01-12 Port "$@" to OpenIndiana ksh93
-       2016-01-12 Port Universal Time settings to strict POSIX
-       * build-aux/gitlog-to-changelog, build-aux/update-copyright:
-       * doc/misc/texinfo.tex, lib/acl-internal.c, lib/acl-internal.h:
-       * lib/binary-io.h, lib/dirent.in.h, lib/dirfd.c, lib/dup2.c:
-       * lib/fcntl.c, lib/fdopendir.c, lib/mktime.c, lib/openat-proc.c:
-       * lib/sig2str.h, lib/stdint.in.h, m4/dirfd.m4, m4/dup2.m4:
-       * m4/fcntl.m4, m4/utimes.m4:
-       Copy from gnulib.
-       * m4/gnulib-comp.m4: Regenerate.
+       Add lmalloc commentary and tweak laligned
 
-2016-01-24  Alan Mackenzie  <acm@muc.de>
+       * src/alloc.c (laligned): Help compiler in a tiny way by putting
+       the more-commonly-failing disjunct first.
 
-       Expunge "allow" + infinitive without direct object from source and doc.
+2016-02-09  Eli Zaretskii  <eliz@gnu.org>
 
-       Do the same for "permit", "enable", and "prevent".
+       Clarify documentation of key binding conventions
 
-       * doc/emacs/mule.texi:
-       * doc/lispref/control.texi:
-       * doc/lispref/display.texi:
-       * doc/lispref/frames.texi:
-       * doc/lispref/functions.texi:
-       * doc/lispref/nonascii.texi:
-       * doc/lispref/streams.texi:
-       * doc/lispref/windows.texi:
-       * doc/misc/dbus.texi:
-       * doc/misc/eww.texi:
-       * doc/misc/flymake.texi:
-       * doc/misc/octave-mode.texi:
-       * doc/misc/org.texi:
-       * doc/misc/reftex.texi:
-       * doc/misc/tramp.texi:
-       * doc/misc/wisent.texi:
-       * etc/NEWS:
-       * lisp/autorevert.el:
-       * lisp/cedet/mode-local.el:
-       * lisp/cedet/semantic/senator.el:
-       * lisp/cedet/semantic/wisent.el:
-       * lisp/dos-fns.el:
-       * lisp/frameset.el:
-       * lisp/gnus/gnus-agent.el:
-       * lisp/gnus/mm-util.el:
-       * lisp/international/characters.el:
-       * lisp/ldefs-boot.el:
-       * lisp/mail/mailclient.el:
-       * lisp/man.el:
-       * lisp/mh-e/mh-search.el:
-       * lisp/net/tramp-cmds.el:
-       * lisp/net/tramp-gvfs.el:
-       * lisp/org/org-crypt.el:
-       * lisp/org/org-element.el:
-       * lisp/org/org-feed.el:
-       * lisp/org/org.el:
-       * lisp/org/ox-ascii.el:
-       * lisp/org/ox-icalendar.el:
-       * lisp/org/ox-publish.el:
-       * lisp/org/ox.el:
-       * lisp/play/gamegrid.el:
-       * lisp/play/gomoku.el:
-       * lisp/progmodes/antlr-mode.el:
-       * lisp/progmodes/python.el:
-       * lisp/progmodes/vhdl-mode.el:
-       * lisp/strokes.el:
-       * lisp/textmodes/ispell.el:
-       * lisp/tree-widget.el:
-       * lisp/vc/pcvs.el:
-       * lisp/window.el:
-       * src/lisp.h:
-       * src/w32.c:
-       * src/w32heap.c:
-       * src/w32term.c:
-       * src/window.c:
-       * src/xfaces.c:
+       * doc/lispref/tips.texi (Key Binding Conventions): Clarify which
+       "punctuation characters" are reserved after "C-c".  (Bug#22604)
 
-       Replace solecisms like "This allow to do something" with a correct
-       alternative, such as "This allow you to do something", "This allows
-       something to be done" or "This allows the doing of something".
+2016-02-09  Oscar Fuentes  <ofv@wanadoo.es>
 
-2016-01-24  l3thal  <kwhite@gnu.org>
+       * etc/NEWS: mention the `vc-faces' customization group
 
-       Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-24  Kelvin White  <kwhite@gnu.org>
+       Sync with gnulib
 
-       Add NEWS entry for asynchronous reconnect in ERC
+       This incorporates:
+       2016-02-09 stdalign: port to clang 3.7.0
+       2016-02-06 misc: port better to gcc -fsanitize=address
+       * doc/misc/texinfo.tex, lib/stdalign.in.h, m4/acl.m4, m4/getgroups.m4:
+       Copy from gnulib.
 
-2016-01-24  l3thal  <kwhite@gnu.org>
+2016-02-09  Michael Albinus  <michael.albinus@gmx.de>
 
-       Add NEWS entry for asynchronous reconnect in ERC
+       * CONTRIBUTE: Add more examples for $(SELECTOR) make variable.
 
-2016-01-24  Kelvin White  <kwhite@gnu.org>
+2016-02-09  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       browse-url.el: Add 'google-chrome' to supported browsers.
+       Make mm-html-inhibit-images and mm-html-blocked-images default to nil
 
-2016-01-24  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/gnus/mm-decode.el (mm-html-inhibit-images)
+       (mm-html-blocked-images): Default to nil.
 
-       Port Tramp manual to latest Texinfo
+       * doc/misc/emacs-mime.texi (Display Customization): Mention that
+       mm-html-inhibit-images and mm-html-blocked-images default to nil.
 
-       Otherwise, 'make pdf' did not work (Bug#22416).
-       * doc/misc/tramp.texi (xxx, yyy): Remove macros.
-       (trampfn): Specialize to the case where METHOD is nonempty.
-       The 2nd argument is now user@host, not 2nd user and 3rd host args.
-       All uses changed.
-       (trampf): New macro.
+       * etc/NEWS (Gnus): Document mm-html-inhibit-images and
+       mm-html-blocked-images.
 
-2016-01-24  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-02-08  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * eww.el (eww-render): Protect against empty content-types.
+       Increase success rate of fallback lmalloc
 
-2016-01-24  Nicolas Petton  <nicolas@petton.fr>
+       * src/alloc.c (lmalloc, lrealloc): Reallocate with (typically)
+       larger and larger sizes, to increase the probability that
+       the allocator will return a Lisp-aligned pointer.
 
-       authors.el updates
+2016-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * admin/authors.el (authors-ignored-files, authors-renamed-files-alist):
-         Additions.
+       Make backgrounds extend to the end of the lines in shr
 
-2016-01-24  Dmitry Gutov  <dgutov@yandex.ru>
+       * lisp/net/shr.el (shr-face-background): Faces can also be on
+       the form `(:background "#fff)' (bug#22547).
 
-       Rename xref-query-replace to xref-query-replace-in-results
+2016-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/progmodes/xref.el(xref-query-replace):
-       Rename to xref-query-replace-in-results.
-       (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01240.html)
+       Make the `R' command get the correct relative <img>s
 
-       * lisp/progmodes/xref.el (xref--xref-buffer-mode-map):
-       * lisp/dired-aux.el (dired-do-find-regexp-and-replace):
-       * doc/emacs/dired.texi (Operating on Files):
-       * doc/emacs/maintaining.texi (Xref Commands)
-       (Identifier Search, Identifier Search): Update accordingly.
+       * lisp/net/eww.el (eww-readable): Preserve the base URL so
+       that image expansions are fetched from the right place (bug#22605).
 
-2016-01-24  Dmitry Gutov  <dgutov@yandex.ru>
+       (cherry picked from commit 8722e849f75ceafb82a1c17105e8ab76077a8ebc)
 
-       Update cl-defgeneric and cl-defmethod docstrings
+       Backport:
 
-       * lisp/emacs-lisp/cl-generic.el: Remove outdated TODO item.
-       (cl-defgeneric): Rename BODY to DEFAULT-BODY.
-       (cl-defmethod): Mention that multiple dispatch arguments are
-       allowed.  Document supported types.  (Bug#22336)
+2016-02-08  Mike Kupfer  <m.kupfer@acm.org>
 
-2016-01-23  Dmitry Gutov  <dgutov@yandex.ru>
+       Fix typos in emacs-mime.texi and gnus.texi
 
-       Comment out next-error-function integration in xref
+       * doc/misc/emacs-mime.texi (Display Customization):
+       * doc/misc/gnus.texi (HTML): Fix typo.
 
-       * lisp/progmodes/xref.el (xref--xref-buffer-mode):
-       Comment out next-error-function integration
-       (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01286.html).
+2016-02-08  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2016-01-23  John Wiegley  <johnw@newartisans.com>
+       * doc/misc/emacs-mime.texi (Display Customization):
+       Doc fix for mm-html-inhibit-images.
 
-       Correct a use of "which" in intro.texi
+2016-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-23  Alan Mackenzie  <acm@muc.de>
+       Fix message-cross-post-followup-to group names
 
-       Distinguish the two meanings of Java's keyword "default".  Fixes bug #22358.
+       * lisp/gnus/message.el (message-cross-post-followup-to): Don't
+       insert group names like "nntp+foo:zot", because those aren't valid.
 
-       * lisp/progmodes/cc-engine.el (c-guess-basic-syntax CASE 14): Check the
-       context of case labels (including "default") more rigorously.
-       (c-guess-basic-syntax CASE 15): Consequential amendment.
+2016-02-08  David Edmondson  <dme@dme.org>
 
-       * lisp/progmodes/cc-langs.el (c-modifier-kwds): Add "default" to Java's value.
+       Compare recipient and keys case-insensitively
 
-2016-01-23  Oscar Fuentes  <ofv@wanadoo.es>
+       * lisp/gnus/mml2015.el: (mml-secure-check-user-id): When comparing a
+       recipient address with that from a key, do so in a case insensitive
+       manner (bug#22603).
 
-       Don't operate on menu bar of nonexistent frame
+2016-02-08  Glenn Morris  <rgm@gnu.org>
 
-       * src/xfns.c (Fx_hide_tip) [USE_LUCID]: Check that the current frame
-       is valid before redisplaying its menu. Fixes bug#22438.
+       * lisp/gnus/mm-decode.el (mm-alist-to-plist): Doc fix.
 
-2016-01-23  Anders Lindgren  <andlind@gmail.com>
+2016-02-08  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       Unbreak the GNUstep build.
+       Refactor HTML images handling of Gnus and mm-* (a part of bug#21650)
 
-       * src/nsterm.m ([EmacsBell init]): In GNUstep, don't use the
-       predefined "caution" image. Add trace.
-       (x_set_window_size): Remove unused variables `cols' and `rows'.
-       (ns_draw_fringe_bitmap): Exclude assignment of `fromRect' when
-       GNUstep is used.
-       ([EmacsView updateFrameSize:]): Remove unused variable `win'.
-       ([EmacsWindow zoom:]): Remove unused variable `f'.
+       * doc/misc/emacs-mime.texi (Display Customization):
+       Remove mm-inline-text-html-with-images; add documentations for
+       mm-html-inhibit-images and mm-html-blocked-images.
 
-2016-01-23  Eli Zaretskii  <eliz@gnu.org>
-           John Wiegley  <johnw@gnu.org>
-           Michael Heerdegen  <michael_heerdegen@web.de>
+       * lisp/gnus/gnus-art.el (gnus-article-show-images):
+       No need to bind mm-inline-text-html-with-images.
+       (gnus-bind-safe-url-regexp): Rename to gnus-bind-mm-vars.
+       (gnus-bind-mm-vars): Rename from gnus-bind-safe-url-regexp;
+       bind mm-html-inhibit-images and mm-html-blocked-images.
+       (gnus-mime-view-all-parts, gnus-mime-view-part-internally)
+       (gnus-mm-display-part, gnus-mime-display-single)
+       (gnus-mime-display-alternative): Use gnus-bind-mm-vars.
 
-       Improve documentation of 'pcase'
+       * lisp/gnus/mm-decode.el (mm-inline-text-html-with-images): Remove.
+       (mm-html-inhibit-images, mm-html-blocked-images): New user options.
+       (mm-shr): Bind shr-inhibit-images and shr-blocked-images with
+       mm-html-inhibit-images and mm-html-blocked-images respectively
+       instead of gnus-inhibit-images and gnus-blocked-images.
 
-       * doc/lispref/control.texi (Pattern matching case statement):
-       Reorganize, expand, and improve wording.
+       * lisp/gnus/mm-view.el (mm-setup-w3m): Use mm-html-inhibit-images
+       instead of mm-inline-text-html-with-images.
 
-       * etc/NEWS: Mention that 'pcase' changes are documented.
+2016-02-08  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-23  Paul Eggert  <eggert@cs.ucla.edu>
+       Port to FreeBSD 11-CURRENT i386
 
-       * etc/NEWS: Say that Cairo is experimental.
+       Problem reported by Herbert J. Skuhra in:
+       http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00354.html
+       Instead of trying
+       * src/alloc.c (lmalloc, lrealloc, laligned): New functions.
+       (xmalloc, xzalloc, xrealloc, lisp_malloc): Use them.
+       (__alignof__) [!__GNUC__ && !__alignof__]: New macro.
+       (MALLOC_IS_GC_ALIGNED): New macro.
+       * src/lisp.h (NONPOINTER_BITS): Remove.  All uses removed.
+       No longer needed now that alloc.c uses lmalloc and lrealloc.
 
-2016-01-23  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-08  Michael Albinus  <michael.albinus@gmx.de>
 
-       Report error for PNG under Cairo
+       Some fixes in file-notify-tests.el
 
-       * src/image.c (lookup_rgb_color): Signal a file error instead
-       of dumping core when mishandling an image.
+       * test/automated/file-notify-tests.el
+       (file-notify--test-with-events-check)
+       (file-notify--test-with-events-explainer): New defuns.
+       (file-notify--test-with-events): Use it.
+       (file-notify-test07-backup): Fix docstring.  Some of the
+       backends fire two `changed' events.  Backup by rename doesn't
+       work for kqueue.
 
-2016-01-23  Arash Esbati  <esbati@gmx.de>
+2016-02-07  Michael Albinus  <michael.albinus@gmx.de>
 
-       Delete a spurious backquote (tiny change)
+       Fix Bug#22557
 
-       * lisp/textmodes/reftex-ref.el (reftex-label): Delete a
-       spurious backquote which raises an error with emacs 25.
+       * lisp/filenotify.el (file-notify-callback): Do not send a
+       `stopped' event in case of backup by renaming.  (Bug#22557)
 
-2016-01-23  Paul Eggert  <eggert@cs.ucla.edu>
+       * test/automated/Makefile.in: Use $(SELECTOR_EXPENSIVE) for
+       all targets but check and check-maybe.
 
-       Pacify --enable-gcc-warnings --with-cairo
+       * test/automated/file-notify-tests.el
+       (file-notify--test-read-event-timeout): New defconst.
+       (file-notify--deftest-remote, file-notify--wait-for-events)
+       (file-notify-test02-events)
+       (file-notify-test04-file-validity)
+       (file-notify-test06-many-events): Use it.
+       (file-notify--test-cleanup): Make it more robust.  Delete also
+       backup file.
+       (file-notify-test07-backup): New test.
 
-       Problem reported by Alexander Kuleshov in:
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01289.html
-       * src/gtkutil.c (xg_get_page_setup):
-       Use switch rather than if-then-else.
-       * src/image.c (COLOR_TABLE_SUPPORT):
-       Define directly rather than via #define and optional later #undef.
-       (lookup_rgb_color) [USE_CAIRO && ENABLE_CHECKING]:
-       Crash when the pixel is undefined, as there is a genuine bug
-       here (Bug#22442).
-       * src/image.c (tiff_load, gif_load, svg_load_image)
-       (x_kill_gs_process) [USE_CAIRO]:
-       * src/xterm.c (x_draw_fringe_bitmap) [USE_CAIRO]:
-       Omit unused locals, or move them to where they’re needed.
-       (x_clear_area1): Now ATTRIBUTE_UNUSED.
+2016-02-07  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-23  Eli Zaretskii  <eliz@gnu.org>
+       Fix test for dladdr
 
-       Update documentation for Dired search and replace
+       Problem reported by Andreas Schwab in:
+       http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00327.html
+       * configure.ac (dladdr): Link with LIBMODULES when checking for
+       this function.
 
-       * doc/emacs/dired.texi (Operating on Files): Update descriptions
-       of 'A' and 'Q' now bound to 'dired-do-find-regexp' and
-       'dired-do-find-regexp-and-replace'.
+2016-02-07  Andreas Schwab  <schwab@linux-m68k.org>
 
-       * etc/NEWS: Mention xref-related changes in Dired.
+       Fix gnus-group-get-new-news-this-group on group with closed server
 
-2016-01-23  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/gnus/nnimap.el (nnimap-change-group): Lookup server
+       method and pass to nnimap-open-server.
 
-       Port recent xdisp.c fix to picky C compilers
+2016-02-07  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * src/xdisp.c (dump_glyph): Redo the call to fprintf to avoid
-       putting #if inside the arguments to a standard function, which
-       the C standard says has undefined behavior.
+       * lisp/comint.el (comint-prompt-read-only): Clean tabs in docstring
 
-2016-01-22  Alan Mackenzie  <acm@muc.de>
+       While tabs in code are mostly fine because the Emacs sources have a
+       .dir-locals file specifying tab-width, the same is not true of tabs in
+       code examples inside docstrings.  The docstring is printed on a *Help*
+       buffer, which can be created on any directory and won't necessarily have
+       the same tab-width set.
 
-       Prevent spurious recognition of K&R argument declarations.  Fixes bug #2203
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/progmodes/cc-engine.el (c-forward-declarator): New function.
-       (c-in-knr-argdecl): Before recognizing a K&R argument declaration, check it is
-       contained in the preceding arg list.
+       Don't inloop gnus-uu-mark-thread on the last thread
 
-       * lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Use the new function
-       `c-forward-declarator' in place of inline code.
+       * lisp/gnus/gnus-uu.el (gnus-uu-mark-thread): Don't infloop on the
+       final thread in the summary buffer (bug#16666).
 
-2016-01-22  Eli Zaretskii  <eliz@gnu.org>
+2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix the build with --enable-checking=glyphs
+       Display non-ASCII group names better in prompts
 
-       * src/xdisp.c (dump_glyph): Don't refer to glyph->u.xwidget in a
-       build without xwidget support.
+       * lisp/gnus/gnus-sum.el (gnus-articles-to-read): To decode the
+       group name, we have to do that before we remove the prefix.
 
-2016-01-22  Eli Zaretskii  <eliz@gnu.org>
+2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Document cl-generic.el
+       Default to gpg2 instead of gpg
 
-       * doc/lispref/functions.texi (Generic Functions): New section.
-       (Bug#22336)
-       (Functions): Update the chapter menu.
-       * doc/lispref/elisp.texi: Update the master menu.
+       * lisp/epg-config.el (epg-gpg-program): Prefer gpg2 over gpg, if
+       it exists.  This fixes many problems with using the GPG
+       authentication agent.
 
-2016-01-22  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-06  David Edmondson  <dme@dme.org>
 
-       xwidgets style cleanup
+       src/process.c Correctly convert AF_INET6 addresses
 
-       Adjust the newly-added Xwidgets code so that it uses a more-typical
-       Emacs style.  This should not affect behavior, except that in
-       a few places it adds runtime checks that Lisp arguments are of
-       the proper type, and in one place it uses more-precise arithmetic.
-       * src/buffer.c, src/dispnew.c, src/emacs.c, src/emacsgtkfixed.c:
-       * src/emacs.c, src/print.c, src/window.c, src/xdisp.c, src/xterm.c:
-       Include xwidget.h unconditionally.
-       * src/buffer.c (Fkill_buffer):
-       * src/dispnew.c (update_window):
-       * src/emacs.c (main):
-       * src/print.c (print_object):
-       * src/window.c (Fdelete_window_internal):
-       * src/xdisp.c (handle_single_display_spec, push_it, pop_it)
-       (get_next_element, set_iterator_to_next, next_element_from_xwidget)
-       (dump_glyph, calc_pixel_width_or_height, BUILD_GLYPH_STRINGS_XW)
-       (BUILD_GLYPH_STRINGS, x_produce_glyphs, get_window_cursor_type):
-       * src/xterm.c (x_draw_glyph_string, x_draw_bar_cursor):
-       Call xwidget functions and macros without worrying about
-       HAVE_XWIDGETS when the code is a no-op on non-xwidget
-       platforms.
-       * src/dispextern.h (XWIDGET_GLYPH, struct glyph_string.xwidget)
-       (IT_XWIDGET, GET_FROM_XWIDGET, struct it.u.xwidget)
-       (struct it.xwidget):
-       * src/lisp.h (PVEC_XWIDGET, PVEC_XWIDGET_VIEW):
-       Always define.
-       * src/emacsgtkfixed.h: Omit unnecessary comment.
-       * src/keyboard.c: Fix spacing.
-       * src/xdisp.c (BUILD_XWIDGET_GLYPH_STRING, produce_xwidget_glyph):
-       Define to be a no-op if not HAVE_XWIDGETS.
-       * src/xwidget.c: Include xwidget.h first (after config.h)
-       to make sure that it can stand by itself.
-       (Fmake_xwidget, Fxwidget_webkit_execute_script):
-       Fix typo in doc string.
-       (Fmake_xwidget): Check type of args.
-       (Fmake_xwidget, offscreen_damage_event)
-       (webkit_document_load_finished_cb, webkit_download_cb)
-       (webkit_new_window_policy_decision_requested_cb)
-       (webkit_navigation_policy_decision_requested_cb)
-       (xwidget_osr_draw_cb, xwidget_osr_event_forward)
-       (xwidget_osr_event_set_embedder, xwidget_init_view):
-       Omit unnecessary casts.
-       * src/xwidget.c (Fmake_xwidget, xwidget_hidden)
-       (xwidget_show_view, xwidget_hide_view)
-       (x_draw_xwidget_glyph_string, xwidget_start_redisplay, xwidget_touch)
-       (xwidget_touched):
-       * src/xwidget.h (struct xwidget.kill_without_query)
-       (struct xwidget_view.redisplayed, struct xwidget_view.hidden):
-       Use bool for boolean.
-       * src/xwidget.c (store_xwidget_event_string, Fxwidget_size_request):
-       Simplify by using list functions.
-       (WEBKIT_FN_INIT): Omit unnecessary test for nil.
-       (Fxwidget_resize): Check type of integer args
-       before doing any work.  Check that they are nonnegative.
-       (Fxwidget_set_adjustment): Check type of integer arg.
-       Avoid redundant call to gtk_scrolled_window_get_vadjustment.
-       Simplify.  Use double, not float.
-       (Fxwidget_info, Fxwidget_view_info): Simplify by using CALLN.
-       (valid_xwidget_spec_p): Simplify.
-       (xwidget_spec_value): Omit unused arg FOUND.  All callers changed.
-       * src/xwidget.h: Include lisp.h first, so that includers do
-       not need to worry about doing that before including this file.
-       Make this .h file safe to include even on non-HAVE_XWIDGETS
-       configurations, to simplify the includers.
-       (x_draw_xwidget_glyph_string, syms_of_xwidget, valid_xwidget_spec_p)
-       (xwidget_end_redisplay, lookup_xwidget)
-       (xwidget_view_delete_all_in_window, kill_buffer_xwidgets):
-       Now a no-op if !HAVE_XWIDGETS, to simplify callers.
-       (struct glyph_matrix, struct glyph_string, struct xwidget)
-       (struct xwidget_view, struct window):
-       New forward or incomplete decls, so that includers need not
-       assume the corresponding .h files are already included, or that
-       HAVE_XWIDGETS is defined.
-       (struct xwidget_type, xwidget_from_id): Remove; unused.
-
-2016-01-22  Michael Albinus  <michael.albinus@gmx.de>
-
-       Backport kqueue integration from master
-
-       * configure.ac (--with-file-notification): Add kqueue.
-       (top): Remove special test for "${HAVE_NS}" and
-       ${with_file_notification}, this is handled inside gfilenotify
-       tests.  Add kqueue tests.  Use NOTIFY_CFLAGS and NOTIFY_LIBS
-       instead of library specific variables.  Add error message for
-       gfile on Nextstep.
-
-       * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
-       Fix some glitches in the example.
-
-       * etc/NEWS: Mention kqueue.
-
-       * lisp/filenotify.el (file-notify--library)
-       (file-notify-descriptors, file-notify-callback)
-       (file-notify-add-watch, file-notify-rm-watch)
-       (file-notify-valid-p): Add kqueue support.
-       (file-notify--rm-descriptor): Remove WHAT arg.
-
-       * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
-
-       * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
-
-       * src/inotify.c (inotifyevent_to_event): Extract file name from
-       watch_object if the event doesn't provide it.
-       (Finotify_add_watch): Add file name to watch_object.
-
-       * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
-
-       * src/kqueue.c: New file.
-
-       * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
-
-       * test/automated/file-notify-tests.el
-       (file-notify--test-expected-events): Remove.
-       (file-notify--test-cleanup): Do not set that variable.
-       (file-notify--test-timeout) Use different timeouts for
-       different libraries.
-       (file-notify--test-library): New defun.
-       (file-notify--test-event-test): Make stronger checks.
-       (file-notify--test-with-events): EVENTS can also be a list of
-       lists.  Flush outstanding events before running the body.
-       Make timeout heuristically depend on the number of events.
-       (file-notify-test01-add-watch, file-notify-test02-events)
-       (file-notify-test04-file-validity, file-notify-test05-dir-validity):
-       Rewrite in order to call file monitors but directory monitors.
-       (file-notify-test02-events, file-notify-test04-file-validity): Do
-       not skip cygwin tests.  Add additional test for file creation.
-       Adapt expected result for different backends.
-       (file-notify-test03-autorevert): Some of the tests don't work for
-       w32notify.
-       (file-notify-test06-many-events): New test.
-
-2016-01-22  John Wiegley  <johnw@newartisans.com>
-
-       Further corrections to the pcase docstring
-
-2016-01-22  Eli Zaretskii  <eliz@gnu.org>
-
-       * doc/emacs/anti.texi (Antinews): Rewrite for Emacs 25.
-
-2016-01-22  Stephen Leake  <stephen_leake@stephe-leake.org>
-
-       In xref-collect-references, force backends to respect the 'dir' arg
-
-       * lisp/progmodes/xref.el (xref-collect-references): Force symref backends
-       to use `default-directory'.
+       * src/process.c (conv_lisp_to_sockaddr): AF_INET6 addresses are
+       converted to a list of 16 bit quantities by
+       conv_sockaddr_to_lisp(). conv_lisp_to_sockaddr() should follow the
+       same scheme rather than expecting a (longer) list of 8 bit
+       quantities.
 
-2016-01-22  John Wiegley  <johnw@newartisans.com>
+       Backport:
 
-       Minor correction to pcase docstring
+       (cherry picked from commit 55ce3c30d617c38eb086d5ad4ffbd881c20c559c)
 
-2016-01-22  John Wiegley  <johnw@newartisans.com>
+2016-02-06  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       Write a new docstring for the pcase macro
+       * lisp/isearch.el (isearch-define-mode-toggle): Improve logic
 
-       * lisp/emacs-lisp/pcase.el (pcase): Write a new docstring.
+2016-02-06  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-2016-01-21  Stephen Berman  <stephen.berman@gmx.net>
+       * lisp/menu-bar.el (menu-bar-options-menu): New search submenu
 
-       Avoid byte-compiler warning in todo-mode (bug#21953)
+       (menu-bar-search-options-menu): New variable
 
-       * lisp/calendar/todo-mode.el (todo-convert-legacy-files): Add limit argument
-       to looking-back to comply with advertised-calling-convention.
+2016-02-06  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-2016-01-21  Stephen Berman  <stephen.berman@gmx.net>
+       * lisp/isearch.el (search-default-mode)
 
-       Fix desktop support in todo-mode and doc-view (bug#22377)
+       (isearch-regexp-function): Improve docstrings.
 
-       * lisp/calendar/todo-mode.el (todo-restore-desktop-buffer):
-       * lisp/doc-view.el (doc-view-restore-desktop-buffer): Return current buffer.
+2016-02-06  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * lisp/calendar/todo-mode.el (todo-modes-set-2):
-       * lisp/doc-view.el (doc-view-mode): Set desktop-save-buffer unconditionally.
+       * lisp/isearch.el: Rename search-default-regexp-mode to search-default-mode
 
-2016-01-21  Paul Eggert  <eggert@cs.ucla.edu>
+       (search-default-mode): New variable.
+       (isearch-mode, isearch-define-mode-toggle)
+       (isearch--describe-regexp-mode): Update accordingly.
+       * lisp/menu-bar.el (nonincremental-search-forward): Update accordingly.
+       * etc/NEWS: Update accordingly.
+       * doc/emacs/search.texi: Update accordingly.
 
-       No need to configure gobject-introspection
+2016-02-06  Oscar Fuentes  <ofv@wanadoo.es>
 
-       It wasn’t needed for the recently-installed xwidget_mvp code; see:
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01154.html
-       * configure.ac (DOES_XWIDGETS_USE_GIR, GIR_REQUIRED, GIR_MODULES):
-       (HAVE_GIR):
-       * src/Makefile.in (GIR_LIBS, GIR_CFLAGS):
-       Remove.  All uses removed.
-       * configure.ac (emacs_config_features): Don’t worry about GIR.
+       Use monitor's resolution for positioning tooltips
 
-2016-01-20  Paul Eggert  <eggert@cs.ucla.edu>
+       * src/xfns.c (compute_tip_xy): Use the resolution of the monitor where
+         the mouse pointer is to avoid placing the tooltip over the border of
+         the monitor on multi-head displays. Fixes bug#22549.
 
-       Don’t export C symbols not used elsewhere
+2016-02-06  Eli Zaretskii  <eliz@gnu.org>
 
-       These were recently added, mostly as part of xwidget code.
-       * src/emacsgtkfixed.c (emacs_fixed_get_type): Now static.
-       (EMACS_FIXED, EMACS_FIXED_GET_CLASS):
-       Now static functions here, not macros in emacsgtkfixed.h.
-       * src/emacsgtkfixed.h (EMACS_TYPE_FIXED):
-       Remove.  All uses replaced by definiens.
-       (EMACS_FIXED, EMACS_FIXED_GET_CLASS):
-       Remove; these are now static functions in emacsgtkfixed.c.
-       (EMACS_FIXED_CLASS, EMACS_IS_FIXED, EMACS_IS_FIXED_CLASS):
-       Remove; unused.
-       (emacs_fixed_get_type): Remove decl; no longer extern.
-       * src/xwidget.c (offscreen_damage_event)
-       (webkit_mime_type_policy_typedecision_requested_cb)
-       (webkit_new_window_policy_decision_requested_cb)
-       (webkit_navigation_policy_decision_requested_cb)
-       (xwidget_spec_value, xwidget_view_lookup)
-       (xwidget_start_redisplay, xwidget_touch):
-       Now static.
-       * src/xwidget.h (xwidget_start_redisplay, xwidget_touch):
-       Remove decls.
+       Fix file-notify-test on MS-Windows
 
-2016-01-20  Dmitry Gutov  <dgutov@yandex.ru>
+       * test/automated/file-notify-tests.el (file-notify--test-timeout):
+       Reduce w32notify timeout to 10 sec.
+       (file-notify-test06-many-events): Call read-event after each
+       rename, to keep the w32notify backend happy in batch mode.
+       (Bug#22534)
 
-       Support squiggly heredocs in ruby-mode
+2016-02-06  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/progmodes/ruby-mode.el (ruby-here-doc-beg-re):
-       Support squiggly heredocs added in Ruby 2.3.
+       Fix issues found by auditing w32notify code
 
-       * test/indent/ruby.rb: Add squiggly example.
+       * src/w32inevt.c (handle_file_notifications): Count the number of
+       events to be returned.
+       * src/w32notify.c (send_notifications): Don't copy to the file
+       notification buffer more than it can hold.  (Bug#22534)
 
-2016-01-20  Glenn Morris  <rgm@gnu.org>
+2016-02-06  Eli Zaretskii  <eliz@gnu.org>
 
-       * configure.ac (emacs_config_features): Remove WEBKIT.
+       Extend etags Ruby support for accessors
 
-2016-01-20  Paul Eggert  <eggert@cs.ucla.edu>
+       * lib-src/etags.c (Ruby_functions): Support accessors defined with
+       parentheses.  (Bug#22563)
 
-       Port to platforms with gtk3 but not webkitgtk3
+       * test/etags/ruby-src/test1.ru (A::B): Add tests for accessors
+       defined with parentheses.
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to changes in Ruby tests.
 
-       I ran into this problem on my Fedora 23 installation;
-       Emacs configured but did not build when --with-xwidgets was specified.
-       * configure.ac (HAVE_WEBKIT, HAVE_GIR): Omit unnecessary initializations.
-       (DOES_XWIDGETS_USE_GIR): New var.
-       If --with-xwidgets is specified, report an error if not
-       doable, to be consistent with the other --with options.
-       Require webkitgtk3 to use Xwidgets, as the Xwidgets code does
-       not work at all without webkitgtk3.  Simplify use of
-       EMACS_CHECK_MODULES.  Output message about gobject
-       introspection only if xwidgets are used.
-       * etc/NEWS: Users need webkitgtk3, not merely webkit.
-       * src/xwidget.c (syms_of_xwidget): Don’t worry about HAVE_WEBKIT_OSR,
-       since this file is no longer compiled if webkitgtk3 is not available.
+2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-20  Eli Zaretskii  <eliz@gnu.org>
+       Update publicsuffix.txt.
 
-       Fix doc string of 'isearch-search-fun-function'
+       * etc/publicsuffix.txt: Updated from
+       https://publicsuffix.org/list/public_suffix_list.dat.
 
-       * lisp/isearch.el (isearch-search-fun-function)
-       (isearch-search-string): Doc fixes.  (Bug#22411)
+2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+       Ensure that Gnus dribble handling allows removing entries
 
-       * lisp/xwidget.el: Nitpicks
+       * lisp/gnus/gnus-start.el (gnus-dribble-enter): Ensure that each
+       entry is on a single line.
 
-       * lisp/xwidget.el (xwidget-log, xwidget-webkit-callback):
-       Use with-current-buffer rather than save-excursion + set-buffer.
+2016-02-05  OGAWA Hirofumi  <hirofumi@mail.parknet.co.jp>  (tiny change)
 
-2016-01-20  Glenn Morris  <rgm@gnu.org>
+       Be consistent when using encoded strings in nnimap data
 
-       Don't hard-code 1 as point-min.
+       * lisp/gnus/nnimap.el (nnimap-encode-gnus-group): New function
+       (nnimap-request-list): Use it.
+       (nnimap-request-newgroups): Ditto.
 
-       * lisp/image-mode.el (image-display-size):
-       * lisp/xwidget.el (xwidget-webkit-last-session)
-       (xwidget-webkit-current-session): Don't hard-code 1 as point-min.
+2016-02-05  OGAWA Hirofumi  <hirofumi@mail.parknet.co.jp>  (tiny change)
 
-2016-01-20  Glenn Morris  <rgm@gnu.org>
+       Display the decoded Gnus group name
 
-       * lisp/xwidget.el: Add declarations to silence non-xwidget compilation.
+       * lisp/gnus/gnus-sum.el (gnus-summary-read-group-1): Use the
+       decoded group name in the message.
 
-2016-01-20  Glenn Morris  <rgm@gnu.org>
+2016-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Trivial doc copyedits.
+       Use completion-ignore-case instead of defining command
 
-       * src/xwidget.c (Fmake_xwidget, Fget_buffer_xwidgets)
-       (Fxwidget_webkit_get_title, Fxwidget_resize)
-       (Fxwidget_set_adjustment, Fxwidgetp, Fxwidget_view_p)
-       (Fxwidget_info, Fxwidget_view_lookup)
-       (Fset_xwidget_query_on_exit_flag): Trivial doc copyedits.
+       * lisp/erc/erc.el (erc-mode): Set completion-ignore-case so
+       that we get case-insensitive completion.
+       (erc-completion-at-point): Remove.
 
-2016-01-20  Glenn Morris  <rgm@gnu.org>
+2016-02-05  Eli Zaretskii  <eliz@gnu.org>
 
-       Avoid advising image-display-size for xwidgets.
+       Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
 
-       * lisp/xwidget.el (xwidget-image-display-size): Remove.
-       (image-display-size): Remove advice.
-       * lisp/image-mode.el (xwidget-info, xwidget-at): Declare.
-       (image-display-size): Incorporate xwidget code directly.
+2016-02-05  Michael Albinus  <michael.albinus@gmx.de>
 
-2016-01-20  Glenn Morris  <rgm@gnu.org>
+       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
 
-       Avoid breaking non-xwidget Emacs that happen to load xwidget.el.
+       Reduce the number of iterations to 250 in case of w32notify.
 
-       * lisp/xwidget.el (window-configuration-change-hook)
-       (kill-buffer-query-functions): Only modify these hooks if
-       compiled with xwidget support.
+2016-02-05  Eli Zaretskii  <eliz@gnu.org>
 
-2016-01-20  Glenn Morris  <rgm@gnu.org>
+       Fix problems caused by new implementation of sub-word mode
 
-       * lisp/xwidget.el (xwidget-webkit-scroll-behaviour): Fix custom spec.
+       * lisp/subr.el (forward-word-strictly, backward-word-strictly):
+       New functions.
+       (word-move-empty-char-table): New variable.
 
-2016-01-19  Glenn Morris  <rgm@gnu.org>
+       * etc/NEWS: Mention 'forward-word-strictly' and
+       'backward-word-strictly'.
 
-       * configure.ac (WEBKIT, GIR, CAIRO): Use EMACS_CHECK_MODULES, not PKG_.
+       * doc/lispref/positions.texi (Word Motion): Document
+       'find-word-boundary-function-table', 'forward-word-strictly', and
+       'backward-word-strictly'.  (Bug#22560)
 
-       * configure.ac (emacs_config_features): Add XWIDGETS, WEBKIT, GIR.
+       * src/syntax.c (syms_of_syntax)
+       <find-word-boundary-function-table>: Doc fix.
 
-       * configure.ac (HAVE_WEBKIT_OSR): Remove broken, duplicated gtk3 test.
+       * lisp/wdired.el (wdired-xcase-word):
+       * lisp/textmodes/texnfo-upd.el (texinfo-copy-node-name)
+       (texinfo-copy-section-title, texinfo-start-menu-description)
+       (texinfo-copy-menu-title, texinfo-specific-section-type)
+       (texinfo-insert-node-lines, texinfo-copy-next-section-title):
+       * lisp/textmodes/texinfo.el (texinfo-clone-environment)
+       (texinfo-insert-@end):
+       * lisp/textmodes/texinfmt.el (texinfo-format-scan)
+       (texinfo-anchor, texinfo-multitable-widths)
+       (texinfo-multitable-item):
+       * lisp/textmodes/tex-mode.el (latex-env-before-change):
+       * lisp/textmodes/flyspell.el (texinfo-mode-flyspell-verify):
+       * lisp/skeleton.el (skeleton-insert):
+       * lisp/simple.el (count-words):
+       * lisp/progmodes/vhdl-mode.el (vhdl-beginning-of-libunit)
+       (vhdl-beginning-of-defun, vhdl-beginning-of-statement-1)
+       (vhdl-update-sensitivity-list, vhdl-template-block)
+       (vhdl-template-break, vhdl-template-case, vhdl-template-default)
+       (vhdl-template-default-indent, vhdl-template-for-loop)
+       (vhdl-template-if-then-use, vhdl-template-bare-loop)
+       (vhdl-template-nature, vhdl-template-procedural)
+       (vhdl-template-process, vhdl-template-selected-signal-asst)
+       (vhdl-template-type, vhdl-template-variable)
+       (vhdl-template-while-loop, vhdl-beginning-of-block)
+       (vhdl-hooked-abbrev, vhdl-port-copy, vhdl-hs-forward-sexp-func):
+       * lisp/progmodes/verilog-mode.el (verilog-backward-sexp)
+       (verilog-forward-sexp, verilog-beg-of-statement)
+       (verilog-set-auto-endcomments, verilog-backward-token)
+       (verilog-do-indent):
+       * lisp/progmodes/vera-mode.el (vera-guess-basic-syntax)
+       (vera-indent-block-closing):
+       * lisp/progmodes/simula.el (simula-context)
+       (simula-backward-up-level, simula-forward-down-level)
+       (simula-previous-statement, simula-next-statement)
+       (simula-skip-comment-backward, simula-calculate-indent)
+       (simula-find-if, simula-electric-keyword):
+       * lisp/progmodes/sh-script.el (sh-smie--rc-newline-semi-p):
+       * lisp/progmodes/ruby-mode.el (ruby-smie--redundant-do-p)
+       (ruby-smie--forward-token, ruby-smie--backward-token)
+       (ruby-singleton-class-p, ruby-calculate-indent)
+       (ruby-forward-sexp, ruby-backward-sexp):
+       * lisp/progmodes/ps-mode.el (ps-run-goto-error):
+       * lisp/progmodes/perl-mode.el (perl-syntax-propertize-function)
+       (perl-syntax-propertize-special-constructs)
+       (perl-backward-to-start-of-continued-exp):
+       * lisp/progmodes/pascal.el (pascal-indent-declaration):
+       * lisp/progmodes/octave.el (octave-function-file-p):
+       * lisp/progmodes/mantemp.el (mantemp-insert-cxx-syntax):
+       * lisp/progmodes/js.el (js--forward-function-decl):
+       * lisp/progmodes/idlwave.el (idlwave-show-begin-check)
+       (idlwave-beginning-of-block, idlwave-end-of-block)
+       (idlwave-block-jump-out, idlwave-determine-class):
+       * lisp/progmodes/icon.el (icon-is-continuation-line)
+       (icon-backward-to-start-of-continued-exp, end-of-icon-defun):
+       * lisp/progmodes/hideif.el (hide-ifdef-define):
+       * lisp/progmodes/f90.el (f90-change-keywords):
+       * lisp/progmodes/cperl-mode.el (cperl-electric-pod)
+       (cperl-linefeed, cperl-electric-terminator)
+       (cperl-find-pods-heres, cperl-fix-line-spacing)
+       (cperl-invert-if-unless):
+       * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur):
+       * lisp/progmodes/cc-align.el (c-lineup-java-inher):
+       * lisp/progmodes/ada-mode.el (ada-compile-goto-error)
+       (ada-adjust-case-skeleton, ada-create-case-exception)
+       (ada-create-case-exception-substring)
+       (ada-case-read-exceptions-from-file, ada-after-keyword-p)
+       (ada-scan-paramlist, ada-get-current-indent, ada-get-indent-end)
+       (ada-get-indent-if, ada-get-indent-block-start)
+       (ada-get-indent-loop, ada-get-indent-type)
+       (ada-search-prev-end-stmt, ada-check-defun-name)
+       (ada-goto-decl-start, ada-goto-matching-start)
+       (ada-goto-matching-end, ada-looking-at-semi-or)
+       (ada-looking-at-semi-private, ada-in-paramlist-p)
+       (ada-search-ignore-complex-boolean, ada-move-to-start)
+       (ada-move-to-end, ada-which-function, ada-gen-treat-proc):
+       * lisp/net/quickurl.el (quickurl-grab-url):
+       * lisp/mail/sendmail.el (mail-do-fcc):
+       * lisp/mail/rmail.el (rmail-resend):
+       * lisp/mail/mailabbrev.el (mail-abbrev-complete-alias):
+       * lisp/mail/mail-extr.el (mail-extract-address-components):
+       * lisp/json.el (json-read-keyword):
+       * lisp/files.el (insert-directory):
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
+       * lisp/completion.el (symbol-under-point, symbol-before-point)
+       (symbol-before-point-for-complete, next-cdabbrev)
+       (add-completions-from-c-buffer):
+       * lisp/cedet/semantic/texi.el (semantic-up-context)
+       (semantic-beginning-of-context):
+       * lisp/cedet/semantic/bovine/el.el (semantic-get-local-variables):
+       use 'forward-word-strictly' and 'backward-word-strictly' instead
+       of 'forward-word' and 'backward-word'.
 
-2016-01-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+2016-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/gnus/nnir.el (nnir-request-update-mark):
-       Default to the original mark.
-       cf. <http://thread.gmane.org/gmane.emacs.gnus.general/86583>
-       and <http://thread.gmane.org/gmane.emacs.gnus.general/86640>
+       Fix doc string of tls-program
 
-2016-01-19  Glenn Morris  <rgm@gnu.org>
+       * lisp/net/tls.el (tls-program): Document the %t parameter (bug#22559).
 
-       * lisp/xwidget.el (report-xwidget-bug): Remove.
+2016-02-05  Mark Oteiza  <mvoteiza@udel.edu>
 
-       (top-level): No longer require reporter.
+       * etc/NEWS: Document new mpc.el features
 
-2016-01-19  Joakim Verona  <joakim@verona.se>
-           Grégoire Jadi  <daimrod@gmail.com>
+2016-02-04  Leo Liu  <sdl.web@gmail.com>
 
-       Support for the new Xwidget feature.
+       * lisp/custom.el (defface): Revert indentation change.  (Bug#22524)
 
-       * configure.ac:
-       (HAVE_XWIDGETS, WIDGET_OBJ, EMACS_CONFIG_FEATURES):
-       * src/xterm.c (x_draw_glyph_string, x_draw_bar_cursor):
-       * src/xdisp.c:
-       (handle_display_spec, handle_single_display_spec, push_it)
-       (pop_it, set_iterator_to_next, dump_glyph)
-       (calc_pixel_width_or_height, fill_xwidget_glyph_string)
-       (BUILD_XWIDGET_GLYPH_STRING, BUILD_GLYPH_STRINGS)
-       (produce_xwidget_glyph, x_produce_glyphs)
-       (get_window_cursor_type):
-       * src/window.c (Fdelete_window_internal):
-       * src/termhooks.h (e):
-       * src/print.c (print_object):
-       * src/lisp.h (ptrdiff_t):
-       * src/keyboard.c (kbd_buffer_get_event, make_lispy_event)
-       (syms_of_keyboard):
-       * src/emacs.c (main):
-       * src/dispnew.c (update_window, scrolling_window):
-       * src/dispextern.h (g, i):
-       * Makefile.in (XWIDGETS_OBJ, WEBKIT_CFLAGS, WEBKIT_LIBS)
-       (GIR_LIBS, ALL_CFLAGS, base_obj, LIBES):
-       * src/keyboard.c (kbd_buffer_get_event):
-       * src/emacsgtkfixed.c (emacs_fixed_gtk_widget_size_allocate)
-       (emacs_fixed_class_init): Add case for an xwidget view.
+2016-02-04  Alan Mackenzie  <acm@muc.de>
 
-       * src/xwidget.c, src/xwidget.h, lisp/xwidget.el: New files for xwidgets
+       Correctly fontify C++ initializations which "look like" functions.
 
+       Fixes bug#7579.
 
-       Various improvements to the Xwidget feature.
-       * src/xwidget.c:
-       * src/emacsgtkfixed.c:
-       * lisp/xwidget.el:
+       lisp/progmodes/cc-engine.el (c-forward-declarator): Add extra optional
+       parameter to enable handling of "anonymous" declarators in declarations.
 
-2016-01-19  Eli Zaretskii  <eliz@gnu.org>
+       lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Check more rigorously
+       whether a "(" opens a parameter list of a function, or an initialization of a
+       variable.
 
-       Improve documentation of 'alist-get'
+2016-02-04  Ulf Jasper  <ulf.jasper@web.de>
 
-       * doc/lispref/variables.texi (Setting Generalized Variables): Add
-       'alist-get' to the list of functions that can appear in PLACE
-       argument of 'setf'.
+       Improve newsticker-treeview-selection-face
 
-2016-01-19  Eli Zaretskii  <eliz@gnu.org>
+       * newst-treeview.el (newsticker-treeview-selection-face): Improve
+       readability for dark background.
 
-       Minor copyedits of doc/emacs/maintaining.texi
+2016-02-04  Eli Zaretskii  <eliz@gnu.org>
 
-       * doc/emacs/maintaining.texi (List Identifiers): More accurate
-       description of "C-M-i" wrt tags tables.
-       (Tags Tables): Move the definition of "tag" to a footnote.
+       Minor fix in tagging Ruby accessors by etags
 
-2016-01-19  Eli Zaretskii  <eliz@gnu.org>
+       * lib-src/etags.c (Ruby_functions): Don't tag accessors whose
+       names are not literal symbols.  (Bug#22241)
 
-       Unbreak the Cygwin-w32 build
+2016-02-04  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * src/w32fns.c (globals_of_w32fns): Move the initialization of
-       resetstkoflw into a part that isn't compiled on Cygwin.
-       (Bug#22403)
+       Spelling fixes
 
-2016-01-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2016-02-04  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * shr.el (shr-table-body): Allow tables to have text children.
+       Remove 'def X' from the example
 
-2016-01-19  Phillip Lord  <phillip.lord@russet.org.uk>
+       * test/etags/ruby-src/test1.ru (A::B): Remove 'def X'
+       (http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00167.html).
+       * test/etags/CTAGS.good:
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6: Adjust accordingly.
 
-       Cope with multiple overlapping faces.
+2016-02-09  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/htmlfontify.el (hfy-face-to-style-i): Treat inheritance right to
-         left.
-         (hfy-face-resolve-face): Handle font specification as well as font
-         name. Documentation update. (Bug#21990)
+       Fix network-stream-tests on MS-Windows
 
-2016-01-19  Paul Eggert  <eggert@cs.ucla.edu>
+       * test/lisp/net/network-stream-tests.el (make-local-unix-server):
+       Skip if local sockets are not supported.
 
-       Fix spurious escapes in describe-input-method
+2016-02-09  Michael Albinus  <michael.albinus@gmx.de>
 
-       Problem reported by Vincent Belaïche (Bug#22309).
-       * lisp/international/mule-cmds.el (describe-language-environment):
-       * lisp/international/quail.el (quail-help):
-       Apply substitute-command-keys to doc strings before displaying them.
+       * admin/notes/bug-triage: Fix bug priorities.  Explain colors in debbugs-gnu.
 
-2016-01-19  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-09  Eli Zaretskii  <eliz@gnu.org>
 
-       Minor improvements to (random t) documentation
+       Disable 'timer-list'
 
-       * doc/lispref/numbers.texi (Random Numbers):
-       * src/fns.c (Frandom):
-       Omit unnecessary details about randomness fallback.
-       Say that it is a fallback.
+       * lisp/emacs-lisp/timer-list.el: Make 'timer-list' a disabled
+       command.
 
-2016-01-19  Dmitry Gutov  <dgutov@yandex.ru>
+2016-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Rename methods in Ruby etags example file
+       Avoid aligned_alloc static/extern collision
 
-       * test/etags/ruby-src/test.rb: Rename the example methods to
-       correspond to the common terminology used in Ruby.
-       * test/etags/CTAGS.good:
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6: Adjust accordingly.
+       * src/alloc.c (aligned_alloc): Define to private name when a
+       static function, to avoid collision with lisp.h extern decl.
+       Reported by John Yates in:
+       http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00439.html
 
-2016-01-19  Dmitry Gutov  <dgutov@yandex.ru>
+2016-02-08  Michal Nazarewicz  <mina86@mina86.com>
 
-       Propertize backtick in 'def `(abc)' as symbol constituent
+       Make `message-beginning-of-line' aware of folded headers
 
-       * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize):
-       Propertize backtick in 'def `(abc)' as symbol constituent.
-       (ruby-syntax-propertize-function):
-       Rename to ruby-syntax-propertize.
+       * lisp/gnus/message.pl (message-beginning-of-header): New function which
+       moves point to the beginning of a mail header.  The function is aware of
+       folded headers and with non-nil argument looks for the true beginning of
+       a header while with nil argument moves to the indented text of header's
+       value.
+       (message-beginning-of-line): Function is now aware of folded headers and
+       either moves point to the indention of a header or, in visual-line-mode,
+       searches for the beginning of the header.
 
-2016-01-18  Eli Zaretskii  <eliz@gnu.org>
+2016-02-08  Michal Nazarewicz  <mina86@mina86.com>
 
-       Fix scrolling under scroll-preserve-screen-position on TTY
+       Optimise ‘point in message header’ check
 
-       * src/window.c (window_scroll_line_based): When setting point to
-       preserve screen coordinates, don't let cursor enter either of the
-       two scroll margins.  (Bug#22395)
+       * lisp/gnus/message.el (message-point-in-header-p): Replace two unbound
+       regular expression matches with a single bound string match thus
+       reducing amount of work the function is doing.
 
-2016-01-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2016-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix shr table rendering of nested tables
+       Make the `R' command get the correct relative <img>s
 
-       * shr.el (shr-table-body): Don't include all tbodies in nested
-       tables in the levels above.
+       * lisp/net/eww.el (eww-readable): Preserve the base URL so
+       that image expansions are fetched from the right place (bug#22605).
 
-2016-01-18  Dmitry Gutov  <dgutov@yandex.ru>
+2016-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/progmodes/project.el (project--read-regexp): Quote the identifier.
+       Add a mode to list and cancel timers
 
-2016-01-18  Dmitry Gutov  <dgutov@yandex.ru>
+       * doc/lispref/os.texi (Timers): Menton `timer-list'.
 
-       Add xref-based replacements for Dired search commands
+       * lisp/emacs-lisp/timer-list.el: New file.
 
-       * lisp/dired-aux.el (dired-do-find-regexp)
-       (dired-do-find-regexp-and-replace): New commands.
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00864.html
+2016-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/dired.el (dired-mode-map): Change bindings for `A' and
-       `Q' to the new commands.
+       Add new commands to allow changing the size of images
 
-       * lisp/progmodes/xref.el (xref-query-replace)
-       (xref-collect-matches): Add progress reporters.
-       (xref--find-ignores-arguments): Return nil for zero ignores.
-       (xref--show-xrefs): Add an optional argument.
-       (xref-collect-matches): Drop the assert.  'find' accepts a
-       regular file in place of directory argument, too.
+       * lisp/image.el (image-increase-size, image-decrease-size):
+       New commands.
+       (image-change-size): New function.
 
-2016-01-18  Alan Mackenzie  <acm@muc.de>
+2016-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * doc/lispref/frames.texi (Position Parameters): Say they don't exist on TTYs.
+       Allow the image scale to be a floating point number
 
-2016-01-18  Eli Zaretskii  <eliz@gnu.org>
+       * src/image.c (compute_image_size): The scale can be a
+       floating point number.
 
-       Improve user documentation of Xref
+2016-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * doc/emacs/maintaining.texi (Xref, Find Identifiers)
-       (Looking Up Identifiers, Identifier Search, List Identifiers):
-       Adjudicate comments by Dmitry Gutov <dgutov@yandex.ru>.  See
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00650.html
-       for the details.
+       Add an IPv6 test
 
-2016-01-18  Eli Zaretskii  <eliz@gnu.org>
+       * test/lisp/net/network-stream-tests.el
+       (connect-to-tls-ipv6-nowait): Add an ipv6 test, too.
 
-       Fix scrolling under scroll-preserve-screen-position and margins
+2016-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/window.c (window_scroll_pixel_based): When setting point to
-       preserve screen coordinates, don't let cursor enter either of the
-       two scroll margins.  Fix incorrect usage of
-       WINDOW_WANTS_HEADER_LINE_P and use WINDOW_HEADER_LINE_HEIGHT
-       instead of CURRENT_HEADER_LINE_HEIGHT.  (Bug#22395)
+       Use gnutls-serv instead of openssh
 
-2016-01-18  Eli Zaretskii  <eliz@gnu.org>
+       * test/lisp/net/network-stream-tests.el (make-tls-server): Use
+       gnutls-serv instead of openssh.
 
-       Unbreak the MS-Windows build
+2016-02-08  Daniel Colascione  <dancol@dancol.org>
 
-       * src/sysdep.c (emacs_gnutls_global_init, gnutls_rnd): Disable for
-       WINDOWSNT, to avoid link failure.  (Bug#22202)
+       Performance improvements for vc-hg
 
-2016-01-18  Alan Mackenzie  <acm@muc.de>
+       Teach vc-hg how to read some Mercurial internal data structures,
+       allowing us to avoid the need to run hg status -A, which is very slow
+       for large repositories.  Fall back to running hg if anything looks
+       funny.  vc-hg now puts the _working directory_ revision in the
+       modeline instead of the file revision, which greatly improves
+       performance and which allows us to again skip running hg in the case
+       that we have an active bookmark.
 
-       Desktop: protect users against inadvertant upgrading of desktop file.
+       * lisp/vc/vc-hg.el (vc-hg-state): Try calling `vc-hg-statefast'
+       (vc-hg-symbolic-revision-styles)
+       (vc-hg-use-file-version-for-mode-line-version)
+       (vc-hg-parse-hg-data-structures): New user preferences
+       (vc-hg--active-bookmark-internal, vc-hg--run-log)
+       (vc-hg--symbolic-revision, vc-hg-mode-line-string)
+       (vc-hg--read-u8, vc-hg--read-u32-be)
+       (vc-hg--raw-dirstate-search, vc-hg--cached-dirstate-search)
+       (vc-hg--parts-to-string, vc-hg--pcre-to-elisp-re)
+       (vc-hg--glob-to-pcre, vc-hg--hgignore-add-pcre)
+       (vc-hg--hgignore-add-glob, vc-hg--hgignore-add-path)
+       (vc-hg--slurp-hgignore-1, vc-hg--slurp-hgignore)
+       (vc-hg--ignore-patterns-valid-p)
+       (vc-hg--ignore-patterns-ignored-p, vc-hg--time-to-fixnum)
+       (vc-hg--file-ignored-p, vc-hg--read-repo-requirements)
+       (vc-hg--requirements-understood-p, vc-hg--dirstate-scan-cache)
+       (vc-hg-state-fast): New functions.
+       (vc-hg--hgignore-patterns, vc-hg--hgignore-filenames)
+       (vc-hg--cached-ignore-patterns, vc-hg--dirstate-scan-cache)
+       (vc-hg--dirstate-scan-cache): New internal variables.
+       * lisp/vc/vc-hooks.el (vc-refresh-state): Invoke vc find-file-hook
+       before updating modeline.
 
-       An upgraded (version 208) desktop file cannot be read in Emacs < 25.
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * etc/NEWS: Add an entry about upgrading a desktop file.
+       Skip TLS tests if we don't have openssl
 
-       * lisp/desktop.el (desktop-file-version): Amend doc string.
-       (desktop-native-file-version, desktop-io-file-version): new variables.
-       (desktop-clear): Set desktop-io-file-version to nil.
-       (desktop-buffer-info): make the presence of the last item on the list
-       conditional on (>= desktop-io-file-version 208).
-       (desktop-save): Add extra parameter VERSION to take user's C-u or C-u C-u.
-       Amend the doc string.  Add code to determine the output file version.
-       (desktop-create-buffer): Set desktop-io-file-version to the input file's
-       version.
+       * test/lisp/net/network-stream-tests.el (connect-to-tls): Skip
+       TLS tests if we don't have openssl and GnuTLS.
 
-2016-01-18  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Initialize GnuTLS before calling gnutls_rnd
+       Automatically scale images up on high-density screens
 
-       * src/gnutls.c (emacs_gnutls_global_init): Now extern.
-       Don’t set gnutls_global_initialized if gnutls_global_init fails.
-       * src/sysdep.c: Include "gnutls.h", and <gnutls/crypto.h>
-       if 2.12 or later, which has gnutls_rnd.
-       (emacs_gnutls_global_init, gnutls_rnd): New fallback
-       placeholder macros if before 2.12.
-       (init_random): Initialize gnutls globals before trying to
-       use gnutls_rnd.
+       * doc/lispref/display.texi (ImageMagick Images): Mention :scale.
+       (Defining Images): Mention image-scaling-factor.
 
-2016-01-18  Andreas Schwab  <schwab@linux-m68k.org>
+       * lisp/image.el (image-compute-scaling-factor): New function
+       (bug#22172).
+       (create-image): Use it.
+       (image-scaling-factor): New variable.
 
-       Don't use GnuTLS before it is initialized
+       * src/image.c (compute_image_size): Take :scale into account.
 
-               * src/sysdep.c (init_random): Don't use gnutls_rnd.
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-17  Paul Eggert  <eggert@cs.ucla.edu>
+       Ensure progress when fetching from the queue
 
-       Port cleanup attribute to OpenBSD
+       * lisp/url/url-queue.el (url-queue-check-progress): Ensure
+       that we have progress when fetching queued requests (bug#22576).
 
-       The OpenBSD C compiler issues false alarms about strcpy, strcat, and
-       sprintf, and this messes up 'configure' when it tests for the cleanup
-       attribute.  Work around the problem by using __has_attribute directly.
-       Problem reported by Joakim Jalap (Bug#22385).
-       * configure.ac: Don’t use AX_GCC_VAR_ATTRIBUTE.
-       * m4/ax_gcc_var_attribute.m4: Remove.
-       * src/conf_post.h (__has_attribute): Provide a substitute, for
-       non-GCC or older GCC compilers.  All uses changed to assume
-       the substitute.  Check for the cleanup attribute.
-       * src/emacs-module.c (module_has_cleanup): Just use __has_attribute.
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-17  Paul Eggert  <eggert@cs.ucla.edu>
+       Make mail-extract-address-components return the user name more
 
-       Prefer GnuTLS when acquiring random seed
+       * lisp/mail/mail-extr.el (mail-extract-address-components):
+       Return the name even if it's the same as the mailbox name (if
+       `mail-extr-ignore-single-names' isn't set) (bug#22594).
 
-       This attempts to improve on the fix for Bug#22202.
-       * configure.ac (HAVE_DEV_URANDOM): Remove.
-       Check /dev/urandom existence at run time, not at build time,
-       since the device could exist in the former but not the latter.
-       * src/sysdep.c [HAVE_GNUTLS]: Include gnutls/gnutls.h.
-       (gnutls_rnd) [GNUTLS_VERSION_NUMBER < 0x020c00]: New fallback macro.
-       (random_seed): New typedef.
-       (set_random_seed): New static function.
-       (seed_random): Use them.
-       (init_random): Use random_seed instead of uintmax_t, so as to
-       not consume more entropy than needed.  Prefer gnutls_rnd if it
-       works; this avoids a redundant open of /dev/urandom on
-       GNU/Linux with modern GnuTLS.
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       Message no longer warns about unknown top level domains
 
-       Improve documentation of dynamic modules
+2016-02-07  Jarno Malmari  <jarno@malmari.fi>
 
-       * doc/lispref/loading.texi (How Programs Do Loading): Update the
-       description of searching for files in 'load' when Emacs was built
-       with support for dynamic modules.
+       Add tests for url-auth
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       * test/lisp/url/url-auth-tests.el: New file.
 
-       * INSTALL: Document --with-modules.
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       Add a TLS connection test
 
-       Document 'function-put'
+       * test/lisp/net/network-stream-tests.el (connect-to-tls): Add
+       a TLS connection test.
 
-       * doc/lispref/symbols.texi (Symbol Plists): Document
-       'function-put'.  Update documentation of 'function-get'.
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       Add more network tests
 
-       Document 'funcall-interactively'
+       * test/lisp/net/network-stream-tests.el (echo-server-nowait):
+       New test.
 
-       * doc/lispref/commands.texi (Interactive Call): Document
-       'funcall-interactively'.
-       * doc/lispref/functions.texi (Calling Functions): Mention
-       'funcall-interactively' and provide a cross-reference.
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       Add network tests
 
-       * doc/lispref/lists.texi (Association Lists): Document 'alist-get'.
+       * test/lisp/net/network-stream-tests.el: New suite of network tests.
 
-       * doc/lispref/strings.texi (Text Comparison): Document 'string-greaterp'.
+2016-02-07  Foo  <rasmus@gmx.us>
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       Allow various Gnus and Message address variables to be functions
 
-       Document renaming of selection-related functions
+       * doc/misc/gnus.texi (To From Newsgroups):
+       gnus-ignored-from-addresses can be a function.
 
-       * doc/lispref/frames.texi (Window System Selections): Rename "x-*"
-       functions into the corresponding "gui-*" functions.  Make the
-       description slightly less X-centric.
+       * doc/misc/message.texi (Wide Reply):
+       message-dont-reply-to-names can be a function.
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/gnus/gnus-icalendar.el (gnus-icalendar-identities):
+       message-alternative-emails can be a function.
 
-       * doc/lispref/macros.texi (Expansion): Document 'macroexpand-1'.
+       * lisp/gnus/gnus-notifications.el (gnus-notifications):
+       message-alternative-emails can be a function (bug#22315).
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/gnus/gnus-sum.el
+       (gnus-summary-from-or-to-or-newsgroups):
+       gnus-ignored-from-addresses can be a function (bug#22315).
 
-       Document 'define-inline'
+2016-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * doc/lispref/functions.texi (Defining Functions): Document
-       'define-inline' and related macros.
+       Fix typo in Gnus regexp
 
-       * lisp/emacs-lisp/inline.el (inline-letevals): Doc fix.
+       * lisp/gnus/gnus-art.el (gnus-button-valid-fqdn-regexp): Fix
+       typo in last change to this regexp (bug#22592).
 
-2016-01-16  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-07  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/files.el (dir-locals--all-files): Respect absolute file-names
+       Port to FreeBSD x86
 
-       * lisp/help-fns.el (describe-variable): Fix a left-over parenthesis
+       Reported by Herbert J. Skuhra in:
+       http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00336.html
+       * src/lisp.h (NONPOINTER_BITS) [__FreeBSD__]: Zero in this case too,
+       since malloc always returns a multiple of 8 in FreeBSD.
 
-2016-01-16  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-07  Alan Mackenzie  <acm@muc.de>
 
-       * lisp/dired-x.el (dired-omit-here-always): Use add-dir-local-variable
+       On leaving CC Mode, clean up by removing character properties.
 
-       instead of manually writing a dir-locals file.
+       * lisp/progmodes/cc-mode.el (c-leave-cc-mode-mode): Remove from the buffer
+       all instances of the text properties/extents category, syntax-table,
+       c-is-sws, c-in-sws, c-type, and c-awk-NL-prop.
 
-2016-01-16  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/files.el (dir-locals--all-files): Use completion instead of wildcards
+       * lisp/gnus/gnus-art.el (gnus-button-valid-fqdn-regexp): Don't use
+       the no-longer-existing message-valid-fqdn-regexp variable.
 
-       (dir-locals-file)
-       * lisp/files-x.el (modify-dir-local-variable)
-       * lisp/dos-fns.el (dosified-file-name)
-       * lisp/help-fns.el (describe-variable): Change accordingly.
+2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-16  Jussi Lahdenniemi  <jussi@aprikoodi.fi>  (tiny change)
+       Remove message-valid-fqdn-regexp, since it changes too much now
+       * lisp/gnus/message.el (message-valid-fqdn-regexp): Remove.
+       (message-bogus-recipient-p): Don't use it any more.
+       (message-make-fqdn): Ditto.  Suggested by Lars-Johan Liman.
 
-       Fix incompatbilities with MS-Windows 2000 and older
+2016-02-06  Paul van der Walt  <paul@denknerd.org>  (tiny change)
 
-       * src/w32.c <multiByteToWideCharFlags>: New global variable.
-       (filename_to_utf16, filename_from_ansi, check_windows_init_file):
-       Use it instead of the literal MB_ERR_INVALID_CHARS.
-       (maybe_load_unicows_dll): Initialize multiByteToWideCharFlags as
-       appropriate for the underlying OS version.  For details, see
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00835.html.
-       * src/w32.h: Declare multiByteToWideCharFlags.
-       * src/w32fns.c (Fx_file_dialog, Fw32_shell_execute)
-       (add_tray_notification): Use multiByteToWideCharFlags instead of
-       the literal MB_ERR_INVALID_CHARS.
-       (_resetstkoflw_proc): New typedef.
-       (w32_reset_stack_overflow_guard): Call _resetstkoflw via a
-       pointer, as this function is absent in msvcrt.dll shipped with W2K
-       and older systems.
+       * lisp/gnus/message.el (message-subject-re-regexp): Also match
+       "Re :" as a "Re:" prefix (commonly used in France).
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+2016-02-06  Adam Sjøgren  <asjo@koldfront.dk>
 
-       Mention in PROBLEMS an issue with MS-Windows NT4
+       * lisp/net/shr.el (shr-tag-del, shr-tag-ins): New functions.
 
-       * etc/PROBLEMS (MS-Windows): Mention the problem with Shell32.dll
-       on Windows NT4.  For the details, see
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00835.html.
+2016-02-06  David Edmondson  <dme@dme.org>
 
-2016-01-16  Jussi Lahdenniemi  <jussi@aprikoodi.fi>  (tiny change)
+       src/process.c Correctly convert AF_INET6 addresses
+       * src/process.c (conv_lisp_to_sockaddr): AF_INET6 addresses are
+       converted to a list of 16 bit quantities by
+       conv_sockaddr_to_lisp().  conv_lisp_to_sockaddr() should follow the
+       same scheme rather than expecting a (longer) list of 8 bit
+       quantities.
 
-       Ensure 8-byte aligned memory allocation on MS-Windows 9X
+2016-02-06  Martin Jesper Low Madsen  <martin@martinjlowm.dk>  (tiny change)
 
-       * src/w32heap.c (init_heap): Redirect malloc, realloc, and free to
-       special functions on Windows 9X.  Refuse to dump Emacs on Windows 9X.
-       (malloc_after_dump_9x, realloc_after_dump_9x)
-       (free_after_dump_9x): New functions.  (Bug#22379)  See also
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00852.html
-       for more details about the original problem.
+       * lisp/gnus/auth-source.el (auth-source-macos-keychain-search):
+       Search for all host/port (or protocol) combinations for a match in
+       the OS X keychain.
 
-       * nt/inc/ms-w32.h (malloc_after_dump_9x, realloc_after_dump_9x)
-       (free_after_dump_9x): Add prototypes.
+2016-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       Remove nonsensical setting of gnus-newsgroup-unseen
 
-       Fix tests for active region in hideif.el
+       * lisp/gnus/gnus-sum.el (gnus-update-marks): Remove nonsensical
+       setting of gnus-newsgroup-unseen.
 
-       * lisp/progmodes/hideif.el (hif-evaluate-macro, hide-ifdef-block): Use
-       'use-region-p' to test whether to operate on region, instead of
-       testing 'mark-active'.
+2016-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-16  Eli Zaretskii  <eliz@gnu.org>
+       Use underline on all terminals that support it
 
-       Fix interactive specs in some hideif.el commands
+       * lisp/subr.el (read-multiple-choice): Use
+       display-supports-face-attributes-p instead of
+       display-graphic-p to determine whether we can use underlining.
 
-       * lisp/progmodes/hideif.el (hif-evaluate-macro)
-       (hide-ifdef-undef, show-ifdef-block): Don't use '(interactive "r")'
-       in commands that should only act on the region if it's active.
+2016-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-15  Phillip Lord  <phillip.lord@russet.org.uk>
+       Make the nsm query say what it did after the user interaction
 
-       Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+       * lisp/net/nsm.el (nsm-query): Issue a message about
+       aborting/accepting messages (suggested by N. Jackson)
+       (bug#22531).
 
-2016-01-15  Phillip Lord  <phillip.lord@russet.org.uk>
+2016-02-05  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Enable test selector from command line
+       Omit XLI (init) == 0 optimization in make-vector
 
-       * test/automated/Makefile.in: Change variable manipulation to avoid
-         over-writing selector.
+       * src/alloc.c (Fmake_vector): Simplify by omitting the (XLI (init)
+       == 0) case, as this optimization is probably not worth the hassle.
+       Just for the record, the test for that case could have been
+       (XLI (init) % ((EMACS_UINT) -1 / UCHAR_MAX) == 0) (!),
+       assuming the typical platform with no padding bits and where
+       conversion to int omits the most significant bits.
 
-2016-01-15  Alan Mackenzie  <acm@muc.de>
+2016-02-05  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Don't confuse "::" with ":" when trying to parse member initializers.
+       * autogen.sh: Port to dash (Bug#22556).
 
-       * lisp/progmodes/cc-engine.el (c-back-over-member-initializers): Check
-       more robustly for ":" token when searching backwards for it.
+2016-02-05  Michael Albinus  <michael.albinus@gmx.de>
 
-       * lisp/progmodes/cc-langs.el (c-:$-multichar-token-regexp): New language
-       variable.
+       Minor cleanup for Tramp "doas".
 
-2016-01-15  Eli Zaretskii  <eliz@gnu.org>
+       * doc/misc/tramp.texi (Inline methods): Add "doas" method.
 
-       Ensure positive number of glyphs for margins of positive width
+       * etc/NEWS: Add Tramp connection method "doas".
 
-       * src/dispnew.c (margin_glyphs_to_reserve): Always return a
-       positive value when a non-zero width of the marginal area was
-       requested.  (Bug#22356)
+       * lisp/net/tramp-sh.el (tramp-methods) <doas>:
+       Add `tramp-remote-shell-args'.
 
-2016-01-15  Eli Zaretskii  <eliz@gnu.org>
+2016-02-05  Xi Lu  <lx@shellcodes.org>
 
-       Fix crashes when mini-window has non-zero margins
+       * lisp/net/tramp-sh.el (tramp-methods) <doas>: Add.  (Bug#22542)
 
-       * src/window.c (resize_frame_windows): Use 'new_size' to set
-       minibuffer window's 'total_cols' value, as 'size' might be in
-       pixels.  (Bug#22356)
+       (tramp-default-user-alist): Add rule for "doas".
+       (top): Completion function for "doas" is
+       `tramp-completion-function-alist-su'.
 
-2016-01-15  Alan Mackenzie  <acm@muc.de>
+2016-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       In comment-dwim with style `extra-line', respect indent-tabs-mode.
+       Restore the window configuration
 
-       This fixes bug #22369.
+       * lisp/net/nsm.el (nsm-query-user): Restore the window
+       configuration (bug#22532).
 
-       * lisp/newcomment.el (comment-make-bol-ws): New function.
-       (comment-make-extra-lines): Use new function instead of a crude `make-string'.
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-15  Eli Zaretskii  <eliz@gnu.org>
+       Use an X popup in read-multiple-choice if running from a mouse command
 
-       Make 'random' seeds cryptographically secure if possible
+       * lisp/subr.el (read-multiple-choice): Use an X popup if
+       called from a mouse action (bug#19368).
 
-       * configure.ac: Check for "/dev/urandom".
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/sysdep.c (init_random) [HAVE_DEV_URANDOM]: Read the stream
-       for the seed from "/dev/urandom".
-       [WINDOWSNT]: Obtain the stream for the seed from w32 APIs.
-       * src/fns.c (Frandom): Update the doc string to indicate that
-       system entropy is used when available.
-       * src/w32.c: Include wincrypt.h.
-       (w32_init_crypt_random, w32_init_random): New functions, use the
-       CryptGenRandom API.
-       (globals_of_w32): Initialize w32_crypto_hprov handle to zero.
-       * src/w32.h (w32_init_random): Add prototype.
+       Display cursor in echo area when prompting
 
-       * doc/lispref/numbers.texi (Random Numbers): Document more details
-       about 't' as the argument to 'random'.
+       * lisp/subr.el (read-multiple-choice): Display the cursor in
+       the echo area when prompting (bug#19368).
 
-       * etc/NEWS: Mention that '(random t)' now uses a cryptographically
-       strong seed if possible.
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       (Bug#22202)
+       Make NSM prompting clearer
 
-2016-01-15  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/net/nsm.el (nsm-query-user): Use read-multiple-choice
+       to prompt in a nicer way (bug#19368).
 
-       Unhide the --no-line-directive option to 'etags'
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lib-src/etags.c (print_help): Un-undocument the --no-line-directive
-       option.  (Bug#22306)
+       Underline read-multiple-choice-face
 
-       * doc/man/etags.1: Document the --no-line-directive option.
+       * lisp/faces.el (read-multiple-choice-face): Also underline
+       the choice.
 
-2016-01-15  Alan J Third  <alan@idiocy.org>  (tiny change)
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix picture-mode wrt double-width characters
+       Make the read-multiple-choice prompt a bit prettier
 
-       * lisp/textmodes/picture.el (picture-insert): Check the width of
-       the character being replaced, not just that of the replacement.
-       (Bug#1808)
+       * doc/lispref/commands.texi (Reading One Event): Mention
+       read-multiple-choice-face.
 
-2016-01-15  Eric Abrahamsen  <eric@ericabrahamsen.net>
+       * lisp/subr.el (read-multiple-choice): Make the prompting a bit
+       prettier.
 
-       Honor docstring of gnus-group-get-new-news
+2016-02-04  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/gnus/gnus-start.el (gnus-get-unread-articles): If the prefix arg is t,
-       but non-numeric, unconditionally consider all groups to need updating.
+       Prefer memcpy and memset to doing it by hand
 
-2016-01-14  Simen Heggestøyl  <simenheg@gmail.com>
+       * src/alloc.c (Fmake_vector):
+       * src/ccl.c (setup_ccl_program):
+       Use memset to clear array.
+       * src/alloc.c (Fvector, Fmake_byte_code):
+       * src/charset.c (Fdefine_charset_internal):
+       Use memcpy to copy array.
 
-       Disallow parenthesis in non-pseudo CSS selectors
+2016-02-04  Nicolas Petton  <nicolas@petton.fr>
 
-       * lisp/textmodes/css-mode.el (css--font-lock-keywords): Disallow
-       parenthesis in selectors except for in the function notation that
-       might appear right after a pseudo-class.
-       * test/indent/scss-mode.scss: Add a test for it.
+       Do not ignore redirections of 301, 302 and 307 status codes
 
-2016-01-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+       The current version of HTTP/1.1 (RFC 7231) no longer requires
+       confirmation on 301, 302 or 307 status codes, therefore we do not have
+       to ignore redirects for other requests than GET and HEAD.
 
-       * lisp/gnus/nntp.el (nntp-request-newgroups): Simplify
+       * lisp/url/url-http.el (url-http-parse-headers): Do not ignore 301, 302
+       and 307 redirects for other requests than GET and HEAD.
 
-2016-01-14  Michael Albinus  <michael.albinus@gmx.de>
+2016-02-04  Mark Oteiza  <mvoteiza@udel.edu>
 
-       check-maybe shall run only default tests
+       * lisp/net/eww.el (eww-switch-to-buffer): Use pop-to-buffer-same-window instead.
 
-       * test/automated/Makefile.in (check, check-expensive): Depend on
-       mostlyclean.
-       (check-maybe): Re-run only default tests.
-       (check-doit): Use code of check-maybe.
-       (mostlyclean): Move *.log files away.
+2016-02-04  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-14  Mark Oteiza  <mvoteiza@udel.edu>
+       Simplify USE_ALIGNED_ALLOC
 
-       * lisp/thingatpt.el (thing-at-point-uri-schemes): Add "magnet:"
+       * src/alloc.c (USE_ALIGNED_ALLOC): Simplify, now that we’ve merged
+       in the emacs-25 changes.  Omit no-longer-needed decl for aligned_alloc.
 
-2016-01-14  Dmitry Gutov  <dgutov@yandex.ru>
+2016-02-04  Eric Abrahamsen  <eric@ericabrahamsen.net>
 
-       Un-obsolete tags-loop-continue
+       Honor docstring of gnus-group-get-new-news
 
-       * lisp/progmodes/etags.el (tags-loop-continue): Un-obsolete.
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00682.html
+       * lisp/gnus/gnus-start.el (gnus-get-unread-articles): If the prefix arg
+       is t, but non-numeric, unconditionally consider all groups to need
+       updating.
 
-2016-01-13  Eli Zaretskii  <eliz@gnu.org>
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Document obsoletion of 'intangible' and 'point-entered/left'
+       New function read-multiple-choice
+
+       * doc/lispref/commands.texi (Reading One Event): Document
+       read-multiple-choice.
+
+       * lisp/faces.el (read-multiple-choice-face): New face.
+
+       * lisp/subr.el (read-multiple-choice): New function.
+
+2016-02-04  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       ee73997 Make erc work better when encountering unknown prefix chars
+       b99141d Make erc completion case-insensitive again
+       66c4620 Make complection in erc use consistent casing
+       8c562b2 Make /QUIT in erc more robust
+       d93d2c5 Make tracking faces in Emacs work more reliably
+       af6ab7e Make shr not bug out on images on non-graphical displays
+       3311f40 Fix bookmark display widths
+       d90ab1e Fix typo in eww-make-unique-file-name
+       7f81825 Make it possible to TAB to input fields
+       a43a1dc Insert complete alt texts when images are disabled
+       56ed4e1 Allow eww text fields to grow
+       66b315c Make erc work when subword-mode is switched on
+       255b68f Fix IMAP doc example
+       91557f5 Quoting fixes in doc strings and diagnostics
+       2c0dc9f Fix warning message in hack-local-variables
+       504696d Etags: yet another improvement in Ruby tags
+       8784ebf Fix x-popup-menu on TTYs without a mouse
+       8b87ecb * lisp/emacs-lisp/map.el: Improvements to the docstring of the
+               pcase macro
+       6191003 Use pop-to-buffer-same-window in eww
+       fe321fd * autogen.sh: Revert all recent changes.
+       74ebd4a * make-dist: Updates related to nt/.
+       737193a * make-dist: Add modules/.
+       3696bf2 * make-dist: Update for super-special file that can't live in etc/.
+       a4278e2 Fix failure to compile ns-win.el in parallel builds
+       860da4d Fix names of tags generated for Ruby accessors
+       f6213ce Fix file-name recognition in 'etags'
+       e42e662 Change Ruby file names and extensions recognized by 'etags'
+       58bfb6a More improvements for Ruby support in 'etags'
+       c04e911 Add --git-config option to autogen.sh
+       5713466 Fix editing undo changes in eww fields
+       51362d6 Allow the user more control of popping up the eww window
+       ee0fbd8 Make eww-browse-url with new-window parameter work again
+       9c3142d Clean up eww code slightly
+       cb035f3 Don't insert nil faces in shr
+       4c3fae3 ; * lisp/progmodes/prolog.el: Remove some obsolete commentary.
+       93f2153 Improve the custom type of some user options.
+       9f60d7e Mark some risky calendar variables.
+       1d07dcd Highlight two additional SCSS keywords
+       ee8b466 Recommend enabling integrity-checking in git
+       e639e10 Some corrections in Elisp manual
+       d766ca8 Chatter when autogen.sh changes Git configuration
+       3b734e1 * org/org-compat.el (org-font-lock-ensure): Fix bogus test (bug#22399)
+       43cb9f8 Omit unnecessary history from Lisp intro
+       2fbd1da * etc/HISTORY: Add some more history, plus git tags.
+       c90e1b4 Improve elisp “Security Considerations” doc
+       cedd7ca autogen.sh now arranges for git to check hashes
+       86ce76b ; Fix ChangeLog.2 commit ID.
+       7b1d2b1 Fix (c & 040) typo in emergency escapes
+       a8273da Fix display of overlay strings with 'display' and 'box' property
+       fc48106 Fix imap-starttls-open
+       cdecbed Fix return value of imap-starttls-open
+       20c7e34 ; * etc/NEWS: Fix renamed command name
+       98bdbdb Correct reference to DARWIN_OS preprocessor symbol
+       b250d29 Spelling fix
+       b920a0e Spelling fixes
+       93b144b Pacify GCC on C library without glibc API
+
+2016-02-04  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       ea26c8a * lisp/net/browse-url.el (browse-url-default-browser): Lower
+               priority of non-free Chrome.
+       0fac75f Improve the custom type of some user options.
+       2df0e04 Highlight CSS variables with variable name face
+       3cf5e81 * lisp/gnus/gnus-kill.el (gnus-winconf-kill-file): Not
+               user-serviceable.
+       2a5233c Mark some user options that can get evalled as risky.
+       39b166f Disable DebPrint in sys_read on MS-Windows
+       9fd0189 ;Fix ChangeLog entry
+       4bb7233 Fix typos in Introduction to Emacs Lisp manual
 
-       * doc/lispref/text.texi (Special Properties): Document the new
-       properties 'cursor-intangible' and 'cursor-sensor-functions'.
-       Document the obsolete status of 'intangible', 'pointer-left',
-       and 'point-entered' properties, and of 'inhibit-point-motion-hooks'.
-       * doc/lispref/display.texi (Overlay Properties): Document that
-       'intangible' overlay property is obsolete.
+2016-02-04  Vasilij Schneidermann  <v.schneidermann@gmail.com>  (tiny change)
 
-       * lisp/emacs-lisp/cursor-sensor.el (cursor-sensor-mode): Doc fix.
+       Allow sending empty hidden values in eww
 
-2016-01-13  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/net/eww.el (eww-tag-input): Allow sending empty hidden
+       values (bug#22388).
 
-       Updater documentation of 'looking-back'
+       (cherry picked from commit 5898da8210af7953e638ddf7821c05260979c3f0)
 
-       * doc/lispref/searching.texi (Regexp Search): Update documentation
-       of 'looking-back'.  Fix markup.
+       Backport:
 
-2016-01-13  Eli Zaretskii  <eliz@gnu.org>
+2016-02-04  David Edmondson  <dme@dme.org>
 
-       Document 'pre-redisplay-functions'
+       Make erc work better when encountering unknown prefix chars
 
-       * doc/lispref/hooks.texi (Standard Hooks):
-       * doc/lispref/display.texi (Forcing Redisplay): Document
-       'pre-redisplay-functions'.
+       * lisp/erc/erc.el (erc-channel-receive-names): Output a warning
+       instead of erroring out on unknown prefix chars (bug#22380).
 
-2016-01-13  Eli Zaretskii  <eliz@gnu.org>
+2016-02-04  Mark Oteiza  <mvoteiza@udel.edu>
 
-       Document the new deafault value of 'load-read-function'
+       Add a new command to switch between erc buffers
 
-       * doc/lispref/loading.texi (How Programs Do Loading): Document the
-       change in the default value of 'load-read-function'.
+       * doc/misc/eww.texi: Document eww-switch-to-buffer and its keybinding
+       * etc/NEWS: Mention new command
+       * lisp/net/eww.el (eww-mode-map): Bind eww-switch-to-buffer to "s"
+       (eww-mode-map): Add menu item
+       (eww-switch-to-buffer): New command
 
-2016-01-13  Eli Zaretskii  <eliz@gnu.org>
+2016-02-04  David Edmondson  <dme@dme.org>
 
-       Document 'bufferpos-to-filepos' and 'filepos-to-bufferpos'
+       Make erc work better when encountering unknown prefix chars
 
-       * doc/lispref/nonascii.texi (Text Representations): Document
-       'bufferpos-to-filepos' and 'filepos-to-bufferpos'.
+       * lisp/erc/erc.el (erc-channel-receive-names): Output a warning
+       instead of erroring out on unknown prefix chars (bug#22380).
 
-2016-01-13  Eli Zaretskii  <eliz@gnu.org>
+2016-02-04  Vasilij Schneidermann  <v.schneidermann@gmail.com>  (tiny change)
 
-       Document the new prefix-command hooks
+       Allow sending empty hidden values in eww
 
-       * doc/lispref/hooks.texi (Standard Hooks): Document
-       `prefix-command-echo-keystrokes-functions' and
-       `prefix-command-preserve-state-hook'.
+       * lisp/net/eww.el (eww-tag-input): Allow sending empty hidden
+       values (bug#22388).
 
-2016-01-13  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix one more misuse of time-stamp-time-zone
+       Make erc completion case-insensitive again
 
-       * test/etags/html-src/softwarelibero.html: Use "UTC0" rather
-       than the unportable "GMT" for time zone.
+       * lisp/erc/erc.el (erc-completion-at-point): Make erc completion
+       case-insensitive again (bug#11360).
 
-2016-01-13  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-04  Carlos Pita  <carlosjosepita@gmail.com>  (tiny change)
 
-       Fix NNTP NEWGROUPS off-by-a-few-hours bug
+       Make complection in erc use consistent casing
 
-       * lisp/gnus/nntp.el (nntp-request-newgroups): Format string
-       in Universal Time, since we’re telling the server “GMT”.
+       * lisp/erc/erc-pcomplete.el (pcomplete-erc-all-nicks): Make
+       case in the complection consistent (bug#18509).
 
-2016-01-13  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-04  Francis Litterio  <flitterio@gmail.com>
 
-       Update publicsuffix.txt from upstream
+       Make /QUIT in erc more robust
 
-       * etc/publicsuffix.txt: Update from
-       https://publicsuffix.org/list/effective_tld_names.dat
-       dated 2016-01-12 11:52:01 UTC.
+       * lisp/erc/erc.el (erc-kill-query-buffers): Don't bug out if we're
+       issuing /QUIT to disconnected servers (bug#22099).
 
-2016-01-13  Glenn Morris  <rgm@gnu.org>
+2016-02-04  Kevin Brubeck Unhammer  <unhammer@fsfe.org>  (tiny change)
 
-       Fix some declarations.
+       Make tracking faces in Emacs work more reliably
 
-       * lisp/descr-text.el (internal-char-font):
-       * lisp/cedet/mode-local.el (xref-item-location):
-       * lisp/gnus/mml-smime.el (epg-key-sub-key-list)
-       (epg-sub-key-capability, epg-sub-key-validity):
-       * lisp/international/mule-util.el (internal-char-font):
-       Fix declarations.
+       * lisp/erc/erc-track.el (erc-faces-in): Always return lists of
+       faces to avoid later ambiguity (bug#22424).
 
-2016-01-13  Glenn Morris  <rgm@gnu.org>
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix some custom types.
+       Make shr not bug out on images on non-graphical displays
 
-       * lisp/gnus/gnus-fun.el (gnus-x-face-omit-files, gnus-face-omit-files):
-       * lisp/gnus/gnus.el (gnus-valid-select-methods):
-       * lisp/mail/rmail.el (rmail-get-coding-function):
-       * lisp/net/newst-treeview.el (newsticker-groups-filename):
-       * lisp/progmodes/hideif.el (hide-ifdef-exclude-define-regexp):
-       * lisp/textmodes/tildify.el (tildify-space-predicates):
-       * lisp/url/url-tramp.el (url-tramp-protocols):
-       Fix custom types.
+       * lisp/net/shr.el (shr-put-image): Don't bug out on alt-less
+       images on non-graphical displays (bug#22327).
 
-2016-01-13  Glenn Morris  <rgm@gnu.org>
+2016-02-04  Andrew Hyatt  <ahyatt@gmail.com>
 
-       Add some missing version tags.
+       Remove packages obsoleted before Emacs 24.
 
-       * lisp/electric.el (electric-quote-comment)
-       (electric-quote-string, electric-quote-paragraph):
-       * lisp/epg-config.el (epg-gpgconf-program):
-       * lisp/rect.el (rectangle-preview):
-       * lisp/emacs-lisp/check-declare.el (check-declare-ext-errors):
-       * lisp/emacs-lisp/package.el (package-selected-packages)
-       (package-hidden-regexps):
-       * lisp/erc/erc.el (erc-network-hide-list, erc-channel-hide-list):
-       * lisp/eshell/em-term.el (eshell-destroy-buffer-when-process-dies):
-       * lisp/gnus/mml-sec.el (mml1991-signers, mml2015-signers)
-       (mml-smime-signers, mml1991-encrypt-to-self, mml2015-encrypt-to-self)
-       (mml-smime-encrypt-to-self, mml2015-sign-with-sender)
-       (mml-smime-sign-with-sender, mml2015-always-trust)
-       (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
-       * lisp/net/browse-url.el (browse-url-conkeror-new-window-is-buffer)
-       (browse-url-conkeror-arguments):
-       * lisp/net/newst-reader.el (newsticker-download-logos):
-       * lisp/progmodes/gud.el (gud-guiler-command-name):
-       * lisp/progmodes/prog-mode.el (prettify-symbols-unprettify-at-point):
-       * lisp/progmodes/project.el (project-vc):
-       * lisp/progmodes/python.el (python-indent-guess-indent-offset-verbose)
-       (python-shell-remote-exec-path, python-shell-first-prompt-hook)
-       (python-shell-completion-native-disabled-interpreters)
-       (python-shell-completion-native-enable)
-       (python-shell-completion-native-output-timeout)
-       (python-shell-completion-native-try-output-timeout):
-       * lisp/progmodes/xref.el (xref):
-       * lisp/term/screen.el (xterm-screen-extra-capabilities):
-       * lisp/term/xterm.el (xterm-max-cut-length):
-       Add missing version tags.
+       In accordance with the policy discussed in the emacs-devel list,
+       packages that have been obsoleted for a full major release cycle are up
+       for deletion.
 
-2016-01-13  Glenn Morris  <rgm@gnu.org>
+       This removes almost all packages that are now eligible for deletion,
+       with the exception of "cl-compat", which seems it is likely to still be
+       used, and "optional", which offers some functionality that doesn't have
+       a replacement yet.
 
-       * test/automated/core-elisp-tests.el
-       (core-elisp-tests-1-defvar-in-let): Add a custom type.
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-13  Glenn Morris  <rgm@gnu.org>
+       Fix bookmark display widths
 
-       * src/buffer.c (syms_of_buffer) <major-mode>: Doc fix.
+       * lisp/net/eww.el (eww-list-bookmarks): Pop to the buffer before
+       preparing it so that the widths are computed correctly (bug#22328).
 
-       Remove comments that do not apply since 2005-08-09.  (Bug#22349)
+2016-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-12  Paul Eggert  <eggert@cs.ucla.edu>
+       Fix typo in eww-make-unique-file-name
 
-       Merge from gnulib
+       * lisp/net/eww.el (eww-make-unique-file-name): Make this function
+       actually work.
 
-       This mostly just changes "UTC" to "UTC0" for POSIX conformance.
-       It also updates to the latest version of texinfo.tex.
-       * build-aux/gitlog-to-changelog, build-aux/move-if-change:
-       * build-aux/update-copyright, doc/misc/texinfo.tex:
-       Update from gnulib.
+2016-02-03  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-12  Eli Zaretskii  <eliz@gnu.org>
+       Make it possible to TAB to input fields
 
-       Update documentation of 'process-running-child-p'
+       * lisp/net/eww.el (eww-tag-input): Make it possible to TAB to
+       input fields (bug#22540).
 
-       * doc/lispref/processes.texi (Input to Processes): Document the
-       changes in return value of 'process-running-child-p'.
+2016-02-03  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-12  Eli Zaretskii  <eliz@gnu.org>
+       Insert complete alt texts when images are disabled
 
-       Update documentation of 'deactivate-mark'.
+       * lisp/net/shr.el (shr-tag-img): When images are disabled, insert
+       the complete alt/title string (bug#22293).
 
-       * doc/lispref/markers.texi (The Mark): Document that
-       'deactivate-mark' is now buffer-local when set.
+2016-02-03  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2016-01-12  Eli Zaretskii  <eliz@gnu.org>
+       Allow eww text fields to grow
 
-       Update documentation of 'completion-table-dynamic'
+       * lisp/net/eww.el (eww-process-text-input): Allow text fields to
+       grow when typing in stuff that's longer than the original width.
 
-       * doc/lispref/minibuf.texi (Programmed Completion): Document the
-       new optional argument to 'completion-table-dynamic'.
+2016-02-03  Dima Kogan  <dima@secretsauce.net>
 
-2016-01-12  Eli Zaretskii  <eliz@gnu.org>
+       Make erc work when subword-mode is switched on
 
-       Document changes in 'read-buffer' and 'read-buffer-function'
+       * lisp/erc/erc-backend.el (erc-forward-word, erc-word-at-arg-p)
+       (erc-bounds-of-word-at-point): New functions to do word-based
+       things when subword-mode is switched on.
 
-       * doc/lispref/minibuf.texi (High-Level Completion): Document the
-       4th argument to 'read-buffer' and 'read-buffer-function'.
+       * lisp/erc/erc-button.el (erc-button-add-nickname-buttons): Use them
+       (bug#17558).
 
-2016-01-12  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-03  Teemu Likonen  <tlikonen@iki.fi>
 
-       Fix time-stamp-time-zone bugs introduced in July
+       Fix IMAP doc example
 
-       This fixes a bug introduced when the July changes to
-       format-time-string installed, as the changes were not
-       correctly handled in this module (Bug#22302).
-       Also, document time stamp time zones.
-       * lisp/time-stamp.el (time-stamp-time-zone): Document values better.
-       (time-stamp--format): New private function.
-       (time-stamp-string, time-stamp-string-preprocess)
-       (time-stamp-do-number): Use it.
-       * doc/emacs/files.texi (Time Stamps): Mention time zones.
-       * doc/misc/autotype.texi (Timestamps): Document time-stamp-time-zone.
+       * doc/misc/gnus.texi (Client-Side IMAP Splitting): Fix example.
 
-2016-01-12  Eli Zaretskii  <eliz@gnu.org>
+2016-02-03  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Make piping to subprocesses more robust on MS-Windows
+       Quoting fixes in doc strings and diagnostics
 
-       * src/w32.c (sys_write): Don't write to a pipe more stuff than its
-       buffer can hold.  Don't return -1 if something has been written to
-       the pipe.  Zero out 'errno' before calling '_write', to avoid
-       returning a stale value.  (Bug#22344)
-       * src/w32proc.c (syms_of_ntproc) <w32-pipe-buffer-size>: New variable.
-       * src/w32.c (pipe2): Use it to request a user-defined size for the
-       pipe being created.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq, byte-compile-funcall):
+       * lisp/gnus/mml-smime.el (mml-smime-get-dns-cert)
+       (mml-smime-get-ldap-cert):
+       Follow user style preference when quoting diagnostics.
 
-       * etc/NEWS: Mention 'w32-pipe-buffer-size'.
+2016-02-03  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * doc/emacs/msdos.texi (Windows Processes): Document
-       'w32-pipe-buffer-size'.
+       Mention context when resume from emergency escape
 
-2016-01-11  Dmitry Gutov  <dgutov@yandex.ru>
+       That way, if the user has been doing something else for a while,
+       they are reminded of the situation when restarting Emacs,
+       and are more likely to understand the two questions.
+       * doc/emacs/trouble.texi (Emergency Escape): Document this.
+       * src/keyboard.c (handle_interrupt): Implement this.
 
-       test/automated/vc-hg.el: Support out-of-tree build
+2016-02-03  Noam Postavsky  <npostavs@gmail.com>
 
-       * test/automated/vc-hg.el
-       (vc-hg-annotate-extract-revision-at-line-with-filename)
-       (vc-hg-annotate-extract-revision-at-line-with-both):
-       Don't refer to source-directory.
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00755.html
+       Fix warning message in hack-local-variables
 
-2016-01-11  Michael Albinus  <michael.albinus@gmx.de>
+       * lisp/files.el (hack-local-variables): use 'thisbuf' to reference
+       the original buffer name in the warning message.  (Bug#21681)
 
-       Minor change in tramp-tests.el
+2016-02-03  Eli Zaretskii  <eliz@gnu.org>
 
-       * test/automated/tramp-tests.el (tramp-test29-vc-registered):
-       Use `dired-uncache' instead of a Tramp internal function.
+       Etags: yet another improvement in Ruby tags
 
-2016-01-11  Peter Feigl  <peter.feigl@nexoid.at>
+       * lib-src/etags.c (Ruby_functions): Handle continuation lines in
+       Ruby accessor definitions.  (Bug#22241)
 
-       * etc/HELLO: Add Armenian and Mongolian greetings.
+       * test/etags/ruby-src/test1.ru (A::B#X): Add some more tests for
+       accessors and multiline definitions.
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to changes in Ruby tags.
 
-       (Bug#22346)
+2016-02-03  Eli Zaretskii  <eliz@gnu.org>
 
-2016-01-11  Alan Mackenzie  <acm@muc.de>
+       Fix x-popup-menu on TTYs without a mouse
 
-       Java Mode: Fontify identifiers in the presence of annotations.
+       * src/menu.c (Fx_popup_menu): Be sure to initialize 'x' and 'y'
+       for the TTY case without a mouse.  (Bug#22538)
 
-       * lisp/progmodes/cc-engine.el (c-forward-annotation): Tidy up the coding:
-       Don't move point when the defun fails.
-       (c-forward-decl-or-cast-1): Correct a usage of match data.
-
-       * lisp/progmodes/cc-fonts.el (c-font-lock-maybe-decl-faces): Remove.
-       (c-font-lock-declarations): Use the new c-maybe-decl-faces in place of the
-       removed variable.
-
-       * lisp/progmodes/cc-langs.el (c-maybe-decl-faces): New language variable.
-
-2016-01-11  Eli Zaretskii  <eliz@gnu.org>
+2016-02-03  Nicolas Petton  <nicolas@petton.fr>
 
-       Avoid an infloop when we run out of memory
+       * lisp/emacs-lisp/map.el: Improvements to the docstring of the pcase macro
 
-       * src/alloc.c (garbage_collect_1): Don't bother saving and
-       restoring the echo-area message if we are GC'ing after running out
-       of memory.  This avoids an infloop due to repeated attempts to
-       allocate memory for the cons cell needed to save the message,
-       which signals the memory-full error, which attempts to save the
-       echo-area message, which signals memory-full again, etc.
+2016-02-03  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-11  Eli Zaretskii  <eliz@gnu.org>
+       Port aligned_alloc decl to Cygwin.
 
-       Avoid unnecessary failures of auto-saving after fatal error
+       Problem reported by Ken Brown (Bug#22522#38).
+       * configure.ac (aligned_alloc): Check for decl too.
+       * src/lisp.h (aligned_alloc): Declare if not already declared.
 
-       * src/w32.c (map_w32_filename): Avoid non-trivial system calls for
-       the benefit of FAT volumes if we are called as part of shutting
-       down due to a fatal error, which probably means we are trying to
-       auto-save the session.
-       * src/lread.c (check_obarray): Don't bother making the obarray
-       valid if we are shutting down due to a fatal error.  This avoids
-       interfering with auto-saving the crashed session.
+2016-02-03  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-11  Paul Eggert  <eggert@cs.ucla.edu>
+       autogen.sh now configures git only on request
 
-       Simplify HAVE_MODULES use in mark_maybe_pointer
+       * autogen.sh (do_autoconf, do_git): New vars.
+       Support new arguments --help, all, autoconf, git.
+       By default, just do autoconf-related configuration, not git.
+       Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
+       If GNU cp is available, use it to backup .git/config before
+       changing it.  When configuring git, chatter about what is being
+       done, and configure git to check hashes.  Avoid some duplicate
+       file name specification when creating git hooks.
 
-       * src/alloc.c (HAVE_MODULES): Now a constant 0 if not defined,
-       so that later code can use 'if' rather than '#ifdef'.
-       (mark_maybe_pointer): Simplify based on HAVE_MODULES now
-       always working.
+       * GNUmakefile (ALL_IF_GIT): New macro.
+       (configure): Use it.
+       * INSTALL.REPO: Suggest './autogen.sh all'.
 
-2016-01-11  Paul Eggert  <eggert@cs.ucla.edu>
+2016-02-02  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Revert attempt to use 'noexcept' in typedef
+       Use pop-to-buffer-same-window in eww
 
-       This use of 'noexcept' runs afoul of the C++11 standard.
-       Problem reported by Philipp Stephani in:
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00706.html
-       * src/emacs-module.c (emacs_finalizer_function):
-       Move this typedef here ...
-       * src/emacs-module.h: ... from here, and use only the C
-       version of the typedef.  The typedef is now private since it
-       is never used in the .h file now and anyway it seemed to be
-       causing more confusion than it cured.
-       (make_user_ptr, get_user_finalizer, set_user_finalizer):
-       Open-code the type instead.
+       * lisp/net/eww.el: pop-to-buffer-same-window throughout instead of
+       switch-to-buffer (bug#22244).
 
-2016-01-10  Eli Zaretskii  <eliz@gnu.org>
+2016-02-02  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Update documentation of 'indirect-function'
+       * autogen.sh: Revert all recent changes.
 
-       * doc/lispref/eval.texi (Function Indirection): Update the
-       documentation of 'indirect-function'.
+2016-02-02  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-10  Eli Zaretskii  <eliz@gnu.org>
+       Build with C11 if available
 
-       Update documentation for obsoleting 'syntax-begin-function'
+       * admin/merge-gnulib (GNULIB_MODULES): Add std-gnu11.
+       * m4/std-gnu11.m4: New file, from gnulib.
+       * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
 
-       * doc/lispref/syntax.texi (Position Parse): Undocument
-       'syntax-begin-function' that is now obsolete.
+2016-02-02  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-10  Eli Zaretskii  <eliz@gnu.org>
+       Update gnulib copy
 
-       Document new features if Eshell
+       * doc/misc/texinfo.tex: Copy from gnulib.
 
-       * doc/misc/eshell.texi (Input/Output): Document the new
-       '#<bufname>' syntax.
-       (Input/Output): Document 'eshell-destroy-buffer-when-process-dies'.
-       Disable "Key Index" generation, as there are no @kindex entries in
-       this manual.
+2016-02-02  Glenn Morris  <rgm@gnu.org>
 
-2016-01-10  Michael Albinus  <michael.albinus@gmx.de>
+       * make-dist: Updates related to nt/.
 
-       Handle too long commands in Tramp
+       * make-dist: Add modules/.
 
-       * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link)
-       (tramp-do-file-attributes-with-ls): Send sequence of commands, in
-       order to not exceed shell command line limit.
+       * make-dist: Update for super-special file that can't live in etc/.
 
-       * test/automated/tramp-tests.el (tramp--test-darwin-p): Remove.
-       (tramp--test-utf8): Include Arabic file name, again.
+2016-02-02  Eli Zaretskii  <eliz@gnu.org>
 
-2016-01-10  Paul Eggert  <eggert@cs.ucla.edu>
+       Fix failure to compile ns-win.el in parallel builds
 
-       * .gitattributes: *.cur and *.pif are binary files too.
+       * src/Makefile.in ($(lispsource)/term/ns-win.elc): Add order-only
+       dependency on $(lispsource)/international/charprop.el.
+       (Bug#22501)
 
-2016-01-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+2016-02-02  Eli Zaretskii  <eliz@gnu.org>
 
-       * src/alloc.c (mark_maybe_pointer): HAVE_MODULES may be undefined
+       Fix names of tags generated for Ruby accessors
 
-2016-01-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * lib-src/etags.c (Ruby_functions): Don't include the leading
+       colon ':' in tags for Ruby accessors and aliases.  (Bug#22241)
 
-       * lisp/progmodes/sh-script.el (sh-smie-sh-rules): Improve indentation inside $(...)
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to changes in Ruby tags.
 
-       * lisp/progmodes/sh-script.el (sh-smie-sh-rules): Improve indentation
-       within $(...).
-       * test/indent/shell.sh: Add corresponding test.
+2016-02-02  Glenn Morris  <rgm@gnu.org>
 
-2016-01-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * lisp/vc/add-log.el (change-log-directory-files, find-change-log):
+       Doc tweaks.
 
-       * src/alloc.c (mark_maybe_pointer): Also check wide-int's emacs_value
+2016-02-02  Eli Zaretskii  <eliz@gnu.org>
 
-       (mark_memory): Simplify loop.  Don't assume a pointer-sized word can be
-       cast to Lisp_Object.
+       Fix file-name recognition in 'etags'
 
-2016-01-10  Dmitry Gutov  <dgutov@yandex.ru>
+       * lib-src/etags.c (get_language_from_filename): If FILE includes a
+       leading directory, compare only its basename to the known file
+       names in lang_names[].
 
-       Use short date for 'hg annotate', and output the author
+       * test/etags/Makefile (RBSRC): Adapt to recent test1.ruby
+       renaming.
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to changes in Ruby file names and
+       to the results in Makefile due to the above etags.c fix.
 
-       * lisp/vc/vc-hg.el (vc-hg-annotate-command):
-       Change '-d' to '-dq'.  (Bug#21805)
-       (vc-hg-annotate-switches): Default to "-u" "--follow".
-       (vc-hg-annotate-re): Update to recognize the short date format
-       and the optional username.
-       (vc-hg-annotate-time)
-       (vc-hg-annotate-extract-revision-at-line): Update accordingly.
+2016-02-02  Eli Zaretskii  <eliz@gnu.org>
 
-       * test/automated/vc-hg.el: New file.
+       Change Ruby file names and extensions recognized by 'etags'
 
-2016-01-10  Paul Eggert  <eggert@cs.ucla.edu>
+       * lib-src/etags.c <Ruby_filenames>: New variable, holds names
+       of Ruby files.
+       <Ruby_suffixes>: Treat .rb, .ru, and .rbw as Ruby extensions.
+       <lang_names>: Add Ruby_filenames to the Ruby entry.
+       * test/etags/ruby-src/test1.ru: Renamed from test1.ruby.
+       (Bug#22241)
 
-       Spelling fix
+2016-02-02  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-09  Eli Zaretskii  <eliz@gnu.org>
+       Port better to platforms lacking aligned_alloc
 
-       Document user-level functions in project.el
+       Problem reported by Ken Brown (Bug#22522).
+       * src/lisp.h (hybrid_aligned_alloc)
+       [HYBRID_MALLOC && !HAVE_ALIGNED_ALLOC]: New decl.
 
-       * lisp/progmodes/project.el (project-find-file)
-       (project-or-external-find-file): Add doc strings.
+2016-02-02  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-09  Eli Zaretskii  <eliz@gnu.org>
+       Port malloc.h hygiene fix to LTO
 
-       Document the user-level features of the Xref package
+       * src/alloc.c (__malloc_initialize_hook):
+       Make it externally visible (Bug#22522).
 
-       * doc/emacs/maintaining.texi (Maintaining): Add a list of
-       described features.
-       (Xref): New section, made out of thoroughly rewritten "Tags"
-       section.
-       (Find Identifiers, Looking Up Identifiers, Xref Commands)
-       (Identifier Search, List Identifiers): New subsections,
-       incorporating the old tags commands and the new xref commands.
-       (Tags Tables, Tag Syntax, Create Tags Table, Etags Regexps):
-       Section and subsections demoted to a lower level.
-       * doc/emacs/search.texi (Search):
-       * doc/emacs/windows.texi (Pop Up Window):
-       * doc/emacs/frames.texi (Creating Frames):
-       * doc/emacs/programs.texi (Imenu, Symbol Completion):
-       * doc/emacs/building.texi (Grep Searching):
-       * doc/emacs/dired.texi (Operating on Files):
-       * doc/emacs/glossary.texi (Glossary): All references to tags changed.
+2016-02-02  Eli Zaretskii  <eliz@gnu.org>
 
-2016-01-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+       More improvements for Ruby support in 'etags'
 
-       * doc/lispref/loading.texi: Add `define-type' entry for load-history
+       * lib-src/etags.c (Ruby_functions): Tag Ruby accessors and
+       alias_method.  Identify constants even if the assignment is not
+       followed by whitespace.  (Bug#22241)
 
-       * doc/lispref/loading.texi (Where Defined): Remove incorrect
-       cl-defmethod description, and add missing define-type entry.
+       * test/etags/ruby-src/test1.ruby: Add tests for constants,
+       accessors, and alias_method.
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to changes in Ruby tests.
 
-2016-01-09  Eli Zaretskii  <eliz@gnu.org>
+2016-02-02  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Improve doc strings and prompts in xref.el
+       Add --git-config option to autogen.sh
 
-       * lisp/progmodes/xref.el (xref-backend-functions)
-       (xref-find-definitions): Doc fixes.
-       (xref-query-replace): Doc fix.  Improve prompts for arguments.
+       * autogen.sh: New options --git-config, --help.
+       (git_config): New shell var.  Alter function to respect this var.
 
-2016-01-09  Alan Mackenzie  <acm@muc.de>
+2016-02-02  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Allow the use of `font-lock-extend-region-multiline' in CC Mode.
+       Fix editing undo changes in eww fields
 
-       * lisp/progmodes/cc-mode.el (c-font-lock-init): Remove
-       `font-lock-extend-regions-wholelines' from
-       `font-lock-extend-region-functions' rather than setting the latter to
-       nil.
+       * eww.el (eww-tag-form): Don't overwrite initial form data in text
+       fields.
+       (eww-process-text-input): Make `M-t' at the end of text fields work
+       better (bug#19085).
 
-2016-01-09  Michael Albinus  <michael.albinus@gmx.de>
+2016-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix coding system for Tramp on OS X.
+       Allow the user more control of popping up the eww window
 
-       * lisp/net/tramp-compat.el: Require ucs-normalize.
+       * eww.el (eww): Use pop-to-buffer-same-window (suggested by
+       Michael Heerdegen) (bug#22244).
 
-       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
-       Set coding system to `utf-8-hfs' for Mac OS X.
+2016-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * test/automated/tramp-tests.el (tramp-test29-vc-registered):
-       Flush directory properties when needed.
-       (tramp--test-utf8): Include Chinese file name, again.
+       Make eww-browse-url with new-window parameter work again
 
-2016-01-09  Eli Zaretskii  <eliz@gnu.org>
+       * eww.el (eww-browse-url): Stay in the same buffer if we're
+       already in a eww mode buffer so that eww-browse-url with a
+       new-window parameter works (bug#22244).
 
-       Update 'load-history' docs
+2016-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * doc/lispref/loading.texi (Where Defined): Update the list of
-       forms in 'load-history' by adding the forms created for the
-       'cl-generic' generics.  (Bug#21422)
+       Clean up eww code slightly
 
-2016-01-09  Paul Eggert  <eggert@cs.ucla.edu>
+       * eww.el (eww-browse-url): Clean up code slightly.
 
-       Fix (error ...) error
+2016-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Problem reported by Glenn Morris in:
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00561.html
-       * lisp/vc/add-log.el (change-log-goto-source): Fix typos
-       introduced in my Aug 28 change, where I got confused by the
-       two meanings of (error ...).
+       Don't insert nil faces in shr
 
-2016-01-08  Alan Mackenzie  <acm@muc.de>
+       * shr.el (shr-insert-table): Don't add nil faces, because that
+       will show up in *Messages* as "Invalid face reference: nil [32
+       times]".
 
-       Correctly analyze brace arguments in templated C++ function declarations.
+2016-02-01  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/progmodes/cc-defs.el (c-go-list-forward, c-go-list-backward): add
-       POS and LIMIT parameters, like the other c-go-list-* functions have.
+       Make find-change-log prefer a VCS root, if no ChangeLog exists.
 
-       * lisp/progmodes/cc-engine.el (c-restore-<>-properties): Check backwards
-       for a ?\( rather than a ?<.  (c-looking-at-inexpr-block): Handle names
-       followed by template specifiers.
+       * lisp/vc/add-log.el (change-log-directory-files): New option.
+       (find-change-log): Respect change-log-directory-files.
+       * doc/emacs/maintaining.texi (Change Log Commands):
+       Mention change-log-directory-files.
 
-2016-01-08  Glenn Morris  <rgm@gnu.org>
+2016-02-01  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/cedet/mode-local.el (describe-function-orig-buffer): Declare.
+       Improve the custom type of some user options.
 
-       * lisp/ffap.el (ffap-latex-mode): Avoid free variable.
+       * lisp/autoinsert.el (auto-insert-alist):
+       * lisp/replace.el (query-replace-from-to-separator):
+       * lisp/gnus/gnus-art.el (gnus-hidden-properties):
+       * lisp/gnus/gnus-gravatar.el (gnus-gravatar-properties):
+       * lisp/gnus/gnus-picon.el (gnus-picon-properties):
+       * lisp/progmodes/prolog.el (prolog-keywords, prolog-types)
+       (prolog-mode-specificators, prolog-determinism-specificators)
+       (prolog-directives, prolog-program-name, prolog-program-switches)
+       (prolog-consult-string, prolog-compile-string, prolog-eof-string)
+       (prolog-prompt-regexp): Improve custom type.
 
-2016-01-08  Mark Oteiza  <mvoteiza@udel.edu>
+2016-02-01  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/play/dunnet.el (dun-fix-screen): Avoid `end-of-buffer`.
+       Mark some risky calendar variables.
 
-2016-01-08  Alan Mackenzie  <acm@muc.de>
+       * lisp/calendar/cal-china.el (chinese-calendar-time-zone):
+       Remove risky setting for deleted obsolete alias.
+       (calendar-chinese-standard-time-zone-name)
+       (calendar-chinese-daylight-saving-start)
+       (calendar-chinese-daylight-saving-end):
+       * lisp/calendar/calendar.el (calendar-iso-date-display-form)
+       (calendar-european-date-display-form)
+       (calendar-american-date-display-form, calendar-date-display-form):
+       * lisp/calendar/diary-lib.el (diary-remind-message)
+       (diary-header-line-format):
+       * lisp/calendar/solar.el (calendar-time-display-form)
+       (calendar-location-name): Mark as risky.
 
-       Respect fontification region calculated by major mode.  Fixes bug #22316.
+2016-02-01  Simen Heggestøyl  <simenheg@gmail.com>
 
-       * lisp/font-lock.el (font-lock-extend-jit-lock-region-after-change): when a
-       fontification region has been calculated by a function on
-       font-lock-extend-after-change-region-function use this region rather than
-       changing the end position to somewhere else.
+       Highlight two additional SCSS keywords
 
-2016-01-08  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/textmodes/css-mode.el (css-bang-ids): New defconst holding CSS
+       identifiers on the form !foo.
+       (scss-bang-ids): New defconst holding SCSS identifiers on the form
+       !foo.
+       (css--font-lock-keywords): Highlight the new SCSS bang identifiers in
+       `font-lock-builtin-face'.
 
-       Improve documentation of Delete Selection mode
+       * test/indent/css-mode.css: Add bang rule test case.
 
-       * lisp/delsel.el (delete-selection-mode)
-       (delete-selection-helper): Update and expand the doc strings.
-       (Bug#22296)
+       * test/indent/scss-mode.css: Add test cases for the introduced bang
+       rules.
 
-       * doc/emacs/mark.texi (Using Region): Document the behavior of
-       delete commands in Delete Selection mode.  (Bug#22296)
+2016-02-01  Karl Fogel  <kfogel@red-bean.com>
 
-       * doc/lispref/markers.texi (The Mark): Document how to add the
-       support for Delete Selection mode to Lisp programs. (Bug#22296)
+       Recommend enabling integrity-checking in git
 
-2016-01-08  Dmitry Gutov  <dgutov@yandex.ru>
+       * admin/notes/git-workflow:  Recommend setting transfer.fsckObjects.
 
-       Fix two project-find-file issues
+       This is related to the autogen.sh changes made by Paul Eggert in
+       commit d766ca8f (2016-02-01) and commit cedd7cad (2016-02-01), and to
+       my edits today to http://www.emacswiki.org/emacs/GitForEmacsDevs and
+       to emacswiki.org/emacs/GitQuickStartForEmacsDevs.  See also the thread
+       "Recommend these .gitconfig settings for git integrity." at
+       https://lists.gnu.org/archive/html/emacs-devel/2016-01/threads.html#01802.
 
-       * lisp/progmodes/project.el (project--value-in-dir):
-       Temporarily set enable-local-variables to :all.
-       (project-find-file, project-or-external-find-file):
-       All autoloads.
-       (project--find-file-in): Require xref.
+2016-02-01  Martin Rudalics  <rudalics@gmx.at>
 
-2016-01-08  Eli Zaretskii  <eliz@gnu.org>
+       Some corrections in Elisp manual
 
-       Clarify doc string of 'dired-current-directory'
+       * doc/lispref/buffers.texi (Read Only Buffers): Describe optional
+       argument POSITION.
+       * doc/lispref/debugging.texi (Error Debugging): `debug-on-signal'
+       is an option.
+       * doc/lispref/display.texi (Refresh Screen): Describe optional
+       argument FRAME of `redraw-frame'.
+       (Attribute Functions): Describe optional argument CHARACTER of
+       `face-font'.
+       (Defining Images): `image-load-path' is an option.
+       (Beeping): `ring-bell-function' is an option.
+       * doc/lispref/frames.texi (Size and Position): The PIXELWISE
+       argument of `set-frame-size' is optional.
+       (Raising and Lowering): The TERMINAL argument of `tty-top-frame'
+       is optional.
+       * doc/lispref/keymaps.texi (Controlling Active Maps): Fix doc of
+       `set-transient-map'.
+       * doc/lispref/minibuf.texi (Text from Minibuffer):
+       `read-regexp-defaults-function' is an option.
+       (Minibuffer Contents): `delete-minibuffer-contents' is a command.
+       * doc/lispref/modes.texi (Mode Line Variables):
+       `mode-line-position' and `mode-line-modes' are variables, not
+       options.
+       * doc/lispref/strings.texi (Creating Strings): The START argument
+       of `substring' is optional.
+       * doc/lispref/text.texi (Buffer Contents): Describe optional
+       argument NO-PROPERTIES of `thing-at-point'.
+       (User-Level Deletion): Both arguments of
+       `delete-trailing-whitespace' are optional.
+       (Margins): Use @key{RET} instead of @kbd{RET}.
+       * doc/lispref/windows.texi (Display Action Functions): Write
+       non-@code{nil} instead of non-nil.
+       (Choosing Window Options): The WINDOW arg of
+       `split-window-sensibly' is optional.
+       (Choosing Window Options): Write non-@code{nil} instead of
+       non-nil.
+       (Window Start and End): Both args of `window-group-end' are
+       optional.
 
-       * lisp/dired.el (dired-current-directory): Doc fix: clarify that
-       the return value might not end in a slash when called with the
-       optional argument non-nil.  (Bug#6273)
+       * src/buffer.c (Fbarf_if_buffer_read_only): Rename argument POS
+       to POSITION to keep consisteny with doc-string.
 
-2016-01-08  Eli Zaretskii  <eliz@gnu.org>
+2016-02-01  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Use the face of preceding text for displaying the ellipsis
+       Double static heap size.
 
-       * src/xdisp.c (setup_for_ellipsis): Use the face of the preceding
-       text in it->saved_face_id for displaying the ellipsis, and ignore
-       the face, if any, of the invisible text.  (Bug#22320)
+       * src/sheap.h (STATIC_HEAP_SIZE): Double it, since it was too
+       small on FreeBSD (Bug#22086).
 
-2016-01-08  Michael Albinus  <michael.albinus@gmx.de>
+2016-02-01  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Suppress Chinese file name test for OSX in tramp-tests.el
+       Chatter when autogen.sh changes Git configuration
 
-       * test/automated/tramp-tests.el (tramp--test-utf8):
-       Remove instrumentation.  Suppress Chinese file name test for OSX.
+       * autogen.sh (git_config): New function.  Use it instead of ‘git config’.
 
-2016-01-08  Glenn Morris  <rgm@gnu.org>
+2016-02-01  Kyle Meyer  <kyle@kyleam.com>
 
-       * admin/admin.el (set-version): Also handle the NEWS file.
+       * org/org-compat.el (org-font-lock-ensure): Fix bogus test (bug#22399)
 
-2016-01-08  Dmitry Gutov  <dgutov@yandex.ru>
+2016-02-01  Michael Albinus  <michael.albinus@gmx.de>
 
-       apropos-library: Skip obvious duplicates; don't error on generics
+       Fix Bug#20821
 
-       * lisp/apropos.el (apropos-library): Skip "was an autoload"
-       entries, to avoid obvious duplicates.  For each cl-defmethod
-       entry, take just its function symbol (bug#21422).
+       * lisp/net/tramp.el (tramp-file-name-handler):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-expand-file-name):
+       Use `tramp-drop-volume-letter'.  (Bug#20821)
 
-2016-01-07  Dmitry Gutov  <dgutov@yandex.ru>
+2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Add project-find-file and project-or-external-find-file
+       Omit unnecessary history from Lisp intro
 
-       * lisp/minibuffer.el (completion-category-defaults):
-       Add `project-file' category.
+       * doc/lispintro/emacs-lisp-intro.texi (Review, Digression into C)
+       (Conclusion): Reword so as not to talk about earlier versions
+       of Emacs in what should be an intro.
 
-       * lisp/progmodes/project.el (project-find-file)
-       (project-or-external-find-file): New commands.
-       (project--find-file-in): New private function.
+2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/progmodes/xref.el (xref-collect-matches): Use
-       `expand-file-name' on DIR, to expand the tildes.
-       (xref--find-ignores-arguments): Extract from
-       `xref--rgrep-command'.
+       * etc/HISTORY: Add some more history, plus git tags.
 
-2016-01-07  Leo Liu  <sdl.web@gmail.com>
+2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Add defvar-local to lisp-imenu-generic-expression
+       Improve elisp “Security Considerations” doc
 
-       * lisp/emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression): Add
-         defvar-local.
+       * doc/lispref/os.texi (Security Considerations):
+       Mention call-process and rename-file as opposed to shell commands.
+       Add some more cross-references.
 
-2016-01-07  Leo Liu  <sdl.web@gmail.com>
+2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Revert commit b1e3d14845517bfa9fa5d6d3840f3ab3160306fd
+       autogen.sh now arranges for git to check hashes
 
-       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode):
-         Don't declare (indent 1).
+       Suggested by Karl Fogel in:
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01802.html
+       * autogen.sh: Do "git config transfer.fsckObjects true".
 
-2016-01-07  Glenn Morris  <rgm@gnu.org>
+2016-01-31  Dave Barker  <kzar@kzar.co.uk>
 
-       * lisp/emacs-lisp/autoload.el (autoload-find-destination): Doc fix.
+       Add ability to give rcirc servers an alias name
 
-2016-01-07  Glenn Morris  <rgm@gnu.org>
+       * lisp/net/rcirc.el (rcirc-server-alist): Add :server-alias
+       customization option.
+       (rcirc, rcirc-connect): Take server alias into account.
 
-       * lisp/emacs-lisp/autoload.el (autoload-find-destination):
+2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Avoid specifying the length of a time object (it has not been "2"
-       for some time).
+       Fix (c & 040) typo in emergency escapes
 
-2016-01-06  Andreas Schwab  <schwab@linux-m68k.org>
+       * src/keyboard.c (handle_interrupt): Fix recently-introduced
+       typo (040 should have been ~040) that silently suppressed
+       auto-saves after emergency escapes.  Redo comparison to avoid
+       similar problems.
 
-       Properly encode/decode base64Binary data in SOAP
+2016-01-31  Paul Eggert  <eggert@cs.ucla.edu>
 
-               * lisp/net/soap-client.el (soap-encode-xs-basic-type): Encode
-               base64Binary value as utf-8.
-               (soap-decode-xs-basic-type): Decode base64Binary value as utf-8.
+       Port new hybrid malloc to FreeBSD
 
-2016-01-06  Eli Zaretskii  <eliz@gnu.org>
+       Problem reported by Wolfgang Jenkner in: http://bugs.gnu.org/22086#118
+       * src/gmalloc.c (__malloc_initialize_hook, __after_morecore_hook)
+       (__morecore) [HYBRID_MALLOC]: Define in this case too.
 
-       Obey coding-system-for-write when writing stdout/stderr in batch
+2016-01-31  Wolfgang Jenkner  <wjenkner@inode.at>
 
-       * src/print.c (printchar_to_stream):
-       * src/xdisp.c (message_to_stderr): If coding-system-for-write has
-       a non-nil value, use it to encode output in preference to
-       locale-coding-system.  See the discussions in
-       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00048.html
-       for the details.
+       * configure.ac: Stop using mmap for buffers for FreeBSD.
 
-       * doc/lispref/os.texi (Terminal Output): Document how to send
-       non-ASCII text via 'send-string-to-terminal'.
-       (Batch Mode): Document how text written to standard streams is
-       encoded.  Fix inaccuracy regarding which output streams are used
-       by output functions in batch mode.
+2016-01-31  Eli Zaretskii  <eliz@gnu.org>
 
-2016-01-06  Xue Fuqiao  <xfq.free@gmail.com>
+       Fix display of overlay strings with 'display' and 'box' property
 
-       * doc/misc/efaq.texi (Packages that do not come with Emacs):
-       Update the URI of MELPA and marmalade-repo.  Reported by CHENG Gao
-       <chenggao@royau.me> in
-       https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00390.html.
+       * src/xdisp.c (get_next_display_element): Take the box face from
+       display stack level that comes from a buffer, not an overlay
+       string.  (Bug#22499)
 
-2016-01-06  Maksim Golubev  <maksim.golubev72@gmail.com>  (tiny change)
+2016-01-31  Andreas Schwab  <schwab@linux-m68k.org>
 
-       * lisp/progmodes/opascal.el (opascal-mode-syntax-table):
+       Fix imap-starttls-open
 
-       Fix backslash.  (Bug#22224)
+       * lisp/net/imap.el (imap-starttls-open): Log imap process
+       output.  Call imap-parse-greeting.  (Bug#22500)
 
-2016-01-06  Federico Beffa  <beffa@ieee.org>  (tiny change)
+2016-01-31  Michael Albinus  <michael.albinus@gmx.de>
 
-       * lisp/progmodes/xscheme.el (xscheme-prompt-for-expression-exit):
+       Merge changes from Tramp repository
 
-       Make it actually work.  (Bug#22265)
+       * doc/misc/Makefile.in (${buildinfodir}/tramp.info tramp.html):
+       No EXTRA_OPTS needed.
 
-2016-01-05  Alan Mackenzie  <acm@muc.de>
+       * doc/misc/tramp.texi: Merge changes from Emacsemacs-25
+       branch, especially for @trampfn{}.
+       (Top): Move @ifnottex down.
+       (History): XEmacs support has been removed.
+       (GVFS based methods, Remote processes): Do not use emacsgvfs flag.
+       (Auto-save and Backup): Use both syntax versions.
+       (File name Syntax): Remark on IPv6 adresses is valid for
+       unified syntax only.
 
-       Remove function wrongly on AWK Mode value of context fontification hook.
+       * doc/misc/trampver.texi: Do not set emacsgvfs flag.
 
-       * lisp/progmodes/cc-langs.el (c-before-context-fontification-functions):
-       swap order of entries so that awk's entry isn't superseded by the default.
+2016-01-31  Andreas Schwab  <schwab@linux-m68k.org>
 
-       * lisp/progmodes/cc-mode.el (c-before-context-fl-expand-region): Correct
-       to handle nil value of c-before-context-fontification-functions.
+       Fix return value of imap-starttls-open
 
-2016-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/net/imap.el (imap-starttls-open): Fix return value.
 
-       * src/buffer.c: Stick with ASCII in doc string.
+2016-01-31  John Wiegley  <johnw@newartisans.com>
 
-2016-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+       Correct reference to DARWIN_OS preprocessor symbol
 
-       Reword transient-mark-mode doc string
+       * src/alloc.c: Correct a preprocessor reference to DARWIN_OS, which may
+         not be defined.
 
-       * src/buffer.c (syms_of_buffer): Reword doc string to avoid confusion.
-       The value 'lambda (literally) can be interpreted as (quote lambda),
-       which is not intended here; we want just the lambda symbol.
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-05  Eli Zaretskii  <eliz@gnu.org>
+       Spelling fixes
 
-       Update doc string of 'selective-display'
+       Spelling fix
 
-       * src/buffer.c (syms_of_buffer) <selective-display>: Say that
-       using it with the value of 't' is obsolete.  (Bug#1092)
+       Spelling fixes
 
-2016-01-05  Alan Mackenzie  <acm@muc.de>
+2016-01-30  Glenn Morris  <rgm@gnu.org>
 
-       Make C++ buffers writeable when writing their initial text properties.
+       * lisp/vc/add-log.el (find-change-log): Use locate-dominating-file.
 
-       This is a correction to yesterday's CC Mode patch.
+2016-01-30  Matthew Carter  <m@ahungry.com>
 
-       * lisp/progmodes/cc-engine.el (c-before-change-check-<>-operators): Put
-       c-save-buffer-state around the function rather than a mere `let'.
+       Quote table names for postgres listings (sql-mode)
 
-2016-01-05  Michael Albinus  <michael.albinus@gmx.de>
+       * lisp/progmodes/sql.el (sql-postgres-completion-object): Avoid passing
+         unquoted table names to the completion list.
 
-       Additional changes for "make check-expensive"
+2016-01-30  Glenn Morris  <rgm@gnu.org>
 
-       * CONTRIBUTE : Encourage use of ":tags '(:expensive-test)".
-       Explain make target `check-expensive'.
+       Change Smerge "Mine" and "Other" for "Upper" and "Lower.  (Bug#20878)
+
+       * lisp/vc/smerge-mode.el (smerge-diff-switches)
+       (smerge-context-menu, smerge-match-conflict, smerge-swap): Doc fixes.
+       (smerge-upper, smerge-upper-face, smerge-keep-upper)
+       (smerge-diff-base-upper): Rename from smerge-mine, smerge-mine-face,
+       smerge-keep-mine, smerge-diff-base-mine.  Update all uses.
+       (smerge-mine-face, smerge-other-face): Remove obsolete face aliases.
+       (smerge-lower, smerge-lower-face, smerge-lower-re, smerge-keep-lower)
+       (smerge-diff-base-lower): Rename from smerge-other, smerge-other-face,
+       smerge-other-re, smerge-keep-other, smerge-diff-base-lower.
+       Update all uses.
+       (smerge-basic-map): Add "l" and "u" bindings.
+       (smerge-mode-menu): Update menu bindings for renaming.
+       (smerge-font-lock-keywords): Update face names.
+       (smerge-match-names): Update names.
+       (smerge-diff-upper-lower): Rename from smerge-diff-mine-other.
+       (smerge-match-conflict, smerge-ediff): Rename local variables.
+       (smerge-makeup-conflict): Relabel markers.
+       (smerge-parsep-re): Use renamed variables.
 
-       * etc/NEWS: Mention new make target `check-expensive'.
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * test/automated/Makefile.in (check-doit): New target.
-       (check, check-expensive): Use it.
+       Port recent my_edata change to MS-Windows
 
-2016-01-04  Alan Mackenzie  <acm@muc.de>
+       * src/lastfile.c (my_edata): Also define if WINDOWSNT.
 
-       Apply text properties for <, > in new after-change function (C++ Java Modes).
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       These are category/syntax-table properties to give < and > paren syntax.
-       Also apply certain `c-type' text properties to the insides of <..> constructs
-       to ensure that identifiers contained by them get fontified.  This patch fixes
-       bug #681.
+       Pacify GCC on C library without glibc API
 
-       * lisp/progmodes/cc-cmds.el (c-electric-lt-gt): Reformulate due to new
-       after-change action.
+       Without this change, with --enable-gcc-warnings GCC would complain
+       “error: redundant redeclaration of ‘aligned_alloc’”.
+       * configure.ac: Simplify aligned_alloc testing.
+       * src/alloc.c (aligned_alloc): Don’t use if DARWIN_OS,
+       since the simplified configure.ac no longer checks for that.
+       Don’t declare if HAVE_ALIGNED_ALLOC.
+       Correct misspelling of HAVE_ALIGNED_ALLOC in ifdef.
 
-       * lisp/progmodes/cc-engine.el (c-before-change-check-<>-operators): Expand
-       change region to include <s and >s which might not be already marked as
-       parens, rather than just when paren text properties are removed.
-       (c-restore-<>-properties): New after-change function, which applies text
-       properties marking < and > with paren syntax.
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/progmodes/cc-fonts.el (c-font-lock-declarations): Ensure `c-type'
-       properties are applied to the interiors of <...> constructs, to ensure
-       fontification of identifiers there.
+       Tell Automake the new lib/Makefile.am is OK
 
-       * lisp/progmodes/cc-langs.el (c-before-font-lock-functions): Add
-       c-restore-<>-properties to this list for C++ and Java.
+       * lib/Makefile.am (AUTOMAKE_OPTIONS): Add -Wno-portability.
 
-       * lisp/progmodes/cc-mode.el (c-common-init): When invoking
-       c-before-font-lock-functions, exclude c-restore-<>-properties from the
-       functions invoked.
-       (c-before-change): Initialize c-new-BEG/END here (rather than c-after-change)
-       to allow modification by before-change functions.
-       (c-after-change): Amend c-new-END here, rather than initializing it and
-       c-new-BEG.
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-04  Michael Albinus  <michael.albinus@gmx.de>
+       Make it easy to override preferred-branch test
 
-       Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+       * Makefile.in (preferred-branch-is-current):
+       Rename from emacs-25-branch-is-current.  All uses changed.
+       (PREFERRED_BRANCH): New macro.
 
-2016-01-04  Michael Albinus  <michael.albinus@gmx.de>
+2016-01-30  Glenn Morris  <rgm@gnu.org>
 
-       Introduce check-expensive tests.
+       * lisp/net/browse-url.el (browse-url-default-browser):
+       Lower priority of non-free Chrome.
 
-       * Makefile.in (check-expensive):
-       * test/automated/Makefile.in (check-expensive): New target.
+2016-01-30  Glenn Morris  <rgm@gnu.org>
 
-       * test/automated/auto-revert-tests.el
-       (auto-revert-test01-auto-revert-several-files):
-       * test/automated/file-notify-tests.el (file-notify--deftest-remote):
-       * test/automated/tramp-tests.el (tramp-test26-process-file)
-       (tramp-test27-start-file-process, tramp-test28-shell-command)
-       (tramp-test29-vc-registered)
-       (tramp-test31-special-characters-with-stat)
-       (tramp-test31-special-characters-with-perl)
-       (tramp-test31-special-characters-with-ls)
-       (tramp-test32-utf8-with-stat, tramp-test32-utf8-with-perl)
-       (tramp-test32-utf8-with-ls, tramp-test33-asynchronous-requests)
-       (tramp-test35-unload): Tag the tests as :expensive-test.
+       Improve the custom type of some user options.
 
-2016-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * lisp/desktop.el (desktop-minor-mode-table):
+       * lisp/man.el (Man-frame-parameters):
+       * lisp/midnight.el (midnight-delay):
+       * lisp/speedbar.el (speedbar-select-frame-method):
+       * lisp/tooltip.el (tooltip-frame-parameters):
+       * lisp/tree-widget.el (tree-widget-space-width):
+       * lisp/type-break.el (type-break-keystroke-threshold):
+       * lisp/woman.el (woman-imenu-generic-expression):
+       * lisp/cedet/ede.el (ede-debug-program-function):
+       * lisp/cedet/ede/project-am.el (project-am-debug-target-function):
+       * lisp/emulation/viper-keym.el (viper-toggle-key):
+       * lisp/erc/erc-networks.el (erc-server-alist):
+       * lisp/gnus/message.el (message-deletable-headers, message-signature):
+       * lisp/mail/mailalias.el (mail-directory-stream):
+       * lisp/play/tetris.el (tetris-x-colors):
+       * lisp/progmodes/gud.el (gud-tooltip-modes): Improve custom type.
 
-       shr-tag-video bug fix
+2016-01-30  Simen Heggestøyl  <simenheg@gmail.com>
 
-       * shr.el (shr-tag-video): Protect against the `poster' being
-       empty.
+       Highlight CSS variables with variable name face
 
-2016-01-04  Michael Albinus  <michael.albinus@gmx.de>
+       * lisp/textmodes/css-mode.el (css-nmstart-re): Don't match variables.
+       (css--font-lock-keywords): Highlight variables in
+       `font-lock-variable-name-face'.
 
-       Minor fixes in tramp-tests.el
+2016-01-30  Glenn Morris  <rgm@gnu.org>
 
-       * test/automated/tramp-tests.el (tramp-test26-process-file):
-       Move point properly.
-       (tramp-test29-vc-registered): Work with relative file names.
+       * lisp/gnus/gnus-kill.el (gnus-winconf-kill-file): Not user-serviceable.
 
-2016-01-04  Eli Zaretskii  <eliz@gnu.org>
+2016-01-30  Glenn Morris  <rgm@gnu.org>
 
-       Ensure redisplay when 'truncate-lines' is set
+       Mark some user options that can get evalled as risky.
 
-       * lisp/frame.el (redisplay--variables): Add 'truncate-lines'.
-       (Bug#22303)
+       * lisp/allout.el (allout-title):
+       * lisp/emacs-lisp/edebug.el (edebug-global-break-condition):
+       * lisp/gnus/message.el (message-mailer-swallows-blank-line):
+       * lisp/progmodes/gud.el (gud-tooltip-display):
+       * lisp/vc/ediff-mult.el (ediff-default-filtering-regexp):
+       Mark as risky.
 
-2016-01-04  Eli Zaretskii  <eliz@gnu.org>
+2016-01-30  Eli Zaretskii  <eliz@gnu.org>
 
-       Fix a doc string of 'transient-mark-mode'
+       Disable DebPrint in sys_read on MS-Windows
 
-       * src/buffer.c (syms_of_buffer) <transient-mark-mode>: Prevent
-       "lambda" in doc string from becoming a link to lambda expressions.
+       * src/w32.c (sys_read): Disable a debugging print that is normal
+       when non-blocking reads are retried.
 
-2016-01-04  Eli Zaretskii  <eliz@gnu.org>
+2016-01-30  Martin Rudalics  <rudalics@gmx.at>
 
-       MS-Windows followup to latest gnulib update
+       ;Fix ChangeLog entry
 
-       * nt/gnulib.mk (EXTRA_DIST): Add ignore-value.h.
+2016-01-30  Eli Zaretskii  <eliz@gnu.org>
 
-2016-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+       Fix typos in Introduction to Emacs Lisp manual
 
-       Spelling fix
+       * doc/lispintro/emacs-lisp-intro.texi (Emacs Initialization)
+       (kill-new function, Digression into C)
+       (Complete forward-sentence, Divide and Conquer, Find a File)
+       (lengths-list-many-files, Columns of a graph, defcustom)
+       (recursive-count-words): Fix typos.  Reported by Daniel Bastos
+       <dbastos@toledo.com>.
 
-2016-01-04  Jens Lechtenboerger  <jens.lechtenboerger@fsfe.org>
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Do secure signed Bcc handling
+       Shrink static heap a bit
 
-       * lisp/gnus/message.el (message-send): Do secure signed Bcc handling
-       (bug#18718).
+       * src/sheap.h: Include lisp.h, for Lisp_Object.
+       (STATIC_HEAP_SIZE): Now an enum constant, not a macro.
+       Make it 2 MiB * sizeof (Lisp_Object), which is a bit more
+       conservative than the old value.
+       (Bug#22086)
 
-2016-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Avoid stdio in SIGINT handler
+       Fix extern symbols defined and not used
 
-       * admin/merge-gnulib (GNULIB_MODULES): Add ignore-value.
-       * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
-       * lib/ignore-value.h: New file, from gnulib.
-       * src/keyboard.c: Include it.
-       (write_stdout, read_stdin): New functions.
-       (handle_interrupt): Use them instead of printf and getchar,
-       and avoid fflush when handling signals.
+       * src/alloc.c: Always include <signal.h>.
+       (malloc_warning) [!SIGDANGER && (SYSTEM_MALLOC || HYBRID_MALLOC)]:
+       Do not define; unused.
+       * src/emacs.c, src/lisp.h (might_dump) [!DOUG_LEA_MALLOC]: Now static.
+       * src/gmalloc.c (gdefault_morecore): Rename from __default_morecore,
+       to avoid collision with glibc.  Now static.  All uses changed.
+       * src/lastfile.c (my_edata): Define only if
+       ((!defined SYSTEM_MALLOC && !defined HYBRID_MALLOC && !defined
+       WINDOWSNT) \ || defined CYGWIN || defined DARWIN_OS).
+       (Bug#22086)
 
-2016-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * doc/misc/texinfo.tex: Revert unwanted copyright change.
+       Build lib/e-*.o only on platforms that need it
+
+       * configure.ac (hybrid malloc): Simplify configuration.
+       (SHEAP_OBJ): Remove; no longer needed.
+       (HYBRID_MALLOC): New var. Subst it.
+       (HYBRID_MALLOC_LIB): New Automake conditional.
+       * lib/Makefile.am (noinst_LIBRARIES): Add libegnu.a only if
+       HYBRID_MALLOC_LIB.
+       (libegnu_a_CPPFLAGS): Omit AM_CPPFLAGS; not needed.
+       (MOSTLYCLEANFILES): Add libegnu.a.
+       * src/Makefile.in (SHEAP_OBJ): Remove.
+       (HYBRID_MALLOC): New macro.
+       (base_obj): Use it to conditionally add sheap.o.
+       (LIBEGNU_ARCHIVE): New macro.
+       ($(LIBEGNU_ARCHIVE)): New rule, replacing $(lib)/libegnu.a.
+       All uses of the latter replaced by the former.
+       * src/alloc.c (USE_ALIGNED_ALLOC): Simplify configuration.
+       Correct misspelling ALIGNED_ALLOC to HAVE_ALIGNED_ALLOC.
+       * src/gmalloc.c: Update comment.
+       * src/lisp.h (aligned_alloc)
+       [!DOUG_LEA_MALLOC && !HYBRID_MALLOC && !SYSTEM_MALLOC]:
+       New decl.
+       (Bug#22086)
 
-2016-01-03  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/align.el (align): Simplify a lambda
+       Include <malloc.h> when advisable
+
+       This should help insulate us better from future glibc changes.
+       It is good hygiene to include .h files for APIs that Emacs uses.
+       Fix type clashes between Emacs and GNU <malloc.h> (Bug#22086).
+       * configure.ac: Check for malloc.h.
+       * src/alloc.c: Include <malloc.h> depending on HAVE_MALLOC_H,
+       not on DOUG_LEA_MALLOC.
+       * src/emacs.c, src/gmalloc.c (malloc_enable_thread):
+       Remove decl (now in lisp.h).
+       * src/gmalloc.c: Include stddef.h earlier, for ptrdiff_t.
+       [emacs]: Include lisp.h.
+       [HAVE_MALLOC_H]: Include <malloc.h>.
+       (__MALLOC_HOOK_VOLATILE): New macro, if not already defined.
+       (__after_morecore_hook, __malloc_initialize_hook, __morecore)
+       (__default_morecore):
+       [!HAVE_MALLOC_H]: New decls near non-inclusion of <malloc.h>.
+       (calloc): Make it clear that the macro should not be used.
+       Remove unused decl.
+       (malloc_info): New macro, to avoid clash with glibc <malloc.h>.
+       (__morecore, __default_morecore, __after_morecore_hook)
+       (__malloc_extra_blocks, __malloc_initialize_hook, __free_hook)
+       (__malloc_hook, __realloc_hook, __memalign_hook, memory_warnings):
+       Remove later decls.
+       (gmalloc_hook, gfree_hook, grealloc_hook):
+       Rename from __malloc_hook, __free_hook, __realloc_hook to
+       avoid type collision with glibc <malloc.h>.  All uses changed.
+       (gmalloc_hook):
+       (__malloc_extra_blocks) [DOUG_LEA_MALLOC||HYBRID_MALLOC||SYSTEM_MALLOC]:
+       Now static.
+       (gmalloc_hook, __malloc_extra_blocks): Define even if [!HYBRID_MALLOC].
+       (__malloc_initialize_hook, __after_morecore_hook):
+       Declare with types compatible with glibc.
+       (__memalign_hook, hybrid_calloc) [HYBRID_MALLOC]:
+       Remove.  All uses removed.
+       * src/lisp.h (__malloc_extra_blocks, malloc_enable_thread): New decls.
+       * src/ralloc.c, src/vm-limit.c:
+       Simplify includes and include <malloc.h> if available.
 
-       * lisp/align.el (align): Fix arg order in call to `align-region'
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-03  Eli Zaretskii  <eliz@gnu.org>
+       * src/alloc.c: Include "sheap.h".
 
-       Fix compilation next-error in buffers with selective-display
+       (alloc_unexec_pre, alloc_unexec_post) [HYBRID_MALLOC]:
+       Set and clear bss_sbrk_did_unexec, on all platforms not just Cygwin.
+       * src/lisp.h (alloc_unexec_pre, alloc_unexec_post) [!DOUG_LEA_MALLOC]:
+       Declare unconditionally.
+       * src/unexcw.c, src/unexelf.c (bss_sbrk_did_unexec): Remove decl.
+       (unexec): Don’t set or clear bss_sbrk_did_unexec;
+       the caller now does this.
+       (Bug#22086)
 
-       * lisp/progmodes/compile.el (compilation-beginning-of-line): New
-       function.
-       (compilation-internal-error-properties)
-       (compilation-next-error-function, compilation-set-window): Use
-       it.  (Bug#1092)
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-2016-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       Pacify --enable-gcc-warnings when HYBRID_MALLOC
 
-       * lisp/net/nsm.el (nsm-check-protocol): Fix typo in the message.
+       * src/buffer.c (init_buffer):
+       * src/emacs.c (main):
+       * src/xsmfns.c (smc_save_yourself_CB, x_session_initialize):
+       Use emacs_get_current_dir_name, not get_current_dir_name.
+       * src/conf_post.h (aligned_alloc) [HYBRID_MALLOC && emacs]: New macro.
+       (HYBRID_GET_CURRENT_DIR_NAME, get_current_dir_name): Remove.
+       * src/emacs.c: Include "sheap.h".
+       (report_sheap_usage): Remove decl.
+       (Fdump_emacs) [HYBRID_MALLOC]: Report usage directly.
+       Don't assume ptrdiff_t can be printed as int.
+       * src/gmalloc.c [HYBRID_MALLOC]:
+       Include "sheap.h" rather than declaring its contents by hand.
+       (get_current_dir_name, gget_current_dir_name)
+       (hybrid_get_current_dir_name): Remove.
+       (emacs_abort): Remove duplicate decl.
+       (aligned_alloc): Undef, like malloc etc.
+       (ALLOCATED_BEFORE_DUMPING): Now a static function, not a macro.
+       Make it a bit more efficient.
+       (malloc_find_object_address): Remove unused decl.
+       (enum mcheck_status, mcheck, mprobe, mtrace, muntrace, struct mstats)
+       (mstats, memory_warnings): Declare only if GC_MCHECK.
+       * src/lisp.h (emacs_get_current_dir_name):
+       New decl, replacing get_current_dir_name.
+       * src/sheap.c: Include sheap.h first.
+       (STATIC_HEAP_SIZE): Remove; now in sheap.h.
+       (debug_sheap): Now static.
+       (bss_sbrk_buffer_end): Remove; no longer used.
+       (bss_sbrk_ptr): Now static and private.
+       (bss_sbrk_did_unexec): Now bool.
+       (BLOCKSIZE): Remove, to avoid GCC warning about its not being used.
+       (bss_sbrk): Don't treat request_size 0 as special, since the code
+       works without this being a special case.
+       Avoid overflow if request size exceeds INT_MAX.
+       (report_sheap_usage): Remove; now done in emacs.c.
+       * src/sheap.h: New file.
+       * src/sysdep.c (get_current_dir_name): Remove macro.
+       Include "sheap.h".
+       (emacs_get_current_dir_name): Rename function from
+       get_current_dir_name.  Handle HYBRID_MALLOC here;
+       this is simpler.
+       (Bug#22086)
 
-2016-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Add SHA1 warnings for high network security settings
+       Report static heap usage on non-Cygwin, too
 
-       * lisp/net/nsm.el (nsm-check-protocol): When using high security, warn
-       about SHA1 certificates, which are now believed to be open to
-       spoofing.
+       * src/emacs.c (Fdump_emacs) [HYBRID_MALLOC]: Report sheap usage here ...
+       * src/unexcw.c (unexec): ... instead of here, since sheap can be used
+       on platforms other than Cygwin (Bug#22086).
 
-2016-01-03  Jens Lechtenboerger  <jens.lechtenboerger@fsfe.org>
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Refactor mml-smime.el, mml1991.el, mml2015.el
+       Pacify GCC on extern decls
 
-       (Maybe this is the last merge from Gnus git to Emacs git)
+       * src/unexelf.c (bss_sbrk_did_unexec): Move decl to top level
+       to pacify recent GCC (Bug#22086).
 
-       Cf. discussion on ding mailing list, messages in
-       <http://thread.gmane.org/gmane.emacs.gnus.general/86228>.
-       Common code from the three files mml-smime.el, mml1991.el, and
-       mml2015.el is moved to mml-sec.el.  Auxiliary functions are added
-       to gnus-util.el.
+2016-01-30  Wolfgang Jenkner  <wjenkner@inode.at>
 
-       The code is supported by test cases with necessary test keys.
+       Add musl patch to support HYBRID_MALLOC on elf systems
 
-       Documentation in message.texi is updated.
+       * src/gmalloc.c: Adjust for HYBRID_MALLOC in the non CYGWIN case.
+       (__default_morecore): Here, in particular.
+       * configure.ac: Define HYBRID_MALLOC when unexelf.o is used.
+       New variable SHEAP_OBJ.
+       * src/Makefile.in: Use it.
+       (Bug#22086)
 
-       * doc/misc/message.texi (Security, Using S/MIME):
-       Update for refactoring mml-smime.el, mml1991.el, mml2015.el.
-       (Using OpenPGP): Rename from "Using PGP/MIME"; update contents.
-       (Passphrase caching, Encrypt-to-self, Bcc Warning): New sections.
+2016-01-30  Rich Felker  <dalias@libc.org>  (tiny change)
 
-       * lisp/gnus/gnus-util.el (gnus-test-list, gnus-subsetp, gnus-setdiff):
-       New functions.
+       unexelf.c hook to support HYBRID_MALLOC on ELF
 
-       * lisp/gnus/mml-sec.el: Require gnus-util and epg.
-       (epa--select-keys): Autoload.
-       (mml-signencrypt-style-alist, mml-secure-cache-passphrase): Doc fix.
-       (mml-secure-openpgp-signers): New user option;
-       make mml1991-signers and mml2015-signers obsolete aliases to it.
-       (mml-secure-smime-signers): New user option;
-       make mml-smime-signers an obsolete alias to it.
-       (mml-secure-openpgp-encrypt-to-self): New user option;
-       make mml1991-encrypt-to-self and mml2015-encrypt-to-self obsolete
-       aliases to it.
-       (mml-secure-smime-encrypt-to-self): New user option;
-       make mml-smime-encrypt-to-self an obsolete alias to it.
-       (mml-secure-openpgp-sign-with-sender): New user option;
-       make mml2015-sign-with-sender an obsolete alias to it.
-       (mml-secure-smime-sign-with-sender): New user option;
-       make mml-smime-sign-with-sender an obsolete alias to it.
-       (mml-secure-openpgp-always-trust): New user option;
-       make mml2015-always-trust an obsolete alias to it.
-       (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
-       New user options.
-       (mml-secure-cust-usage-lookup, mml-secure-cust-fpr-lookup)
-       (mml-secure-cust-record-keys, mml-secure-cust-remove-keys)
-       (mml-secure-add-secret-key-id, mml-secure-clear-secret-key-id-list)
-       (mml-secure-cache-passphrase-p, mml-secure-cache-expiry-interval)
-       (mml-secure-passphrase-callback, mml-secure-check-user-id)
-       (mml-secure-secret-key-exists-p, mml-secure-check-sub-key)
-       (mml-secure-find-usable-keys, mml-secure-select-preferred-keys)
-       (mml-secure-fingerprint, mml-secure-filter-keys)
-       (mml-secure-normalize-cust-name, mml-secure-select-keys)
-       (mml-secure-select-keys-1, mml-secure-signer-names, mml-secure-signers)
-       (mml-secure-self-recipients, mml-secure-recipients)
-       (mml-secure-epg-encrypt, mml-secure-epg-sign): New functions.
+       * src/unexelf.c (unexec) [HYBRID_MALLOC]:
+       Define bss_sbrk_did_unexec (Bug#22086).
 
-       * lisp/gnus/mml-smime.el: Require epg;
-       refactor declaration and autoloading of epg functions.
-       (mml-smime-use): Doc fix.
-       (mml-smime-cache-passphrase, mml-smime-passphrase-cache-expiry):
-       Obsolete.
-       (mml-smime-get-dns-cert, mml-smime-get-ldap-cert):
-       Use format instead of gnus-format-message.
-       (mml-smime-epg-secret-key-id-list): Remove variable.
-       (mml-smime-epg-passphrase-callback, mml-smime-epg-find-usable-key)
-       (mml-smime-epg-find-usable-secret-key): Remove functions.
-       (mml-smime-epg-sign, mml-smime-epg-encrypt): Refactor.
+2016-01-30  Wolfgang Jenkner  <wjenkner@inode.at>
 
-       * lisp/gnus/mml1991.el (mml1991-cache-passphrase)
-       (mml1991-passphrase-cache-expiry): Obsolete.
-       (mml1991-epg-secret-key-id-list): Remove variable.
-       (mml1991-epg-passphrase-callback, mml1991-epg-find-usable-key)
-       (mml1991-epg-find-usable-secret-key): Remove functions.
-       (mml1991-epg-sign, mml1991-epg-encrypt): Refactor.
+       Link temacs with gnulib compiled with -Demacs
 
-       * lisp/gnus/mml2015.el (mml2015-cache-passphrase)
-       (mml2015-passphrase-cache-expiry): Obsolete.
-       (mml2015-epg-secret-key-id-list): Remove variable.
-       (mml2015-epg-passphrase-callback, mml2015-epg-check-user-id)
-       (mml2015-epg-check-sub-key, mml2015-epg-find-usable-key)
-       (mml2015-epg-find-usable-secret-key): Remove functions.
-       (mml2015-epg-decrypt, mml2015-epg-clear-decrypt, mml2015-epg-sign)
-       (mml2015-epg-encrypt): Refactor.
+       This is done to support HYBRID_MALLOC, since some static variables
+       (e.g., last_environ in putenv.c) hold pointers to memory malloced
+       before dumping (Bug#22086).
+       * lib/Makefile.am: Add incantation to install libegnu.a.
+       * src/Makefile.in ($(lib)/libgnu.a): Replace with libegnu.a
+       (temacs$(EXEEXT)): Use it.
 
-2016-01-02  Glenn Morris  <rgm@gnu.org>
+2016-01-30  Wolfgang Jenkner  <wjenkner@inode.at>
 
-       * lisp/progmodes/fortran.el (fortran-make-syntax-propertize-function):
+       Internal linkage for gmalloc etc. if HYBRID_MALLOC
 
-       Explicitly ignore case.  (Bug#22262)
+       This avoids clashes with symbols if the after-dump malloc is
+       derived from Doug Lea's implementation (Bug#22086).
 
-2016-01-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * src/gmalloc.c (emacs_abort, __morecore, __default_morecore):
+       Move declarations up.  For HYBRID_MALLOC, turn all `extern'
+       declarations below to `static' ones.
+       (aligned_alloc): Declare for !MSDOS as well.
+       (heapsize, _fraghead): Move resp. copy declaration downwards.
+       For HYBRID_MALLOC, conditionalize out the other definitions,
+       since the previous `static' declarations double as tentative
+       definitions, anyway.
+       (_malloc, _free, _realloc, __free_hook, _aligned_blocks)
+       (__realloc_hook, __memalign_hook): Conditionalize out.
+       (cfree, memalign, valloc): Ditto.
 
-       (semantic-symref-derive-find-filepatterns): Return a list
+2016-01-30  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/cedet/semantic/symref/grep.el
-       (semantic-symref-derive-find-filepatterns): Return a list.
-       (semantic-symref-perform-search): Quote the result here once and for all.
+       Merge from origin/emacs-25
 
-2016-01-02  Eli Zaretskii  <eliz@gnu.org>
+       3f481ad Rename xref-query-replace to xref-query-replace-in-results
+       62f4ed4 Update cl-defgeneric and cl-defmethod docstrings
+       2111e0e Comment out next-error-function integration in xref
+       4e11ad3 Correct a use of "which" in intro.texi
+       a1865bc Distinguish the two meanings of Java's keyword "default".  Fixes bug #22358.
+       76045f7 Don't operate on menu bar of nonexistent frame
+       c32f3bc Unbreak the GNUstep build.
 
-       Fix xref-find-references on MS-Windows
+2016-01-30  Andreas Schwab  <schwab@linux-m68k.org>
 
-       * lisp/cedet/semantic/symref/grep.el
-       (semantic-symref-derive-find-filepatterns): Use
-       'shell-quote-argument' instead of manually quoting in a way that
-       only works with Posix shells.  (Bug#22289)
+       Re-enable checks in member, memql, delete to complain about non-lists
 
-2016-01-02  Eli Zaretskii  <eliz@gnu.org>
+       * src/fns.c (Fmember, Fmemql, Fdelete): Revert 2007-10-16 change.
 
-       Document new features of tildify-mode
+2016-02-04  Martin Rudalics  <rudalics@gmx.at>
 
-       * lisp/textmodes/tildify.el (tildify-foreach-ignore-environments)
-       (tildify-mode): Spelling fixes in doc strings.
+       Minor doc(-string) tweaks
 
-       * etc/NEWS: Reformat the tildify-mode entry.
+       * lisp/window.el (window-in-direction): Fix doc-string typo.
+       * doc/lispref/frames.texi (Frame Font): Mention canonical
+       character width/height.
+       * doc/lispref/windows.texi (Windows and Frames): Clarify
+       handling of minibuffer window for `window-in-direction'.
+       (Window Sizes): Minor tweaks in descriptions of
+       `window-max-chars-per-line', `window-min-width' and
+       `window-min-size'.
+       (Deleting Windows): Minor tweak in `delete-window' description.
+       (Selecting Windows): Clarify window use time description.
+       (Cyclic Window Ordering): Minor tweak.
+       (Switching Buffers): Clarify description of
+       `switch-to-buffer-in-dedicated-window'.
 
-2016-01-02  Eli Zaretskii  <eliz@gnu.org>
+2016-02-04  Eli Zaretskii  <eliz@gnu.org>
 
-       Document new features of Whitespace mode
+       Remove some useless-use-of eval.
 
-       * doc/emacs/display.texi (Useless Whitespace): Document
-       'whitespace-toggle-options' and the new 'big-indent' style.
-       Document 'whitespace-big-indent-regexp'.  Document the Global
-       Whitespace mode.
+       * lisp/gnus/gnus.el (gnus-load-hook): Don't use eval.
+       * lisp/gnus/nnrss.el (xml): Simply require it.
+       (xml-rpc-method-call): Use declare-function.
 
-2016-01-02  Eli Zaretskii  <eliz@gnu.org>
+2016-01-28  Glenn Morris  <rgm@gnu.org>
 
-       Improve documentation of new Hide-IfDef features
+       Don't use eval to quieten prolog.el compilation.
 
-       * etc/NEWS: Expand and reword Hide-IfDef section.
+       * lisp/progmodes/prolog.el (pltrace-on, pltrace-off): Declare.
+       (prolog-enable-sicstus-sd, prolog-disable-sicstus-sd): Don't use eval.
 
-2016-01-02  Leo Liu  <sdl.web@gmail.com>
+2016-01-28  Glenn Morris  <rgm@gnu.org>
 
-       Fix regression in font-locking cl-assert and cl-check-type
+       Mark some risky prolog variables.
 
-       * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Fix
-         el-errs-re.
+       * lisp/progmodes/prolog.el (prolog-system-version)
+       (prolog-keywords, prolog-types, prolog-mode-specificators)
+       (prolog-determinism-specificators, prolog-directives)
+       (prolog-program-name, prolog-program-switches)
+       (prolog-consult-string, prolog-compile-string)
+       (prolog-eof-string, prolog-prompt-regexp, prolog-help-function):
+       Mark anything processed by prolog-find-value-by-system as risky.
 
-2016-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+2016-01-28  Glenn Morris  <rgm@gnu.org>
 
-       Spelling and grammar fixes
+       * lisp/custom.el (defcustom): Doc fix.
 
-2016-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+       * doc/lispref/customize.texi (Variable Definitions):
+       Defcustom should always have a type.
 
-       Fix copyright years by hand
+2016-01-28  Glenn Morris  <rgm@gnu.org>
 
-       These are dates that admin/update-copyright did not update, or
-       updated incorrectly.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-nogroup-warn):
+       Warn if defcustom has no type.  (Bug#16276)
 
-2016-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/cedet/semantic/db-file.el (semanticdb-persistent-path):
+       Fix :type.
 
-       Update copyright year to 2016
+       * lisp/emacs-lisp/package.el (package-load-list): Improve :type.
 
-       Run admin/update-copyright.
+2016-01-28  Michael Albinus  <michael.albinus@gmx.de>
 
-2016-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+       Fix Bug#22452
 
-       Merge from gnulib
+       * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
+       * lisp/net/tramp-sh.el (tramp-maybe-open-connection):
+       * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection):
+       Mark it as connected.
 
-       This mostly just updates copyright dates of gnulib files.
-       It also updates to the latest version of texinfo.tex.
+       * lisp/net/tramp.el (tramp-handle-file-remote-p): Check also, if
+       connection property "connected" is set.  (Bug#22452)
 
-2015-12-31  Mark Oteiza  <mvoteiza@udel.edu>
+2016-01-27  Glenn Morris  <rgm@gnu.org>
 
-       lisp/emacs-lisp/chart.el (chart-new-buffer): Move to silence byte compiler.
+       * test/lisp/vc/vc-hg.el: Move from test/automated/.
 
-2015-12-31  Mark Oteiza  <mvoteiza@udel.edu>
+       * lisp/xwidget.el (xwidget-query-on-exit-flag): Declare.
 
-       Port chart.el methods to cl-generic.
+       * lisp/xwidget.el (xwidget-webkit-browse-url): Give explicit error
+       if not compiled with xwidgets.
 
-       cl-call-next-method cannot be used inside EIEIO's defmethod.
-       * lisp/emacs-lisp/chart.el: Require cl-generic at compile time.
-       * lisp/emacs-lisp/chart.el (initialize-instance, chart-draw):
-       (chart-draw-title, chart-size-in-dir, chart-draw-axis):
-       (chart-axis-draw, chart-translate-xpos, chart-translate-ypos):
-       (chart-translate-namezone, chart-draw-data, chart-add-sequence):
-       (chart-trim, chart-sort): Use cl-defmethod instead of defmethod.
+2016-01-26  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-31  Brian Burns  <bburns.km@gmail.com>
+       C-u C-x = example doc fix
 
-       Add nt/INSTALL.W64 build instructions
+       * doc/emacs/mule.texi (International Chars):
+       Adjust example to match current behavior of C-u C-x =.
 
-       * nt/INSTALL.W64: New file.
-       * nt/INSTALL: Point to INSTALL.W64 for 64-bit build instructions.
+2016-01-26  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-31  Joakim Jalap  <joakim.jalap@fastmail.com>
+       malloc.h hygiene
 
-       Add new input method 'programmer-dvorak'
+       This attempts to future-proof Emacs a bit against possible glibc
+       changes, by having Emacs use <malloc.h> declarations rather than
+       coding them up by hand.  Problem noted by Florian Weimer in:
+       https://sourceware.org/ml/libc-alpha/2016-01/msg00777.html
+       Implement this mainly by moving malloc.h-related functions from
+       emacs.c (which does not include <malloc.h>) to alloc.c (which does).
+       * src/alloc.c (my_heap_start) [DOUG_LEA_MALLOC || GNU_LINUX]:
+       New function.
+       The remaining changes to this file apply only if DOUG_LEA_MALLOC.
+       (alloc_unexec_pre, alloc_unexec_post): New functions.
+       (malloc_initialize_hook): Use my_heap_start and alloc_unexec_post.
+       (__MALLOC_HOOK_VOLATILE): New macro, if not already defined.
+       (__malloc_initialize_hook): Use it.
+       (malloc_state_ptr, malloc_initialize_hook, __malloc_initialize_hook):
+       Move here from ...
+       * src/emacs.c: ... here.
+       (malloc_get_state, malloc_set_state): Remove extern decls.
+       (my_heap_start) [DOUG_LEA_MALLOC || GNU_LINUX]: Remove static var.
+       All uses changed to similarly-named new function.
+       (Fdump_emacs): Use new functions alloc_unexec_pre, alloc_unexec_post.
+       * src/lisp.h (my_heap_start, alloc_unexec_pre, alloc_unexec_post):
+       New decls.
 
-       * lisp/leim/quail/programmer-dvorak.el ("programmer-dvorak"): New
-       input method.
+2016-01-26  Eli Zaretskii  <eliz@gnu.org>
 
-       * etc/NEWS: Mention it.
+       * doc/emacs/mark.texi (Using Region): Clarify wording.  (Bug#22467)
 
-2015-12-31  Eli Zaretskii  <eliz@gnu.org>
+2016-01-26  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Allow to invoke original M-TAB binding in 'flyspell-prog-mode'
+       Remove never-set var handle_user_signal_hook
 
-       * lisp/textmodes/flyspell.el (flyspell-prog-mode): Record the
-       original M-TAB binding in a buffer-local variable.
-       (flyspell-auto-correct-word): Invoke the original binding of M-TAB
-       if that is recorded, when point is in a place where flyspell
-       should not be active (e.g., because the user turned on
-       'flyspell-prog-mode').  (Bug#18533)
+       * src/keyboard.c, src/keyboard.h (handle_user_signal_hook):
+       Remove never-set var.  All uses removed.
 
-2015-12-31  Eli Zaretskii  <eliz@gnu.org>
+2016-01-26  Anders Lindgren  <andlind@gmail.com>
 
-       Fix EWW rendering of long RTL lines
+       Fixed NextStep fullscreen issue (bug#22468)
 
-       * lisp/net/shr.el (shr-insert-document): Undo any previous hscroll
-       of the selected window before filling its lines.  (Bug#22250)
+       When in fullscreen mode, `[screen visibleFrame]' sometimes
+       includes, sometimes excludes the menu bar. This could cause
+       a frame to be placed too low when in fullscreen mode.
 
-2015-12-31  Vincent Belaïche  <vincentb1@users.sourceforge.net>
+       * src/nsterm.m (ns_menu_bar_should_be_hidden): Trace.
+       (constrain_frame_rect): New parameter, isFullscreen, when true don't
+       query the height of the menu bar.
+       (ns_constrain_all_frames): Pass `false' (isFullscreen) to
+       `constrain_frame_rect'.
+       ([EmacsView initFrameFromEmacs:]): Trace.
+       ([EmacsView isFullscreen]): Trace.
+       ([EmacsWindow constrainFrameRect:toScreen:]): Pass fullscreen
+       state to `constrain_frame_rect'.
 
-       fix  bug#21054
+2016-01-25  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * lisp/ses.el (ses-check-curcell): Call `ses-set-curcell' unconditionally
+       * lisp/files.el: Use a fixed file name for the second dir-locals file
 
-2015-12-31  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       (dir-locals-file): Revert to its original fixed value.
+       (dir-locals-file-2): New const.
+       (dir-locals--all-files): Don't use `file-name-all-completions'.
+       Instead, just check for the 2 dir-locals files and return a list
+       of the ones that exit (if any).
 
-       Clean up cairo printing code
+       * etc/NEWS: Document the change.
 
-       * src/gtkutil.c (xg_get_page_setup): Use listn.
-       * src/xfns.c (Fx_export_frames, Fx_print_frames_dialog): Doc fix.  Use
-       decode_window_system_frame and FRAME_VISIBLE_P.
-       (Fx_print_frames_dialog): Use redisplay_preserve_echo_area instead
-       of Fdisplay.
-       * src/xterm.c (x_cr_export_frames): Use redisplay_preserve_echo_area
-       instead of Fdisplay.  Temporarily unblock_input around QUIT.
+       * doc/emacs/custom.texi (Directory Variables): Document the change.
 
-2015-12-31  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       * doc/lispref/variables.texi (Directory Local Variables): Update
+       accordingly.
 
-       Move variables to inner loop, preparing for Mac port merge
+2016-01-25  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * src/keyboard.c (command_loop_1): Move variables `cmd',
-       `keybuf', and `i' to inner loop.
+       * lisp/files-x.el (modify-dir-local-variable): Small rewrite
 
-2015-12-31  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       Change a variable name to be more meaningful, and reorder some of
+       the code with no change in behaviour.
 
-       Add handle_user_signal_hook
+2016-01-25  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * src/keyboard.h (handle_user_signal_hook): New declaration.
-       * src/keyboard.c (handle_user_signal_hook): New variable.
-       (handle_user_signal): Call it.
+       * lisp/files.el (dir-locals-find-file): Refactor return values
 
-2015-12-31  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       Returning a cache remains unchanged, but the case of returning a
+       file (or pattern) is now changed to return the contaning
+       directory.
 
-       Avoid writing to purespace
+       (dir-locals-read-from-file): Rename to `dir-locals-read-from-dir'
+       and make obsolete.
+       (dir-locals-read-from-dir): Simplify accordingly.
+       (hack-dir-local-variables): Simplify accordingly and rename a
+       variable.
 
-       * src/alloc.c (Fmake_string): Don't write to empty string contents.
-       (allocate_vector): Don't write to empty vector size.
-       * src/character.h (CHECK_CHARACTER_CAR, CHECK_CHARACTER_CDR):
-       Don't call unnecessary XSETCAR or XSETCDR.
-       * src/lisp.h (STRING_SET_UNIBYTE, STRING_SET_MULTIBYTE): Don't
-       write to empty string size_byte.
+2016-01-25  Glenn Morris  <rgm@gnu.org>
 
-2015-12-31  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       * lisp/textmodes/flyspell.el (flyspell--prev-meta-tab-binding):
+       Declare.
 
-       Remove unused variable
+       * configure.ac (USE_CAIRO): Rename to more standard HAVE_CAIRO.
 
-       * lisp/international/mule-cmds.el: Remove unused variable
-       `mac-system-coding-system'.
+       * configure.ac (--with-cairo): Say it's experimental.
 
-2015-12-31  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       * lisp/xwidget.el (xwidget-webkit-scroll-behavior):
+       Rename using American spelling.  Update all uses.
 
-       * configure.ac: Find libxml2 headers in Xcode SDK dir on Darwin.
+2016-01-25  Glenn Morris  <rgm@gnu.org>
 
-2015-12-31  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       Yet more xwidget doc fixes.
 
-       Use posix_openpt instead of openpty on Darwin
+       * lisp/xwidget.el (xwidget-webkit-scroll-behaviour)
+       (xwidget-insert, xwidget-webkit-browse-url)
+       (xwidget-webkit-scroll-up, xwidget-webkit-scroll-down)
+       (xwidget-webkit-scroll-forward, xwidget-webkit-scroll-backward)
+       (xwidget-webkit-insert-string, xwidget-webkit-show-named-element)
+       (xwidget-webkit-show-id-element)
+       (xwidget-webkit-show-id-or-named-element)
+       (xwidget-webkit-adjust-size, xwidget-webkit-current-url)
+       (xwidget-webkit-execute-script-rv)
+       (xwidget-webkit-copy-selection-as-kill, xwidget-get)
+       (xwidget-put):  Doc fixes.
+       (xwidget-webkit-insert-string, xwidget-webkit-show-named-element)
+       (xwidget-webkit-show-id-element)
+       (xwidget-webkit-show-id-or-named-element): Prompt fixes.
 
-       * configure.ac (PTY_ITERATION, FIRST_PTY_LETTER, PTY_OPEN)
-       (PTY_NAME_SPRINTF, PTY_TTY_NAME_SPRINTF): Remove
-       Darwin-specific definitions.  Use posix_openpt instead.
+2016-01-25  Ted Zlatanov  <tzz@lifelogs.com>
 
-2015-12-30  Shakthi Kannan  <shakthimaan@gmail.com>
+       * lisp/gnus/gnus-art.el (gnus-blocked-images):
+       Add explicit nil choice and tags.
 
-       Document support for ':documentation' in Lisp mode
+2016-01-25  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/emacs-lisp/lisp-mode.el (lisp-string-in-doc-position-p)
-       (lisp-string-after-doc-keyword-p)
-       (lisp-font-lock-syntactic-face-function): Add doc strings.
+       Spelling fixes
 
-2015-12-30  Shakthi Kannan  <shakthimaan@gmail.com>
+2016-01-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       Document new features of TeX mode
+       (rng-c-fix-escaped-newlines): Use subst-char-in-string
 
-       * doc/emacs/text.texi (TeX Print): Document
-       'tex-print-file-extension'.
-       * doc/emacs/programs.texi (Misc for Programs): Document support
-       for Prettify Symbols mode in TeX mode.
+       * lisp/nxml/rng-cmpct.el (rng-c-fix-escaped-newlines):
+       Use subst-char-in-string.
 
-2015-12-30  Eli Zaretskii  <eliz@gnu.org>
+2016-01-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       Clarify docs of hscroll in RTL text
+       * lisp/textmodes/sgml-mode.el (sgml-forward-sexp): New function
 
-       * doc/lispref/windows.texi (Horizontal Scrolling): Clarify the
-       meaning of a window's horizontal scroll amount for RTL paragraphs.
+       (sgml-cursor-sensor, sgml-pretty-print, sgml-parse-tag-backward)
+       (sgml-calculate-indent): Use it.
 
-2015-12-30  Eli Zaretskii  <eliz@gnu.org>
+2016-01-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       Fix rendering of HTML pages that use character composition
+       * lisp/org: Fix some compiler warnings
 
-       * src/indent.c (Fvertical_motion): Fix the case when point starts
-       in the middle of a composition, as in shr-vertical-motion.
-       (Bug#22250)
+       * lisp/org/ob-core.el (org-babel-check-confirm-evaluate)
+       (org-babel-map-src-blocks): Don't emit warnings if added vars are not used.
+       (*this*): Declare as dyn-bound.
+       (org-babel-expand-src-block, org-babel-load-in-session)
+       (org-babel-switch-to-session-with-code, org-babel-get-rownames):
+       Mark unused args.
+       (org-babel-combine-header-arg-lists): Remove unused var `args'.
+       (org-babel-find-named-block): Remove unused var `msg'.
 
-2015-12-30  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/org/org-src.el (org-inhibit-startup, org-src-fontify-natively):
+       Declare as dyn-bound.
+       (org-edit-src-code): Remove unused var `lfmt'.
+       (org-edit-fixed-width-region): Remove unused var `preserve-indentation'.
 
-       Avoid some compiler warnings in w32.c
+2016-01-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * src/w32.c (codepage_for_filenames, crlf_to_lf)
-       (ansi_encode_filename, socket_to_fd, sys_write)
-       (check_windows_init_file): Avoid compiler warnings about
-       differences in pointer signedness.
+       * lisp/font-lock.el: Use #' to quote function symbols
 
-2015-12-30  Dmitry Gutov  <dgutov@yandex.ru>
+2016-01-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       Undo ill-advised change
+       (font-lock-ensure-function): Fix bug#22399
 
-       * lisp/progmodes/xref.el (xref-collect-matches): Undo
-       ill-advised change.  The hits come in the order that `find'
-       produces them in, which isn't alphabetical.
+       * lisp/font-lock.el (font-lock-ensure-function): Fix handling when
+       font-lock-mode is not enabled (bug#22399).
 
-2015-12-30  Dmitry Gutov  <dgutov@yandex.ru>
+2016-01-25  Alan Mackenzie  <acm@muc.de>
 
-       Unbreak completion in python-mode buffers
+       Expunge "allow" + infinitive from source and doc, part 2.
 
-       * lisp/progmodes/python.el (python-shell-completion-at-point):
-       Unbreak in python-mode buffers.
+       Do the same for "permit", "enable", "prevent", and (where appropriate)
+       "require".
 
-2015-12-29  Eli Zaretskii  <eliz@gnu.org>
+       doc/misc/reftex.texi:
+       doc/misc/url.texi:
+       lib/get-permissions.c:
+       lib/strftime.c:
+       lisp/org/org-element.el:
+       lisp/org/org-mobile.el:
+       lisp/textmodes/reftex-vars.el:
+       src/bidi.c:
+       src/emacs.c:
+       src/xdisp.c:
+       test/etags/c-src/emacs/src/lisp.h:
 
-       Fix typos in CC Mode manual
+       Expunge the likes of "This allows to do something" from the above files.
 
-       * doc/misc/cc-mode.texi (c-offsets-alist, Style Variables): Fix
-       typos.  (Bug#22267)
+2016-01-25  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-2015-12-29  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode): Redundant line
 
-       Avoid assertion violations in compact_font_cache_entry
+       `special-mode' is already read-only.
 
-       * src/alloc.c (compact_font_cache_entry): Don't use VECTORP to
-       avoid assertion violation in ASIZE.  (Bug#22263)
+2016-01-25  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-2015-12-29  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/emacs-lisp/ert.el (ert--results-move): Change error to user-error
 
-       Fix filling text with bidirectional characters in shr.el
+2016-01-24  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/net/shr.el (shr-insert-document): Bind
-       bidi-display-reordering to nil while filling lines.  This is
-       required for when a line includes characters whose bidi
-       directionality is opposite to the base paragraph direction,
-       because columns are counted in the logical order.  (Bug#22250)
+       Port "$@" to OpenIndiana ksh93
 
-2015-12-29  Martin Rudalics  <rudalics@gmx.at>
+       In http://lists.gnu.org/archive/html/bug-autoconf/2015-12/msg00000.html
+       Pavel Raiskup reports that ${1+"$@"} runs afoul of a bug in /bin/sh
+       (derived from ksh 93t+ 2010-03-05).  ${1+"$@"} works around an ancient
+       bug in long-dead shells, so remove the workaround.
+       * admin/check-doc-strings, configure.ac, lib-src/rcs2log:
+       Use plain "$@" rather than ${1+"$@"}.
 
-       * src/xfns.c (x_create_tip_frame): Process alpha parameter.
+2016-01-24  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-29  Michael Albinus  <michael.albinus@gmx.de>
+       * src/xwidget.c (Fxwidget_set_adjustment): Fix doc string quoting typo.
 
-       Sync with Tramp 2.2.13
+2016-01-24  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * doc/misc/trampver.texi: Change version to "2.2.13.25.1".
+       Improve wording for SMB support
 
-       * lisp/net/tramp-compat.el (tramp-compat-delete-dups):
-       Use `tramp-compat-funcall'.
+       * doc/misc/tramp.texi (External methods): Improve and modernize
+       wording for discussion of smbclient.  There is no longer any
+       need to mention the laundry list of old MS Windows implementations
+       of SMB and CIFS, nor to mention CIFS.  Also, give a URL for Samba.
 
-       * lisp/net/tramp-gvfs.el (tramp-gvfs-parse-device-names):
-       Make `split-string' call compatible with older Emacsen.
+2016-01-24  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/net/trampver.el: Change version to "2.2.13.25.1".
+       Merge from gnulib
 
-2015-12-29  Lambda Coder  <sjLambda@gmail.com>
+       This incorporates:
+       2016-01-24 openat_proc_name: fix last '/' overwritten on OS/2 kLIBC
+       2016-01-24 closedir, dirfd, opendir: port to OpenSolaris 5.10
+       2016-01-15 detect utimes() correctly on OS/2 kLIBC
+       2016-01-15 openat_proc_name: port to OS/2 kLIBC
+       2016-01-14 stdint: check _INTPTR_T_DECLARED for intptr_t etc.
+       2016-01-14 opendir, closedir, dirfd, fdopendir: port to OS/2 kLIBC
+       2016-01-14 dup, dup2, fcntl: support a directory fd on OS/2 kLIBC
+       2016-01-14 binary-io: don't put fd in binary mode if a console on EMX
+       2016-01-14 sig2str: list all signals on FreeBSD >= 7
+       2016-01-13 acl-permissions: port to USE_ACL==0 platforms
+       2016-01-12 mktime: rename macro to avoid glibc clash
+       2016-01-12 Port "$@" to OpenIndiana ksh93
+       2016-01-12 Port Universal Time settings to strict POSIX
+       * build-aux/gitlog-to-changelog, build-aux/update-copyright:
+       * doc/misc/texinfo.tex, lib/acl-internal.c, lib/acl-internal.h:
+       * lib/binary-io.h, lib/dirent.in.h, lib/dirfd.c, lib/dup2.c:
+       * lib/fcntl.c, lib/fdopendir.c, lib/mktime.c, lib/openat-proc.c:
+       * lib/sig2str.h, lib/stdint.in.h, m4/dirfd.m4, m4/dup2.m4:
+       * m4/fcntl.m4, m4/utimes.m4:
+       Copy from gnulib.
+       * m4/gnulib-comp.m4: Regenerate.
 
-       * doc/misc/tramp.texi: Editorial revisions to the Tramp manual
+2016-01-24  Alan Mackenzie  <acm@muc.de>
 
-2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+       Expunge "allow" + infinitive without direct object from source and doc.
 
-       Mention that tls.el is secure by default, and will fail
+       Do the same for "permit", "enable", and "prevent".
 
-2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+       * doc/emacs/mule.texi:
+       * doc/lispref/control.texi:
+       * doc/lispref/display.texi:
+       * doc/lispref/frames.texi:
+       * doc/lispref/functions.texi:
+       * doc/lispref/nonascii.texi:
+       * doc/lispref/streams.texi:
+       * doc/lispref/windows.texi:
+       * doc/misc/dbus.texi:
+       * doc/misc/eww.texi:
+       * doc/misc/flymake.texi:
+       * doc/misc/octave-mode.texi:
+       * doc/misc/org.texi:
+       * doc/misc/reftex.texi:
+       * doc/misc/tramp.texi:
+       * doc/misc/wisent.texi:
+       * etc/NEWS:
+       * lisp/autorevert.el:
+       * lisp/cedet/mode-local.el:
+       * lisp/cedet/semantic/senator.el:
+       * lisp/cedet/semantic/wisent.el:
+       * lisp/dos-fns.el:
+       * lisp/frameset.el:
+       * lisp/gnus/gnus-agent.el:
+       * lisp/gnus/mm-util.el:
+       * lisp/international/characters.el:
+       * lisp/ldefs-boot.el:
+       * lisp/mail/mailclient.el:
+       * lisp/man.el:
+       * lisp/mh-e/mh-search.el:
+       * lisp/net/tramp-cmds.el:
+       * lisp/net/tramp-gvfs.el:
+       * lisp/org/org-crypt.el:
+       * lisp/org/org-element.el:
+       * lisp/org/org-feed.el:
+       * lisp/org/org.el:
+       * lisp/org/ox-ascii.el:
+       * lisp/org/ox-icalendar.el:
+       * lisp/org/ox-publish.el:
+       * lisp/org/ox.el:
+       * lisp/play/gamegrid.el:
+       * lisp/play/gomoku.el:
+       * lisp/progmodes/antlr-mode.el:
+       * lisp/progmodes/python.el:
+       * lisp/progmodes/vhdl-mode.el:
+       * lisp/strokes.el:
+       * lisp/textmodes/ispell.el:
+       * lisp/tree-widget.el:
+       * lisp/vc/pcvs.el:
+       * lisp/window.el:
+       * src/lisp.h:
+       * src/w32.c:
+       * src/w32heap.c:
+       * src/w32term.c:
+       * src/window.c:
+       * src/xfaces.c:
 
-       Make tls.el use trustfiles by default
+       Replace solecisms like "This allow to do something" with a correct
+       alternative, such as "This allow you to do something", "This allows
+       something to be done" or "This allows the doing of something".
 
-       * lisp/net/tls.el (tls-program): Add a certfile by default (bug#21227).
-       (open-tls-stream): Insert the trustfile by looking at
-       `gnutls-trustfiles'.
+2016-01-24  l3thal  <kwhite@gnu.org>
 
-2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+       Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
 
-       Refactor out gnutls-trustfiles
+2016-01-24  Kelvin White  <kwhite@gnu.org>
 
-       * lisp/net/gnutls.el (gnutls-trustfiles): Refactor out for reuse by tls.el.
+       Add NEWS entry for asynchronous reconnect in ERC
 
-2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-01-24  l3thal  <kwhite@gnu.org>
 
-       Remove --insecure from gnutls-cli invocation
+       Add NEWS entry for asynchronous reconnect in ERC
 
-       * tls.el (tls-program): Default to using secure TLS
-       connections (bug#19284).
+2016-01-24  Kelvin White  <kwhite@gnu.org>
 
-2015-12-29  Paul Eggert  <eggert@cs.ucla.edu>
+       browse-url.el: Add 'google-chrome' to supported browsers.
 
-       Spelling fix
+2016-01-24  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-29  Paul Eggert  <eggert@cs.ucla.edu>
+       Port Tramp manual to latest Texinfo
 
-       Port report-emacs-bug to deterministic builds
+       Otherwise, 'make pdf' did not work (Bug#22416).
+       * doc/misc/tramp.texi (xxx, yyy): Remove macros.
+       (trampfn): Specialize to the case where METHOD is nonempty.
+       The 2nd argument is now user@host, not 2nd user and 3rd host args.
+       All uses changed.
+       (trampf): New macro.
 
-       * lisp/mail/emacsbug.el (report-emacs-bug): Future-proof the
-       recent "built on" change to deterministic builds where
-       emacs-build-system will be nil.  See:
-       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg01369.html
+2016-01-24  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2015-12-29  Jose A. Ortega Ruiz  <jao@gnu.org>  (tiny change)
+       * eww.el (eww-render): Protect against empty content-types.
 
-       Fix URL auth error message
+2016-01-24  Nicolas Petton  <nicolas@petton.fr>
 
-       * lisp/url/url-http.el (url-http-handle-authentication): Make the error
-       message more correct (bug#20069).
+       authors.el updates
 
-2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+       * admin/authors.el (authors-ignored-files, authors-renamed-files-alist):
+         Additions.
 
-       shr link traversal fixup
+2016-01-23  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * shr.el (shr-next-link): Don't bug out on adjacent links.
+       Rename xref-query-replace to xref-query-replace-in-results
 
-       Backport:
+       * lisp/progmodes/xref.el(xref-query-replace):
+       Rename to xref-query-replace-in-results.
+       (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01240.html)
 
-       (cherry picked from commit 1efc5f8b09273c359683ce13be95fb5df7a84311)
+       * lisp/progmodes/xref.el (xref--xref-buffer-mode-map):
+       * lisp/dired-aux.el (dired-do-find-regexp-and-replace):
+       * doc/emacs/dired.texi (Operating on Files):
+       * doc/emacs/maintaining.texi (Xref Commands)
+       (Identifier Search, Identifier Search): Update accordingly.
 
-2015-12-28  Tom Tromey  <tom@tromey.com>
+2016-01-23  Dmitry Gutov  <dgutov@yandex.ru>
 
-       set :safe on css-indent-offset
+       Update cl-defgeneric and cl-defmethod docstrings
 
-       * lisp/textmodes/css-mode.el (css-indent-offset): Add :safe 'integerp.
+       * lisp/emacs-lisp/cl-generic.el: Remove outdated TODO item.
+       (cl-defgeneric): Rename BODY to DEFAULT-BODY.
+       (cl-defmethod): Mention that multiple dispatch arguments are
+       allowed.  Document supported types.  (Bug#22336)
 
-2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-01-23  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * eww.el (eww-mode): Remove superfluous bidi reset.
+       Comment out next-error-function integration in xref
 
-2015-12-28  James Stout  <james.wolf.stout@gmail.com>  (tiny change)
+       * lisp/progmodes/xref.el (xref--xref-buffer-mode):
+       Comment out next-error-function integration
+       (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01286.html).
 
-       Make chunked encoding trailer detection more compliant
+2016-01-23  John Wiegley  <johnw@newartisans.com>
 
-       * lisp/url/url-http.el
-       (url-http-chunked-encoding-after-change-function): Make
-       trailer detection more compliant (bug#16345).
+       Correct a use of "which" in intro.texi
 
-2015-12-28  Martin Rudalics  <rudalics@gmx.at>
+2016-01-23  Alan Mackenzie  <acm@muc.de>
 
-       Fix Bug#10873 in `report-emacs-bug'
+       Distinguish the two meanings of Java's keyword "default".  Fixes bug #22358.
 
-       * lisp/mail/emacsbug.el (report-emacs-bug): If
-       `report-emacs-bug-no-explanations' is nil, make sure we can show
-       mail and warnings buffer on this frame (Bug#10873).
+       * lisp/progmodes/cc-engine.el (c-guess-basic-syntax CASE 14): Check the
+       context of case labels (including "default") more rigorously.
+       (c-guess-basic-syntax CASE 15): Consequential amendment.
 
-2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/progmodes/cc-langs.el (c-modifier-kwds): Add "default" to Java's value.
 
-       Always reset the bidi direction
+2016-01-23  Oscar Fuentes  <ofv@wanadoo.es>
 
-       * eww.el (eww-display-html): Always reset the bidi direction
-       to `left-to-right' (bug#22257).
+       Don't operate on menu bar of nonexistent frame
 
-2015-12-28  Alan Mackenzie  <acm@muc.de>
+       * src/xfns.c (Fx_hide_tip) [USE_LUCID]: Check that the current frame
+       is valid before redisplaying its menu. Fixes bug#22438.
 
-       Allow line comments ending with escaped NL to be continued to the next line.
+2016-01-23  Anders Lindgren  <andlind@gmail.com>
 
-       Use this in C, C++, and Objective C Modes.  Fixes bug#22246
+       Unbreak the GNUstep build.
 
-       * src/syntax.c (comment-end-can-be-escaped): New buffer local variable.
-       (forw-comment, back-comment): On encountering an end of comment character,
-       test whether it is escaped when `comment-end-can-be-escaped' is non-nil.
+       * src/nsterm.m ([EmacsBell init]): In GNUstep, don't use the
+       predefined "caution" image. Add trace.
+       (x_set_window_size): Remove unused variables `cols' and `rows'.
+       (ns_draw_fringe_bitmap): Exclude assignment of `fromRect' when
+       GNUstep is used.
+       ([EmacsView updateFrameSize:]): Remove unused variable `win'.
+       ([EmacsWindow zoom:]): Remove unused variable `f'.
 
-       * doc/lispref/syntax.texi (Control Parsing): Describe
-       `comment-end-can-be-escaped'.
+2016-01-23  Eli Zaretskii  <eliz@gnu.org>
+           John Wiegley  <johnw@gnu.org>
+           Michael Heerdegen  <michael_heerdegen@web.de>
 
-       * etc/NEWS (Lisp Changes): Describe `comment-end-can-be-escaped'.
+       Improve documentation of 'pcase'
 
-       * lisp/progmodes/cc-langs.el: New c-lang-setvar `comment-end-can-be-escaped'.
+       * doc/lispref/control.texi (Pattern matching case statement):
+       Reorganize, expand, and improve wording.
 
-2015-12-28  Dmitry Gutov  <dgutov@yandex.ru>
+       * etc/NEWS: Mention that 'pcase' changes are documented.
 
-       Rename project-library-roots to project-external-roots
+2016-01-23  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/progmodes/project.el (project-library-roots): Rename to
-       project-external-roots.
-       (project-library-roots-function): Rename to
-       project-vc-external-roots-function.  Only use it in the VC
-       backend, for now.  Update project-external-roots accordingly.
-       (project-vc-library-roots): Remove.
-       (project-or-libraries-find-regexp):
-       Rename to project-or-external-find-regexp.
+       * etc/NEWS: Say that Cairo is experimental.
 
-       * lisp/progmodes/elisp-mode.el (elisp-library-roots):
-       Rename to elisp-load-path-roots.
+2016-01-23  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/progmodes/etags.el (etags-library-roots): Remove.  Use
-       an anonymous function for the default value of
-       project-vc-external-roots-function.
+       Report error for PNG under Cairo
 
-2015-12-27  Deniz Dogan  <deniz@dogan.se>
+       * src/image.c (lookup_rgb_color): Signal a file error instead
+       of dumping core when mishandling an image.
 
-       Clear erc user list upon disconnection
+2016-01-23  Arash Esbati  <esbati@gmx.de>
 
-       * lisp/erc/erc-backend.el (erc-process-sentinel): Clear channel user
-       lists upon disconnection.  This prevents invalid channel
-       user lists when reconnecting (bug#10947).
+       Delete a spurious backquote (tiny change)
 
-2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/textmodes/reftex-ref.el (reftex-label): Delete a
+       spurious backquote which raises an error with emacs 25.
 
-       Don't bug out in erc after waking from sleep
+2016-01-23  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/erc/erc-backend.el (erc-server-send-ping): If the server has
-       closed connection, this may already have been detected and
-       `erc-server-last-received-time' has been set to nil (bug#13608).
+       Pacify --enable-gcc-warnings --with-cairo
 
-2015-12-27  David Edmondson  <dme@dme.org>
+       Problem reported by Alexander Kuleshov in:
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01289.html
+       * src/gtkutil.c (xg_get_page_setup):
+       Use switch rather than if-then-else.
+       * src/image.c (COLOR_TABLE_SUPPORT):
+       Define directly rather than via #define and optional later #undef.
+       (lookup_rgb_color) [USE_CAIRO && ENABLE_CHECKING]:
+       Crash when the pixel is undefined, as there is a genuine bug
+       here (Bug#22442).
+       * src/image.c (tiff_load, gif_load, svg_load_image)
+       (x_kill_gs_process) [USE_CAIRO]:
+       * src/xterm.c (x_draw_fringe_bitmap) [USE_CAIRO]:
+       Omit unused locals, or move them to where they’re needed.
+       (x_clear_area1): Now ATTRIBUTE_UNUSED.
 
-       Proxy error in erc with multiple clients
+2016-01-22  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/erc/erc.el (erc-channel-receive-names): Fix errors
-       generated when multiple IRC clients talk to a single IRC proxy
-       (bug#19034).
+       Update documentation for Dired search and replace
 
-       Backport:
+       * doc/emacs/dired.texi (Operating on Files): Update descriptions
+       of 'A' and 'Q' now bound to 'dired-do-find-regexp' and
+       'dired-do-find-regexp-and-replace'.
 
-       (cherry picked from commit 507e98a54d1aa37823c64993d6b59257a82fe8f4)
+       * etc/NEWS: Mention xref-related changes in Dired.
 
-2015-12-27  Dima Kogan  <dima@secretsauce.net>
+2016-01-22  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Ensure that we don't have several timers in erc
+       Port recent xdisp.c fix to picky C compilers
 
-       * lisp/erc/erc-backend.el (erc-server-setup-periodical-ping): Checks
-       for existing timers in the alist before adding new ones.  If a
-       timer already exists, it is cancelled and
-       overwritten. (bug#19292).
+       * src/xdisp.c (dump_glyph): Redo the call to fprintf to avoid
+       putting #if inside the arguments to a standard function, which
+       the C standard says has undefined behavior.
 
-2015-12-27  Jens Lechtenboerger  <jens.lechtenboerger@fsfe.org>
+2016-01-22  Alan Mackenzie  <acm@muc.de>
 
-       Fix mml-sec build warnings
+       Prevent spurious recognition of K&R argument declarations.  Fixes bug #2203
 
-       * lisp/gnus/mml-sec.el: Fix warnings by adding autoloads
-       (bug#18718).
+       * cc-engine.el (c-forward-declarator): New function.
+       (c-in-knr-argdecl): Before recognizing a K&R argument declaration, check it is
+       contained in the preceding arg list.
 
-       Backport:
+       * cc-fonts.el (c-font-lock-declarators): Use the new function
+       `c-forward-declarator' in place of inline code.
 
-       (cherry picked from commit 3603097f62f5f4aa5451716e9ac380161f6829e2)
+2016-01-22  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+       Fix the build with --enable-checking=glyphs
 
-       Don't insert erc logs at the end
+       * src/xdisp.c (dump_glyph): Don't refer to glyph->u.xwidget in a
+       build without xwidget support.
 
-       * lisp/erc/erc-log.el (erc-log-setup-logging): Insert the previous log
-       at the start of the buffer, not at the end (bug#20496).
+2016-01-22  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+       Document cl-generic.el
 
-       (eww-setup-buffer): Restore left-to-right defaults
+       * doc/lispref/functions.texi (Generic Functions): New section.
+       (Bug#22336)
+       (Functions): Update the chapter menu.
+       * doc/lispref/elisp.texi: Update the master menu.
 
-       * eww.el (eww-setup-buffer): Restore left-to-right defaults.
+2016-01-22  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Backport:
+       xwidgets style cleanup
 
-       (cherry picked from commit 96c874b96b617c124d500a94de761a61f2a08685)
+       Adjust the newly-added Xwidgets code so that it uses a more-typical
+       Emacs style.  This should not affect behavior, except that in
+       a few places it adds runtime checks that Lisp arguments are of
+       the proper type, and in one place it uses more-precise arithmetic.
+       * src/buffer.c, src/dispnew.c, src/emacs.c, src/emacsgtkfixed.c:
+       * src/emacs.c, src/print.c, src/window.c, src/xdisp.c, src/xterm.c:
+       Include xwidget.h unconditionally.
+       * src/buffer.c (Fkill_buffer):
+       * src/dispnew.c (update_window):
+       * src/emacs.c (main):
+       * src/print.c (print_object):
+       * src/window.c (Fdelete_window_internal):
+       * src/xdisp.c (handle_single_display_spec, push_it, pop_it)
+       (get_next_element, set_iterator_to_next, next_element_from_xwidget)
+       (dump_glyph, calc_pixel_width_or_height, BUILD_GLYPH_STRINGS_XW)
+       (BUILD_GLYPH_STRINGS, x_produce_glyphs, get_window_cursor_type):
+       * src/xterm.c (x_draw_glyph_string, x_draw_bar_cursor):
+       Call xwidget functions and macros without worrying about
+       HAVE_XWIDGETS when the code is a no-op on non-xwidget
+       platforms.
+       * src/dispextern.h (XWIDGET_GLYPH, struct glyph_string.xwidget)
+       (IT_XWIDGET, GET_FROM_XWIDGET, struct it.u.xwidget)
+       (struct it.xwidget):
+       * src/lisp.h (PVEC_XWIDGET, PVEC_XWIDGET_VIEW):
+       Always define.
+       * src/emacsgtkfixed.h: Omit unnecessary comment.
+       * src/keyboard.c: Fix spacing.
+       * src/xdisp.c (BUILD_XWIDGET_GLYPH_STRING, produce_xwidget_glyph):
+       Define to be a no-op if not HAVE_XWIDGETS.
+       * src/xwidget.c: Include xwidget.h first (after config.h)
+       to make sure that it can stand by itself.
+       (Fmake_xwidget, Fxwidget_webkit_execute_script):
+       Fix typo in doc string.
+       (Fmake_xwidget): Check type of args.
+       (Fmake_xwidget, offscreen_damage_event)
+       (webkit_document_load_finished_cb, webkit_download_cb)
+       (webkit_new_window_policy_decision_requested_cb)
+       (webkit_navigation_policy_decision_requested_cb)
+       (xwidget_osr_draw_cb, xwidget_osr_event_forward)
+       (xwidget_osr_event_set_embedder, xwidget_init_view):
+       Omit unnecessary casts.
+       * src/xwidget.c (Fmake_xwidget, xwidget_hidden)
+       (xwidget_show_view, xwidget_hide_view)
+       (x_draw_xwidget_glyph_string, xwidget_start_redisplay, xwidget_touch)
+       (xwidget_touched):
+       * src/xwidget.h (struct xwidget.kill_without_query)
+       (struct xwidget_view.redisplayed, struct xwidget_view.hidden):
+       Use bool for boolean.
+       * src/xwidget.c (store_xwidget_event_string, Fxwidget_size_request):
+       Simplify by using list functions.
+       (WEBKIT_FN_INIT): Omit unnecessary test for nil.
+       (Fxwidget_resize): Check type of integer args
+       before doing any work.  Check that they are nonnegative.
+       (Fxwidget_set_adjustment): Check type of integer arg.
+       Avoid redundant call to gtk_scrolled_window_get_vadjustment.
+       Simplify.  Use double, not float.
+       (Fxwidget_info, Fxwidget_view_info): Simplify by using CALLN.
+       (valid_xwidget_spec_p): Simplify.
+       (xwidget_spec_value): Omit unused arg FOUND.  All callers changed.
+       * src/xwidget.h: Include lisp.h first, so that includers do
+       not need to worry about doing that before including this file.
+       Make this .h file safe to include even on non-HAVE_XWIDGETS
+       configurations, to simplify the includers.
+       (x_draw_xwidget_glyph_string, syms_of_xwidget, valid_xwidget_spec_p)
+       (xwidget_end_redisplay, lookup_xwidget)
+       (xwidget_view_delete_all_in_window, kill_buffer_xwidgets):
+       Now a no-op if !HAVE_XWIDGETS, to simplify callers.
+       (struct glyph_matrix, struct glyph_string, struct xwidget)
+       (struct xwidget_view, struct window):
+       New forward or incomplete decls, so that includers need not
+       assume the corresponding .h files are already included, or that
+       HAVE_XWIDGETS is defined.
+       (struct xwidget_type, xwidget_from_id): Remove; unused.
 
-2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-01-22  John Wiegley  <johnw@newartisans.com>
 
-       Don't join erc channels doubly
+       Further corrections to the pcase docstring
 
-       * lisp/erc/erc-join.el (erc-autojoin-channels): Don't join channels
-       more than once (if you have several nicks) (bug#20695).
+2016-01-22  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-27  Eli Zaretskii  <eliz@gnu.org>
+       * doc/emacs/anti.texi (Antinews): Rewrite for Emacs 25.
 
-       Avoid leaving "ghost" of mouse pointer on MS-Windows
+2016-01-21  Stephen Leake  <stephen_leake@stephe-leake.org>
 
-       * src/w32term.c (frame_set_mouse_pixel_position):
-       * src/w32fns.c (Fw32_mouse_absolute_pixel_position): Momentarily
-       disable "mouse trails" when moving the mouse pointer.  (Bug#22247)
-       * src/w32term.c (frame_set_mouse_pixel_position): Include
-       w32common.h.
+       In xref-collect-references, force backends to respect the 'dir' arg
 
-2015-12-27  Krzysztof Jurewicz  <krzysztof.jurewicz@gmail.com>  (tiny change)
+       * lisp/progmodes/xref.el (xref-collect-references): Force symref backends
+       to use `default-directory'.
 
-       Fix auth source lookups from erc with port numbers
+2016-01-21  John Wiegley  <johnw@newartisans.com>
 
-       * lisp/erc/erc.el (erc-open): `auth-source' wants strings, not port
-       numbers (bug#20541).
+       Minor correction to pcase docstring
 
-2015-12-27  Fran Litterio  <flitterio@gmail.com>
+2016-01-21  John Wiegley  <johnw@newartisans.com>
 
-       Run erc-kill-channel-hook always on exit
+       Write a new docstring for the pcase macro
 
-       * lisp/erc/erc.el (erc-kill-buffer-function): Run erc-kill-channel-hook
-       when erc-kill-queries-on-quit is set (bug#21187).
+       * lisp/emacs-lisp/pcase.el (pcase): Write a new docstring.
 
-2015-12-27  Paul Eggert  <eggert@cs.ucla.edu>
+2016-01-21  Stephen Berman  <stephen.berman@gmx.net>
 
-       Spelling fix
+       Avoid byte-compiler warning in todo-mode (bug#21953)
 
-       * test/automated/url-parse-tests.el:
-       (url-generic-parse-url/same-document-reference):
-       Rename from url-generic-parse-url/same-decument-reference.
+       * todo-mode.el (todo-convert-legacy-files): Add limit argument
+       to looking-back to comply with advertised-calling-convention.
 
-2015-12-27  Paul Eggert  <eggert@cs.ucla.edu>
+2016-01-21  Stephen Berman  <stephen.berman@gmx.net>
 
-       Reword initial *scratch* for brevity, appearance
+       Fix desktop support in todo-mode and doc-view (bug#22377)
 
-       * lisp/startup.el (initial-scratch-message):
-       Reword to avoid apostrophes, and to make it shorter.
-       See the thread starting in:
-       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg01241.html
+       * lisp/calendar/todo-mode.el (todo-restore-desktop-buffer):
+       * lisp/doc-view.el (doc-view-restore-desktop-buffer): Return current buffer.
 
-2015-12-26  Leo Liu  <sdl.web@gmail.com>
+       * lisp/calendar/todo-mode.el (todo-modes-set-2):
+       * lisp/doc-view.el (doc-view-mode): Set desktop-save-buffer unconditionally.
 
-       Add ert-deftest to lisp-mode.el
+2016-01-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression,
-         lisp-el-font-lock-keywords-1): Add ert-deftest.
+       No need to configure gobject-introspection
 
-2015-12-26  Lars Ingebrigtsen  <larsi@gnus.org>
+       It wasn’t needed for the recently-installed xwidget_mvp code; see:
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01154.html
+       * configure.ac (DOES_XWIDGETS_USE_GIR, GIR_REQUIRED, GIR_MODULES):
+       (HAVE_GIR):
+       * src/Makefile.in (GIR_LIBS, GIR_CFLAGS):
+       Remove.  All uses removed.
+       * configure.ac (emacs_config_features): Don’t worry about GIR.
 
-       Mark imap changes as not needing doc changes
+2016-01-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/net/imap.el (imap-ssl-open): Remove
+       Don’t export C symbols not used elsewhere
 
-2015-12-26  Lars Ingebrigtsen  <larsi@gnus.org>
+       These were recently added, mostly as part of xwidget code.
+       * src/emacsgtkfixed.c (emacs_fixed_get_type): Now static.
+       (EMACS_FIXED, EMACS_FIXED_GET_CLASS):
+       Now static functions here, not macros in emacsgtkfixed.h.
+       * src/emacsgtkfixed.h (EMACS_TYPE_FIXED):
+       Remove.  All uses replaced by definiens.
+       (EMACS_FIXED, EMACS_FIXED_GET_CLASS):
+       Remove; these are now static functions in emacsgtkfixed.c.
+       (EMACS_FIXED_CLASS, EMACS_IS_FIXED, EMACS_IS_FIXED_CLASS):
+       Remove; unused.
+       (emacs_fixed_get_type): Remove decl; no longer extern.
+       * src/xwidget.c (offscreen_damage_event)
+       (webkit_mime_type_policy_typedecision_requested_cb)
+       (webkit_new_window_policy_decision_requested_cb)
+       (webkit_navigation_policy_decision_requested_cb)
+       (xwidget_spec_value, xwidget_view_lookup)
+       (xwidget_start_redisplay, xwidget_touch):
+       Now static.
+       * src/xwidget.h (xwidget_start_redisplay, xwidget_touch):
+       Remove decls.
 
-       Use built-in encryption in imap.el
+2016-01-20  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * lisp/net/imap.el (imap-ssl-program): Remove (bug#21134).
-       (imap-starttls-open): Use open-network-stream instead of starttls.el.
-       (imap-tls-open): Use open-network-stream instead of tls.el.
+       Support squiggly heredocs in ruby-mode
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/progmodes/ruby-mode.el (ruby-here-doc-beg-re):
+       Support squiggly heredocs added in Ruby 2.3.
 
-       Don't try using /bin/sh in artist.el on MS-Windows
+       * test/indent/ruby.rb: Add squiggly example.
 
-       * lisp/textmodes/artist.el (artist-figlet-get-font-list-windows):
-       New function.
-       (artist-figlet-choose-font): Use it on MS-Windows and MS-DOS.
-       (Bug#20167)
+2016-01-20  Glenn Morris  <rgm@gnu.org>
 
-2015-12-26  Wolfgang Jenkner  <wjenkner@inode.at>
+       * configure.ac (emacs_config_features): Remove WEBKIT.
 
-       Always define gmalloc etc. in src/gmalloc.c
+2016-01-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-       This is a work-around to prevent the compiler from using semantic
-       knowledge about malloc for optimization purposes.  E.g., gcc 5.2
-       with -O2 replaces most of calloc's definition by a call to calloc;
-       see Bug#22085.
-       * src/gmalloc.c [!HYBRID_MALLOC] (malloc, realloc, calloc)
-       (aligned_alloc, free): Do not undef.  Instead, define these as
-       functions (perhaps renamed to gmalloc etc.) in terms of gmalloc etc.
+       Port to platforms with gtk3 but not webkitgtk3
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+       I ran into this problem on my Fedora 23 installation;
+       Emacs configured but did not build when --with-xwidgets was specified.
+       * configure.ac (HAVE_WEBKIT, HAVE_GIR): Omit unnecessary initializations.
+       (DOES_XWIDGETS_USE_GIR): New var.
+       If --with-xwidgets is specified, report an error if not
+       doable, to be consistent with the other --with options.
+       Require webkitgtk3 to use Xwidgets, as the Xwidgets code does
+       not work at all without webkitgtk3.  Simplify use of
+       EMACS_CHECK_MODULES.  Output message about gobject
+       introspection only if xwidgets are used.
+       * etc/NEWS: Users need webkitgtk3, not merely webkit.
+       * src/xwidget.c (syms_of_xwidget): Don’t worry about HAVE_WEBKIT_OSR,
+       since this file is no longer compiled if webkitgtk3 is not available.
 
-       Fix documentation of browse-url browser-related functions
+2016-01-20  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/net/browse-url.el (browse-url)
-       (browse-url-default-browser, browse-url-default-windows-browser)
-       (browse-url-default-macosx-browser, browse-url-chromium)
-       (browse-url-kde, browse-url-text-xterm): Clarify the usage of ARGS
-       and NEW-WINDOW arguments in these functions.  (Bug#19421)
+       Fix doc string of 'isearch-search-fun-function'
 
-2015-12-26  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/isearch.el (isearch-search-fun-function)
+       (isearch-search-string): Doc fixes.  (Bug#22411)
 
-       Propagate Bug#14412 fix to backtrace_eval_unrewind
+2016-01-19  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * src/eval.c (unbind_to): Redo so that the FALLTHROUGH!! comment
-       becomes accurate again. This shouldn’t affect behavior.
-       (backtrace_eval_unrewind): Apply the recent unbind_to fix here, too.
+       * lisp/xwidget.el: Nitpicks
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/xwidget.el (xwidget-log, xwidget-webkit-callback):
+       Use with-current-buffer rather than save-excursion + set-buffer.
 
-       Don't produce non-ASCII characters in *scratch*
+2016-01-19  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/startup.el (initial-scratch-message): Quote apostrophes to
-       avoid producing non-ASCII characters in the *scratch* buffer's
-       commentary.
+       Don't hard-code 1 as point-min.
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/image-mode.el (image-display-size):
+       * lisp/xwidget.el (xwidget-webkit-last-session)
+       (xwidget-webkit-current-session): Don't hard-code 1 as point-min.
 
-       Document changes in 'compare-windows'
+2016-01-19  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/vc/compare-w.el (compare-windows-removed)
-       (compare-windows-added): Doc fix.
+       * lisp/xwidget.el: Add declarations to silence non-xwidget compilation.
 
-       * doc/emacs/files.texi (Comparing Files): Document the changes in
-       window selection by 'compare-windows'.
+2016-01-19  Glenn Morris  <rgm@gnu.org>
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+       Trivial doc copyedits.
 
-       Document 'vc-annotate-background-mode'
+       * src/xwidget.c (Fmake_xwidget, Fget_buffer_xwidgets)
+       (Fxwidget_webkit_get_title, Fxwidget_resize)
+       (Fxwidget_set_adjustment, Fxwidgetp, Fxwidget_view_p)
+       (Fxwidget_info, Fxwidget_view_lookup)
+       (Fset_xwidget_query_on_exit_flag): Trivial doc copyedits.
 
-       * doc/emacs/maintaining.texi (Old Revisions): Document
-       'vc-annotate-background-mode'.
+2016-01-19  Glenn Morris  <rgm@gnu.org>
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+       Avoid advising image-display-size for xwidgets.
 
-       Document 'vc-region-history'
+       * lisp/xwidget.el (xwidget-image-display-size): Remove.
+       (image-display-size): Remove advice.
+       * lisp/image-mode.el (xwidget-info, xwidget-at): Declare.
+       (image-display-size): Incorporate xwidget code directly.
 
-       * doc/emacs/maintaining.texi (VC Change Log): Document
-       'vc-region-history'.
+2016-01-19  Glenn Morris  <rgm@gnu.org>
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+       Avoid breaking non-xwidget Emacs that happen to load xwidget.el.
 
-       Improve documentation of 'vc-push'
+       * lisp/xwidget.el (window-configuration-change-hook)
+       (kill-buffer-query-functions): Only modify these hooks if
+       compiled with xwidget support.
 
-       * doc/emacs/maintaining.texi (Pulling / Pushing): Expand and
-       improve the documentation of 'vc-push'.
+2016-01-19  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/vc/vc.el (vc-pull, vc-push): Doc fix.
+       * lisp/xwidget.el (xwidget-webkit-scroll-behaviour): Fix custom spec.
 
-2015-12-26  Alain Schneble  <a.s@realize.ch>
+       * configure.ac (WEBKIT, GIR, CAIRO): Use EMACS_CHECK_MODULES, not PKG_.
 
-       Include the tests for the URL parsing fixes
+       * configure.ac (emacs_config_features): Add XWIDGETS, WEBKIT, GIR.
 
-2015-12-26  Alain Schneble  <a.s@realize.ch>
+       * configure.ac (HAVE_WEBKIT_OSR): Remove broken, duplicated gtk3 test.
 
-       Make relative URL parsing and resolution consistent with RFC 3986 (bug#22044)
+2016-01-19  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * test/automated/url-parse-tests.el: Add tests covering url-generic-parse-url.
-       * test/automated/url-expand-tests.el: Add tests covering url-expand-file-name.
-       * lisp/url/url-parse.el (url-generic-parse-url): Keep empty fragment
-       information in URL-struct.
-       * lisp/url/url-parse.el (url-path-and-query): Do not artificially turn empty
-       path and query into nil path and query, respectively.
-       * lisp/url/url-expand.el (url-expander-remove-relative-links): Do not turn
-       empty path into an absolute ("/") path.
-       * lisp/url/url-expand.el (url-expand-file-name): Properly resolve
-       fragment-only URIs. Do not just return them unchanged.
-       * lisp/url/url-expand.el (url-default-expander): An empty path in the relative
-       reference URI should not drop the last segment.
+       * lisp/gnus/nnir.el (nnir-request-update-mark):
+       Default to the original mark.
+       cf. <http://thread.gmane.org/gmane.emacs.gnus.general/86583>
+       and <http://thread.gmane.org/gmane.emacs.gnus.general/86640>
 
-       Backport:
+2016-01-19  Glenn Morris  <rgm@gnu.org>
 
-       (cherry picked from commit b792ecea1715e080ad8e232d3d154b8a25d2edfb)
+       * lisp/xwidget.el (report-xwidget-bug): Remove.
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+       (top-level): No longer require reporter.
 
-       Document 'url-user-agent'.
+2016-01-19  Joakim Verona  <joakim@verona.se>
+           Grégoire Jadi  <daimrod@gmail.com>
 
-       * lisp/url/url-http.el (url-user-agent): Move from here...
-       * lisp/url/url-vars.el (url-user-agent): ...to here.  This is to
-       keep all the URL defcustoms in one place, and also have it defined
-       whenever the URL library is loaded.
+       Support for the new Xwidget feature.
 
-       * doc/misc/url.texi (Customization): Document 'url-user-agent'.
+       * configure.ac:
+       (HAVE_XWIDGETS, WIDGET_OBJ, EMACS_CONFIG_FEATURES):
+       * xterm.c (x_draw_glyph_string, x_draw_bar_cursor):
+       * xdisp.c:
+       (handle_display_spec, handle_single_display_spec, push_it)
+       (pop_it, set_iterator_to_next, dump_glyph)
+       (calc_pixel_width_or_height, fill_xwidget_glyph_string)
+       (BUILD_XWIDGET_GLYPH_STRING, BUILD_GLYPH_STRINGS)
+       (produce_xwidget_glyph, x_produce_glyphs)
+       (get_window_cursor_type):
+       * window.c (Fdelete_window_internal):
+       * termhooks.h (e):
+       * print.c (print_object):
+       * lisp.h (ptrdiff_t):
+       * keyboard.c (kbd_buffer_get_event, make_lispy_event)
+       (syms_of_keyboard):
+       * emacs.c (main):
+       * dispnew.c (update_window, scrolling_window):
+       * dispextern.h (g, i):
+       * Makefile.in (XWIDGETS_OBJ, WEBKIT_CFLAGS, WEBKIT_LIBS)
+       (GIR_LIBS, ALL_CFLAGS, base_obj, LIBES):
+       * keyboard.c (kbd_buffer_get_event):
+       * emacsgtkfixed.c (emacs_fixed_gtk_widget_size_allocate)
+       (emacs_fixed_class_init): Add case for an xwidget view.
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+       * xwidget.c, xwidget.h, xwidget.el: New files for xwidgets
 
-       Document protocols supported by URL library via Tramp
 
-       * doc/misc/url.texi (Tramp): New node, describes the URL schemes
-       supported via Tramp.
-       (Supported URL Types, file/ftp, rlogin/telnet/tn3270): Mention
-       Tramp.
+       Various improvements to the Xwidget feature.
+       * xwidgets.c:
+       * emacsgtkfixed.c:
+       * xwidget.el:
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+2016-01-19  Eli Zaretskii  <eliz@gnu.org>
 
-       Document changes in Shell-script mode
+       Improve documentation of 'alist-get'
 
-       * lisp/progmodes/sh-script.el (sh-mode, sh-set-shell): Document
-       the 'sh-shell' file-local variable.
-       (top level): Add an auto-load form to avoid byte-compiler warning
-       about 'comint-send-string'.
+       * doc/lispref/variables.texi (Setting Generalized Variables): Add
+       'alist-get' to the list of functions that can appear in PLACE
+       argument of 'setf'.
 
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+2016-01-19  Eli Zaretskii  <eliz@gnu.org>
 
-       Fix documentation of 'ses-define-local-printer'
+       Minor copyedits of doc/emacs/maintaining.texi
 
-       * doc/misc/ses.texi (Printer functions): Fix whitespace between
-       sentences and punctuation.  Add an index entry for
-       'ses-define-local-printer'.
+       * doc/emacs/maintaining.texi (List Identifiers): More accurate
+       description of "C-M-i" wrt tags tables.
+       (Tags Tables): Move the definition of "tag" to a footnote.
 
-2015-12-26  Shakthi Kannan  <shakthimaan@gmail.com>
+2016-01-19  Eli Zaretskii  <eliz@gnu.org>
 
-       Document 'ert-summarize-tests-batch-and-exit'
+       Unbreak the Cygwin-w32 build
 
-       * doc/misc/ert.texi (Running Tests in Batch Mode): Document
-       'ert-summarize-tests-batch-and-exit'.
-
-2015-12-26  Eli Zaretskii  <eliz@gnu.org>
-
-       Avoid assertion violation in unbind_to
-
-       * src/eval.c (unbind_to) <SPECPDL_LET>: Avoid assertion violation
-       if we get here with an object that is not a symbol.  (Bug#14412)
-
-2015-12-25  Andreas Schwab  <schwab@linux-m68k.org>
-
-       Don't treat /foo/bar:mumble as ange-ftp address
-
-               * lisp/net/browse-url.el (browse-url-filename-alist): Match colons
-               only in the first component.  (bug#5362)
-
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
-
-       Follow <meta> redirects in eww
-
-       Merge conflict, but I think I resolved it.
-
-           Follow meta refresh tags in eww
-
-           * eww.el (eww-tag-meta): Follow meta refresh tags (bug#22234).
-
-       Backport:
+       * src/w32fns.c (globals_of_w32fns): Move the initialization of
+       resetstkoflw into a part that isn't compiled on Cygwin.
+       (Bug#22403)
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-01-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       Allow http://user:pass@foo/ URLs again
+       * shr.el (shr-table-body): Allow tables to have text children.
 
-       * lisp/url/url-auth.el (url-basic-auth): Allow explicit
-       user/passwords in URLs (bug#19046).
+2016-01-19  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       Backport:
+       Cope with multiple overlapping faces.
 
-       (cherry picked from commit b563715a2db265517d5a77f165a42afa1e233fdd)
+       * lisp/htmlfontify.el (hfy-face-to-style-i): Treat inheritance right to
+         left.
+         (hfy-face-resolve-face): Handle font specification as well as font
+         name. Documentation update. (Bug#21990)
 
-2015-12-25  Samer Masterson  <samer@samertm.com>
+2016-01-18  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Autoload url-insert-buffer-contents
+       Fix spurious escapes in describe-input-method
 
-       * lisp/url/url-handlers.el: Add autoload cookie so that
-       `package-list-packages' doesn't bug out (bug#21927) (tiny change)
+       Problem reported by Vincent Belaïche (Bug#22309).
+       * lisp/international/mule-cmds.el (describe-language-environment):
+       * lisp/international/quail.el (quail-help):
+       Apply substitute-command-keys to doc strings before displaying them.
 
-       Backport:
+2016-01-30  Nicolas Petton  <nicolas@petton.fr>
 
-       (cherry picked from commit 7a7b5b492ff9929eecd90c4564db6fbf3b192323)
+       Bump version to 25.0.90
 
-2015-12-25  Eli Zaretskii  <eliz@gnu.org>
+       * README:
+       * configure.ac:
+       * msdos/sed2v2.inp: Bump version to 25.0.90.
 
-       Make sure *scratch* etc. use forward slashes in its default-directory
+2016-01-30  Nicolas Petton  <nicolas@petton.fr>
 
-       * lisp/startup.el (normal-top-level): On MS-Windows, convert
-       backslashes to forward slashes while decoding default-directory
-       of the initially-created buffers.
+       * etc/AUTHORS: Update the AUTHORS file
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-01-30  Nicolas Petton  <nicolas@petton.fr>
 
-       More eww file name coding fixes
+       authors.el updates
 
-       * eww.el (eww-decode-url-file-name): Use the base coding
-       system to check for encodability.
+       * admin/authors.el (authors-renamed-files-alist): Additions.
 
-       Backport:
+2016-01-30  Nicolas Petton  <nicolas@petton.fr>
 
-       (cherry picked from commit a8627008abe4ab339df19b417776da28b3ce0fc7)
+       Make it possible to run make change-history on emacs-25
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+       * Makefile.in: Check if the current branch is emacs-25 instead of
+         master.
 
-       Always save eww history
+2016-01-30  lu4nx  <lx@shellcodes.org>
 
-       * eww.el (eww-setup-buffer): Always save history, even when
-       called from outside the eww buffer (bug#19638).
+       Support Go language in 'etags'
 
-       Backport:
+       * lib-src/etags.c <Ruby_help>: Fix documentation of Ruby tags.
+       <Go_help>: New help.
+       <Go_suffixes>: New variable.
+       (Go_functions): New function.
+       <lang_names>: Add entry for Go.  (Bug#22370)
 
-       (cherry picked from commit 2a0f18d9b6ce0ccce3d9c4a4a3b5743bae71b41e)
+       * doc/emacs/maintaining.texi (Tag Syntax): Document Go support.
+       * doc/man/etags.1: Mention Go support.
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+       * etc/NEWS: Mention Go support.
 
-       Default web pages to right-to-left
+       * test/etags/go-src/test.go:
+       * test/etags/go-src/test1.go: New test files.
+       * test/etags/Makefile (GOSRC): New variable.
+       (SRCS): Add $(GOSRC).
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to addition of Go tests.
 
-       * eww.el (eww-mode): Most web pages are left-to-right, so make
-       that the default (bug#19801).
+2016-01-30  Eli Zaretskii  <eliz@gnu.org>
 
-       * shr.el (shr-tag-html): Respect "dir" attributes
-       (left-to-right, right-to-left).
+       Improve Ruby support in 'etags'
 
-       Backport:
+       * lib-src/etags.c (Ruby_functions): Tag constants.  Don't tag
+       singleton classes.  Remove class qualifiers from tags generated
+       for method and constant names.  (Bug#22241)
 
-       (cherry picked from commit 9e089ec8a380ec3758fcf1564c5f86dc92c68c2a)
+       * doc/emacs/maintaining.texi (Tag Syntax): Mention that constants
+       are tagged by etags in Ruby.
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+       * etc/NEWS: Mention that constants are tagged by etags in Ruby.
 
-       Make toggling checkboxes work again
+       * test/etags/ruby-src/test1.ruby: Add more tests.
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to the changes in etags and in Ruby
+       tests.
 
-       * eww.el (eww-update-field): Make toggling checkboxes work
-       again (bug#21881).
+2016-01-30  Eli Zaretskii  <eliz@gnu.org>
 
-       Backport:
+       Adjust etags test results to changes in copyright years
 
-       (cherry picked from commit 5e56f606952e5e81b4d3a93ea70e791b74b33041)
+       * test/etags/CTAGS.good:
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6: Adjust to shift in characters and
+       in line numbers.
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-01-30  Andreas Schwab  <schwab@linux-m68k.org>
 
-       Don't store cookies with empty names
+       Revert "Re-enable checks in member, memql, delete to complain about non-lists"
 
-       * lisp/url/url-cookie.el (url-cookie-store): Refuse to store
-       cookies with empty names (bug#21936).
+       This reverts commit f524e8b7f12d9b5a8b92084e5385429fe7b085b9.
 
-       Backport:
+2016-01-30  Nicolas Petton  <nicolas@petton.fr>
 
-       (cherry picked from commit 9f0fd7cb1aec3eb9e2e0f7b8854c30870286d96c)
+       Make it possible to run make change-history on emacs-25
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+       * Makefile.in: Check if the current branch is emacs-25 instead of
+         master.
 
-       Stop rendering HTML before specdlr exhaustion
+2016-01-30  Dmitry Gutov  <dgutov@yandex.ru>
 
-       Fixes: 22117
+       Don't fiddle with DEFAULT
 
-       * shr.el (shr-descend): Stop rendering before we run out of
-       specpdl room (bug#22117).
+       * lisp/progmodes/project.el (project--completing-read-strict):
+       Don't change DEFAULT, whether is has any matches in
+       COLLECTION, or not.
 
-       Backport:
+2016-01-30  Eli Zaretskii  <eliz@gnu.org>
 
-       (cherry picked from commit 248da292fe46224b0b5a79b632c89cf4de2c2081)
+       Document xwidget commands and functions
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+       * doc/lispref/display.texi (Xwidgets): New section, describes some
+       of the xwidget primitives.
+       * doc/lispref/display.texi (Display): Update the chapter menu.
+       * doc/emacs/misc.texi (Embedded WebKit Widgets): New section.
+       * doc/emacs/emacs.texi (Top): Update the master menu to include
+       the xwidget node.
 
-       Use cl-reduce, not reduce.
+2016-01-30  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Backport:
+       Build fix for shr.el
 
-       (cherry picked from commit fe4606f93b91ff3d046aee0cf21ecc277af7a786)
+       * shr.el (seq): Require.
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+2016-01-30  Dmitry Gutov  <dgutov@yandex.ru>
 
-       Allow several <tbody> tags in shr
+       Improve project-find-file yet again!
 
-       * shr.el (shr-table-body): New function to find the real body
-       of a table.
-       (shr-tag-table): Use it to render several <tbody> tags in a
-       table (bug#22170).
+       * lisp/progmodes/project.el (project--completing-read-strict):
+       New function.
+       (project-find-file-in): Use it.
+       (project-file-completion-table): Move the default
+       implementation inside the cl-defgeneric form.
+       (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01720.html)
 
-       Backport:
+2016-01-30  Dmitry Gutov  <dgutov@yandex.ru>
 
-       (cherry picked from commit cdaf33029d6620073833876d76056045ecfbc7c4)
+       Don't pass DIR to 'hg status'
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/vc/vc-hg.el (vc-hg-dir-status-files):
+       Don't pass DIR to 'hg status' (bug#22481).
 
-       Make prettier unique file names in eww
+2016-01-30  Stephen Leake  <stephen_leake@stephe-leake.org>
 
-       (eww-make-unique-file-name): Make unique file names by making
-       files like foo(2).jpg instead of foo(1)(2).jpg.
+       Fix typo in previous commits
 
-       Backport:
+       * lisp/progmodes/project.el (project-find-file-in):
+       * lisp/vc/vc-mtn.el (vc-mtn-find-ignore-file): Fix typo in previous
+       commit.
 
-       (cherry picked from commit edfdd0a6cbdfa9e5e4bd0553e2b489401ca39266)
+2016-01-30  Stephen Leake  <stephen_leake@stephe-leake.org>
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+       Improve project-find-file
 
-       Decode hex-encoded URLs before using them as file names
+       * lisp/progmodes/project.el (project-file-completion-table): New.
+       (project-find-file, project-or-external-find-file): Default to filename
+       at point.
+       (project-file-completion-table): New, split out from
+       project--find-file-in.
+       (project-find-file-in): Renamed from project--find-file-in, use
+       project-file-completion-table.
 
-       * eww.el (eww-decode-url-file-name): New function.
-       (eww-download-callback): Use it to decode file names before
-       saving them.
+       * lisp/progmodes/xref.el (ede-minor-mode): New declaration.
+       (xref--find-ignores-arguments): Add doc string.
 
-       Backport:
+2016-01-30  Stephen Leake  <stephen_leake@stephe-leake.org>
 
-       (cherry picked from commit af22a010d87516c2a646572fb27512c03057784f)
+       Implement vc-mtn-find-ignore-file, fix some doc strings
 
-2015-12-25  Ashish SHUKLA  <ashish.is@lostca.se>
+       * lisp/cedet/cedet-global.el (cedet-gnu-global-root): Improve doc string.
 
-       Add FreeBSD cert bundle
+       * lisp/cedet/ede/locate.el (initialize-instance): Improve doc string.
 
-       * doc/misc/emacs-gnutls.texi (Help For Users): Document
-       FreeBSD bundle.
+       * lisp/vc/vc-git.el (vc-git-find-ignore-file): Fix doc string.
 
-       * lisp/net/gnutls.el (gnutls-trustfiles): Add FreeBSD cert bundle.
+       * lisp/vc/vc-mtn.el (vc-mtn-find-ignore-file): New function.
 
-       Backport:
+2016-01-23  Michael Albinus  <michael.albinus@gmx.de>
 
-       (cherry picked from commit 60c0f1a18ad88d6dc1a8f4ee5d9d18940eaeb6f7)
+       Improve user name completion in Tramp
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/net/tramp.el (tramp-parse-passwd, tramp-parse-etc-group):
+       Call also "getent passwd" or "getent group", if possible.
+       (tramp-parse-putty): Cache the result.
 
-       Ignore invalid SVG images
+2016-01-22  Michael Albinus  <michael.albinus@gmx.de>
 
-       * shr.el (shr-tag-svg): Ignore SVG images that have no width
-       or height, because these can't be displayed by ImageMagick,
-       anyway.
+       * etc/NEWS: Move kqueue entries to Emacs 25.1 sections.
 
-       Backport:
+2016-01-20  Glenn Morris  <rgm@gnu.org>
 
-       (cherry picked from commit 821107d53c2e390240d25c036b99ebbf9b4a93b6)
+       Remove handling of non-string time-stamp formats, obsolete for 20 years.
 
-2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+       * lisp/time-stamp.el (time-stamp-format): Doc fix.
+       (time-stamp-old-format-warn, time-stamp-fconcat): Remove.
+       (time-stamp-string): Ignore non-string formats.
 
-       shr table rendering fix
+2016-01-20  Eli Zaretskii  <eliz@gnu.org>
 
-       * shr.el (shr-tag-table): Allow rendering body-less tables
-       that have headers.
+       Anoter fix for problematic merge from emacs-25
 
-       Backport:
+       * src/w32fns.c (globals_of_w32fns): Move initialization of
+       resetstkoflw to a non-Cygwin part.
 
-       (cherry picked from commit b05471e42c17e02c56c87d7599ada0c124a5fe09)
+2016-01-20  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-12-25  Eli Zaretskii  <eliz@gnu.org>
+       * test/Makefile.in (mostlyclean): Use ${LOGFILES}.
 
-       Restore info about the build host in bug reports
+2016-01-20  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/mail/emacsbug.el (report-emacs-bug): Report the system on
-       which Emacs was built.  This is important information for
-       investigating bug reports reported by users who don't build their
-       Emacs.
+       Fix MS-Windows build broken by a botched merge from emacs-25
 
-2015-12-25  Eli Zaretskii  <eliz@gnu.org>
+       * src/w32.c (w32_crypto_hprov): New static variable.
+       (globals_of_w32): Initialize w32_crypto_hprov.
+       (w32_init_crypt_random, w32_init_random): New functions.
+       Include wincrypt.h.
+       * src/w32.h (w32_init_random): Add prototype.
 
-       Fix bootstrap broken by changes related to OS X file-name encoding
+2016-01-20  Vincent Belaïche  <vincentb1@users.sourceforge.net>
 
-       * lisp/international/ucs-normalize.el (eval-when-compile): Make
-       sure char-code-property-alist includes elements that allow access
-       to 'decomposition' and 'canonical-combining-class' Unicode
-       properties, as compiling ucs-normalize.el requires that.
-       * lisp/loadup.el (featurep 'ns): Load ucs-normalize and ns-win
-       only of charprop.el was already loaded.
+       Correct a whole bunch of bugs coming with renamed cell relocation.
 
-       * src/Makefile.in ($(lispsource)/international/ucs-normalize.elc):
-       New order-only dependency.
+       * lisp/ses.el (ses-localvars): rename variable
+       `ses--renamed-cell-symb-list' into `ses--in-killing-named-cell-list'
+       and adjust the comment about it.
+       (ses-plist-delq): new defun.
+       (ses--ses-buffer-list): new defvar.
+       (ses--unbind-cell-name): new defun.
+       (ses-relocate-symbol): Do not relocate symbol when it is a named cell.
+       (ses-relocate-formula): Undo change of
+       2011-12-27T19:30:39Z!vincentb1@users.sourceforge.net that was
+       preventing relocation for named cell --- now doing this is delegated
+       to function `ses-relocate-symbol'.
+       (ses-relocate-range): In docstring, undo change of
+       2016-01-03T07:31:52Z!johnw@newartisans.com, `ses-range' must remain
+       lower case as it is not a variable.
+       (ses-relocate-all): Cell name relocation : 1) check that cell is a
+       renamed cell by testing `ses-cell' property to :ses-named, rather than
+       comparing name to corresponding standard name. Set rowcol of renamed
+       cell into the hashmap --- `ses-cell' property must not be used for
+       that as the same name can be used for different locations in different
+       SES sheets ; 2) use `local-variable-if-set-p' rather than `boundp' and
+       `local-variable-p' to check if cell name is already in use in this
+       sheet or needs initialization.
+       (ses-relocate-all): Cell value relocation : 1) like for name
+       relocation use the `ses-cell' property rather than comparing actual
+       name to corresponding standard name. 2) Correct bug introduced in
+       2011-12-27T19:30:39Z!vincentb1@users.sourceforge.net, as the test was
+       made the other way round than the intention --- ie value relocation
+       was disabled for standard cell, not for renamed cell as was the
+       intention.
+       (ses-relocate-all): Add loop for unbinding deleted renamed cells
+       names.
+       (ses-killbuffer-hook): new defun.
+       (ses-mode): Add the ses--ses-buffer-list maintenance mechanism ---
+       kill buffer hook, plus pushing current buffer if new in list.
+       (ses-delete-row, ses-delete-column): Collect deleted renamed cells
+       into `ses--in-killing-named-cell-list'.
+       (ses-rename-cell): Remove update of variable
+       `ses--renamed-cell-symb-list', this variable is renamed to
+       `ses--in-killing-named-cell-list', and its setting is done in
+       functions `ses-delete-row' and , `ses-delete-column' now.
+       (ses-rename-cell): Make cell new name a buffer local variable.
+       (ses-rename-cell): Change correction of
+       2015-12-30T23:10:37Z!vincentb1@users.sourceforge.net concerning
+       computation of the range over which `cursor-intangible' property was
+       to be updated. This correction was ok for non spilling cells, but not
+       for cells spilling over following blank cells. Simply use
+       `next-single-property-change' rather than computing the end column
+       from column widths.
 
-2015-12-25  Leo Liu  <sdl.web@gmail.com>
+2016-01-19  John Wiegley  <johnw@newartisans.com>
 
-       * lisp/ido.el (ido-add-virtual-buffers-to-list): Use bookmark-get-filename.
+       Merge from origin/emacs-25
 
-2015-12-25  Michael Albinus  <michael.albinus@gmx.de>
+       3ae7934 ; * etc/NEWS: Mark entries that don't need further treatment.
+       6165c36 * lisp/files.el (dir-locals--all-files): Respect absolute file-names
+       2ffdf15 * lisp/help-fns.el (describe-variable): Fix a left-over parenthesis
+       71ecd62 * lisp/dired-x.el (dired-omit-here-always): Use add-dir-local-variable
+       f0b82b3 * lisp/files.el (dir-locals--all-files): Use completion instead of wildcards
+       86e4513 Fix incompatbilities with MS-Windows 2000 and older
+       4e96521 Mention in PROBLEMS an issue with MS-Windows NT4
+       15c23aa Ensure 8-byte aligned memory allocation on MS-Windows 9X
+       39afa42 Fix tests for active region in hideif.el
+       05df666 Fix interactive specs in some hideif.el commands
 
-       Make tramp-test29-vc-registered more robust
+2016-01-19  John Wiegley  <johnw@newartisans.com>
 
-       * test/automated/tramp-tests.el (tramp-test29-vc-registered):
-       Move `bzr' case down.  Skip test when `vc-create-repo' fails.
-       Remove instrumentation.
+       -
 
-2015-12-24  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+2016-01-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/term/x-win.el (x-gtk-stock-map): Fix typo.
+       Avoid stdio in SIGINT handler
 
-2015-12-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * admin/merge-gnulib (GNULIB_MODULES): Add ignore-value.
+       * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
+       * lib/ignore-value.h: New file, from gnulib.
+       * src/keyboard.c: Include it.
+       (write_stdout, read_stdin): New functions.
+       (handle_interrupt): Use them instead of printf and getchar,
+       and avoid fflush when handling signals.
 
-       Fix `gnus-union' so as to behave like `cl-union'
+2016-01-19  Jens Lechtenboerger  <jens.lechtenboerger@fsfe.org>
 
-       * lisp/gnus/gnus-group.el (gnus-group-prepare-flat):
-       Make gnus-union use `equal' to compare items in lists.
+       Refactor mml-smime.el, mml1991.el, mml2015.el
 
-       * lisp/gnus/gnus-util.el (gnus-union):
-       Make it behave like cl-union partially.
+       (Maybe this is the last merge from Gnus git to Emacs git)
 
-2015-12-23  Paul Eggert  <eggert@cs.ucla.edu>
+       Cf. discussion on ding mailing list, messages in
+       <http://thread.gmane.org/gmane.emacs.gnus.general/86228>.
+       Common code from the three files mml-smime.el, mml1991.el, and
+       mml2015.el is moved to mml-sec.el.  Auxiliary functions are added
+       to gnus-util.el.
 
-       Fix dired.c typo with ptrdiff_t vs Lisp_Object
+       The code is supported by test cases with necessary test keys.
 
-       * src/dired.c (file_name_completion): Don't assume Lisp_Object is
-       an integer type, fixing a problem introduced in the recent fix for
-       Bug#22169.
+       Documentation in message.texi is updated.
 
-2015-12-23  Eli Zaretskii  <eliz@gnu.org>
+       * doc/misc/message.texi (Security, Using S/MIME):
+       Update for refactoring mml-smime.el, mml1991.el, mml2015.el.
+       (Using OpenPGP): Rename from "Using PGP/MIME"; update contents.
+       (Passphrase caching, Encrypt-to-self, Bcc Warning): New sections.
 
-       Document default process sentinel more prominently
+       * lisp/gnus/gnus-util.el (gnus-test-list, gnus-subsetp, gnus-setdiff):
+       New functions.
 
-       * doc/lispref/processes.texi (Asynchronous Processes): Mention the
-       defaults for process filter and sentinel.  Provide cross-references.
-       (Process Information): Provide cross-references to where filters
-       and sentinels are described.
-       (Filter Functions): Add an index entry for "default filter".
-       (Sentinels): Add a few status messages not documented previously.
-       Resolve the "killed" confusion.  Document and describe the default
-       sentinel.  (Bug#22220)
+       * lisp/gnus/mml-sec.el: Require gnus-util and epg.
+       (epa--select-keys): Autoload.
+       (mml-signencrypt-style-alist, mml-secure-cache-passphrase): Doc fix.
+       (mml-secure-openpgp-signers): New user option;
+       make mml1991-signers and mml2015-signers obsolete aliases to it.
+       (mml-secure-smime-signers): New user option;
+       make mml-smime-signers an obsolete alias to it.
+       (mml-secure-openpgp-encrypt-to-self): New user option;
+       make mml1991-encrypt-to-self and mml2015-encrypt-to-self obsolete
+       aliases to it.
+       (mml-secure-smime-encrypt-to-self): New user option;
+       make mml-smime-encrypt-to-self an obsolete alias to it.
+       (mml-secure-openpgp-sign-with-sender): New user option;
+       make mml2015-sign-with-sender an obsolete alias to it.
+       (mml-secure-smime-sign-with-sender): New user option;
+       make mml-smime-sign-with-sender an obsolete alias to it.
+       (mml-secure-openpgp-always-trust): New user option;
+       make mml2015-always-trust an obsolete alias to it.
+       (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
+       New user options.
+       (mml-secure-cust-usage-lookup, mml-secure-cust-fpr-lookup)
+       (mml-secure-cust-record-keys, mml-secure-cust-remove-keys)
+       (mml-secure-add-secret-key-id, mml-secure-clear-secret-key-id-list)
+       (mml-secure-cache-passphrase-p, mml-secure-cache-expiry-interval)
+       (mml-secure-passphrase-callback, mml-secure-check-user-id)
+       (mml-secure-secret-key-exists-p, mml-secure-check-sub-key)
+       (mml-secure-find-usable-keys, mml-secure-select-preferred-keys)
+       (mml-secure-fingerprint, mml-secure-filter-keys)
+       (mml-secure-normalize-cust-name, mml-secure-select-keys)
+       (mml-secure-select-keys-1, mml-secure-signer-names, mml-secure-signers)
+       (mml-secure-self-recipients, mml-secure-recipients)
+       (mml-secure-epg-encrypt, mml-secure-epg-sign): New functions.
 
-2015-12-23  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/gnus/mml-smime.el: Require epg;
+       refactor declaration and autoloading of epg functions.
+       (mml-smime-use): Doc fix.
+       (mml-smime-cache-passphrase, mml-smime-passphrase-cache-expiry):
+       Obsolete.
+       (mml-smime-get-dns-cert, mml-smime-get-ldap-cert):
+       Use format instead of gnus-format-message.
+       (mml-smime-epg-secret-key-id-list): Remove variable.
+       (mml-smime-epg-passphrase-callback, mml-smime-epg-find-usable-key)
+       (mml-smime-epg-find-usable-secret-key): Remove functions.
+       (mml-smime-epg-sign, mml-smime-epg-encrypt): Refactor.
 
-       Fix file-name completion on OS X
+       * lisp/gnus/mml1991.el (mml1991-cache-passphrase)
+       (mml1991-passphrase-cache-expiry): Obsolete.
+       (mml1991-epg-secret-key-id-list): Remove variable.
+       (mml1991-epg-passphrase-callback, mml1991-epg-find-usable-key)
+       (mml1991-epg-find-usable-secret-key): Remove functions.
+       (mml1991-epg-sign, mml1991-epg-encrypt): Refactor.
 
-       * src/dired.c (file_name_completion): Reject false matches due to
-       file-name-coding-systems that decompose characters when encoding
-       file names, by comparing decoded file names as well.  (Bug#22169)
-       (syms_of_dired) <Qdecomposed_characters>: New DEFSYM.
+       * lisp/gnus/mml2015.el (mml2015-cache-passphrase)
+       (mml2015-passphrase-cache-expiry): Obsolete.
+       (mml2015-epg-secret-key-id-list): Remove variable.
+       (mml2015-epg-passphrase-callback, mml2015-epg-check-user-id)
+       (mml2015-epg-check-sub-key, mml2015-epg-find-usable-key)
+       (mml2015-epg-find-usable-secret-key): Remove functions.
+       (mml2015-epg-decrypt, mml2015-epg-clear-decrypt, mml2015-epg-sign)
+       (mml2015-epg-encrypt): Refactor.
 
-       * lisp/international/ucs-normalize.el (utf-8-hfs): Give it a
-       non-nil 'decomposed-characters' property.
+2016-01-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-23  Anders Lindgren  <andlind@gmail.com>
+       Merge from gnulib
 
-       File-name completion of non-ASCII characters on OS X (bug#22169)
+       This mostly just updates copyright dates of gnulib files.
+       It also updates to the latest version of texinfo.tex.
 
-       The coding system `utf-8-nfd', locally defined in ns-win.el,
-       didn't provide a :pre-write-conversion method, causing file name
-       completion of non-ASCII characters to fail.  Solved by using the
-       `utf-8-hfs' coding system provided by `ucs-normalize'.
+2016-01-19  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 
-       * lisp/loadup.el: Load international/ucs-normalize (when building
-       for ns).
+       Move variables to inner loop, preparing for Mac port merge
 
-       * lisp/term/ns-win.el (utf-8-nfd): Made `utf-8-nfd' as alias for
-       `utf-8-hfs' and removed the old implementation.  Set `utf-8-hfs'
-       as the file name coding system.
+       * src/keyboard.c (command_loop_1): Move variables `cmd',
+       `keybuf', and `i' to inner loop.
 
-       * src/nsfns.m (ns-convert-utf8-nfd-to-nfc): Removed.
+2016-01-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-23  Tom Tromey  <tom@tromey.com>
+       Minor improvements to (random t) documentation
 
-       Fix bug #18588 by making bug-reference-bug-regexp more lenient
+       * doc/lispref/numbers.texi (Random Numbers):
+       * src/fns.c (Frandom):
+       Omit unnecessary details about randomness fallback.
+       Say that it is a fallback.
 
-       * lisp/progmodes/bug-reference.el (bug-reference-bug-regexp): Accept
-       "bug NNNN".  (Bug #18588)
+2016-01-19  Dmitry Gutov  <dgutov@yandex.ru>
 
-2015-12-23  Tom Tromey  <tom@tromey.com>
+       Rename methods in Ruby etags example file
 
-       add some cl-* aliases to lisp-mode imenu
+       * test/etags/ruby-src/test.rb: Rename the example methods to
+       correspond to the common terminology used in Ruby.
+       * test/etags/CTAGS.good:
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6: Adjust accordingly.
 
-       * (lisp-imenu-generic-expression): Add cl-define-compiler-macro,
-       cl-defgeneric, and cl-defmethod.
+2016-01-18  Dmitry Gutov  <dgutov@yandex.ru>
 
-2015-12-22  Tom Tromey  <tom@tromey.com>
+       Propertize backtick in 'def `(abc)' as symbol constituent
 
-       Make a variable buffer-local
+       * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize):
+       Propertize backtick in 'def `(abc)' as symbol constituent.
+       (ruby-syntax-propertize-function):
+       Rename to ruby-syntax-propertize.
 
-       * lisp/generic-x.el (generic-rul-mode-setup-function): Make
-       font-lock-syntax-table buffer-local.  (Bug #21627)
+2016-01-18  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-22  Eli Zaretskii  <eliz@gnu.org>
+       Fix scrolling under scroll-preserve-screen-position on TTY
 
-       Fix decoding of text in URLs retrieved by EWW
+       * src/window.c (window_scroll_line_based): When setting point to
+       preserve screen coordinates, don't let cursor enter either of the
+       two scroll margins.  (Bug#22395)
 
-       * lisp/net/eww.el (eww-render): Pass 'charset' to
-       'eww-display-raw'.  Use the value of 'last-coding-system-used', if
-       non-nil, to set 'buffer-file-coding-system' of the buffer where we
-       show the URL.
-       (eww-display-html, eww-display-raw): Decode the text correctly,
-       using the charset found in the headers, and defaulting to UTF-8.
-       If the user told us to use a specific encoding, override the
-       charset from the headers.  (Bug#22222)
+2016-01-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-2015-12-22  Alan Mackenzie  <acm@muc.de>
+       Fix shr table rendering of nested tables
 
-       Fix a coding error in c-forward-<>-arglist-recur.  Fixes bug#22156
+       * shr.el (shr-table-body): Don't include all tbodies in nested
+       tables in the levels above.
 
-       * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur): Remove unused
-       variable `tmp'.
-       After a failed search for a matching ">", restore point before continuing.
+2016-01-18  Dmitry Gutov  <dgutov@yandex.ru>
 
-2015-12-22  Michael Albinus  <michael.albinus@gmx.de>
+       * lisp/progmodes/project.el (project--read-regexp): Quote the identifier.
 
-       Instrument Tramp tests
+2016-01-18  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * test/automated/tramp-tests.el (tramp-test29-vc-registered)
-       (tramp--test-utf8): Instrument tests.
+       Add xref-based replacements for Dired search commands
 
-2015-12-22  Martin Rudalics  <rudalics@gmx.at>
+       * lisp/dired-aux.el (dired-do-find-regexp)
+       (dired-do-find-regexp-and-replace): New commands.
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00864.html
 
-       Fix `display-buffer' call in `display-message-or-buffer' (Bug#22221)
+       * lisp/dired.el (dired-mode-map): Change bindings for `A' and
+       `Q' to the new commands.
 
-       * lisp/simple.el (display-message-or-buffer): Call
-       `display-buffer' with ACTION instead of NOT-THIS-WINDOW
-       (Bug#22221).
+       * lisp/progmodes/xref.el (xref-query-replace)
+       (xref-collect-matches): Add progress reporters.
+       (xref--find-ignores-arguments): Return nil for zero ignores.
+       (xref--show-xrefs): Add an optional argument.
+       (xref-collect-matches): Drop the assert.  'find' accepts a
+       regular file in place of directory argument, too.
 
-2015-12-22  Juri Linkov  <juri@linkov.net>
+2016-01-18  Alan Mackenzie  <acm@muc.de>
 
-       * lisp/saveplace.el (toggle-save-place, save-place-to-alist)
+       * doc/lispref/frames.texi (Position Parameters): Say they don't exist on TTYs.
 
-       (save-places-to-alist, save-place-dired-hook):
-       Check for dired-subdir-alist.  (Bug#19851)
+2016-01-18  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-21  Paul Eggert  <eggert@cs.ucla.edu>
+       Improve user documentation of Xref
 
-       Add FIXME comment re stack overflow and modules
+       * doc/emacs/maintaining.texi (Xref, Find Identifiers)
+       (Looking Up Identifiers, Identifier Search, List Identifiers):
+       Adjudicate comments by Dmitry Gutov <dgutov@yandex.ru>.  See
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00650.html
+       for the details.
 
-2015-12-21  Paul Eggert  <eggert@cs.ucla.edu>
+2016-01-18  Eli Zaretskii  <eliz@gnu.org>
 
-       Revert some recent emacs-module commentary
+       Fix scrolling under scroll-preserve-screen-position and margins
 
-       Most of the recently-added commentary was incorrect, due to the
-       possibility of stack overflow.
+       * src/window.c (window_scroll_pixel_based): When setting point to
+       preserve screen coordinates, don't let cursor enter either of the
+       two scroll margins.  Fix incorrect usage of
+       WINDOW_WANTS_HEADER_LINE_P and use WINDOW_HEADER_LINE_HEIGHT
+       instead of CURRENT_HEADER_LINE_HEIGHT.  (Bug#22395)
 
-2015-12-21  Paul Eggert  <eggert@cs.ucla.edu>
+2016-01-18  Eli Zaretskii  <eliz@gnu.org>
 
-       Spelling fix: prefer "cooperate" to "co-operate"
+       Unbreak the MS-Windows build
 
-2015-12-21  Paul Eggert  <eggert@cs.ucla.edu>
+       * src/sysdep.c (emacs_gnutls_global_init, gnutls_rnd): Disable for
+       WINDOWSNT, to avoid link failure.  (Bug#22202)
 
-       Port undo fixes to -fno-common
+2016-01-18  Alan Mackenzie  <acm@muc.de>
 
-       Port recent fix for Bug#21968 to platforms like 'gcc -fno-common'.
-       * src/keyboard.c, src/keyboard.h (point_before_last_command_or_undo)
-       (buffer_before_last_command_or_undo):
-       Declare in keyboard.h, and define in keyboard.c,
-       instead of assuming the traditional Unix relaxed ref-def linkage.
+       Desktop: protect users against inadvertant upgrading of desktop file.
 
-2015-12-20  Philipp Stephani  <phst@google.com>
+       An upgraded (version 208) desktop file cannot be read in Emacs < 25.
 
-       Improve commentary for emacs-module.c
+       * etc/NEWS: Add an entry about upgrading a desktop file.
 
-       * src/lisp.h: Document emacs-module.c assumptions about EQ and NILP.
-       * src/emacs-module.c (module_non_local_exit_get): Document that we
-       cannot use the current implementation.
-       (module_is_not_nil, module_eq): Document assumptions about EQ and
-       NILP.
+       * lisp/desktop.el (desktop-file-version): Amend doc string.
+       (desktop-native-file-version, desktop-io-file-version): new variables.
+       (desktop-clear): Set desktop-io-file-version to nil.
+       (desktop-buffer-info): make the presence of the last item on the list
+       conditional on (>= desktop-io-file-version 208).
+       (desktop-save): Add extra parameter VERSION to take user's C-u or C-u C-u.
+       Amend the doc string.  Add code to determine the output file version.
+       (desktop-create-buffer): Set desktop-io-file-version to the input file's
+       version.
 
-2015-12-20  Michael Albinus  <michael.albinus@gmx.de>
+2016-01-17  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Suppress test on Mac OS X
+       Initialize GnuTLS before calling gnutls_rnd
 
-       * test/automated/tramp-tests.el (tramp--test-darwin-p): New defun.
-       (tramp--test-utf8): Use it.
+       * src/gnutls.c (emacs_gnutls_global_init): Now extern.
+       Don’t set gnutls_global_initialized if gnutls_global_init fails.
+       * src/sysdep.c: Include "gnutls.h", and <gnutls/crypto.h>
+       if 2.12 or later, which has gnutls_rnd.
+       (emacs_gnutls_global_init, gnutls_rnd): New fallback
+       placeholder macros if before 2.12.
+       (init_random): Initialize gnutls globals before trying to
+       use gnutls_rnd.
 
-2015-12-20  Alan Mackenzie  <acm@muc.de>
+2016-01-17  Andreas Schwab  <schwab@linux-m68k.org>
 
-       Merge branch 'scratch/follow' into emacs-25
+       Don't use GnuTLS before it is initialized
 
-       This allows Isearch, etc., to work well when Follow Mode is active.
+               * src/sysdep.c (init_random): Don't use gnutls_rnd.
 
-2015-12-19  Michael Albinus  <michael.albinus@gmx.de>
+2016-01-17  Bill Wohler  <wohler@newt.com>
 
-       * lisp/net/tramp-sh.el (tramp-get-ls-command-with-w-option): Improve check.
+       * mh-e.el (mh-version): Add +git to version.
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+2016-01-17  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Fix last commit
+       Port cleanup attribute to OpenBSD
 
-       * doc/emacs/rmail.texi (Rmail Deletion): Document new behavior of 'u'
-       with numeric argument.
+       The OpenBSD C compiler issues false alarms about strcpy, strcat, and
+       sprintf, and this messes up 'configure' when it tests for the cleanup
+       attribute.  Work around the problem by using __has_attribute directly.
+       Problem reported by Joakim Jalap (Bug#22385).
+       * configure.ac: Don’t use AX_GCC_VAR_ATTRIBUTE.
+       * m4/ax_gcc_var_attribute.m4: Remove.
+       * src/conf_post.h (__has_attribute): Provide a substitute, for
+       non-GCC or older GCC compilers.  All uses changed to assume
+       the substitute.  Check for the cleanup attribute.
+       * src/emacs-module.c (module_has_cleanup): Just use __has_attribute.
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+2016-01-17  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Document new features of Rmail
+       Prefer GnuTLS when acquiring random seed
 
-       * doc/emacs/rmail.texi (Rmail Summary Edit, Rmail Deletion):
-       Document new behavior of 'd' and 'C-d' with numeric argument.
-       (Rmail Display): Document the rendering of HTML MIME parts.
+       This attempts to improve on the fix for Bug#22202.
+       * configure.ac (HAVE_DEV_URANDOM): Remove.
+       Check /dev/urandom existence at run time, not at build time,
+       since the device could exist in the former but not the latter.
+       * src/sysdep.c [HAVE_GNUTLS]: Include gnutls/gnutls.h.
+       (gnutls_rnd) [GNUTLS_VERSION_NUMBER < 0x020c00]: New fallback macro.
+       (random_seed): New typedef.
+       (set_random_seed): New static function.
+       (seed_random): Use them.
+       (init_random): Use random_seed instead of uintmax_t, so as to
+       not consume more entropy than needed.  Prefer gnutls_rnd if it
+       works; this avoids a redundant open of /dev/urandom on
+       GNU/Linux with modern GnuTLS.
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-       Improve documentation of new cl-lib functions
+       Improve documentation of dynamic modules
 
-       * doc/misc/cl.texi (Predicates on Numbers, Numerical Functions):
-       Fix wording.
+       * doc/lispref/loading.texi (How Programs Do Loading): Update the
+       description of searching for files in 'load' when Emacs was built
+       with support for dynamic modules.
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-       Document the new feature of 'minibuffer-with-setup-hook'
+       * INSTALL: Document --with-modules.
 
-       * lisp/files.el (minibuffer-with-setup-hook): Clarify how FUN is
-       added to `minibuffer-setup-hook'.
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+       Document 'function-put'
 
-       Document new features of Font Lock
+       * doc/lispref/symbols.texi (Symbol Plists): Document
+       'function-put'.  Update documentation of 'function-get'.
 
-       * doc/lispref/modes.texi (Other Font Lock Variables): Document
-       'font-lock-flush-function' and 'font-lock-ensure-function'.
-       (Font Lock Basics): Document the basic fontification functions
-       referenced in "Other Font Lock Variables".
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/font-lock.el (font-lock-flush, font-lock-ensure): Doc fix.
+       Document 'funcall-interactively'
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+       * doc/lispref/commands.texi (Interactive Call): Document
+       'funcall-interactively'.
+       * doc/lispref/functions.texi (Calling Functions): Mention
+       'funcall-interactively' and provide a cross-reference.
 
-       Document new features of Rectangle mode
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-       * doc/emacs/killing.texi (Rectangles): Document "C-x C-x" in
-       rectangle-mark-mode.
+       * doc/lispref/lists.texi (Association Lists): Document 'alist-get'.
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+       * doc/lispref/strings.texi (Text Comparison): Document 'string-greaterp'.
 
-       Manual followup to last change
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-       * doc/lispref/display.texi (Displaying Messages): Sync with the
-       doc string.  (Bug#22210)
+       Document renaming of selection-related functions
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+       * doc/lispref/frames.texi (Window System Selections): Rename "x-*"
+       functions into the corresponding "gui-*" functions.  Make the
+       description slightly less X-centric.
 
-       Clarify doc string of 'display-message-or-buffer'
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/simple.el (display-message-or-buffer): Doc fix.  Suggested
-       by Sebastian Wiesner <swiesner@lunaryorn.com>.  (Bug#22210)
+       * doc/lispref/macros.texi (Expansion): Document 'macroexpand-1'.
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-       * doc/emacs/emacs.texi (Top): Update top-level menus.
+       Document 'define-inline'
 
-       * doc/lispref/elisp.texi (Top): Update top-level menus.
+       * doc/lispref/functions.texi (Defining Functions): Document
+       'define-inline' and related macros.
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/emacs-lisp/inline.el (inline-letevals): Doc fix.
 
-       Document how to avoid file-local variables that aren't
+2016-01-16  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * doc/emacs/custom.texi (Specifying File Variables): Describe how
-       to prevent Emacs from interpreting unrelated text as file-local
-       variables.  (Bug#22166)
+       * lisp/files.el (dir-locals--all-files): Respect absolute file-names
 
-2015-12-19  Dave Thomas  <dave@pragprog.org>  (tiny change)
+       * lisp/help-fns.el (describe-variable): Fix a left-over parenthesis
 
-       Fix a typo in eterm-color's termcap entry
+2016-01-16  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * lisp/term.el (term-termcap-format): Fix a typo in the "ue="
-       entry.  (Bug#22184)
+       * lisp/dired-x.el (dired-omit-here-always): Use add-dir-local-variable
 
-2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+       instead of manually writing a dir-locals file.
 
-       Allow 'browse-url-emacs' visit non-existent URLs
+2016-01-16  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * lisp/url/url-handlers.el (url-insert-file-contents): Don't
-       signal an error if VISIT is non-nil, to more faithfully emulate
-       the behavior of 'insert-file-contents'.  (Bug#22160)
+       * lisp/files.el (dir-locals--all-files): Use completion instead of wildcards
 
-2015-12-19  Paul Eggert  <eggert@cs.ucla.edu>
+       (dir-locals-file)
+       * lisp/files-x.el (modify-dir-local-variable)
+       * lisp/dos-fns.el (dosified-file-name)
+       * lisp/help-fns.el (describe-variable): Change accordingly.
 
-       Remove SunOS 4.x cruft
+2016-01-16  Jussi Lahdenniemi  <jussi@aprikoodi.fi>  (tiny change)
 
-       Support for SunOS 4.x was removed in Emacs 23 but some cruft was left behind.
-       * lib-src/pop.c [sun]: Remove no-longer-needed include.
-       * lwlib/xlwmenu.c (SUNSO41): Remove.
+       Fix incompatbilities with MS-Windows 2000 and older
 
-2015-12-19  Paul Eggert  <eggert@cs.ucla.edu>
+       * src/w32.c <multiByteToWideCharFlags>: New global variable.
+       (filename_to_utf16, filename_from_ansi, check_windows_init_file):
+       Use it instead of the literal MB_ERR_INVALID_CHARS.
+       (maybe_load_unicows_dll): Initialize multiByteToWideCharFlags as
+       appropriate for the underlying OS version.  For details, see
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00835.html.
+       * src/w32.h: Declare multiByteToWideCharFlags.
+       * src/w32fns.c (Fx_file_dialog, Fw32_shell_execute)
+       (add_tray_notification): Use multiByteToWideCharFlags instead of
+       the literal MB_ERR_INVALID_CHARS.
+       (_resetstkoflw_proc): New typedef.
+       (w32_reset_stack_overflow_guard): Call _resetstkoflw via a
+       pointer, as this function is absent in msvcrt.dll shipped with W2K
+       and older systems.
 
-       Merge from gnulib
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-       This mostly commentary fixes.
-       * doc/misc/texinfo.tex, lib/intprops.h: Copy from gnulib.
-       * lib/gnulib.mk: Regenerate with new gnulib-tool.
+       Mention in PROBLEMS an issue with MS-Windows NT4
 
-2015-12-18  Michael Albinus  <michael.albinus@gmx.de>
+       * etc/PROBLEMS (MS-Windows): Mention the problem with Shell32.dll
+       on Windows NT4.  For the details, see
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00835.html.
 
-       Minor fixes in Tramp
+2016-01-16  Jussi Lahdenniemi  <jussi@aprikoodi.fi>  (tiny change)
 
-       * lisp/net/tramp-sh.el (tramp-do-file-attributes-with-ls):
-       Reorder ls arguments.
+       Ensure 8-byte aligned memory allocation on MS-Windows 9X
 
-       * lisp/net/tramp.el (tramp-dissect-file-name): Fix docstring.
+       * src/w32heap.c (init_heap): Redirect malloc, realloc, and free to
+       special functions on Windows 9X.  Refuse to dump Emacs on Windows 9X.
+       (malloc_after_dump_9x, realloc_after_dump_9x)
+       (free_after_dump_9x): New functions.  (Bug#22379)  See also
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00852.html
+       for more details about the original problem.
 
-2015-12-18  Michael Albinus  <michael.albinus@gmx.de>
-
-       Make tramp a built-in package
+       * nt/inc/ms-w32.h (malloc_after_dump_9x, realloc_after_dump_9x)
+       (free_after_dump_9x): Add prototypes.
 
-       * lisp/finder.el (finder-compile-keywords): Update
-       `package--builtins' also when Version: keyword is available.
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/net/trampver.el: Add Version: keyword.
-       (tramp-version): Change it to "2.2.13.25.1", in order to be
-       compatible with `version-to-list'.
+       Fix tests for active region in hideif.el
 
-2015-12-18  Lele Gaifax  <lele@metapensiero.it>
+       * lisp/progmodes/hideif.el (hif-evaluate-macro, hide-ifdef-block): Use
+       'use-region-p' to test whether to operate on region, instead of
+       testing 'mark-active'.
 
-       * etc/tutorials/TUTORIAL.it: Update and fix typos.
+2016-01-16  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-18  Alan Mackenzie  <acm@muc.de>
+       Fix interactive specs in some hideif.el commands
 
-       Rename `recenter-group' to `recenter-window-group'
+       * lisp/progmodes/hideif.el (hif-evaluate-macro)
+       (hide-ifdef-undef, show-ifdef-block): Don't use '(interactive "r")'
+       in commands that should only act on the region if it's active.
 
-       * doc/lispref/windows.texi (Textual Scrolling)
-       * lisp/window.el (top level, recenter-group)
-       * lisp/follow.el (follow-mode)
-       * lisp/isearch.el (isearch-back-into-window): Rename `recenter-group' to
-       `recenter-window-group' and `recenter-group-function' to
-       `recenter-window-group-function'.
+2016-01-15  Phillip Lord  <phillip.lord@russet.org.uk>
 
-2015-12-18  Eli Zaretskii  <eliz@gnu.org>
+       Enable test selector from command line
 
-       Fix vertical-motion in tabulated-list mode
+       * test/automated/Makefile.in: Change variable manipulation to avoid
+         over-writing selector.
 
-       * src/indent.c (Fvertical_motion): When moving from line beginning
-       to point under line truncation, assume overshoot by one line only
-       if point actually lies beyond the window's right margin.
-       (Bug#22194)
+2016-01-15  Alan Mackenzie  <acm@muc.de>
 
-2015-12-18  Martin Rudalics  <rudalics@gmx.at>
+       Don't confuse "::" with ":" when trying to parse member initializers.
 
-       Don't have help functions call x-display-pixel-width/-height on ttys
+       * lisp/progmodes/cc-engine.el (c-back-over-member-initializers): Check
+       more robustly for ":" token when searching backwards for it.
 
-       * lisp/help.el (temp-buffer-max-height, temp-buffer-max-width):
-       Don't call x-display-pixel-width/-height on ttys.
+       * lisp/progmodes/cc-langs (c-:$-multichar-token-regexp): New language
+       variable.
 
-2015-12-18  Dmitry Gutov  <dgutov@yandex.ru>
+2016-01-15  Eli Zaretskii  <eliz@gnu.org>
 
-       Use 'hg id' in vc-hg-previous-revision
+       Ensure positive number of glyphs for margins of positive width
 
-       * lisp/vc/vc-hg.el (vc-hg-previous-revision):
-       Use 'hg id' to retrieve it (bug#22032).
+       * src/dispnew.c (margin_glyphs_to_reserve): Always return a
+       positive value when a non-zero width of the marginal area was
+       requested.  (Bug#22356)
 
-2015-12-17  Alan Mackenzie  <acm@muc.de>
+2016-01-15  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/follow.el (follow-sit-for): Remove (it's redundant).
+       Fix crashes when mini-window has non-zero margins
 
-2015-12-17  Eli Zaretskii  <eliz@gnu.org>
+       * src/window.c (resize_frame_windows): Use 'new_size' to set
+       minibuffer window's 'total_cols' value, as 'size' might be in
+       pixels.  (Bug#22356)
 
-       Fix a typo in the Emacs manual
+2016-01-15  Alan Mackenzie  <acm@muc.de>
 
-       * doc/emacs/trouble.texi (Sending Patches): Fix a typo.  Reported
-       by Lele Gaifax <lele@metapensiero.it>.  (Bug#22193)
+       In comment-dwim with style `extra-line', respect indent-tabs-mode.
 
-2015-12-17  Eli Zaretskii  <eliz@gnu.org>
+       This fixes bug #22369.
 
-       Fix parsing netrc entries with ports
+       * lisp/newcomment.el (comment-make-bol-ws): New function.
+       (comment-make-extra-lines): Use new function instead of a crude `make-string'.
 
-       * lisp/gnus/auth-source.el (auth-source-ensure-strings): Don't
-       make a list out of 't'.  (Bug#22188)
+2016-01-15  Eli Zaretskii  <eliz@gnu.org>
 
-       * test/automated/auth-source-tests.el
-       (auth-source-test-netrc-parse-entry): New test.
+       Make 'random' seeds cryptographically secure if possible
 
-2015-12-17  Paul Eggert  <eggert@cs.ucla.edu>
+       * configure.ac: Check for "/dev/urandom".
 
-       Fix typo in Doug Lea malloc configure log
+       * src/sysdep.c (init_random) [HAVE_DEV_URANDOM]: Read the stream
+       for the seed from "/dev/urandom".
+       [WINDOWSNT]: Obtain the stream for the seed from w32 APIs.
+       * src/fns.c (Frandom): Update the doc string to indicate that
+       system entropy is used when available.
+       * src/w32.c: Include wincrypt.h.
+       (w32_init_crypt_random, w32_init_random): New functions, use the
+       CryptGenRandom API.
+       (globals_of_w32): Initialize w32_crypto_hprov handle to zero.
+       * src/w32.h (w32_init_random): Add prototype.
 
-       * configure.ac (emacs_cv_var_doug_lea_malloc):
-       Fix typo that confused the log output of 'configure'.
+       * doc/lispref/numbers.texi (Random Numbers): Document more details
+       about 't' as the argument to 'random'.
 
-2015-12-16  Nicolas Petton  <nicolas@petton.fr>
+       * etc/NEWS: Mention that '(random t)' now uses a cryptographically
+       strong seed if possible.
 
-       * etc/NEWS: Mention the new pcase patterns `seq' and `map'.
+       (Bug#22202)
 
-2015-12-16  Alan Mackenzie  <acm@muc.de>
+2016-01-15  Eli Zaretskii  <eliz@gnu.org>
 
-       * etc/NEWS: Move entry on pcase to correct section
+       Unhide the --no-line-directive option to 'etags'
 
-       (Accidentally omitted from previous commit)
+       * lib-src/etags.c (print_help): Un-undocument the --no-line-directive
+       option.  (Bug#22306)
 
-2015-12-16  Alan Mackenzie  <acm@muc.de>
+       * doc/man/etags.1: Document the --no-line-directive option.
 
-       Add documentation for changes to Show Paren mode.
+2016-01-15  Alan J Third  <alan@idiocy.org>  (tiny change)
 
-       * lisp/paren.el (show-paren-highlight-openparen): Enhance doc string.
+       Fix picture-mode wrt double-width characters
 
-       * doc/emacs/programs.texi (Matching): Add descriptions of some pertinent user
-       options, including the new show-paren-when-point-inside-paren and
-       show-paren-when-point-in-periphery.
+       * lisp/textmodes/picture.el (picture-insert): Check the width of
+       the character being replaced, not just that of the replacement.
+       (Bug#1808)
 
-       * etc/NEWS (.. Specialized Modes ...): Add an entry for Show Paren mode.
-       Move an entry on pcase to the Lisp Changes section.
+2016-01-15  Eric Abrahamsen  <eric@ericabrahamsen.net>
 
-2015-12-16  Eli Zaretskii  <eliz@gnu.org>
+       Honor docstring of gnus-group-get-new-news
 
-       Document Eldoc changes
+       * lisp/gnus/gnus-start.el (gnus-get-unread-articles): If the prefix arg is t,
+       but non-numeric, unconditionally consider all groups to need updating.
 
-       * doc/emacs/programs.texi (Lisp Doc): Document Global Eldoc mode.
+2016-01-14  Simen Heggestøyl  <simenheg@gmail.com>
 
-2015-12-16  Eli Zaretskii  <eliz@gnu.org>
+       Disallow parenthesis in non-pseudo CSS selectors
 
-       Fix invocation of Python and Guile interpreters from gdb-mi
+       * lisp/textmodes/css-mode.el (css--font-lock-keywords): Disallow
+       parenthesis in selectors except for in the function notation that
+       might appear right after a pseudo-class.
+       * test/indent/scss-mode.scss: Add a test for it.
 
-       * lisp/progmodes/gdb-mi.el (gdb-control-commands-regexp): Add
-       commands for interactive Python and Guile interpreters.
-       (gdb-send): Recognize various ways of exiting from Python and
-       Guile interpreters and returning to GDB.  For details, see
-       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00693.html
-       and http://stackoverflow.com/questions/31514741.
+2016-01-14  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2015-12-16  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/gnus/nntp.el (nntp-request-newgroups): Simplify
 
-       Remove attempt to use C11 threads
+2016-01-14  Michael Albinus  <michael.albinus@gmx.de>
 
-       C11 threads are not needed for Emacs now, and their use is causing
-       hassles on FreeBSD 10.x.  Problem reported by Ashish SHUKLA in:
-       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00648.html
-       * configure.ac: Do not check for C11 threads. Remove unnecessary
-       fiddling with CPPFLAGS when configuring pthreads.
-       * src/emacs-module.c (main_thread, check_main_thread)
-       (module_init): Do not worry about C11 threads.
+       check-maybe shall run only default tests
 
-2015-12-15  Michael Albinus  <michael.albinus@gmx.de>
+       * test/automated/Makefile.in (check, check-expensive): Depend on
+       mostlyclean.
+       (check-maybe): Re-run only default tests.
+       (check-doit): Use code of check-maybe.
+       (mostlyclean): Move *.log files away.
 
-       Set utf8 encoding with stty in Tramp
+2016-01-13  Mark Oteiza  <mvoteiza@udel.edu>
 
-       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
-       Move up uname check.  Handle Mac OS X eol encoding.  Set utf8
-       encoding with stty.
+       * lisp/thingatpt.el (thing-at-point-uri-schemes): Add "magnet:"
 
-2015-12-15  Alan Mackenzie  <acm@muc.de>
+2016-01-13  Dmitry Gutov  <dgutov@yandex.ru>
 
-       Tidy up documentation associated with window groups.
+       Un-obsolete tags-loop-continue
 
-       * doc/lispref/windows.texi (Basic Windows): Add an @anchor for "Window
-       Groups".  Correct example function to `window-group-start'.
-       (Window Start and End, Textual scrolling): Point to the new anchor.  State
-       that (most of) the args in window group functions have the same meaning as for
-       the corresponding window primitives.
+       * lisp/progmodes/etags.el (tags-loop-continue): Un-obsolete.
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00682.html
 
-       * doc/lispref/positions.texi (Screen Lines).  Same as above.
+2016-01-13  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-15  Michael Albinus  <michael.albinus@gmx.de>
+       Document obsoletion of 'intangible' and 'point-entered/left'
 
-       Complete last commit
+       * doc/lispref/text.texi (Special Properties): Document the new
+       properties 'cursor-intangible' and 'cursor-sensor-functions'.
+       Document the obsolete status of 'intangible', 'pointer-left',
+       and 'point-entered' properties, and of 'inhibit-point-motion-hooks'.
+       * doc/lispref/display.texi (Overlay Properties): Document that
+       'intangible' overlay property is obsolete.
 
-       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
-       Move uname check up.  Handle Mac OS X eol encoding.
+       * lisp/emacs-lisp/cursor-sensor.el (cursor-sensor-mode): Doc fix.
 
-2015-12-15  Michael Albinus  <michael.albinus@gmx.de>
+2016-01-13  Eli Zaretskii  <eliz@gnu.org>
 
-       Handle Mac OS X eol encoding in Tramp
+       Updater documentation of 'looking-back'
 
-       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
-       Handle Mac OS X eol encoding.
+       * doc/lispref/searching.texi (Regexp Search): Update documentation
+       of 'looking-back'.  Fix markup.
 
-2015-12-15  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+2016-01-13  Eli Zaretskii  <eliz@gnu.org>
 
-       Fix variable name typo in compute_tip_xy
+       Document 'pre-redisplay-functions'
 
-       * src/w32fns.c (compute_tip_xy):
-       * src/xfns.c (compute_tip_xy): Modify *root_x instead of *root_y
-       when `right' is integer.
+       * doc/lispref/hooks.texi (Standard Hooks):
+       * doc/lispref/display.texi (Forcing Redisplay): Document
+       'pre-redisplay-functions'.
 
-2015-12-14  foudfou  <foudil.newbie+git@gmail.com>
+2016-01-13  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/ibuffer.el: Add ability to (un-)mark or delete buffers in the region.
+       Document the new deafault value of 'load-read-function'
 
-2015-12-14  Tassilo Horn  <tsdh@gnu.org>
+       * doc/lispref/loading.texi (How Programs Do Loading): Document the
+       change in the default value of 'load-read-function'.
 
-       Revert "Fix rx matcher overflow without limiting"
+2016-01-13  Eli Zaretskii  <eliz@gnu.org>
 
-       This reverts commit fe27e037663d36be3e5741c2ce86ab4ee8017db1.
+       Document 'bufferpos-to-filepos' and 'filepos-to-bufferpos'
 
-2015-12-14  Alan Mackenzie  <acm@muc.de>
+       * doc/lispref/nonascii.texi (Text Representations): Document
+       'bufferpos-to-filepos' and 'filepos-to-bufferpos'.
 
-       Ispell: Bind isearch-regexp-function to nil around call to isearch..-new-loop
+2016-01-13  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/textmodes/ispell.el (ispell-highlight-spelling-error-overlay): bind
-       isearch-regexp-function to nil around call to isearch-lazy-highligh-new-loop.
+       Document the new prefix-command hooks
 
-2015-12-14  Tassilo Horn  <tsdh@gnu.org>
+       * doc/lispref/hooks.texi (Standard Hooks): Document
+       `prefix-command-echo-keystrokes-functions' and
+       `prefix-command-preserve-state-hook'.
 
-       Fix rx matcher overflow without limiting
+2016-01-13  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Improve last
-       change to the regexp without imposing a limit on the length of the
-       options.
+       Fix one more misuse of time-stamp-time-zone
 
-2015-12-14  Alan Mackenzie  <acm@muc.de>
+       * test/etags/html-src/softwarelibero.html: Use "UTC0" rather
+       than the unportable "GMT" for time zone.
 
-       Enhance ispell-skip-region-alist by generating part of it at runtime.
+2016-01-13  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/textmodes/ispell.el (ispell--\\w-filter, ispell--make-\\w-expression)
-       (ispell--make-filename-or-URL-re): New functions which generate a regexp.
-       (ispell-skip-region-alist): Remove the bit that matches a filename/URL, etc.
-       (ispell-begin-skip-region-regexp, ispell-skip-region-list, ispell-message):
-       Include the result of ispell--make-filename-or-URL-re in regexps.
+       Fix NNTP NEWGROUPS off-by-a-few-hours bug
 
-2015-12-14  Glenn Morris  <rgm@gnu.org>
+       * lisp/gnus/nntp.el (nntp-request-newgroups): Format string
+       in Universal Time, since we’re telling the server “GMT”.
 
-       * build-aux/gitlog-to-emacslog: Ignore more pointless merge commits.
+2016-01-12  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-14  Alan Mackenzie  <acm@muc.de>
+       Update publicsuffix.txt from upstream
 
-       Replace GROUP argument in six window primitives by new functions.
-
-       * doc/lispref/windows.texi (Window Start and End, Textual Scrolling)
-       * doc/lispref/positions.texi (Screen Lines): Remove optional GROUP argument
-       from description of six window functions.  Add in description of new functions
-       window-group-start, window-group-end, set-window-group-start,
-       pos-visible-in-window-group-p, recenter-group and move-to-window-group-line,
-       together with the six variables indirecting to the pertinent group
-       functions.
-
-       * src/window.c
-       * src/keyboard.c: Revert the commit from 2015-11-11 12:02:48, in so far as it
-       applies to these two files, which added the GROUP argument to six window
-       primitives.
+       * etc/publicsuffix.txt: Update from
+       https://publicsuffix.org/list/effective_tld_names.dat
+       dated 2016-01-12 11:52:01 UTC.
 
-       * lisp/follow.el (follow-mode): Use updated variable names for the indirected
-       functions.
+2016-01-12  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/isearch.el (isearch-update, isearch-done, isearch-string-out-of-window)
-       (isearch-back-into-window, isearch-lazy-highlight-new-loop)
-       (isearch-lazy-highlight-search, isearch-lazy-highlight-update): Replace calls
-       to window primitives (e.g. window-start) with a GROUP argument by calls to
-       new functions (e.g. window-group-start).
+       Fix some declarations.
 
-       * lisp/ispell.el (ispell-command-loop): Replace call to
-       pos-visible-in-window-p with pos-visible-in-window-group-p.
+       * lisp/descr-text.el (internal-char-font):
+       * lisp/cedet/mode-local.el (xref-item-location):
+       * lisp/gnus/mml-smime.el (epg-key-sub-key-list)
+       (epg-sub-key-capability, epg-sub-key-validity):
+       * lisp/international/mule-util.el (internal-char-font):
+       Fix declarations.
 
-       * lisp/window.el (window-group-start, window-group-end)
-       (set-window-group-start, recenter-group, pos-visible-in-window-group-p)
-       (selected-window-group, move-to-window-group-line): New functions.
-       (window-group-start-function, window-group-end-function)
-       (set-window-group-start-function, recenter-group-function)
-       (pos-visible-in-window-group-p-function, selected-window-group-function)
-       (move-to-window-group-line-function): New variables.
+2016-01-12  Glenn Morris  <rgm@gnu.org>
 
-2015-12-14  Vitorio Miguel  <vdrbandeiras@gmail.com>  (tiny change)
+       Fix some custom types.
 
-       * etc/tutorials/TUTORIAL.pt_BR: Fix a typo.  (Bug#22165)
+       * lisp/gnus/gnus-fun.el (gnus-x-face-omit-files, gnus-face-omit-files):
+       * lisp/gnus/gnus.el (gnus-valid-select-methods):
+       * lisp/mail/rmail.el (rmail-get-coding-function):
+       * lisp/net/newst-treeview.el (newsticker-groups-filename):
+       * lisp/progmodes/hideif.el (hide-ifdef-exclude-define-regexp):
+       * lisp/textmodes/tildify.el (tildify-space-predicates):
+       * lisp/url/url-tramp.el (url-tramp-protocols):
+       Fix custom types.
 
-2015-12-13  Eli Zaretskii  <eliz@gnu.org>
+2016-01-12  Glenn Morris  <rgm@gnu.org>
 
-       Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+       Add some missing version tags.
 
-2015-12-13  Tassilo Horn  <tsdh@gnu.org>
+       * lisp/electric.el (electric-quote-comment)
+       (electric-quote-string, electric-quote-paragraph):
+       * lisp/epg-config.el (epg-gpgconf-program):
+       * lisp/rect.el (rectangle-preview):
+       * lisp/emacs-lisp/check-declare.el (check-declare-ext-errors):
+       * lisp/emacs-lisp/package.el (package-selected-packages)
+       (package-hidden-regexps):
+       * lisp/erc/erc.el (erc-network-hide-list, erc-channel-hide-list):
+       * lisp/eshell/em-term.el (eshell-destroy-buffer-when-process-dies):
+       * lisp/gnus/mml-sec.el (mml1991-signers, mml2015-signers)
+       (mml-smime-signers, mml1991-encrypt-to-self, mml2015-encrypt-to-self)
+       (mml-smime-encrypt-to-self, mml2015-sign-with-sender)
+       (mml-smime-sign-with-sender, mml2015-always-trust)
+       (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
+       * lisp/net/browse-url.el (browse-url-conkeror-new-window-is-buffer)
+       (browse-url-conkeror-arguments):
+       * lisp/net/newst-reader.el (newsticker-download-logos):
+       * lisp/progmodes/gud.el (gud-guiler-command-name):
+       * lisp/progmodes/prog-mode.el (prettify-symbols-unprettify-at-point):
+       * lisp/progmodes/project.el (project-vc):
+       * lisp/progmodes/python.el (python-indent-guess-indent-offset-verbose)
+       (python-shell-remote-exec-path, python-shell-first-prompt-hook)
+       (python-shell-completion-native-disabled-interpreters)
+       (python-shell-completion-native-enable)
+       (python-shell-completion-native-output-timeout)
+       (python-shell-completion-native-try-output-timeout):
+       * lisp/progmodes/xref.el (xref):
+       * lisp/term/screen.el (xterm-screen-extra-capabilities):
+       * lisp/term/xterm.el (xterm-max-cut-length):
+       Add missing version tags.
 
-       Improve regex to not trigger stack overflow
+2016-01-12  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Improve regex in
-       order not to trigger a stack overflow in regex matcher with unbalanced
-       brackets (bug#22146).
+       * test/automated/core-elisp-tests.el
+       (core-elisp-tests-1-defvar-in-let): Add a custom type.
 
-2015-12-13  Eli Zaretskii  <eliz@gnu.org>
+2016-01-12  Glenn Morris  <rgm@gnu.org>
 
-       Fix visiting files with raw-text
+       * src/buffer.c (syms_of_buffer) <major-mode>: Doc fix.
 
-       * src/fileio.c (Finsert_file_contents): Fix setting buffer unibyte
-       when some stuff was actually read.  (Bug#22162)
+       Remove comments that do not apply since 2005-08-09.  (Bug#22349)
 
-2015-12-13  Tassilo Horn  <tsdh@gnu.org>
+2016-01-12  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Fix regex matching keyval labels
+       Merge from gnulib
 
-       * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Fix regexp
-       matching keyval labels.
+       This mostly just changes "UTC" to "UTC0" for POSIX conformance.
+       It also updates to the latest version of texinfo.tex.
+       * build-aux/gitlog-to-changelog, build-aux/move-if-change:
+       * build-aux/update-copyright, doc/misc/texinfo.tex:
+       Update from gnulib.
 
-2015-12-13  Michael Albinus  <michael.albinus@gmx.de>
+2016-01-12  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/ido.el (ido-file-name-all-completions-1): Do not raise an error
+       Update documentation of 'process-running-child-p'
 
-       ... in case of Tramp.  (Bug#20821)
+       * doc/lispref/processes.texi (Input to Processes): Document the
+       changes in return value of 'process-running-child-p'.
 
-2015-12-13  Paul Eggert  <eggert@cs.ucla.edu>
+2016-01-12  Eli Zaretskii  <eliz@gnu.org>
 
-       Fix performance regression with gcc -O0
+       Update documentation of 'deactivate-mark'.
 
-       This fixes the smaller performance hit that I noted in:
-       https://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00357.html
-       * src/alloc.c (macro_XPNTR_OR_SYMBOL_OFFSET, macro_XPNTR):
-       * src/puresize.h (puresize_h_PURE_P)
-       (puresize_h_CHECK_IMPURE):
-       New macros, with the old contents of the functions.
-       * src/alloc.c (XPNTR_OR_SYMBOL_OFFSET, XPNTR):
-       * src/puresize.h (PURE_P, CHECK_IMPURE):
-       Use the new macros.  Also macros, if DEFINE_KEY_OPS_AS_MACROS.
-       * src/conf_post.h (ATTRIBUTE_UNUSED):
-       * src/lisp.h (DEFINE_KEY_OPS_AS_MACROS): New macros.
+       * doc/lispref/markers.texi (The Mark): Document that
+       'deactivate-mark' is now buffer-local when set.
 
-2015-12-12  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-01-12  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/emacs-lisp/package.el (package-unpack): Security check
+       Update documentation of 'completion-table-dynamic'
 
-       Check that we received the package we were offered.
+       * doc/lispref/minibuf.texi (Programmed Completion): Document the
+       new optional argument to 'completion-table-dynamic'.
 
-2015-12-12  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-01-12  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/emacs-lisp/package.el (package--compile): Don't activate
+       Document changes in 'read-buffer' and 'read-buffer-function'
 
-       `package-unpack' takes care of all activations now (other than
-       `package-initialize).  `package--compile' now only compiles.
+       * doc/lispref/minibuf.texi (High-Level Completion): Document the
+       4th argument to 'read-buffer' and 'read-buffer-function'.
 
-2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+2016-01-12  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Document the new bindings of <UP> and <DOWN> in the minibuffer
+       Fix time-stamp-time-zone bugs introduced in July
 
-       * doc/emacs/mini.texi (Minibuffer History): Describe the new
-       bindings of <UP> and <DOWN> in the minibuffer.
+       This fixes a bug introduced when the July changes to
+       format-time-string installed, as the changes were not
+       correctly handled in this module (Bug#22302).
+       Also, document time stamp time zones.
+       * lisp/time-stamp.el (time-stamp-time-zone): Document values better.
+       (time-stamp--format): New private function.
+       (time-stamp-string, time-stamp-string-preprocess)
+       (time-stamp-do-number): Use it.
+       * doc/emacs/files.texi (Time Stamps): Mention time zones.
+       * doc/misc/autotype.texi (Timestamps): Document time-stamp-time-zone.
 
-2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+2016-01-12  Eli Zaretskii  <eliz@gnu.org>
 
-       Document new features of Ido
+       Make piping to subprocesses more robust on MS-Windows
 
-       * doc/misc/ido.texi (Misc): Document 'C-S-b'.
+       * src/w32.c (sys_write): Don't write to a pipe more stuff than its
+       buffer can hold.  Don't return -1 if something has been written to
+       the pipe.  Zero out 'errno' before calling '_write', to avoid
+       returning a stale value.  (Bug#22344)
+       * src/w32proc.c (syms_of_ntproc) <w32-pipe-buffer-size>: New variable.
+       * src/w32.c (pipe2): Use it to request a user-defined size for the
+       pipe being created.
 
-2015-12-12  Martin Rudalics  <rudalics@gmx.at>
+       * etc/NEWS: Mention 'w32-pipe-buffer-size'.
 
-       Fix frame height calculations with added menu bar on Windows (Bug#22105)
+       * doc/emacs/msdos.texi (Windows Processes): Document
+       'w32-pipe-buffer-size'.
 
-       * doc/lispref/frames.texi (Parameter Access): Mention pitfalls
-       when simultaneously specifying multiple parameters for
-       `modify-frame-parameters' that all may change the frame's size.
-       * src/w32fns.c (x_set_menu_bar_lines): Don't set
-       windows_or_buffers_changed here.
-       (my_create_tip_window, Fx_show_tip): Call AdjustWindowRect
-       with third argument false.
-       * src/w32menu.c (set_frame_menubar): Set
-       windows_or_buffers_changed here.
-       * src/w32term.c (x_set_window_size): Determine third argument of
-       AdjustWindowRect from whether the frame has a menu bar and not
-       from whether it wants one.
+2016-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/emacs-lisp/syntax.el (syntax-ppss-table): New var
 
-       Document the change in interactive shell mode
+       (syntax-ppss):
+       * lisp/font-lock.el (font-lock-fontify-syntactically-region): Use it.
 
-       * doc/emacs/misc.texi (Interactive Shell): Document that the
-       '*shell*' buffer by default displays in a new window.
+2016-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+       lisp/nxml: Use syntax-tables for comments
 
-       Document new features of package.el
+       * lisp/nxml/nxml-mode.el (nxml-set-face): Prepend.
+       (nxml-mode): Set syntax-ppss-table.
+       Use sgml-syntax-propertize-function for syntax-propertize-function.
+       Let font-lock highlight strings and comments.
+       (nxml-degrade): Don't touch "nxml-inside" property any more.
+       (nxml-after-change, nxml-after-change1): Remove functions.
+       (comment): Don't set fontify rule any more.
+       (nxml-fontify-attribute): Don't highlight the value any more.
+       (nxml-namespace-attribute-value-delimiter, nxml-namespace-attribute-value)
+       (nxml-comment-delimiter, nxml-comment-content): Remove faces.
 
-       * doc/emacs/package.texi (Package Menu): Document the 'external'
-       status and the new menu commands.
-       (Package Installation): Document archive priorities.
+       * lisp/nxml/nxml-rap.el (nxml-scan-end): Remove.
+       (nxml-get-inside, nxml-inside-start, nxml-inside-end): Use syntax-ppss.
+       (nxml-clear-inside, nxml-set-inside): Remove.
+       (nxml-scan-after-change): Remove function.
+       (nxml-scan-prolog, nxml-tokenize-forward): Simplify.
+       (nxml-ensure-scan-up-to-date): Use syntax-propertize.
+       (nxml-move-outside-backwards):
+       * lisp/nxml/nxml-outln.el (nxml-section-tag-backward): Adjust to new
+       nxml-inside-start behavior.
 
-       * lisp/emacs-lisp/package.el (package-archive-priorities): Doc fix.
-       (package-menu-hide-low-priority): Doc fix.
+       * lisp/nxml/nxml-util.el (nxml-debug-set-inside)
+       (nxml-debug-clear-inside): Remove macros.
 
-2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/nxml/xmltok.el (xmltok-forward-special): Remove function.
+       (xmltok-scan-after-comment-open): Simplify.
 
-       Update and document new features of xterm support
+2016-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * doc/emacs/frames.texi (Text-Only Mouse): Document that
-       track-mouse is supported by newer xterm versions.
+       * elisp-mode.el (elisp--font-lock-flush-elisp-buffers): Fix comment
 
-2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+2016-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       Document new features of Prettify Mode
+       * lisp/nxml: Use standard completion; it also works for company-mode
 
-       * doc/emacs/programs.texi (Misc for Programs): Document
-       'prettify-symbols-compose-predicate' and
-       'prettify-symbols-unprettify-at-point'.
+       * lisp/nxml/nxml-mode.el (nxml-complete): Obsolete.
+       (nxml-completion-at-point-function): Remove.
+       (nxml-mode): Don't set completion-at-point-functions.
+       * lisp/nxml/rng-nxml.el (rng-nxml-mode-init): Set it here instead.
+       (rng-completion-at-point): Rename from rng-complete and mark it
+       non-interactive.  It is now to be used as completion-at-point-function.
+       (rng-complete-tag, rng-complete-end-tag, rng-complete-attribute-name)
+       (rng-complete-attribute-value): Don't perform completion, but return
+       completion data instead.
+       (rng-complete-qname-function, rng-generate-qname-list): Add a few
+       arguments, previously passed via dynamic coping.
+       (rng-strings-to-completion-table): Rename from
+       rng-strings-to-completion-alist.  Don't return an alist.  Don't both
+       sorting and uniquifying.
 
-       * lisp/progmodes/prog-mode.el (prettify-symbols-alist)
-       (prettify-symbols-default-compose-p)
-       (prettify-symbols-compose-predicate)
-       (prettify-symbols--compose-symbol): Doc fixes.
+       * lisp/nxml/rng-util.el (rng-complete-before-point): Delete function.
+       (rng-completion-exact-p, rng-quote-string): Delete functions.
 
-2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/nxml/rng-valid.el (rng-recover-start-tag-open)
+       (rng-missing-attributes-message, rng-missing-element-message)
+       (rng-mark-missing-end-tags): Use explicit ".." in formats rather than
+       calling rng-quote-string everywhere.
 
-       Document multi-mode indentation facilities
+2016-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * doc/lispref/text.texi (Mode-Specific Indent): Document
-       'prog-indentation-context', 'prog-first-column', and 'prog-widen'.
+       Use sgml-electric-tag-pair-mode also in nxml-mode
 
-       * lisp/progmodes/prog-mode.el (prog-indentation-context)
-       (prog-widen): Doc fixes.
+       * lisp/nxml/rng-nxml.el: Require sgml-mode.
+       (rng-nxml-easy-menu): Add entry for sgml-electric-tag-pair-mode.
+       (rng-complete-qname-function): Use complete-with-action.
 
-2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/textmodes/sgml-mode.el (sgml-electric-tag-pair-before-change-function):
+       Let-bind forward-sexp-function, since nxml-mode binds it to
+       something incompatible.
 
-       Document 'vc-refresh-state'
+       * lisp/nxml/nxml-mode.el: Use setq-local and defvar-local.
 
-       * doc/emacs/maintaining.texi (Version Control): Document
-       'vc-refresh-state'.
+2016-01-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * lisp/vc/vc-hooks.el (vc-refresh-state): Doc fix.
+       * xmltok.el: Mark the "sole --" rather than the comment opener
 
-2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/nxml/xmltok.el (xmltok-scan-after-comment-open): Put the error
+       marker on the "sole --" rather than on the comment opener.
 
-       Fix echo for "C-u"
+2016-01-15  Sam Steingold  <sds@gnu.org>
 
-       * src/keyboard.c (command_loop_1): Undo last change.  It caused
-       duplicate echo of C-u.  (Bug#22107)
+       replace `tramp-compat-split-string' (removed) with `split-string'
 
-2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+       (python-shell-tramp-refresh-process-environment)
+       (python-shell-calculate-pythonpath): use `split-string'
+       instead of defunct `tramp-compat-split-string'
 
-       Avoid errors when creating files under SVN in new directory
+2016-01-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * lisp/vc/vc-svn.el (vc-svn-registered): Use
-       file-accessible-directory-p, to avoid cd'ing to a non-existing
-       directory, which signals an error on some systems.  (Bug#21984)
-       (vc-svn-checkin): Call log-edit-extract-headers with 2 arguments.
-       Use declare-function to avoid byte-compiler warnings.
+       Update nXML to use Emacs's Unicode support, and lexical-binding
 
-2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+       * etc/nxml/*.el: Remove obsolete char-name files.
+       * lisp/nxml/xsd-regexp.el (xsdre-range-list-difference): Remove unused
+       var `next'.
+       * lisp/nxml/rng-nxml.el (rng-set-state-after): Don't assume point-min==1.
+       * lisp/nxml/rng-match.el (rng-update-match-state): Simplify.
+       * lisp/nxml/nxml-outln.el (nxml-outline-state-transform-exceptions)
+       (nxml-target-section-pos, nxml-depth-in-target-section)
+       (nxml-outline-state-transform-alist)
+       (nxml-outline-display-section-tag-function): Move decl before first use.
+       * lisp/nxml/nxml-mode.el (nxml-char-name-ignore-case)
+       (nxml-char-name-alist, nxml-char-name-table)
+       (nxml-autoload-char-name-set-list, nxml-named-char-history): Remove vars.
+       (nxml-enable-char-name-set, nxml-disable-char-name-set)
+       (nxml-char-name-set-enabled-p, nxml-autoload-char-name-set)
+       (nxml-define-char-name-set, nxml-get-char-name): Remove functions.
+       (nxml-insert-named-char): Use read-char-by-name instead.
+       (nxml-char-ref-display-extra): Use get-char-code-property.
+       * lisp/nxml/nxml-maint.el (nxml-create-unicode-char-name-sets):
+       Remove function.
+       * lisp/nxml/nxml-glyph.el, lisp/nxml/nxml-uchnm.el: Remove files.
 
-       Improve Lua support in etags
+2016-01-15  Michael Albinus  <michael.albinus@gmx.de>
 
-       * lib-src/etags.c (Lua_functions): Skip spaces before looking for
-       "function".
+       Add "sg" method to Tramp
 
-       * etc/NEWS: Mention improved Lua support by 'etags'.
+       * doc/misc/tramp.texi (Inline methods): Add "sg" method.
+       (Customizing Completion): Add function `tramp-parse-etc-group'.
 
-       * test/etags/lua-src/test.lua (test): Add tests for indented
-       function definitions.
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to the modified Lua tests.
+       * lisp/net/tramp-sh.el (tramp-methods) <sg>: Add.  (Bug#22329)
+       (tramp-completion-function-alist-sg): New defconst.
+       (top): Completion function for "sg" is
+       `tramp-completion-function-alist-sg'.
 
-2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/net/tramp.el (tramp-completion-function-alist): Adapt docstring.
+       (tramp-parse-etc-group, tramp-parse-etc-group-group): New defuns.
 
-       Fix 'this-command-keys' wrt prefix argument
+2016-01-14  Michael Albinus  <michael.albinus@gmx.de>
 
-       * src/keyboard.c (command_loop_1): Restore the feature whereby C-u
-       was part of this-command-keys, but not of this-single-command-keys.
-       (Bug#22107)
+       Remove XEmacs compatibility in Tramp
+
+       * doc/misc/tramp.texi: Replace flags by their hard coded name.
+       Remove unused flags and the enclosed alternative text for XEmacs.
+
+       * doc/misc/trampver.texi: Use "Tramp" CamelCase.  Rename "emacs"
+       and "xemacs" flags to "unified" and "separate".  Remove flags
+       "emacsgw", "emacsname", "emacsdir", "ftppackagename",
+       "emacsothername", "emacsotherdir" and "emacsotherfilename".
+       (trampver):
+       * lisp/net/trampver.el (tramp-version): Set to "2.3.0-pre".
+
+       * lisp/net/tramp.el (bkup-backup-directory-info)
+       (directory-sep-char, ls-lisp-use-insert-directory-program)
+       (outline-regexp, tramp-backup-directory-alist)
+       (tramp-default-method, tramp-shell-prompt-pattern, tramp-syntax)
+       (tramp-file-name-regexp-unified)
+       (tramp-file-name-regexp-separate)
+       (tramp-completion-file-name-regexp-unified)
+       (tramp-completion-file-name-regexp-separate, tramp-chunksize)
+       (tramp-get-method-parameter, tramp-find-method, tramp-find-user)
+       (tramp-debug-message, tramp-progress-reporter-update)
+       (with-tramp-progress-reporter)
+       (tramp-rfn-eshadow-setup-minibuffer)
+       (rfn-eshadow-setup-minibuffer-hook, tramp-unload-hook)
+       (tramp-rfn-eshadow-update-overlay)
+       (rfn-eshadow-update-overlay-hook, tramp-default-file-modes)
+       (tramp-file-name-for-operation)
+       (tramp-completion-file-name-handler)
+       (tramp-autoload-file-name-handler, tramp-completion-mode-p)
+       (tramp-handle-directory-files)
+       (tramp-handle-directory-files-and-attributes)
+       (tramp-handle-dired-uncache, tramp-handle-find-backup-file-name)
+       (tramp-handle-insert-file-contents, tramp-handle-load)
+       (tramp-handle-shell-command)
+       (tramp-handle-verify-visited-file-modtime)
+       (tramp-handle-file-notify-valid-p, tramp-accept-process-output)
+       (tramp-check-for-regexp, tramp-wait-for-regexp)
+       (tramp-send-string, tramp-mode-string-to-int)
+       (tramp-get-local-gid, tramp-check-cached-permissions)
+       (tramp-get-remote-tmpdir, tramp-make-tramp-temp-file)
+       (auto-save-file-name-transforms)
+       (tramp-handle-make-auto-save-file-name, tramp-read-passwd)
+       (tramp-clear-passwd, tramp-time-diff):
+       * lisp/net/tramp-adb.el (directory-listing-before-filename-regexp)
+       (directory-sep-char, tramp-adb-file-name-handler-alist)
+       (tramp-adb-parse-device-names)
+       (tramp-adb-handle-expand-file-name)
+       (tramp-adb-handle-file-truename, tramp-adb--gnu-switches-to-ash)
+       (tramp-adb-handle-file-local-copy)
+       (tramp-adb-handle-write-region, tramp-adb-handle-set-file-modes)
+       (tramp-adb-handle-rename-file, tramp-adb-handle-process-file)
+       (tramp-adb-handle-shell-command)
+       (tramp-adb-handle-start-file-process, tramp-adb-get-device)
+       (tramp-adb-maybe-open-connection):
+       * lisp/net/tramp-cache.el (tramp-persistency-file-name)
+       (tramp-cache-print):
+       * lisp/net/tramp-cmds.el (tramp-cleanup-all-connections)
+       (tramp-bug, tramp-reporter-dump-variable)
+       (tramp-load-report-modules, tramp-append-tramp-buffers):
+       * lisp/net/tramp-compat.el (tramp-compat-funcall)
+       (tramp-advice-file-expand-wildcards)
+       (tramp-compat-temporary-file-directory)
+       (tramp-compat-make-temp-file, tramp-compat-copy-file)
+       (tramp-compat-delete-directory, )
+       (tramp-compat-process-running-p):
+       * lisp/net/tramp-ftp.el (tramp-methods) <ftp>:
+       (tramp-default-method-alist, tramp-foreign-file-name-handler-alist):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist)
+       (tramp-gvfs-do-copy-or-rename-file, tramp-gvfs-handle-copy-file)
+       (tramp-gvfs-handle-file-local-copy)
+       (tramp-gvfs-handle-file-name-all-completions)
+       (tramp-gvfs-handle-file-notify-add-watch)
+       (tramp-gvfs-monitor-file-process-filter)
+       (tramp-gvfs-handle-file-readable-p)
+       (tramp-gvfs-handle-rename-file, tramp-gvfs-handle-write-region)
+       (tramp-gvfs-file-name, tramp-gvfs-handler-askquestion)
+       (tramp-gvfs-maybe-open-connection)
+       (tramp-gvfs-parse-device-names):
+       * lisp/net/tramp-gw.el (tramp-gw-aux-proc-sentinel)
+       (tramp-gw-open-connection, tramp-gw-open-network-stream):
+       * lisp/net/tramp-sh.el (directory-sep-char)
+       (tramp-sh-file-name-handler-alist)
+       (tramp-sh-handle-file-truename)
+       (tramp-sh-handle-set-visited-file-modtime)
+       (tramp-sh-handle-verify-visited-file-modtime)
+       (tramp-sh-handle-set-file-modes, tramp-sh-handle-set-file-times)
+       (tramp-sh-handle-file-acl)
+       (tramp-sh-handle-file-name-all-completions)
+       (tramp-sh-handle-copy-file, tramp-sh-handle-rename-file)
+       (tramp-do-copy-or-rename-file-directly)
+       (tramp-do-copy-or-rename-file-out-of-band)
+       (dired-compress-file-suffixes, dired-remove-file)
+       (tramp-sh-handle-dired-compress-file)
+       (tramp-sh-handle-insert-directory)
+       (tramp-sh-handle-expand-file-name)
+       (tramp-sh-handle-start-file-process)
+       (tramp-sh-handle-process-file, tramp-sh-handle-file-local-copy)
+       (tramp-sh-handle-write-region, tramp-sh-handle-vc-registered)
+       (tramp-sh-handle-file-notify-add-watch)
+       (tramp-sh-gvfs-monitor-dir-process-filter)
+       (tramp-sh-inotifywait-process-filter, tramp-maybe-send-script)
+       (tramp-find-executable)
+       (tramp-open-connection-setup-interactive-shell)
+       (tramp-find-inline-encoding, tramp-compute-multi-hops)
+       (tramp-maybe-open-connection, tramp-convert-file-attributes)
+       (tramp-get-remote-path, tramp-get-remote-touch):
+       * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist)
+       (tramp-smb-handle-copy-directory, tramp-smb-handle-copy-file)
+       (tramp-smb-handle-delete-directory)
+       (tramp-smb-handle-directory-files, tramp-smb-handle-file-acl)
+       (tramp-smb-handle-make-directory-internal)
+       (tramp-smb-handle-process-file, tramp-smb-handle-rename-file)
+       (tramp-smb-handle-set-file-acl, tramp-smb-handle-set-file-modes)
+       (tramp-smb-handle-write-region, tramp-smb-get-file-entries)
+       (tramp-smb-get-cifs-capabilities)
+       (tramp-smb-maybe-open-connection):
+       * lisp/net/trampver.el (tramp-repository-get-version):
+       Remove XEmacs compat code.
+
+       * lisp/net/tramp-cmds.el (mml-mode, mml-insert-empty-tag)
+       (reporter-dump-variable): Declare functions.
+
+       * lisp/net/tramp.el (tramp-bkup-backup-directory-info)
+       (tramp-advice-minibuffer-electric-separator)
+       (tramp-advice-minibuffer-electric-tilde)
+       (tramp-handle-unhandled-file-name-directory):
+       * lisp/net/tramp-compat.el (tramp-compat-with-temp-message)
+       (tramp-compat-font-lock-add-keywords)
+       (tramp-compat-load, tramp-compat-number-sequence)
+       (tramp-compat-split-string, tramp-compat-delete-dups):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-file-contents-literally):
+       Remove.
 
-       * lisp/simple.el (internal-echo-keystrokes-prefix): Add
-       commentary about the function's return value.
+       * lisp/net/tramp-sh.el (tramp-methods) <psftp>: This does not work
+       recursively.
 
-2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+2016-01-14  K. Handa  <handa@gnu.org>
 
-       * lisp/files.el (load-library): Doc fix.  (Bug#22140)
+       fix previous change of src/ftfont.c (ftfont_shape_by_flt)
 
-2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+       * src/ftfont.c (ftfont_shape_by_flt): Fix previous change.  Access the
+       second glyph only when there are enough glyphs.
 
-       Improve and document Ruby support in 'etags'
+2016-01-13  Glenn Morris  <rgm@gnu.org>
 
-       * lib-src/etags.c (Ruby_suffixes): Add ".ruby".
-       (Ruby_functions): Support "module" and overloaded operators.
-       (Ruby_help): Mention "module".
+       * src/buffer.c (Fset_buffer_major_mode): Allow default major-mode,
 
-       * test/etags/ruby-src/test.rb:
-       * test/etags/ruby-src/test1.ru: New files.
-       * test/etags/Makefile (RBSRC): New tests.
-       (SRCS): Add ${RBSRC}.
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to the new Ruby tests.
+       or its hook, to move point.  (Bug#22348)
 
-       * doc/man/etags.1: Mention Ruby support.
-       * etc/NEWS: Mention Ruby support.
+2016-01-12  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-12-11  Xi Lu  <lx@shellcodes.org>
+       Merge missing commit from emacs-25 branch
 
-       Initial support for Ruby in 'etags'
+       * test/Makefile.in (SELECTOR_DEFAULT, SELECTOR_EXPENSIVE, SELECTOR):
+       New variables.
+       (check-expensive, check-doit): New targets.
 
-       * lib-src/etags.c <Ruby_suffixes>: New variable.
-       (lang_names): Add an entry for Ruby.
-       (Ruby_functions): New function.  (Bug#22116)
+       * Makefile.in (check-expensive): New target.
 
-2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+       * test/lisp/autorevert-tests.el
+       (auto-revert-test01-auto-revert-several-files):
+       * test/lisp/filenotify-tests.el (file-notify--deftest-remote)
+       (file-notify-test06-many-events):
+       * test/lisp/net/tramp-tests.el (tramp-test26-process-file)
+       (tramp-test27-start-file-process, tramp-test28-shell-command)
+       (tramp-test29-vc-registered)
+       (tramp-test31-special-characters-with-stat)
+       (tramp-test31-special-characters-with-perl)
+       (tramp-test31-special-characters-with-ls)
+       (tramp-test32-utf8-with-stat, tramp-test32-utf8-with-perl)
+       (tramp-test32-utf8-with-ls, tramp-test33-asynchronous-requests)
+       (tramp-test35-unload): Tag the tests as :expensive-test.
 
-       Clarify documentation of 'modify-frame-parameters'
+2016-01-12  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       1f6898d test/automated/vc-hg.el: Support out-of-tree build
+       3adb56e Minor change in tramp-tests.el
+       2b535ba ; * etc/NEWS: Update the js.el entry.
+       76b518c * etc/HELLO: Add Armenian and Mongolian greetings.
+       b51f1ef Java Mode: Fontify identifiers in the presence of annotations.
+       36b9539 Avoid an infloop when we run out of memory
+       2006752 Avoid unnecessary failures of auto-saving after fatal error
+       eef6784 Simplify HAVE_MODULES use in mark_maybe_pointer
+       552694a Revert attempt to use 'noexcept' in typedef
+       6ad0d39 Update documentation of 'indirect-function'
+       c6a5314 ; * etc/NEWS: Move entry of 'inhibit-point-motion-hooks'.
+       303141a Update documentation for obsoleting 'syntax-begin-function'
+       4e6f61c ; * etc/NEWS: Mark documented and not-to-be-documented entries.
+       e667bbb Document new features if Eshell
+       9c4e4e0 ; * etc/NEWS: Update EUDC entries.
+       1089dc9 Handle too long commands in Tramp
+       684eb58 * .gitattributes: *.cur and *.pif are binary files too.
+       d2c7fda * src/alloc.c (mark_maybe_pointer): HAVE_MODULES may be undefined
+       bd3f53d * sh-script.el (sh-smie-sh-rules): Improve indentation inside $(...)
+       09b2b8a * src/alloc.c (mark_maybe_pointer): Also check wide-int's emacs_value
+       cca0f93 ; Account for spaces before the filename
+       c71e1e8 Use short date for 'hg annotate', and output the author
+       f50027b Spelling fix
+       c7dff67 ; * etc/NEWS: Fix the Xref entries that got separated.
+       cc140bc Document user-level functions in project.el
+       f8208b6 Document the user-level features of the Xref package
+       b131fb8 * loading.texi: Add `define-type' entry for load-history
+       db3c2a8 Improve doc strings and prompts in xref.el
+       f6117ef Allow the use of `font-lock-extend-region-multiline' in CC Mode.
+       90fd798 Fix coding system for Tramp on OS X.
+       e985a0e ; * etc/NEWS: Mark the 'check-expensive' entry not to be documented.
+       9dfcbf0 Update 'load-history' docs
+       207e191 Fix (error ...) error
+       457738f Correctly analyze brace arguments in templated C++ function declarations.
+       d57724a * lisp/cedet/mode-local.el (describe-function-orig-buffer): Declare.
+       2a9532d * lisp/ffap.el (ffap-latex-mode): Avoid free variable.
+       1a6b084 * lisp/play/dunnet.el (dun-fix-screen): Avoid `end-of-buffer`.
+       8be046f Respect fontification region calculated by major mode.  Fixes bug #22316.
+       4b37cba Improve documentation of Delete Selection mode
+       a034dd3 Fix two project-find-file issues
+       30abf29 Clarify doc string of 'dired-current-directory'
+       e990bb2 Use the face of preceding text for displaying the ellipsis
+       5810ac3 Suppress Chinese file name test for OSX in tramp-tests.el
+       eeb710a ; * lisp/startup.el: Sentences end with two spaces.
+       428b3de * admin/admin.el (set-version): Also handle the NEWS file.
+       648de81 ; Add NEWS entry for project.el
+       671862f apropos-library: Skip obvious duplicates; don't error on generics
+       51668a5 ; Grammar fix
+       ed41d11 Add project-find-file and project-or-external-find-file
+       056da45 ; Improve commentary in 'setup_for_ellipsis'
+       269d008 ; Improve docstring for `inhibit-startup-echo-area-message'
+
+2016-01-12  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       ce4a052 Add defvar-local to lisp-imenu-generic-expression
+       a0121bc Revert commit b1e3d14845517bfa9fa5d6d3840f3ab3160306fd
+       76fe2d5 * lisp/emacs-lisp/autoload.el (autoload-find-destination): Doc fix.
+       1ae088f * lisp/emacs-lisp/autoload.el (autoload-find-destination):
+       b6b47af Properly encode/decode base64Binary data in SOAP
+       c632466 Obey coding-system-for-write when writing stdout/stderr in batch
+       2f32cb5 * doc/misc/efaq.texi (Packages that do not come with Emacs):
+               Update the URI of MELPA and marmalade-repo.
+               Reported by CHENG Goa <chenggao@royau.me> in
+               https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00390.html.
+       d2937aa * lisp/progmodes/opascal.el (opascal-mode-syntax-table):
+       5330c25 * lisp/progmodes/xscheme.el (xscheme-prompt-for-expression-exit):
+       7380990 Remove function wrongly on AWK Mode value of context
+       fontification hook.
+       d400753 * src/buffer.c: Stick with ASCII in doc string.
+       221240c Reword transient-mark-mode doc string
+       977d3ea Update doc string of 'selective-display'
+       229c3fa Make C++ buffers writeable when writing their initial text
+               properties.
+       f5c762c Additional changes for "make check-expensive"
+       1729cf3 ; * admin/MAINTAINERS: Remove myself.
+       33219d3 Apply text properties for <, > in new after-change function
+               (C++ Java Modes).
+
+2016-01-12  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       9fb185a shr-tag-video bug fix
+       6300655 Minor fixes in tramp-tests.el
+       50575b1 Ensure redisplay when 'truncate-lines' is set
+       0d9e80d Fix a doc string of 'transient-mark-mode'
+       0000ae5 MS-Windows followup to latest gnulib update
+       4bc5e02 Spelling fix
+       f1093f7 Do secure signed Bcc handling
+
+2016-01-12  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       861022f * doc/misc/texinfo.tex: Revert unwanted copyright change.
+       46e47a5 ; * etc/refcards/ru-refcard.tex (cyear): Update via M-x set-copyright.
+       71ea138 * lisp/align.el (align): Simplify a lambda
+       5618a50 * lisp/align.el (align): Fix arg order in call to `align-region'
+       1f680db Fix compilation next-error in buffers with selective-display
+       d20a948 * nsm.el (nsm-check-protocol): Fix typo in the message.
+       1da116f Add SHA1 warnings for high network security settings
+       e48bacd ; * etc/NEWS: Typo fix.
+
+2016-01-12  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       43662a2 ; Clarify that xref is still experimental
+       0a6e6ca ; * admin/release-process: Remove some obsolete records.
+       c2e9e3d * lisp/progmodes/fortran.el (fortran-make-syntax-propertize-function):
+       8637f3d (semantic-symref-derive-find-filepatterns): Return a list
+       0a7ad07 ; Re-arrange xref-related entries in NEWS.
+       fe903ef Fix xref-find-references on MS-Windows
+       55a28d8 ; Fixed visual bell artifact problem on NextStep.
+       d064034 Document new features of tildify-mode
+       964bea7 Document new features of Whitespace mode
+       cd68f47 Improve documentation of new Hide-IfDef features
+       723b8bf Fix regression in font-locking cl-assert and cl-check-type
+
+2016-01-12  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       ef33bc7 Spelling and grammar fixes
+       9c3dbab Fix copyright years by hand
+       0e96320 Update copyright year to 2016
+
+2016-01-12  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       9ee6ecb lisp/emacs-lisp/chart.el (chart-new-buffer): Move to silence byte compiler.
+       526d80c Port chart.el methods to cl-generic.
+       410bb69 Add nt/INSTALL.W64 build instructions
+       8f5b524 Add new input method 'programmer-dvorak'
+       6d11f6e Allow to invoke original M-TAB binding in 'flyspell-prog-mode'
+       bb83bb1 Fix EWW rendering of long RTL lines
+       b1a8509 fix  bug#21054
+       ce5ad12 Clean up cairo printing code
+
+2016-01-12  John Wiegley  <johnw@newartisans.com>
+
+       Merge from origin/emacs-25
+
+       6ee327d Add handle_user_signal_hook
+       47580e0 Avoid writing to purespace
+       0588be7 Remove unused variable
+       89e7483 * configure.ac: Find libxml2 headers in Xcode SDK dir on Darwin.
+       3b95e9c Use posix_openpt instead of openpty on Darwin
+       86312ff Document support for ':documentation' in Lisp mode
+       c930e75b Document new features of TeX mode
+       7c83d84 Clarify docs of hscroll in RTL text
+       4c8f8db Fix rendering of HTML pages that use character composition
+       a8d37ca Avoid some compiler warnings in w32.c
+       ce106f3de Undo ill-advised change
+       be0bba4 Unbreak completion in python-mode buffers
 
-       * doc/lispref/frames.texi (Parameter Access): Clarify what "ignored
-       PARMs" mean for 'modify-frame-parameters'.
+2016-01-11  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * src/frame.c (Fmodify_frame_parameters): Clarify what "ignored
-       PARMs" mean for this function.  (Bug#22104)
+       test/automated/vc-hg.el: Support out-of-tree build
 
-2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+       * test/automated/vc-hg.el
+       (vc-hg-annotate-extract-revision-at-line-with-filename)
+       (vc-hg-annotate-extract-revision-at-line-with-both):
+       Don't refer to source-directory.
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00755.html
 
-       Fix setting buffer unibyte when reading from a device
+2016-01-11  Michael Albinus  <michael.albinus@gmx.de>
 
-       * src/fileio.c (Finsert_file_contents): Call Fset_buffer_multibyte
-       to make a (possibly non-empty) buffer unibyte.  (Bug#22096)
+       Minor change in tramp-tests.el
 
-2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+       * test/automated/tramp-tests.el (tramp-test29-vc-registered):
+       Use `dired-uncache' instead of a Tramp internal function.
 
-       Clarify documentation of 'values'
+2016-01-11  Peter Feigl  <peter.feigl@nexoid.at>
 
-       * doc/lispref/eval.texi (Eval): Clarify that 'values' are not
-       updated by any evaluation commands in 'lisp-interaction-mode'.
-       (Bug#22056)
+       * etc/HELLO: Add Armenian and Mongolian greetings.
 
-2015-12-11  Anders Lindgren  <andlind@gmail.com>
+       (Bug#22346)
 
-       Fixed subversion vc error when opening file in new directory (bug#21984).
+2016-01-11  Alan Mackenzie  <acm@muc.de>
 
-       * lisp/vc/vc-svn.el (vc-svn-registered): Check if directory exists.
+       Java Mode: Fontify identifiers in the presence of annotations.
 
-2015-12-09  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/progmodes/cc-engine.el (c-forward-annotation): Tidy up the coding:
+       Don't move point when the defun fails.
+       (c-forward-decl-or-cast-1): Correct a usage of match data.
 
-       Yet another fix for when point ends up in invisible text
+       * lisp/progmodes/cc-fonts.el (c-font-lock-maybe-decl-faces): Remove.
+       (c-font-lock-declarations): Use the new c-maybe-decl-faces in place of the
+       removed variable.
 
-       * src/xdisp.c (redisplay_window): When someone forced
-       window-start, and honoring that failed to show the cursor, try
-       moving out of invisible text, before falling back to the middle of
-       the window.  (Bug#22098)
+       * lisp/progmodes/cc-langs.el (c-maybe-decl-faces): New language variable.
 
-2015-12-09  Michael Albinus  <michael.albinus@gmx.de>
+2016-01-11  Eli Zaretskii  <eliz@gnu.org>
 
-       Fix error in Tramp perl script for cygwin
+       Avoid an infloop when we run out of memory
 
-       * lisp/net/tramp-sh.el (tramp-perl-file-truename): Do not raise an
-       error if file doesn't exist.
+       * src/alloc.c (garbage_collect_1): Don't bother saving and
+       restoring the echo-area message if we are GC'ing after running out
+       of memory.  This avoids an infloop due to repeated attempts to
+       allocate memory for the cons cell needed to save the message,
+       which signals the memory-full error, which attempts to save the
+       echo-area message, which signals memory-full again, etc.
 
-2015-12-09  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+2016-01-11  Eli Zaretskii  <eliz@gnu.org>
 
-       Remove font workaround for limited outdated versions
+       Avoid unnecessary failures of auto-saving after fatal error
 
-       * src/macfont.m (mac_font_descriptor_get_adjusted_weight): Remove
-       workaround for HiraginoSans-W7 on OS X 10.11 and 10.11.1.
+       * src/w32.c (map_w32_filename): Avoid non-trivial system calls for
+       the benefit of FAT volumes if we are called as part of shutting
+       down due to a fatal error, which probably means we are trying to
+       auto-save the session.
+       * src/lread.c (check_obarray): Don't bother making the obarray
+       valid if we are shutting down due to a fatal error.  This avoids
+       interfering with auto-saving the crashed session.
 
-2015-12-09  Anders Lindgren  <andlind@gmail.com>
+2016-01-11  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Don't add "." to load path (bug#21104)
+       Simplify HAVE_MODULES use in mark_maybe_pointer
 
-       When configured with --enable-locallisppath=no, which is the
-       default for OS X, the load-path incorrectly was populated with ".".
+       * src/alloc.c (HAVE_MODULES): Now a constant 0 if not defined,
+       so that later code can use 'if' rather than '#ifdef'.
+       (mark_maybe_pointer): Simplify based on HAVE_MODULES now
+       always working.
 
-       * src/lread.c (init_lread): Don't call `decode_env_path' when
-       PATH_SITELOADSEARCH is empty.
+2016-01-11  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-08  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Revert attempt to use 'noexcept' in typedef
 
-       * lisp/emacs-lisp/package.el (package--with-response-buffer):
+       This use of 'noexcept' runs afoul of the C++11 standard.
+       Problem reported by Philipp Stephani in:
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00706.html
+       * src/emacs-module.c (emacs_finalizer_function):
+       Move this typedef here ...
+       * src/emacs-module.h: ... from here, and use only the C
+       version of the typedef.  The typedef is now private since it
+       is never used in the .h file now and anyway it seemed to be
+       causing more confusion than it cured.
+       (make_user_ptr, get_user_finalizer, set_user_finalizer):
+       Open-code the type instead.
 
-       Search for the blank-line in the right buffer.
+2016-01-10  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-08  Glenn Morris  <rgm@gnu.org>
+       Update documentation of 'indirect-function'
 
-       * test/automated/simple-test.el (undo-auto-boundary-timer): Update
-       for recent change.
+       * doc/lispref/eval.texi (Function Indirection): Update the
+       documentation of 'indirect-function'.
 
-2015-12-08  Glenn Morris  <rgm@gnu.org>
+2016-01-10  Eli Zaretskii  <eliz@gnu.org>
 
-       Fix some display-warning usage.
+       Update documentation for obsoleting 'syntax-begin-function'
 
-       * lisp/files.el (hack-local-variables, hack-dir-local-variables):
-       * lisp/calendar/diary-lib.el (diary-include-files, diary-sexp-entry):
-       * lisp/calendar/holidays.el (calendar-holiday-list):
-       * lisp/mail/rmailout.el (rmail-output-read-file-name):
-       Fix display-warning usage.
+       * doc/lispref/syntax.texi (Position Parse): Undocument
+       'syntax-begin-function' that is now obsolete.
 
-2015-12-08  Glenn Morris  <rgm@gnu.org>
+2016-01-10  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/calendar/cal-html.el: Require diary-lib.
+       Document new features if Eshell
 
-       (cal-html-list-diary-entries): Handle no diary.  (Bug#21994)
+       * doc/misc/eshell.texi (Input/Output): Document the new
+       '#<bufname>' syntax.
+       (Input/Output): Document 'eshell-destroy-buffer-when-process-dies'.
+       Disable "Key Index" generation, as there are no @kindex entries in
+       this manual.
 
-2015-12-08  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+2016-01-10  Michael Albinus  <michael.albinus@gmx.de>
 
-       Add Obsolete-since header to eudcb-ph.el
+       Handle too long commands in Tramp
 
-       * lisp/obsolete/eudcb-ph.el: Add Obsolete-since header.
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link)
+       (tramp-do-file-attributes-with-ls): Send sequence of commands, in
+       order to not exceed shell command line limit.
 
-2015-12-07  Paul Eggert  <eggert@cs.ucla.edu>
+       * test/automated/tramp-tests.el (tramp--test-darwin-p): Remove.
+       (tramp--test-utf8): Include Arabic file name, again.
 
-       Spelling fixes
+2016-01-10  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * doc/misc/calc.texi (Predefined Units): Use the bland modern
-       scientific style for spelling the units “ampere” and
-       “angstrom” rather than the older style “Ampere” and
-       “Ångstrom”.  The latter spelling was wrong anyway (it should
-       have been “Ångström”).
-       * lisp/emacs-lisp/ert.el (ert--explain-equal-rec):
-       Fix misspelling of ‘atom’ in code.
+       * .gitattributes: *.cur and *.pif are binary files too.
 
-2015-12-07  Eli Zaretskii  <eliz@gnu.org>
+2016-01-10  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       Improve documentation of kill commands
+       * src/alloc.c (mark_maybe_pointer): HAVE_MODULES may be undefined
 
-       * lisp/simple.el (region-extract-function, delete-backward-char)
-       (delete-forward-char, kill-region, copy-region-as-kill)
-       (kill-ring-save): Better document the optional argument REGION in
-       the doc strings.  Mention in the doc strings that text put in the
-       kill-ring can be filtered by 'filter-buffer-substring'.
+2016-01-10  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * doc/lispref/text.texi (Kill Functions): Mention that functions
-       described in this subsection can filter text they put in the
-       kill-ring.  Add a cross-reference to "Buffer Contents" and an
-       index entry.  Document the optional argument 'region' and its
-       effect.
-       (Bug#21315)
+       * sh-script.el (sh-smie-sh-rules): Improve indentation inside $(...)
 
-2015-12-07  Alan Mackenzie  <acm@muc.de>
+       * lisp/progmodes/sh-script.el (sh-smie-sh-rules): Improve indentation
+       within $(...).
+       * test/indent/shell.sh: Add corresponding test.
 
-       Further progress making Isearch, Ispell, Replace work with Follow Mode.
+2016-01-09  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * lisp/follow.el: (follow-mode): Remove references to sit*-for-function, which
-       no longer exists.  Add follow-post-command-hook to  three special purpose
-       hooks at setup, and remove them at tear down.
+       * src/alloc.c (mark_maybe_pointer): Also check wide-int's emacs_value
 
-       * lisp/isearch.el: (isearch-update): invoke isearch-update-post-hook before
-       isearch-lazy-highlight-new-loop.
-       (isearch-lazy-highlight-new-loop): Restore this function to what it previously
-       was, merging the functionality of isearch-lazy-highlight-maybe-new-loop into
-       it.
-       (isearch-lazy-highlight-maybe-new-loop): function removed.
+       (mark_memory): Simplify loop.  Don't assume a pointer-sized word can be
+       cast to Lisp_Object.
 
-       * lisp/replace.el: (replace-update-post-hook): New hook variable.
-       (perform-replace): Add second (nil) argument to looking-back.  Invoke
-       replace-update-post-hook before calling replace-highlight.
+2016-01-09  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * lisp/textmodes/ispell.el: (ispell-update-post-hook): New hook variable.
-       (ispell-command-loop): invoke ispell-update-post-hook.  Add GROUP argument to
-       call of pos-visible-in-window-p.
-       (ispell-display-buffer): Place *Choices* window at the top of the last window
-       in a window group.
+       Use short date for 'hg annotate', and output the author
 
-2015-12-07  Alan Mackenzie  <acm@muc.de>
+       * lisp/vc/vc-hg.el (vc-hg-annotate-command):
+       Change '-d' to '-dq'.  (Bug#21805)
+       (vc-hg-annotate-switches): Default to "-u" "--follow".
+       (vc-hg-annotate-re): Update to recognize the short date format
+       and the optional username.
+       (vc-hg-annotate-time)
+       (vc-hg-annotate-extract-revision-at-line): Update accordingly.
 
-       Amend doc of `mapconcat': it can take sequences, not merely strings.
+       * test/automated/vc-hg.el: New file.
 
-       * doc/lispref/functions.texi (Mapping Functions): Amend the doc of `mapconcat'
-       to say that SEPARATOR and the results from FUNCTION may be any character
-       sequences, not just strings.  Add an @xref to "Sequences Arrays Vectors".
+2016-01-09  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-07  Michael Albinus  <michael.albinus@gmx.de>
+       Spelling fix
 
-       Fix an utf8 problem for Tramp on BSD
+2016-01-09  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
-       Make lax check for utf8.
-       (tramp-get-remote-locale): Add "en_US.UTF-8" as candidate.
+       Document user-level functions in project.el
 
-2015-12-07  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+       * lisp/progmodes/project.el (project-find-file)
+       (project-or-external-find-file): Add doc strings.
 
-       Make eudcb-ph.el obsolete
+2016-01-09  Eli Zaretskii  <eliz@gnu.org>
 
-       * doc/misc/eudc.texi: Bump version to 1.40.0.
-       Remove PH/QI sections and mentions.
-       * lisp/obsolete/eudcb-ph.el: Make obsolete.
-       * lisp/net/eudc-vars.el (eudc-known-protocols): Remove ph.
-       (eudc-ph-bbdb-conversion-alist): Make obsolete.
-       * etc/NEWS: Mention this.  (Bug#21191)
+       Document the user-level features of the Xref package
 
-2015-12-07  Paul Eggert  <eggert@cs.ucla.edu>
+       * doc/emacs/maintaining.texi (Maintaining): Add a list of
+       described features.
+       (Xref): New section, made out of thoroughly rewritten "Tags"
+       section.
+       (Find Identifiers, Looking Up Identifiers, Xref Commands)
+       (Identifier Search, List Identifiers): New subsections,
+       incorporating the old tags commands and the new xref commands.
+       (Tags Tables, Tag Syntax, Create Tags Table, Etags Regexps):
+       Section and subsections demoted to a lower level.
+       * doc/emacs/search.texi (Search):
+       * doc/emacs/windows.texi (Pop Up Window):
+       * doc/emacs/frames.texi (Creating Frames):
+       * doc/emacs/programs.texi (Imenu, Symbol Completion):
+       * doc/emacs/building.texi (Grep Searching):
+       * doc/emacs/dired.texi (Operating on Files):
+       * doc/emacs/glossary.texi (Glossary): All references to tags changed.
 
-       Remove overenthusiastic eassert
+2016-01-09  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * src/lisp.h (XSYMBOL): Remove eassert incorrectly added in
-       previous change.  It breaks on MS-Windows --with-wide-int.
-       Problem reported by Eli Zaretskii in:
-       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00275.html
+       * loading.texi: Add `define-type' entry for load-history
 
-2015-12-06  Paul Eggert  <eggert@cs.ucla.edu>
+       * doc/lispref/loading.texi (Where Defined): Remove incorrect
+       cl-defmethod description, and add missing define-type entry.
 
-       Pacify gcc -Wparentheses
+2016-01-09  Eli Zaretskii  <eliz@gnu.org>
 
-       * src/xdisp.c (row_containing_pos): Reparenthesize.
+       Improve doc strings and prompts in xref.el
 
-2015-12-06  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/progmodes/xref.el (xref-backend-functions)
+       (xref-find-definitions): Doc fixes.
+       (xref-query-replace): Doc fix.  Improve prompts for arguments.
 
-       Port mod-test to 32-bit Emacs --without-wide-int
+2016-01-09  Alan Mackenzie  <acm@muc.de>
 
-       * modules/mod-test/test.el (mod-test-sum-test):
-       Bring back the 2**29 tests, but port them to 32-bit Emacs
-       --without-wide-int.
+       Allow the use of `font-lock-extend-region-multiline' in CC Mode.
 
-2015-12-06  Michael Albinus  <michael.albinus@gmx.de>
+       * lisp/progmodes/cc-mode.el (c-font-lock-init): Remove
+       `font-lock-extend-regions-wholelines' from
+       `font-lock-extend-region-functions' rather than setting the latter to
+       nil.
 
-       Fix minor Tramp problems found on BSD
+2016-01-09  Michael Albinus  <michael.albinus@gmx.de>
 
-       * lisp/net/tramp-sh.el (tramp-perl-file-truename): Do not append
-       trailing slash.  Quote apostrophes.
-       (tramp-sh-handle-file-truename): Do not append trailing slash in
-       the "ls" case.
-       (tramp-get-ls-command-with-w-option): New defun.
-       (tramp-do-file-attributes-with-ls)
-       (tramp-do-directory-files-and-attributes-with-stat): Use it.
+       Fix coding system for Tramp on OS X.
 
-       * test/automated/tramp-tests.el
-       (tramp-test31-special-characters-with-perl)
-       (tramp-test31-special-characters-with-ls)
-       (tramp-test32-utf8-with-perl, tramp-test32-utf8-with-ls):
-       Suppress also readlink.
+       * lisp/net/tramp-compat.el: Require ucs-normalize.
 
-2015-12-06  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+       Set coding system to `utf-8-hfs' for Mac OS X.
 
-       Fix cursor display when invisible text is at line beginning
+       * test/automated/tramp-tests.el (tramp-test29-vc-registered):
+       Flush directory properties when needed.
+       (tramp--test-utf8): Include Chinese file name, again.
 
-       * src/xdisp.c (redisplay_window): When scrolling fails to show
-       point, prefer using the desired matrix if possible for finding the
-       fallback glyph row for displaying the cursor.  (Bug#22098)
-       (row_containing_pos): Exit the loop as soon as we hit the first
-       disabled glyph row.  Otherwise we risk accessing garbled data and
-       departing to the no-no land.
+2016-01-09  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-06  Paul Eggert  <eggert@cs.ucla.edu>
+       Update 'load-history' docs
 
-       Improve module interface when WIDE_EMACS_INT
+       * doc/lispref/loading.texi (Where Defined): Update the list of
+       forms in 'load-history' by adding the forms created for the
+       'cl-generic' generics.  (Bug#21422)
 
-       * src/emacs-module.c (plain_values): New constant.
-       (module_nil): Now a constant.
-       (Finternal_module_call, value_to_lisp_bits, lisp_to_value_bits)
-       (syms_of_module): Use if, not #ifdef, so that both sides are
-       checked at compile-time, and so that GCC doesn’t complain
-       about an unused var in the typical case.  Also, depend on
-       plain_values, not on WIDE_EMACS_INT; the code shouldn’t assume
-       that WIDE_EMACS_INT implies !USE_LSB_TAG.
-       (value_to_lisp_bits, lisp_to_value_bits): New functions.
-       Sign-extend integers rather than zero-extending them, as small
-       negative integers are more likely.
-       (value_to_lisp, lisp_to_value): Rewrite in terms of the new *_bits
-       functions.
-       (HAVE_STRUCT_ATTRIBUTE_ALIGNED): Define to 0 if not already defined.
-       (mark_modules): Remove.  All uses removed.
-       (lisp_to_value): Don’t assume Fcons returns a pointer aligned
-       to GCALIGNMENT.
-       (syms_of_module): Check that module_nil converts to Qnil.
-       * src/lisp.h (lisp_h_XSYMBOL, XSYMBOL): Use signed conversion, since
-       we prefer signed to unsigned when either will do.
-       (TAG_PTR): Sign-extend pointers when USE_LSB_TAG, as this is
-       a bit better for emacs-module.c.
+2016-01-08  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-06  Paul Eggert  <eggert@cs.ucla.edu>
+       Fix (error ...) error
 
-       Port mod-test to x86-64 GNU/Linux running 32-bit
+       Problem reported by Glenn Morris in:
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00561.html
+       * lisp/vc/add-log.el (change-log-goto-source): Fix typos
+       introduced in my Aug 28 change, where I got confused by the
+       two meanings of (error ...).
 
-       * modules/mod-test/test.el (mod-test-sum-test):
-       Don’t attempt to match descriptions to operating systems.
-       It didn’t work on Fedora x86-64 running a 32-bit executable,
-       and it’s not worth the trouble anyway.
-       Port to 32-bit platforms by removing an assumption about
-       fixnum widths.
+2016-01-08  Alan Mackenzie  <acm@muc.de>
 
-2015-12-06  Michael Albinus  <michael.albinus@gmx.de>
+       Correctly analyze brace arguments in templated C++ function declarations.
 
-       Fix auto-revert-tests.el when filenotify isn't used
+       * lisp/progmodes/cc-defs.el (c-go-list-forward, c-go-list-backward): add
+       POS and LIMIT parameters, like the other c-go-list-* functions have.
 
-       * test/automated/auto-revert-tests.el (auto-revert--wait-for-revert):
-       Make it working also when filenotify isn't used.
+       * lisp/progmodes/cc-engine.el (c-restore-<>-properties): Check backwards
+       for a ?\( rather than a ?<.  (c-looking-at-inexpr-block): Handle names
+       followed by template specifiers.
 
-2015-12-06  Juri Linkov  <juri@linkov.net>
+2016-01-08  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/textmodes/ispell.el (ispell-highlight-spelling-error-overlay):
+       * lisp/cedet/mode-local.el (describe-function-orig-buffer): Declare.
 
-       Let-bind isearch-regexp-function to nil.  (Bug#22097)
+       * lisp/ffap.el (ffap-latex-mode): Avoid free variable.
 
-2015-12-05  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-01-08  Mark Oteiza  <mvoteiza@udel.edu>
 
-       * lisp/emacs-lisp/package.el: Don't install bad signatures (bug#22089)
+       * lisp/play/dunnet.el (dun-fix-screen): Avoid `end-of-buffer`.
 
-       (package--with-response-buffer): NOERROR and ERROR-FORM only
-       handle connection errors.
-       (bad-signature): New error type.
-       (package--check-signature-content): Use it.
-       (package--check-signature): Properly distinguish connection errors
-       from bad-signature errors.  Do the check for
-       `package-check-signature' `allow-unsigned' here instead of forcing
-       the callbacks to do it.  Add a new argument, UNWIND.
-       (package--download-one-archive, package-install-from-archive):
-       Update usage of `package--check-signature'.
+2016-01-08  Alan Mackenzie  <acm@muc.de>
 
-2015-12-05  Ulf Jasper  <ulf.jasper@web.de>
+       Respect fontification region calculated by major mode.  Fixes bug #22316.
 
-       Fix Bug#22092.
+       * lisp/font-lock.el (font-lock-extend-jit-lock-region-after-change): when a
+       fontification region has been calculated by a function on
+       font-lock-extend-after-change-region-function use this region rather than
+       changing the end position to somewhere else.
 
-       * lisp/calendar/icalendar.el (icalendar--get-unfolded-buffer):
-         Clean up inconsistent line endings. (Bug#22092)
-         (icalendar--clean-up-line-endings): New.
-       * test/automated/icalendar-tests.el (icalendar-real-world): Add test
-         for Bug#22092.
+2016-01-08  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+       Improve documentation of Delete Selection mode
 
-       Document 'bookmark-set-no-overwrite'
+       * lisp/delsel.el (delete-selection-mode)
+       (delete-selection-helper): Update and expand the doc strings.
+       (Bug#22296)
 
-       * doc/emacs/regs.texi (Bookmarks): Document the new command
-       'bookmark-set-no-overwrite' and its keybinding.
+       * doc/emacs/mark.texi (Using Region): Document the behavior of
+       delete commands in Delete Selection mode.  (Bug#22296)
 
-2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+       * doc/lispref/markers.texi (The Mark): Document how to add the
+       support for Delete Selection mode to Lisp programs. (Bug#22296)
 
-       Document new binding of 'mouse-buffer-menu'
+2016-01-08  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * doc/emacs/buffers.texi (Buffer Menus): 'mouse-buffer-menu' is
-       now also on C-F10.
+       Fix two project-find-file issues
 
-2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/progmodes/project.el (project--value-in-dir):
+       Temporarily set enable-local-variables to :all.
+       (project-find-file, project-or-external-find-file):
+       All autoloads.
+       (project--find-file-in): Require xref.
 
-       Initial documentation of dynamic modules
+2016-01-08  Eli Zaretskii  <eliz@gnu.org>
 
-       * doc/lispref/loading.texi (Dynamic Modules): New section with
-       initial documentation for dynamic modules.
-       * doc/lispref/elisp.texi (Top): Add "Dynamic Modules" to the
-       detailed menu
+       Clarify doc string of 'dired-current-directory'
 
-       * etc/NEWS: Fix typos in dynamic modules' entry.
+       * lisp/dired.el (dired-current-directory): Doc fix: clarify that
+       the return value might not end in a slash when called with the
+       optional argument non-nil.  (Bug#6273)
 
-2015-12-05  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-01-08  Eli Zaretskii  <eliz@gnu.org>
 
-       Remove copyright statements from trivial test files
+       Use the face of preceding text for displaying the ellipsis
 
-2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+       * src/xdisp.c (setup_for_ellipsis): Use the face of the preceding
+       text in it->saved_face_id for displaying the ellipsis, and ignore
+       the face, if any, of the invisible text.  (Bug#22320)
 
-       Add "Preliminaries" section to etc/DEBUG
+2016-01-08  Michael Albinus  <michael.albinus@gmx.de>
 
-       * etc/DEBUG: Add the "Preliminaries" section for GDB beginners.
-       Most of the content was suggested by Phillip Lord
-       <phillip.lord@russet.org.uk>.  Remove the section about debugging
-       with the Visual Studio, as building Emacs with the Microsoft
-       compilers is no longer supported.  Minor fixes in some other
-       sections.
+       Suppress Chinese file name test for OSX in tramp-tests.el
 
-2015-12-05  Alex Dunn  <dunn.alex@gmail.com>  (tiny change)
+       * test/automated/tramp-tests.el (tramp--test-utf8):
+       Remove instrumentation.  Suppress Chinese file name test for OSX.
 
-       Improve parsing of version strings
+2016-01-07  Glenn Morris  <rgm@gnu.org>
 
-       * lisp/subr.el (version-regexp-alist): Allow "." as priority separator
-       (version-to-list): More helpful error messages.
-       (version-to-list): ".5" is valid (update docstring).  Make
-       "22.8X3" invalid, as the doc string says.
+       * admin/admin.el (set-version): Also handle the NEWS file.
 
-       * test/automated/subr-tests.el (ert-test-version-parsing): New
-       tests for version string processing.
+2016-01-07  Dmitry Gutov  <dgutov@yandex.ru>
 
-2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+       apropos-library: Skip obvious duplicates; don't error on generics
 
-       Fix documentation of 'undo' changes
+       * lisp/apropos.el (apropos-library): Skip "was an autoload"
+       entries, to avoid obvious duplicates.  For each cl-defmethod
+       entry, take just its function symbol (bug#21422).
 
-       * doc/lispref/text.texi (Undo): Minor wording changes.  Use US
+2016-01-07  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add project-find-file and project-or-external-find-file
+
+       * lisp/minibuffer.el (completion-category-defaults):
+       Add `project-file' category.
+
+       * lisp/progmodes/project.el (project-find-file)
+       (project-or-external-find-file): New commands.
+       (project--find-file-in): New private function.
+
+       * lisp/progmodes/xref.el (xref-collect-matches): Use
+       `expand-file-name' on DIR, to expand the tildes.
+       (xref--find-ignores-arguments): Extract from
+       `xref--rgrep-command'.
+
+2016-01-06  Leo Liu  <sdl.web@gmail.com>
+
+       Add defvar-local to lisp-imenu-generic-expression
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression): Add
+         defvar-local.
+
+2016-01-06  Leo Liu  <sdl.web@gmail.com>
+
+       Revert commit b1e3d14845517bfa9fa5d6d3840f3ab3160306fd
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode):
+         Don't declare (indent 1).
+
+2016-01-06  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/emacs-lisp/autoload.el (autoload-find-destination): Doc fix.
+
+2016-01-06  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/emacs-lisp/autoload.el (autoload-find-destination):
+
+       Avoid specifying the length of a time object (it has not been "2"
+       for some time).
+
+2016-01-06  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Properly encode/decode base64Binary data in SOAP
+
+               * lisp/net/soap-client.el (soap-encode-xs-basic-type): Encode
+               base64Binary value as utf-8.
+               (soap-decode-xs-basic-type): Decode base64Binary value as utf-8.
+
+2016-01-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Obey coding-system-for-write when writing stdout/stderr in batch
+
+       * src/print.c (printchar_to_stream):
+       * src/xdisp.c (message_to_stderr): If coding-system-for-write has
+       a non-nil value, use it to encode output in preference to
+       locale-coding-system.  See the discussions in
+       http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00048.html
+       for the details.
+
+       * doc/lispref/os.texi (Terminal Output): Document how to send
+       non-ASCII text via 'send-string-to-terminal'.
+       (Batch Mode): Document how text written to standard streams is
+       encoded.  Fix inaccuracy regarding which output streams are used
+       by output functions in batch mode.
+
+2016-01-06  Xue Fuqiao  <xfq.free@gmail.com>
+
+       * doc/misc/efaq.texi (Packages that do not come with Emacs):
+       Update the URI of MELPA and marmalade-repo.  Reported by CHENG Gao
+       <chenggao@royau.me> in
+       https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00390.html.
+
+2016-01-05  Maksim Golubev  <maksim.golubev72@gmail.com>  (tiny change)
+
+       * lisp/progmodes/opascal.el (opascal-mode-syntax-table):
+
+       Fix backslash.  (Bug#22224)
+
+2016-01-05  Federico Beffa  <beffa@ieee.org>  (tiny change)
+
+       * lisp/progmodes/xscheme.el (xscheme-prompt-for-expression-exit):
+
+       Make it actually work.  (Bug#22265)
+
+2016-01-05  Alan Mackenzie  <acm@muc.de>
+
+       Remove function wrongly on AWK Mode value of context fontification hook.
+
+       * lisp/progmodes/cc-langs.el (c-before-context-fontification-functions):
+       swap order of entries so that awk's entry isn't superseded by the default.
+
+       * lisp/progmodes/cc-mode.el (c-before-context-fl-expand-region): Correct
+       to handle nil value of c-before-context-fontification-functions.
+
+2016-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/buffer.c: Stick with ASCII in doc string.
+
+2016-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Reword transient-mark-mode doc string
+
+       * src/buffer.c (syms_of_buffer): Reword doc string to avoid confusion.
+       The value 'lambda (literally) can be interpreted as (quote lambda),
+       which is not intended here; we want just the lambda symbol.
+
+2016-01-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Update doc string of 'selective-display'
+
+       * src/buffer.c (syms_of_buffer) <selective-display>: Say that
+       using it with the value of 't' is obsolete.  (Bug#1092)
+
+2016-01-05  Alan Mackenzie  <acm@muc.de>
+
+       Make C++ buffers writeable when writing their initial text properties.
+
+       This is a correction to yesterday's CC Mode patch.
+
+       * lisp/progmodes/cc-engine.el (c-before-change-check-<>-operators): Put
+       c-save-buffer-state around the function rather than a mere `let'.
+
+2016-01-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Additional changes for "make check-expensive"
+
+       * CONTRIBUTE : Encourage use of ":tags '(:expensive-test)".
+       Explain make target `check-expensive'.
+
+       * etc/NEWS: Mention new make target `check-expensive'.
+
+       * test/automated/Makefile.in (check-doit): New target.
+       (check, check-expensive): Use it.
+
+2016-01-04  Alan Mackenzie  <acm@muc.de>
+
+       Apply text properties for <, > in new after-change function (C++ Java Modes).
+
+       These are category/syntax-table properties to give < and > paren syntax.
+       Also apply certain `c-type' text properties to the insides of <..> constructs
+       to ensure that identifiers contained by them get fontified.  This patch fixes
+       bug #681.
+
+       * lisp/progmodes/cc-cmds.el (c-electric-lt-gt): Reformulate due to new
+       after-change action.
+
+       * lisp/progmodes/cc-engine.el (c-before-change-check-<>-operators): Expand
+       change region to include <s and >s which might not be already marked as
+       parens, rather than just when paren text properties are removed.
+       (c-restore-<>-properties): New after-change function, which applies text
+       properties marking < and > with paren syntax.
+
+       * lisp/progmodes/cc-fonts.el (c-font-lock-declarations): Ensure `c-type'
+       properties are applied to the interiors of <...> constructs, to ensure
+       fontification of identifiers there.
+
+       * lisp/progmodes/cc-langs.el (c-before-font-lock-functions): Add
+       c-restore-<>-properties to this list for C++ and Java.
+
+       * lisp/progmodes/cc-mode.el (c-common-init): When invoking
+       c-before-font-lock-functions, exclude c-restore-<>-properties from the
+       functions invoked.
+       (c-before-change): Initialize c-new-BEG/END here (rather than c-after-change)
+       to allow modification by before-change functions.
+       (c-after-change): Amend c-new-END here, rather than initializing it and
+       c-new-BEG.
+
+2016-01-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+
+2016-01-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Introduce check-expensive tests.
+
+       * Makefile.in (check-expensive):
+       * test/automated/Makefile.in (check-expensive): New target.
+
+       * test/automated/auto-revert-tests.el
+       (auto-revert-test01-auto-revert-several-files):
+       * test/automated/file-notify-tests.el (file-notify--deftest-remote):
+       * test/automated/tramp-tests.el (tramp-test26-process-file)
+       (tramp-test27-start-file-process, tramp-test28-shell-command)
+       (tramp-test29-vc-registered)
+       (tramp-test31-special-characters-with-stat)
+       (tramp-test31-special-characters-with-perl)
+       (tramp-test31-special-characters-with-ls)
+       (tramp-test32-utf8-with-stat, tramp-test32-utf8-with-perl)
+       (tramp-test32-utf8-with-ls, tramp-test33-asynchronous-requests)
+       (tramp-test35-unload): Tag the tests as :expensive-test.
+
+2016-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       shr-tag-video bug fix
+
+       * shr.el (shr-tag-video): Protect against the `poster' being
+       empty.
+
+2016-01-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Minor fixes in tramp-tests.el
+
+       * test/automated/tramp-tests.el (tramp-test26-process-file):
+       Move point properly.
+       (tramp-test29-vc-registered): Work with relative file names.
+
+2016-01-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Ensure redisplay when 'truncate-lines' is set
+
+       * lisp/frame.el (redisplay--variables): Add 'truncate-lines'.
+       (Bug#22303)
+
+2016-01-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a doc string of 'transient-mark-mode'
+
+       * src/buffer.c (syms_of_buffer) <transient-mark-mode>: Prevent
+       "lambda" in doc string from becoming a link to lambda expressions.
+
+2016-01-04  Eli Zaretskii  <eliz@gnu.org>
+
+       MS-Windows followup to latest gnulib update
+
+       * nt/gnulib.mk (EXTRA_DIST): Add ignore-value.h.
+
+2016-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling fix
+
+2016-01-03  Jens Lechtenboerger  <jens.lechtenboerger@fsfe.org>
+
+       Do secure signed Bcc handling
+
+       * lisp/gnus/message.el (message-send): Do secure signed Bcc handling
+       (bug#18718).
+
+2016-01-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Avoid stdio in SIGINT handler
+
+       * admin/merge-gnulib (GNULIB_MODULES): Add ignore-value.
+       * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
+       * lib/ignore-value.h: New file, from gnulib.
+       * src/keyboard.c: Include it.
+       (write_stdout, read_stdin): New functions.
+       (handle_interrupt): Use them instead of printf and getchar,
+       and avoid fflush when handling signals.
+
+2016-01-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * doc/misc/texinfo.tex: Revert unwanted copyright change.
+
+2016-01-03  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/align.el (align): Simplify a lambda
+
+       * lisp/align.el (align): Fix arg order in call to `align-region'
+
+2016-01-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation next-error in buffers with selective-display
+
+       * lisp/progmodes/compile.el (compilation-beginning-of-line): New
+       function.
+       (compilation-internal-error-properties)
+       (compilation-next-error-function, compilation-set-window): Use
+       it.  (Bug#1092)
+
+2016-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nsm.el (nsm-check-protocol): Fix typo in the message.
+
+2016-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       Add SHA1 warnings for high network security settings
+
+       * nsm.el (nsm-check-protocol): When using high security, warn
+       about SHA1 certificates, which are now believed to be open to
+       spoofing.
+
+2016-01-02  Jens Lechtenboerger  <jens.lechtenboerger@fsfe.org>
+
+       Refactor mml-smime.el, mml1991.el, mml2015.el
+
+       (Maybe this is the last merge from Gnus git to Emacs git)
+
+       Cf. discussion on ding mailing list, messages in
+       <http://thread.gmane.org/gmane.emacs.gnus.general/86228>.
+       Common code from the three files mml-smime.el, mml1991.el, and
+       mml2015.el is moved to mml-sec.el.  Auxiliary functions are added
+       to gnus-util.el.
+
+       The code is supported by test cases with necessary test keys.
+
+       Documentation in message.texi is updated.
+
+       * doc/misc/message.texi (Security, Using S/MIME):
+       Update for refactoring mml-smime.el, mml1991.el, mml2015.el.
+       (Using OpenPGP): Rename from "Using PGP/MIME"; update contents.
+       (Passphrase caching, Encrypt-to-self, Bcc Warning): New sections.
+
+       * lisp/gnus/gnus-util.el (gnus-test-list, gnus-subsetp, gnus-setdiff):
+       New functions.
+
+       * lisp/gnus/mml-sec.el: Require gnus-util and epg.
+       (epa--select-keys): Autoload.
+       (mml-signencrypt-style-alist, mml-secure-cache-passphrase): Doc fix.
+       (mml-secure-openpgp-signers): New user option;
+       make mml1991-signers and mml2015-signers obsolete aliases to it.
+       (mml-secure-smime-signers): New user option;
+       make mml-smime-signers an obsolete alias to it.
+       (mml-secure-openpgp-encrypt-to-self): New user option;
+       make mml1991-encrypt-to-self and mml2015-encrypt-to-self obsolete
+       aliases to it.
+       (mml-secure-smime-encrypt-to-self): New user option;
+       make mml-smime-encrypt-to-self an obsolete alias to it.
+       (mml-secure-openpgp-sign-with-sender): New user option;
+       make mml2015-sign-with-sender an obsolete alias to it.
+       (mml-secure-smime-sign-with-sender): New user option;
+       make mml-smime-sign-with-sender an obsolete alias to it.
+       (mml-secure-openpgp-always-trust): New user option;
+       make mml2015-always-trust an obsolete alias to it.
+       (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
+       New user options.
+       (mml-secure-cust-usage-lookup, mml-secure-cust-fpr-lookup)
+       (mml-secure-cust-record-keys, mml-secure-cust-remove-keys)
+       (mml-secure-add-secret-key-id, mml-secure-clear-secret-key-id-list)
+       (mml-secure-cache-passphrase-p, mml-secure-cache-expiry-interval)
+       (mml-secure-passphrase-callback, mml-secure-check-user-id)
+       (mml-secure-secret-key-exists-p, mml-secure-check-sub-key)
+       (mml-secure-find-usable-keys, mml-secure-select-preferred-keys)
+       (mml-secure-fingerprint, mml-secure-filter-keys)
+       (mml-secure-normalize-cust-name, mml-secure-select-keys)
+       (mml-secure-select-keys-1, mml-secure-signer-names, mml-secure-signers)
+       (mml-secure-self-recipients, mml-secure-recipients)
+       (mml-secure-epg-encrypt, mml-secure-epg-sign): New functions.
+
+       * lisp/gnus/mml-smime.el: Require epg;
+       refactor declaration and autoloading of epg functions.
+       (mml-smime-use): Doc fix.
+       (mml-smime-cache-passphrase, mml-smime-passphrase-cache-expiry):
+       Obsolete.
+       (mml-smime-get-dns-cert, mml-smime-get-ldap-cert):
+       Use format instead of gnus-format-message.
+       (mml-smime-epg-secret-key-id-list): Remove variable.
+       (mml-smime-epg-passphrase-callback, mml-smime-epg-find-usable-key)
+       (mml-smime-epg-find-usable-secret-key): Remove functions.
+       (mml-smime-epg-sign, mml-smime-epg-encrypt): Refactor.
+
+       * lisp/gnus/mml1991.el (mml1991-cache-passphrase)
+       (mml1991-passphrase-cache-expiry): Obsolete.
+       (mml1991-epg-secret-key-id-list): Remove variable.
+       (mml1991-epg-passphrase-callback, mml1991-epg-find-usable-key)
+       (mml1991-epg-find-usable-secret-key): Remove functions.
+       (mml1991-epg-sign, mml1991-epg-encrypt): Refactor.
+
+       * lisp/gnus/mml2015.el (mml2015-cache-passphrase)
+       (mml2015-passphrase-cache-expiry): Obsolete.
+       (mml2015-epg-secret-key-id-list): Remove variable.
+       (mml2015-epg-passphrase-callback, mml2015-epg-check-user-id)
+       (mml2015-epg-check-sub-key, mml2015-epg-find-usable-key)
+       (mml2015-epg-find-usable-secret-key): Remove functions.
+       (mml2015-epg-decrypt, mml2015-epg-clear-decrypt, mml2015-epg-sign)
+       (mml2015-epg-encrypt): Refactor.
+
+2016-01-02  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/progmodes/fortran.el (fortran-make-syntax-propertize-function):
+
+       Explicitly ignore case.  (Bug#22262)
+
+2016-01-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       (semantic-symref-derive-find-filepatterns): Return a list
+
+       * lisp/cedet/semantic/symref/grep.el
+       (semantic-symref-derive-find-filepatterns): Return a list.
+       (semantic-symref-perform-search): Quote the result here once and for all.
+
+2016-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix xref-find-references on MS-Windows
+
+       * lisp/cedet/semantic/symref/grep.el
+       (semantic-symref-derive-find-filepatterns): Use
+       'shell-quote-argument' instead of manually quoting in a way that
+       only works with Posix shells.  (Bug#22289)
+
+2016-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new features of tildify-mode
+
+       * lisp/textmodes/tildify.el (tildify-foreach-ignore-environments)
+       (tildify-mode): Spelling fixes in doc strings.
+
+       * etc/NEWS: Reformat the tildify-mode entry.
+
+2016-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new features of Whitespace mode
+
+       * doc/emacs/display.texi (Useless Whitespace): Document
+       'whitespace-toggle-options' and the new 'big-indent' style.
+       Document 'whitespace-big-indent-regexp'.  Document the Global
+       Whitespace mode.
+
+2016-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of new Hide-IfDef features
+
+       * etc/NEWS: Expand and reword Hide-IfDef section.
+
+2016-01-02  Leo Liu  <sdl.web@gmail.com>
+
+       Fix regression in font-locking cl-assert and cl-check-type
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Fix
+         el-errs-re.
+
+2016-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling and grammar fixes
+
+2016-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix copyright years by hand
+
+       These are dates that admin/update-copyright did not update, or
+       updated incorrectly.
+
+2016-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update copyright year to 2016
+
+       Run admin/update-copyright.
+
+2016-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from gnulib
+
+       This mostly just updates copyright dates of gnulib files.
+       It also updates to the latest version of texinfo.tex.
+
+2015-12-31  Mark Oteiza  <mvoteiza@udel.edu>
+
+       lisp/emacs-lisp/chart.el (chart-new-buffer): Move to silence byte compiler.
+
+2015-12-31  Mark Oteiza  <mvoteiza@udel.edu>
+
+       Port chart.el methods to cl-generic.
+
+       cl-call-next-method cannot be used inside EIEIO's defmethod.
+       * lisp/emacs-lisp/chart.el: Require cl-generic at compile time.
+       * lisp/emacs-lisp/chart.el (initialize-instance, chart-draw):
+       (chart-draw-title, chart-size-in-dir, chart-draw-axis):
+       (chart-axis-draw, chart-translate-xpos, chart-translate-ypos):
+       (chart-translate-namezone, chart-draw-data, chart-add-sequence):
+       (chart-trim, chart-sort): Use cl-defmethod instead of defmethod.
+
+2015-12-31  Brian Burns  <bburns.km@gmail.com>
+
+       Add nt/INSTALL.W64 build instructions
+
+       * nt/INSTALL.W64: New file.
+       * nt/INSTALL: Point to INSTALL.W64 for 64-bit build instructions.
+
+2015-12-31  Joakim Jalap  <joakim.jalap@fastmail.com>
+
+       Add new input method 'programmer-dvorak'
+
+       * lisp/leim/quail/programmer-dvorak.el ("programmer-dvorak"): New
+       input method.
+
+       * etc/NEWS: Mention it.
+
+2015-12-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Allow to invoke original M-TAB binding in 'flyspell-prog-mode'
+
+       * lisp/textmodes/flyspell.el (flyspell-prog-mode): Record the
+       original M-TAB binding in a buffer-local variable.
+       (flyspell-auto-correct-word): Invoke the original binding of M-TAB
+       if that is recorded, when point is in a place where flyspell
+       should not be active (e.g., because the user turned on
+       'flyspell-prog-mode').  (Bug#18533)
+
+2015-12-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix EWW rendering of long RTL lines
+
+       * lisp/net/shr.el (shr-insert-document): Undo any previous hscroll
+       of the selected window before filling its lines.  (Bug#22250)
+
+2015-12-31  Vincent Belaïche  <vincentb1@users.sourceforge.net>
+
+       fix  bug#21054
+
+       * ses.el (ses-check-curcell): Call `ses-set-curcell' unconditionally
+
+2015-12-31  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Clean up cairo printing code
+
+       * src/gtkutil.c (xg_get_page_setup): Use listn.
+       * src/xfns.c (Fx_export_frames, Fx_print_frames_dialog): Doc fix.  Use
+       decode_window_system_frame and FRAME_VISIBLE_P.
+       (Fx_print_frames_dialog): Use redisplay_preserve_echo_area instead
+       of Fdisplay.
+       * src/xterm.c (x_cr_export_frames): Use redisplay_preserve_echo_area
+       instead of Fdisplay.  Temporarily unblock_input around QUIT.
+
+2015-12-30  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Add handle_user_signal_hook
+
+       * src/keyboard.h (handle_user_signal_hook): New declaration.
+       * src/keyboard.c (handle_user_signal_hook): New variable.
+       (handle_user_signal): Call it.
+
+2015-12-30  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Avoid writing to purespace
+
+       * src/alloc.c (Fmake_string): Don't write to empty string contents.
+       (allocate_vector): Don't write to empty vector size.
+       * src/character.h (CHECK_CHARACTER_CAR, CHECK_CHARACTER_CDR):
+       Don't call unnecessary XSETCAR or XSETCDR.
+       * src/lisp.h (STRING_SET_UNIBYTE, STRING_SET_MULTIBYTE): Don't
+       write to empty string size_byte.
+
+2015-12-30  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Remove unused variable
+
+       * lisp/international/mule-cmds.el: Remove unused variable
+       `mac-system-coding-system'.
+
+2015-12-30  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * configure.ac: Find libxml2 headers in Xcode SDK dir on Darwin.
+
+2015-12-30  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Use posix_openpt instead of openpty on Darwin
+
+       * configure.ac (PTY_ITERATION, FIRST_PTY_LETTER, PTY_OPEN)
+       (PTY_NAME_SPRINTF, PTY_TTY_NAME_SPRINTF): Remove
+       Darwin-specific definitions.  Use posix_openpt instead.
+
+2015-12-30  Shakthi Kannan  <shakthimaan@gmail.com>
+
+       Document support for ':documentation' in Lisp mode
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-string-in-doc-position-p)
+       (lisp-string-after-doc-keyword-p)
+       (lisp-font-lock-syntactic-face-function): Add doc strings.
+
+2015-12-30  Shakthi Kannan  <shakthimaan@gmail.com>
+
+       Document new features of TeX mode
+
+       * doc/emacs/text.texi (TeX Print): Document
+       'tex-print-file-extension'.
+       * doc/emacs/programs.texi (Misc for Programs): Document support
+       for Prettify Symbols mode in TeX mode.
+
+2015-12-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify docs of hscroll in RTL text
+
+       * doc/lispref/windows.texi (Horizontal Scrolling): Clarify the
+       meaning of a window's horizontal scroll amount for RTL paragraphs.
+
+2015-12-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix rendering of HTML pages that use character composition
+
+       * src/indent.c (Fvertical_motion): Fix the case when point starts
+       in the middle of a composition, as in shr-vertical-motion.
+       (Bug#22250)
+
+2015-12-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid some compiler warnings in w32.c
+
+       * src/w32.c (codepage_for_filenames, crlf_to_lf)
+       (ansi_encode_filename, socket_to_fd, sys_write)
+       (check_windows_init_file): Avoid compiler warnings about
+       differences in pointer signedness.
+
+2015-12-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Undo ill-advised change
+
+       * lisp/progmodes/xref.el (xref-collect-matches): Undo
+       ill-advised change.  The hits come in the order that `find'
+       produces them in, which isn't alphabetical.
+
+2015-12-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Unbreak completion in python-mode buffers
+
+       * lisp/progmodes/python.el (python-shell-completion-at-point):
+       Unbreak in python-mode buffers.
+
+2016-01-09  Andrew Hyatt  <ahyatt@gmail.com>
+
+       Adding example replies to bug-triage.
+
+       * admin/notes/bug-triage: Added example replies. Also, as requested,
+         making the process notes into more of a checklist.
+
+2016-01-08  Andrew Hyatt  <ahyatt@gmail.com>
+
+       Rename the notes/admin/triage file to bug-triage.
+
+       * CONTRIBUTE: Change reference to the triage file name.
+       * admin/notes/triage: Rename file to admin/notes/bug-triage.
+
+2016-01-07  Glenn Morris  <rgm@gnu.org>
+
+       Allow creation of loaddefs files without timestamps.
+
+       * lisp/emacs-lisp/autoload.el (autoload-timestamps): New variable.
+       (autoload-generate-file-autoloads, update-directory-autoloads):
+       If autoload-timestamps is nil, write "t" instead of file timestamp.
+       (autoload-find-destination, update-directory-autoloads):
+       If timestamp is "t", use the modtime of the output file instead.
+
+2016-01-06  Glenn Morris  <rgm@gnu.org>
+
+       Doc tweaks.
+
+       * lisp/calendar/cal-hebrew.el (diary-hebrew-list-entries):
+       * lisp/calendar/cal-iso.el (calendar-iso-to-absolute)
+       (calendar-iso-from-absolute):
+       * lisp/calendar/cal-tex.el (cal-tex-comment):
+       * lisp/calendar/solar.el (calendar-time-display-form): Doc tweaks.
+
+2016-01-06  Glenn Morris  <rgm@gnu.org>
+
+       Build tweaks related to tags files.
+
+       * lib-src/Makefile.in (tagsfiles): New variable.
+       (TAGS): Also depend on the source files.  Use our own etags program.
+       * lisp/Makefile.in (ETAGS): Add EXEEXT.
+       (lisptagsfiles1, lisptagsfiles2, lisptagsfiles3, lisptagsfiles4):
+       Remove.
+       (tagsfiles): New, replacing lisptagsfiles1 etc.
+       Remove irrelevant source files here rather than in the TAGS rule.
+       (${ETAGS}): New rule.
+       (TAGS): Also depend on the etags executable.
+       * lwlib/Makefile.in (EXEEXT): New, set by configure.
+       (ETAGS): Add EXEEXT.
+       (${ETAGS}): New rule.
+       (ctagsfiles): Use "wildcard".
+       (TAGS): Also depend on the etags executable.
+       * nt/Makefile.in (ETAGS, tagsfiles): New variables.
+       (${ETAGS}): New rule.
+       (TAGS): Fix dependencies.
+       * oldXMenu/Makefile.in (EXEEXT): New, set by configure.
+       (ETAGS): New variable, replacing $TAGS.  Use our own etags program.
+       Remove "-t" argument.
+       (${ETAGS}): New rule.
+       (tagsfiles): New variable.
+       (TAGS): New rule, with proper dependencies.
+       * src/Makefile.in (ETAGS): Add EXEEXT.  Add a build rule.
+       (ctagsfiles1, ctagsfiles2): Use "wildcard".
+       (ctagsfiles3): Remove.
+       (TAGS): Depend on etags.
+       (../lisp/TAGS, $(lwlibdir)/TAGS): Let the rules in the relevant
+       directories decide if updates are needed.
+
+2016-01-06  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/Makefile.in (CAL_SRC): Skip calendar.el.
+
+2016-01-06  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/emacs-lisp/package-tests.el
+
+       (package-test-macro-compilation): Fixup branch merge.
+
+2016-01-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix fallout from merging emacs-25 branch in test/
+
+       * .gitignore: Update for the new place of biditest.txt.
+       * test/automated/: Directory removed.  All files moved to their
+       proper places.
+       * test/etags/: Directory removed.  All files moved to their proper
+       places.
+       * test/automated/url-parse-tests.el: File removed; it was an exact
+       copy of the same file in test/lisp/url/.
+       * test/automated/url-expand-tests.el: Moved to test/lisp/url/.
+
+2016-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling fixes.
+
+2016-01-04  Daniel Colascione  <dancol@dancol.org>
+
+       Let users disable unsafe signal handling code
+
+       * src/keyboard.c (syms_of_keyboard): New user variables
+       `attempt-stack-overflow-recovery' and
+       `attempt-orderly-shutdown-on-fatal-signal'.
+       * src/sysdep.c (stack_overflow): Check
+       `attempt-stack-overflow-recovery'.
+       * src/emacs.c (terminate_due_to_signal): Check
+       `attempt-orderly-shutdown-on-fatal-signal'.
+
+2016-01-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       * configure.ac: Add error message for gfile on Nextstep.
+
+2016-01-03  John Wiegley  <johnw@newartisans.com>
+
+       Merge branch 'emacs-25-merge'
+
+2016-01-02  Vincent Belaïche  <vincentb1@users.sourceforge.net>
+
+       Align textually on fix done for emacs-25 branch for bug#21054
+
+       * lisp/ses.el (ses-check-curcell): Suppress ``temporary fix'' comment,
+       and useless `(if t ...)' in order to align textually on fix done for
+       emacs-25 branch for bug#21054.
+
+2016-01-02  K. Handa  <handa@gnu.org>
+
+       support rendering of wider range of combinging characters by ftfont backend
+
+       * lisp/language/hebrew.el (hebrew-shape-gstring): If the font backend
+       supports rendering of combining characters, call
+       font-shape-gstring.
+
+       * src/font.c (Ffont_get): Handle `combining-capability' property.
+       (syms_of_font): New symbol ":combining-capability'.
+
+       * src/font.h (struct font_driver): New member combining_capability.
+
+       * src/ftfont.c: Include "category.h".
+       (ftfont_driver): Initialize combining_capability to
+       ftfont_combining_capability.
+       (ftfont_shape_by_flt): If OTF is null, try to find a suitable
+       FLT in advance.
+       (ftfont_combining_capability): New function.
+
+2016-01-01  Andrew Hyatt  <ahyatt@gmail.com>
+
+       Add notes on bug triage procedure
+
+       * CONTRIBUTE: In section on the issue tracker, point to new triage file.
+       * admin/notes/triage: New file explaining triage procedure.
+
+2015-12-30  Vincent Belaïche  <vincentb1@users.sourceforge.net>
+
+       Correct ses-rename-cell cursor-intangible text prop updating.
+
+       There were two problems:
+
+       - First ses-rename-cell has to work when called non interactively
+         (with non-nil CELL argument), so in this case the start pos of
+         put-text-property cannot be plainly (point), you need a
+         ses-goto-print call before
+
+       - Second, the range itself was computed erronously, only the first
+         char was affected instead of the full cell width. This was not
+         noticeable prior to changes (Deprecate `intangible' and
+         `point-entered' properties) made by Stefan on 2015-04-13T19:51:15Z
+
+       * lisp/ses.el (ses-rename-cell): Correct computation of position range
+       to which the 'cursor-intangible text property has to be set to cell
+       new name.
+
+2015-12-30  Vincent Belaïche  <vincentb1@users.sourceforge.net>
+
+       Don't fake empty cells value by "" when printing with a lambda.
+
+       When using a lambda expression printer function the user should be
+       free to format differently a really empty cell, ie. containing nil,
+       from a cell containing an empty string "".
+
+       * ses.el (ses-call-printer): Replace `(or value "")' by just `value'
+       in the case of a lambda expression printer function.
+
+       * ses.texi (Printer functions): Add example and description about
+       lambda expression printer function handling all the possible values,
+       including unexpected ones.
+
+2015-12-30  Vincent Belaïche  <vincentb1@users.sourceforge.net>
+
+       Quick temporary hack to fix curcell refreshing.
+
+       The problem was caused by change: 2015-04-13 Deprecate `intangible'
+       and `point-entered' properties. The problem is that this change has
+       removed the (setq ses--curcell t) setting in the ses-command-hook
+       function.
+
+       * ses.el (ses-check-curcell): replace `(eq ses--curcell t)' by just `t' as
+       a condition to call function `ses-set-curcell'. Comment this as a quick
+       temporary hack to make it work, as I don't know yet whether a definite
+       correction would be to make the ses-set-curcell at every ses-check-curcell,
+       or to revert to the previous approach, ie marking ses--curcell as out-of-date
+       at every potentially cursor motion command.
+
+2015-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       Restrictive URL checking tweaks
+
+       * lisp/net/eww.el (eww): Check whether the domain is
+       restrictive instead of the string
+       (http://македонија.icom.museum is restrictive even if each
+       part is from a different script).
+
+2015-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       New function `puny-highly-restrictive-domain-p'
+
+       * lisp/net/puny.el (puny-highly-restrictive-string-p): Rename.
+       (puny-highly-restrictive-domain-p): New function.
+
+2015-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       eww build fix (require puny)
+
+2015-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       Transform non-restrictive domains to punycode for display
+
+       * lisp/net/eww.el (eww): Check whether the domain is Highly
+       Restrictive in the Unicode IDNA sense.
+
+2015-12-30  John Wiegley  <johnw@newartisans.com>
+
+       Merge emacs-25 into master (using imerge)
+
+2015-12-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix typos in CC Mode manual
+
+       * doc/misc/cc-mode.texi (c-offsets-alist, Style Variables): Fix
+       typos.  (Bug#22267)
+
+2015-12-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid assertion violations in compact_font_cache_entry
+
+       * src/alloc.c (compact_font_cache_entry): Don't use VECTORP to
+       avoid assertion violation in ASIZE.  (Bug#22263)
+
+2015-12-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix filling text with bidirectional characters in shr.el
+
+       * lisp/net/shr.el (shr-insert-document): Bind
+       bidi-display-reordering to nil while filling lines.  This is
+       required for when a line includes characters whose bidi
+       directionality is opposite to the base paragraph direction,
+       because columns are counted in the logical order.  (Bug#22250)
+
+2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further Unicode restrictive fixups
+
+       * puny.el (puny-highly-restrictive-p): Include the extra
+       identifier characters from table 3.
+
+2015-12-29  Martin Rudalics  <rudalics@gmx.at>
+
+       * src/xfns.c (x_create_tip_frame): Process alpha parameter.
+
+2015-12-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Sync with Tramp 2.2.13
+
+       * doc/misc/trampver.texi: Change version to "2.2.13.25.1".
+
+       * lisp/net/tramp-compat.el (tramp-compat-delete-dups):
+       Use `tramp-compat-funcall'.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-parse-device-names):
+       Make `split-string' call compatible with older Emacsen.
+
+       * lisp/net/trampver.el: Change version to "2.2.13.25.1".
+
+2015-12-29  Lambda Coder  <sjLambda@gmail.com>
+
+       * doc/misc/tramp.texi: Editorial revisions to the Tramp manual
+
+2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention that tls.el is secure by default, and will fail
+
+2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make tls.el use trustfiles by default
+
+       * lisp/net/tls.el (tls-program): Add a certfile by default (bug#21227).
+       (open-tls-stream): Insert the trustfile by looking at
+       `gnutls-trustfiles'.
+
+2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Refactor out gnutls-trustfiles
+
+       * lisp/net/gnutls.el (gnutls-trustfiles): Refactor out for reuse by tls.el.
+
+2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove --insecure from gnutls-cli invocation
+
+       * tls.el (tls-program): Default to using secure TLS
+       connections (bug#19284).
+
+2015-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function to say whether a string is restrictive
+
+       * puny.el (puny-highly-restrictive-p): New function.
+
+2015-12-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling fix
+
+2015-12-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port report-emacs-bug to deterministic builds
+
+       * lisp/mail/emacsbug.el (report-emacs-bug): Future-proof the
+       recent "built on" change to deterministic builds where
+       emacs-build-system will be nil.  See:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg01369.html
+
+2015-12-28  Jose A. Ortega Ruiz  <jao@gnu.org>  (tiny change)
+
+       Fix URL auth error message
+
+       * lisp/url/url-http.el (url-http-handle-authentication): Make the error
+       message more correct (bug#20069).
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention the new puny.el library
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       IDNA-related fixes for the URL library
+
+       * lisp/url/url-http.el (url-http-create-request): IDNA-encode
+       the Host: header.
+
+       * lisp/url/url-util.el (url-encode-url): Don't hex-encode
+       domain names, but leave them as UTF-8, so that they can be
+       IDNA-encoded later when contacting the host.
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       IDNA-encode all domain names in `open-network-stream'
+
+       * network-stream.el (open-network-stream)
+       (network-stream-open-plain, network-stream-open-starttls):
+       IDNA-encode all domain names, if needed.
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix puny-encoding all-non-ASCII domains
+
+       * puny.el (puny-encode-string): Fix the all-non-ASCII encoding case.
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * lisp/net/shr.el (shr-next-link): Don't bug out on adjacent links.
+
+2015-12-28  Tom Tromey  <tom@tromey.com>
+
+       set :safe on css-indent-offset
+
+       * lisp/textmodes/css-mode.el (css-indent-offset): Add :safe 'integerp.
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * eww.el (eww-mode): Remove superfluous bidi reset.
+
+2015-12-28  James Stout  <james.wolf.stout@gmail.com>  (tiny change)
+
+       Make chunked encoding trailer detection more compliant
+
+       * lisp/url/url-http.el
+       (url-http-chunked-encoding-after-change-function): Make
+       trailer detection more compliant (bug#16345).
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Reconnect erc even on server errors
+
+       * lisp/erc/erc-backend.el (erc-server-reconnect-p): Try to
+       reconnect even if a server error has occurred (bug#18527).
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix punycode short circuit logic
+
+       * puny.el (puny-encode-domain): Fix short-circuit logic.
+
+2015-12-28  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix Bug#10873 in `report-emacs-bug'
+
+       * lisp/mail/emacsbug.el (report-emacs-bug): If
+       `report-emacs-bug-no-explanations' is nil, make sure we can show
+       mail and warnings buffer on this frame (Bug#10873).
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       IDNA speed up
+
+       * puny.el (puny-encode-domain): Make the common non-IDNA case faster
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add IDNA domain encode/decode functions
+
+       * puny.el (puny-decode-domain): New function.
+       (puny-encode-domain): Ditto.
+       (puny-decode-digit): Fix digit decoding error.
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename idna.el to puny.el
+
+       * puny.el: Renamed from idna.el to avoid name collisions with
+       the external idna.el library.
+
+2015-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Always reset the bidi direction
+
+       * eww.el (eww-display-html): Always reset the bidi direction
+       to `left-to-right' (bug#22257).
+
+2015-12-28  Alan Mackenzie  <acm@muc.de>
+
+       Allow line comments ending with escaped NL to be continued to the next line.
+
+       Use this in C, C++, and Objective C Modes.  Fixes bug#22246
+
+       * src/syntax.c (comment-end-can-be-escaped): New buffer local variable.
+       (forw-comment, back-comment): On encountering an end of comment character,
+       test whether it is escaped when `comment-end-can-be-escaped' is non-nil.
+
+       * doc/lispref/syntax.texi (Control Parsing): Describe
+       `comment-end-can-be-escaped'.
+
+       * etc/NEWS (Lisp Changes): Describe `comment-end-can-be-escaped'.
+
+       * lisp/progmodes/cc-langs.el: New c-lang-setvar `comment-end-can-be-escaped'.
+
+2015-12-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       lisp/gnus/mml-sec.el (mml-secure-bcc-is-safe): Keep old Emacsen compatibility
+
+       * lisp/gnus/mml-sec.el (mml-secure-bcc-is-safe):
+       Don't use split-string with 4th arg for old Emacsen compatibility.
+
+2015-12-27  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Rename project-library-roots to project-external-roots
+
+       * lisp/progmodes/project.el (project-library-roots): Rename to
+       project-external-roots.
+       (project-library-roots-function): Rename to
+       project-vc-external-roots-function.  Only use it in the VC
+       backend, for now.  Update project-external-roots accordingly.
+       (project-vc-library-roots): Remove.
+       (project-or-libraries-find-regexp):
+       Rename to project-or-external-find-regexp.
+
+       * lisp/progmodes/elisp-mode.el (elisp-library-roots):
+       Rename to elisp-load-path-roots.
+
+       * lisp/progmodes/etags.el (etags-library-roots): Remove.  Use
+       an anonymous function for the default value of
+       project-vc-external-roots-function.
+
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * idna.el (idna-decode-string-internal): Implement decoding.
+
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further IDNA tweaks
+
+       (idna-encode-string): Make idna-encode-string safe for
+       non-ASCII use.
+
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clean up the code slightly
+
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Added basic idna encoding support
+
+       * lisp/net/idna.el: New file.
+
+2015-12-27  Vivek Dasmohapatra  <vivek@etla.org>
+
+       Disconnection fixes for erc
+
+       * lisp/erc/erc-backend.el (erc-server-reconnect-p): Don't
+       reconnect if the user has disconnected explicitly (bug#4589).
+
+2015-12-27  Thomas Riccardi  <riccardi.thomas@gmail.com>  (tiny change)
+
+       Further erc asynch fixes
+
+       * lisp/erc/erc-backend.el (erc-process-sentinel-2): Make
+       erc-server-connect to return even if the connection is not
+       ready.  Then erc-open and erc-server-reconnect do the
+       same. (bug#5650).
+
+2015-12-27  Vivek Dasmohapatra  <vivek@etla.org>
+
+       Make erc connect asynchronously
+
+       * lisp/erc/erc-backend.el (erc-server-reconnect): Use it to
+       reconnect asynchronously.
+
+       * lisp/erc/erc-backend.el (erc-open-network-stream): New function (bug#5650).
+
+2015-12-27  Deniz Dogan  <deniz@dogan.se>
+
+       Clear erc user list upon disconnection
+
+       * lisp/erc/erc-backend.el (erc-process-sentinel): Clear channel user
+       lists upon disconnection.  This prevents invalid channel
+       user lists when reconnecting (bug#10947).
+
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't bug out in erc after waking from sleep
+
+       * erc-backend.el (erc-server-send-ping): If the server has
+       closed connection, this may already have been detected and
+       `erc-server-last-received-time' has been set to nil (bug#13608).
+
+2015-12-27  David Edmondson  <dme@dme.org>
+
+       Proxy error in erc with multiple clients
+
+       * lisp/erc/erc.el (erc-channel-receive-names): Fix errors
+       generated when multiple IRC clients talk to a single IRC proxy
+       (bug#19034).
+
+2015-12-27  Dima Kogan  <dima@secretsauce.net>
+
+       Ensure that we don't have several timers in erc
+
+       * lisp/erc/erc-backend.el (erc-server-setup-periodical-ping): Checks
+       for existing timers in the alist before adding new ones.  If a
+       timer already exists, it is cancelled and
+       overwritten. (bug#19292).
+
+2015-12-27  Jens Lechtenboerger  <jens.lechtenboerger@fsfe.org>
+
+       * lisp/gnus/mml-sec.el: Fix warnings by adding autoloads
+       (bug#18718).
+
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * lisp/erc/erc-log.el (erc-log-setup-logging): Insert the previous log
+       at the start of the buffer, not at the end (bug#20496).
+
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * lisp/net/eww.el (eww-setup-buffer): Restore left-to-right defaults.
+
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't join erc channels doubly
+
+       * erc-join.el (erc-autojoin-channels): Don't join channels
+       more than once (if you have several nicks) (bug#20695).
+
+2015-12-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid leaving "ghost" of mouse pointer on MS-Windows
+
+       * src/w32term.c (frame_set_mouse_pixel_position):
+       * src/w32fns.c (Fw32_mouse_absolute_pixel_position): Momentarily
+       disable "mouse trails" when moving the mouse pointer.  (Bug#22247)
+       * src/w32term.c (frame_set_mouse_pixel_position): Include
+       w32common.h.
+
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * lisp/gnus/mml-sec.el (mml-secure-bcc-is-safe): Fix typo in last check-in.
+
+2015-12-27  Jens Lechtenboerger  <jens.lechtenboerger@fsfe.org>
+
+       Identify unsafe combinations of Bcc and encryption
+
+       * lisp/gnus/gnus-util.el (gnus-subsetp): New function
+       * lisp/gnus/mml-sec.el (mml-secure-safe-bcc-list): New variable
+       * lisp/gnus/mml-sec.el (mml-secure-bcc-is-safe): New function
+
+2015-12-27  Krzysztof Jurewicz  <krzysztof.jurewicz@gmail.com>  (tiny change)
+
+       Fix auth source lookups from erc with port numbers
+
+       * lisp/erc/erc.el (erc-open): `auth-source' wants strings, not port
+       numbers (bug#20541).
+
+2015-12-27  Fran Litterio  <flitterio@gmail.com>
+
+       Run erc-kill-channel-hook always on exit
+
+       * lisp/erc/erc.el (erc-kill-buffer-function): Run erc-kill-channel-hook
+       when erc-kill-queries-on-quit is set (bug#21187).
+
+2015-12-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling fix
+
+       * test/automated/url-parse-tests.el:
+       (url-generic-parse-url/same-document-reference):
+       Rename from url-generic-parse-url/same-decument-reference.
+
+2015-12-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Reword initial *scratch* for brevity, appearance
+
+       * lisp/startup.el (initial-scratch-message):
+       Reword to avoid apostrophes, and to make it shorter.
+       See the thread starting in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg01241.html
+
+2015-12-26  Leo Liu  <sdl.web@gmail.com>
+
+       Add ert-deftest to lisp-mode.el
+
+       * lisp-mode.el (lisp-imenu-generic-expression,
+         lisp-el-font-lock-keywords-1): Add ert-deftest.
+
+2015-12-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark imap changes as not needing doc changes
+
+       * imap.el (imap-ssl-open): Remove
+
+2015-12-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use built-in encryption in imap.el
+
+       * lisp/net/imap.el (imap-ssl-program): Remove (bug#21134).
+       (imap-starttls-open): Use open-network-stream instead of starttls.el.
+       (imap-tls-open): Use open-network-stream instead of tls.el.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't try using /bin/sh in artist.el on MS-Windows
+
+       * lisp/textmodes/artist.el (artist-figlet-get-font-list-windows):
+       New function.
+       (artist-figlet-choose-font): Use it on MS-Windows and MS-DOS.
+       (Bug#20167)
+
+2015-12-26  Wolfgang Jenkner  <wjenkner@inode.at>
+
+       Always define gmalloc etc. in src/gmalloc.c
+
+       This is a work-around to prevent the compiler from using semantic
+       knowledge about malloc for optimization purposes.  E.g., gcc 5.2
+       with -O2 replaces most of calloc's definition by a call to calloc;
+       see Bug#22085.
+       * src/gmalloc.c [!HYBRID_MALLOC] (malloc, realloc, calloc)
+       (aligned_alloc, free): Do not undef.  Instead, define these as
+       functions (perhaps renamed to gmalloc etc.) in terms of gmalloc etc.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of browse-url browser-related functions
+
+       * lisp/net/browse-url.el (browse-url)
+       (browse-url-default-browser, browse-url-default-windows-browser)
+       (browse-url-default-macosx-browser, browse-url-chromium)
+       (browse-url-kde, browse-url-text-xterm): Clarify the usage of ARGS
+       and NEW-WINDOW arguments in these functions.  (Bug#19421)
+
+2015-12-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Propagate Bug#14412 fix to backtrace_eval_unrewind
+
+       * src/eval.c (unbind_to): Redo so that the FALLTHROUGH!! comment
+       becomes accurate again. This shouldn’t affect behavior.
+       (backtrace_eval_unrewind): Apply the recent unbind_to fix here, too.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't produce non-ASCII characters in *scratch*
+
+       * lisp/startup.el (initial-scratch-message): Quote apostrophes to
+       avoid producing non-ASCII characters in the *scratch* buffer's
+       commentary.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Document changes in 'compare-windows'
+
+       * lisp/vc/compare-w.el (compare-windows-removed)
+       (compare-windows-added): Doc fix.
+
+       * doc/emacs/files.texi (Comparing Files): Document the changes in
+       window selection by 'compare-windows'.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'vc-annotate-background-mode'
+
+       * doc/emacs/maintaining.texi (Old Revisions): Document
+       'vc-annotate-background-mode'.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'vc-region-history'
+
+       * doc/emacs/maintaining.texi (VC Change Log): Document
+       'vc-region-history'.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'vc-push'
+
+       * doc/emacs/maintaining.texi (Pulling / Pushing): Expand and
+       improve the documentation of 'vc-push'.
+
+       * lisp/vc/vc.el (vc-pull, vc-push): Doc fix.
+
+2015-12-26  Alain Schneble  <a.s@realize.ch>
+
+       Include the tests for the URL parsing fixes
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'url-user-agent'.
+
+       * lisp/url/url-http.el (url-user-agent): Move from here...
+       * lisp/url/url-vars.el (url-user-agent): ...to here.  This is to
+       keep all the URL defcustoms in one place, and also have it defined
+       whenever the URL library is loaded.
+
+       * doc/misc/url.texi (Customization): Document 'url-user-agent'.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Document protocols supported by URL library via Tramp
+
+       * doc/misc/url.texi (Tramp): New node, describes the URL schemes
+       supported via Tramp.
+       (Supported URL Types, file/ftp, rlogin/telnet/tn3270): Mention
+       Tramp.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Document changes in Shell-script mode
+
+       * lisp/progmodes/sh-script.el (sh-mode, sh-set-shell): Document
+       the 'sh-shell' file-local variable.
+       (top level): Add an auto-load form to avoid byte-compiler warning
+       about 'comint-send-string'.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of 'ses-define-local-printer'
+
+       * doc/misc/ses.texi (Printer functions): Fix whitespace between
+       sentences and punctuation.  Add an index entry for
+       'ses-define-local-printer'.
+
+2015-12-26  Shakthi Kannan  <shakthimaan@gmail.com>
+
+       Document 'ert-summarize-tests-batch-and-exit'
+
+       * doc/misc/ert.texi (Running Tests in Batch Mode): Document
+       'ert-summarize-tests-batch-and-exit'.
+
+2015-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid assertion violation in unbind_to
+
+       * src/eval.c (unbind_to) <SPECPDL_LET>: Avoid assertion violation
+       if we get here with an object that is not a symbol.  (Bug#14412)
+
+2015-12-25  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Don't treat /foo/bar:mumble as ange-ftp address
+       * lisp/net/browse-url.el (browse-url-filename-alist): Match colons
+       only in the first component.  (bug#5362)
+
+2015-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Make sure *scratch* etc. use forward slashes in its default-directory
+
+       * lisp/startup.el (normal-top-level): On MS-Windows, convert
+       backslashes to forward slashes while decoding default-directory
+       of the initially-created buffers.
+
+2015-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Restore info about the build host in bug reports
+
+       * lisp/mail/emacsbug.el (report-emacs-bug): Report the system on
+       which Emacs was built.  This is important information for
+       investigating bug reports reported by users who don't build their
+       Emacs.
+
+2015-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix bootstrap broken by changes related to OS X file-name encoding
+
+       * lisp/international/ucs-normalize.el (eval-when-compile): Make
+       sure char-code-property-alist includes elements that allow access
+       to 'decomposition' and 'canonical-combining-class' Unicode
+       properties, as compiling ucs-normalize.el requires that.
+       * lisp/loadup.el (featurep 'ns): Load ucs-normalize and ns-win
+       only of charprop.el was already loaded.
+
+       * src/Makefile.in ($(lispsource)/international/ucs-normalize.elc):
+       New order-only dependency.
+
+2015-12-25  Leo Liu  <sdl.web@gmail.com>
+
+       * lisp/ido.el (ido-add-virtual-buffers-to-list):
+       Use bookmark-get-filename.
+
+2015-12-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make tramp-test29-vc-registered more robust
+
+       * test/automated/tramp-tests.el (tramp-test29-vc-registered):
+       Move `bzr' case down.  Skip test when `vc-create-repo' fails.
+       Remove instrumentation.
+
+2015-12-24  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * lisp/term/x-win.el (x-gtk-stock-map): Fix typo.
+
+2015-12-23  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       Fix `gnus-union' so as to behave like `cl-union'
+
+       * lisp/gnus/gnus-group.el (gnus-group-prepare-flat):
+       Make gnus-union use `equal' to compare items in lists.
+
+       * lisp/gnus/gnus-util.el (gnus-union):
+       Make it behave like cl-union partially.
+
+2015-12-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix dired.c typo with ptrdiff_t vs Lisp_Object
+
+       * src/dired.c (file_name_completion): Don't assume Lisp_Object is
+       an integer type, fixing a problem introduced in the recent fix for
+       Bug#22169.
+
+2015-12-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Document default process sentinel more prominently
+
+       * doc/lispref/processes.texi (Asynchronous Processes): Mention the
+       defaults for process filter and sentinel.  Provide cross-references.
+       (Process Information): Provide cross-references to where filters
+       and sentinels are described.
+       (Filter Functions): Add an index entry for "default filter".
+       (Sentinels): Add a few status messages not documented previously.
+       Resolve the "killed" confusion.  Document and describe the default
+       sentinel.  (Bug#22220)
+
+2015-12-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix file-name completion on OS X
+
+       * src/dired.c (file_name_completion): Reject false matches due to
+       file-name-coding-systems that decompose characters when encoding
+       file names, by comparing decoded file names as well.  (Bug#22169)
+       (syms_of_dired) <Qdecomposed_characters>: New DEFSYM.
+
+       * lisp/international/ucs-normalize.el (utf-8-hfs): Give it a
+       non-nil 'decomposed-characters' property.
+
+2015-12-23  Anders Lindgren  <andlind@gmail.com>
+
+       File-name completion of non-ASCII characters on OS X (bug#22169)
+
+       The coding system `utf-8-nfd', locally defined in ns-win.el,
+       didn't provide a :pre-write-conversion method, causing file name
+       completion of non-ASCII characters to fail.  Solved by using the
+       `utf-8-hfs' coding system provided by `ucs-normalize'.
+
+       * lisp/loadup.el: Load international/ucs-normalize (when building
+       for ns).
+
+       * lisp/term/ns-win.el (utf-8-nfd): Made `utf-8-nfd' as alias for
+       `utf-8-hfs' and removed the old implementation.  Set `utf-8-hfs'
+       as the file name coding system.
+
+       * src/nsfns.m (ns-convert-utf8-nfd-to-nfc): Removed.
+
+2015-12-22  Tom Tromey  <tom@tromey.com>
+
+       Fix bug #18588 by making bug-reference-bug-regexp more lenient
+
+       * lisp/progmodes/bug-reference.el (bug-reference-bug-regexp): Accept
+       "bug NNNN".  (Bug #18588)
+
+2015-12-22  Tom Tromey  <tom@tromey.com>
+
+       add some cl-* aliases to lisp-mode imenu
+
+       * (lisp-imenu-generic-expression): Add cl-define-compiler-macro,
+       cl-defgeneric, and cl-defmethod.
+
+2015-12-22  Tom Tromey  <tom@tromey.com>
+
+       Make a variable buffer-local
+
+       * lisp/generic-x.el (generic-rul-mode-setup-function): Make
+       font-lock-syntax-table buffer-local.  (Bug #21627)
+
+2015-12-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix decoding of text in URLs retrieved by EWW
+
+       * lisp/net/eww.el (eww-render): Pass 'charset' to
+       'eww-display-raw'.  Use the value of 'last-coding-system-used', if
+       non-nil, to set 'buffer-file-coding-system' of the buffer where we
+       show the URL.
+       (eww-display-html, eww-display-raw): Decode the text correctly,
+       using the charset found in the headers, and defaulting to UTF-8.
+       If the user told us to use a specific encoding, override the
+       charset from the headers.  (Bug#22222)
+
+2015-12-22  Alan Mackenzie  <acm@muc.de>
+
+       Fix a coding error in c-forward-<>-arglist-recur.  Fixes bug#22156
+
+       * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur): Remove unused
+       variable `tmp'.
+       After a failed search for a matching ">", restore point before continuing.
+
+2015-12-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Instrument Tramp tests
+
+       * test/automated/tramp-tests.el (tramp-test29-vc-registered)
+       (tramp--test-utf8): Instrument tests.
+
+2015-12-22  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix `display-buffer' call in `display-message-or-buffer' (Bug#22221)
+
+       * lisp/simple.el (display-message-or-buffer): Call
+       `display-buffer' with ACTION instead of NOT-THIS-WINDOW
+       (Bug#22221).
+
+2015-12-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/saveplace.el (toggle-save-place, save-place-to-alist)
+
+       (save-places-to-alist, save-place-dired-hook):
+       Check for dired-subdir-alist.  (Bug#19851)
+
+2015-12-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Add FIXME comment re stack overflow and modules
+
+2015-12-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Revert some recent emacs-module commentary
+
+       Most of the recently-added commentary was incorrect, due to the
+       possibility of stack overflow.
+
+2015-12-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling fix: prefer "cooperate" to "co-operate"
+
+2015-12-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port undo fixes to -fno-common
+
+       Port recent fix for Bug#21968 to platforms like 'gcc -fno-common'.
+       * src/keyboard.c, src/keyboard.h (point_before_last_command_or_undo)
+       (buffer_before_last_command_or_undo):
+       Declare in keyboard.h, and define in keyboard.c,
+       instead of assuming the traditional Unix relaxed ref-def linkage.
+
+2015-12-20  Philipp Stephani  <phst@google.com>
+
+       Improve commentary for emacs-module.c
+
+       * src/lisp.h: Document emacs-module.c assumptions about EQ and NILP.
+       * src/emacs-module.c (module_non_local_exit_get): Document that we
+       cannot use the current implementation.
+       (module_is_not_nil, module_eq): Document assumptions about EQ and
+       NILP.
+
+2015-12-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Suppress test on Mac OS X
+
+       * test/automated/tramp-tests.el (tramp--test-darwin-p): New defun.
+       (tramp--test-utf8): Use it.
+
+2015-12-20  Alan Mackenzie  <acm@muc.de>
+
+       Merge branch 'scratch/follow' into emacs-25
+
+       This allows Isearch, etc., to work well when Follow Mode is active.
+
+2015-12-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-sh.el (tramp-get-ls-command-with-w-option):
+       Improve check.
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last commit
+
+       * doc/emacs/rmail.texi (Rmail Deletion): Document new behavior of 'u'
+       with numeric argument.
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new features of Rmail
+
+       * doc/emacs/rmail.texi (Rmail Summary Edit, Rmail Deletion):
+       Document new behavior of 'd' and 'C-d' with numeric argument.
+       (Rmail Display): Document the rendering of HTML MIME parts.
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of new cl-lib functions
+
+       * doc/misc/cl.texi (Predicates on Numbers, Numerical Functions):
+       Fix wording.
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Document the new feature of 'minibuffer-with-setup-hook'
+
+       * lisp/files.el (minibuffer-with-setup-hook): Clarify how FUN is
+       added to `minibuffer-setup-hook'.
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new features of Font Lock
+
+       * doc/lispref/modes.texi (Other Font Lock Variables): Document
+       'font-lock-flush-function' and 'font-lock-ensure-function'.
+       (Font Lock Basics): Document the basic fontification functions
+       referenced in "Other Font Lock Variables".
+
+       * lisp/font-lock.el (font-lock-flush, font-lock-ensure): Doc fix.
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new features of Rectangle mode
+
+       * doc/emacs/killing.texi (Rectangles): Document "C-x C-x" in
+       rectangle-mark-mode.
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Manual followup to last change
+
+       * doc/lispref/display.texi (Displaying Messages): Sync with the
+       doc string.  (Bug#22210)
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify doc string of 'display-message-or-buffer'
+
+       * lisp/simple.el (display-message-or-buffer): Doc fix.  Suggested
+       by Sebastian Wiesner <swiesner@lunaryorn.com>.  (Bug#22210)
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       * doc/emacs/emacs.texi (Top): Update top-level menus.
+
+       * doc/lispref/elisp.texi (Top): Update top-level menus.
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Document how to avoid file-local variables that aren't
+
+       * doc/emacs/custom.texi (Specifying File Variables): Describe how
+       to prevent Emacs from interpreting unrelated text as file-local
+       variables.  (Bug#22166)
+
+2015-12-19  Dave Thomas  <dave@pragprog.org>  (tiny change)
+
+       Fix a typo in eterm-color's termcap entry
+
+       * lisp/term.el (term-termcap-format): Fix a typo in the "ue="
+       entry.  (Bug#22184)
+
+2015-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Allow 'browse-url-emacs' visit non-existent URLs
+
+       * lisp/url/url-handlers.el (url-insert-file-contents): Don't
+       signal an error if VISIT is non-nil, to more faithfully emulate
+       the behavior of 'insert-file-contents'.  (Bug#22160)
+
+2015-12-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove SunOS 4.x cruft
+
+       Support for SunOS 4.x was removed in Emacs 23 but some cruft was left behind.
+       * lib-src/pop.c [sun]: Remove no-longer-needed include.
+       * lwlib/xlwmenu.c (SUNSO41): Remove.
+
+2015-12-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from gnulib
+
+       This mostly commentary fixes.
+       * doc/misc/texinfo.tex, lib/intprops.h: Copy from gnulib.
+       * lib/gnulib.mk: Regenerate with new gnulib-tool.
+
+2015-12-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Minor fixes in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-do-file-attributes-with-ls):
+       Reorder ls arguments.
+
+       * lisp/net/tramp.el (tramp-dissect-file-name): Fix docstring.
+
+2015-12-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make tramp a built-in package
+
+       * lisp/finder.el (finder-compile-keywords): Update
+       `package--builtins' also when Version: keyword is available.
+
+       * lisp/net/trampver.el: Add Version: keyword.
+       (tramp-version): Change it to "2.2.13.25.1", in order to be
+       compatible with `version-to-list'.
+
+2015-12-18  Lele Gaifax  <lele@metapensiero.it>
+
+       * etc/tutorials/TUTORIAL.it: Update and fix typos.  (Bug#22187)
+
+2015-12-18  Alan Mackenzie  <acm@muc.de>
+
+       Rename `recenter-group' to `recenter-window-group'
+
+       * doc/lispref/windows.texi (Textual Scrolling)
+       * lisp/window.el (top level, recenter-group)
+       * lisp/follow.el (follow-mode)
+       * lisp/isearch.el (isearch-back-into-window): Rename `recenter-group' to
+       `recenter-window-group' and `recenter-group-function' to
+       `recenter-window-group-function'.
+
+2015-12-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix vertical-motion in tabulated-list mode
+
+       * src/indent.c (Fvertical_motion): When moving from line beginning
+       to point under line truncation, assume overshoot by one line only
+       if point actually lies beyond the window's right margin.
+       (Bug#22194)
+
+2015-12-18  Martin Rudalics  <rudalics@gmx.at>
+
+       Don't have help functions call x-display-pixel-width/-height on ttys
+
+       * lisp/help.el (temp-buffer-max-height, temp-buffer-max-width):
+       Don't call x-display-pixel-width/-height on ttys.
+
+2015-12-17  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use 'hg id' in vc-hg-previous-revision
+
+       * lisp/vc/vc-hg.el (vc-hg-previous-revision):
+       Use 'hg id' to retrieve it (bug#22032).
+
+2015-12-17  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/follow.el (follow-sit-for): Remove (it's redundant).
+
+2015-12-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a typo in the Emacs manual
+
+       * doc/emacs/trouble.texi (Sending Patches): Fix a typo.  Reported
+       by Lele Gaifax <lele@metapensiero.it>.  (Bug#22193)
+
+2015-12-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix parsing netrc entries with ports
+
+       * lisp/gnus/auth-source.el (auth-source-ensure-strings): Don't
+       make a list out of 't'.  (Bug#22188)
+
+       * test/automated/auth-source-tests.el
+       (auth-source-test-netrc-parse-entry): New test.
+
+2015-12-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix typo in Doug Lea malloc configure log
+
+       * configure.ac (emacs_cv_var_doug_lea_malloc):
+       Fix typo that confused the log output of 'configure'.
+
+2015-12-16  Nicolas Petton  <nicolas@petton.fr>
+
+       * etc/NEWS: Mention the new pcase patterns `seq' and `map'.
+
+2015-12-16  Alan Mackenzie  <acm@muc.de>
+
+       * etc/NEWS: Move entry on pcase to correct section
+
+       (Accidentally omitted from previous commit)
+
+2015-12-16  Alan Mackenzie  <acm@muc.de>
+
+       Add documentation for changes to Show Paren mode.
+
+       * lisp/paren.el (show-paren-highlight-openparen): Enhance doc string.
+
+       * doc/emacs/programs.texi (Matching): Add descriptions of some pertinent user
+       options, including the new show-paren-when-point-inside-paren and
+       show-paren-when-point-in-periphery.
+
+       * etc/NEWS (.. Specialized Modes ...): Add an entry for Show Paren mode.
+       Move an entry on pcase to the Lisp Changes section.
+
+2015-12-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Document Eldoc changes
+
+       * doc/emacs/programs.texi (Lisp Doc): Document Global Eldoc mode.
+
+2015-12-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix invocation of Python and Guile interpreters from gdb-mi
+
+       * lisp/progmodes/gdb-mi.el (gdb-control-commands-regexp): Add
+       commands for interactive Python and Guile interpreters.
+       (gdb-send): Recognize various ways of exiting from Python and
+       Guile interpreters and returning to GDB.  For details, see
+       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00693.html
+       and http://stackoverflow.com/questions/31514741.
+
+2015-12-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove attempt to use C11 threads
+
+       C11 threads are not needed for Emacs now, and their use is causing
+       hassles on FreeBSD 10.x.  Problem reported by Ashish SHUKLA in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00648.html
+       * configure.ac: Do not check for C11 threads. Remove unnecessary
+       fiddling with CPPFLAGS when configuring pthreads.
+       * src/emacs-module.c (main_thread, check_main_thread)
+       (module_init): Do not worry about C11 threads.
+
+2015-12-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       Set utf8 encoding with stty in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+       Move up uname check.  Handle Mac OS X eol encoding.  Set utf8
+       encoding with stty.
+
+2015-12-15  Alan Mackenzie  <acm@muc.de>
+
+       Tidy up documentation associated with window groups.
+
+       * doc/lispref/windows.texi (Basic Windows): Add an @anchor for "Window
+       Groups".  Correct example function to `window-group-start'.
+       (Window Start and End, Textual scrolling): Point to the new anchor.  State
+       that (most of) the args in window group functions have the same meaning as for
+       the corresponding window primitives.
+
+       * doc/lispref/positions.texi (Screen Lines).  Same as above.
+
+2015-12-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       Complete last commit
+
+       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+       Move uname check up.  Handle Mac OS X eol encoding.
+
+2015-12-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle Mac OS X eol encoding in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+       Handle Mac OS X eol encoding.
+
+2015-12-15  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Fix variable name typo in compute_tip_xy
+
+       * src/w32fns.c (compute_tip_xy):
+       * src/xfns.c (compute_tip_xy): Modify *root_x instead of *root_y
+       when `right' is integer.
+
+2015-12-14  foudfou  <foudil.newbie+git@gmail.com>  (tiny change)
+
+       * lisp/ibuffer.el: Add ability to (un-)mark or delete buffers in the region.
+
+2015-12-14  Tassilo Horn  <tsdh@gnu.org>
+
+       Revert "Fix rx matcher overflow without limiting"
+
+       This reverts commit fe27e037663d36be3e5741c2ce86ab4ee8017db1.
+
+2015-12-14  Alan Mackenzie  <acm@muc.de>
+
+       Ispell: Bind isearch-regexp-function to nil around call to isearch..-new-loop
+
+       * lisp/textmodes/ispell.el (ispell-highlight-spelling-error-overlay): bind
+       isearch-regexp-function to nil around call to isearch-lazy-highligh-new-loop.
+
+2015-12-14  Tassilo Horn  <tsdh@gnu.org>
+
+       Fix rx matcher overflow without limiting
+
+       * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Improve last
+       change to the regexp without imposing a limit on the length of the
+       options.
+
+2015-12-14  Alan Mackenzie  <acm@muc.de>
+
+       Enhance ispell-skip-region-alist by generating part of it at runtime.
+
+       * lisp/textmodes/ispell.el (ispell--\\w-filter, ispell--make-\\w-expression)
+       (ispell--make-filename-or-URL-re): New functions which generate a regexp.
+       (ispell-skip-region-alist): Remove the bit that matches a filename/URL, etc.
+       (ispell-begin-skip-region-regexp, ispell-skip-region-list, ispell-message):
+       Include the result of ispell--make-filename-or-URL-re in regexps.
+
+2015-12-14  Glenn Morris  <rgm@gnu.org>
+
+       * build-aux/gitlog-to-emacslog: Ignore more pointless merge commits.
+
+2015-12-14  Alan Mackenzie  <acm@muc.de>
+
+       Replace GROUP argument in six window primitives by new functions.
+
+       * doc/lispref/windows.texi (Window Start and End, Textual Scrolling)
+       * doc/lispref/positions.texi (Screen Lines): Remove optional GROUP argument
+       from description of six window functions.  Add in description of new functions
+       window-group-start, window-group-end, set-window-group-start,
+       pos-visible-in-window-group-p, recenter-group and move-to-window-group-line,
+       together with the six variables indirecting to the pertinent group
+       functions.
+
+       * src/window.c
+       * src/keyboard.c: Revert the commit from 2015-11-11 12:02:48, in so far as it
+       applies to these two files, which added the GROUP argument to six window
+       primitives.
+
+       * lisp/follow.el (follow-mode): Use updated variable names for the indirected
+       functions.
+
+       * lisp/isearch.el (isearch-update, isearch-done, isearch-string-out-of-window)
+       (isearch-back-into-window, isearch-lazy-highlight-new-loop)
+       (isearch-lazy-highlight-search, isearch-lazy-highlight-update): Replace calls
+       to window primitives (e.g. window-start) with a GROUP argument by calls to
+       new functions (e.g. window-group-start).
+
+       * lisp/ispell.el (ispell-command-loop): Replace call to
+       pos-visible-in-window-p with pos-visible-in-window-group-p.
+
+       * lisp/window.el (window-group-start, window-group-end)
+       (set-window-group-start, recenter-group, pos-visible-in-window-group-p)
+       (selected-window-group, move-to-window-group-line): New functions.
+       (window-group-start-function, window-group-end-function)
+       (set-window-group-start-function, recenter-group-function)
+       (pos-visible-in-window-group-p-function, selected-window-group-function)
+       (move-to-window-group-line-function): New variables.
+
+2015-12-14  Vitorio Miguel  <vdrbandeiras@gmail.com>  (tiny change)
+
+       * etc/tutorials/TUTORIAL.pt_BR: Fix a typo.  (Bug#22165)
+
+2015-12-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+
+2015-12-13  Tassilo Horn  <tsdh@gnu.org>
+
+       Improve regex to not trigger stack overflow
+
+       * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Improve regex in
+       order not to trigger a stack overflow in regex matcher with unbalanced
+       brackets (bug#22146).
+
+2015-12-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix visiting files with raw-text
+
+       * src/fileio.c (Finsert_file_contents): Fix setting buffer unibyte
+       when some stuff was actually read.  (Bug#22162)
+
+2015-12-13  Tassilo Horn  <tsdh@gnu.org>
+
+       Fix regex matching keyval labels
+
+       * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Fix regexp
+       matching keyval labels.
+
+2015-12-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/ido.el (ido-file-name-all-completions-1): Do not raise an error
+
+       ... in case of Tramp.  (Bug#20821)
+
+2015-12-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix performance regression with gcc -O0
+
+       This fixes the smaller performance hit that I noted in:
+       https://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00357.html
+       * src/alloc.c (macro_XPNTR_OR_SYMBOL_OFFSET, macro_XPNTR):
+       * src/puresize.h (puresize_h_PURE_P)
+       (puresize_h_CHECK_IMPURE):
+       New macros, with the old contents of the functions.
+       * src/alloc.c (XPNTR_OR_SYMBOL_OFFSET, XPNTR):
+       * src/puresize.h (PURE_P, CHECK_IMPURE):
+       Use the new macros.  Also macros, if DEFINE_KEY_OPS_AS_MACROS.
+       * src/conf_post.h (ATTRIBUTE_UNUSED):
+       * src/lisp.h (DEFINE_KEY_OPS_AS_MACROS): New macros.
+
+2015-12-12  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el (package-unpack): Security check
+
+       Check that we received the package we were offered.
+
+2015-12-12  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el (package--compile): Don't activate
+
+       `package-unpack' takes care of all activations now (other than
+       `package-initialize).  `package--compile' now only compiles.
+
+2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Document the new bindings of <UP> and <DOWN> in the minibuffer
+
+       * doc/emacs/mini.texi (Minibuffer History): Describe the new
+       bindings of <UP> and <DOWN> in the minibuffer.
+
+2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new features of Ido
+
+       * doc/misc/ido.texi (Misc): Document 'C-S-b'.
+
+2015-12-12  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix frame height calculations with added menu bar on Windows (Bug#22105)
+
+       * doc/lispref/frames.texi (Parameter Access): Mention pitfalls
+       when simultaneously specifying multiple parameters for
+       `modify-frame-parameters' that all may change the frame's size.
+       * src/w32fns.c (x_set_menu_bar_lines): Don't set
+       windows_or_buffers_changed here.
+       (my_create_tip_window, Fx_show_tip): Call AdjustWindowRect
+       with third argument false.
+       * src/w32menu.c (set_frame_menubar): Set
+       windows_or_buffers_changed here.
+       * src/w32term.c (x_set_window_size): Determine third argument of
+       AdjustWindowRect from whether the frame has a menu bar and not
+       from whether it wants one.
+
+2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Document the change in interactive shell mode
+
+       * doc/emacs/misc.texi (Interactive Shell): Document that the
+       '*shell*' buffer by default displays in a new window.
+
+2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new features of package.el
+
+       * doc/emacs/package.texi (Package Menu): Document the 'external'
+       status and the new menu commands.
+       (Package Installation): Document archive priorities.
+
+       * lisp/emacs-lisp/package.el (package-archive-priorities): Doc fix.
+       (package-menu-hide-low-priority): Doc fix.
+
+2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Update and document new features of xterm support
+
+       * doc/emacs/frames.texi (Text-Only Mouse): Document that
+       track-mouse is supported by newer xterm versions.
+
+2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new features of Prettify Mode
+
+       * doc/emacs/programs.texi (Misc for Programs): Document
+       'prettify-symbols-compose-predicate' and
+       'prettify-symbols-unprettify-at-point'.
+
+       * lisp/progmodes/prog-mode.el (prettify-symbols-alist)
+       (prettify-symbols-default-compose-p)
+       (prettify-symbols-compose-predicate)
+       (prettify-symbols--compose-symbol): Doc fixes.
+
+2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Document multi-mode indentation facilities
+
+       * doc/lispref/text.texi (Mode-Specific Indent): Document
+       'prog-indentation-context', 'prog-first-column', and 'prog-widen'.
+
+       * lisp/progmodes/prog-mode.el (prog-indentation-context)
+       (prog-widen): Doc fixes.
+
+2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'vc-refresh-state'
+
+       * doc/emacs/maintaining.texi (Version Control): Document
+       'vc-refresh-state'.
+
+       * lisp/vc/vc-hooks.el (vc-refresh-state): Doc fix.
+
+2015-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix echo for "C-u"
+
+       * src/keyboard.c (command_loop_1): Undo last change.  It caused
+       duplicate echo of C-u.  (Bug#22107)
+
+2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid errors when creating files under SVN in new directory
+
+       * lisp/vc/vc-svn.el (vc-svn-registered): Use
+       file-accessible-directory-p, to avoid cd'ing to a non-existing
+       directory, which signals an error on some systems.  (Bug#21984)
+       (vc-svn-checkin): Call log-edit-extract-headers with 2 arguments.
+       Use declare-function to avoid byte-compiler warnings.
+
+2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve Lua support in etags
+
+       * lib-src/etags.c (Lua_functions): Skip spaces before looking for
+       "function".
+
+       * etc/NEWS: Mention improved Lua support by 'etags'.
+
+       * test/etags/lua-src/test.lua (test): Add tests for indented
+       function definitions.
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to the modified Lua tests.
+
+2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'this-command-keys' wrt prefix argument
+
+       * src/keyboard.c (command_loop_1): Restore the feature whereby C-u
+       was part of this-command-keys, but not of this-single-command-keys.
+       (Bug#22107)
+
+       * lisp/simple.el (internal-echo-keystrokes-prefix): Add
+       commentary about the function's return value.
+
+2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/files.el (load-library): Doc fix.  (Bug#22140)
+
+2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve and document Ruby support in 'etags'
+
+       * lib-src/etags.c (Ruby_suffixes): Add ".ruby".
+       (Ruby_functions): Support "module" and overloaded operators.
+       (Ruby_help): Mention "module".
+
+       * test/etags/ruby-src/test.rb:
+       * test/etags/ruby-src/test1.ruby: New files.
+       * test/etags/Makefile (RBSRC): New tests.
+       (SRCS): Add ${RBSRC}.
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to the new Ruby tests.
+
+       * doc/man/etags.1: Mention Ruby support.
+       * etc/NEWS: Mention Ruby support.
+
+2015-12-11  Xi Lu  <lx@shellcodes.org>
+
+       Initial support for Ruby in 'etags'
+
+       * lib-src/etags.c <Ruby_suffixes>: New variable.
+       (lang_names): Add an entry for Ruby.
+       (Ruby_functions): New function.  (Bug#22116)
+
+2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify documentation of 'modify-frame-parameters'
+
+       * doc/lispref/frames.texi (Parameter Access): Clarify what "ignored
+       PARMs" mean for 'modify-frame-parameters'.
+
+       * src/frame.c (Fmodify_frame_parameters): Clarify what "ignored
+       PARMs" mean for this function.  (Bug#22104)
+
+2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix setting buffer unibyte when reading from a device
+
+       * src/fileio.c (Finsert_file_contents): Call Fset_buffer_multibyte
+       to make a (possibly non-empty) buffer unibyte.  (Bug#22096)
+
+2015-12-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify documentation of 'values'
+
+       * doc/lispref/eval.texi (Eval): Clarify that 'values' are not
+       updated by any evaluation commands in 'lisp-interaction-mode'.
+       (Bug#22056)
+
+2015-12-11  Anders Lindgren  <andlind@gmail.com>
+
+       Fixed subversion vc error when opening file in new directory (bug#21984).
+
+       * lisp/vc/vc-svn.el (vc-svn-registered): Check if directory exists.
+
+2015-12-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Yet another fix for when point ends up in invisible text
+
+       * src/xdisp.c (redisplay_window): When someone forced
+       window-start, and honoring that failed to show the cursor, try
+       moving out of invisible text, before falling back to the middle of
+       the window.  (Bug#22098)
+
+2015-12-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix error in Tramp perl script for cygwin
+
+       * lisp/net/tramp-sh.el (tramp-perl-file-truename): Do not raise an
+       error if file doesn't exist.
+
+2015-12-09  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Remove font workaround for limited outdated versions
+
+       * src/macfont.m (mac_font_descriptor_get_adjusted_weight): Remove
+       workaround for HiraginoSans-W7 on OS X 10.11 and 10.11.1.
+
+2015-12-09  Anders Lindgren  <andlind@gmail.com>
+
+       Don't add "." to load path (bug#21104)
+
+       When configured with --enable-locallisppath=no, which is the
+       default for OS X, the load-path incorrectly was populated with ".".
+
+       * src/lread.c (init_lread): Don't call `decode_env_path' when
+       PATH_SITELOADSEARCH is empty.
+
+2015-12-08  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el (package--with-response-buffer):
+
+       Search for the blank-line in the right buffer.
+
+2015-12-08  Glenn Morris  <rgm@gnu.org>
+
+       * test/automated/simple-test.el (undo-auto-boundary-timer): Update
+       for recent change.
+
+2015-12-08  Glenn Morris  <rgm@gnu.org>
+
+       Fix some display-warning usage.
+
+       * lisp/files.el (hack-local-variables, hack-dir-local-variables):
+       * lisp/calendar/diary-lib.el (diary-include-files, diary-sexp-entry):
+       * lisp/calendar/holidays.el (calendar-holiday-list):
+       * lisp/mail/rmailout.el (rmail-output-read-file-name):
+       Fix display-warning usage.
+
+2015-12-07  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/calendar/cal-html.el: Require diary-lib.
+
+       (cal-html-list-diary-entries): Handle no diary.  (Bug#21994)
+
+2015-12-07  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       Add Obsolete-since header to eudcb-ph.el
+
+       * eudcb-ph.el: Add Obsolete-since header.
+
+2015-12-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling fixes
+
+       * doc/misc/calc.texi (Predefined Units): Use the bland modern
+       scientific style for spelling the units “ampere” and
+       “angstrom” rather than the older style “Ampere” and
+       “Ångstrom”.  The latter spelling was wrong anyway (it should
+       have been “Ångström”).
+       * lisp/emacs-lisp/ert.el (ert--explain-equal-rec):
+       Fix misspelling of ‘atom’ in code.
+
+2015-12-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of kill commands
+
+       * lisp/simple.el (region-extract-function, delete-backward-char)
+       (delete-forward-char, kill-region, copy-region-as-kill)
+       (kill-ring-save): Better document the optional argument REGION in
+       the doc strings.  Mention in the doc strings that text put in the
+       kill-ring can be filtered by 'filter-buffer-substring'.
+
+       * doc/lispref/text.texi (Kill Functions): Mention that functions
+       described in this subsection can filter text they put in the
+       kill-ring.  Add a cross-reference to "Buffer Contents" and an
+       index entry.  Document the optional argument 'region' and its
+       effect.
+       (Bug#21315)
+
+2015-12-07  Alan Mackenzie  <acm@muc.de>
+
+       Further progress making Isearch, Ispell, Replace work with Follow Mode.
+
+       * lisp/follow.el: (follow-mode): Remove references to sit*-for-function, which
+       no longer exists.  Add follow-post-command-hook to  three special purpose
+       hooks at setup, and remove them at tear down.
+
+       * lisp/isearch.el: (isearch-update): invoke isearch-update-post-hook before
+       isearch-lazy-highlight-new-loop.
+       (isearch-lazy-highlight-new-loop): Restore this function to what it previously
+       was, merging the functionality of isearch-lazy-highlight-maybe-new-loop into
+       it.
+       (isearch-lazy-highlight-maybe-new-loop): function removed.
+
+       * lisp/replace.el: (replace-update-post-hook): New hook variable.
+       (perform-replace): Add second (nil) argument to looking-back.  Invoke
+       replace-update-post-hook before calling replace-highlight.
+
+       * lisp/textmodes/ispell.el: (ispell-update-post-hook): New hook variable.
+       (ispell-command-loop): invoke ispell-update-post-hook.  Add GROUP argument to
+       call of pos-visible-in-window-p.
+       (ispell-display-buffer): Place *Choices* window at the top of the last window
+       in a window group.
+
+2015-12-07  Alan Mackenzie  <acm@muc.de>
+
+       Amend doc of `mapconcat': it can take sequences, not merely strings.
+
+       * doc/lispref/functions.texi (Mapping Functions): Amend the doc of `mapconcat'
+       to say that SEPARATOR and the results from FUNCTION may be any character
+       sequences, not just strings.  Add an @xref to "Sequences Arrays Vectors".
+
+2015-12-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix an utf8 problem for Tramp on BSD
+
+       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+       Make lax check for utf8.
+       (tramp-get-remote-locale): Add "en_US.UTF-8" as candidate.
+
+2015-12-06  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       Make eudcb-ph.el obsolete
+
+       * doc/misc/eudc.texi: Bump version to 1.40.0.
+       Remove PH/QI sections and mentions.
+       * lisp/obsolete/eudcb-ph.el: Make obsolete.
+       * lisp/net/eudc-vars.el (eudc-known-protocols): Remove ph.
+       (eudc-ph-bbdb-conversion-alist): Make obsolete.
+       * etc/NEWS: Mention this.  (Bug#21191)
+
+2015-12-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove overenthusiastic eassert
+
+       * src/lisp.h (XSYMBOL): Remove eassert incorrectly added in
+       previous change.  It breaks on MS-Windows --with-wide-int.
+       Problem reported by Eli Zaretskii in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00275.html
+
+2015-12-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc -Wparentheses
+
+       * src/xdisp.c (row_containing_pos): Reparenthesize.
+
+2015-12-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port mod-test to 32-bit Emacs --without-wide-int
+
+       * modules/mod-test/test.el (mod-test-sum-test):
+       Bring back the 2**29 tests, but port them to 32-bit Emacs
+       --without-wide-int.
+
+2015-12-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix minor Tramp problems found on BSD
+
+       * lisp/net/tramp-sh.el (tramp-perl-file-truename): Do not append
+       trailing slash.  Quote apostrophes.
+       (tramp-sh-handle-file-truename): Do not append trailing slash in
+       the "ls" case.
+       (tramp-get-ls-command-with-w-option): New defun.
+       (tramp-do-file-attributes-with-ls)
+       (tramp-do-directory-files-and-attributes-with-stat): Use it.
+
+       * test/automated/tramp-tests.el
+       (tramp-test31-special-characters-with-perl)
+       (tramp-test31-special-characters-with-ls)
+       (tramp-test32-utf8-with-perl, tramp-test32-utf8-with-ls):
+       Suppress also readlink.
+
+2015-12-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix cursor display when invisible text is at line beginning
+
+       * src/xdisp.c (redisplay_window): When scrolling fails to show
+       point, prefer using the desired matrix if possible for finding the
+       fallback glyph row for displaying the cursor.  (Bug#22098)
+       (row_containing_pos): Exit the loop as soon as we hit the first
+       disabled glyph row.  Otherwise we risk accessing garbled data and
+       departing to the no-no land.
+
+2015-12-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve module interface when WIDE_EMACS_INT
+
+       * src/emacs-module.c (plain_values): New constant.
+       (module_nil): Now a constant.
+       (Finternal_module_call, value_to_lisp_bits, lisp_to_value_bits)
+       (syms_of_module): Use if, not #ifdef, so that both sides are
+       checked at compile-time, and so that GCC doesn’t complain
+       about an unused var in the typical case.  Also, depend on
+       plain_values, not on WIDE_EMACS_INT; the code shouldn’t assume
+       that WIDE_EMACS_INT implies !USE_LSB_TAG.
+       (value_to_lisp_bits, lisp_to_value_bits): New functions.
+       Sign-extend integers rather than zero-extending them, as small
+       negative integers are more likely.
+       (value_to_lisp, lisp_to_value): Rewrite in terms of the new *_bits
+       functions.
+       (HAVE_STRUCT_ATTRIBUTE_ALIGNED): Define to 0 if not already defined.
+       (mark_modules): Remove.  All uses removed.
+       (lisp_to_value): Don’t assume Fcons returns a pointer aligned
+       to GCALIGNMENT.
+       (syms_of_module): Check that module_nil converts to Qnil.
+       * src/lisp.h (lisp_h_XSYMBOL, XSYMBOL): Use signed conversion, since
+       we prefer signed to unsigned when either will do.
+       (TAG_PTR): Sign-extend pointers when USE_LSB_TAG, as this is
+       a bit better for emacs-module.c.
+
+2015-12-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port mod-test to x86-64 GNU/Linux running 32-bit
+
+       * modules/mod-test/test.el (mod-test-sum-test):
+       Don’t attempt to match descriptions to operating systems.
+       It didn’t work on Fedora x86-64 running a 32-bit executable,
+       and it’s not worth the trouble anyway.
+       Port to 32-bit platforms by removing an assumption about
+       fixnum widths.
+
+2015-12-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix auto-revert-tests.el when filenotify isn't used
+
+       * test/automated/auto-revert-tests.el (auto-revert--wait-for-revert):
+       Make it working also when filenotify isn't used.
+
+2015-12-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/textmodes/ispell.el (ispell-highlight-spelling-error-overlay):
+
+       Let-bind isearch-regexp-function to nil.  (Bug#22097)
+
+2015-12-05  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el: Don't install bad signatures (bug#22089)
+
+       (package--with-response-buffer): NOERROR and ERROR-FORM only
+       handle connection errors.
+       (bad-signature): New error type.
+       (package--check-signature-content): Use it.
+       (package--check-signature): Properly distinguish connection errors
+       from bad-signature errors.  Do the check for
+       `package-check-signature' `allow-unsigned' here instead of forcing
+       the callbacks to do it.  Add a new argument, UNWIND.
+       (package--download-one-archive, package-install-from-archive):
+       Update usage of `package--check-signature'.
+
+2015-12-05  Ulf Jasper  <ulf.jasper@web.de>
+
+       Fix Bug#22092.
+
+       * lisp/calendar/icalendar.el (icalendar--get-unfolded-buffer):
+         Clean up inconsistent line endings. (Bug#22092)
+         (icalendar--clean-up-line-endings): New.
+       * test/automated/icalendar-tests.el (icalendar-real-world): Add test
+         for Bug#22092.
+
+2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'bookmark-set-no-overwrite'
+
+       * doc/emacs/regs.texi (Bookmarks): Document the new command
+       'bookmark-set-no-overwrite' and its keybinding.
+
+2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new binding of 'mouse-buffer-menu'
+
+       * doc/emacs/buffers.texi (Buffer Menus): 'mouse-buffer-menu' is
+       now also on C-F10.
+
+2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Initial documentation of dynamic modules
+
+       * doc/lispref/loading.texi (Dynamic Modules): New section with
+       initial documentation for dynamic modules.
+       * doc/lispref/elisp.texi (Top): Add "Dynamic Modules" to the
+       detailed menu
+
+       * etc/NEWS: Fix typos in dynamic modules' entry.
+
+2015-12-05  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       Remove copyright statements from trivial test files
+
+2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Add "Preliminaries" section to etc/DEBUG
+
+       * etc/DEBUG: Add the "Preliminaries" section for GDB beginners.
+       Most of the content was suggested by Phillip Lord
+       <phillip.lord@russet.org.uk>.  Remove the section about debugging
+       with the Visual Studio, as building Emacs with the Microsoft
+       compilers is no longer supported.  Minor fixes in some other
+       sections.
+
+2015-12-05  Alex Dunn  <dunn.alex@gmail.com>  (tiny change)
+
+       Improve parsing of version strings
+
+       * lisp/subr.el (version-regexp-alist): Allow "." as priority separator
+       (version-to-list): More helpful error messages.
+       (version-to-list): ".5" is valid (update docstring).  Make
+       "22.8X3" invalid, as the doc string says.
+
+       * test/automated/subr-tests.el (ert-test-version-parsing): New
+       tests for version string processing.
+
+2015-12-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of 'undo' changes
+
+       * doc/lispref/text.texi (Undo): Minor wording changes.  Use US
        English conventions for spelling and whitespace between sentences.
 
-       * etc/NEWS: Fix wording and spelling of undo-related entries.
-       Mark them as documented.
+       * etc/NEWS: Fix wording and spelling of undo-related entries.
+       Mark them as documented.
+
+2015-12-04  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/net/net-utils.el: Small improvements.
+
+       (net-utils--executable-find-sbin): New function.
+       (ifconfig-program): Check sbin directories.
+       Fallback to "ip".  (Bug#22091)
+       (ifconfig-program-options): Check the actual program in use.
+       (arp-program): Check sbin directories.
+
+2015-12-04  Arash Esbati  <esbati@gmx.de>  (tiny change)
+
+       Fix wrong-type-argument integer-or-marker-p nil error
+
+       * lisp/textmodes/reftex-auc.el (reftex-what-index-tag):
+       Fix (wrong-type-argument integer-or-marker-p nil) error (bug#22077).
+
+2015-12-04  Alan Mackenzie  <acm@muc.de>
+
+       Merge branch 'scratch/follow' of /home/acm/emacs/emacs.git/emacs-25 into scratch/follow
+
+       Merge necessitated by a rebase operation.
+
+2015-12-04  Alan Mackenzie  <acm@muc.de>
+
+       lisp/isearch.el: Eliminate macro isearch-call-message, replacing with funcall.
+
+2015-12-04  Alan Mackenzie  <acm@muc.de>
+
+       First commit to scratch/follow.  Make Isearch work with Follow Mode, etc.
+
+       doc/lispref/window.texi (Basic Windows): Add paragraph defining "Group of
+       Windows" and new @defun selected-window-group.
+       (Window Start and End): Describe new &optional parameter GROUP and
+       ...-group-function for window-start, window-end, set-window-start, and
+       pos-visible-in-window-p.
+       (Textual Scrolling) Describe the same for recenter.
+       doc/lispref/positions.texi (Screen Lines): Describe the same for
+       move-to-window-line.
+
+       src/window.c (Fwindow_start, Fwindow_end, Fset_window_start)
+       (Fpos_visible_in_window_p, Frecenter, Fmove_to_window_line): To each, add ar
+       new optional parameter "group".  At the beginning of each, check whether the
+       corresponding ...-group-function is set to a function, and if so execute this
+       function in place of the normal processing.
+       (syms_of_window): Define symbols for the six new variables below.
+       (window-start-group-function, window-end-group-function)
+       (set-window-start-group-function, recenter-group-function)
+       (pos-visible-in-window-p-group-function, move-to-window-line-group-function):
+       New permanent local buffer local variables.
+       src/keyboard.c (Fposn_at_point): Add extra parameter in call to
+       Fpos_visible_in_window_p.
+
+       lisp/window.el (selected-window-group-function): New permanent local buffer
+       local variable.
+       (selected-window-group): New function.
+
+       lisp/follow.el (follow-mode): Set the ...-group-function variables at mode
+       enable, kill them at mode disable.  Add/remove follow-after-change to/from
+       after-change-functions.
+       (follow-start-end-invalid): New variable.
+       (follow-redisplay): Manipulate follow-start-end-invalid.
+       (follow-after-change, follow-window-start, follow-window-end)
+       (follow-set-window-start, follow-pos-visible-in-window-p)
+       (follow-move-to-window-line, follow-sit-for): New functions.
+
+       lisp/isearch.el (isearch-call-message): New macro.
+       (isearch-update, with-isearch-suspended, isearch-del-char)
+       (isearch-search-and-update, isearch-ring-adjust): Invoke above new macro.
+       (with-isearch-suspended): Rearrange code such that isearch-call-message is
+       invoked before point is moved.
+       (isearch-message): Add comment about where point must be at function call.
+       (isearch-search): Remove call to isearch-message.
+       (isearch-lazy-highlight-window-group): New variable.
+       (isearch-lazy-highlight-new-loop): Unconditionally start idle timer.  Move
+       the battery of tests to ...
+       (isearch-lazy-highlight-maybe-new-loop): New function, started by idle timer.
+       Note: (sit-for 0) is still called.
+       (isearch-lazy-highlight-update): Check membership of
+       isearch-lazy-highlight-window-group.  Don't set the `window' overlay
+       property.
+       (isearch-update, isearch-done, isearch-string-out-of-window)
+       (isearch-back-into-window, isearch-lazy-highlight-maybe-new-loop)
+       (isearch-lazy-highlight-search, isearch-lazy-highlight-update)
+       (isearch-lazy-highlight-update): Call the six amended primitives (see
+       src/window.c above) with the new `group' argument set to t, to cooperate
+       with Follow Mode.
+
+2015-12-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/ert.el: Prefer pcase over cl-typecase
+
+       * lisp/emacs-lisp/ert.el (ert--should-error-handle-error)
+       (ert--explain-format-atom, ert--explain-equal-rec)
+       (ert--print-backtrace, ert-test-result-type-p, ert-select-tests)
+       (ert--insert-human-readable-selector): Prefer pcase over cl-typecase.
+
+2015-12-04  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el: Remove special case-folding support
+
+       (character-fold-to-regexp): Remove special code for
+       case-folding.  Char-fold search still respects the
+       `case-fold-search' variable (i.e., f matches F).  This only
+       removes the code that was added to ensure that f also matched
+       all chars that F matched.  For instance, after this commit, f
+       no longer matches 𝔽.
+
+       This was necessary because the logic created a regexp with
+       2^(length of the string) redundant paths.  So, when a very
+       long string "almost" matched, Emacs took a very long time to
+       figure out that it didn't.  This became particularly relevant
+       because isearch's lazy-highlight does a search bounded by (1-
+       match-end) (which, in most circumstances, is a search that
+       almost matches).  A recipe for this can be found in bug#22090.
+
+2015-12-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (character): Can't be negative
+       Fixes (bug#21701)
+
+2015-12-04  Daiki Ueno  <ueno@gnu.org>
+
+       lisp/gnus/qp.el: Don't replace "from " at bol
+
+       * lisp/gnus/qp.el (quoted-printable-encode-region): Bind `case-fold-search'
+       to nil when looking for "^From ".  Problem reported by Simon Josefsson.
+
+2015-12-03  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Externalize some symbols in undo-auto
+
+        * doc/lispref/text.texi: Update symbols.
+        * lisp/simple.el (undo-auto--amalgamate,
+          undo-auto--current-boundary-timer): Make symbols public.
+        * src/cmds.c (Fself_insert_command,Fdelete_char): Call
+          updated symbol.
+
+2015-12-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/smie.el (smie-next-sexp): Fix BOB "token"
+
+2015-12-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some error message improvements in tramp-sh.el
+
+       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+       Suppress error messages for "mesg" and "biff" calls.
+       (tramp-get-remote-path): Ignore errors when expanding
+       `tramp-own-remote-path'.  Raise a warning instead.
+
+2015-12-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'nacl' value for 'system-type'
+
+       * doc/lispref/os.texi (System Environment): Document the 'nacl'
+       value of 'system-type'.
+
+2015-12-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'window-max-chars-per-line'
+
+       * doc/lispref/windows.texi (Window Sizes): Document
+       'window-max-chars-per-line'.
+
+2015-12-03  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       Fix some file headers for the purpose of `package--builtins'
+
+       * lisp/emacs-lisp/cl-preloaded.el
+       * lisp/emacs-lisp/eieio-compat.el
+       * lisp/net/sasl-scram-rfc.el: Add a "Package:" header
+
+       * lisp/ielm.el: Fix summary line.
+
+2015-12-03  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el (package-unpack): Load before compiling
+
+       Reload any previously loaded package files before compiling
+       the package (also reload the same files after compiling).
+       This ensures that we have the most recent definitions during
+       compilation, and avoids generating bad elc files when a macro
+       changes and it is used in a different file from the one it's
+       defined in.
+
+2015-12-03  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el: Refactor package activation code
+
+       (package-activate): Move code that activates dependencies into
+       package-activate-1.
+       (package--load-files-for-activation): New function.
+       (package-activate-1): Add code for (optionally) activating
+       dependencies, and move file-loading code into
+       `package--load-files-for-activation'.
+
+2015-12-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new font-related functionality
+
+       * doc/lispref/display.texi (Low-Level Font): Document
+       'default-font-width', 'default-font-height', 'window-font-width',
+       and 'window-font-height'.
+
+       * etc/NEWS: Move entries for 'default-font-width',
+       'default-font-height', 'window-font-width', and 'window-font-height'
+       to their place and mark them documented.
+
+2015-12-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation and implementation of 'directory-name-p'
+
+       * lisp/files.el (directory-name-p): Modify to recognize
+       backslashes on MS-Windows and MS-DOS.  Adjust the doc string
+       accordingly.  Use '=', not char-equal, for comparison, as
+       letter-case cannot possibly be an issue here.
+
+       * doc/lispref/files.texi (Directory Names): Move the documentation
+       of directory-name-p here from "Relative File Names".  Update the
+       description per the changes in implementation.
+
+       * etc/NEWS: Move the entry for 'directory-name-p' to its proper
+       place and mark it documented.
+
+2015-12-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor copyedit in Emacs manual
+
+       * doc/emacs/search.texi (Lax Search): Make wording about character
+       folding by default less definitive.  (Bug#22043)
+
+2015-12-02  Eli Zaretskii  <eliz@gnu.org>
+
+       More emacs-module.c fixes for wide ints
+
+       * src/emacs-module.c (value_to_lisp) [WIDE_EMACS_INT]: Use
+       unsigned data types to manipulate pointers, to avoid sign
+       extension coming after us with a vengeance.
+
+       * modules/mod-test/test.el (mod-test-sum-test): Add tests for
+       Emacs with wide ints that verify integer values near the critical
+       value that requires us to switch to a cons cell.
+
+2015-12-02  Stephen Leake  <stephen_leake@stephe-leake.org>
+
+       Fix bug#22069 in cl-generic.el
+
+       * lisp/emacs-lisp/cl-generic.el (cl-no-method): Remove %S; this string is
+       not run thru `format'.
+
+2015-12-01  Dmitry Gutov  <dgutov@yandex.ru>
+
+       APPEND etags--xref-backend to xref-backend-functions
+
+       * lisp/progmodes/xref.el (xref-backend-functions):
+       Use APPEND when adding the default element
+       (http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00061.html).
+
+2015-12-01  Eli Zaretskii  <eliz@gnu.org>
+
+       More accurate documentation of lax whitespace matching
+
+       * lisp/isearch.el (isearch-forward-word, isearch-forward-symbol)
+       (word-search-backward, word-search-forward)
+       (word-search-backward-lax, word-search-forward-lax): Mention in
+       doc strings that toggling lax whitespace matching has no effect on
+       these commands.
+
+       * doc/emacs/search.texi (Word Search, Symbol Search): Clarify that
+       lax whitespace matching has no effect on these commands.
+
+2015-12-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix emacs-module.c for wide ints
+
+       * src/emacs-module.c (lisp_to_value): Compare the produced value
+       with the original Lisp object, not with the one potentially
+       converted into a Lisp_Cons.  Fixes assertion violations when
+       working with integers larger than fit into a 32-bit value.
+
+       * modules/mod-test/test.el (mod-test-sum-test): Add tests for
+       large integers, to test --with-wide-int.
+
+2015-12-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'directory-files-recursively'
+
+       * lisp/files.el (directory-files-recursively): Doc fix.  Rename
+       the argument MATCH to REGEXP, to be more explicit about its form.
+
+       * doc/lispref/files.texi (Contents of Directories): Improve the
+       documentation of 'directory-files-recursively'.  Add
+       cross-references.
+
+       * etc/NEWS: Move the entry for 'directory-files-recursively' to
+       its place and mark it documented.
+
+2015-12-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'inhibit-read-only' property
+
+       * doc/lispref/text.texi (Special Properties): Describe the new
+       'inhibit-read-only' text property.  Add cross-reference to where
+       read-only buffers are described.
+       * doc/lispref/buffers.texi (Read Only Buffers): Mention that
+       'inhibit-read-only' property exempts text from being read-only.
+       Add cross-reference to "Special Properties".
+
+       * etc/NEWS: Move the entry about 'inhibit-read-only' property to
+       its place and mark it documented.
+
+2015-12-01  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el: Update header comments
+
+2015-12-01  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el: Add back multi-char matching
+
+       (character-fold-to-regexp): Uncomment recently commented code
+       and make the algorithm "dummer" by not checking every possible
+       combination.  This will miss some possible matches, but it
+       greatly reduces regexp size.
+
+       * test/automated/character-fold-tests.el
+       (character-fold--test-fold-to-regexp): Comment out test of
+       functionality no longer supported.
+
+2015-12-01  Xue Fuqiao  <xfq.free@gmail.com>
+
+       * doc/emacs/ack.texi (Acknowledgments): Update.
+
+2015-12-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Check `file-remote-p' over absolute files names in files.el
+
+       * lisp/files.el (directory-files-recursively)
+       (get-free-disk-space): Check `file-remote-p' over absolute files names.
+
+2015-12-01  Andreas Schwab  <schwab@linux-m68k.org>
+
+               * src/lread.c (syms_of_lread): Doc fix.
+
+2015-11-30  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Don't mistake certain JS method calls for keywords
+
+       * lisp/progmodes/js.el (js--ctrl-statement-indentation):
+       Braceless keyword can't come after a period (bug#22063).
+
+2015-11-30  David Reitter  <david.reitter@gmail.com>
+
+       Read frame_title_format from buffer-local variable for NS port
+
+       * src/nsfns.m (x_implicitly_set_name): Read frame-title-format and
+       icon-title-format variables from buffer in appropriate window.
+       (Bug#22048)
+
+2015-11-30  Juri Linkov  <juri@linkov.net>
+
+       * lisp/replace.el (occur-engine): Count matches in empty lines.
+
+       (Bug#22062)
+
+2015-11-30  Aurélien Aptel  <aurelien.aptel@gmail.com>
+
+       * src/emacs-module.h: Fix finalizer typedef for C++11
+
+       C++11 standard doesn't allow exception-specification in typedef.
+       The workaround is to declare a dummy function prototype and use
+       decltype on it.
+
+2015-11-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * src/emacs-module.c (lisp_to_value, value_to_lisp)
+       [WIDE_EMACS_INT]: Avoid compiler warnings.
+
+2015-11-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Rely on conservative stack scanning to find "emacs_value"s
+
+       * src/emacs-module.c (struct emacs_value_tag)
+       (struct emacs_value_frame, struct emacs_value_storage): Remove.
+       (value_frame_size): Remove constant.
+       (struct emacs_env_private): Use Lisp_Object for non_local_exit info.
+       (lisp_to_value): Remove first arg.
+       (module_nil): New constant.
+       Use it instead of NULL when returning an emacs_value.
+       (module_make_function): Adjust to new calling convention of
+       Qinternal_module_call.
+       (DEFUN): Receive args in an array rather than a list.
+       Use SAFE_ALLOCA rather than xnmalloc.  Skip the lisp_to_value loop when
+       we don't have WIDE_EMACS_INT.  Adjust to new type of non_local_exit info.
+       (module_non_local_exit_signal_1, module_non_local_exit_throw_1):
+       Adjust to new type of non_local_exit info.
+       (ltv_mark) [WIDE_EMACS_INT]: New constant.
+       (value_to_lisp, lisp_to_value): Rewrite.
+       (initialize_frame, initialize_storage, finalize_storage): Remove functions.
+       (allocate_emacs_value): Remove function.
+       (mark_modules): Gut it.
+       (initialize_environment): Don't initialize storage any more.
+       Keep the actual env object on Vmodule_environments.
+       (finalize_environment): Don't finalize storage any more.
+       (syms_of_module): Initialize ltv_mark and module_nil.
+
+       * src/emacs-module.h (emacs_value): Make it more clear that this type
+       is really opaque, including the fact that NULL may not be valid.
+
+       * modules/mod-test/mod-test.c (Fmod_test_signal, Fmod_test_throw):
+       Don't assume that NULL is a valid emacs_value.
+
+2015-11-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Yet another doc improvement for search commands
+
+       * doc/emacs/search.texi (Word Search, Symbol Search)
+       (Regexp Search): Document commands that don't support lax
+       whitespace matching or character folding.
+       (Nonincremental Search): Mention the search commands that can be
+       invoked from the menu bar.
+
+       * lisp/isearch.el (isearch-define-mode-toggle-word)
+       (isearch-define-mode-toggle-symbol)
+       (isearch-define-mode-toggle-character-fold): Note in the doc
+       string that turning these on exits the regexp mode.
+       (isearch-forward-regexp, isearch-forward-word)
+       (isearch-forward-symbol, isearch-backward-regexp)
+       (word-search-backward, word-search-forward)
+       (word-search-backward-lax, word-search-forward-lax): State in the
+       doc string which commands don't support character folding and/or
+       lax-whitespace matching.
+
+2015-11-30  Martin Rudalics  <rudalics@gmx.at>
+
+       Run `window-size-change-functions' also when reading from minibuffer
+
+       * src/xdisp.c (redisplay_internal): Run `window-size-change-functions'
+       also when reading from minibuffer.
+
+2015-11-30  Ulf Jasper  <ulf.jasper@web.de>
+
+       Fix scrambling of html-rendered item buffers
+
+       * lisp/net/newst-treeview.el (newsticker--treeview-render-text): Fix
+         scrambling of contents by wrapping call to html-renderer in
+         save-selected-window.
+
+2015-11-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix font typo in previous doc fix.
+
+2015-11-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+       A bit more security doc, esp. file local vars
+
+       * doc/emacs/emacs.texi (Top):
+       * doc/emacs/misc.texi (Miscellaneous Commands):
+       Refer to new Host Security section.
+       (Host Security): New section.
+       * doc/lispref/os.texi (Security Considerations):
+       Mention file local variables.
+
+2015-11-30  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el: Comment out branching code
+
+       (character-fold-to-regexp): Comment out code that uses multi-char
+       table.  The branching caused by this induces absurdly long regexps,
+       up to 10k chars for as little as 25 input characters.
+
+2015-11-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling and grammar fixes
+
+2015-11-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make lisp-completion-at-point a wrapper instead of an alias
+
+       * lisp/progmodes/elisp-mode.el (lisp-completion-at-point):
+       Turn into an obsolete wrapper around elisp-completion-at-point
+       (bug#20455).
+
+2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/isearch.el (isearch-search-fun-default): Nicer error
+
+       message when the search fails.
+
+2015-11-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Update menu-bar-goto-uses-etags-p for the current xref API
+
+       * lisp/menu-bar.el (menu-bar-goto-uses-etags-p): Consult
+       xref-backend-functions, instead of now-nonexistent
+       xref-find-function.
+
+2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/isearch.el (isearch-define-mode-toggle): Advertise binding
+
+2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/menu-bar.el: Use folding in searches
+
+       (nonincremental-search-forward): Use `isearch-search-fun-default'
+       to determine the search function.
+       (nonincremental-search-backward)
+       (nonincremental-repeat-search-forward)
+       (nonincremental-repeat-search-backward): Use it.
+
+2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/menu-bar.el (menu-bar-goto-uses-etags-p): Fix a warning
+
+2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el (character-fold-to-regexp): Be careful
+
+       not to return huge regexps.
+
+2015-11-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of string-collate-* functions
+
+       * doc/lispref/strings.texi (Text Comparison): Improve wording and
+       indexing of 'string-collate-equalp' and 'string-collate-lessp'.
+
+       * etc/NEWS: Move the entry of 'string-collate-equalp' and
+       'string-collate-lessp' to "Lisp Changes" section and mark it as
+       documented.
+
+2015-11-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Document truncate-string-ellipsis
+
+       * doc/lispref/display.texi (Size of Displayed Text): Document
+       'truncate-string-ellipsis'.
+
+       * lisp/international/mule-util.el (truncate-string-ellipsis): Doc fix.
+       (truncate-string-to-width): Mention in the doc string that the
+       default for ELLIPSIS comes from 'truncate-string-ellipsis'.
+
+       * etc/NEWS: Move the 'truncate-string-ellipsis' entry to the "Lisp
+       Changes" section.
+
+2015-11-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix confusion wrt character folding in the Emacs manual
+
+       * doc/emacs/search.texi (Nonincremental Search, Regexp Search):
+       Document that invoking search-forward/backward and
+       re-search-forward/backward supports only case folding, but not the
+       rest of the lax-search features.  Reported by Mike Kupfer
+       <m.kupfer@acm.org>.
+
+2015-11-29  Ken Brown  <kbrown@cornell.edu>
+
+       Update mod-test-sum-test
+
+       * modules/mod-test/test.el (mod-test-sum-test): Update to
+       accommodate the lack of dladdr on Cygwin.
+
+2015-11-29  Alan Mackenzie  <acm@muc.de>
+
+       Byte compiler: Catch missing argument to `funcall'.  Fixes bug#22051.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-funcall): When there's no argument
+       to `funcall', (i) Output an error message; (ii) Generate code to signal a
+       `wrong-number-of-arguments' error.
+
+2015-11-29  Martin Rudalics  <rudalics@gmx.at>
+
+       * lisp/window.el (split-window): Don't sanitize sizes when SIZE is non-nil.
+
+2015-11-28  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el (character-fold-to-regexp)
+
+       Warn about using long strings.
+
+       * test/automated/character-fold-tests.el
+       (character-fold--test-lax-whitespace)
+       (character-fold--test-consistency): Reduce string size for tests.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Document renaming of x-select-enable-* variables
+
+       * doc/emacs/killing.texi (Clipboard): Rename
+       x-select-enable-clipboard to select-enable-clipboard and
+       x-select-enable-primary to select-enable-primary.  Update index
+       entries.
+
+       * etc/NEWS: Mark entry as documented.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Document the shorthand hints displayed by M-x
+
+       * doc/emacs/m-x.texi (M-x): Document the numeric meaning of
+       suggest-key-bindings.  Document the shorthand hints for commands
+       that have no key bindings.  Document that M-x completion ignores
+       obsolete commands.
+
+       * etc/NEWS: Move the M-x entry to "Editing Changes" and mark it as
+       documented.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Update docs of character folding
+
+       * doc/emacs/search.texi (Lax Search): Update the description of
+       character folding for the latest changes.
+
+2015-11-28  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el: Also play nice with case-folding
+
+       (character-fold-to-regexp): Take `case-fold-search' into account.
+
+2015-11-28  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el: Add support for multi-char matches
+
+       (character-fold-table): Now has an extra-slot. This is a second
+       char-table that holds multi-character matches.  See docstring for
+       details.
+       (character-fold-to-regexp): Can build branching regexps when a
+       character's entry the extra slot of `character-fold-table' matches the
+       characters that succeed it.
+
+2015-11-28  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el: Code simplifications
+
+       (character-fold-table): Reduce the scope of a variable.
+       (character-fold-to-regexp): Change logic to work directly on the
+       input string.  It's a little easier to understand, probably
+       faster, and sets us up for implementing multi-char matches.
+
+       * test/automated/character-fold-tests.el
+       (character-fold--test-fold-to-regexp): New test.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Document changes in "C-h l"
+
+       * doc/emacs/help.texi (Misc Help): Document the changes in "C-h l".
+
+       * etc/NEWS: mark "C-h l" changes as documented.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Finalize documentation of 'custom-prompt-customize-unsaved-options'
+
+       * doc/emacs/custom.texi (Saving Customizations): Index the new
+       function 'custom-prompt-customize-unsaved-options'.
+
+       * etc/NEWS: Mention when 'custom-prompt-customize-unsaved-options'
+       is useful.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'comment-line'
+
+       * doc/emacs/programs.texi (Comment Commands): Document
+       'comment-line'.
+
+       * etc/NEWS: Move the entry for 'comment-line' into "Editing Changes".
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Document new checkdoc features
+
+       * doc/lispref/tips.texi (Tips, Library Headers): Document the
+       keyword-checking features of checkdoc and the commands
+       'checkdoc-file' and 'checkdoc-current-buffer'.
+
+       * etc/NEWS: Move the checkdoc-related entries to their own
+       section.
+
+2015-11-28  Philipp Stephani  <p.stephani2@gmail.com>
+
+       Simplify the prologue of emacs-module.c functions
+
+       * src/emacs-module.c (MODULE_FUNCTION_BEGIN): New macro.
+       (module_make_global_ref)
+       (module_free_global_ref, module_make_function, module_funcall)
+       (module_intern, module_type_of, module_extract_integer)
+       (module_make_integer, module_extract_float, module_make_float)
+       (module_copy_string_contents, module_make_string)
+       (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
+       (module_get_user_finalizer, module_set_user_finalizer)
+       (module_vec_set, module_vec_get, module_vec_size): Use new helper
+       macro MODULE_FUNCTION_BEGIN.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't reject module calls with no arguments
+
+       * src/emacs-module.c (Finternal_module_call): Allow ARGLIST be nil.
+
+2015-11-28  Philipp Stephani  <p.stephani2@gmail.com>
+
+       Make module-call be visible from Lisp
+
+       * src/emacs-module.c (module_make_function): Use internal--module-call.
+       (Finternal_module_call): Renamed from Fmodule_call.  Add safety
+       checks.
+       (syms_of_module): DEFSYM save-value-p and save-pointer-p.  Do
+       defsubr internal--module-call.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Add etags tests for the recent Lua-related bugfix
+
+       * test/etags/lua-src/test.lua: New file, tests the issues raised
+       by bug#21934.
+       * test/etags/Makefile (LUASRC): Add test.lua.
+       * test/etags/ETAGS.good_1:
+       * test/etags/ETAGS.good_2:
+       * test/etags/ETAGS.good_3:
+       * test/etags/ETAGS.good_4:
+       * test/etags/ETAGS.good_5:
+       * test/etags/ETAGS.good_6:
+       * test/etags/CTAGS.good: Adapt to the new Lua test.  Also, an old
+       regression fix, resolved around 25 May 2015, required changes to
+       the "good" ETAGS files.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Lua tags when a function name includes '.' or ':'
+
+       * lib-src/etags.c (Lua_functions): Add a tag for the last element
+       of a function name after a dot or a colon.  (Bug#21934)
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of search and replace commands
+
+       * doc/emacs/search.texi (Replacement and Lax Matches): Document
+       which commands are affected by 'replace-character-fold'.
+       (Lax Search): Add a cross reference to "Replacement and Lax
+       Matches".  Improve wording.  Fix lost extra whitespace.
+       (Search Customizations): Improve wording.  (Bug#22036)
+       See also comments in
+       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02376.html.
+
+       * lisp/replace.el (query-replace, query-replace-regexp)
+       (query-replace-regexp-eval, replace-string, replace-regexp):
+       Mention 'replace-character-fold' in the doc strings.
+
+2015-11-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix minor problems found by static checking
+
+       * src/undo.c (prepare_record): Add proper prototype for C.
+
+2015-11-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/emacs-module.c (struct env_storage): Delete
+
+       (struct emacs_runtime_private): Keep an emacs_env instead.
+       (Fmodule_load, Fmodule_call): Declare emacs_env_private separately.
+       (initialize_environment): Split the arg in two.  Adjust all callers.
+       Only store the private part in Vmodule_environments.
+       (finalize_environment): Change the arg to only be the private env.
+       Adjust all callers.
+
+2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'replace-character-fold'
+
+       * lisp/replace.el (replace-character-fold): Clarify which commands
+       are affected by this variable.
+
+2015-11-27  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Autoload etags when using its xref backend
+
+       * lisp/progmodes/xref.el (xref--etags-backend):
+       Rename to etags--xref-backend.  Move to etags.el.  Autoload.
+       (Bug#22026)
+
+2015-11-27  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el: Allow complex chars to match their decomposition
+
+       (character-fold-table): When a character's decomposition does not
+       involve a formatting tag (i.e., if it has an "exact" description via
+       other characters), then this character is allowed to match the
+       decomposition.
+
+2015-11-27  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/character-fold.el: More descriptive variable names
+
+       (character-fold-table): Rename a lot of the lexical variables to
+       make the code easier to read.
+
+2015-11-27  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/isearch.el: Ensure we still support `isearch-new-word'
+
+       (isearch-new-regexp-function): Define variable.
+       (isearch-new-word): Define as an obsolete alias. (Bug#22018)
+
+2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+
+2015-11-27  Lee Bochicchio  <lboc.home@gmail.com>
+
+       * test/lisp/abbrev-tests.el: Define more tests
+
+       (abbrev-table-name-test, kill-all-abbrevs-test)
+       (clear-abbrev-table-test): New tests.
+
+2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Add module tests for wrong-type-argument
+
+       * modules/mod-test/test.el (mod-test-sum-test): Add tests for
+       wrong-type-argument.
+
+2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve handling of signals and 'throw' in modules
+
+       * src/emacs-module.c: Add commentary explaining how to write
+       functions in this file.
+       (module_make_global_ref, module_free_global_ref)
+       (module_non_local_exit_signal, module_non_local_exit_throw)
+       (module_make_function, module_funcall, module_intern)
+       (module_type_of, module_is_not_nil, module_eq)
+       (module_extract_integer, module_make_integer)
+       (module_extract_float, module_make_float)
+       (module_copy_string_contents, module_make_string)
+       (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
+       (module_get_user_finalizer, module_set_user_finalizer)
+       (module_vec_set, module_vec_get, module_vec_size)
+       (module_non_local_exit_signal_1, module_non_local_exit_throw_1):
+       Do nothing and return with failure indication immediately, if some
+       previous module call signaled an error or wants to throw.  See
+       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02133.html
+       for the relevant discussions.
+
+2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Add ':version' tag to 'checkdoc-package-keywords-flag'
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-package-keywords-flag):
+       Add a ':version' tag.
+
+2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'eval-buffer' and 'eval-region'
+
+       * src/lread.c (Feval_buffer, Feval_region): Doc fixes.  (Bug#22023)
+
+       * doc/lispref/eval.texi (Eval): Mention narrowing to clarify
+       "accessible portion of buffer".
+
+2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Unbreak the Cygwin w32 build
+
+       * src/emacs.c (main): Call w32_init_main_thread in the Cygwin w32
+       build as well.  Reported by Andy Moreton <andrewjmoreton@gmail.com>.
+
+2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve commentary in character-fold.el
+
+       * lisp/character-fold.el (character-fold-to-regexp): Move detailed
+       description from commit log message to comments.  (Bug#22019)
+
+2015-11-26  Alan Mackenzie  <acm@muc.de>
+
+       Byte Compiler: generate code to adjust stack count after call to `signal'.
+
+       Corrects change from earlier today.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): supply the current value of
+       `byte-compile--for-effect' as argument to `byte-compile-form'.
+
+2015-11-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve commentary of prepare_to_modify_buffer_1
+
+       * src/insdel.c (prepare_to_modify_buffer_1): Mention in commentary
+       that this function runs Lisp.  Suggested by Richard Stallman
+       <rms@gnu.org>.
+
+2015-11-26  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+
+2015-11-26  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Fix regression after merge.
+
+        * src/undo.c (prepare_record): Remove call to run_undoable_change.
+
+2015-11-26  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       After delete, record point location in undo.
+
+       Addresses Bug #21968.
+
+               * lisp/simple.el (undo-auto--add-boundary): Clean up code to
+               better support intercalating calls.
+               * src/keyboard.c, src/keyboard.h (command_loop_1): Store value of
+               point and current buffer before each command.
+               * src/undo.c (record_point): Now only record the point.
+               * src/undo.c (prepare_record): Functionality removed form
+               record_point.
+               * src/undo.c (record_delete): Check if point needs recording.
+               * src/undo.c (undo-boundary): Record value of point before each
+               boundary.
+               * test/automated/simple-test.el: New tests.
+
+       Conflicts:
+               src/undo.c
+
+2015-11-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compiler warnings in w32.c
+
+       * src/w32.c (sys_socket): In case of error, use -1 as return
+       value, not INVALID_SOCKET, which causes compiler warnings.
+       (maybe_load_unicows_dll): Cast the return value of GetProcAddress
+       to the appropriate function signature, to avoid compiler errors.
+       Reported by Andy Moreton <andrewjmoreton@gmail.com>.  (Bug#21953)
+
+2015-11-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Check if the file exists on disk before producing the revert diff
+
+       * lisp/vc/vc-dispatcher.el (vc-buffer-sync): Check if the file
+       exists on disk (bug#20558).
+
+2015-11-26  Alan Mackenzie  <acm@muc.de>
+
+       Byte compiler: on setq with an odd number of arguments, generate a `signal'
+
+       * lisp/emacs-lisp/cconv.el (cconv-convert): Don't transform `setq' form when
+       it has an odd number of arguments, to allow bytecomp to handle the error.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): In a `setq' form with an
+       odd number of arguments, generate a `signal' instead of the normal code.
+
+2015-11-25  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use find-tag-default for xref-backend-identifier-at-point
+
+       * lisp/progmodes/etags.el (find-tag-tag)
+       (tags-completion-at-point-function): Extract common code as
+       find-tag--default.
+       (xref-backend-identifier-at-point): Define in terms of the new
+       function.
+
+2015-11-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/undo.c (record_property_change): Remove now-unused local.
+
+2015-11-25  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       run_undoable_changes now called from insdel.
+
+       The original calls from inside undo.c are not always at a safe position
+       to call lisp, as they originate in varied positions within insdel.c.
+       Calling them directly from prepare_to_modify_buffer_1 ensures that they
+       are always run at the same point.
+
+        * src/undo.c (run_undoable_changes,syms_of_undo): Remove function
+        and symbol used.
+        * src/insdel.c (run_undoable_changes): Add function and symbol.
+
+2015-11-25  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-05  Glenn Morris  <rgm@gnu.org>
+       Improve and update documentation of search commands
 
-       * lisp/net/net-utils.el: Small improvements.
+       * doc/emacs/search.texi (Lax Search): Renamed from "Search Case";
+       all references changed.  Move the description of lax-whitespace
+       here.  Add description of the new character folding features and
+       additional customizable options.
+       (Isearch Yank): Move before "Error in Search".
+       (Basic Isearch): Improve wording.  Add index entries.  Add short
+       description of how to abandon search, making this subsection a
+       complete introduction to search basics.
+       (Repeat Isearch): Add index entries.  Describe additional
+       customizable options.  Describe mouse clicks.
+       (Isearch Yank): Add index entries.  Describe mouse-2 click in echo
+       area.  Describe more customizable options.
+       (Error in Isearch): Add index entries.
+       (Special Isearch): Move actual description of some isearch
+       commands to other sections, leaving here just the summary of the
+       commands.  Add command that toggles character folding.  Describe
+       commands, like "C-h C-h", that were previously omitted for some
+       reason.
+       (Not Exiting Isearch): Describe search-exit-option.  Add index
+       entries.
+       (Word Search): Describe eww-search-word and eww-search-prefix.
+       (Symbol Search): Add index entries.
+       (Regexp Search): Describe regexp-search-ring-max.
+       (Replacement and Lax Matches): Renamed from "Replacement and
+       Case"; all references changed.  Describe lax-whitespace matching
+       in replace commands and related options.  Describe character
+       folding in replace commands and related options.
+       (Query Replace): Describe query-replace-from-to-separator and the
+       new history features.  Add index entries for highlighted text.
+       Describe query-replace-skip-read-only.  Describe more keys
+       accepted by query-replace.
+       (Other Repeating Search): More index entries for Occur.  Describe
+       list-matching-lines-default-context-lines.
+       (Search Customizations): New section, documents customizable
+       options that were not documented until now.
+       * doc/emacs/glossary.texi (Glossary): Add "Case Folding" and
+       "Character Folding".
 
-       (net-utils--executable-find-sbin): New function.
-       (ifconfig-program): Check sbin directories.
-       Fallback to "ip".  (Bug#22091)
-       (ifconfig-program-options): Check the actual program in use.
-       (arp-program): Check sbin directories.
+       * etc/NEWS: Move search- and replace-related entries to a single
+       parent section.
 
-2015-12-04  (tiny change) Arash Esbati  <esbati@gmx.de>  (tiny change)
+       * lisp/replace.el (query-replace-show-replacement): Doc fix.
+       * lisp/isearch.el (search-nonincremental-instead)
+       (isearch-hide-immediately): Doc fixes.
 
-       Fix wrong-type-argument integer-or-marker-p nil error
+2015-11-25  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * lisp/textmodes/reftex-auc.el (reftex-what-index-tag):
-       Fix (wrong-type-argument integer-or-marker-p nil) error (bug#22077).
+       Remove nnml-retrieve-groups that is unnecessary and somewhat problematic
 
-2015-12-04  Alan Mackenzie  <acm@muc.de>
+       * lisp/gnus/nnml.el (nnml-retrieve-groups): Remove.  See:
+       <http://thread.gmane.org/gmane.emacs.gnus.general/86308> and
+       <http://thread.gmane.org/gmane.emacs.gnus.general/86321>
 
-       Merge branch 'scratch/follow' of /home/acm/emacs/emacs.git/emacs-25 into scratch/follow
+2015-11-25  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Merge necessitated by a rebase operation.
+       Fix module_format_fun_env when dynlib_addr fails
 
-2015-12-04  Alan Mackenzie  <acm@muc.de>
+       * src/emacs-module.c (module_format_fun_env):
+       exprintf doesn’t support %p, so use %x.  Reported by Eli Zaretskii in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02122.html
 
-       lisp/isearch.el: Eliminate macro isearch-call-message, replacing with funcall.
+2015-11-25  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-04  Alan Mackenzie  <acm@muc.de>
+       Disambiguate variable help a bit better
 
-       First commit to scratch/follow.  Make Isearch work with Follow Mode, etc.
+       * lisp/help-fns.el (describe-variable): Quote the
+       variable’s value if it is a symbol other than t or nil.
+       See: T.V Raman in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02147.html
 
-       doc/lispref/window.texi (Basic Windows): Add paragraph defining "Group of
-       Windows" and new @defun selected-window-group.
-       (Window Start and End): Describe new &optional parameter GROUP and
-       ...-group-function for window-start, window-end, set-window-start, and
-       pos-visible-in-window-p.
-       (Textual Scrolling) Describe the same for recenter.
-       doc/lispref/positions.texi (Screen Lines): Describe the same for
-       move-to-window-line.
+2015-11-24  Dmitry Gutov  <dgutov@yandex.ru>
 
-       src/window.c (Fwindow_start, Fwindow_end, Fset_window_start)
-       (Fpos_visible_in_window_p, Frecenter, Fmove_to_window_line): To each, add ar
-       new optional parameter "group".  At the beginning of each, check whether the
-       corresponding ...-group-function is set to a function, and if so execute this
-       function in place of the normal processing.
-       (syms_of_window): Define symbols for the six new variables below.
-       (window-start-group-function, window-end-group-function)
-       (set-window-start-group-function, recenter-group-function)
-       (pos-visible-in-window-p-group-function, move-to-window-line-group-function):
-       New permanent local buffer local variables.
-       src/keyboard.c (Fposn_at_point): Add extra parameter in call to
-       Fpos_visible_in_window_p.
+       Pass SVN commit message through log-edit-extract-headers
 
-       lisp/window.el (selected-window-group-function): New permanent local buffer
-       local variable.
-       (selected-window-group): New function.
+       * lisp/vc/vc-svn.el (vc-svn-checkin): Pass COMMENT through
+       log-edit-extract-headers (bug#18954).
 
-       lisp/follow.el (follow-mode): Set the ...-group-function variables at mode
-       enable, kill them at mode disable.  Add/remove follow-after-change to/from
-       after-change-functions.
-       (follow-start-end-invalid): New variable.
-       (follow-redisplay): Manipulate follow-start-end-invalid.
-       (follow-after-change, follow-window-start, follow-window-end)
-       (follow-set-window-start, follow-pos-visible-in-window-p)
-       (follow-move-to-window-line, follow-sit-for): New functions.
+2015-11-24  Alan Mackenzie  <acm@muc.de>
 
-       lisp/isearch.el (isearch-call-message): New macro.
-       (isearch-update, with-isearch-suspended, isearch-del-char)
-       (isearch-search-and-update, isearch-ring-adjust): Invoke above new macro.
-       (with-isearch-suspended): Rearrange code such that isearch-call-message is
-       invoked before point is moved.
-       (isearch-message): Add comment about where point must be at function call.
-       (isearch-search): Remove call to isearch-message.
-       (isearch-lazy-highlight-window-group): New variable.
-       (isearch-lazy-highlight-new-loop): Unconditionally start idle timer.  Move
-       the battery of tests to ...
-       (isearch-lazy-highlight-maybe-new-loop): New function, started by idle timer.
-       Note: (sit-for 0) is still called.
-       (isearch-lazy-highlight-update): Check membership of
-       isearch-lazy-highlight-window-group.  Don't set the `window' overlay
-       property.
-       (isearch-update, isearch-done, isearch-string-out-of-window)
-       (isearch-back-into-window, isearch-lazy-highlight-maybe-new-loop)
-       (isearch-lazy-highlight-search, isearch-lazy-highlight-update)
-       (isearch-lazy-highlight-update): Call the six amended primitives (see
-       src/window.c above) with the new `group' argument set to t, to cooperate
-       with Follow Mode.
+       CC Mode: Eliminate compiler warning messages.
 
-2015-12-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * lisp/progmodes/cc-mode.el (top level): remove compile time declaration of
+       `font-lock-syntactic-keywords' (which CC Mode doesn't use).
+       * lisp/progmodes/cc-awk.el (awk-mode-syntax-table)
+       (c-awk-set-syntax-table-properties): Clarify comments about
+       `font-lock-syntactic-keywords'.
 
-       * lisp/emacs-lisp/ert.el: Prefer pcase over cl-typecase
+       * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-load): Create a dummy declaration
+       of this before the real (interpreted) one, to satisfy the byte compiler.
 
-       * lisp/emacs-lisp/ert.el (ert--should-error-handle-error)
-       (ert--explain-format-atom, ert--explain-equal-rec)
-       (ert--print-backtrace, ert-test-result-type-p, ert-select-tests)
-       (ert--insert-human-readable-selector): Prefer pcase over cl-typecase.
+2015-11-24  Simen Heggestøyl  <simenheg@gmail.com>
 
-2015-12-04  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Extend the test suite for json.el
 
-       * lisp/character-fold.el: Remove special case-folding support
+       * lisp/json.el (json-plist-p): Clarify docstring.
 
-       (character-fold-to-regexp): Remove special code for
-       case-folding.  Char-fold search still respects the
-       `case-fold-search' variable (i.e., f matches F).  This only
-       removes the code that was added to ensure that f also matched
-       all chars that F matched.  For instance, after this commit, f
-       no longer matches 𝔽.
+       * test/automated/json-tests.el (json-tests--with-temp-buffer): New
+       macro.
+       (test-json-join, test-json-alist-p)
+       (test-json-plist-p, test-json-advance, test-json-peek)
+       (test-json-pop, test-json-skip-whitespace)
+       (test-json-read-keyword, test-json-encode-keyword)
+       (test-json-read-number, test-json-encode-number)
+       (test-json-read-escaped-char, test-json-read-string)
+       (test-json-encode-string, test-json-encode-key)
+       (test-json-new-object, test-json-add-to-object)
+       (test-json-read-object, test-json-encode-list)
+       (test-json-read-array, test-json-encode-array)
+       (test-json-read, test-json-read-from-string)
+       (test-json-encode): New tests.
+       (json-read-simple-alist): Merged into `test-json-read-object'.
+       (json-encode-string-with-special-chars): Merged into
+       `test-json-encode-string'.
+       (json-read-string-with-special-chars): Split into
+       `test-json-encode-string' and `test-json-read-from-string'.
 
-       This was necessary because the logic created a regexp with
-       2^(length of the string) redundant paths.  So, when a very
-       long string "almost" matched, Emacs took a very long time to
-       figure out that it didn't.  This became particularly relevant
-       because isearch's lazy-highlight does a search bounded by (1-
-       match-end) (which, in most circumstances, is a search that
-       almost matches).  A recipe for this can be found in bug#22090.
+2015-11-24  Anders Lindgren  <andlind@gmail.com>
 
-2015-12-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+       Fixed bug#18283: Enable applescript in NextStep.
 
-       * lisp/emacs-lisp/cl-macs.el (character): Can't be negative
+       * nextstep/templates/Info.plist.in: Set NSAppleScriptEnabled to YES.
 
-       Fixes (bug#21701)
+2015-11-24  Eli Zaretskii  <eliz@gnu.org>
 
-2015-12-04  Daiki Ueno  <ueno@gnu.org>
+       Allow completion on dynamic module files in load-library
 
-       lisp/gnus/qp.el: Don't replace "from " at bol
+       * lisp/files.el (load-library): Bind completion-ignored-extensions
+       to nil, to allow completion on dynamic modules typed as file
+       names.  Reported by Andy Moreton <andrewjmoreton@gmail.com>.
 
-       * lisp/gnus/qp.el (quoted-printable-encode-region): Bind `case-fold-search'
-       to nil when looking for "^From ".  Problem reported by Simon Josefsson.
+2015-11-24  Alan Mackenzie  <acm@muc.de>
 
-2015-12-03  Phillip Lord  <phillip.lord@russet.org.uk>
+       CC Mode: eliminate almost all byte compilation warnings
 
-       Externalize some symbols in undo-auto
+       * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-noruntime-functions): Remove.
+       (cc-require): Remove the crude hack that saved and restored
+       byte-compile-noruntime-functions.
+       (cc-conditional-require, cc-conditional-require-after-load): New macros.
 
-        * doc/lispref/text.texi: Update symbols.
-        * lisp/simple.el (undo-auto--amalgamate,
-          undo-auto--current-boundary-timer): Make symbols public.
-        * src/cmds.c (Fself_insert_command,Fdelete_char): Call
-          updated symbol.
+       * lisp/progmodes/cc-defs.el (top level): Reformulate code which loaded
+       cc-fix.el using the new macros in cc-bytecomp.el.
 
-2015-12-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * lisp/progmodes/cc-langs.el (c++-template-syntax-table)
+       (c-no-parens-syntax-table): Add extra "(eval ..)"s around "'(lambda ..)"
+       forms to remove the superflous quotes.
 
-       * lisp/emacs-lisp/smie.el (smie-next-sexp): Fix BOB "token"
+2015-11-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Add one more mod-test test
+
+       * modules/mod-test/test.el (mod-test-sum-test): Test the error
+       signaled when the function is invoked with a wrong number of
+       arguments.
+
+2015-11-24  Philipp Stephani  <phst@google.com>
+
+       * modules/mod-test/mod-test.c (Fmod_test_sum): Verify there are 2 args.
+
+2015-11-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Implement dynlib_addr for MS-Windows
+
+       * src/dynlib.c [WINDOWSNT]: Include w32common.h.
+       <g_b_init_get_module_handle_ex> [WINDOWSNT]: New static variable.
+       (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS)
+       (GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT) [WINDOWSNT]: Define
+       if undefined.
+       (dynlib_reset_last_error): Reset g_b_init_get_module_handle_ex to
+       zero.
+       (dynlib_addr) [WINDOWSNT]: Non-trivial implementation to report
+       the full file name of the module for a given address.
+
+2015-11-24  Alan Mackenzie  <acm@muc.de>
+
+       Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+
+2015-11-24  Alan Mackenzie  <acm@muc.de>
+
+       Squashed commit of the following:
+
+       commit e1ecf76585bef2eb87995f7a7f92cc12003a6f70
+       Author: Alan Mackenzie <acm@muc.de>
+       Date:   Tue Nov 24 16:50:09 2015 +0000
 
-2015-12-03  Michael Albinus  <michael.albinus@gmx.de>
+           Byte compile: minor amendments.
 
-       Some error message improvements in tramp-sh.el
+           * lisp/emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment):
+           add a comment to explain the binding of variables around a subsidiary
+           compilation.
+           (byte-compile-new-defuns): Amend the doc string.
 
-       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
-       Suppress error messages for "mesg" and "biff" calls.
-       (tramp-get-remote-path): Ignore errors when expanding
-       `tramp-own-remote-path'.  Raise a warning instead.
+       commit c537bfed1dda1593d218956ff00c6105a3ff0316
+       Author: Alan Mackenzie <acm@muc.de>
+       Date:   Sat Nov 21 18:43:57 2015 +0000
 
-2015-12-03  Eli Zaretskii  <eliz@gnu.org>
+           Byte compiler: fix spurious warnings "might not be defined at runtime".
 
-       Document 'nacl' value for 'system-type'
+           Also initialize byte-compile-noruntime-functions between runs.
 
-       * doc/lispref/os.texi (System Environment): Document the 'nacl'
-       value of 'system-type'.
+           * lisp/emacs-lisp/bytecomp.el (byte-compile-new-defuns): New variable.
+           (byte-compile-initial-macro-environment): For eval-when-compile: bind
+           byte-compile-unresolved-functions and byte-compile-new-defuns around
+           byte-compile-top-level, to prevent spurious entries being made.
+           (byte-compile-warn-about-unresolved-functions): Check whether function is
+           in byte-compile-new-defuns before emitting a warning about it.
+           (byte-compile-from-buffer): Initialize new variable and
+           byte-compile-noruntime-functions to nil.
+           (byte-compile-file-form-require): record all new functions defined by a
+           `require' in byte-compile-new-defuns.
+           (byte-compile-file-form-defmumble): record the new alias in
+           byte-compile-new-defuns.
 
-2015-12-03  Eli Zaretskii  <eliz@gnu.org>
+2015-11-24  Eli Zaretskii  <eliz@gnu.org>
 
-       Document 'window-max-chars-per-line'
+       Fix crash at startup related to GC of font entities
 
-       * doc/lispref/windows.texi (Window Sizes): Document
-       'window-max-chars-per-line'.
+       * src/font.h (GC_FONT_SPEC_P, GC_FONT_ENTITY_P)
+       (GC_FONT_OBJECT_P, GC_XFONT_SPEC, GC_XFONT_ENTITY)
+       (GC_XFONT_OBJECT): New macros, for use in garbage collector.
+       * src/alloc.c (compact_font_cache_entry, compact_font_caches):
+       Don't ifdef away font cache compaction on NT_GUI, as the problems
+       which led to that seem to have been solved.
+       (compact_font_cache_entry): Use GC_FONT_SPEC_P, GC_XFONT_SPEC,
+       GC_XFONT_ENTITY, and GC_XFONT_OBJECT, instead of their non-GC_
+       cousins.  (Bug#21999)
 
-2015-12-03  Artur Malabarba  <bruce.connor.am@gmail.com>
+2015-11-24  Alan Mackenzie  <acm@muc.de>
 
-       Fix some file headers for the purpose of `package--builtins'
+       Byte compile: Output an error, not a warning, for odd number of args to setq
 
-       * lisp/emacs-lisp/cl-preloaded.el
-       * lisp/emacs-lisp/eieio-compat.el
-       * lisp/net/sasl-scram-rfc.el: Add a "Package:" header
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): Amend.
 
-       * lisp/ielm.el: Fix summary line.
+2015-11-24  Ken Raeburn  <raeburn@raeburn.org>
 
-2015-12-03  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Fix kbd_buffer iteration loop in readable_events
 
-       * lisp/emacs-lisp/package.el (package-unpack): Load before compiling
+       * src/keyboard.c (readable_events): Wrap the event pointer back to the
+       start of the kbd_buffer array inside the top of the loop instead of
+       right before checking the loop condition, since kbd_fetch_ptr and
+       kbd_store_ptr point past the end of the array to mean that element 0
+       is next. (bug#21935)
 
-       Reload any previously loaded package files before compiling
-       the package (also reload the same files after compiling).
-       This ensures that we have the most recent definitions during
-       compilation, and avoids generating bad elc files when a macro
-       changes and it is used in a different file from the one it's
-       defined in.
+2015-11-24  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-03  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Improve text-quoting-style doc again
 
-       * lisp/emacs-lisp/package.el: Refactor package activation code
+       * doc/lispref/help.texi (Keys in Documentation):
+       Omit overkill discussion of ‘setq’.  Mention Emacs versions
+       where ‘grave’ style was standard.
 
-       (package-activate): Move code that activates dependencies into
-       package-activate-1.
-       (package--load-files-for-activation): New function.
-       (package-activate-1): Add code for (optionally) activating
-       dependencies, and move file-loading code into
-       `package--load-files-for-activation'.
+2015-11-23  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-03  Eli Zaretskii  <eliz@gnu.org>
+       Improve text-quoting-style doc
 
-       Document new font-related functionality
+2015-11-23  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * doc/lispref/display.texi (Low-Level Font): Document
-       'default-font-width', 'default-font-height', 'window-font-width',
-       and 'window-font-height'.
+       Simplify module_make_function
 
-       * etc/NEWS: Move entries for 'default-font-width',
-       'default-font-height', 'window-font-width', and 'window-font-height'
-       to their place and mark them documented.
+       * src/emacs-module.c (module_make_function):
+       Simplify by calling build_unibyte_string.
 
-2015-12-03  Eli Zaretskii  <eliz@gnu.org>
+2015-11-23  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Fix documentation and implementation of 'directory-name-p'
+       Port better to FreeBSD’s dlfunc vs dlsym
 
-       * lisp/files.el (directory-name-p): Modify to recognize
-       backslashes on MS-Windows and MS-DOS.  Adjust the doc string
-       accordingly.  Use '=', not char-equal, for comparison, as
-       letter-case cannot possibly be an issue here.
+       This avoids warnings when converting between void * and
+       function pointers, which strict C11 does not allow.
+       * configure.ac (dlfunc): Check for existence.
+       * src/dynlib.c (dlfunc) [!HAVE_DLFUNC]: New macro.
+       (dynlib_func): New function.
+       * src/dynlib.h (dynlib_function_ptr, dynlib_func): New decls.
+       * src/emacs-module.c (Fmodule_load): Use dynlib_func, not
+       dynlib_sym, for function pointers.
 
-       * doc/lispref/files.texi (Directory Names): Move the documentation
-       of directory-name-p here from "Relative File Names".  Update the
-       description per the changes in implementation.
+2015-11-23  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * etc/NEWS: Move the entry for 'directory-name-p' to its proper
-       place and mark it documented.
+       Simplify use of emacs_finalizer_function type
 
-2015-12-02  Eli Zaretskii  <eliz@gnu.org>
+       * src/emacs-module.h (emacs_finalizer_function):
+       Now EMACS_NOEXCEPT.  All users simplified to omit EMACS_NOEXCEPT.
+       (struct emacs_env_25): Use emacs_finalizer_function where applicable.
 
-       Minor copyedit in Emacs manual
+2015-11-23  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * doc/emacs/search.texi (Lax Search): Make wording about character
-       folding by default less definitive.  (Bug#22043)
+       module_format_fun_env fixes
 
-2015-12-02  Eli Zaretskii  <eliz@gnu.org>
+       * src/doprnt.c (exprintf) [HAVE_MODULES]: Also define in this case.
+       * src/emacs-module.c (module_format_fun_env):
+       Convert path and sym to UTF-8.
+       Don’t use VLAs, as the C11 standard says they’re optional,
+       and anyway they can cause core dumps with large allocations.
+       Use exprintf rather than snprintf, as exprintf handles arbitrarily
+       long strings.  Simplify the code a bit.
 
-       More emacs-module.c fixes for wide ints
+2015-11-23  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * src/emacs-module.c (value_to_lisp) [WIDE_EMACS_INT]: Use
-       unsigned data types to manipulate pointers, to avoid sign
-       extension coming after us with a vengeance.
+       Don't use package-user-dir in elisp-library-roots if it's not bound
 
-       * modules/mod-test/test.el (mod-test-sum-test): Add tests for
-       Emacs with wide ints that verify integer values near the critical
-       value that requires us to switch to a cons cell.
+       * lisp/progmodes/elisp-mode.el (elisp-library-roots): Don't
+       use package-user-dir if it's not bound (bug#19759).
 
-2015-12-02  Stephen Leake  <stephen_leake@stephe-leake.org>
+2015-11-23  Anders Lindgren  <andlind@gmail.com>
 
-       Fix bug#22069 in cl-generic.el
+       New visible-bell for NextStep (OS X El Capitan compatible).
 
-       * lisp/emacs-lisp/cl-generic.el (cl-no-method): Remove %S; this string is
-       not run thru `format'.
+       Instead of inverting a rectangle in the middle of the frame, use
+       the standard NextStep image "caution", represented using an
+       warning sign with an exclamation mark.  (Bug#21662)
 
-2015-12-02  Dmitry Gutov  <dgutov@yandex.ru>
+       Implemented based on a suggestion drafted by Mustafa Kocaturk.
 
-       APPEND etags--xref-backend to xref-backend-functions
+       * src/nsterm.m (EmacsBell): New class for managing the caution
+       image.  Support multiple active bells, the image is removed once
+       all bells have timed out.
+       (ns_timeout): Removed, no longer used.
+       (ns_ring_bell): Reimplemented to use EmacsBell.
 
-       * lisp/progmodes/xref.el (xref-backend-functions):
-       Use APPEND when adding the default element
-       (http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00061.html).
+2015-11-23  Johan Bockgård  <bojohan@gnu.org>
 
-2015-12-01  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/emacs-lisp/nadvice.el (add-function): Fix debug spec.
 
-       More accurate documentation of lax whitespace matching
+       (remove-function): Ditto. (Bug#20376)
 
-       * lisp/isearch.el (isearch-forward-word, isearch-forward-symbol)
-       (word-search-backward, word-search-forward)
-       (word-search-backward-lax, word-search-forward-lax): Mention in
-       doc strings that toggling lax whitespace matching has no effect on
-       these commands.
+2015-11-23  Mark Oteiza  <mvoteiza@udel.edu>
 
-       * doc/emacs/search.texi (Word Search, Symbol Search): Clarify that
-       lax whitespace matching has no effect on these commands.
+       * lisp/leim/quail/tamil-dvorak.el: Add necessary escapes.
 
-2015-12-01  Eli Zaretskii  <eliz@gnu.org>
+2015-11-23  Eli Zaretskii  <eliz@gnu.org>
 
-       Fix emacs-module.c for wide ints
+       Improve how non-ASCII strings are accepted from modules
 
-       * src/emacs-module.c (lisp_to_value): Compare the produced value
-       with the original Lisp object, not with the one potentially
-       converted into a Lisp_Cons.  Fixes assertion violations when
-       working with integers larger than fit into a 32-bit value.
+       * src/emacs-module.c (module_make_function, module_make_string):
+       Build a unibyte Lisp string and then decode it by UTF-8, instead
+       of building a multibyte string without decoding.  This is more
+       tolerant to deviations from UTF-8.
 
-       * modules/mod-test/test.el (mod-test-sum-test): Add tests for
-       large integers, to test --with-wide-int.
+2015-11-23  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-12-01  Eli Zaretskii  <eliz@gnu.org>
+       Port recent module changes to pickier compilers
 
-       Document 'directory-files-recursively'
+       * src/emacs-module.c (module_make_function)
+       (module_make_string): Add casts to fix pointer signedness issues.
 
-       * lisp/files.el (directory-files-recursively): Doc fix.  Rename
-       the argument MATCH to REGEXP, to be more explicit about its form.
+2015-11-23  Philipp Stephani  <phst@google.com>
 
-       * doc/lispref/files.texi (Contents of Directories): Improve the
-       documentation of 'directory-files-recursively'.  Add
-       cross-references.
+       Fix how strings are accepted from modules
 
-       * etc/NEWS: Move the entry for 'directory-files-recursively' to
-       its place and mark it documented.
+       * emacs-module.c (module_make_function, module_make_string): Use
+       make_multibyte_string.
+       (module_copy_string_contents): Encode before reading the byte
+       size.  Return false if and only if an error occurred.
 
-2015-12-01  Eli Zaretskii  <eliz@gnu.org>
+2015-11-23  Eli Zaretskii  <eliz@gnu.org>
 
-       Document 'inhibit-read-only' property
+       Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
 
-       * doc/lispref/text.texi (Special Properties): Describe the new
-       'inhibit-read-only' text property.  Add cross-reference to where
-       read-only buffers are described.
-       * doc/lispref/buffers.texi (Read Only Buffers): Mention that
-       'inhibit-read-only' property exempts text from being read-only.
-       Add cross-reference to "Special Properties".
+2015-11-23  Shakthi Kannan  <shakthimaan@gmail.com>
 
-       * etc/NEWS: Move the entry about 'inhibit-read-only' property to
-       its place and mark it documented.
+       Add the tamil-dvorak input method
 
-2015-12-01  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * lisp/leim/quail/tamil-dvorak.el: New file.  (Bug#21768)
 
-       * lisp/emacs-lisp/package.el: Update header comments
+       * etc/NEWS: Mention the new input method.
 
-2015-12-01  Artur Malabarba  <bruce.connor.am@gmail.com>
+2015-11-23  Martin Rudalics  <rudalics@gmx.at>
 
-       * lisp/character-fold.el: Add back multi-char matching
+       Move setting FRAME_WINDOW_SIZES_CHANGED to resize_frame_windows.
 
-       (character-fold-to-regexp): Uncomment recently commented code
-       and make the algorithm "dummer" by not checking every possible
-       combination.  This will miss some possible matches, but it
-       greatly reduces regexp size.
+       * src/frame.c (adjust_frame_size): Don't set
+       FRAME_WINDOW_SIZES_CHANGED here ...
+       * src/window.c (resize_frame_windows): ... but here, as suggested
+       by Stefan Monnier.  Also remove some dead code along the way.
 
-       * test/automated/character-fold-tests.el
-       (character-fold--test-fold-to-regexp): Comment out test of
-       functionality no longer supported.
+2015-11-23  Alan Mackenzie  <acm@muc.de>
 
-2015-12-01  Xue Fuqiao  <xfq.free@gmail.com>
+       * /etc/NEWS (Incompatible Lisp Changes): Also `setf' needs an even # of args.
 
-       * doc/emacs/ack.texi (Acknowledgments): Update.
+2015-11-23  Alan Mackenzie  <acm@muc.de>
 
-2015-12-01  Michael Albinus  <michael.albinus@gmx.de>
+       Signal an error when `setf' gets an odd number of arguments.
 
-       Check `file-remote-p' over absolute files names in files.el
+       * lisp/emacs-lisp/gv.el (setf): Amend.
 
-       * lisp/files.el (directory-files-recursively)
-       (get-free-disk-space): Check `file-remote-p' over absolute files names.
+2015-11-23  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-2015-12-01  Andreas Schwab  <schwab@linux-m68k.org>
+       * lisp/emacs-lisp/smie.el (smie-backward-sexp): Handle BOB better.
 
-               * src/lread.c (syms_of_lread): Doc fix.
+2015-11-23  Alan Mackenzie  <acm@muc.de>
 
-2015-12-01  Dmitry Gutov  <dgutov@yandex.ru>
+       * etc/NEWS (Incompatible Lisp Changes): Document new restriction on `setq'.
 
-       Don't mistake certain JS method calls for keywords
+2015-11-23  Alan Mackenzie  <acm@muc.de>
 
-       * lisp/progmodes/js.el (js--ctrl-statement-indentation):
-       Braceless keyword can't come after a period (bug#22063).
+       Expunge occurrences of `setq' with an odd number of arguments.
 
-2015-12-01  David Reitter  <david.reitter@gmail.com>
+       * lisp/apropos.el (apropos-documentation):
+       * lisp/obsolete/complete.el (PC-include-file-all-completions):
+       * lisp/progmodes/compile.el (compilation-goto-locus):
+       * lisp/vc/vc-cvs.el (vc-cvs-parse-root): (twice)
+       Insert missing nil at end of `setq' forms.
 
-       Read frame_title_format from buffer-local variable for NS port
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form-autoload): Remove an
+       erroneous trailing variable name from a setq, thus allowing a compilation
+       properly to track functions not defined at runtime.
 
-       * src/nsfns.m (x_implicitly_set_name): Read frame-title-format and
-       icon-title-format variables from buffer in appropriate window.
-       (Bug#22048)
+2015-11-23  John Wiegley  <johnw@newartisans.com>
 
-2015-12-01  Juri Linkov  <juri@linkov.net>
+       Add a note about a questionable use of bool in xdisp.c
 
-       * lisp/replace.el (occur-engine): Count matches in empty lines.
+2015-11-23  Alan Mackenzie  <acm@muc.de>
 
-       (Bug#22062)
+       Issue a warning from the byte compiler on a malformed `setq' form.
 
-2015-11-30  Aurélien Aptel  <aurelien.aptel@gmail.com>
+       Partly fixes bug#20241.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): Issue a warning when a
+       `setq' form with an odd number of arguments is compiled.
 
-       * src/emacs-module.h: Fix finalizer typedef for C++11
+2015-11-23  Alan Mackenzie  <acm@muc.de>
 
-       C++11 standard doesn't allow exception-specification in typedef.
-       The workaround is to declare a dummy function prototype and use
-       decltype on it.
+       Don't let cconv_convert insert a nil argument into a `setq' form.
 
-2015-11-30  Eli Zaretskii  <eliz@gnu.org>
+       Fixes bug#21983.
+       * lisp/emacs-lisp/cconv.el (cconv-convert): Don't silently insert a nil last
+       argument into a `setq' when there're an odd number of args.  This enables the
+       byte compiler to issue a message in this case.
 
-       Fix last change
+2015-11-23  Alan Mackenzie  <acm@muc.de>
 
-       * src/emacs-module.c (lisp_to_value, value_to_lisp)
-       [WIDE_EMACS_INT]: Avoid compiler warnings.
+       Signal an error when `setq' has an odd number of arguments.  Fixes bug#20241.
 
-2015-11-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * src/eval.c (Fsetq): Signal an error on an odd number of arguments.
+       (syms_of_eval): Add a DEFSYM for Qsetq.
 
-       Rely on conservative stack scanning to find "emacs_value"s
+2015-11-23  Martin Rudalics  <rudalics@gmx.at>
 
-       * src/emacs-module.c (struct emacs_value_tag)
-       (struct emacs_value_frame, struct emacs_value_storage): Remove.
-       (value_frame_size): Remove constant.
-       (struct emacs_env_private): Use Lisp_Object for non_local_exit info.
-       (lisp_to_value): Remove first arg.
-       (module_nil): New constant.
-       Use it instead of NULL when returning an emacs_value.
-       (module_make_function): Adjust to new calling convention of
-       Qinternal_module_call.
-       (DEFUN): Receive args in an array rather than a list.
-       Use SAFE_ALLOCA rather than xnmalloc.  Skip the lisp_to_value loop when
-       we don't have WIDE_EMACS_INT.  Adjust to new type of non_local_exit info.
-       (module_non_local_exit_signal_1, module_non_local_exit_throw_1):
-       Adjust to new type of non_local_exit info.
-       (ltv_mark) [WIDE_EMACS_INT]: New constant.
-       (value_to_lisp, lisp_to_value): Rewrite.
-       (initialize_frame, initialize_storage, finalize_storage): Remove functions.
-       (allocate_emacs_value): Remove function.
-       (mark_modules): Gut it.
-       (initialize_environment): Don't initialize storage any more.
-       Keep the actual env object on Vmodule_environments.
-       (finalize_environment): Don't finalize storage any more.
-       (syms_of_module): Initialize ltv_mark and module_nil.
+       * doc/lispref/windows.texi (Window Sizes): Fix indices and references.
 
-       * src/emacs-module.h (emacs_value): Make it more clear that this type
-       is really opaque, including the fact that NULL may not be valid.
+       * src/frame.c (adjust_frame_size): Set FRAME_WINDOW_SIZES_CHANGED (Bug#21975).
 
-       * modules/mod-test/mod-test.c (Fmod_test_signal, Fmod_test_throw):
-       Don't assume that NULL is a valid emacs_value.
+2015-11-22  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
 
-2015-11-30  Eli Zaretskii  <eliz@gnu.org>
+       Add EUDC BBDB 3 entry in NEWS
 
-       Yet another doc improvement for search commands
+       * NEWS: Mention EUDC BBDB backend support for BBDB 3.
 
-       * doc/emacs/search.texi (Word Search, Symbol Search)
-       (Regexp Search): Document commands that don't support lax
-       whitespace matching or character folding.
-       (Nonincremental Search): Mention the search commands that can be
-       invoked from the menu bar.
+2015-11-22  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
 
-       * lisp/isearch.el (isearch-define-mode-toggle-word)
-       (isearch-define-mode-toggle-symbol)
-       (isearch-define-mode-toggle-character-fold): Note in the doc
-       string that turning these on exits the regexp mode.
-       (isearch-forward-regexp, isearch-forward-word)
-       (isearch-forward-symbol, isearch-backward-regexp)
-       (word-search-backward, word-search-forward)
-       (word-search-backward-lax, word-search-forward-lax): State in the
-       doc string which commands don't support character folding and/or
-       lax-whitespace matching.
+       Improve EUDC to BBDB 3 export
 
-2015-11-30  Martin Rudalics  <rudalics@gmx.at>
+       * eudc-vars.el (eudc-ldap-bbdb-conversion-alist): Change phone
+       entry to single item.  Add company conversion.
+       * eudc-export.el (eudc-bbdbify-company): New function.
+       (bbdb-parse-phone): Declare function.
+       (eudc-bbdbify-phone): Add BBDB 3 support.
+       (Bug#21971)
 
-       Run `window-size-change-functions' also when reading from minibuffer
+2015-11-22  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
 
-       * src/xdisp.c (redisplay_internal): Run `window-size-change-functions'
-       also when reading from minibuffer.
+       Add BBDB 3 support for EUDC export
 
-2015-11-30  Ulf Jasper  <ulf.jasper@web.de>
+       * eudc.el: Add bbdb-version defvar.
+       (eudc--using-bbdb-3-or-newer-p): New function.
+       * eudc-export.el (eudc-create-bbdb-record): Add support for
+       bbdb-create-internal argument list changes introduced in BBDB 3.
+       * eudcb-bbdb.el: Remove bbdb-version defvar.
+       (eudc-bbdb-field): Call eudc--using-bbdb-3-or-newer-p.
+       (Bug#21971)
 
-       Fix scrambling of html-rendered item buffers
+2015-11-22  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/net/newst-treeview.el (newsticker--treeview-render-text): Fix
-         scrambling of contents by wrapping call to html-renderer in
-         save-selected-window.
+       Allow loading modules by 'load-file'
 
-2015-11-30  Paul Eggert  <eggert@cs.ucla.edu>
+       * src/lread.c (Fload): Call 'unbind_to' with 'Fmodule_load' as the
+       2nd arg, to avoid the "binding stack not balanced" error.
+       (syms_of_lread) <module-file-suffix>: New Lisp variable.
 
-       Fix font typo in previous doc fix.
+       * lisp/files.el (module-file-suffix): Declare.
+       (load-file): Remove 'module-file-suffix' from
+       'completion-ignored-extensions', to allow completion on modules.
 
-2015-11-30  Paul Eggert  <eggert@cs.ucla.edu>
+       * etc/NEWS: Mention 'module-file-suffix'.
 
-       A bit more security doc, esp. file local vars
+2015-11-22  Eli Zaretskii  <eliz@gnu.org>
 
-       * doc/emacs/emacs.texi (Top):
-       * doc/emacs/misc.texi (Miscellaneous Commands):
-       Refer to new Host Security section.
-       (Host Security): New section.
-       * doc/lispref/os.texi (Security Considerations):
-       Mention file local variables.
+       Fix unoptimized builds
 
-2015-11-30  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * src/lisp.h (XTYPE): Move before XSYMBOL, to fix unoptimized
+       builds.
 
-       * lisp/character-fold.el: Comment out branching code
+2015-11-22  Dmitry Gutov  <dgutov@yandex.ru>
 
-       (character-fold-to-regexp): Comment out code that uses multi-char
-       table.  The branching caused by this induces absurdly long regexps,
-       up to 10k chars for as little as 25 input characters.
+       Work around the asynchronous-empty-diff problem
 
-2015-11-30  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/vc/vc-rcs.el (vc-rcs-diff):
+       * lisp/vc/vc-mtn.el (vc-mtn-diff):
+       * lisp/vc/vc-hg.el (vc-hg-diff):
+       * lisp/vc/vc-git.el (vc-git-diff): Ignore the ASYNC argument,
+       do a synchronous process call (bug#21969).
 
-       Spelling and grammar fixes
+2015-11-21  Karl Fogel  <kfogel@red-bean.com>
 
-2015-11-30  Dmitry Gutov  <dgutov@yandex.ru>
+       Finish excising electric indent from `open-line'
 
-       Make lisp-completion-at-point a wrapper instead of an alias
+       * lisp/simple.el (open-line): Remove INTERACTIVE argument.
 
-       * lisp/progmodes/elisp-mode.el (lisp-completion-at-point):
-       Turn into an obsolete wrapper around elisp-completion-at-point
-       (bug#20455).
+       * test/automated/simple-test.el (open-line-indent, open-line-hook):
+         Adjust accordingly.
 
-2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+       This change finishes what my commit of Thu Nov 19 17:32:37 2015 -0600
+       (git commit c59353896) started.  It turns out that having INTERACTIVE
+       cause `post-self-insert-hook' to run (via `newline') meant `open-line'
+       still had the electric indent behavior, as `post-self-insert-hook'
+       normally contains `electric-indent-post-self-insert-function' ever
+       since `electric-indent-mode' has been on by default.  Tracing the code
+       change in `open-line' is mildly twisty, because Artur Malabarba's
+       earliest two commits of 24 Oct 2015 first removed the `interactive'
+       form entirely (git commit 6939896e2) and then restored it with the new
+       extra "p" already added (git commit bd4f04f86), such that there is no
+       single-commit diff in which one sees the second "p" appear.  Thus this
+       change is effectively a reversion of parts of each of those commits.
 
-       * lisp/isearch.el (isearch-search-fun-default): Nicer error
+       This could close bug#21884, at least until further discussion.
 
-       message when the search fails.
+2015-11-21  Dmitry Gutov  <dgutov@yandex.ru>
 
-2015-11-29  Dmitry Gutov  <dgutov@yandex.ru>
+       Adhere closer to the "implicit tag name" definition
 
-       Update menu-bar-goto-uses-etags-p for the current xref API
+       * lisp/progmodes/etags.el (etags-tags-completion-table):
+       Adhere closer to the "implicit tag name" definition.  Simplify
+       the regexp.  Search for the explicit tag name first, and when
+       not found, search locally for the implicit one.  (Bug#21934)
 
-       * lisp/menu-bar.el (menu-bar-goto-uses-etags-p): Consult
-       xref-backend-functions, instead of now-nonexistent
-       xref-find-function.
+2015-11-21  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Unrevert most of regexp reentrancy abort patch
 
-       * lisp/isearch.el (isearch-define-mode-toggle): Advertise binding
+       The problem was in:
+         * src/syntax.c (update_syntax_table_forward): Propertize even when truncated
+       which is hence not unreverted.
+       The rest is:
+       * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
+       (UPDATE_SYNTAX_TABLE_FAST): Re-introduce.
+       All callers in regex.c changed back to the _FAST versions.
 
-2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * test/automated/message-mode-tests.el: Tweak the test to rely on auto
+       propertization in backward-sexp.
 
-       * lisp/menu-bar.el: Use folding in searches
+2015-11-21  Paul Eggert  <eggert@cs.ucla.edu>
 
-       (nonincremental-search-forward): Use `isearch-search-fun-default'
-       to determine the search function.
-       (nonincremental-search-backward)
-       (nonincremental-repeat-search-forward)
-       (nonincremental-repeat-search-backward): Use it.
+       Revert regexp reentrancy abort patch
 
-2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Although the patch does fix Bug#21688 and prevents a core dump,
+       it also makes the message-mode-propertize test fail; see:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01667.html
+       Perhaps someone else can come up with a better fix some day.
+       * src/syntax.c (update_syntax_table_forward):
+       Propertize even when truncated.
+       * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
+       (UPDATE_SYNTAX_TABLE_FAST): Remove.
+       All callers changed back to the non-_FAST versions.
 
-       * lisp/menu-bar.el (menu-bar-goto-uses-etags-p): Fix a warning
+2015-11-21  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-11-29  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Add a few safety checks when ENABLE_CHECKING
 
-       * lisp/character-fold.el (character-fold-to-regexp): Be careful
+       This was motivated by the recent addition of module code,
+       which added some ENABLE_CHECKING-enabled checks that are
+       useful elsewhere too.
+       * src/alloc.c (compact_font_cache_entry):
+       * src/fns.c (sweep_weak_table):
+       * src/lread.c (oblookup):
+       Use gc_asize rather than doing it by hand.
+       * src/emacs-module.c (module_make_global_ref)
+       (module_free_global_ref, module_vec_size):
+       Omit assertions that lisp.h now checks.
+       * src/lisp.h (XFASTINT, ASIZE): In functional implementations,
+       check that the result is nonnegative.  Use eassume, as this
+       info can help a bit when optimizing production code.
+       (XSYMBOL) [!USE_LSB_TAG]: Assert that argument is a symbol,
+       to be consistent with the USE_LSB_TAG case.
+       (gc_asize): New function, when ASIZE is needed in the gc.
+       (gc_aset): Use it.
+       (HASH_TABLE_P): Move definition up, so that it can be used ...
+       (XHASH_TABLE): ... here, to assert that the arg is a hash table.
 
-       not to return huge regexps.
+2015-11-21  Eli Zaretskii  <eliz@gnu.org>
 
-2015-11-29  Eli Zaretskii  <eliz@gnu.org>
+       Simplify recording of main thread's ID on MS-Windows
 
-       Improve documentation of string-collate-* functions
+       * src/w32term.c (w32_initialize):
+       * src/w32console.c (initialize_w32_display):
+       * src/w32fns.c (globals_of_w32fns): Don't record the main thread
+       ID independently for each type of session (GUI, TTY, batch).
+       * src/w32term.c (w32_init_main_thread): New function, records the
+       main thread's thread ID.
+       * src/w32term.h: Add prototype for w32_init_main_thread.
+       * src/emacs.c (main) [WINDOWSNT]: Call w32_init_main_thread.
 
-       * doc/lispref/strings.texi (Text Comparison): Improve wording and
-       indexing of 'string-collate-equalp' and 'string-collate-lessp'.
+       * src/emacs-module.c [WINDOWSNT]: Rename main_thread_id to
+       main_thread, for consistency with other threading libraries.  All
+       users changed.  Include w32term.h.
+       (check_main_thread) [WINDOWSNT]: Simplify the test: no need to
+       make sure the main thread is alive, as we hold a handle on it
+       opened by w32_init_main_thread.
+       (module_init) [WINDOWSNT]: Reuse the thread ID recorded by
+       w32_init_main_thread, instead of calling the requisite APIs once
+       more.
 
-       * etc/NEWS: Move the entry of 'string-collate-equalp' and
-       'string-collate-lessp' to "Lisp Changes" section and mark it as
-       documented.
+2015-11-21  Eli Zaretskii  <eliz@gnu.org>
 
-2015-11-29  Eli Zaretskii  <eliz@gnu.org>
+       Call 'window-size-change-functions' for mini-windows
 
-       Document truncate-string-ellipsis
+       * src/window.c (grow_mini_window, shrink_mini_window): Set the
+       frame's 'window_sizes_changed' flag.
+       * src/xdisp.c (redisplay_internal): Call the hooks on
+       'window-size-change-functions' if the call to 'echo_area_display'
+       sets the frame's 'window_sizes_changed' flag.
+       (syms_of_xdisp) <window-size-change-functions>:
+       Update doc string to indicate the mini-window resizes trigger a
+       call to the hooks, and don't promise that will happen "before
+       redisplay".  (Bug#19576, Bug#21333)
 
-       * doc/lispref/display.texi (Size of Displayed Text): Document
-       'truncate-string-ellipsis'.
+       * doc/lispref/windows.texi (Window Hooks): Update the description
+       of 'window-size-change-functions'.
 
-       * lisp/international/mule-util.el (truncate-string-ellipsis): Doc fix.
-       (truncate-string-to-width): Mention in the doc string that the
-       default for ELLIPSIS comes from 'truncate-string-ellipsis'.
+2015-11-21  Eli Zaretskii  <eliz@gnu.org>
 
-       * etc/NEWS: Move the 'truncate-string-ellipsis' entry to the "Lisp
-       Changes" section.
+       Improve documentation of dynamic modules
 
-2015-11-29  Eli Zaretskii  <eliz@gnu.org>
+       * src/fns.c (Frequire): Doc fix to include the dynamic module
+       support.
+       * src/lread.c (Fload, Vload_suffixes): Doc fixes to include the
+       dynamic module support.
+       (Fload): Treat the module suffix the same as '*.el' and '*.elc'
+       wrt the MUST-SUFFIX argument.
 
-       Fix confusion wrt character folding in the Emacs manual
+       * etc/NEWS: Expand documentation of dynamically loaded modules.
 
-       * doc/emacs/search.texi (Nonincremental Search, Regexp Search):
-       Document that invoking search-forward/backward and
-       re-search-forward/backward supports only case folding, but not the
-       rest of the lax-search features.  Reported by Mike Kupfer
-       <m.kupfer@acm.org>.
+2015-11-21  Philipp Stephani  <phst@google.com>  (tiny change)
 
-2015-11-29  Ken Brown  <kbrown@cornell.edu>
+       Initial documentation for dynamic modules
 
-       Update mod-test-sum-test
+       * etc/NEWS: Mention the new support for dynamically loaded modules.
 
-       * modules/mod-test/test.el (mod-test-sum-test): Update to
-       accommodate the lack of dladdr on Cygwin.
+2015-11-20  Dmitry Gutov  <dgutov@yandex.ru>
 
-2015-11-29  Alan Mackenzie  <acm@muc.de>
+       Add xref--etags-backend to xref-backing-functions using add-hook
 
-       Byte compiler: Catch missing argument to `funcall'.  Fixes bug#22051.
+       * lisp/progmodes/xref.el (xref-backend-functions): Move the
+       default value into a separate `add-hook' call (bug#21964).
 
-       * lisp/emacs-lisp/bytecomp.el (byte-compile-funcall): When there's no argument
-       to `funcall', (i) Output an error message; (ii) Generate code to signal a
-       `wrong-number-of-arguments' error.
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
+       Don't declare the xref-backend-functions variable.
+       It doesn't make any difference.
 
-2015-11-29  Martin Rudalics  <rudalics@gmx.at>
+2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/window.el (split-window): Don't sanitize sizes when SIZE is non-nil.
+       Fix double-decrement bug when freeing global refs
 
-2015-11-28  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * src/emacs-module.c (module_free_global_ref): Add a FIXME
+       comment about error reporting.  Fix a recently-introduced typo
+       that double-decremented the refcount.
 
-       * lisp/character-fold.el (character-fold-to-regexp)
+2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Warn about using long strings.
+       Declare emacs_module_init in the module API
 
-       * test/automated/character-fold-tests.el
-       (character-fold--test-lax-whitespace)
-       (character-fold--test-consistency): Reduce string size for tests.
+       * src/emacs-module.h (emacs_module_init): New decl.
+       Without it, GCC might complain about a module that defines
+       emacs_module_init without using it.  This also checks the
+       API better.
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Document renaming of x-select-enable-* variables
+       Fix module test to use ptrdiff_t nargs too
 
-       * doc/emacs/killing.texi (Clipboard): Rename
-       x-select-enable-clipboard to select-enable-clipboard and
-       x-select-enable-primary to select-enable-primary.  Update index
-       entries.
+       * modules/mod-test/mod-test.c (Fmod_test_return_t)
+       (Fmod_test_sum, Fmod_test_signal, Fmod_test_throw)
+       (Fmod_test_non_local_exit_funcall, Fmod_test_globref_make)
+       (Fmod_test_string_a_to_b, Fmod_test_userptr_make)
+       (Fmod_test_userptr_get, Fmod_test_vector_fill)
+       (Fmod_test_vector_eq): Arg counts are ptrdiff_t, not int.
+       (finalizer): Remove; no longer used.
 
-       * etc/NEWS: Mark entry as documented.
+2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+       Fix reindent-introduced typo in module code
 
-       Document the shorthand hints displayed by M-x
+       * src/emacs-module.c (MODULE_SETJMP_1): Fix typo that I
+       introduced while reindenting the code earlier, and add a
+       comment explaining the unusual use of do-while here.
 
-       * doc/emacs/m-x.texi (M-x): Document the numeric meaning of
-       suggest-key-bindings.  Document the shorthand hints for commands
-       that have no key bindings.  Document that M-x completion ignores
-       obsolete commands.
+2015-11-20  Anders Lindgren  <andlind@gmail.com>
 
-       * etc/NEWS: Move the M-x entry to "Editing Changes" and mark it as
-       documented.
+       Fixed bug#19576: `write-file' saves wrong buffer.
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+       If a function on the hook `window-size-change-functions' doesn't
+       restore the current buffer, functions that save and restore the
+       current window configuration (like `y-or-no-p') could silently
+       change the current buffer.  When `write-file' asked the user
+       confirmation to overwrite a file, `y-or-no-p' changed the current
+       buffer, and the wrong buffer was saved to the file.
 
-       Update docs of character folding
+       * lisp/follow.el (follow-windows-start-end): Call `select-frame'
+       using the `norecord' parameter.
+       (follow-window-size-change): Restore current buffer. Call
+       `select-frame' using the `norecord' parameter. Cleanup.
 
-       * doc/emacs/search.texi (Lax Search): Update the description of
-       character folding for the latest changes.
+2015-11-20  John Wiegley  <johnw@newartisans.com>
 
-2015-11-28  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Correct a documentation error in frames.texi
 
-       * lisp/character-fold.el: Also play nice with case-folding
+2015-11-20  Stephen Leake  <stephen_leake@stephe-leake.org>
 
-       (character-fold-to-regexp): Take `case-fold-search' into account.
+       * lisp/cedet/mode-local.el: Delete obsolete comment
 
-2015-11-28  Artur Malabarba  <bruce.connor.am@gmail.com>
+2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/character-fold.el: Add support for multi-char matches
+       Module function arg counts are ptrdiff_t, not int
 
-       (character-fold-table): Now has an extra-slot. This is a second
-       char-table that holds multi-character matches.  See docstring for
-       details.
-       (character-fold-to-regexp): Can build branching regexps when a
-       character's entry the extra slot of `character-fold-table' matches the
-       characters that succeed it.
+       * src/emacs-module.c (struct module_fun_env)
+       (module_make_function, module_funcall, Fmodule_call):
+       * src/emacs-module.h (struct emacs_runtime, struct emacs_env_25):
+       Use ptrdiff_t, not int, for arg counts.
+       * src/emacs-module.c (module_make_function): Don’t bother
+       checking arity against MOST_POSITIVE_FIXNUM, as that’s
+       unnecessary here.  Make the checking clearer by negating it.
+       (module_make_function, Fmodule_call): No need to use xzalloc
+       since the storage doesn’t need to be cleared.
+       (module_funcall): Don’t use VLA, since C11 doesn’t guarantee support
+       for it, and many implementations are buggy with large VLAs anyway.
+       Use SAFE_ALLOCA_LISP instead.
+       (module_vec_set): Don’t crash if i < 0.
+       (module_vec_get): Don’t crash if i < MOST_NEGATIVE_FIXNUM.
+       (module_vec_set, module_vec_get): Do fixnum checks only when
+       i is out of array bounds, for efficiency in the usual case.
+       (Fmodule_load): Simplify fixnum range check.
+       (Fmodule_call): Simplify arity check.  Use xnmalloc to detect
+       integer overflow in array allocation size.
 
-2015-11-28  Artur Malabarba  <bruce.connor.am@gmail.com>
+2015-11-20  Eli Zaretskii  <eliz@gnu.org>
 
-       * lisp/character-fold.el: Code simplifications
+       Minor improvements in module test
 
-       (character-fold-table): Reduce the scope of a variable.
-       (character-fold-to-regexp): Change logic to work directly on the
-       input string.  It's a little easier to understand, probably
-       faster, and sets us up for implementing multi-char matches.
+       * modules/mod-test/mod-test.c: Include stdlib.h, to avoid warnings
+       about missing prototype of malloc.
+       * modules/mod-test/Makefile (CFLAGS): Add -std=gnu99, to avoid
+       compiler warnings.
 
-       * test/automated/character-fold-tests.el
-       (character-fold--test-fold-to-regexp): New test.
+2015-11-20  Eli Zaretskii  <eliz@gnu.org>
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+       Improve MS-Windows implementation in dynlib.c
 
-       Document changes in "C-h l"
+       * src/dynlib.c [WINDOWSNT]: Include errno.h, lisp.h, and w32.h.
+       No need to include windows.h, as w32.h already does that.
+       <dynlib_last_err>: New static variable.
+       (dynlib_reset_last_error): New function.
+       (dynlib_open): Convert forward slashes to backslashes.  Convert
+       file names from UTF-8 to either UTF-16 or the current ANSI
+       codepage, and call either LoadLibraryW or LoadLibraryA.  If the
+       argument is NULL, return a handle to the main module, like
+       'dlopen' does.  Record the error, if any, for use by dynlib_error.
+       (dynlib_sym): Check the handle for validity. Record the error, if
+       any, for use by dynlib_error.
+       (dynlib_error): Call w32_strerror to produce the error string, and
+       zero out the last error code, like dlerror does.
+       (dynlib_close): Check the handle for validity.  Record the error,
+       if any, for use by dynlib_error.  Don't call FreeLibrary with a
+       handle for the main module.
+       * src/w32.c (globals_of_w32): Call dynlib_reset_last_error.
 
-       * doc/emacs/help.texi (Misc Help): Document the changes in "C-h l".
+2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * etc/NEWS: mark "C-h l" changes as documented.
+       Include-file tweaks for modules
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+       * src/dynlib.c, src/emacs-module.c: Include <config.h> first.
+       * src/dynlib.h: Do not include config.h.
+       It’s every .c file’s responsibility to include config.h first.
+       * src/emacs-module.c: Include emacs-module.h immediately after
+       config.h, to test that emacs-module.h doesn’t depend on
+       include files other than config.h.
 
-       Finalize documentation of 'custom-prompt-customize-unsaved-options'
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * doc/emacs/custom.texi (Saving Customizations): Index the new
-       function 'custom-prompt-customize-unsaved-options'.
+       Simplify push_handler and profile its malloc
 
-       * etc/NEWS: Mention when 'custom-prompt-customize-unsaved-options'
-       is useful.
+       * src/lisp.h (PUSH_HANDLER): Remove.
+       All callers changed to use push_handler directly.
+       * src/eval.c (internal_condition_case)
+       (internal_condition_case_1, internal_condition_case_2)
+       (internal_condition_case_n):
+       Use same pattern as for other invokers of push_handler.
+       (push_handler, push_handler_nosignal): Use call-by-value
+       instead of call-by-reference.  All uses changed.
+       (push_handler): Simplify by rewriting in terms of
+       push_handler_nosignal.
+       (push_handler_nosignal): Profile any newly allocated memory.
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Document 'comment-line'
+       * src/emacs-module.h: Include stddef.h, not stdlib.h.
 
-       * doc/emacs/programs.texi (Comment Commands): Document
-       'comment-line'.
+2015-11-19  Juanma Barranquero  <lekktu@gmail.com>
 
-       * etc/NEWS: Move the entry for 'comment-line' into "Editing Changes".
+       Discover repository version in linked worktrees (bug#21930)
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/version.el (emacs-repository--version-git-1): Do not assume
+       HEAD is at .git/HEAD, it can also be at .git/worktrees/<branch>/HEAD.
+       (emacs-repository-get-version): Grok linked worktrees when EXTERNAL
+       is nil too.
 
-       Document new checkdoc features
+2015-11-19  Juri Linkov  <juri@linkov.net>
 
-       * doc/lispref/tips.texi (Tips, Library Headers): Document the
-       keyword-checking features of checkdoc and the commands
-       'checkdoc-file' and 'checkdoc-current-buffer'.
+       * lisp/replace.el (occur-regexp-descr): New function.
+       (occur-1, occur-engine): Use it.
 
-       * etc/NEWS: Move the checkdoc-related entries to their own
-       section.
+       * lisp/isearch.el (isearch-occur): Propertize regexp with
+       isearch-string and isearch-regexp-function-descr for
+       occur-regexp-descr to display the correct description
+       message in the header (bug#21176, bug#21180).
 
-2015-11-28  Philipp Stephani  <p.stephani2@gmail.com>
+2015-11-19  Karl Fogel  <kfogel@red-bean.com>
 
-       Simplify the prologue of emacs-module.c functions
+       Revert `open-line' electric-indent sensitivity
 
-       * src/emacs-module.c (MODULE_FUNCTION_BEGIN): New macro.
-       (module_make_global_ref)
-       (module_free_global_ref, module_make_function, module_funcall)
-       (module_intern, module_type_of, module_extract_integer)
-       (module_make_integer, module_extract_float, module_make_float)
-       (module_copy_string_contents, module_make_string)
-       (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
-       (module_get_user_finalizer, module_set_user_finalizer)
-       (module_vec_set, module_vec_get, module_vec_size): Use new helper
-       macro MODULE_FUNCTION_BEGIN.
+       * lisp/simple.el (open-line): Remove electric indent code.
+         (electric-indent-just-newline): Don't declare.
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+       * test/automated/simple-test.el (open-line-indent): Adjust test.
 
-       Don't reject module calls with no arguments
+       This partly reverts Artur Malabarba's change that added electric
+       indent sensitivity to `open-line' (Oct 24 22:26:27 2015 +0100, git
+       commit bd4f04f86), and adjusts a new test he added right afterwards
+       (Sat Oct 24 23:43:06 2015 +0100, git commit 207f235e3) accordingly.
+       However, the new INTERACTIVE argument to `open-line', which he also
+       added in the first commit, is not reverted here.
 
-       * src/emacs-module.c (Finternal_module_call): Allow ARGLIST be nil.
+       See the thread "Questioning the new behavior of `open-line'." on the
+       Emacs Devel mailing list, and in particular this message:
 
-2015-11-28  Philipp Stephani  <p.stephani2@gmail.com>
+         From: Artur Malabarba
+         Subject: Re: Questioning the new behavior of `open-line'.
+         To: Karl Fogel
+         Cc: David Kastrup, Pierpaolo Bernardi, emacs-devel
+         Date: Wed, 18 Nov 2015 21:03:58 +0000
+         Message-ID: \
+           <CAAdUY-KN06pvCMy5bt3+Buk3yeKjf6n9iB2FaSTTOPpCqPwyhA@mail.gmail.com>
 
-       Make module-call be visible from Lisp
+         https://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01707.html
 
-       * src/emacs-module.c (module_make_function): Use internal--module-call.
-       (Finternal_module_call): Renamed from Fmodule_call.  Add safety
-       checks.
-       (syms_of_module): DEFSYM save-value-p and save-pointer-p.  Do
-       defsubr internal--module-call.
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+       Omit unnecessary clear in Fmodule_load
 
-       Add etags tests for the recent Lua-related bugfix
+       * src/emacs-module.c (Fmodule_load):
+       Simplify and avoid unnecessary initialization of priv member to 0.
 
-       * test/etags/lua-src/test.lua: New file, tests the issues raised
-       by bug#21934.
-       * test/etags/Makefile (LUASRC): Add test.lua.
-       * test/etags/ETAGS.good_1:
-       * test/etags/ETAGS.good_2:
-       * test/etags/ETAGS.good_3:
-       * test/etags/ETAGS.good_4:
-       * test/etags/ETAGS.good_5:
-       * test/etags/ETAGS.good_6:
-       * test/etags/CTAGS.good: Adapt to the new Lua test.  Also, an old
-       regression fix, resolved around 25 May 2015, required changes to
-       the "good" ETAGS files.
+       * src/emacs-module.c: (module_vec_set, module_vec_get, module_vec_size)
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Fix Lua tags when a function name includes '.' or ':'
+       Prefer signed integer types in module code
 
-       * lib-src/etags.c (Lua_functions): Add a tag for the last element
-       of a function name after a dot or a colon.  (Bug#21934)
+       Generally speaking, at the C level the Emacs source code prefers
+       signed types like ‘ptrdiff_t’ to unsigned types like ‘size_t’,
+       partly to avoid the usual signedness confusion when comparing values.
+       Change the module API to follow this convention.
+       Use ‘int’ for small values that can’t exceed INT_MAX.
+       * modules/mod-test/mod-test.c (Fmod_test_globref_make)
+       (Fmod_test_string_a_to_b, Fmod_test_vector_fill)
+       (Fmod_test_vector_eq):
+       * src/emacs-module.c (struct emacs_value_frame)
+       (module_make_global_ref, module_free_global_ref)
+       (module_copy_string_contents, module_make_string)
+       (module_vec_set, module_vec_get, module_vec_size):
+       * src/emacs-module.h (struct emacs_runtime, struct emacs_env_25):
+       * src/lread.c (suffix_p):
+       Prefer signed to unsigned integer types.
 
-2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-       Improve documentation of search and replace commands
+       Omit ‘const’ on locals
 
-       * doc/emacs/search.texi (Replacement and Lax Matches): Document
-       which commands are affected by 'replace-character-fold'.
-       (Lax Search): Add a cross reference to "Replacement and Lax
-       Matches".  Improve wording.  Fix lost extra whitespace.
-       (Search Customizations): Improve wording.  (Bug#22036)
-       See also comments in
-       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02376.html.
+       Remove ‘const’ qualifier from locals that were newly added.
+       We don’t normally bother declaring locals with ‘const’ even
+       though they are not modified, for the same reason we don’t
+       bother declaring them with ‘register’ even though their
+       addresses are not taken; the advantage in compile-time
+       checking isn’t worth the loss of readability.
+       * modules/mod-test/mod-test.c (Fmod_test_non_local_exit_funcall)
+       (Fmod_test_vector_fill, Fmod_test_vector_eq):
+       * src/emacs-module.c (MODULE_SETJMP_1)
+       (module_make_global_ref, module_free_global_ref)
+       (module_non_local_exit_get, module_make_function)
+       (module_extract_integer, module_extract_float)
+       (module_get_user_ptr, module_set_user_ptr)
+       (module_get_user_finalizer, module_set_user_finalizer)
+       (module_vec_get, Fmodule_call)
+       (module_non_local_exit_signal_1)
+       (module_non_local_exit_throw_1, lisp_to_value)
+       (finalize_storage, allocate_emacs_value, mark_modules)
+       (module_handle_signal, module_handle_throw)
+       (module_format_fun_env):
+       * src/eval.c (push_handler, push_handler_nosignal)
+       (init_handler):
+       * src/lread.c (suffix_p):
+       Omit unnecessary ‘const’.
 
-       * lisp/replace.el (query-replace, query-replace-regexp)
-       (query-replace-regexp-eval, replace-string, replace-regexp):
-       Mention 'replace-character-fold' in the doc strings.
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-11-28  Paul Eggert  <eggert@cs.ucla.edu>
+       Prefer intmax_t to int64_t in module code
 
-       Fix minor problems found by static checking
+       * modules/mod-test/mod-test.c (sum, Fmod_test_sum):
+       * src/emacs-module.c (module_extract_integer)
+       (module_make_integer):
+       * src/emacs-module.h (struct emacs_env_25):
+       Prefer intmax_t to int64_t.  This doesn’t change the generated
+       code on any of the machines Emacs currently ports to, but it’s
+       at least in theory more future-proof as C99 doesn’t guarantee
+       that int64_t exists.
 
-       * src/undo.c (prepare_record): Add proper prototype for C.
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-11-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+       Rename module.c to emacs-module.c, etc.
 
-       * src/emacs-module.c (struct env_storage): Delete
+       * src/emacs-module.c: Rename from src/module.c.
+       * src/emacs-module.h: Rename from src/module.h.
+       All uses changed.
 
-       (struct emacs_runtime_private): Keep an emacs_env instead.
-       (Fmodule_load, Fmodule_call): Declare emacs_env_private separately.
-       (initialize_environment): Split the arg in two.  Adjust all callers.
-       Only store the private part in Vmodule_environments.
-       (finalize_environment): Change the arg to only be the private env.
-       Adjust all callers.
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+       Fix minor module problems found by static checking
 
-       Improve documentation of 'replace-character-fold'
+       * src/dynlib.c (dynlib_close): #ifdef out for now, as it’s not used.
+       * src/eval.c, src/lisp.h (lisp_eval_depth): Now static.
+       * src/module.c (Fmodule_load): Fix pointer signedness bug.
+       (Fmodule_call): Tell GCC that the default case is unreachable.
 
-       * lisp/replace.el (replace-character-fold): Clarify which commands
-       are affected by this variable.
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-11-27  Mark Oteiza  <mvoteiza@udel.edu>
+       Style fixes for indenting etc. in module code
 
-       Backport: Add interactive seek command.
+       This is mostly indenting and spacing changes.  Also, remove
+       some unnecessary static decls instead of bothering to reindent them.
+       * src/module.h (EMACS_EXTERN_C_BEGIN): Remove, and do this inline,
+       as most other Emacs files do for this sort of thing.
 
-       * lisp/mpc.el (mpc-cmd-seekcur): New function.
-       (mpc-seek-current): New command.
-       (mpc-mode-menu): Add entry for mpc-seek-current
-       (mpc-mode-map): Bind mpc-seek-current to "g"
+2015-11-19  Eli Zaretskii  <eliz@gnu.org>
 
-2015-11-27  Dmitry Gutov  <dgutov@yandex.ru>
+       Minor improvements in modules testing Makefile
 
-       Autoload etags when using its xref backend
+       * modules/mod-test/Makefile (EMACS, SO): New variables.
+       (CFLAGS): When SO = dll, don't use -fPIC.
+       (check): New target, runs the test.
 
-       * lisp/progmodes/xref.el (xref--etags-backend):
-       Rename to etags--xref-backend.  Move to etags.el.  Autoload.
-       (Bug#22026)
+2015-11-19  Eli Zaretskii  <eliz@gnu.org>
 
-2015-11-27  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * .gitignore: Add "*.dll".
 
-       * lisp/character-fold.el: Allow complex chars to match their decomposition
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-       (character-fold-table): When a character's decomposition does not
-       involve a formatting tag (i.e., if it has an "exact" description via
-       other characters), then this character is allowed to match the
-       decomposition.
+       Migrate modules/.gitignore into .gitignore
 
-2015-11-27  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * .gitignore: Add former contents of modules/.gitignore.
+       * modules/.gitignore: Remove.
 
-       * lisp/character-fold.el: More descriptive variable names
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-       (character-fold-table): Rename a lot of the lexical variables to
-       make the code easier to read.
+       Add copyright notices to module code
 
-2015-11-27  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Put them in the usual format for GNU Emacs copyright notices.
 
-       * lisp/isearch.el: Ensure we still support `isearch-new-word'
+2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
 
-       (isearch-new-regexp-function): Define variable.
-       (isearch-new-word): Define as an obsolete alias. (Bug#22018)
+       Rename emacs_module.h to module.h
 
-2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+       * src/module.h: Rename from src/emacs_module.h.
+       All uses changed.
 
-       Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+2015-11-19  Juanma Barranquero  <lekktu@gmail.com>
 
-2015-11-27  Lee Bochicchio  <lboc.home@gmail.com>
+       * src/module.c (Fmodule_load): Remove unused vars `doc_name', `args'
 
-       * test/automated/abbrev-tests.el: Define more tests
+       * src/lread.c (Fload): Remove unused variable `size'
 
-       (abbrev-table-name-test, kill-all-abbrevs-test)
-       (clear-abbrev-table-test): New tests.
+2015-11-19  Alan Mackenzie  <acm@muc.de>
 
-2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+       src/keyboard.c (pre-command-hook): Fix typo in doc string: "pre" -> "post".
 
-       Add module tests for wrong-type-argument
+2015-11-18  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * modules/mod-test/test.el (mod-test-sum-test): Add tests for
-       wrong-type-argument.
+       Prioritize looking inside vc-parent-buffer over log-view-mode fallback
 
-2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/vc/vc.el (vc-deduce-fileset): Prioritize looking inside
+       vc-parent-buffer over log-view-mode fallback (bug#21955).
 
-       Improve handling of signals and 'throw' in modules
+2015-11-18  Alan Mackenzie  <acm@muc.de>
 
-       * src/emacs-module.c: Add commentary explaining how to write
-       functions in this file.
-       (module_make_global_ref, module_free_global_ref)
-       (module_non_local_exit_signal, module_non_local_exit_throw)
-       (module_make_function, module_funcall, module_intern)
-       (module_type_of, module_is_not_nil, module_eq)
-       (module_extract_integer, module_make_integer)
-       (module_extract_float, module_make_float)
-       (module_copy_string_contents, module_make_string)
-       (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
-       (module_get_user_finalizer, module_set_user_finalizer)
-       (module_vec_set, module_vec_get, module_vec_size)
-       (module_non_local_exit_signal_1, module_non_local_exit_throw_1):
-       Do nothing and return with failure indication immediately, if some
-       previous module call signaled an error or wants to throw.  See
-       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02133.html
-       for the relevant discussions.
+       lisp/isearch.el: Eliminate macro isearch-call-message, replacing with funcall.
 
-2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+2015-11-18  Ken Brown  <kbrown@cornell.edu>
 
-       Add ':version' tag to 'checkdoc-package-keywords-flag'
+       * configure.ac (LIBMODULES): Don’t define on Cygwin
 
-       * lisp/emacs-lisp/checkdoc.el (checkdoc-package-keywords-flag):
-       Add a ':version' tag.
+2015-11-18  Eli Zaretskii  <eliz@gnu.org>
 
-2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+       Fix MS-Windows build --with-modules
 
-       Improve documentation of 'eval-buffer' and 'eval-region'
+       * src/module.c: Reformat copyright commentary.
+       (module_vec_get): Use explicit cast to size_t to avoid compiler
+       warning in 32-bit builds.
+       (check_main_thread) [WINDOWSNT]: Fix letter-case in Windows APIs.
+       Compare thread IDs directly, as GetThreadId is not available
+       before Windows Vista.
+       (check_main_thread) [WINDOWSNT]: Duplicate the thread handle
+       without using APIs and constants not available on XP and older
+       systems.  Obtain and store the thread ID as well.
 
-       * src/lread.c (Feval_buffer, Feval_region): Doc fixes.  (Bug#22023)
+2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
+           Philipp Stephani  <phst@google.com>
 
-       * doc/lispref/eval.texi (Eval): Mention narrowing to clarify
-       "accessible portion of buffer".
+       Add dynamic module test and helper script
 
-2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+       Add 'modhelp.py' script (python2) to automate module testing and
+       module generation.
 
-       Unbreak the Cygwin w32 build
+       To build and test all modules in the modules/ dir
+         $ ./modhelp.py test
 
-       * src/emacs.c (main): Call w32_init_main_thread in the Cygwin w32
-       build as well.  Reported by Andy Moreton <andrewjmoreton@gmail.com>.
+       To generate a module from template code (good starting point)
+         $ ./modhelp init mynewtestmodule
 
-2015-11-27  Eli Zaretskii  <eliz@gnu.org>
+       See the script -h option for more documentation.
 
-       Improve commentary in character-fold.el
+       * modules/modhelp.py: New module helper script.
+       * modules/mod-test/Makefile: New file. Makefile for the test module.
+       * modules/mod-test/mod-test.c: New file. Test module source file.
+       * modules/mod-test/test.el: New file. ert test suite for the test module.
+       * modules/.gitignore: New file. Local .gitignore file.
 
-       * lisp/character-fold.el (character-fold-to-regexp): Move detailed
-       description from commit log message to comments.  (Bug#22019)
+2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
 
-2015-11-26  Alan Mackenzie  <acm@muc.de>
+       Make 'Fload' look for modules
 
-       Byte Compiler: generate code to adjust stack count after call to `signal'.
+       'Fload' can now load dynamic modules. This also makes 'require' work.
 
-       Corrects change from earlier today.
+       * src/lread.c:
+         (suffix_p): New function.
+         (Fload): Use 'suffix_p'.  Call 'Fmodule_load' when we try to load a file
+         with a module suffix.
+         (syms_of_lread): Append module suffix to 'Vload_suffixes'.
 
-       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): supply the current value of
-       `byte-compile--for-effect' as argument to `byte-compile-form'.
+2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
+           Philipp Stephani  <phst@google.com>
 
-2015-11-26  Eli Zaretskii  <eliz@gnu.org>
+       Add dynamic module module support
 
-       Improve commentary of prepare_to_modify_buffer_1
+       * configure.ac: Add '--with-modules' option.  Conditionally add
+         dynlib.o and module.o to the list of objects.  Add any system
+         specific flags to the linker flags to support dynamic libraries.
+       * m4/ax_gcc_var_attribute.m4: Add autoconf extension to test gcc
+         attributes.
+       * src/Makefile.in: Conditionally add module objects and linker flags.
+       * src/alloc.c (garbage_collect_1): protect module local values from
+         GC.
+       * src/lisp.h: Add 'module_init' and 'syms_of_module' prototypes.
+       * src/emacs_module.h: New header file included by modules.  Public
+         module API.
+       * src/module.c: New module implementation file.
 
-       * src/insdel.c (prepare_to_modify_buffer_1): Mention in commentary
-       that this function runs Lisp.  Suggested by Richard Stallman
-       <rms@gnu.org>.
+2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
 
-2015-11-26  Phillip Lord  <phillip.lord@russet.org.uk>
+       Add new User Pointer (User_Ptr) type
 
-       Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+       * src/lisp.h: Add new Lisp_Misc_User_Ptr type.
+       (XUSER_PTR): New User_Ptr accessor.
+       * src/alloc.c (make_user_ptr): New function.
+       (mark_object, sweep_misc): Handle Lisp_Misc_User_Ptr.
+       * src/data.c (Ftype_of): Return 'user-ptr' for user pointer.
+       (Fuser-ptrp): New user pointer type predicate function.
+       (syms_of_data): New 'user-ptrp', 'user-ptr' symbol.  New 'user-ptrp'
+       subr.
+       * src/print.c (print_object): Add printer for User_Ptr type.
 
-2015-11-26  Phillip Lord  <phillip.lord@russet.org.uk>
+2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
+           Philipp Stephani  <phst@google.com>
 
-       Fix regression after merge.
+       Add portable layer for dynamic loading
 
-        * src/undo.c (prepare_record): Remove call to run_undoable_change.
+       * src/dynlib.h: New file.
+       * src/dynlib.c: New file.
 
-2015-11-26  Phillip Lord  <phillip.lord@russet.org.uk>
+2015-11-18  Philipp Stephani  <phst@google.com>
 
-       After delete, record point location in undo.
+       Add catch-all & no-signal version of PUSH_HANDLER
 
-       Addresses Bug #21968.
+       Ground work for modules. Add a non-signaling version of PUSH_HANDLER and
+       a new "catch-all" handler type.
 
-               * lisp/simple.el (undo-auto--add-boundary): Clean up code to
-               better support intercalating calls.
-               * src/keyboard.c, src/keyboard.h (command_loop_1): Store value of
-               point and current buffer before each command.
-               * src/undo.c (record_point): Now only record the point.
-               * src/undo.c (prepare_record): Functionality removed form
-               record_point.
-               * src/undo.c (record_delete): Check if point needs recording.
-               * src/undo.c (undo-boundary): Record value of point before each
-               boundary.
-               * test/automated/simple-test.el: New tests.
+       * src/eval.c (init_handler, push_handler, push_handler_nosignal): New
+         functions.
+       * src/fns.c (hash_remove_from_table): Expose function public.
+       * src/lisp.h: New handler type, define macro to push_handler call.
 
-       Conflicts:
-               src/undo.c
+2015-11-18  Ken Brown  <kbrown@cornell.edu>
 
-2015-11-26  Eli Zaretskii  <eliz@gnu.org>
+       Silence byte-compiler warning
 
-       Fix compiler warnings in w32.c
+       * lisp/server.el (server-process-filter): Silence byte-compiler
+       warning.
 
-       * src/w32.c (sys_socket): In case of error, use -1 as return
-       value, not INVALID_SOCKET, which causes compiler warnings.
-       (maybe_load_unicows_dll): Cast the return value of GetProcAddress
-       to the appropriate function signature, to avoid compiler errors.
-       Reported by Andy Moreton <andrewjmoreton@gmail.com>.  (Bug#21953)
+2015-11-18  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-11-26  Dmitry Gutov  <dgutov@yandex.ru>
+       Quote symbols in docstrings using `'
 
-       Check if the file exists on disk before producing the revert diff
+       Be more systematic about quoting symbols `like-this' rather than
+       `like-this or 'like-this' in docstrings.  This follows up Artur
+       Malabarba's email in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01647.html
 
-       * lisp/vc/vc-dispatcher.el (vc-buffer-sync): Check if the file
-       exists on disk (bug#20558).
+2015-11-18  Peder O. Klingenberg  <peder@klingenberg.no>
 
-2015-11-26  Alan Mackenzie  <acm@muc.de>
+       Fix savegames in dunnet
 
-       Byte compiler: on setq with an odd number of arguments, generate a `signal'
+       * lisp/play/dunnet.el (dun-rot13): Use the standard rot13-region instead
+         of separate implementation.
 
-       * lisp/emacs-lisp/cconv.el (cconv-convert): Don't transform `setq' form when
-       it has an odd number of arguments, to allow bytecomp to handle the error.
+2015-11-18  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): In a `setq' form with an
-       odd number of arguments, generate a `signal' instead of the normal code.
+       * lisp/emacs-lisp/package.el (package--with-response-buffer):
 
-2015-11-26  Dmitry Gutov  <dgutov@yandex.ru>
+       Ensure we're at the start of the buffer before searching for
+       the end of headers.
 
-       Use find-tag-default for xref-backend-identifier-at-point
+2015-11-17  Xue Fuqiao  <xfq.free@gmail.com>
 
-       * lisp/progmodes/etags.el (find-tag-tag)
-       (tags-completion-at-point-function): Extract common code as
-       find-tag--default.
-       (xref-backend-identifier-at-point): Define in terms of the new
-       function.
+       * admin/release-process: Improve wording.
 
-2015-11-26  Paul Eggert  <eggert@cs.ucla.edu>
+2015-11-17  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * src/undo.c (record_property_change): Remove now-unused local.
+       Fix docstring quoting problems with ‘ '’
 
-2015-11-25  Phillip Lord  <phillip.lord@russet.org.uk>
+       Problem reported by Artur Malabarba in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01513.html
+       Most of these fixes are to documentation; many involve fixing
+       longstanding quoting glitches that are independent of the
+       recent substitute-command-keys changes.  The changes to code are:
+       * lisp/cedet/mode-local.el (mode-local-augment-function-help)
+       (describe-mode-local-overload):
+       Substitute docstrings before displaying them.
+       * lisp/emacs-lisp/cl-macs.el (cl--transform-lambda):
+       Quote the generated docstring for later substitution.
 
-       run_undoable_changes now called from insdel.
+2015-11-17  Eli Zaretskii  <eliz@gnu.org>
 
-       The original calls from inside undo.c are not always at a safe position
-       to call lisp, as they originate in varied positions within insdel.c.
-       Calling them directly from prepare_to_modify_buffer_1 ensures that they
-       are always run at the same point.
+       Improve configure --help text for wide ints
 
-        * src/undo.c (run_undoable_changes,syms_of_undo): Remove function
-        and symbol used.
-        * src/insdel.c (run_undoable_changes): Add function and symbol.
+       * configure.ac (wide-int): Clarify user-level advantages and
+       disadvantages.
 
-2015-11-25  Eli Zaretskii  <eliz@gnu.org>
+2015-11-17  Stephen Leake  <stephen_leake@stephe-leake.org>
 
-       Improve and update documentation of search commands
+       Improve doc string
 
-       * doc/emacs/search.texi (Lax Search): Renamed from "Search Case";
-       all references changed.  Move the description of lax-whitespace
-       here.  Add description of the new character folding features and
-       additional customizable options.
-       (Isearch Yank): Move before "Error in Search".
-       (Basic Isearch): Improve wording.  Add index entries.  Add short
-       description of how to abandon search, making this subsection a
-       complete introduction to search basics.
-       (Repeat Isearch): Add index entries.  Describe additional
-       customizable options.  Describe mouse clicks.
-       (Isearch Yank): Add index entries.  Describe mouse-2 click in echo
-       area.  Describe more customizable options.
-       (Error in Isearch): Add index entries.
-       (Special Isearch): Move actual description of some isearch
-       commands to other sections, leaving here just the summary of the
-       commands.  Add command that toggles character folding.  Describe
-       commands, like "C-h C-h", that were previously omitted for some
-       reason.
-       (Not Exiting Isearch): Describe search-exit-option.  Add index
-       entries.
-       (Word Search): Describe eww-search-word and eww-search-prefix.
-       (Symbol Search): Add index entries.
-       (Regexp Search): Describe regexp-search-ring-max.
-       (Replacement and Lax Matches): Renamed from "Replacement and
-       Case"; all references changed.  Describe lax-whitespace matching
-       in replace commands and related options.  Describe character
-       folding in replace commands and related options.
-       (Query Replace): Describe query-replace-from-to-separator and the
-       new history features.  Add index entries for highlighted text.
-       Describe query-replace-skip-read-only.  Describe more keys
-       accepted by query-replace.
-       (Other Repeating Search): More index entries for Occur.  Describe
-       list-matching-lines-default-context-lines.
-       (Search Customizations): New section, documents customizable
-       options that were not documented until now.
-       * doc/emacs/glossary.texi (Glossary): Add "Case Folding" and
-       "Character Folding".
+       * lisp/progmodes/xref.el (xref-backend-references): Improve doc string.
 
-       * etc/NEWS: Move search- and replace-related entries to a single
-       parent section.
+2015-11-17  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/replace.el (query-replace-show-replacement): Doc fix.
-       * lisp/isearch.el (search-nonincremental-instead)
-       (isearch-hide-immediately): Doc fixes.
+       eval_sub followed dangling pointer when debugging
 
-2015-11-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+       Problem reported by Pip Cet (Bug#21245).
+       This bug could occur in eval_sub if the C compiler reused
+       storage associated with the ‘argvals’ local after ‘argvals’
+       went out of scope, and if the Elisp debugger stopped on Elisp
+       function exit and accessed ‘argvals’.  It could also occur if
+       a variadic function was called with so many arguments (over
+       2048 args on x86-64) that SAFE_ALLOCA_LISP called malloc, then
+       SAFE_FREE freed the arguments, then the memory manager used
+       the storage for other purposes, then the debugger accessed the
+       arguments.
+       * src/eval.c (eval_sub): Declare ‘argvals’ at top level of
+       function body.  Simplify local decls.
+       When allocating args via SAFE_ALLOCA, call
+       debugger before invoking SAFE_FREE, as the debugger needs
+       access to the args.
+       (eval_sub, apply_lambda): Rework to avoid need for
+       set_backtrace_debug_on_exit hack.  This is cleaner,
+       and should work better with buggy custom debuggers.
 
-       Remove nnml-retrieve-groups that is unnecessary and somewhat problematic
+2015-11-16  Daiki Ueno  <ueno@gnu.org>
 
-       * lisp/gnus/nnml.el (nnml-retrieve-groups): Remove.  See:
-       <http://thread.gmane.org/gmane.emacs.gnus.general/86308> and
-       <http://thread.gmane.org/gmane.emacs.gnus.general/86321>
+       * lisp/image-mode.el: Support encrypted file
 
-2015-11-25  Paul Eggert  <eggert@cs.ucla.edu>
+       (image-toggle-display-image): Read content from the buffer instead
+       of the file, if the buffer holds a decrypted data.  (Bug#21870)
 
-       Fix module_format_fun_env when dynlib_addr fails
+2015-11-16  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * src/emacs-module.c (module_format_fun_env):
-       exprintf doesn’t support %p, so use %x.  Reported by Eli Zaretskii in:
-       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02122.html
+       ELF unexec: align section header
 
-2015-11-25  Paul Eggert  <eggert@cs.ucla.edu>
+       This ports the recent unexelf.c changes to Fedora x86-64
+       when configured with GCC’s -fsanitize=undefined option.
+       * src/unexelf.c (unexec): Align new_data2_size to a multiple
+       of ElfW (Shdr)’s alignment, so that NEW_SECTION_H returns a
+       pointer aligned appropriately for its type.
 
-       Disambiguate variable help a bit better
+2015-11-16  Andreas Schwab  <schwab@linux-m68k.org>
 
-       * lisp/help-fns.el (describe-variable): Quote the
-       variable’s value if it is a symbol other than t or nil.
-       See: T.V Raman in:
-       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02147.html
+       Do more checks on bytecode objects (Bug#21929)
 
-2015-11-25  Dmitry Gutov  <dgutov@yandex.ru>
+       * src/eval.c (funcall_lambda): Check size of compiled function
+       object.
+       (Ffetch_bytecode): Likewise.
 
-       Pass SVN commit message through log-edit-extract-headers
+2015-11-16  Johan Bockgård  <bojohan@gnu.org>
 
-       * lisp/vc/vc-svn.el (vc-svn-checkin): Pass COMMENT through
-       log-edit-extract-headers (bug#18954).
+       pcase.el: Fix edebugging of backquoted cons patterns
 
-2015-11-24  Alan Mackenzie  <acm@muc.de>
+       * lisp/emacs-lisp/pcase.el (pcase-QPAT): Fix edebugging of backquoted
+       cons patterns. (Bug#21920)
 
-       CC Mode: Eliminate compiler warning messages.
+2015-11-16  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * lisp/progmodes/cc-mode.el (top level): remove compile time declaration of
-       `font-lock-syntactic-keywords' (which CC Mode doesn't use).
-       * lisp/progmodes/cc-awk.el (awk-mode-syntax-table)
-       (c-awk-set-syntax-table-properties): Clarify comments about
-       `font-lock-syntactic-keywords'.
+       Improve fix for regex reentrancy abort
 
-       * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-load): Create a dummy declaration
-       of this before the real (interpreted) one, to satisfy the byte compiler.
+       Suggested by Stefan Monnier (Bug#21688).
+       * src/syntax.c (update_syntax_table_forward):
+       Remove recently-added PROPERTIZE arg, and assume it is true.
+       All callers changed.
+       * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
+       Invoke update_syntax_table directly.
 
-2015-11-24  Simen Heggestøyl  <simenheg@gmail.com>
+2015-11-16  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       Extend the test suite for json.el
+       * lisp/faces.el (faces--attribute-at-point): Use `face-list-p'
 
-       * lisp/json.el (json-plist-p): Clarify docstring.
+       * lisp/emacs-lisp/package.el (package--with-response-buffer): Missing require
 
-       * test/automated/json-tests.el (json-tests--with-temp-buffer): New
-       macro.
-       (test-json-join, test-json-alist-p)
-       (test-json-plist-p, test-json-advance, test-json-peek)
-       (test-json-pop, test-json-skip-whitespace)
-       (test-json-read-keyword, test-json-encode-keyword)
-       (test-json-read-number, test-json-encode-number)
-       (test-json-read-escaped-char, test-json-read-string)
-       (test-json-encode-string, test-json-encode-key)
-       (test-json-new-object, test-json-add-to-object)
-       (test-json-read-object, test-json-encode-list)
-       (test-json-read-array, test-json-encode-array)
-       (test-json-read, test-json-read-from-string)
-       (test-json-encode): New tests.
-       (json-read-simple-alist): Merged into `test-json-read-object'.
-       (json-encode-string-with-special-chars): Merged into
-       `test-json-encode-string'.
-       (json-read-string-with-special-chars): Split into
-       `test-json-encode-string' and `test-json-read-from-string'.
+       * lisp/emacs-lisp/nadvice.el (add-function): Escape quote
 
-2015-11-24  Anders Lindgren  <andlind@gmail.com>
+2015-11-15  Vasily Korytov  <vasily.korytov@yahoo.com>
 
-       Fixed bug#18283: Enable applescript in NextStep.
+       Recognize .rbw and .pyw files (bug#18753)
 
-       * nextstep/templates/Info.plist.in: Set NSAppleScriptEnabled to YES.
+       * lisp/progmodes/python.el (auto-mode-alist):
+       Recognize .pyw files.
 
-2015-11-24  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/progmodes/ruby-mode.el (auto-mode-alist):
+       Recognize .rbw files.
 
-       Allow completion on dynamic module files in load-library
+2015-11-15  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * lisp/files.el (load-library): Bind completion-ignored-extensions
-       to nil, to allow completion on dynamic modules typed as file
-       names.  Reported by Andy Moreton <andrewjmoreton@gmail.com>.
+       Fix ruby-mode auto-mode-alist entry
 
-2015-11-24  Alan Mackenzie  <acm@muc.de>
+       * lisp/progmodes/ruby-mode.el (auto-mode-alist): Add grouping
+       around the extensions (bug#21257).
 
-       CC Mode: eliminate almost all byte compilation warnings
+2015-11-15  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-noruntime-functions): Remove.
-       (cc-require): Remove the crude hack that saved and restored
-       byte-compile-noruntime-functions.
-       (cc-conditional-require, cc-conditional-require-after-load): New macros.
+       Fix etags completion near eob
 
-       * lisp/progmodes/cc-defs.el (top level): Reformulate code which loaded
-       cc-fix.el using the new macros in cc-bytecomp.el.
+       * lisp/progmodes/etags.el (tags-completion-at-point-function):
+       Use `goto-char', to avoid the end-of-buffer error (bug#20061).
 
-       * lisp/progmodes/cc-langs.el (c++-template-syntax-table)
-       (c-no-parens-syntax-table): Add extra "(eval ..)"s around "'(lambda ..)"
-       forms to remove the superflous quotes.
+2015-11-15  Alan Mackenzie  <acm@muc.de>
 
-2015-11-24  Eli Zaretskii  <eliz@gnu.org>
+       De-pessimize detection of C++ member initialization lists.
 
-       Add one more mod-test test
+       list/progmodes/cc-engine.el (c-back-over-list-of-member-inits): New macro.
+       (c-back-over-member-initializers): Reformulate such that c-at-toplevel-p
+       is only called when a construct "looks right" rather than continually.
+       (c-guess-basic-syntax, CASE 5R): Add a check for the mode being C++ Mode.
 
-       * modules/mod-test/test.el (mod-test-sum-test): Test the error
-       signaled when the function is invoked with a wrong number of
-       arguments.
+2015-11-15  Stephen Leake  <stephen_leake@stephe-leake.org>
 
-2015-11-24  Philipp Stephani  <phst@google.com>
+       Improve a few doc strings, comments
 
-       * modules/mod-test/mod-test.c (Fmod_test_sum): Verify there are 2 args.
+       * lisp/cedet/cedet-global.el (cedet-gnu-global-expand-filename):
+       * lisp/cedet/ede/locate.el (ede-locate-base):
+       * lisp/cedet/semantic/symref.el (semantic-symref-calculate-rootdir):
+       * src/fns.c (Fdelq): Improve doc string.
 
-2015-11-24  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions): Add FIXME.
 
-       Implement dynlib_addr for MS-Windows
+2015-11-15  Anders Lindgren  <andlind@gmail.com>
 
-       * src/dynlib.c [WINDOWSNT]: Include w32common.h.
-       <g_b_init_get_module_handle_ex> [WINDOWSNT]: New static variable.
-       (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS)
-       (GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT) [WINDOWSNT]: Define
-       if undefined.
-       (dynlib_reset_last_error): Reset g_b_init_get_module_handle_ex to
-       zero.
-       (dynlib_addr) [WINDOWSNT]: Non-trivial implementation to report
-       the full file name of the module for a given address.
+       Enhance NSTRACE (trace output for NextStep).
 
-2015-11-24  Alan Mackenzie  <acm@muc.de>
+       Trace can be disabled for groups of functions. By default, event
+       functions and functions that generate lots of output are disabled.
 
-       Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+       Trace output of Objective-C functions now use the "[ClassName
+       parameter:]" form.
 
-2015-11-24  Alan Mackenzie  <acm@muc.de>
+       * src/nsterm.h (NSTRACE_ALL_GROUPS, NSTRACE_GROUP_EVENTS)
+       (NSTRACE_GROUP_UPDATES, NSTRACE_GROUP_FRINGE, NSTRACE_GROUP_COLOR)
+       (NSTRACE_GROUP_GLYPHS, NSTRACE_GROUP_FOCUS): New macros,
+       controlling in which function groups trace should be active.
+       (NSTRACE_WHEN): Support for silencing a function, this also
+       silencing all called functions.
+       (NSTRACE_UNSILENCE): New macro, used to re-enable trace.
+       (NSTRACE_FMT_FSTYPE, NSTRACE_ARG_FSTYPE): New macros, used to
+       print the full screen state in NSTRACE functions.
 
-       Squashed commit of the following:
+       * src/nsterm.m (nstrace_depth, nstrace_num): Made volatile as they
+       can be accessed from multiple threads.
+       (nstrace_enabled_global): New variable, when FALSE, trace is
+       silenced.
+       (nstrace_restore_global_trace_state): New function, used to
+       restore `nstrace_enabled_global' at end of block.
+       ([EmacsView setFrame:], [EmacsWindow setFrame:display:])
+       ([EmacsWindow setFrame:display:animation:])
+       ([EmacsWindow setFrameTopLeftPoint:]): New functions, print trace
+       and call corresponding super function.
+       (Many functions): Add or enhance trace output.
 
-       commit e1ecf76585bef2eb87995f7a7f92cc12003a6f70
-       Author: Alan Mackenzie <acm@muc.de>
-       Date:   Tue Nov 24 16:50:09 2015 +0000
+       * src/nsimage.m (ns_image_from_file): Enhanced trace output.
 
-           Byte compile: minor amendments.
+       * src/nsfns.m (x_set_tool_bar_lines): Add trace output.
 
-           * lisp/emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment):
-           add a comment to explain the binding of variables around a subsidiary
-           compilation.
-           (byte-compile-new-defuns): Amend the doc string.
+       * src/nsmenu.m ([EmacsToolbar setVisible:]): New function, print trace
+       and call corresponding super function.
 
-       commit c537bfed1dda1593d218956ff00c6105a3ff0316
-       Author: Alan Mackenzie <acm@muc.de>
-       Date:   Sat Nov 21 18:43:57 2015 +0000
+2015-11-15  Anders Lindgren  <andlind@gmail.com>
 
-           Byte compiler: fix spurious warnings "might not be defined at runtime".
+       Fixed a toolbar related issue on OS X.
 
-           Also initialize byte-compile-noruntime-functions between runs.
+       Earlier, when toggling the tool-bar in a maximized frame, the
+       frame size didn't match the number of text lines, leaving an
+       unused area at the bottom of the frame.
 
-           * lisp/emacs-lisp/bytecomp.el (byte-compile-new-defuns): New variable.
-           (byte-compile-initial-macro-environment): For eval-when-compile: bind
-           byte-compile-unresolved-functions and byte-compile-new-defuns around
-           byte-compile-top-level, to prevent spurious entries being made.
-           (byte-compile-warn-about-unresolved-functions): Check whether function is
-           in byte-compile-new-defuns before emitting a warning about it.
-           (byte-compile-from-buffer): Initialize new variable and
-           byte-compile-noruntime-functions to nil.
-           (byte-compile-file-form-require): record all new functions defined by a
-           `require' in byte-compile-new-defuns.
-           (byte-compile-file-form-defmumble): record the new alias in
-           byte-compile-new-defuns.
+       * nsfns.m (x_set_tool_bar_lines): Exit maximized and full height
+       fullscreen modes when tool bar is disabled.
 
-2015-11-24  Eli Zaretskii  <eliz@gnu.org>
+2015-11-15  Anders Lindgren  <andlind@gmail.com>
 
-       Fix crash at startup related to GC of font entities
+       Fixed OS X 10.6.8 build issue (bug#21862).
 
-       * src/font.h (GC_FONT_SPEC_P, GC_FONT_ENTITY_P)
-       (GC_FONT_OBJECT_P, GC_XFONT_SPEC, GC_XFONT_ENTITY)
-       (GC_XFONT_OBJECT): New macros, for use in garbage collector.
-       * src/alloc.c (compact_font_cache_entry, compact_font_caches):
-       Don't ifdef away font cache compaction on NT_GUI, as the problems
-       which led to that seem to have been solved.
-       (compact_font_cache_entry): Use GC_FONT_SPEC_P, GC_XFONT_SPEC,
-       GC_XFONT_ENTITY, and GC_XFONT_OBJECT, instead of their non-GC_
-       cousins.  (Bug#21999)
+       * src/nsterm.h (EmacsView): Add missing declarations.
+       * src/nsterm.m ([EmacsView windowDidBecomeKey]): New method, like
+       the standard method but without the notification parameter.
+       Intended to be used for direct calls.
+       ([EmacsView windowDidEnterFullScreen]): Call the non-notification
+       version of `windowDidBecomeKey'. Made the notification method call
+       the non-notification method instead of the vice versa.
+       (NSWindowDidEnterFullScreenNotification): Deleted, no longer
+       needed.
 
-2015-11-24  Alan Mackenzie  <acm@muc.de>
+2015-11-15  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       Byte compile: Output an error, not a warning, for odd number of args to setq
+       * lisp/faces.el (faces--attribute-at-point): Fix an issue
 
-       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): Amend.
+       Previous code would signal an error when the face at point was
+       a manually built list of attributes such as '(:foregroud "white").
 
-2015-11-24  Ken Raeburn  <raeburn@raeburn.org>
+       * test/automated/faces-tests.el (faces--test-color-at-point): Add a test
 
-       Fix kbd_buffer iteration loop in readable_events
+2015-11-15  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * src/keyboard.c (readable_events): Wrap the event pointer back to the
-       start of the kbd_buffer array inside the top of the loop instead of
-       right before checking the loop condition, since kbd_fetch_ptr and
-       kbd_store_ptr point past the end of the array to mean that element 0
-       is next. (bug#21935)
+       Fix regex abort when it tries to reenter itself
 
-2015-11-24  Paul Eggert  <eggert@cs.ucla.edu>
+       Problem reported by Ken Raeburn.
+       Solution suggested by Stefan Monnier (Bug#21688).
+       * src/regex.c (re_match_2_internal):
+       Use new _FAST functions to avoid regex code reentering itself.
+       * src/syntax.c (update_syntax_table_forward): New arg PROPERTIZE.
+       All callers changed.
+       * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST)
+       (UPDATE_SYNTAX_TABLE_FAST): New inline functions.
 
-       Improve text-quoting-style doc again
+2015-11-15  Dmitry Gutov  <dgutov@yandex.ru>
 
-       * doc/lispref/help.texi (Keys in Documentation):
-       Omit overkill discussion of ‘setq’.  Mention Emacs versions
-       where ‘grave’ style was standard.
+       Improve Ruby 1.9-style keyword keys highlighting
 
-2015-11-24  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/progmodes/ruby-mode.el (ruby-font-lock-keywords):
+       Handle required keyword arguments (bug#21367).
+       And highlight the colon together with the name.
 
-       Improve text-quoting-style doc
+2015-11-15  Dmitry Gutov  <dgutov@yandex.ru>
 
-2015-11-24  Paul Eggert  <eggert@cs.ucla.edu>
+       Unify the absolutely equal xref-backend-references implementations
 
-       Simplify module_make_function
+       * lisp/progmodes/elisp-mode.el (xref-backend-references):
+       Remove.
 
-       * src/emacs-module.c (module_make_function):
-       Simplify by calling build_unibyte_string.
+       * lisp/progmodes/etags.el (xref-backend-references):
+       Remove.
 
-2015-11-24  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/progmodes/xref.el (xref-backend-references):
+       Define the default implementation.
 
-       Port better to FreeBSD’s dlfunc vs dlsym
+2015-11-14  Dmitry Gutov  <dgutov@yandex.ru>
 
-       This avoids warnings when converting between void * and
-       function pointers, which strict C11 does not allow.
-       * configure.ac (dlfunc): Check for existence.
-       * src/dynlib.c (dlfunc) [!HAVE_DLFUNC]: New macro.
-       (dynlib_func): New function.
-       * src/dynlib.h (dynlib_function_ptr, dynlib_func): New decls.
-       * src/emacs-module.c (Fmodule_load): Use dynlib_func, not
-       dynlib_sym, for function pointers.
+       Update project-find-regexp for the new xref API
 
-2015-11-24  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/progmodes/project.el (project--read-regexp):
+       Update to use the new xref API methods.
 
-       Simplify use of emacs_finalizer_function type
+       * lisp/progmodes/xref.el (xref-find-backend): Autoload.
 
-       * src/emacs-module.h (emacs_finalizer_function):
-       Now EMACS_NOEXCEPT.  All users simplified to omit EMACS_NOEXCEPT.
-       (struct emacs_env_25): Use emacs_finalizer_function where applicable.
+2015-11-14  Dmitry Gutov  <dgutov@yandex.ru>
 
-2015-11-24  Paul Eggert  <eggert@cs.ucla.edu>
+       Fix replacing a match with a shorter string
 
-       module_format_fun_env fixes
+       In effect, partially reverting fe973fc.
 
-       * src/doprnt.c (exprintf) [HAVE_MODULES]: Also define in this case.
-       * src/emacs-module.c (module_format_fun_env):
-       Convert path and sym to UTF-8.
-       Don’t use VLAs, as the C11 standard says they’re optional,
-       and anyway they can cause core dumps with large allocations.
-       Use exprintf rather than snprintf, as exprintf handles arbitrarily
-       long strings.  Simplify the code a bit.
+       * lisp/progmodes/xref.el (xref-query-replace): Store the end
+       of each match as a marker again, instead of length.
+       (xref--query-replace-1): Update accordingly.
 
-2015-11-23  Dmitry Gutov  <dgutov@yandex.ru>
+2015-11-14  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       Don't use package-user-dir in elisp-library-roots if it's not bound
+       * lisp/progmodes/xref.el (xref-pop-marker-stack): Downgrade errors
 
-       * lisp/progmodes/elisp-mode.el (elisp-library-roots): Don't
-       use package-user-dir if it's not bound (bug#19759).
+       Signal user-errors instead.
 
-2015-11-23  Anders Lindgren  <andlind@gmail.com>
+2015-11-14  Eli Zaretskii  <eliz@gnu.org>
 
-       New visible-bell for NextStep (OS X El Capitan compatible).
+       Document 'describe-symbol'
 
-       Instead of inverting a rectangle in the middle of the frame, use
-       the standard NextStep image "caution", represented using an
-       warning sign with an exclamation mark.  (Bug#21662)
+       * doc/emacs/help.texi (Help Summary): Mention "C-h o".
+       (Name Help): Document "C-h o" and describe-symbol.
 
-       Implemented based on a suggestion drafted by Mustafa Kocaturk.
+       * lisp/help-fns.el (describe-symbol): Doc fix.
 
-       * src/nsterm.m (EmacsBell): New class for managing the caution
-       image.  Support multiple active bells, the image is removed once
-       all bells have timed out.
-       (ns_timeout): Removed, no longer used.
-       (ns_ring_bell): Reimplemented to use EmacsBell.
+2015-11-14  Paul Eggert  <eggert@cs.ucla.edu>
 
-2015-11-23  Johan Bockgård  <bojohan@gnu.org>
+       Change test name to avoid spellcheck issue.
 
-       * lisp/emacs-lisp/nadvice.el (add-function): Fix debug spec.
+2015-11-14  Eli Zaretskii  <eliz@gnu.org>
 
-       (remove-function): Ditto. (Bug#20376)
+       Avoid signaling an error in 'describe-symbol'
 
-2015-11-23  Mark Oteiza  <mvoteiza@udel.edu>
+       * lisp/help-fns.el (describe-symbol): Avoid errors when the symbol
+       exists as a function/variable/face/etc., but is undocumented.
 
-       * lisp/leim/quail/tamil-dvorak.el: Add necessary escapes.
+       * test/automated/help-fns.el (help-fns-test-describe-symbol): New
+       test.
 
-2015-11-23  Eli Zaretskii  <eliz@gnu.org>
+2015-11-14  Eli Zaretskii  <eliz@gnu.org>
 
-       Improve how non-ASCII strings are accepted from modules
+       * INSTALL (--with-cairo): Document this new configure option.
 
-       * src/emacs-module.c (module_make_function, module_make_string):
-       Build a unibyte Lisp string and then decode it by UTF-8, instead
-       of building a multibyte string without decoding.  This is more
-       tolerant to deviations from UTF-8.
+2015-11-14  Eli Zaretskii  <eliz@gnu.org>
 
-2015-11-23  Paul Eggert  <eggert@cs.ucla.edu>
+       Document that GNU Make >= 3.81 is required to build Emacs
 
-       Port recent module changes to pickier compilers
+       * doc/lispref/internals.texi (Building Emacs): Document that GNU
+       Make 3.81 or later is now required.
 
-       * src/emacs-module.c (module_make_function)
-       (module_make_string): Add casts to fix pointer signedness issues.
+2015-11-14  Eli Zaretskii  <eliz@gnu.org>
 
-2015-11-23  Philipp Stephani  <phst@google.com>
+       * CONTRIBUTE (Branches): Improve wording for back-ported commits.
 
-       Fix how strings are accepted from modules
+2015-11-13  l3thal  <kwhite@gnu.org>
 
-       * src/emacs-module.c (module_make_function, module_make_string): Use
-       make_multibyte_string.
-       (module_copy_string_contents): Encode before reading the byte
-       size.  Return false if and only if an error occurred.
+       Merge branch 'erc-async-reconnect' into emacs-25
 
-2015-11-23  Eli Zaretskii  <eliz@gnu.org>
+       Reconnect asynchronously.
 
-       Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+2015-11-11  Alan Mackenzie  <acm@muc.de>
 
-2015-11-23  Shakthi Kannan  <shakthimaan@gmail.com>
+       First commit to scratch/follow.  Make Isearch work with Follow Mode, etc.
 
-       Add the tamil-dvorak input method
+       doc/lispref/window.texi (Basic Windows): Add paragraph defining "Group of
+       Windows" and new @defun selected-window-group.
+       (Window Start and End): Describe new &optional parameter GROUP and
+       ...-group-function for window-start, window-end, set-window-start, and
+       pos-visible-in-window-p.
+       (Textual Scrolling) Describe the same for recenter.
+       doc/lispref/positions.texi (Screen Lines): Describe the same for
+       move-to-window-line.
 
-       * lisp/leim/quail/tamil-dvorak.el: New file.  (Bug#21768)
+       src/window.c (Fwindow_start, Fwindow_end, Fset_window_start)
+       (Fpos_visible_in_window_p, Frecenter, Fmove_to_window_line): To each, add ar
+       new optional parameter "group".  At the beginning of each, check whether the
+       corresponding ...-group-function is set to a function, and if so execute this
+       function in place of the normal processing.
+       (syms_of_window): Define symbols for the six new variables below.
+       (window-start-group-function, window-end-group-function)
+       (set-window-start-group-function, recenter-group-function)
+       (pos-visible-in-window-p-group-function, move-to-window-line-group-function):
+       New permanent local buffer local variables.
+       src/keyboard.c (Fposn_at_point): Add extra parameter in call to
+       Fpos_visible_in_window_p.
 
-       * etc/NEWS: Mention the new input method.
+       lisp/window.el (selected-window-group-function): New permanent local buffer
+       local variable.
+       (selected-window-group): New function.
 
-2015-11-23  Martin Rudalics  <rudalics@gmx.at>
+       lisp/follow.el (follow-mode): Set the ...-group-function variables at mode
+       enable, kill them at mode disable.  Add/remove follow-after-change to/from
+       after-change-functions.
+       (follow-start-end-invalid): New variable.
+       (follow-redisplay): Manipulate follow-start-end-invalid.
+       (follow-after-change, follow-window-start, follow-window-end)
+       (follow-set-window-start, follow-pos-visible-in-window-p)
+       (follow-move-to-window-line, follow-sit-for): New functions.
 
-       Move setting FRAME_WINDOW_SIZES_CHANGED to resize_frame_windows.
+       lisp/isearch.el (isearch-call-message): New macro.
+       (isearch-update, with-isearch-suspended, isearch-del-char)
+       (isearch-search-and-update, isearch-ring-adjust): Invoke above new macro.
+       (with-isearch-suspended): Rearrange code such that isearch-call-message is
+       invoked before point is moved.
+       (isearch-message): Add comment about where point must be at function call.
+       (isearch-search): Remove call to isearch-message.
+       (isearch-lazy-highlight-window-group): New variable.
+       (isearch-lazy-highlight-new-loop): Unconditionally start idle timer.  Move
+       the battery of tests to ...
+       (isearch-lazy-highlight-maybe-new-loop): New function, started by idle timer.
+       Note: (sit-for 0) is still called.
+       (isearch-lazy-highlight-update): Check membership of
+       isearch-lazy-highlight-window-group.  Don't set the `window' overlay
+       property.
+       (isearch-update, isearch-done, isearch-string-out-of-window)
+       (isearch-back-into-window, isearch-lazy-highlight-maybe-new-loop)
+       (isearch-lazy-highlight-search, isearch-lazy-highlight-update)
+       (isearch-lazy-highlight-update): Call the six amended primitives (see
+       src/window.c above) with the new `group' argument set to t, to cooperate
+       with Follow Mode.
 
-       * src/frame.c (adjust_frame_size): Don't set
-       FRAME_WINDOW_SIZES_CHANGED here ...
-       * src/window.c (resize_frame_windows): ... but here, as suggested
-       by Stefan Monnier.  Also remove some dead code along the way.
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2015-11-23  Alan Mackenzie  <acm@muc.de>
+       * shr.el (shr-descend): Allow using lambdas in external functions.
 
-       * etc/NEWS (Incompatible Lisp Changes): Also `setf' needs an even # of args.
+2015-12-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-2015-11-23  Alan Mackenzie  <acm@muc.de>
+       * admin/gitmerge.el: Tweaks that seemed necessary
 
-       Signal an error when `setf' gets an odd number of arguments.
+       * admin/gitmerge.el (gitmerge-skip-regexp): Remove "sync".
+       (gitmerge-maybe-resume): Provide explicit empty commit message.
 
-       * lisp/emacs-lisp/gv.el (setf): Amend.
+2015-12-25  Łukasz Stelmach  <stlman@poczta.fm>  (tiny change)
 
-2015-11-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+       Use a different port for TLS erc
 
-       * lisp/emacs-lisp/smie.el (smie-backward-sexp): Handle BOB better.
+       * lisp/erc/erc.el (erc-default-port-tls): New variable
+       (bug#19497).
+       * lisp/erc/erc.el (erc-tls): Use it.
 
-2015-11-23  Alan Mackenzie  <acm@muc.de>
+2015-12-25  Alain Schneble  <a.s@realize.ch>
 
-       * etc/NEWS (Incompatible Lisp Changes): Document new restriction on `setq'.
+       Make relative URL parsing and resolution consistent with RFC 3986 (bug#22044)
 
-2015-11-23  Alan Mackenzie  <acm@muc.de>
+       * test/lisp/url/url-parse-tests.el: Add tests covering url-generic-parse-url.
+       * test/lisp/url/url-expand-tests.el: Add tests covering url-expand-file-name.
+       * lisp/url/url-parse.el (url-generic-parse-url): Keep empty fragment
+       information in URL-struct.
+       * lisp/url/url-parse.el (url-path-and-query): Do not artificially turn empty
+       path and query into nil path and query, respectively.
+       * lisp/url/url-expand.el (url-expander-remove-relative-links): Do not turn
+       empty path into an absolute ("/") path.
+       * lisp/url/url-expand.el (url-expand-file-name): Properly resolve
+       fragment-only URIs. Do not just return them unchanged.
+       * lisp/url/url-expand.el (url-default-expander): An empty path in the relative
+       reference URI should not drop the last segment.
 
-       Expunge occurrences of `setq' with an odd number of arguments.
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/apropos.el (apropos-documentation):
-       * lisp/obsolete/complete.el (PC-include-file-all-completions):
-       * lisp/progmodes/compile.el (compilation-goto-locus):
-       * lisp/vc/vc-cvs.el (vc-cvs-parse-root): (twice)
-       Insert missing nil at end of `setq' forms.
+       Let url use default file modes when copying files
 
-       * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form-autoload): Remove an
-       erroneous trailing variable name from a setq, thus allowing a compilation
-       properly to track functions not defined at runtime.
+       * lisp/url/url-handlers.el (url-copy-file): Use default file
+       modes when copying files (bug#11400).
 
-2015-11-23  John Wiegley  <johnw@newartisans.com>
+2015-12-25  Devon Sean McCullough  <Emacs-Hacker2012@jovi.net>
 
-       Add a note about a questionable use of bool in xdisp.c
+       Doc fix for url-http
 
-2015-11-23  Alan Mackenzie  <acm@muc.de>
+       * lisp/url/url-http.el (url-http): Document better return values
+         (bug#13187) (tiny change)
 
-       Issue a warning from the byte compiler on a malformed `setq' form.
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Partly fixes bug#20241.
-       * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): Issue a warning when a
-       `setq' form with an odd number of arguments is compiled.
+       * eww.el (eww-display-html): Support <button> tags (bug#20485).
 
-2015-11-23  Alan Mackenzie  <acm@muc.de>
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Don't let cconv_convert insert a nil argument into a `setq' form.
+       Made ffap-url-p a defun instead of a defsubst
 
-       Fixes bug#21983.
-       * lisp/emacs-lisp/cconv.el (cconv-convert): Don't silently insert a nil last
-       argument into a `setq' when there're an odd number of args.  This enables the
-       byte compiler to issue a message in this case.
+       * lisp/ffap.el (ffap-url-p): Change from defsusbt to defun,
+       since there doesn't seem to be much of a reason for it to be a
+       defsubst (bug#18203).
 
-2015-11-23  Alan Mackenzie  <acm@muc.de>
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Signal an error when `setq' has an odd number of arguments.  Fixes bug#20241.
+       Add a command to view files in the browser to dired
 
-       * src/eval.c (Fsetq): Signal an error on an odd number of arguments.
-       (syms_of_eval): Add a DEFSYM for Qsetq.
+       * lisp/dired.el (dired-mode-map): Add the `W' command
+       (bug#18810).
 
-2015-11-23  Martin Rudalics  <rudalics@gmx.at>
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * doc/lispref/windows.texi (Window Sizes): Fix indices and references.
+       Allow http://user:pass@foo/ URLs again
 
-       * src/frame.c (adjust_frame_size): Set FRAME_WINDOW_SIZES_CHANGED (Bug#21975).
+       * lisp/url/url-auth.el (url-basic-auth): Allow explicit
+       user/passwords in URLs (bug#19046).
 
-2015-11-23  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Add EUDC BBDB 3 entry in NEWS
+       * eww.el (eww-mode-map): Fix command name of eww-toggle-colors.
 
-       * NEWS: Mention EUDC BBDB backend support for BBDB 3.
+2015-12-25  Samer Masterson  <samer@samertm.com>
 
-2015-11-23  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+       Autoload url-insert-buffer-contents
 
-       Improve EUDC to BBDB 3 export
+       * lisp/url/url-handlers.el: Add autoload cookie so that
+       `package-list-packages' doesn't bug out (bug#21927) (tiny change)
 
-       * lisp/net/eudc-vars.el (eudc-ldap-bbdb-conversion-alist): Change phone
-       entry to single item.  Add company conversion.
-       * lisp/net/eudc-export.el (eudc-bbdbify-company): New function.
-       (bbdb-parse-phone): Declare function.
-       (eudc-bbdbify-phone): Add BBDB 3 support.
-       (Bug#21971)
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2015-11-23  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+       Allow toggling colors in eww
 
-       Add BBDB 3 support for EUDC export
+       * doc/misc/eww.texi (Basics): Mention "C".
 
-       * lisp/net/eudc.el: Add bbdb-version defvar.
-       (eudc--using-bbdb-3-or-newer-p): New function.
-       * lisp/net/eudc-export.el (eudc-create-bbdb-record): Add support for
-       bbdb-create-internal argument list changes introduced in BBDB 3.
-       * lisp/net/eudcb-bbdb.el: Remove bbdb-version defvar.
-       (eudc-bbdb-field): Call eudc--using-bbdb-3-or-newer-p.
-       (Bug#21971)
+       * lisp/net/eww.el (eww-toggle-colors): New command and keystroke.
 
-2015-11-22  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/net/shr.el (shr-use-colors): New variable.
+       (shr-colorize-region): Use it.
 
-       Allow loading modules by 'load-file'
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/lread.c (Fload): Call 'unbind_to' with 'Fmodule_load' as the
-       2nd arg, to avoid the "binding stack not balanced" error.
-       (syms_of_lread) <module-file-suffix>: New Lisp variable.
+       Follow meta refresh tags in eww
 
-       * lisp/files.el (module-file-suffix): Declare.
-       (load-file): Remove 'module-file-suffix' from
-       'completion-ignored-extensions', to allow completion on modules.
+       * eww.el (eww-tag-meta): Follow meta refresh tags (bug#22234).
 
-       * etc/NEWS: Mention 'module-file-suffix'.
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2015-11-22  Eli Zaretskii  <eliz@gnu.org>
+       More eww file name coding fixes
 
-       Fix unoptimized builds
+       * eww.el (eww-decode-url-file-name): Use the base coding
+       system to check for encodability.
 
-       * src/lisp.h (XTYPE): Move before XSYMBOL, to fix unoptimized
-       builds.
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2015-11-22  Dmitry Gutov  <dgutov@yandex.ru>
+       Always save eww history
 
-       Work around the asynchronous-empty-diff problem
+       * eww.el (eww-setup-buffer): Always save history, even when
+       called from outside the eww buffer (bug#19638).
 
-       * lisp/vc/vc-rcs.el (vc-rcs-diff):
-       * lisp/vc/vc-mtn.el (vc-mtn-diff):
-       * lisp/vc/vc-hg.el (vc-hg-diff):
-       * lisp/vc/vc-git.el (vc-git-diff): Ignore the ASYNC argument,
-       do a synchronous process call (bug#21969).
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-2015-11-22  Karl Fogel  <kfogel@red-bean.com>
+       Default web pages to right-to-left
 
-       Finish excising electric indent from `open-line'
+       * eww.el (eww-mode): Most web pages are left-to-right, so make
+       that the default (bug#19801).
 
-       * lisp/simple.el (open-line): Remove INTERACTIVE argument.
+       * shr.el (shr-tag-html): Respect "dir" attributes
+       (left-to-right, right-to-left).
 
-       * test/automated/simple-test.el (open-line-indent, open-line-hook):
-         Adjust accordingly.
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       This change finishes what my commit of Thu Nov 19 17:32:37 2015 -0600
-       (git commit c59353896) started.  It turns out that having INTERACTIVE
-       cause `post-self-insert-hook' to run (via `newline') meant `open-line'
-       still had the electric indent behavior, as `post-self-insert-hook'
-       normally contains `electric-indent-post-self-insert-function' ever
-       since `electric-indent-mode' has been on by default.  Tracing the code
-       change in `open-line' is mildly twisty, because Artur Malabarba's
-       earliest two commits of 24 Oct 2015 first removed the `interactive'
-       form entirely (git commit 6939896e2) and then restored it with the new
-       extra "p" already added (git commit bd4f04f86), such that there is no
-       single-commit diff in which one sees the second "p" appear.  Thus this
-       change is effectively a reversion of parts of each of those commits.
+       Make toggling checkboxes work again
 
-       This could close bug#21884, at least until further discussion.
+       * eww.el (eww-update-field): Make toggling checkboxes work
+       again (bug#21881).
 
-2015-11-22  Dmitry Gutov  <dgutov@yandex.ru>
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Adhere closer to the "implicit tag name" definition
+       Don't store cookies with empty names
 
-       * lisp/progmodes/etags.el (etags-tags-completion-table):
-       Adhere closer to the "implicit tag name" definition.  Simplify
-       the regexp.  Search for the explicit tag name first, and when
-       not found, search locally for the implicit one.  (Bug#21934)
+       * lisp/url/url-cookie.el (url-cookie-store): Refuse to store
+       cookies with empty names (bug#21936).
 
-2015-11-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Unrevert most of regexp reentrancy abort patch
+       * shr.el (shr-descend): Stop rendering before we run out of
+       specpdl room (bug#22117).
 
-       The problem was in:
-         * src/syntax.c (update_syntax_table_forward): Propertize even when truncated
-       which is hence not unreverted.
-       The rest is:
-       * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
-       (UPDATE_SYNTAX_TABLE_FAST): Re-introduce.
-       All callers in regex.c changed back to the _FAST versions.
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * test/automated/message-mode-tests.el: Tweak the test to rely on auto
-       propertization in backward-sexp.
+       Use cl-reduce, not reduce.
 
-2015-11-21  Paul Eggert  <eggert@cs.ucla.edu>
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Revert regexp reentrancy abort patch
+       Allow several <tbody> tags in shr
 
-       Although the patch does fix Bug#21688 and prevents a core dump,
-       it also makes the message-mode-propertize test fail; see:
-       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01667.html
-       Perhaps someone else can come up with a better fix some day.
-       * src/syntax.c (update_syntax_table_forward):
-       Propertize even when truncated.
-       * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
-       (UPDATE_SYNTAX_TABLE_FAST): Remove.
-       All callers changed back to the non-_FAST versions.
+       * shr.el (shr-table-body): New function to find the real body
+       of a table.
+       (shr-tag-table): Use it to render several <tbody> tags in a
+       table (bug#22170).
 
-2015-11-21  Paul Eggert  <eggert@cs.ucla.edu>
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Add a few safety checks when ENABLE_CHECKING
+       Make prettier unique file names in eww
 
-       This was motivated by the recent addition of module code,
-       which added some ENABLE_CHECKING-enabled checks that are
-       useful elsewhere too.
-       * src/alloc.c (compact_font_cache_entry):
-       * src/fns.c (sweep_weak_table):
-       * src/lread.c (oblookup):
-       Use gc_asize rather than doing it by hand.
-       * src/emacs-module.c (module_make_global_ref)
-       (module_free_global_ref, module_vec_size):
-       Omit assertions that lisp.h now checks.
-       * src/lisp.h (XFASTINT, ASIZE): In functional implementations,
-       check that the result is nonnegative.  Use eassume, as this
-       info can help a bit when optimizing production code.
-       (XSYMBOL) [!USE_LSB_TAG]: Assert that argument is a symbol,
-       to be consistent with the USE_LSB_TAG case.
-       (gc_asize): New function, when ASIZE is needed in the gc.
-       (gc_aset): Use it.
-       (HASH_TABLE_P): Move definition up, so that it can be used ...
-       (XHASH_TABLE): ... here, to assert that the arg is a hash table.
+       (eww-make-unique-file-name): Make unique file names by making
+       files like foo(2).jpg instead of foo(1)(2).jpg.
 
-2015-11-21  Eli Zaretskii  <eliz@gnu.org>
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Simplify recording of main thread's ID on MS-Windows
+       Decode hex-encoded URLs before using them as file names
 
-       * src/w32term.c (w32_initialize):
-       * src/w32console.c (initialize_w32_display):
-       * src/w32fns.c (globals_of_w32fns): Don't record the main thread
-       ID independently for each type of session (GUI, TTY, batch).
-       * src/w32term.c (w32_init_main_thread): New function, records the
-       main thread's thread ID.
-       * src/w32term.h: Add prototype for w32_init_main_thread.
-       * src/emacs.c (main) [WINDOWSNT]: Call w32_init_main_thread.
+       * eww.el (eww-decode-url-file-name): New function.
+       (eww-download-callback): Use it to decode file names before
+       saving them.
 
-       * src/emacs-module.c [WINDOWSNT]: Rename main_thread_id to
-       main_thread, for consistency with other threading libraries.  All
-       users changed.  Include w32term.h.
-       (check_main_thread) [WINDOWSNT]: Simplify the test: no need to
-       make sure the main thread is alive, as we hold a handle on it
-       opened by w32_init_main_thread.
-       (module_init) [WINDOWSNT]: Reuse the thread ID recorded by
-       w32_init_main_thread, instead of calling the requisite APIs once
-       more.
+2015-12-24  Ashish SHUKLA  <ashish.is@lostca.se>  (tiny change)
 
-2015-11-21  Mark Oteiza  <mvoteiza@udel.edu>
+       * doc/misc/emacs-gnutls.texi (Help For Users): Document FreeBSD bundle.
+       * lisp/net/gnutls.el (gnutls-trustfiles): Add FreeBSD cert bundle.
 
-       Backport: Fix issue where a new tempfile was created every refresh
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/mpc.el (mpc-format): Leave dir as relative path
+       Allow overriding shr functions from eww
 
-2015-11-21  Eli Zaretskii  <eliz@gnu.org>
+       * eww.el (eww-display-html): Allow overriding elements in
+       `shr-external-rendering-functions'.
 
-       Call 'window-size-change-functions' for mini-windows
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       * src/window.c (grow_mini_window, shrink_mini_window): Set the
-       frame's 'window_sizes_changed' flag.
-       * src/xdisp.c (redisplay_internal): Call the hooks on
-       'window-size-change-functions' if the call to 'echo_area_display'
-       sets the frame's 'window_sizes_changed' flag.
-       (syms_of_xdisp) <window-size-change-functions>:
-       Update doc string to indicate the mini-window resizes trigger a
-       call to the hooks, and don't promise that will happen "before
-       redisplay".  (Bug#19576, Bug#21333)
+       Ignore invalid SVG images
 
-       * doc/lispref/windows.texi (Window Hooks): Update the description
-       of 'window-size-change-functions'.
+       * shr.el (shr-tag-svg): Ignore SVG images that have no width
+       or height, because these can't be displayed by ImageMagick,
+       anyway.
 
-2015-11-21  Eli Zaretskii  <eliz@gnu.org>
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Improve documentation of dynamic modules
+       shr table rendering fix
 
-       * src/fns.c (Frequire): Doc fix to include the dynamic module
-       support.
-       * src/lread.c (Fload, Vload_suffixes): Doc fixes to include the
-       dynamic module support.
-       (Fload): Treat the module suffix the same as '*.el' and '*.elc'
-       wrt the MUST-SUFFIX argument.
+       * shr.el (shr-tag-table): Allow rendering body-less tables
+       that have headers.
 
-       * etc/NEWS: Expand documentation of dynamically loaded modules.
+2015-12-22  Sam Steingold  <sds@gnu.org>
 
-2015-11-21  Philipp Stephani  <phst@google.com>  (tiny change)
+       clipboard should still work even if interprogram-* is disabled
 
-       Initial documentation for dynamic modules
+       (clipboard-yank): When `interprogram-cut-function' is nil,
+       bind it to `gui-selection-value' - the default value.
+       (clipboard-kill-region, clipboard-kill-ring-save): When
+       `interprogram-paste-function' is nil, bind it to `gui-select-text' -
+       the default value.
 
-       * etc/NEWS: Mention the new support for dynamically loaded modules.
+2015-12-18  Phillip Lord  <phillip.lord@russet.org.uk>
 
-2015-11-21  Dmitry Gutov  <dgutov@yandex.ru>
+       Fix bootstrap issue with dired-loaddefs
 
-       Add xref--etags-backend to xref-backing-functions using add-hook
+       * lisp/dired.el: Autoloads for secondary files loaded optionally.
 
-       * lisp/progmodes/xref.el (xref-backend-functions): Move the
-       default value into a separate `add-hook' call (bug#21964).
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
-       Don't declare the xref-backend-functions variable.
-       It doesn't make any difference.
+       dired generate autoloads to non-versioned file.
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/dired.el: Remove autoloads.
+       * lisp/Makefile.in: Add dired to autogenel.
+       * lisp/dired-aux.el,lisp/dired-x.el: Update file local.
+       * test/lisp/dired-tests.el: Add new test.
 
-       Fix double-decrement bug when freeing global refs
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       * src/emacs-module.c (module_free_global_ref): Add a FIXME
-       comment about error reporting.  Fix a recently-introduced typo
-       that double-decremented the refcount.
+       eieio generate autoloads to non-versioned file.
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/Makefile.in: eieio-loaddefs add to autogenel.
+       * lisp/emacs-lisp/eieio.el,lisp/emacs-lisp/eieio-core.el:
+         Remove autoloads.
+       * lisp/emacs-lisp/eieio-compat.el,lisp/emacs-lisp/eieio-custom.el,
+         lisp/emacs-lisp/eieio-opt.el: Update file local.
+       * test/lisp/emacs-lisp/eieio-tests/eieio-tests.el: New test.
 
-       Declare emacs_module_init in the module API
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       * src/emacs-module.h (emacs_module_init): New decl.
-       Without it, GCC might complain about a module that defines
-       emacs_module_init without using it.  This also checks the
-       API better.
+       htmlfontify generate autoload to non-versioned file.
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/Makefile.in: Add htmlfontity-loaddefs to autogenel.
+       * lisp/hfy-cmap.el: Update file local.
+       * lisp/htmlfontify.el: Remove autoloads, add require.
+       * test/lisp/htmlfontify-tests.el: Test autoload functionality.
 
-       Fix module test to use ptrdiff_t nargs too
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       * modules/mod-test/mod-test.c (Fmod_test_return_t)
-       (Fmod_test_sum, Fmod_test_signal, Fmod_test_throw)
-       (Fmod_test_non_local_exit_funcall, Fmod_test_globref_make)
-       (Fmod_test_string_a_to_b, Fmod_test_userptr_make)
-       (Fmod_test_userptr_get, Fmod_test_vector_fill)
-       (Fmod_test_vector_eq): Arg counts are ptrdiff_t, not int.
-       (finalizer): Remove; no longer used.
+       ibuffer generate autoloads to non-versioned file.
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/Makefile.in: Add ibuffer-loaddefs to autogenel.
+       * lisp/ibuf-ext.el: Update file local.
+       * lisp/ibuffer.el: Remove autoloads and add a require.
+       * test/lisp/ibuffer-tests.el: Test that autoload is working.
 
-       Fix reindent-introduced typo in module code
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       * src/emacs-module.c (MODULE_SETJMP_1): Fix typo that I
-       introduced while reindenting the code earlier, and add a
-       comment explaining the unusual use of do-while here.
+       rmail generate autoloads to non-versioned file.
 
-2015-11-20  Anders Lindgren  <andlind@gmail.com>
+       * lisp/Makefile.in: Add rmail-loaddefs.el to autogenel.
+       * lisp/mail/rmail.el: Remove autoloads, add require.
+       * lisp/mail/rmailedit.el,lisp/mail/rmailkwd.el,
+         lisp/mail/rmailmm.el,lisp/mail/rmailmsc.el,
+         lisp/mail/rmailsort.el,lisp/mail/rmailsum.el,
+         lisp/mail/undigest.el: Update file-local.
+       * test/lisp/mail/rmail-tests.el:
 
-       Fixed bug#19576: `write-file' saves wrong buffer.
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       If a function on the hook `window-size-change-functions' doesn't
-       restore the current buffer, functions that save and restore the
-       current window configuration (like `y-or-no-p') could silently
-       change the current buffer.  When `write-file' asked the user
-       confirmation to overwrite a file, `y-or-no-p' changed the current
-       buffer, and the wrong buffer was saved to the file.
+       Add autoload-force target.
 
-       * lisp/follow.el (follow-windows-start-end): Call `select-frame'
-       using the `norecord' parameter.
-       (follow-window-size-change): Restore current buffer. Call
-       `select-frame' using the `norecord' parameter. Cleanup.
+       * lisp/Makefile.in (autoload-force): New target.
 
-2015-11-20  John Wiegley  <johnw@newartisans.com>
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       Correct a documentation error in frames.texi
+       ps-print generate autoloads to non versioned file.
 
-2015-11-20  Stephen Leake  <stephen_leake@stephe-leake.org>
+       * lisp/Makefile.in: Add ps-print-loaddefs.el to autogen list.
+       * lisp/ps-print.el: Remove autoloads.
+       * lisp/ps-mule.el: Update file-local.
+       * test/lisp/ps-print-tests.el: Test autoload functionality.
 
-       * lisp/cedet/mode-local.el: Delete obsolete comment
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+       reftex generate autoloads to non versioned file.
 
-       Module function arg counts are ptrdiff_t, not int
+       * lisp/Makefile.in: Add reftex-loaddefs to autogen files
+       * lisp/textmodes/reftex.el: Remove autoloads.
+       * lisp/textmodes/reftex-auc.el,lisp/textmodes/reftex-cite.el,
+         lisp/textmodes/reftex-dcr.el,lisp/textmodes/reftex-global.el,
+         lisp/textmodes/reftex-index.el,lisp/textmodes/reftex-parse.el,
+         lisp/textmodes/reftex-ref.el,lisp/textmodes/reftex-sel.el,
+         lisp/textmodes/reftex-toc.el: Update autoload file-local.
+       * test/lisp/textmodes/reftex-tests.el: Add test of an autoloaded
+         function.
 
-       * src/emacs-module.c (struct module_fun_env)
-       (module_make_function, module_funcall, Fmodule_call):
-       * src/emacs-module.h (struct emacs_runtime, struct emacs_env_25):
-       Use ptrdiff_t, not int, for arg counts.
-       * src/emacs-module.c (module_make_function): Don’t bother
-       checking arity against MOST_POSITIVE_FIXNUM, as that’s
-       unnecessary here.  Make the checking clearer by negating it.
-       (module_make_function, Fmodule_call): No need to use xzalloc
-       since the storage doesn’t need to be cleared.
-       (module_funcall): Don’t use VLA, since C11 doesn’t guarantee support
-       for it, and many implementations are buggy with large VLAs anyway.
-       Use SAFE_ALLOCA_LISP instead.
-       (module_vec_set): Don’t crash if i < 0.
-       (module_vec_get): Don’t crash if i < MOST_NEGATIVE_FIXNUM.
-       (module_vec_set, module_vec_get): Do fixnum checks only when
-       i is out of array bounds, for efficiency in the usual case.
-       (Fmodule_load): Simplify fixnum range check.
-       (Fmodule_call): Simplify arity check.  Use xnmalloc to detect
-       integer overflow in array allocation size.
+2015-12-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calculator.el (calculator-define-key): Undo last change
+
+       Make map argument mandatory instead (bug#22106).
+       (calculator-add-operators): Pass the argument that's not optional any more.
 
-2015-11-20  Eli Zaretskii  <eliz@gnu.org>
+2015-12-03  Glenn Morris  <rgm@gnu.org>
 
-       Minor improvements in module test
+       * Makefile.in: Avoid duplication.
 
-       * modules/mod-test/mod-test.c: Include stdlib.h, to avoid warnings
-       about missing prototype of malloc.
-       * modules/mod-test/Makefile (CFLAGS): Add -std=gnu99, to avoid
-       compiler warnings.
+       (have-tests): New rule.
+       (check, check-maybe): Use it.
 
-2015-11-20  Eli Zaretskii  <eliz@gnu.org>
+2015-12-02  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       Improve MS-Windows implementation in dynlib.c
+       make check unconditional, check-maybe top-level.
 
-       * src/dynlib.c [WINDOWSNT]: Include errno.h, lisp.h, and w32.h.
-       No need to include windows.h, as w32.h already does that.
-       <dynlib_last_err>: New static variable.
-       (dynlib_reset_last_error): New function.
-       (dynlib_open): Convert forward slashes to backslashes.  Convert
-       file names from UTF-8 to either UTF-16 or the current ANSI
-       codepage, and call either LoadLibraryW or LoadLibraryA.  If the
-       argument is NULL, return a handle to the main module, like
-       'dlopen' does.  Record the error, if any, for use by dynlib_error.
-       (dynlib_sym): Check the handle for validity. Record the error, if
-       any, for use by dynlib_error.
-       (dynlib_error): Call w32_strerror to produce the error string, and
-       zero out the last error code, like dlerror does.
-       (dynlib_close): Check the handle for validity.  Record the error,
-       if any, for use by dynlib_error.  Don't call FreeLibrary with a
-       handle for the main module.
-       * src/w32.c (globals_of_w32): Call dynlib_reset_last_error.
+        * Makefile.in: Add check-maybe target.
+        * test/Makefile.in: Restore unconditional behaviour to make check.
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+2015-12-01  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       Include-file tweaks for modules
+       Tests now support out-of-source-build.
 
-       * src/dynlib.c, src/emacs-module.c: Include <config.h> first.
-       * src/dynlib.h: Do not include config.h.
-       It’s every .c file’s responsibility to include config.h first.
-       * src/emacs-module.c: Include emacs-module.h immediately after
-       config.h, to test that emacs-module.h doesn’t depend on
-       include files other than config.h.
+        * tests/Makefile.in,test/make-test-deps.emacs-lisp: Remove assumptions
+          about current working directory.
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+2015-12-01  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       Simplify push_handler and profile its malloc
+       * lisp/emacs-lisp/let-alist.el: Now an Elpa :core package
 
-       * src/lisp.h (PUSH_HANDLER): Remove.
-       All callers changed to use push_handler directly.
-       * src/eval.c (internal_condition_case)
-       (internal_condition_case_1, internal_condition_case_2)
-       (internal_condition_case_n):
-       Use same pattern as for other invokers of push_handler.
-       (push_handler, push_handler_nosignal): Use call-by-value
-       instead of call-by-reference.  All uses changed.
-       (push_handler): Simplify by rewriting in terms of
-       push_handler_nosignal.
-       (push_handler_nosignal): Profile any newly allocated memory.
+2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+       Improve documentation and clean up.
 
-       * src/emacs-module.h: Include stddef.h, not stdlib.h.
+        * test/Makefile.in: Improve documentation, use EMACS variable
+          correctly, and clean up makefile rules.
 
-2015-11-20  Juanma Barranquero  <lekktu@gmail.com>
+2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       Discover repository version in linked worktrees (bug#21930)
+       Update file headers for name change.
 
-       * lisp/version.el (emacs-repository--version-git-1): Do not assume
-       HEAD is at .git/HEAD, it can also be at .git/worktrees/<branch>/HEAD.
-       (emacs-repository-get-version): Grok linked worktrees when EXTERNAL
-       is nil too.
+        * (test/src/decompress-tests.el, test/src/alloc-tests.el): Update headers.
 
-2015-11-20  Juri Linkov  <juri@linkov.net>
+2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       * lisp/replace.el (occur-regexp-descr): New function.
-       (occur-1, occur-engine): Use it.
+       Test files renamed to new scheme.
 
-       * lisp/isearch.el (isearch-occur): Propertize regexp with
-       isearch-string and isearch-regexp-function-descr for
-       occur-regexp-descr to display the correct description
-       message in the header (bug#21176, bug#21180).
+        * (finalizer-tests.el): Now renamed alloc-tests.el
+        * (zlib-tests.el): Now renamed decompress-tests.el.
 
-2015-11-20  Karl Fogel  <kfogel@red-bean.com>
+2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       Revert `open-line' electric-indent sensitivity
+       Tests now depend on source files
 
-       * lisp/simple.el (open-line): Remove electric indent code.
-         (electric-indent-just-newline): Don't declare.
+        * test/Makefile.in: Include dependences from tests to source files.
+        * test/make-test-deps.emacs-lisp: New file
+        * .gitignore: Ignore generated make include file
 
-       * test/automated/simple-test.el (open-line-indent): Adjust test.
+2015-11-30  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       This partly reverts Artur Malabarba's change that added electric
-       indent sensitivity to `open-line' (Oct 24 22:26:27 2015 +0100, git
-       commit bd4f04f86), and adjusts a new test he added right afterwards
-       (Sat Oct 24 23:43:06 2015 +0100, git commit 207f235e3) accordingly.
-       However, the new INTERACTIVE argument to `open-line', which he also
-       added in the first commit, is not reverted here.
+       * lisp/progmodes/which-func.el: Improve disabling the mode
 
-       See the thread "Questioning the new behavior of `open-line'." on the
-       Emacs Devel mailing list, and in particular this message:
+       Use lexical-binding.
+       (which-func-modes, which-func-non-auto-modes, which-func-maxout)
+       (which-func, which-func-format): Remove redundant :group arg.
+       (which-func-try-to-enable): New function.
+       (which-func-ff-hook, which-function-mode): Use it.
+       (mode-line-misc-info): Add ourselves here instead of in bindings.el.
+       * lisp/bindings.el (mode-line-misc-info): Remove which-func-mode entry.
 
-         From: Artur Malabarba
-         Subject: Re: Questioning the new behavior of `open-line'.
-         To: Karl Fogel
-         Cc: David Kastrup, Pierpaolo Bernardi, emacs-devel
-         Date: Wed, 18 Nov 2015 21:03:58 +0000
-         Message-ID: \
-           <CAAdUY-KN06pvCMy5bt3+Buk3yeKjf6n9iB2FaSTTOPpCqPwyhA@mail.gmail.com>
+2015-11-30  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-         https://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01707.html
+       * lisp/calculator.el (calculator-define-key): Silence warning
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+       ...about unknown calculator-mode-map.
 
-       Omit unnecessary clear in Fmodule_load
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
 
-       * src/emacs-module.c (Fmodule_load):
-       Simplify and avoid unnecessary initialization of priv member to 0.
+       * lisp/calculator.el: more improvements and bugfixes.
 
-       * src/emacs-module.c: (module_vec_set, module_vec_get, module_vec_size)
+       - Mark `calculator-paste-decimals' as obsolete.  (It wasn't having an
+         effect anyway.)
 
-2015-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+       - Simplify `calculator-number-to-string' by throwing most of the work
+         onto `number-to-string', leaving just some tweaks for decimal inputs.
+         This leads to some minor changes, for example, pasting "1x1" in hex
+         mode would warn that "x" is ignored and result in "11" (and it wasn't
+         done in decimal mode), whereas now it just ignores everything from the
+         "x" and on and result in a "1" just like in decimal input mode.  Also,
+         overflows are left for `number-to-string' to deal with.
 
-       Prefer signed integer types in module code
+       - `calculator-paste' is very simple as a result.
 
-       Generally speaking, at the C level the Emacs source code prefers
-       signed types like ‘ptrdiff_t’ to unsigned types like ‘size_t’,
-       partly to avoid the usual signedness confusion when comparing values.
-       Change the module API to follow this convention.
-       Use ‘int’ for small values that can’t exceed INT_MAX.
-       * modules/mod-test/mod-test.c (Fmod_test_globref_make)
-       (Fmod_test_string_a_to_b, Fmod_test_vector_fill)
-       (Fmod_test_vector_eq):
-       * src/emacs-module.c (struct emacs_value_frame)
-       (module_make_global_ref, module_free_global_ref)
-       (module_copy_string_contents, module_make_string)
-       (module_vec_set, module_vec_get, module_vec_size):
-       * src/emacs-module.h (struct emacs_runtime, struct emacs_env_25):
-       * src/lread.c (suffix_p):
-       Prefer signed to unsigned integer types.
+       - Extend the simplified `calculator-paste': with a prefix argument it
+         pastes a string as if the characters were entered.  This can be used
+         to reduce expressions, but note that it's a simple literal operation,
+         so precedence can be messed, a number can be paster while entering a
+         number, spaces and newlines matter, etc.
 
-2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
+       - Fix a minor bug where "e+" in hex mode wouldn't use "+" as an
+         operator.
 
-       Omit ‘const’ on locals
+       - Fix a bug in `calculator-put-value': avoid grouping in the display
+         that is used to construct `calculator-curnum'.  This would trigger
+         when pasting or getting a value from a register in some radix mode
+         with a large enough value.  Another fix: make the output radix equal
+         the input one, otherwise numbers could be converted twice.
 
-       Remove ‘const’ qualifier from locals that were newly added.
-       We don’t normally bother declaring locals with ‘const’ even
-       though they are not modified, for the same reason we don’t
-       bother declaring them with ‘register’ even though their
-       addresses are not taken; the advantage in compile-time
-       checking isn’t worth the loss of readability.
-       * modules/mod-test/mod-test.c (Fmod_test_non_local_exit_funcall)
-       (Fmod_test_vector_fill, Fmod_test_vector_eq):
-       * src/emacs-module.c (MODULE_SETJMP_1)
-       (module_make_global_ref, module_free_global_ref)
-       (module_non_local_exit_get, module_make_function)
-       (module_extract_integer, module_extract_float)
-       (module_get_user_ptr, module_set_user_ptr)
-       (module_get_user_finalizer, module_set_user_finalizer)
-       (module_vec_get, Fmodule_call)
-       (module_non_local_exit_signal_1)
-       (module_non_local_exit_throw_1, lisp_to_value)
-       (finalize_storage, allocate_emacs_value, mark_modules)
-       (module_handle_signal, module_handle_throw)
-       (module_format_fun_env):
-       * src/eval.c (push_handler, push_handler_nosignal)
-       (init_handler):
-       * src/lread.c (suffix_p):
-       Omit unnecessary ‘const’.
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
 
-2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/calculator.el: Re-do key bindings.
 
-       Prefer intmax_t to int64_t in module code
+       Use a helper function that arranges a parent keymap that binds alternate
+       case keys so if some letter key is unbound and it's un/shifted version
+       is, it will get used.  This makes the global-map trickery unnecessary.
 
-       * modules/mod-test/mod-test.c (sum, Fmod_test_sum):
-       * src/emacs-module.c (module_extract_integer)
-       (module_make_integer):
-       * src/emacs-module.h (struct emacs_env_25):
-       Prefer intmax_t to int64_t.  This doesn’t change the generated
-       code on any of the machines Emacs currently ports to, but it’s
-       at least in theory more future-proof as C99 doesn’t guarantee
-       that int64_t exists.
+       Also switch to passing strings that name keys through `kbd'.
 
-2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
 
-       Rename module.c to emacs-module.c, etc.
+       * lisp/calculator.el: improve radix modes
 
-       * src/emacs-module.c: Rename from src/module.c.
-       * src/emacs-module.h: Rename from src/module.h.
-       All uses changed.
+       Fix prompt for some input radix with decimal output (eg, "BD" instead of
+       the incorrect "B="); also, some minor docstring tweaks for these.
 
-2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
 
-       Fix minor module problems found by static checking
+       * lisp/calculator.el: better reading of register names
 
-       * src/dynlib.c (dynlib_close): #ifdef out for now, as it’s not used.
-       * src/eval.c, src/lisp.h (lisp_eval_depth): Now static.
-       * src/emacs-module.c (Fmodule_load): Fix pointer signedness bug.
-       (Fmodule_call): Tell GCC that the default case is unreachable.
+       Use `register-read-with-preview' with a dynamically bound
+       `register-alist' and a proper preview function to read register names.
 
-2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
 
-       Style fixes for indenting etc. in module code
+       * lisp/calculator.el: General improvements
 
-       This is mostly indenting and spacing changes.  Also, remove
-       some unnecessary static decls instead of bothering to reindent them.
-       * src/emacs-module.h (EMACS_EXTERN_C_BEGIN): Remove, and do this inline,
-       as most other Emacs files do for this sort of thing.
+       Use things like `when', `unless', and `push'.
 
-2015-11-19  Eli Zaretskii  <eliz@gnu.org>
+       Improve `calculator-last-input' so it doesn't barf when hitting `F1' in
+       non-electric mode.
 
-       Minor improvements in modules testing Makefile
+2015-11-28  Michael Albinus  <michael.albinus@gmx.de>
 
-       * modules/mod-test/Makefile (EMACS, SO): New variables.
-       (CFLAGS): When SO = dll, don't use -fPIC.
-       (check): New target, runs the test.
+       Fix a problem with gfilenotify in filenotify-tests.el
 
-2015-11-19  Eli Zaretskii  <eliz@gnu.org>
+       * test/lisp/filenotify-tests.el
+       (file-notify--test-expected-events): Remove.
+       (file-notify--test-cleanup): Do not set that variable.
+       (file-notify--test-with-events): EVENTS can also be a list of lists.
+       (file-notify-test02-events, file-notify-test04-file-validity):
+       Adapt expected result.
 
-       * .gitignore: Add "*.dll".
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
 
-2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
+       * .gitignore: Adjust to changes in 'test' directory structure.
 
-       Migrate modules/.gitignore into .gitignore
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
 
-       * .gitignore: Add former contents of modules/.gitignore.
-       * modules/.gitignore: Remove.
+       Fix test/manual/etags/Makefile
 
-2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
+       * test/manual/etags/Makefile (ETAGS_PROG, CTAGS_PROG): Adjust to
+       changes in 'test' directory structure.
 
-       Add copyright notices to module code
+2015-11-27  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       Put them in the usual format for GNU Emacs copyright notices.
+       Exclude resource dirs from search for tests.
 
-2015-11-19  Paul Eggert  <eggert@cs.ucla.edu>
+       * test/Makefile.in: Test file locations are now found with find
+         rather than using finds native functions.
 
-       Rename emacs_module.h to module.h
+2015-11-27  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       * src/module.h: Rename from src/emacs_module.h.
-       All uses changed.
+       Add test targets without directory names.
 
-2015-11-19  Juanma Barranquero  <lekktu@gmail.com>
+        * (test/Makefile.in): Extend test_template to add two targets for each
+          file.
 
-       * src/module.c (Fmodule_load): Remove unused vars `doc_name', `args'
+2015-11-27  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-       * src/lread.c (Fload): Remove unused variable `size'
+       * lisp/emacs-lisp/package.el: Require url-handlers
 
-2015-11-19  Alan Mackenzie  <acm@muc.de>
+2015-11-27  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       src/keyboard.c (pre-command-hook): Fix typo in doc string: "pre" -> "post".
+       Move elisp-mode-tests to new function names.
 
-2015-11-19  Dmitry Gutov  <dgutov@yandex.ru>
+        * test/lisp/progmodes/elisp-mode-tests.el (find-defsdefun-c-defvar-c,
+        find-defs-defun-el-defvar-c): Call `elisp--xref-find-definitions'.
 
-       Prioritize looking inside vc-parent-buffer over log-view-mode fallback
+2015-11-27  Juanma Barranquero  <lekktu@gmail.com>
 
-       * lisp/vc/vc.el (vc-deduce-fileset): Prioritize looking inside
-       vc-parent-buffer over log-view-mode fallback (bug#21955).
+       * lisp/emacs-lisp/package.el: Declare `url-insert-buffer-contents'
 
-2015-11-18  Alan Mackenzie  <acm@muc.de>
+2015-11-26  Phillip Lord  <phillip.lord@russet.org.uk>
 
-       lisp/isearch.el: Eliminate macro isearch-call-message, replacing with funcall.
+       Merge branch 'feature/standard-test-location'
 
-2015-11-18  Ken Brown  <kbrown@cornell.edu>
+2015-11-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * configure.ac (LIBMODULES): Don’t define on Cygwin
+       * lisp/emacs-lisp/eieio.el: Add some default implementations
 
-2015-11-18  Eli Zaretskii  <eliz@gnu.org>
+       (standard-class): Mark it obsolete.
+       (slot-missing): Give it a default implementation.
+       (destructor): Simplify and mark it obsolete.
+       (object-print): Give it a default implementation.
+       (eieio-change-class): Rename from change-class.
+       (change-class): Redefine as obsolete alias.
 
-       Fix MS-Windows build --with-modules
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-       * src/module.c: Reformat copyright commentary.
-       (module_vec_get): Use explicit cast to size_t to avoid compiler
-       warning in 32-bit builds.
-       (check_main_thread) [WINDOWSNT]: Fix letter-case in Windows APIs.
-       Compare thread IDs directly, as GetThreadId is not available
-       before Windows Vista.
-       (check_main_thread) [WINDOWSNT]: Duplicate the thread handle
-       without using APIs and constants not available on XP and older
-       systems.  Obtain and store the thread ID as well.
+       Some final fixes in file notification before merging with master
 
-2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
-           Philipp Stephani  <phst@google.com>
+       * lisp/filenotify.el (file-notify--rm-descriptor): Remove WHAT arg.
+       (file-notify-callback): Improve check for `stopped' event.  Call
+       `file-notify-rm-watch' rather than `file-notify--rm-descriptor'.
+       (file-notify-add-watch): In case FILE is not a directory, call the
+       file monitor for the kqueue backend.  Otherwise, call the
+       directory monitor for the upper directory.
 
-       Add dynamic module test and helper script
+       * src/inotify.c (inotifyevent_to_event): Extract file name from
+       watch_object if the event doesn't provide it.
+       (Finotify_add_watch): Add file name to watch_object.
 
-       Add 'modhelp.py' script (python2) to automate module testing and
-       module generation.
+       * test/automated/file-notify-tests.el (file-notify--test-timeout):
+       Use different timeouts for different libraries.
+       (file-notify--test-with-events): Suppress lock files.  Flush
+       outstanding events before running the body.
+       (file-notify-test02-events, file-notify-test04-file-validity): Do
+       not skip cygwin tests.  Add additional test for file creation.
+       Adapt expected result for different backends.
+       (file-notify-test03-autorevert): Some of the tests don't work for
+       w32notify.
+       (file-notify-test06-many-events): Rename into both directions.
 
-       To build and test all modules in the modules/ dir
-         $ ./modhelp.py test
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-       To generate a module from template code (good starting point)
-         $ ./modhelp init mynewtestmodule
+       Rework file notifications, kqueue has problems with directory monitors
 
-       See the script -h option for more documentation.
+       * lisp/filenotify.el (file-notify-add-watch): Call the native
+       add-watch function on the file, not on the dir.
 
-       * modules/modhelp.py: New module helper script.
-       * modules/mod-test/Makefile: New file. Makefile for the test module.
-       * modules/mod-test/mod-test.c: New file. Test module source file.
-       * modules/mod-test/test.el: New file. ert test suite for the test module.
-       * modules/.gitignore: New file. Local .gitignore file.
+       * src/kqueue.c (kqueue_compare_dir_list): Make also bookkeeping
+       about already deleted entries.
 
-2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
+       * test/automated/auto-revert-tests.el
+       (auto-revert-test01-auto-revert-several-files): Do not call "cp -f"
+       since this deletes the target file first.
 
-       Make 'Fload' look for modules
+       * test/automated/file-notify-tests.el (file-notify--test-event-test):
+       Make stronger checks.
+       (file-notify-test01-add-watch, file-notify-test02-events)
+       (file-notify-test04-file-validity, file-notify-test05-dir-validity):
+       Rewrite in order to call file monitors but directory monitors.
+       (file-notify-test06-many-events): Ler rename work in both directions.
 
-       'Fload' can now load dynamic modules. This also makes 'require' work.
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-       * src/lread.c:
-         (suffix_p): New function.
-         (Fload): Use 'suffix_p'.  Call 'Fmodule_load' when we try to load a file
-         with a module suffix.
-         (syms_of_lread): Append module suffix to 'Vload_suffixes'.
+       Continue with pending events
 
-2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
-           Philipp Stephani  <phst@google.com>
+       * src/kqueue.c (pending_events): Remove global variable.
+       (kqueue_compare_dir_list): Create `write' event for not used
+       pending events.
+       (globals_of_kqueue): Remove initialization of pending_events.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve loops in file-notify-test06-many-events
+
+       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       Use `read-event' pauses for the `write-file' loops; otherwise
+       events are lost in inotify and gfilenotify cases.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle more complex rename operation in kqueue
+
+       * src/kqueue.c (pending_events): New variable.
+       (kqueue_compare_dir_list): Handle more complex rename operation.
+       (globals_of_kqueue): Initialize pending_events.
+
+       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       Adapt expected events in the `rename-file' case.
+       (file-notify-test06-many-events-remote): Declare.
+
+2015-11-25  Wolfgang Jenkner  <wjenkner@inode.at>
+
+       New test with a larger number of events
+
+       * test/automated/file-notify-tests.el (file-notify--test-with-events):
+       Make timeout heuristically depend on the number of events.
+
+       (file-notify-test06-many-events): Use it for new test.
 
-       Add dynamic module module support
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-       * configure.ac: Add '--with-modules' option.  Conditionally add
-         dynlib.o and module.o to the list of objects.  Add any system
-         specific flags to the linker flags to support dynamic libraries.
-       * m4/ax_gcc_var_attribute.m4: Add autoconf extension to test gcc
-         attributes.
-       * src/Makefile.in: Conditionally add module objects and linker flags.
-       * src/alloc.c (garbage_collect_1): protect module local values from
-         GC.
-       * src/lisp.h: Add 'module_init' and 'syms_of_module' prototypes.
-       * src/emacs-module.h: New header file included by modules.  Public
-         module API.
-       * src/emacs-module.c: New module implementation file.
+       Further fixes for kqueue
 
-2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
+       * lisp/filenotify.el (file-notify-callback): Raise also event if
+       directory name matches.
+       (file-notify-add-watch): Add `create' to the flags for `kqueue'.
 
-       Add new User Pointer (User_Ptr) type
+       * src/kqueue.c (kqueue_generate_event): Use watch_object as
+       argument instead of ident.  Remove callback argument.  Adapt
+       callees.  Check actions whether they are monitored flags.
 
-       * src/lisp.h: Add new Lisp_Misc_User_Ptr type.
-       (XUSER_PTR): New User_Ptr accessor.
-       * src/alloc.c (make_user_ptr): New function.
-       (mark_object, sweep_misc): Handle Lisp_Misc_User_Ptr.
-       * src/data.c (Ftype_of): Return 'user-ptr' for user pointer.
-       (Fuser-ptrp): New user pointer type predicate function.
-       (syms_of_data): New 'user-ptrp', 'user-ptr' symbol.  New 'user-ptrp'
-       subr.
-       * src/print.c (print_object): Add printer for User_Ptr type.
+       * test/automated/file-notify-tests.el (file-notify--test-library):
+       New defun.
+       (file-notify-test00-availability, file-notify-test02-events)
+       (file-notify-test04-file-validity)
+       (file-notify-test05-dir-validity): Use it.
+       (file-notify-test02-events, file-notify-test04-file-validity): Add
+       `read-event' calls between different file actions, in order to
+       give the backends a chance to rais an event.  Needed especially
+       for kqueue.  In case of deleting a directory, there are two
+       `deleted' events.
 
-2015-11-18  Aurélien Aptel  <aurelien.aptel@gmail.com>
-           Philipp Stephani  <phst@google.com>
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-       Add portable layer for dynamic loading
+       Code cleanup of kqueue.c
 
-       * src/dynlib.h: New file.
-       * src/dynlib.c: New file.
+       * src/kqueue.c (kqueue_directory_listing): Skip "." and "..".
+       (kqueue_compare_dir_list): Do not loop when calling
+       directory_files_internal.  Remove checks for "." and "..", this is
+       done in kqueue_directory_listing now.
+       (Fkqueue_add_watch): Check for proper emacs_open flags.
 
-2015-11-18  Philipp Stephani  <phst@google.com>
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-       Add catch-all & no-signal version of PUSH_HANDLER
+       Doc changes for kqueue
 
-       Ground work for modules. Add a non-signaling version of PUSH_HANDLER and
-       a new "catch-all" handler type.
+       * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
+       Fix some glitches in the example.
 
-       * src/eval.c (init_handler, push_handler, push_handler_nosignal): New
-         functions.
-       * src/fns.c (hash_remove_from_table): Expose function public.
-       * src/lisp.h: New handler type, define macro to push_handler call.
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-11-18  Ken Brown  <kbrown@cornell.edu>
+       Finish implementation in kqueue.c
 
-       Silence byte-compiler warning
+       * src/kqueue.c (kqueue_directory_listing, kqueue_callback):
+       Simplify access to list.
+       (kqueue_compare_dir_list): Simplify access to list.  Raise
+       `delete' event if directory does not exist any longer.  Otherwise,
+       wait until directory contents has changed.  Fix error in check.
 
-       * lisp/server.el (server-process-filter): Silence byte-compiler
-       warning.
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-11-18  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/filenotify.el (file-notify-add-watch): Fix thinko.
 
-       Quote symbols in docstrings using `'
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-       Be more systematic about quoting symbols `like-this' rather than
-       `like-this or 'like-this' in docstrings.  This follows up Artur
-       Malabarba's email in:
-       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01647.html
+       More work on kqueue
 
-2015-11-18  Peder O. Klingenberg  <peder@klingenberg.no>
+       * lisp/filenotify.el (file-notify-callback): Handle also the
+       `rename' event from kqueue.
+       (file-notify-add-watch): Do not register an entry twice.
 
-       Fix savegames in dunnet
+       * src/kqueue.c (kqueue_directory_listing): New function.
+       (kqueue_generate_event): New argument FILE1.  Adapt callees.
+       (kqueue_compare_dir_list): Rewrite in order to make it more robust.
 
-       * lisp/play/dunnet.el (dun-rot13): Use the standard rot13-region instead
-         of separate implementation.
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-11-18  Artur Malabarba  <bruce.connor.am@gmail.com>
+       Implement directory events
 
-       * lisp/emacs-lisp/package.el (package--with-response-buffer):
+       * lisp/filenotify.el (file-notify-handle-event)
+       (file-notify-callback): Remove traces.
 
-       Ensure we're at the start of the buffer before searching for
-       the end of headers.
+       * src/kqueue.c: Include <sys/time.h>.
+       (kqueue_generate_event, kqueue_compare_dir_list): New functions.
+       (kqueue_callback): Use them.  Call kevent() with a zero timeout.
+       (Fkqueue_add_watch): Adapt docstring.  Support directory events.
+       Compute initial directory listing.  Close file descriptor in case
+       of errors.
+       (syms_of_kqueue): Declare Qcreate.
 
-2015-11-18  Xue Fuqiao  <xfq.free@gmail.com>
+2015-11-25  Wolfgang Jenkner  <wjenkner@inode.at>
 
-       * admin/release-process: Improve wording.
+       Build fixes for kqueue support
 
-2015-11-18  Xue Fuqiao  <xfq.free@gmail.com>
+       * src/kqueue.c (Fkqueue_add_watch): O_BINARY is not a POSIX open(3)
+       flag.
 
-       Backport: * CONTRIBUTE: Remove information about feature freeze.
+       * configure.ac (HAVE_KQUEUE): There is no pkg-config module for native
+       kqueue on *BSD.
 
-       (cherry picked from commit ae0653b5ab9ee223751ec389b87011963e1cbbef)
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-11-18  Xue Fuqiao  <xfq.free@gmail.com>
+       Continue kqueue implementation
 
-       Backport: Document the release process
+       * lisp/filenotify.el (file-notify-handle-event)
+       (file-notify-callback): Enable trace messages.
 
-       * admin/notes/versioning: Add information about RC releases.
-       * admin/release-process: Document the release process.
-       * admin/authors.el (authors-ignored-files):
-       * admin/README: Change FOR-RELEASE to release-process.
-       * CONTRIBUTE:
-       * admin/notes/bugtracker: Don't mention FOR-RELEASE.
+       * src/kqueue.c: Include also <sys/types.h>.
+       (kqueue_callback): Remove watch in case of NOTE_DELETE or NOTE_RENAME.
+       (Fkqueue_rm_watch, Fkqueue_valid_p): New functions.
+       (syms_of_kqueue): Add them.
 
-       (cherry picked from commit 9a4aa0f5945a03611ae29c516025dbd353bd26ab)
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-11-18  Xue Fuqiao  <xfq.free@gmail.com>
+       Work on kqueue
 
-       Backport: * admin/release-process: Rename from admin/FOR-RELEASE.
+       * lisp/filenotify.el (file-notify--library)
+       (file-notify-descriptors, file-notify-callback)
+       (file-notify-add-watch, file-notify-rm-watch)
+       (file-notify-valid-p): Add kqueue support.
 
-       (cherry picked from commit f8cc14b59700e51a4e31139c0a65c8154995e055)
+       * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
 
-2015-11-18  Xue Fuqiao  <xfq.free@gmail.com>
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
 
-       Backport: Mention CONTRIBUTE in README
+       Add kqueue support
 
-       Mention CONTRIBUTE in README, since it was moved from etc/ to root.
-       * etc/TODO: Remove the reference to `etc/CONTRIBUTE'.
-       * README: Mention CONTRIBUTE.
+       * configure.ac (--with-file-notification): Add kqueue.
+       (top): Remove special test for "${HAVE_NS}" and
+       ${with_file_notification}, this is handled inside gfilenotify
+       tests.  Add kqueue tests.  Use NOTIFY_CFLAGS and NOTIFY_LIBS
+       instead of library specific variables.
 
-       (cherry picked from commit ed2e7e20ae0945288c98091f308f5460c3453873)
+       * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
 
-2015-11-18  Paul Eggert  <eggert@cs.ucla.edu>
+       * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
 
-       Fix docstring quoting problems with ‘ '’
+       * src/kqueue.c: New file.
 
-       Problem reported by Artur Malabarba in:
-       http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01513.html
-       Most of these fixes are to documentation; many involve fixing
-       longstanding quoting glitches that are independent of the
-       recent substitute-command-keys changes.  The changes to code are:
-       * lisp/cedet/mode-local.el (mode-local-augment-function-help)
-       (describe-mode-local-overload):
-       Substitute docstrings before displaying them.
-       * lisp/emacs-lisp/cl-macs.el (cl--transform-lambda):
-       Quote the generated docstring for later substitution.
+       * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
 
-2015-11-17  Eli Zaretskii  <eliz@gnu.org>
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Update elisp-mode-tests for changed file location.
+
+        * test/lisp/progmodes/elisp-mode-tests.el:
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Exclude manual tests from Makefile
+
+        * test/Makefile.in:
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Move package test files to new directory.
+
+        * test/lisp/emacs-lisp/package-tests.el: Update resoruce file location.
+        * test/data/package: Moved to test/lisp/emacs-lisp/package-resources
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Restore delete Makefiles and fix .gitignore.
+
+        * .gitignore: Update Makefiles to changed locations
+        * test/lisp/progmodes/flymake-resources/Makefile,
+          test/manual/etags/Makefile,
+          test/manual/etags/make-src/Makefile,
+          test/manual/indent/Makefile: Restored and moved to new location.
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Test infrastructure: updates after directory move
+
+        * (test/Makefile.in): Support directories several levels deep.
+        * (test/data/flymake): Rename to test/lisp/progmodes/flymake-resources.
+        * (test/lisp/progmodes/flymake-tests.el): Support renamed resource directory.
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Rename all test files to reflect source layout.
+
+        * CONTRIBUTE,Makefile.in,configure.ac: Update to reflect
+          test directory moves.
+        * test/file-organisation.org: New file.
+        * test/automated/Makefile.in
+          test/automated/data/decompress/foo.gz
+          test/automated/data/epg/pubkey.asc
+          test/automated/data/epg/seckey.asc
+          test/automated/data/files-bug18141.el.gz
+          test/automated/data/flymake/test.c
+          test/automated/data/flymake/test.pl
+          test/automated/data/package/archive-contents
+          test/automated/data/package/key.pub
+          test/automated/data/package/key.sec
+          test/automated/data/package/multi-file-0.2.3.tar
+          test/automated/data/package/multi-file-readme.txt
+          test/automated/data/package/newer-versions/archive-contents
+          test/automated/data/package/newer-versions/new-pkg-1.0.el
+          test/automated/data/package/newer-versions/simple-single-1.4.el
+          test/automated/data/package/package-test-server.py
+          test/automated/data/package/signed/archive-contents
+          test/automated/data/package/signed/archive-contents.sig
+          test/automated/data/package/signed/signed-bad-1.0.el
+          test/automated/data/package/signed/signed-bad-1.0.el.sig
+          test/automated/data/package/signed/signed-good-1.0.el
+          test/automated/data/package/signed/signed-good-1.0.el.sig
+          test/automated/data/package/simple-depend-1.0.el
+          test/automated/data/package/simple-single-1.3.el
+          test/automated/data/package/simple-single-readme.txt
+          test/automated/data/package/simple-two-depend-1.1.el
+          test/automated/abbrev-tests.el
+          test/automated/auto-revert-tests.el
+          test/automated/calc-tests.el
+          test/automated/icalendar-tests.el
+          test/automated/character-fold-tests.el
+          test/automated/comint-testsuite.el
+          test/automated/descr-text-test.el
+          test/automated/electric-tests.el
+          test/automated/cl-generic-tests.el
+          test/automated/cl-lib-tests.el
+          test/automated/eieio-test-methodinvoke.el
+          test/automated/eieio-test-persist.el
+          test/automated/eieio-tests.el
+          test/automated/ert-tests.el
+          test/automated/ert-x-tests.el
+          test/automated/generator-tests.el
+          test/automated/let-alist.el
+          test/automated/map-tests.el
+          test/automated/advice-tests.el
+          test/automated/package-test.el
+          test/automated/pcase-tests.el
+          test/automated/regexp-tests.el
+          test/automated/seq-tests.el
+          test/automated/subr-x-tests.el
+          test/automated/tabulated-list-test.el
+          test/automated/thunk-tests.el
+          test/automated/timer-tests.el
+          test/automated/epg-tests.el
+          test/automated/eshell.el
+          test/automated/faces-tests.el
+          test/automated/file-notify-tests.el
+          test/automated/auth-source-tests.el
+          test/automated/gnus-tests.el
+          test/automated/message-mode-tests.el
+          test/automated/help-fns.el
+          test/automated/imenu-test.el
+          test/automated/info-xref.el
+          test/automated/mule-util.el
+          test/automated/isearch-tests.el
+          test/automated/json-tests.el
+          test/automated/bytecomp-tests.el
+          test/automated/coding-tests.el
+          test/automated/core-elisp-tests.el
+          test/automated/decoder-tests.el
+          test/automated/files.el
+          test/automated/font-parse-tests.el
+          test/automated/lexbind-tests.el
+          test/automated/occur-tests.el
+          test/automated/process-tests.el
+          test/automated/syntax-tests.el
+          test/automated/textprop-tests.el
+          test/automated/undo-tests.el
+          test/automated/man-tests.el
+          test/automated/completion-tests.el
+          test/automated/dbus-tests.el
+          test/automated/newsticker-tests.el
+          test/automated/sasl-scram-rfc-tests.el
+          test/automated/tramp-tests.el
+          test/automated/obarray-tests.el
+          test/automated/compile-tests.el
+          test/automated/elisp-mode-tests.el
+          test/automated/f90.el
+          test/automated/flymake-tests.el
+          test/automated/python-tests.el
+          test/automated/ruby-mode-tests.el
+          test/automated/subword-tests.el
+          test/automated/replace-tests.el
+          test/automated/simple-test.el
+          test/automated/sort-tests.el
+          test/automated/subr-tests.el
+          test/automated/reftex-tests.el
+          test/automated/sgml-mode-tests.el
+          test/automated/tildify-tests.el
+          test/automated/thingatpt.el
+          test/automated/url-future-tests.el
+          test/automated/url-util-tests.el
+          test/automated/add-log-tests.el
+          test/automated/vc-bzr.el
+          test/automated/vc-tests.el
+          test/automated/xml-parse-tests.el
+          test/BidiCharacterTest.txt
+          test/biditest.el
+          test/cedet/cedet-utests.el
+          test/cedet/ede-tests.el
+          test/cedet/semantic-ia-utest.el
+          test/cedet/semantic-tests.el
+          test/cedet/semantic-utest-c.el
+          test/cedet/semantic-utest.el
+          test/cedet/srecode-tests.el
+          test/cedet/tests/test.c
+          test/cedet/tests/test.el
+          test/cedet/tests/test.make
+          test/cedet/tests/testdoublens.cpp
+          test/cedet/tests/testdoublens.hpp
+          test/cedet/tests/testfriends.cpp
+          test/cedet/tests/testjavacomp.java
+          test/cedet/tests/testnsp.cpp
+          test/cedet/tests/testpolymorph.cpp
+          test/cedet/tests/testspp.c
+          test/cedet/tests/testsppcomplete.c
+          test/cedet/tests/testsppreplace.c
+          test/cedet/tests/testsppreplaced.c
+          test/cedet/tests/testsubclass.cpp
+          test/cedet/tests/testsubclass.hh
+          test/cedet/tests/testtypedefs.cpp
+          test/cedet/tests/testvarnames.c
+          test/etags/CTAGS.good
+          test/etags/ETAGS.good_1
+          test/etags/ETAGS.good_2
+          test/etags/ETAGS.good_3
+          test/etags/ETAGS.good_4
+          test/etags/ETAGS.good_5
+          test/etags/ETAGS.good_6
+          test/etags/a-src/empty.zz
+          test/etags/a-src/empty.zz.gz
+          test/etags/ada-src/2ataspri.adb
+          test/etags/ada-src/2ataspri.ads
+          test/etags/ada-src/etags-test-for.ada
+          test/etags/ada-src/waroquiers.ada
+          test/etags/c-src/a/b/b.c
+          test/etags/c-src/abbrev.c
+          test/etags/c-src/c.c
+          test/etags/c-src/dostorture.c
+          test/etags/c-src/emacs/src/gmalloc.c
+          test/etags/c-src/emacs/src/keyboard.c
+          test/etags/c-src/emacs/src/lisp.h
+          test/etags/c-src/emacs/src/regex.h
+          test/etags/c-src/etags.c
+          test/etags/c-src/exit.c
+          test/etags/c-src/exit.strange_suffix
+          test/etags/c-src/fail.c
+          test/etags/c-src/getopt.h
+          test/etags/c-src/h.h
+          test/etags/c-src/machsyscalls.c
+          test/etags/c-src/machsyscalls.h
+          test/etags/c-src/sysdep.h
+          test/etags/c-src/tab.c
+          test/etags/c-src/torture.c
+          test/etags/cp-src/MDiagArray2.h
+          test/etags/cp-src/Range.h
+          test/etags/cp-src/burton.cpp
+          test/etags/cp-src/c.C
+          test/etags/cp-src/clheir.cpp.gz
+          test/etags/cp-src/clheir.hpp
+          test/etags/cp-src/conway.cpp
+          test/etags/cp-src/conway.hpp
+          test/etags/cp-src/fail.C
+          test/etags/cp-src/functions.cpp
+          test/etags/cp-src/screen.cpp
+          test/etags/cp-src/screen.hpp
+          test/etags/cp-src/x.cc
+          test/etags/el-src/TAGTEST.EL
+          test/etags/el-src/emacs/lisp/progmodes/etags.el
+          test/etags/erl-src/gs_dialog.erl
+          test/etags/f-src/entry.for
+          test/etags/f-src/entry.strange.gz
+          test/etags/f-src/entry.strange_suffix
+          test/etags/forth-src/test-forth.fth
+          test/etags/html-src/algrthms.html
+          test/etags/html-src/index.shtml
+          test/etags/html-src/software.html
+          test/etags/html-src/softwarelibero.html
+          test/etags/lua-src/allegro.lua
+          test/etags/objc-src/PackInsp.h
+          test/etags/objc-src/PackInsp.m
+          test/etags/objc-src/Subprocess.h
+          test/etags/objc-src/Subprocess.m
+          test/etags/objcpp-src/SimpleCalc.H
+          test/etags/objcpp-src/SimpleCalc.M
+          test/etags/pas-src/common.pas
+          test/etags/perl-src/htlmify-cystic
+          test/etags/perl-src/kai-test.pl
+          test/etags/perl-src/yagrip.pl
+          test/etags/php-src/lce_functions.php
+          test/etags/php-src/ptest.php
+          test/etags/php-src/sendmail.php
+          test/etags/prol-src/natded.prolog
+          test/etags/prol-src/ordsets.prolog
+          test/etags/ps-src/rfc1245.ps
+          test/etags/pyt-src/server.py
+          test/etags/tex-src/gzip.texi
+          test/etags/tex-src/nonewline.tex
+          test/etags/tex-src/testenv.tex
+          test/etags/tex-src/texinfo.tex
+          test/etags/y-src/atest.y
+          test/etags/y-src/cccp.c
+          test/etags/y-src/cccp.y
+          test/etags/y-src/parse.c
+          test/etags/y-src/parse.y
+          test/indent/css-mode.css
+          test/indent/js-indent-init-dynamic.js
+          test/indent/js-indent-init-t.js
+          test/indent/js-jsx.js
+          test/indent/js.js
+          test/indent/latex-mode.tex
+          test/indent/modula2.mod
+          test/indent/nxml.xml
+          test/indent/octave.m
+          test/indent/pascal.pas
+          test/indent/perl.perl
+          test/indent/prolog.prolog
+          test/indent/ps-mode.ps
+          test/indent/ruby.rb
+          test/indent/scheme.scm
+          test/indent/scss-mode.scss
+          test/indent/sgml-mode-attribute.html
+          test/indent/shell.rc
+          test/indent/shell.sh
+          test/redisplay-testsuite.el
+          test/rmailmm.el
+          test/automated/buffer-tests.el
+          test/automated/cmds-tests.el
+          test/automated/data-tests.el
+          test/automated/finalizer-tests.el
+          test/automated/fns-tests.el
+          test/automated/inotify-test.el
+          test/automated/keymap-tests.el
+          test/automated/print-tests.el
+          test/automated/libxml-tests.el
+          test/automated/zlib-tests.el: Files Moved.
+
+2015-11-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Rework file notifications, kqueue has problems with directory monitors
+
+       * lisp/filenotify.el (file-notify-add-watch): Call the native
+       add-watch function on the file, not on the dir.
+
+       * src/kqueue.c (kqueue_compare_dir_list): Make also bookkeeping
+       about already deleted entries.
 
-       Improve configure --help text for wide ints
+       * test/automated/auto-revert-tests.el
+       (auto-revert-test01-auto-revert-several-files): Do not call "cp -f"
+       since this deletes the target file first.
 
-       * configure.ac (wide-int): Clarify user-level advantages and
-       disadvantages.
+       * test/automated/file-notify-tests.el (file-notify--test-event-test):
+       Make stronger checks.
+       (file-notify-test01-add-watch, file-notify-test02-events)
+       (file-notify-test04-file-validity, file-notify-test05-dir-validity):
+       Rewrite in order to call file monitors but directory monitors.
+       (file-notify-test06-many-events): Ler rename work in both directions.
 
-2015-11-17  Stephen Leake  <stephen_leake@stephe-leake.org>
+2015-11-19  Michael Albinus  <michael.albinus@gmx.de>
 
-       Improve doc string
+       Continie with pending events
 
-       * lisp/progmodes/xref.el (xref-backend-references): Improve doc string.
+       * src/kqueue.c (pending_events): Remove global variable.
+       (kqueue_compare_dir_list): Create `write' event for not used
+       pending events.
+       (globals_of_kqueue): Remove initialization of pending_events.
 
-2015-11-17  Paul Eggert  <eggert@cs.ucla.edu>
+2015-11-19  Michael Albinus  <michael.albinus@gmx.de>
 
-       eval_sub followed dangling pointer when debugging
+       Improve loops in file-notify-test06-many-events
 
-       Problem reported by Pip Cet (Bug#21245).
-       This bug could occur in eval_sub if the C compiler reused
-       storage associated with the ‘argvals’ local after ‘argvals’
-       went out of scope, and if the Elisp debugger stopped on Elisp
-       function exit and accessed ‘argvals’.  It could also occur if
-       a variadic function was called with so many arguments (over
-       2048 args on x86-64) that SAFE_ALLOCA_LISP called malloc, then
-       SAFE_FREE freed the arguments, then the memory manager used
-       the storage for other purposes, then the debugger accessed the
-       arguments.
-       * src/eval.c (eval_sub): Declare ‘argvals’ at top level of
-       function body.  Simplify local decls.
-       When allocating args via SAFE_ALLOCA, call
-       debugger before invoking SAFE_FREE, as the debugger needs
-       access to the args.
-       (eval_sub, apply_lambda): Rework to avoid need for
-       set_backtrace_debug_on_exit hack.  This is cleaner,
-       and should work better with buggy custom debuggers.
+       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       Use `read-event' pauses for the `write-file' loops; otherwise
+       events are lost in inotify and gfilenotify cases.
 
-2015-11-17  Daiki Ueno  <ueno@gnu.org>
+2015-11-19  Michael Albinus  <michael.albinus@gmx.de>
 
-       * lisp/image-mode.el: Support encrypted file
+       Handle more complex rename operation in kqueue
 
-       (image-toggle-display-image): Read content from the buffer instead
-       of the file, if the buffer holds a decrypted data.  (Bug#21870)
+       * src/kqueue.c (pending_events): New variable.
+       (kqueue_compare_dir_list): Handle more complex rename operation.
+       (globals_of_kqueue): Initialize pending_events.
 
-2015-11-17  Paul Eggert  <eggert@cs.ucla.edu>
+       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       Adapt expected events in the `rename-file' case.
+       (file-notify-test06-many-events-remote): Declare.
 
-       ELF unexec: align section header
+2015-11-18  Wolfgang Jenkner  <wjenkner@inode.at>
 
-       This ports the recent unexelf.c changes to Fedora x86-64
-       when configured with GCC’s -fsanitize=undefined option.
-       * src/unexelf.c (unexec): Align new_data2_size to a multiple
-       of ElfW (Shdr)’s alignment, so that NEW_SECTION_H returns a
-       pointer aligned appropriately for its type.
+       New test with a larger number of events.
 
-2015-11-17  Andreas Schwab  <schwab@linux-m68k.org>
+       * test/automated/file-notify-tests.el (file-notify--test-with-events):
+       Make timeout heuristically depend on the number of events.
 
-       Do more checks on bytecode objects (Bug#21929)
+       (file-notify-test06-many-events): Use it for new test.
 
-       * src/eval.c (funcall_lambda): Check size of compiled function
-       object.
-       (Ffetch_bytecode): Likewise.
+2015-11-18  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-11-16  Johan Bockgård  <bojohan@gnu.org>
+       Further fixes for kqueue.
 
-       pcase.el: Fix edebugging of backquoted cons patterns
+       * lisp/filenotify.el (file-notify-callback): Raise also event if
+       directory name matches.
+       (file-notify-add-watch): Add `create' to the flags for `kqueue'.
 
-       * lisp/emacs-lisp/pcase.el (pcase-QPAT): Fix edebugging of backquoted
-       cons patterns. (Bug#21920)
+       * src/kqueue.c (kqueue_generate_event): Use watch_object as
+       argument instead of ident.  Remove callback argument.  Adapt
+       callees.  Check actions whether they are monitored flags.
 
-2015-11-16  Paul Eggert  <eggert@cs.ucla.edu>
+       * test/automated/file-notify-tests.el (file-notify--test-library):
+       New defun.
+       (file-notify-test00-availability, file-notify-test02-events)
+       (file-notify-test04-file-validity)
+       (file-notify-test05-dir-validity): Use it.
+       (file-notify-test02-events, file-notify-test04-file-validity): Add
+       `read-event' calls between different file actions, in order to
+       give the backends a chance to rais an event.  Needed especially
+       for kqueue.  In case of deleting a directory, there are two
+       `deleted' events.
 
-       Improve fix for regex reentrancy abort
+2015-11-17  Michael Albinus  <michael.albinus@gmx.de>
 
-       Suggested by Stefan Monnier (Bug#21688).
-       * src/syntax.c (update_syntax_table_forward):
-       Remove recently-added PROPERTIZE arg, and assume it is true.
-       All callers changed.
-       * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
-       Invoke update_syntax_table directly.
+       Code cleanup of kqueue.c
 
-2015-11-16  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * src/kqueue.c (kqueue_directory_listing): Skip "." and "..".
+       (kqueue_compare_dir_list): Do not loop when calling
+       directory_files_internal.  Remove checks for "." and "..", this is
+       done in kqueue_directory_listing now.
+       (Fkqueue_add_watch): Check for proper emacs_open flags.
 
-       * lisp/faces.el (faces--attribute-at-point): Use `face-list-p'
+2015-11-16  Michael Albinus  <michael.albinus@gmx.de>
 
-       * lisp/emacs-lisp/package.el (package--with-response-buffer): Missing require
+       Doc changes for kqueue
 
-       * lisp/emacs-lisp/nadvice.el (add-function): Escape quote
+       * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
+       Fix some glitches in the example.
 
-2015-11-16  Vasily Korytov  <vasily.korytov@yahoo.com>
+2015-11-16  Michael Albinus  <michael.albinus@gmx.de>
 
-       Recognize .rbw and .pyw files (bug#18753)
+       Finish implementation in kqueue.c
 
-       * lisp/progmodes/python.el (auto-mode-alist):
-       Recognize .pyw files.
+       * src/kqueue.c (kqueue_directory_listing, kqueue_callback):
+       Simplify access to list.
+       (kqueue_compare_dir_list): Simplify access to list.  Raise
+       `delete' event if directory does not exist any longer.  Otherwise,
+       wait until directory contents has changed.  Fix error in check.
 
-       * lisp/progmodes/ruby-mode.el (auto-mode-alist):
-       Recognize .rbw files.
+2015-11-16  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-11-16  Dmitry Gutov  <dgutov@yandex.ru>
+       * lisp/filenotify.el (file-notify-add-watch): Fix thinko.
 
-       Fix ruby-mode auto-mode-alist entry
+2015-11-15  Michael Albinus  <michael.albinus@gmx.de>
 
-       * lisp/progmodes/ruby-mode.el (auto-mode-alist): Add grouping
-       around the extensions (bug#21257).
+       More work on kqueue
 
-2015-11-15  Dmitry Gutov  <dgutov@yandex.ru>
+       * lisp/filenotify.el (file-notify-callback): Handle also the
+       `rename' event from kqueue.
+       (file-notify-add-watch): Do not register an entry twice.
 
-       Fix etags completion near eob
+       * src/kqueue.c (kqueue_directory_listing): New function.
+       (kqueue_generate_event): New argument FILE1.  Adapt callees.
+       (kqueue_compare_dir_list): Rewrite in order to make it more robust.
 
-       * lisp/progmodes/etags.el (tags-completion-at-point-function):
-       Use `goto-char', to avoid the end-of-buffer error (bug#20061).
+2015-11-14  Michael Albinus  <michael.albinus@gmx.de>
 
-2015-11-15  Alan Mackenzie  <acm@muc.de>
+       Implement directory events
 
-       De-pessimize detection of C++ member initialization lists.
+       * lisp/filenotify.el (file-notify-handle-event)
+       (file-notify-callback): Remove traces.
 
-       list/progmodes/cc-engine.el (c-back-over-list-of-member-inits): New macro.
-       (c-back-over-member-initializers): Reformulate such that c-at-toplevel-p
-       is only called when a construct "looks right" rather than continually.
-       (c-guess-basic-syntax, CASE 5R): Add a check for the mode being C++ Mode.
+       * src/kqueue.c: Include <sys/time.h>.
+       (kqueue_generate_event, kqueue_compare_dir_list): New functions.
+       (kqueue_callback): Use them.  Call kevent() with a zero timeout.
+       (Fkqueue_add_watch): Adapt docstring.  Support directory events.
+       Compute initial directory listing.  Close file descriptor in case
+       of errors.
+       (syms_of_kqueue): Declare Qcreate.
 
-2015-11-15  Artur Malabarba  <bruce.connor.am@gmail.com>
+2015-11-11  Wolfgang Jenkner  <wjenkner@inode.at>
 
-       Backport: * lisp/emacs-lisp/package.el: Fix a decoding issue.
+       Build fixes for kqueue support.
 
-       * lisp/url/url-handlers.el (url-insert-file-contents): Move some code to
-       `url-insert-buffer-contents'.
-       (url-insert-buffer-contents): New function
+       * src/kqueue.c (Fkqueue_add_watch): O_BINARY is not a POSIX open(3)
+       flag.
 
-       (package--with-response-buffer): Use `url-insert-buffer-contents'.
-       The previous code had some issues with decoding. Refactoring that
-       function allows us to use the decoding from url-handlers while still
-       treating both sync and async requests the same.
+       * configure.ac (HAVE_KQUEUE): There is no pkg-config module for native
+       kqueue on *BSD.
 
-2015-11-15  Stephen Leake  <stephen_leake@stephe-leake.org>
+2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
 
-       Improve a few doc strings, comments
+       Continue kqueue implementation
 
-       * lisp/cedet/cedet-global.el (cedet-gnu-global-expand-filename):
-       * lisp/cedet/ede/locate.el (ede-locate-base):
-       * lisp/cedet/semantic/symref.el (semantic-symref-calculate-rootdir):
-       * src/fns.c (Fdelq): Improve doc string.
+       * lisp/filenotify.el (file-notify-handle-event)
+       (file-notify-callback): Enable trace messages.
 
-       * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions): Add FIXME.
+       * src/kqueue.c: Include also <sys/types.h>.
+       (kqueue_callback): Remove watch in case of NOTE_DELETE or NOTE_RENAME.
+       (Fkqueue_rm_watch, Fkqueue_valid_p): New functions.
+       (syms_of_kqueue): Add them.
 
-2015-11-15  Anders Lindgren  <andlind@gmail.com>
+2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
 
-       Enhance NSTRACE (trace output for NextStep).
+       Work on kqueue
 
-       Trace can be disabled for groups of functions. By default, event
-       functions and functions that generate lots of output are disabled.
+       * lisp/filenotify.el (file-notify--library)
+       (file-notify-descriptors, file-notify-callback)
+       (file-notify-add-watch, file-notify-rm-watch)
+       (file-notify-valid-p): Add kqueue support.
 
-       Trace output of Objective-C functions now use the "[ClassName
-       parameter:]" form.
+       * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
 
-       * src/nsterm.h (NSTRACE_ALL_GROUPS, NSTRACE_GROUP_EVENTS)
-       (NSTRACE_GROUP_UPDATES, NSTRACE_GROUP_FRINGE, NSTRACE_GROUP_COLOR)
-       (NSTRACE_GROUP_GLYPHS, NSTRACE_GROUP_FOCUS): New macros,
-       controlling in which function groups trace should be active.
-       (NSTRACE_WHEN): Support for silencing a function, this also
-       silencing all called functions.
-       (NSTRACE_UNSILENCE): New macro, used to re-enable trace.
-       (NSTRACE_FMT_FSTYPE, NSTRACE_ARG_FSTYPE): New macros, used to
-       print the full screen state in NSTRACE functions.
+2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
 
-       * src/nsterm.m (nstrace_depth, nstrace_num): Made volatile as they
-       can be accessed from multiple threads.
-       (nstrace_enabled_global): New variable, when FALSE, trace is
-       silenced.
-       (nstrace_restore_global_trace_state): New function, used to
-       restore `nstrace_enabled_global' at end of block.
-       ([EmacsView setFrame:], [EmacsWindow setFrame:display:])
-       ([EmacsWindow setFrame:display:animation:])
-       ([EmacsWindow setFrameTopLeftPoint:]): New functions, print trace
-       and call corresponding super function.
-       (Many functions): Add or enhance trace output.
+       Add kqueue support
 
-       * src/nsimage.m (ns_image_from_file): Enhanced trace output.
+       * configure.ac (--with-file-notification): Add kqueue.
+       (top): Remove special test for "${HAVE_NS}" and
+       ${with_file_notification}, this is handled inside gfilenotify
+       tests.  Add kqueue tests.  Use NOTIFY_CFLAGS and NOTIFY_LIBS
+       instead of library specific variables.
 
-       * src/nsfns.m (x_set_tool_bar_lines): Add trace output.
+       * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
 
-       * src/nsmenu.m ([EmacsToolbar setVisible:]): New function, print trace
-       and call corresponding super function.
+       * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
 
-2015-11-15  Anders Lindgren  <andlind@gmail.com>
+       * src/kqueue.c: New file.
 
-       Fixed a toolbar related issue on OS X.
+       * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
 
-       Earlier, when toggling the tool-bar in a maximized frame, the
-       frame size didn't match the number of text lines, leaving an
-       unused area at the bottom of the frame.
+2015-11-21  Wilson Snyder  <wsnyder@wsnyder.org>
 
-       * src/nsfns.m (x_set_tool_bar_lines): Exit maximized and full height
-       fullscreen modes when tool bar is disabled.
+       verilog-mode.el: Commentary and fix pre-Emacs 21 behavior.
 
-2015-11-15  Anders Lindgren  <andlind@gmail.com>
+       * verilog-mode.el (verilog-save-font-no-change-functions):
+       Commentary and fix pre-Emacs 21 behavior.
 
-       Fixed OS X 10.6.8 build issue (bug#21862).
+2015-11-19  Przemysław Wojnowski  <esperanto@cumego.com>
 
-       * src/nsterm.h (EmacsView): Add missing declarations.
-       * src/nsterm.m ([EmacsView windowDidBecomeKey]): New method, like
-       the standard method but without the notification parameter.
-       Intended to be used for direct calls.
-       ([EmacsView windowDidEnterFullScreen]): Call the non-notification
-       version of `windowDidBecomeKey'. Made the notification method call
-       the non-notification method instead of the vice versa.
-       (NSWindowDidEnterFullScreenNotification): Deleted, no longer
-       needed.
+       Use obarray functions from obarray.
+
+       * lisp/abbrev.el (copy-abbrev-table, abbrev-table-p, make-abbrev-table,
+         abbrev-table-get, abbrev-table-put, abbrev-table-empty-p,
+         clear-abbrev-table, define-abbrev, abbrev--symbol, abbrev-table-menu):
+         delegate to obarray.el functions.
+       * lisp/loadup.el: load obarray before abbrev
+       * test/automated/abbrev-tests.el: new tests
 
-2015-11-15  Artur Malabarba  <bruce.connor.am@gmail.com>
+2015-11-18  Christian Schwarzgruber  <c.schwarzgruber.cs@gmail.com>  (tiny change)
 
-       * lisp/faces.el (faces--attribute-at-point): Fix an issue
+       epa.el: Add option to replace original text
 
-       Previous code would signal an error when the face at point was
-       a manually built list of attributes such as '(:foregroud "white").
+       * lisp/epa.el (epa-replace-original-text): New user option.
+       (Bug#21947)
 
-       * test/automated/faces-tests.el (faces--test-color-at-point): Add a test
+2015-11-18  Mark Oteiza  <mvoteiza@udel.edu>
 
-2015-11-15  Paul Eggert  <eggert@cs.ucla.edu>
+       Add interactive seek command.
 
-       Fix regex abort when it tries to reenter itself
+       * lisp/mpc.el (mpc-cmd-seekcur): New function.
+       (mpc-seek-current): New command.
+       (mpc-mode-menu): Add entry for mpc-seek-current
+       (mpc-mode-map): Bind mpc-seek-current to "g"
 
-       Problem reported by Ken Raeburn.
-       Solution suggested by Stefan Monnier (Bug#21688).
-       * src/regex.c (re_match_2_internal):
-       Use new _FAST functions to avoid regex code reentering itself.
-       * src/syntax.c (update_syntax_table_forward): New arg PROPERTIZE.
-       All callers changed.
-       * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST)
-       (UPDATE_SYNTAX_TABLE_FAST): New inline functions.
+2015-11-18  Mark Oteiza  <mvoteiza@udel.edu>
 
-2015-11-15  Dmitry Gutov  <dgutov@yandex.ru>
+       Fix issue where a new tempfile was created every refresh
 
-       Improve Ruby 1.9-style keyword keys highlighting
+       * lisp/mpc.el (mpc-format): Leave dir as relative path
 
-       * lisp/progmodes/ruby-mode.el (ruby-font-lock-keywords):
-       Handle required keyword arguments (bug#21367).
-       And highlight the colon together with the name.
+2015-11-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-2015-11-15  Dmitry Gutov  <dgutov@yandex.ru>
+       * lisp/progmodes/cc-defs.el: Use with-silent-modifications
 
-       Unify the absolutely equal xref-backend-references implementations
+       (c-save-buffer-state): Use with-silent-modifications when available.
+       (c--macroexpand-all): Check macroexpand-all directly rather than
+       c--mapcan-status.
 
-       * lisp/progmodes/elisp-mode.el (xref-backend-references):
-       Remove.
+2015-11-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * lisp/progmodes/etags.el (xref-backend-references):
-       Remove.
+       * lisp/loadup.el: Set max-lisp-eval-depth here
 
-       * lisp/progmodes/xref.el (xref-backend-references):
-       Define the default implementation.
+       * lisp/Makefile.in (BIG_STACK_DEPTH, BIG_STACK_OPTS): Remove.
+       (BYTE_COMPILE_FLAGS): Adjust accordingly.
 
-2015-11-15  Dmitry Gutov  <dgutov@yandex.ru>
+2015-11-17  João Távora  <joaotavora@gmail.com>
 
-       Update project-find-regexp for the new xref API
+       Minor fix to comment indentation and typo in last commit
 
-       * lisp/progmodes/project.el (project--read-regexp):
-       Update to use the new xref API methods.
+       * linum.el (linum-update-window): Fix comment indentation and a
+       typo.
 
-       * lisp/progmodes/xref.el (xref-find-backend): Autoload.
+2015-11-17  João Távora  <joaotavora@gmail.com>
 
-2015-11-15  Dmitry Gutov  <dgutov@yandex.ru>
+       linum-mode plays more nicely with other margin-setting extensions
 
-       Fix replacing a match with a shorter string
+       linum.el will only modify the left margin if it needs to, and will
+       only reset the it back to 0 if it guesses that no-one has touched that
+       margin in the meantime.
 
-       In effect, partially reverting fe973fc.
+       As such, this is a more of a workaround than an actual fix, but fixes
+       the problems described in bug#20674 regarding the interaction with
+       modes such as darkroom-mode and olivetti-mode.
 
-       * lisp/progmodes/xref.el (xref-query-replace): Store the end
-       of each match as a marker again, instead of length.
-       (xref--query-replace-1): Update accordingly.
+       A similar fix was commited to nlinum.el in ELPA.git's
+       e7f5f549fbfb740b911fb7f33b42381ecece56d8
 
-2015-11-14  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * linum.el (linum-delete-overlays): Restore margins more
+       criteriously.
+       (linum-update-window): Set margins more criteriously.
 
-       * lisp/progmodes/xref.el (xref-pop-marker-stack): Downgrade errors
+2015-11-16  Daiki Ueno  <ueno@gnu.org>
 
-       Signal user-errors instead.
+       * lisp/image-mode.el: Support encrypted file
 
-2015-11-14  Eli Zaretskii  <eliz@gnu.org>
+       (image-toggle-display-image): Read content from the buffer instead
+       of the file, if the buffer holds a decrypted data.  (Bug#21870)
 
-       Document 'describe-symbol'
+2015-11-15  Juanma Barranquero  <lekktu@gmail.com>
 
-       * doc/emacs/help.texi (Help Summary): Mention "C-h o".
-       (Name Help): Document "C-h o" and describe-symbol.
+       * lisp/progmodes/verilog-mode.el (verilog-save-buffer-state): Add backquote
 
-       * lisp/help-fns.el (describe-symbol): Doc fix.
+2015-11-15  Artur Malabarba  <bruce.connor.am@gmail.com>
 
-2015-11-14  Paul Eggert  <eggert@cs.ucla.edu>
+       * lisp/emacs-lisp/package.el: Fix a decoding issue
 
-       Change test name to avoid spellcheck issue.
+       (package--with-response-buffer): Use `url-insert-buffer-contents'.
+       The previous code had some issues with decoding. Refactoring that
+       function allows us to use the decoding from url-handlers while still
+       treating both sync and async requests the same.
 
-2015-11-14  Eli Zaretskii  <eliz@gnu.org>
+       * lisp/url/url-handlers.el (url-insert-file-contents): Move some code to
+       `url-insert-buffer-contents'.
+       (url-insert-buffer-contents): New function
 
-       Avoid signaling an error in 'describe-symbol'
+2015-11-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * lisp/help-fns.el (describe-symbol): Avoid errors when the symbol
-       exists as a function/variable/face/etc., but is undocumented.
+       * lisp/progmodes/verilog-mode.el: Use with-silent-modifications
 
-       * test/automated/help-fns.el (help-fns-test-describe-symbol): New
-       test.
+       (verilog-save-buffer-state): Use with-silent-modifications when available.
+       (verilog-save-font-no-change-functions): Don't bind
+       before/after-change-functions if it's not needed.
 
-2015-11-14  Eli Zaretskii  <eliz@gnu.org>
+2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
 
-       * INSTALL (--with-cairo): Document this new configure option.
+       * CONTRIBUTE: Remove information about feature freeze.
 
-2015-11-14  Eli Zaretskii  <eliz@gnu.org>
+       Merge branch 'release-process-lowercase'
 
-       Document that GNU Make >= 3.81 is required to build Emacs
+2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
 
-       * doc/lispref/internals.texi (Building Emacs): Document that GNU
-       Make 3.81 or later is now required.
+       Document the release process
 
-2015-11-14  Artur Malabarba  <bruce.connor.am@gmail.com>
+       * admin/notes/versioning: Add information about RC releases.
+       * admin/release-process: Document the release process.
+       * admin/authors.el (authors-ignored-files):
+       * admin/README: Change FOR-RELEASE to release-process.
+       * CONTRIBUTE:
+       * admin/notes/bugtracker: Don't mention FOR-RELEASE.
+
+2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
+
+       * admin/release-process: Rename from admin/FOR-RELEASE.
+
+2015-11-14  David Engster  <deng@randomsample.de>
 
-       Backport: * lisp/emacs-lisp/package.el: Refactor -with-work-buffer-async.
+       gitmerge: Fix git log command
 
-       (package--with-work-buffer-async): Reimplement as
-       `package--with-response-buffer'.
-       (package--with-work-buffer): Mark obsolete.
-       (package--with-response-buffer): New macro. This is a more self
-       contained and less contrived version of
-       `package--with-work-buffer-async'.  It uses keyword arguments,
-       doesn't have async on the name, doesn't fallback on
-       `package--with-work-buffer', and has _much_ simpler error
-       handling.  On master, this macro will soon be part of another
-       library (either standalone or inside url.el), which is why this
-       commit is not to be merged back.
+       * admin/gitmerge.el (gitmerge-missing): Use '--left-only' since we
+       only want commits from the branch that is to be merged.
+       (gitmerge-setup-log-buffer): Use the same symmetric range as in
+       `gitmerge-missing'.
 
-       (package--check-signature, package--download-one-archive)
-       (package-install-from-archive, describe-package-1): Use it.
+2015-11-14  David Engster  <deng@randomsample.de>
 
-       (package--download-and-read-archives): Let
-       `package--download-one-archive' take care of calling
-       `package--update-downloads-in-progress'.
+       gitmerge: Try to detect cherry-picks
+
+       * admin/gitmerge.el (gitmerge-default-branch): Change to
+       origin/emacs-25.
+       (gitmerge-missing): Use symmetric difference ('...') between
+       branch and master so that cherry-picks can be detected.
 
 2015-11-14  Eli Zaretskii  <eliz@gnu.org>
 
-       * CONTRIBUTE (Branches): Improve wording for back-ported commits.
+       Increment Emacs version on master branch
 
-2015-11-14  Dmitry Gutov  <dgutov@yandex.ru>
+       * lisp/cus-edit.el (customize-changed-options-previous-release):
+       Increase previous version to 24.5.
+
+       * configure.ac:
+       * msdos/sed2v2.inp: Bump version to 25.1.50.
 
-       Merge branch 'master' into emacs-25
+2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
 
-2015-11-14  Dmitry Gutov  <dgutov@yandex.ru>
+       Mention CONTRIBUTE in README, since it was moved from etc/ to root.
+       * etc/TODO: Remove the reference to `etc/CONTRIBUTE'.
+       * README: Mention CONTRIBUTE.
+
+2015-11-13  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       Update verilog-mode.el to 2015-11-09-b121d60-vpo
+
+       * verilog-mode.el (verilog-auto, verilog-delete-auto)
+       (verilog-modi-cache-results, verilog-save-buffer-state)
+       (verilog-save-font-no-change-functions): When internally suppressing
+       change functions, use `inhibit-modification-hooks' and call
+       `after-change-funtions' to more nicely work with user hooks.
+       Reported by Stefan Monnier.
+       (verilog-auto, verilog-delete-auto, verilog-delete-auto-buffer):
+       Create `verilog-delete-auto-buffer' to avoid double-calling
+       fontification hooks.
+       (verilog-restore-buffer-modified-p, verilog-auto)
+       (verilog-save-buffer-state): Prefer restore-buffer-modified-p over
+       set-buffer-modified-p.  Reported by Stefan Monnier.
+       (verilog-diff-auto, verilog-diff-buffers-p)
+       (verilog-diff-ignore-regexp): Add `verilog-diff-ignore-regexp'.
+       (verilog-auto-inst-port, verilog-read-sub-decls-expr): Fix
+       AUTOINST with unpacked dimensional parameters, bug981.  Reported by
+       by Amol Nagapurkar.
+       (verilog-read-decls, verilog-read-sub-decls-line): Avoid unneeded
+       properties inside internal structures.  No functional change
+       intended.
+
+2015-11-13  Dmitry Gutov  <dgutov@yandex.ru>
 
        Use generic dispatch for xref backends
 
        (xref-backend-references, xref-backend-definitions)
        (xref-backend-apropos): New generic methods.
 
-2015-11-14  Juri Linkov  <juri@linkov.net>
+2015-11-13  Juri Linkov  <juri@linkov.net>
 
        Support rectangular regions for more commands
 
        * src/casefiddle.c (Fdowncase_region): Add arg ‘region-noncontiguous-p’.
        If non-nil, operate on multiple chunks.  (Bug#19829)
 
-2015-11-14  Dmitry Gutov  <dgutov@yandex.ru>
+2015-11-13  Dmitry Gutov  <dgutov@yandex.ru>
 
        Handle multiple matches on the same line; add highlighting
 
        Search for all matches in the hit line.  Add `highlight' face to
        the matched region in the summary.  Update both callers.
 
-2015-11-14  Dmitry Gutov  <dgutov@yandex.ru>
+2015-11-13  Dmitry Gutov  <dgutov@yandex.ru>
 
        Replace xref-match-bounds with xref-match-length
 
        (xref-query-replace): Ditto.  And check that the search results
        are up-to-date.
 
-2015-11-13  John Wiegley  <johnw@newartisans.com>
-
-       Merge remote-tracking branch 'origin/master' into emacs-25
-
-2015-11-13  l3thal  <kwhite@gnu.org>
-
-       Merge branch 'erc-async-reconnect' into emacs-25
-
-       Reconnect asynchronously.
-
 2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
 
        Merge from gnulib
        mflt_run to leave the output areas unchanged on failure, as
        this isn’t part of its interface spec.
 
-2015-11-13  Eli Zaretskii  <eliz@gnu.org>
-
-       Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
-
-2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-       Port recent XCB changes to 64-bit ‘long int’
-
-       For historical reasons, libX11 represents 32-bit values like Atoms as
-       ‘long int’ even on platforms where ‘long int’ is 64 bits.  XCB doesn’t
-       do that, so adapt the recent XCB code to behave properly on 64-bit
-       platforms.  Also, fix what appears to be a bug in the interpretation
-       of xcb_get_property_value_length, at least on my Fedora platform
-       which is running libxcb-1.11-5.fc21.
-       * src/xfns.c (x_real_pos_and_offsets):
-       * src/xterm.c (get_current_wm_state):
-       xcb_get_property_value_length returns a byte count, not a word count.
-       For 32-bit quantities, xcb_get_property_value returns a vector
-       of 32-bit words, not of (possibly 64-bit) long int.
-
-       Backport.
-
-2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-       * src/undo.c (run_undoable_change): Now static.
-
-       Backport.
-
-2015-11-13  Eli Zaretskii  <eliz@gnu.org>
-
-       Remove support for ':timeout' from w32 tray notifications
-
-       * src/w32fns.c (Fw32_notification_notify): Delete the code that
-       supports ':timeout'.
-       (syms_of_w32fns): Don't DEFSYM ':timeout'.  This avoids clashes
-       with dbusbind.c when D-Bus is compiled in.
-
-       * doc/lispref/os.texi (Desktop Notifications): Don't mention
-       ':timeout'.
-
-       Backport.
-
-2015-11-13  Juanma Barranquero  <lekktu@gmail.com>
-
-       * test/automated/simple-test.el: Add test for bug#20698 (bug#21885)
-
-       (simple-test--transpositions): New macro.
-       (simple-transpose-subr): New test.
-
-       Backport.
-
-2015-11-13  Juanma Barranquero  <lekktu@gmail.com>
-
-       * lisp/progmodes/elisp-mode.el: Declare function `project-roots'
-
-       Backport.
-
-2015-11-13  Juanma Barranquero  <lekktu@gmail.com>
-
-       * src/undo.c: Small fixes for previous change
-
-       (run_undoable_change): Mark void argument list.
-       (record_property_change): Remove unused variable `boundary'.
-
-       Backport.
-
-2015-11-13  Eli Zaretskii  <eliz@gnu.org>
-
-       Add a few more variables to redisplay--variables
-
-       * lisp/frame.el (redisplay--variables): Add bidi-paragraph-direction
-       and bidi-display-reordering to the list.
-
-       Backport.
-
-2015-11-13  Eli Zaretskii  <eliz@gnu.org>
-
-       * lisp/loadup.el: Enlarge the size of the hash table to 80000.
-
-       Backport.
-
-2015-11-13  Eli Barzilay  <eli@barzilay.org>
-
-       Fix point positioning after transposing with negative arg
-
-       * lisp/simple.el (transpose-subr): When invoked with a negative
-       argument, move point to after the transposed text, like we do
-       when invoked with a positive argument.  (Bug#21885)
-
-       Backport.
-
-2015-11-13  Eli Zaretskii  <eliz@gnu.org>
-
-       Fix last change in shr.el
-
-       * lisp/net/shr.el (shr--have-one-fringe-p): Rename from
-       have-fringes-p.  All callers changed.  Doc fix.  (Bug#21895)
-
-       Backport.
-
-2015-11-13  Eli Zaretskii  <eliz@gnu.org>
-
-       Fix last change
-
-       * src/w32fns.c (syms_of_w32fns) [WINDOWSNT && !HAVE_DBUS]:
-       Don't DEFSYM tray notification symbols if D-Bus is being used.
-
-       Backport.
-
-2015-11-13  Eli Zaretskii  <eliz@gnu.org>
-
-       Another fix for MinGW64 and Cygwin builds due to notifications
-
-       * src/w32fns.c: Ifdef away tray notification code if D-Bus is
-       being compiled into Emacs.
-       (syms_of_w32fns) [WINDOWSNT && !HAVE_DBUS]: Don't defsubr
-       Sw32_notification_notify and Sw32_notification_close if the code
-       is not compiled.  Reported by Andy Moreton <andrewjmoreton@gmail.com>.
-
-       Backport.
-
-2015-11-13  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
-
-       Remove intern calls and XXX comments from Fx_export_frames
-
-       * src/xfns.c (Fx_export_frames): Use Qpdf, Qpng, Qpostscript, and
-       Qsvg instead of intern calls.  Use "postscript" instead of "ps"
-       for consistency with image types.  Remove XXX comments.
-       (syms_of_xfns) <Qpdf>: DEFSYM it.
-
-       Backport.
-
 2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
 
        Port recent XCB changes to 64-bit ‘long int’
 
        * src/undo.c (run_undoable_change): Now static.
 
-2015-11-13  Michael Albinus  <michael.albinus@gmx.de>
+2016-01-30  Michael Albinus  <michael.albinus@gmx.de>
 
        Adapt Tramp version, do not merge with master
 
        Sw32_notification_notify and Sw32_notification_close if the code
        is not compiled.  Reported by Andy Moreton <andrewjmoreton@gmail.com>.
 
-2015-11-13  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+2016-01-30  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+2015-11-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 
        Remove intern calls and XXX comments from Fx_export_frames
 
        for consistency with image types.  Remove XXX comments.
        (syms_of_xfns) <Qpdf>: DEFSYM it.
 
-2015-11-13  Eric Hanchrow  <eric.hanchrow@gmail.com>
+2016-01-30  Eric Hanchrow  <eric.hanchrow@gmail.com>
+2015-11-12  Eric Hanchrow  <eric.hanchrow@gmail.com>
 
        shr: don't invoke unbound function (Bug#21895)
 
        entry to its initial value to make the test repeatable in interactive
        sessions (assuming it doesn't fail and crashes Emacs, of course).
 
-2015-11-13  Artur Malabarba  <bruce.connor.am@gmail.com>
+2016-01-30  Artur Malabarba  <bruce.connor.am@gmail.com>
 
        * test/automated/cl-lib-tests.el (cl-lib-struct-constructors): Small fix
 
-2015-11-12  Phillip Lord  <phillip.lord@russet.org.uk>
+2016-01-30  Phillip Lord  <phillip.lord@russet.org.uk>
 
        : Tests for undo-auto functionality.
+2015-11-12  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * test/automated/cl-lib-tests.el (cl-lib-struct-constructors):
+       Small fix.
 
 2015-11-12  Phillip Lord  <phillip.lord@newcastle.ac.uk>
 
        better with a "^" in the `interactive' declaration so selection works
        as expected.
 
-2015-11-12  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+2016-01-30  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
 
        Sync with soap-client repository, version 3.0.2
 
        * lisp/net/soap-inspect.el: Remove version header.
 
        * lisp/net/soap-client.el, lisp/net/soap-inspect.el: Fix first line header
+2015-11-11  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       Sync with soap-client repository, version 3.0.2
+
+       * soap-client.el: Bump version to 3.0.2.
+
+       * soap-client.el (soap-warning): Use format, not format-message.
+
+       * soap-client.el: Add cl-lib to Package-Requires.  Require cl-lib.
+       (soap-validate-xs-simple-type): Use cl-labels instead of cl-flet.
+
+       * soap-client.el: Support Emacs versions that do not have
+       define-error.
+
+       * soap-inspect.el: Remove version header.
+
+       * soap-client.el, soap-inspect.el, jira2.el: Fix first line header
        format.
 
 2015-11-11  Alan Mackenzie  <acm@muc.de>
        * doc/lispref/os.texi (Desktop Notifications): Describe the native
        w32 tray notifications.
 
-2015-11-11  Alan Mackenzie  <acm@muc.de>
+2016-01-30  Alan Mackenzie  <acm@muc.de>
 
        First commit to scratch/follow.  Make Isearch work with Follow Mode, etc.
 
 
        * test/automated/map-tests.el (test-map-merge-with): New test.
 
-2015-11-10  Karl Fogel  <kfogel@red-bean.com>
+2015-11-09  Karl Fogel  <kfogel@red-bean.com>
 
        Fix some recently-perturbed bookmark autoloads
 
        introduced by my recent commit adding/changing the above functions
        (Sun Nov 8 14:16:43 2015 -0500, git commit 3812e17978).
 
+2016-01-30  Noah Friedman  <friedman@splode.com>
+
+       (ydump-buffer): Handle case where gap is at the start of buffer.
+       I don't recall if older versions of gdb were less strict but you
+       cannot dump a 0-length range in gdb 7.9.1.
+
+2016-01-30  Dmitry Gutov  <dgutov@yandex.ru>
 2015-11-09  Noah Friedman  <friedman@splode.com>
 
        * etc/emacs-buffer.gdb (ydump-buffer): Handle case where gap is at
        the start of buffer.  I don't recall if older versions of gdb were
        less strict but you cannot dump a 0-length range in gdb 7.9.1.
 
-2015-11-10  Dmitry Gutov  <dgutov@yandex.ru>
+2015-11-09  Dmitry Gutov  <dgutov@yandex.ru>
 
        * lisp/progmodes/project.el: Update Commentary.
 
        Merge branch 'project-next'
 
-2015-11-10  Dmitry Gutov  <dgutov@yandex.ru>
+2016-01-30  Dmitry Gutov  <dgutov@yandex.ru>
 
        Fold `project-ask-user' into `project-current'
 
        * lisp/progmodes/project.el (project-find-functions): Remove
        `project-ask-user'.
+2015-11-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fold `project-ask-user' into `project-current'
+
+       * lisp/progmodes/project.el (project-find-functions):
+       Remove `project-ask-user'.
        (project-ask-user): Remove function and the corresponding
        `project-roots' implementation.
        (project-current): Add a new argument, MAYBE-PROMPT.  Prompt the
        any Emacs integer.
        * src/lisp.h (lisp_word_count): Remove; no longer used.
 
-2015-11-09  Dmitry Gutov  <dgutov@yandex.ru>
+2016-01-30  Dmitry Gutov  <dgutov@yandex.ru>
+2015-11-08  Dmitry Gutov  <dgutov@yandex.ru>
 
        Make sure that the ignore file exists
 
        * lisp/vc/vc.el (vc-default-ignore-completion-table):
        Make sure that the ignore file exists.
 
-2015-11-09  Michael Sperber  <mike@xemacs.org>
+2016-01-30  Michael Sperber  <mike@xemacs.org>
 
        * lisp/gnus-sum.el (gnus-summary-backend-map): Bind B-backspace to
+2015-11-08  Michael Sperber  <mike@xemacs.org>
+
+       * gnus-sum.el (gnus-summary-backend-map): Bind B-backspace to
        `gnus-summary-delete-article` in a way that also works on XEmacs.
 
 2015-11-08  Simen Heggestøyl  <simenheg@gmail.com>
        Remove directories inside the project roots from the result.
        (http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg00536.html)
 
-2015-11-08  Dmitry Gutov  <dgutov@yandex.ru>
+2015-11-07  Dmitry Gutov  <dgutov@yandex.ru>
 
        Move and rename xref-find-regexp to the project package
 
 
 This file records repository revisions from
 commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
-commit 06da00c6cfb5f3cafbad92bd4584a0f50343a568 (inclusive).
+2016-03-04a00c6cfb5f3cafbad92bd4584a0f50343a568 (inclusive).
+2016-02-15decb15e0496cec0c48d980c88a5a9d7cc00da (inclusive).
+2016-02-04b6d89ff9288a49099f041752908b5eb9613e (inclusive).
+commit ba1422e12f80ae1eb2aa9d0ce80c14e3ee4b3950 (inclusive).
 See ChangeLog.1 for earlier changes.
 
 ;; Local Variables:
index 83bb718a9607956216204bd2cffd6a627be3ef17..e6941b03b30912f07ec1b9cdac1e8d63f4f1d0a1 100644 (file)
@@ -62,10 +62,13 @@ default $(ORDINARY_GOALS): Makefile
 # Execute in sequence, so that multiple user goals don't conflict.
 .NOTPARALLEL:
 
+# 'all' if a .git subdirectory is present, empty otherwise.
+ALL_IF_GIT = $(subst .git,all,$(wildcard .git))
+
 configure:
        @echo >&2 'There seems to be no "configure" file in this directory.'
-       @echo >&2 'Running ./autogen.sh ...'
-       ./autogen.sh
+       @echo >&2 Running ./autogen.sh $(ALL_IF_GIT) ...
+       ./autogen.sh $(ALL_IF_GIT)
        @echo >&2 '"configure" file built.'
 
 Makefile: configure
diff --git a/INSTALL b/INSTALL
index 6f516bd1dde7a755df33a2b0df1599c7c8c59a0b..27af6d9c21f60f9410c0aeb3e4ebc32546336260 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -318,9 +318,11 @@ Use --enable-gcc-warnings to enable compile-time checks that warn
 about possibly-questionable C code.  This is intended for developers
 and is useful with GNU-compatible compilers.  On a recent GNU system
 there should be no warnings; on older and on non-GNU systems the
-generated warnings may still be useful, though you may prefer building
-with 'make WERROR_CFLAGS=' so that the warnings are not treated as
-errors.
+generated warnings may still be useful, though you may prefer
+configuring with --enable-gcc-warnings=warn-only so they are not
+treated as errors.  The default is --enable-gcc-warnings=warn-only if
+it appears to be a developer build, and is --disable-gcc-warnings
+otherwise.
 
 Use --disable-silent-rules to cause 'make' to give more details about
 the commands it executes.  This can be helpful when debugging a build
index 1720758928c3799b8bc872fb1ccf77aea05b33b6..7497f1f29691d410cec72f5e7456293c57c871eb 100644 (file)
@@ -18,9 +18,10 @@ makeinfo  - not strictly necessary, but highly recommended, so that
   you can build the manuals.
 
 To use the autotools, run the following shell command to generate the
-'configure' script and some related files:
+'configure' script and some related files, and to set up your git
+configuration:
 
-  $ ./autogen.sh
+  $ ./autogen.sh all
 
 You can then configure your build as follows:
 
index b212c914e566cd623529b612b06d8ac414787e32..7aac403adac90210278e3a5f20aea04088f9c7da 100644 (file)
@@ -925,14 +925,17 @@ extraclean: $(extraclean_dirs:=_extraclean)
 TAGS tags: lib lib-src src
        $(MAKE) -C src tags
 
-check check-expensive: all
-       @if test ! -d test/automated; then \
+.PHONY: have-tests
+have-tests:
+       @if test ! -d test; then \
          echo "You do not seem to have the test/ directory."; \
          echo "Maybe you are using a release tarfile, rather than a repository checkout."; \
-       else \
-         $(MAKE) -C test/automated $@; \
+        exit 1; \
        fi
 
+check check-maybe check-expensive: have-tests all
+       $(MAKE) -C test $@
+
 dist:
        cd ${srcdir}; ./make-dist
 
@@ -947,7 +950,7 @@ $(DOCS):
        $(MAKE) -C doc/$(subst -, ,$@)
 
 .PHONY: $(DOCS) docs pdf ps
-.PHONY: info dvi dist check check-expensive html info-real info-dir check-info
+.PHONY: info dvi dist check check-maybe check-expensive html info-real info-dir check-info
 
 ## TODO add etc/refcards.
 docs: $(DOCS)
@@ -1093,7 +1096,7 @@ bootstrap: bootstrap-clean
        $(MAKE) all
 
 .PHONY: ChangeLog change-history change-history-commit change-history-nocommit
-.PHONY: emacs-25-branch-is-current unchanged-history-files
+.PHONY: preferred-branch-is-current unchanged-history-files
 
 CHANGELOG = ChangeLog
 emacslog = build-aux/gitlog-to-emacslog
@@ -1110,8 +1113,9 @@ ChangeLog:
          ./$(emacslog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX)
 
 # Check that we are in a good state for changing history.
-emacs-25-branch-is-current:
-       git branch | grep -q '^\* emacs-25$$'
+PREFERRED_BRANCH = master
+preferred-branch-is-current:
+       git branch | grep -q '^\* $(PREFERRED_BRANCH)$$'
 unchanged-history-files:
        x=$$(git diff-files --name-only $(CHANGELOG_N) $(emacslog)) && \
          test -z "$$x"
@@ -1121,7 +1125,7 @@ new_commit_regexp = ^commit [0123456789abcdef]* (inclusive)
 
 # Copy newer commit messages to the start of the ChangeLog history file,
 # and consider them to be older.
-change-history-nocommit: emacs-25-branch-is-current unchanged-history-files
+change-history-nocommit: preferred-branch-is-current unchanged-history-files
        -rm -f ChangeLog.tmp
        $(MAKE) ChangeLog CHANGELOG=ChangeLog.tmp
        sed '/^This file records repository revisions/,$$d' \
diff --git a/README b/README
index 915d29039f4cad5a38dcbb122d2eb1795f8b5934..35a31dbd31e448e2e815c9bb2d7f115b8fd5357a 100644 (file)
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ Copyright (C) 2001-2016 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
-This directory tree holds version 25.0.93 of GNU Emacs, the extensible,
+This directory tree holds version 25.1.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
index 796b57db3d8640c3f5980170ee212f46108c5408..d9df152bff5a8c916823d2a9400d84b7460c305e 100644 (file)
@@ -13,7 +13,6 @@ CYGWIN                Compiling the Cygwin port.
 __CYGWIN__     Ditto
 GNU_LINUX
 HPUX
-IRIX6_5
 MSDOS          Compiling the MS-DOS port.
 __MSDOS__      Ditto.
 __DJGPP_MINOR__ Minor version number of the DJGPP library; used only in msdos.c and dosfns.c.
@@ -148,7 +147,6 @@ HAVE_FUTIMES
 HAVE_FUTIMESAT
 HAVE_GAI_STRERROR
 HAVE_GCONF
-HAVE_GETADDRINFO
 HAVE_GETDELIM
 HAVE_GETGRENT
 HAVE_GETHOSTNAME
@@ -185,7 +183,6 @@ HAVE_GTK_WIDGET_GET_WINDOW
 HAVE_GTK_WIDGET_SET_HAS_WINDOW
 HAVE_GTK_WINDOW_SET_HAS_RESIZE_GRIP
 HAVE_G_TYPE_INIT
-HAVE_H_ERRNO
 HAVE_IFADDRS_H
 HAVE_IMAGEMAGICK
 HAVE_INET_SOCKETS
@@ -254,7 +251,6 @@ HAVE_RANDOM
 HAVE_READLINK
 HAVE_READLINKAT
 HAVE_RECVFROM
-HAVE_RES_INIT
 HAVE_RINT
 HAVE_RSVG
 HAVE_SELECT
@@ -379,7 +375,6 @@ NSIG
 NSIG_MINIMUM
 NULL_DEVICE
 PAGESIZE
-PREFER_VSUSP
 PTY_ITERATION
 PTY_NAME_SPRINTF
 PTY_OPEN
index b15c57e7ee702c324056935114e1fd3b50cfd8f7..5aff82428878d0b1cd1cca1727b1e9a5332f6c25 100644 (file)
@@ -61,7 +61,7 @@ Michael Albinus
             lisp/net/tramp*.el
             lisp/url/url-tramp.el
             doc/misc/tramp*.texi
-            test/automated/tramp-tests.el
+            test/lisp/net/tramp-tests.el
 
         D-Bus
            src/dbusbind.c
@@ -69,13 +69,13 @@ Michael Albinus
            lisp/net/secrets.el
             lisp/net/zeroconf.el
            doc/misc/dbus.texi
-            test/automated/dbus-tests.el
+            test/lisp/net/dbus-tests.el
 
         File Notifications
            src/gfilenotify.c
            src/kqueue.c
            lisp/filenotify.el
-           test/automated/file-notify-tests.el
+           test/lisp/filenotify-tests.el
 
 Simen Heggestøyl
        lisp/textmodes/css-mode.el
@@ -211,9 +211,8 @@ Michael Albinus
         lisp/autorevert.el
        lisp/eshell/em-tramp.el
        lisp/notifications.el
-        test/automated/auto-revert-tests.el
-       test/automated/inotify-test.el
-       test/automated/vc-tests.el
+        test/lisp/autorevert-tests.el
+       test/src/inotify-test.el
 
 Nicolas Petton
        lisp/emacs-lisp/subr-x.el
index a08a36937b175b2dce91dc8738f11d34ba3c1cc8..d2cb1e8df03442ebb800e931d2cb784cdfdfc34b 100644 (file)
 (require 'smerge-mode)
 
 (defvar gitmerge-skip-regexp
-  "back[- ]?port\\|merge\\|sync\\|re-?generate\\|bump version\\|from trunk\\|\
-Auto-commit"
+  ;; We used to include "sync" in there, but in my experience it only
+  ;; caused false positives.  --Stef
+  "back[- ]?port\\|cherry picked from commit\\|\\(do not\\|no need to\\) merge\\|\
+re-?generate\\|bump version\\|from trunk\\|Auto-commit"
   "Regexp matching logs of revisions that might be skipped.
 `gitmerge-missing' will ask you if it should skip any matches.")
 
@@ -65,7 +67,7 @@ Auto-commit"
   '((t (:strike-through t)))
   "Face for skipped commits.")
 
-(defconst gitmerge-default-branch "origin/emacs-24"
+(defconst gitmerge-default-branch "origin/emacs-25"
   "Default for branch that should be merged.")
 
 (defconst gitmerge-buffer "*gitmerge*"
@@ -169,9 +171,10 @@ Auto-commit"
 (defun gitmerge-highlight-skip-regexp ()
   "Highlight strings that match `gitmerge-skip-regexp'."
   (save-excursion
-    (while (re-search-forward gitmerge-skip-regexp nil t)
-      (put-text-property (match-beginning 0) (match-end 0)
-                        'face 'font-lock-warning-face))))
+    (let ((case-fold-search t))
+      (while (re-search-forward gitmerge-skip-regexp nil t)
+        (put-text-property (match-beginning 0) (match-end 0)
+                           'face 'font-lock-warning-face)))))
 
 (defun gitmerge-missing (from)
   "Return the list of revisions that need to be merged from FROM.
@@ -183,8 +186,8 @@ if and why this commit should be skipped."
     ;; Go through the log and remember all commits that match
     ;; `gitmerge-skip-regexp' or are marked by --cherry-mark.
     (with-temp-buffer
-      (call-process "git" nil t nil "log" "--cherry-mark" from
-                   (concat "^" (car (vc-git-branches))))
+      (call-process "git" nil t nil "log" "--cherry-mark" "--left-only"
+                   (concat from "..." (car (vc-git-branches))))
       (goto-char (point-max))
       (while (re-search-backward "^commit \\(.+\\) \\([0-9a-f]+\\).*" nil t)
        (let ((cherrymark (match-string 1))
@@ -206,9 +209,9 @@ if and why this commit should be skipped."
   "Create the buffer for choosing commits."
   (with-current-buffer (get-buffer-create gitmerge-buffer)
     (erase-buffer)
-    (call-process "git" nil t nil "log"
+    (call-process "git" nil t nil "log" "--left-only"
                  "--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s"
-                 from (concat "^" (car (vc-git-branches))))
+                 (concat from "..." (car (vc-git-branches))))
     (goto-char (point-min))
     (while (looking-at "^\\([a-f0-9]+\\)")
       (let ((skipreason (gitmerge-skip-commit-p (match-string 1) commits)))
@@ -328,6 +331,10 @@ is nil, only the single commit BEG is merged."
           (if end (list (concat beg "~.." end))
             `("-1" ,beg)))
     (insert "\n")
+    ;; Truncate to 72 chars so that the resulting ChangeLog line fits in 80.
+    (goto-char (point-min))
+    (while (re-search-forward "^\\(.\\{69\\}\\).\\{4,\\}" nil t)
+      (replace-match "\\1..."))
     (buffer-string)))
 
 (defun gitmerge-apply (missing from)
index 40b5b78ee8f0a7011f357aee807f59acdd19b497..5d6512760d905778c689f2aa20c34d4b0e0f7dbd 100755 (executable)
@@ -30,12 +30,12 @@ GNULIB_MODULES='
   careadlinkat close-stream count-one-bits count-trailing-zeros
   crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512
   dtoastr dtotimespec dup2 environ execinfo faccessat
-  fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync
+  fcntl fcntl-h fdatasync fdopendir filemode filevercmp fstatat fsync
   getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog
   ignore-value intprops largefile lstat
   manywarnings memrchr mkostemp mktime
   pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat
-  sig2str socklen stat-time stdalign stddef stdio
+  sig2str socklen stat-time std-gnu11 stdalign stddef stdio
   stpcpy strftime strtoimax strtoumax symlink sys_stat
   sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub
   unsetenv update-copyright utimens
diff --git a/admin/notes/bug-triage b/admin/notes/bug-triage
new file mode 100644 (file)
index 0000000..4a2a5f3
--- /dev/null
@@ -0,0 +1,108 @@
+HOW TO TRIAGE EMACS BUGS  -*- outline -*-
+
+This document just describes the procedure of triaging bugs, for information on
+how to work with the bug tracker, see the bugtracker file in this same directory
+for the basics.  You can also install the debbugs ELPA package for access to M-x
+debbugs-gnu, an emacs interface to debbugs, and M-x debbugs-org, an emacs
+interface via org-mode.
+
+* Bug backlog triage procedure
+
+The goal of this triage is to prune down the list of old bugs, closing
+the ones that are not reproducible on the current release.
+
+  1. To start, enter debbugs mode (either debbugs-gnu, debbugs-org, or via the
+     web browser), and accept the default list option of bugs that have severity
+     serious, important, or normal.
+  2. This will also show closed bugs that have yet to be archived.  You can
+     filter these out in debbugs-gnu with "x" (debbugs-gnu-toggle-suppress).
+  3. For each bug, we want to primarily make sure it is still
+     reproducible.  A bug can and should stay open as long as it is
+     still a bug and no one has fixed it.  The following is a
+     suggested checklist to follow for handling these bugs, along with
+     example replies.  Closing, tagging, etc., are done
+     with debbugs control messages, which in debbugs-gnu is initiated
+     with a "C".
+     [ ] Read the mail thread for the bug.  Find out if anyone has
+         been able to reproduce this on the current release.  If
+         someone has been able to, then your work is finished for this
+         bug.
+     [ ] Make sure there's enough information to reproduce the bug.
+         It should be very clear how to reproduce.  If not, please ask
+         for specific steps to reproduce.  If you don't get them, and
+         you can't reproduce without them, you can close as
+         "doneunreproducible".  Sometimes there is specific hardware
+         involved, such as particular models of keyboards, or it may
+         simply involve a platform you don't have access to.  It's
+         fine to ignore those, and let a future triager that is better
+         equipped to reproduce it handle it.
+
+         An example reply asking for clear reproduction steps would be
+         something like: "Hi!  In the interest of seeing whether this
+         is reproducible, and to aid anyone who will look at this bug
+         in the future, can you please give instructions on how to
+         reproduce this bug starting from an emacs without
+         configuration ("emacs -Q")?
+     [ ] If there is enough detail to reproduce, but no one has
+         mentioned being able to reproduce on the current release,
+         read the bug description and attempt to reproduce on an emacs
+         started with "emacs -Q" (the goal is to not let our personal
+         configs interfere with bug testing).
+
+         If you can reproduce, then reply on the thread (either on the
+         original message, or anywhere you find appropriate) that you
+         can reproduce this on the current release. If your
+         reproduction gives additional info (such as a backtrace),
+         then add that as well, since it will help whoever attempts to
+         fix it.
+
+         Example reply: "I'd just like to add that I can reproduce
+         this on the latest version of Emacs, Emacs 25."
+
+         If you can't reproduce, state that you can't reproduce it on
+         the current release, ask if they can try again against the
+         current release.  Tag the bug as "unreproducable".  Wait a
+         few weeks for their reply - if they can reproduce it, then
+         that's great, otherwise close as "doneunreproducible".
+
+         Example reply: "I've attempted to reproduce this on the
+         latest version of emacs, Emacs 25, but haven't been able to.
+         Can you try to reproduce this on this version, and let us
+         know if you are able to?  If I don't hear back in a few
+         weeks, I'll just close this bug as unreproducible."
+     [ ] Check that the priority is reasonable.  Most bugs should be
+         marked as normal, but crashers and security issues can be
+         marked as serious.
+  4. Your changes will take some time to take effect.  After a period of minutes
+     to hours, you will get a mail telling you the control message has been
+     processed.  At this point, if there were no errors detected, you and
+     everyone else can see your changes. If there are errors, read the error
+     text - if you need help, consulting the bugtracker documentation in this
+     same directory.
+
+* New bug triage process
+
+The goal of the new bug triage process is similar to the backlog triage process,
+except that the focus is on prioritizing the bug, and making sure it is has
+necessary information for others to act on.
+
+For each new bug, ask the following questions:
+
+  1. Is the bug report written in a way to be easy to reproduce (starts from
+     emacs -Q, etc.)?  If not, ask the reporter to try and reproduce it on an
+     emacs without customization.
+  2. Is the bug report written against the latest emacs?  If not, try to
+     reproduce on the latest version, and if it can't be reproduced, ask the
+     reporter to try again with the latest version.
+  3. Is the bug the same as another bug?  If so, merge the bugs.
+  4. What is the priority of the bug?  Add a priority: serious, important,
+     normal, minor, or wishlist.
+  5. Who should be the owner?  This depends on what component the bug is part
+     of.  You can look at the admin/MAINTAINERS file (then you can just search
+     emacs-devel to match the name with an email address).
+
+In the debbugs-gnu buffer, bugs are marked in the "State" column
+according to the communication flow.  Red bugs mean that nobody has
+answered, these bugs need primary attention.  Green bugs flag that
+there is a recent communication about, and orange bugs flag that the
+bug hasn't been touched for at least two weeks.
index 3f75ff52ca49cfb91fad927e619ee9245ef03f48..2668ea3b445aed3af966a5e8270012742ec30c2a 100644 (file)
@@ -44,9 +44,10 @@ branches merges bugfix commits from the "emacs-NN" branch.
 Emacs uses the "blocking bug(s)" feature of Debbugs for bugs need to
 be addressed in the next release.
 
-Currently, bug#19759 is the tracking bug for release of 25.1.  Say
-bug#123 needs to be fixed for Emacs 25.1.  Send a message to
-control@debbugs.gnu.org that says:
+Currently, bug#19759 is the tracking bug for release of 25.1 and
+bug#21966 is the tracking bug for release of 25.2.  Say bug#123 needs
+to be fixed for Emacs 25.1.  Send a message to control@debbugs.gnu.org
+that says:
 
    block 19759 by 123
 
index 82ad622c64e65dfdaaa5679260735eff7daf082c..f27bfe0d1482efbbb61472b80c6e63293c2ba8fb 100755 (executable)
@@ -49,7 +49,7 @@ cd ../
 
 if [ -d .bzr ]; then
     vcs=bzr
-elif [ -d .git ]; then
+elif [ -e .git ]; then
     vcs=git
 else
     die "Cannot determine vcs"
index a63c53c903c7699cab36838f1323cc186c94f112..cd0accd6793c1b442be8702a1caf77fa2977effb 100755 (executable)
@@ -103,16 +103,37 @@ check_version ()
     return 2
 }
 
+do_autoconf=false
+test $# -eq 0 && do_autoconf=true
+do_git=false
+
+for arg; do
+    case $arg in
+      --help)
+       exec echo "$0: usage: $0 [all|autoconf|git]";;
+      all)
+       do_autoconf=true
+       test -e .git && do_git=true;;
+      autoconf)
+       do_autoconf=true;;
+      git)
+       do_git=true;;
+      *)
+       echo >&2 "$0: $arg: unknown argument"; exit 1;;
+    esac
+done
+
+
+# Generate Autoconf and Automake related files, if requested.
 
-cat <<EOF
-Checking whether you have the necessary tools...
-(Read INSTALL.REPO for more details on building Emacs)
+if $do_autoconf; then
 
-EOF
+  echo 'Checking whether you have the necessary tools...
+(Read INSTALL.REPO for more details on building Emacs)'
 
-missing=
+  missing=
 
-for prog in $progs; do
+  for prog in $progs; do
 
     sprog=`echo "$prog" | sed 's/-/_/g'`
 
@@ -138,15 +159,13 @@ for prog in $progs; do
         eval ${sprog}_why=\""$stat"\"
     fi
 
-done
-
+  done
 
-if [ x"$missing" != x ]; then
 
-    cat <<EOF
+  if [ x"$missing" != x ]; then
 
-Building Emacs from the repository requires the following specialized programs:
-EOF
+    echo '
+Building Emacs from the repository requires the following specialized programs:'
 
     for prog in $progs; do
         sprog=`echo "$prog" | sed 's/-/_/g'`
@@ -157,10 +176,8 @@ EOF
     done
 
 
-    cat <<EOF
-
-Your system seems to be missing the following tool(s):
-EOF
+    echo '
+Your system seems to be missing the following tool(s):'
 
     for prog in $missing; do
         sprog=`echo "$prog" | sed 's/-/_/g'`
@@ -170,8 +187,7 @@ EOF
         echo "$prog ($why)"
     done
 
-    cat <<EOF
-
+    echo '
 If you think you have the required tools, please add them to your PATH
 and re-run this script.
 
@@ -198,78 +214,136 @@ autoreconf -fi -I m4
 
 instead of this script.
 
-Please report any problems with this script to bug-gnu-emacs@gnu.org .
-EOF
+Please report any problems with this script to bug-gnu-emacs@gnu.org .'
 
     exit 1
+  fi
+
+  echo 'Your system has the required tools.'
+  echo "Running 'autoreconf -fi -I m4' ..."
+
+
+  ## Let autoreconf figure out what, if anything, needs doing.
+  ## Use autoreconf's -f option in case autoreconf itself has changed.
+  autoreconf -fi -I m4 || exit $?
+
+  ## Create a timestamp, so that './autogen.sh; make' doesn't
+  ## cause 'make' to needlessly run 'autoheader'.
+  echo timestamp > src/stamp-h.in || exit
 fi
 
-echo 'Your system has the required tools.'
-echo "Running 'autoreconf -fi -I m4' ..."
 
+# True if the Git setup was OK before autogen.sh was run.
 
-## Let autoreconf figure out what, if anything, needs doing.
-## Use autoreconf's -f option in case autoreconf itself has changed.
-autoreconf -fi -I m4 || exit $?
+git_was_ok=true
 
-## Create a timestamp, so that './autogen.sh; make' doesn't
-## cause 'make' to needlessly run 'autoheader'.
-echo timestamp > src/stamp-h.in || exit
+if $do_git; then
+    case `cp --help 2>/dev/null` in
+      *--backup*--verbose*)
+       cp_options='--backup=numbered --verbose';;
+      *)
+       cp_options='-f';;
+    esac
+fi
 
 
-## Configure Git, if using Git.
-if test -d .git && (git status -s) >/dev/null 2>&1; then
+# Like 'git config NAME VALUE' but verbose on change and exiting on failure.
+# Also, do not configure unless requested.
 
-    # Configure 'git diff' hunk header format.
+git_config ()
+{
+    name=$1
+    value=$2
+
+    ovalue=`git config --get "$name"` && test "$ovalue" = "$value" || {
+       if $do_git; then
+           if $git_was_ok; then
+               echo 'Configuring local git repository...'
+               case $cp_options in
+                 --backup=*)
+                   config=$git_common_dir/config
+                   cp $cp_options --force -- "$config" "$config" || exit;;
+               esac
+           fi
+           echo "git config $name '$value'"
+           git config "$name" "$value" || exit
+       fi
+       git_was_ok=false
+    }
+}
+
+## Configure Git, if requested.
+
+# Get location of Git's common configuration directory.  For older Git
+# versions this is just '.git'.  Newer Git versions support worktrees.
+
+test -e .git && git_common_dir=`git rev-parse --git-common-dir 2>/dev/null` ||
+  git_common_dir=.git
+hooks=$git_common_dir/hooks
+
+# Check hashes when transferring objects among repositories.
+
+git_config transfer.fsckObjects true
+
+
+# Configure 'git diff' hunk header format.
 
-    git config 'diff.elisp.xfuncname' \
-       '^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)' || exit
-    git config 'diff.texinfo.xfuncname' \
-       '^@node[[:space:]]+([^,[:space:]][^,]+)' || exit
+git_config diff.elisp.xfuncname \
+          '^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)'
+git_config 'diff.m4.xfuncname' '^((m4_)?define|A._DEFUN(_ONCE)?)\([^),]*'
+git_config 'diff.make.xfuncname' \
+          '^([$.[:alnum:]_].*:|[[:alnum:]_]+[[:space:]]*([*:+]?[:?]?|!?)=|define .*)'
+git_config 'diff.shell.xfuncname' \
+          '^([[:space:]]*[[:alpha:]_][[:alnum:]_]*[[:space:]]*\(\)|[[:alpha:]_][[:alnum:]_]*=)'
+git_config diff.texinfo.xfuncname \
+          '^@node[[:space:]]+([^,[:space:]][^,]+)'
 
 
-    # Install Git hooks.
+# Install Git hooks.
 
-    tailored_hooks=
-    sample_hooks=
+tailored_hooks=
+sample_hooks=
 
-    for hook in commit-msg pre-commit; do
-       cmp build-aux/git-hooks/$hook .git/hooks/$hook >/dev/null 2>&1 ||
+for hook in commit-msg pre-commit; do
+    cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
        tailored_hooks="$tailored_hooks $hook"
-    done
-    for hook in applypatch-msg pre-applypatch; do
-       test ! -r .git/hooks/$hook.sample ||
-       cmp .git/hooks/$hook.sample .git/hooks/$hook >/dev/null 2>&1 ||
+done
+for hook in applypatch-msg pre-applypatch; do
+    cmp -- "$hooks/$hook.sample" "$hooks/$hook" >/dev/null 2>&1 ||
        sample_hooks="$sample_hooks $hook"
-    done
+done
 
-    if test -n "$tailored_hooks$sample_hooks"; then
+if test -n "$tailored_hooks$sample_hooks"; then
+    if $do_git; then
        echo "Installing git hooks..."
 
-       case `cp --help 2>/dev/null` in
-         *--backup*--verbose*)
-           cp_options='--backup=numbered --verbose';;
-         *)
-           cp_options='-f';;
-       esac
-
        if test -n "$tailored_hooks"; then
            for hook in $tailored_hooks; do
-               cp $cp_options build-aux/git-hooks/$hook .git/hooks || exit
-               chmod a-w .git/hooks/$hook || exit
+               dst=$hooks/$hook
+               cp $cp_options -- build-aux/git-hooks/$hook "$dst" || exit
+               chmod -- a-w "$dst" || exit
            done
        fi
 
        if test -n "$sample_hooks"; then
            for hook in $sample_hooks; do
-               cp $cp_options .git/hooks/$hook.sample .git/hooks/$hook || exit
+               cp $cp_options -- "$hooks/$hook.sample" "$hooks/$hook" || exit
                chmod a-w .git/hooks/$hook || exit
            done
        fi
+    else
+       git_was_ok=false
     fi
 fi
 
-echo "You can now run './configure'."
+if test ! -f configure; then
+    echo "You can now run '$0 autoconf'."
+elif test -e .git && test $git_was_ok = false && test $do_git = false; then
+    echo "You can now run '$0 git'."
+elif test ! -f config.status ||
+       test -n "`find src/stamp-h.in -newer config.status`"; then
+    echo "You can now run './configure'."
+fi
 
 exit 0
 
index 5c187f5eae01c3c608a587c78c7638b506d27d51..6b9cfc145bcd3a798be0869bc2a8472d7954bf9f 100755 (executable)
@@ -68,7 +68,7 @@ if [ -f "$output" ]; then
 fi
 
 # If this is not a Git repository, just generate an empty ChangeLog.
-test -d .git || {
+test -e .git || {
   >"$output"
   exit
 }
index 8f8c38bd83265dd8fab9234fabf5fd94f0189442..448c48d9caacab324e45b76d12d950c335497595 100644 (file)
@@ -23,7 +23,7 @@ dnl  along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 AC_PREREQ(2.65)
 dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
-AC_INIT(GNU Emacs, 25.0.93, bug-gnu-emacs@gnu.org)
+AC_INIT(GNU Emacs, 25.1.50, bug-gnu-emacs@gnu.org)
 
 dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
 dnl and then quoted again for a C string.  Separate options with spaces.
@@ -330,6 +330,7 @@ OPTION_DEFAULT_ON([tiff],[don't compile with TIFF image support])
 OPTION_DEFAULT_ON([gif],[don't compile with GIF image support])
 OPTION_DEFAULT_ON([png],[don't compile with PNG image support])
 OPTION_DEFAULT_ON([rsvg],[don't compile with SVG image support])
+OPTION_DEFAULT_ON([libsystemd],[don't compile with libsystemd support])
 OPTION_DEFAULT_OFF([cairo],[compile with Cairo drawing (experimental)])
 OPTION_DEFAULT_ON([xml2],[don't compile with XML parsing support])
 OPTION_DEFAULT_ON([imagemagick],[don't compile with ImageMagick image support])
@@ -546,6 +547,14 @@ AC_ARG_ENABLE(gtk-deprecation-warnings,
                [Show Gtk+/Gdk deprecation warnings for Gtk+ >= 3.0])],
 [ac_enable_gtk_deprecation_warnings="${enableval}"],[])
 
+BUILD_DETAILS=
+AC_ARG_ENABLE([build-details],
+  [AS_HELP_STRING([--disable-build-details],
+                 [Make the build more deterministic by omitting host
+                  names, time stamps, etc. from the output.])],
+  [test "$enableval" = no && BUILD_DETAILS=--no-build-details])
+AC_SUBST([BUILD_DETAILS])
+
 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
 dnl the great gob of text.  Thus it's not processed for possible expansion.
@@ -607,12 +616,7 @@ case "${canonical}" in
       * )            unported=yes ;;
     esac
     opsys=darwin
-    ## Use fink packages if available.
-    ## FIXME find a better way to do this: http://debbugs.gnu.org/11507
-##    if test -d /sw/include && test -d /sw/lib; then
-##      GCC_TEST_OPTIONS="-I/sw/include -L/sw/lib"
-##      NON_GCC_TEST_OPTIONS=${GCC_TEST_OPTIONS}
-##    fi
+    ## FIXME: Find a way to use Fink if available (Bug#11507).
   ;;
 
   ## Chromium Native Client
@@ -648,16 +652,6 @@ case "${canonical}" in
     opsys=aix4-2
   ;;
 
-  ## Silicon Graphics machines
-  ## Iris 4D
-  mips-sgi-irix6.5 )
-    opsys=irix6-5
-    # Without defining _LANGUAGE_C, things get masked out in the headers
-    # so that, for instance, grepping for 'free' in stdlib.h fails and
-    # AC_HEADER_STD_C fails.   (MIPSPro 7.2.1.2m compilers, Irix 6.5.3m).
-    NON_GCC_TEST_OPTIONS="-D_LANGUAGE_C"
-  ;;
-
   ## Suns
   *-sun-solaris* \
     | i[3456]86-*-solaris2* | i[3456]86-*-sunos5* \
@@ -774,8 +768,6 @@ AM_PROG_CC_C_O
 
 if test x$GCC = xyes; then
   test "x$GCC_TEST_OPTIONS" != x && CC="$CC $GCC_TEST_OPTIONS"
-else
-  test "x$NON_GCC_TEST_OPTIONS" != x && CC="$CC $NON_GCC_TEST_OPTIONS"
 fi
 
 dnl This is used in lib/Makefile.am to use nt/gnulib.mk, the
@@ -851,17 +843,45 @@ if test "$ac_test_CFLAGS" != set; then
   esac
 fi
 
+# gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found])
+# ---------------------------------------------------------------------------
+# If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND.
+# Otherwise, run RUN-IF-NOT-FOUND.
+AC_DEFUN([gl_GCC_VERSION_IFELSE],
+  [AC_PREPROC_IFELSE(
+    [AC_LANG_PROGRAM(
+      [[
+#if ($1) < __GNUC__ || (($1) == __GNUC__ && ($2) <= __GNUC_MINOR__)
+/* ok */
+#else
+# error "your version of gcc is older than $1.$2"
+#endif
+      ]]),
+    ], [$3], [$4])
+  ]
+)
+
 AC_ARG_ENABLE([gcc-warnings],
-  [AS_HELP_STRING([--enable-gcc-warnings],
-                  [turn on lots of GCC warnings/errors. This is intended for
-                  developers, and may generate false alarms when used
-                  with older or non-GNU development tools.])],
+  [AS_HELP_STRING([--enable-gcc-warnings@<:@=TYPE@:>@],
+                  [control generation of GCC warnings.  The TYPE 'yes'
+                  means to fail if any warnings are issued; 'warn-only'
+                  means issue warnings without failing (default for
+                  developer builds); 'no' means disable warnings
+                  (default for non-developer builds).])],
   [case $enableval in
-     yes|no) ;;
+     yes|no|warn-only) ;;
      *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
    esac
    gl_gcc_warnings=$enableval],
-  [gl_gcc_warnings=no]
+  [# By default, use 'warn-only' if it looks like the invoker of 'configure'
+   # is a developer as opposed to a builder.  This is most likely true
+   # if GCC is recent enough and there is a .git directory or file;
+   # however, if there is also a .tarball-version file it is probably
+   # just a release imported into Git for patch management.
+   gl_gcc_warnings=no
+   if test -e "$srcdir"/.git && test ! -f "$srcdir"/.tarball-version; then
+     gl_GCC_VERSION_IFELSE([5], [3], [gl_gcc_warnings=warn-only])]
+   fi
 )
 
 # clang is unduly picky about some things.
@@ -877,7 +897,7 @@ AC_CACHE_CHECK([whether the compiler is clang], [emacs_cv_clang],
 
 # When compiling with GCC, prefer -isystem to -I when including system
 # include files, to avoid generating useless diagnostics for the files.
-AS_IF([test "$gl_gcc_warnings" != yes],
+AS_IF([test $gl_gcc_warnings = no],
  [
   isystem='-I'
   AS_IF([test "$emacs_cv_clang" = yes],
@@ -901,7 +921,7 @@ AS_IF([test "$gl_gcc_warnings" != yes],
        nw="$nw -Wwrite-strings"
        ;;
   esac
-  AS_IF([test -z "$nw"],
+  AS_IF([test $gl_gcc_warnings = yes],
     [gl_WARN_ADD([-Werror], [WERROR_CFLAGS])])
   AC_SUBST([WERROR_CFLAGS])
 
@@ -911,7 +931,6 @@ AS_IF([test "$gl_gcc_warnings" != yes],
   nw="$nw -Wvla"                    # Emacs uses <vla.h>.
   nw="$nw -Wswitch-default"         # Too many warnings for now
   nw="$nw -Winline"                 # OK to ignore 'inline'
-  nw="$nw -Wjump-misses-init"       # We sometimes safely jump over init.
   nw="$nw -Wstrict-overflow"        # OK to optimize assuming that
                                     # signed overflow has undefined behavior
   nw="$nw -Wsync-nand"              # irrelevant here, and provokes ObjC warning
@@ -1246,7 +1265,6 @@ fi
 
 dnl We need -znocombreloc if we're using a relatively recent GNU ld.
 dnl If we can link with the flag, it shouldn't do any harm anyhow.
-dnl (Don't use '-z nocombreloc' as -z takes no arg on Irix.)
 dnl Treat GCC specially since it just gives a non-fatal 'unrecognized option'
 dnl if not built to support GNU ld.
 
@@ -1475,7 +1493,7 @@ LIBS=$OLD_LIBS
 
 dnl Current possibilities handled by sed (aix4-2 -> aix,
 dnl gnu-linux -> gnu/linux, etc.):
-dnl gnu, gnu/linux, gnu/kfreebsd, aix, cygwin, darwin, hpux, irix.
+dnl gnu, gnu/linux, gnu/kfreebsd, aix, cygwin, darwin, hpux.
 dnl And special cases: berkeley-unix, usg-unix-v, ms-dos, windows-nt.
 SYSTEM_TYPE=`echo $opsys | sed -e 's/[[0-9]].*//' -e 's|-|/|'`
 
@@ -1609,6 +1627,7 @@ fi
 
 dnl checks for header files
 AC_CHECK_HEADERS_ONCE(
+  malloc.h
   sys/systeminfo.h
   sys/sysinfo.h
   coff.h pty.h
@@ -2041,17 +2060,6 @@ fi
 ## $window_system is now set to the window system we will
 ## ultimately use.
 
-if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then
-   # Too many warnings for now.
-   nw=
-   nw="$nw -Wsuggest-attribute=noreturn"
-   gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
-
-   gl_WARN_ADD([-Wno-unused-variable])
-   gl_WARN_ADD([-Wno-unused-but-set-variable])
-   gl_WARN_ADD([-Wno-unused-but-set-parameter])
-fi
-
 term_header=
 HAVE_X_WINDOWS=no
 HAVE_X11=no
@@ -2141,7 +2149,13 @@ case "$opsys" in
   cygwin) hybrid_malloc=yes;;
 esac
 
+if test "${system_malloc}" != yes && test "${doug_lea_malloc}" != yes \
+   && test "${UNEXEC_OBJ}" = unexelf.o; then
+  hybrid_malloc=yes
+fi
+
 GMALLOC_OBJ=
+HYBRID_MALLOC=
 if test "${system_malloc}" = "yes"; then
   AC_DEFINE([SYSTEM_MALLOC], 1,
     [Define to 1 to use the system memory allocator, even if it is not
@@ -2153,6 +2167,7 @@ if test "${system_malloc}" = "yes"; then
 elif test "$hybrid_malloc" = yes; then
   AC_DEFINE(HYBRID_MALLOC, 1,
     [Define to use gmalloc before dumping and the system malloc after.])
+  HYBRID_MALLOC=1
   GNU_MALLOC=
   GNU_MALLOC_reason="only before dumping"
   GMALLOC_OBJ=gmalloc.o
@@ -2175,10 +2190,12 @@ else
        of the main data segment.])
   fi
 fi
+AC_SUBST([HYBRID_MALLOC])
+AM_CONDITIONAL([HYBRID_MALLOC_LIB], [test -n "$HYBRID_MALLOC"])
 AC_SUBST(GMALLOC_OBJ)
 AC_SUBST(VMLIMIT_OBJ)
 
-if test "$doug_lea_malloc" = "yes" ; then
+if test "$doug_lea_malloc" = "yes" && test "$hybrid_malloc" != yes; then
   if test "$GNU_MALLOC" = yes ; then
     GNU_MALLOC_reason="
       (Using Doug Lea's new malloc from the GNU C Library.)"
@@ -2202,7 +2219,7 @@ fi
 
 use_mmap_for_buffers=no
 case "$opsys" in
-  cygwin|mingw32|freebsd|irix6-5) use_mmap_for_buffers=yes ;;
+  cygwin|mingw32) use_mmap_for_buffers=yes ;;
 esac
 
 AC_FUNC_MMAP
@@ -2424,13 +2441,20 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${HAVE_W32}"
       OLD_LIBS=$LIBS
       CFLAGS="$CFLAGS $IMAGEMAGICK_CFLAGS"
       LIBS="$IMAGEMAGICK_LIBS $LIBS"
-      AC_CHECK_FUNCS(MagickExportImagePixels MagickMergeImageLayers)
+      AC_CHECK_FUNCS(MagickExportImagePixels MagickMergeImageLayers MagickAutoOrientImage)
       CFLAGS=$OLD_CFLAGS
       LIBS=$OLD_LIBS
     fi
   fi
 fi
 
+AC_CHECK_LIB(anl, getaddrinfo_a, HAVE_GETADDRINFO_A=yes)
+if test "${HAVE_GETADDRINFO_A}" = "yes"; then
+  AC_DEFINE(HAVE_GETADDRINFO_A, 1,
+[Define to 1 if you have getaddrinfo_a for asynchronous DNS resolution.])
+  GETADDRINFO_A_LIBS="-lanl"
+  AC_SUBST(GETADDRINFO_A_LIBS)
+fi
 
 HAVE_GTK=no
 GTK_OBJ=
@@ -2730,6 +2754,21 @@ fi
 AC_SUBST(LIBGNUTLS_LIBS)
 AC_SUBST(LIBGNUTLS_CFLAGS)
 
+HAVE_LIBSYSTEMD=no
+if test "${with_libsystemd}" = "yes" ; then
+  dnl This code has been tested with libsystemd 222 and later.
+  dnl FIXME: Find the earliest version number for which Emacs should work,
+  dnl and change '222' to that number.
+  EMACS_CHECK_MODULES([LIBSYSTEMD], [libsystemd >= 222],
+    [HAVE_LIBSYSTEMD=yes], [HAVE_LIBSYSTEMD=no])
+  if test "${HAVE_LIBSYSTEMD}" = "yes"; then
+    AC_DEFINE(HAVE_LIBSYSTEMD, 1, [Define if using libsystemd.])
+  fi
+fi
+
+AC_SUBST(LIBSYSTEMD_LIBS)
+AC_SUBST(LIBSYSTEMD_CFLAGS)
+
 NOTIFY_OBJ=
 NOTIFY_SUMMARY=no
 
@@ -3710,20 +3749,6 @@ fi
 AC_SUBST(LIBXML2_LIBS)
 AC_SUBST(LIBXML2_CFLAGS)
 
-# If netdb.h doesn't declare h_errno, we must declare it by hand.
-# On MinGW, that is provided by nt/inc/sys/socket.h and w32.c.
-if test "${opsys}" = "mingw32"; then
-  emacs_cv_netdb_declares_h_errno=yes
-fi
-AC_CACHE_CHECK(whether netdb declares h_errno,
-              emacs_cv_netdb_declares_h_errno,
-[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
-  [[return h_errno;]])],
-  emacs_cv_netdb_declares_h_errno=yes, emacs_cv_netdb_declares_h_errno=no)])
-if test $emacs_cv_netdb_declares_h_errno = yes; then
-  AC_DEFINE(HAVE_H_ERRNO, 1, [Define to 1 if netdb.h declares h_errno.])
-fi
-
 # Check for mail-locking functions in a "mail" library.  Probably this should
 # have the same check as for liblockfile below.
 AC_CHECK_LIB(mail, maillock, have_mail=yes, have_mail=no)
@@ -3767,7 +3792,7 @@ mail_lock=no
 case "$opsys" in
   aix4-2) mail_lock="lockf" ;;
 
-  gnu|freebsd|dragonfly|netbsd|openbsd|darwin|irix6-5) mail_lock="flock" ;;
+  gnu|freebsd|dragonfly|netbsd|openbsd|darwin) mail_lock="flock" ;;
 
   ## On GNU/Linux systems, both methods are used by various mail programs.
   ## I assume most people are using newer mailers that have heard of flock.
@@ -3812,7 +3837,7 @@ AC_CHECK_FUNCS(accept4 fchdir gethostname \
 getrusage get_current_dir_name \
 lrand48 random rint \
 select getpagesize setlocale newlocale \
-getrlimit setrlimit shutdown getaddrinfo \
+getrlimit setrlimit shutdown \
 pthread_sigmask strsignal setitimer \
 sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \
 gai_strerror sync \
@@ -3822,6 +3847,7 @@ LIBS=$OLD_LIBS
 
 dnl No need to check for posix_memalign if aligned_alloc works.
 AC_CHECK_FUNCS([aligned_alloc posix_memalign], [break])
+AC_CHECK_DECLS([aligned_alloc], [], [], [[#include <stdlib.h>]])
 
 dnl Cannot use AC_CHECK_FUNCS
 AC_CACHE_CHECK([for __builtin_unwind_init],
@@ -3998,44 +4024,13 @@ AC_CACHE_CHECK([whether signals can be handled on alternate stack],
      [emacs_cv_alternate_stack=yes],
      [emacs_cv_alternate_stack=no])])
 
-# Do we have res_init, for detecting changes in /etc/resolv.conf?
-# On Darwin, res_init appears not to be useful: see bug#562 and
-# http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01467.html
-resolv=no
-
-if test $opsys != darwin; then
-
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#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_LINK_IFELSE([AC_LANG_PROGRAM([[#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
-fi                              dnl !darwin
-
 # Do we need the Hesiod library to provide the support routines?
 dnl FIXME?  Should we be skipping this on Darwin too?
 LIBHESIOD=
+LIBRESOLV=
 if test "$with_hesiod" != no ; then
   # Don't set $LIBS here -- see comments above.  FIXME which comments?
+  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)])])])
@@ -4044,21 +4039,16 @@ if test "$with_hesiod" != no ; then
   else
     RESOLVLIB=
   fi
+  hesiod=no
   AC_CHECK_FUNC(hes_getmailhost, , [AC_CHECK_LIB(hesiod, hes_getmailhost,
        hesiod=yes, :, $RESOLVLIB)])
 
   if test x"$hesiod" = xyes; then
     LIBHESIOD=-lhesiod
+    LIBRESOLV=$RESOLVLIB
   fi
 fi
 AC_SUBST(LIBHESIOD)
-
-# Do we need libresolv (due to res_init or Hesiod)?
-if test "$resolv" = yes && test $opsys != darwin; then
-  LIBRESOLV=-lresolv
-else
-  LIBRESOLV=
-fi
 AC_SUBST(LIBRESOLV)
 
 # These tell us which Kerberos-related libraries to use.
@@ -4253,7 +4243,7 @@ else
   SEPCHAR=':'
 fi
 AC_DEFINE_UNQUOTED(SEPCHAR, ['$SEPCHAR'], [Character that separates PATH elements.])
-dnl This is for MinGW, and is used in test/automated/Makefile.in.
+dnl This is for MinGW, and is used in test/Makefile.in.
 dnl The MSYS Bash has heuristics for replacing ':' with ';' when it
 dnl decides that a command-line argument to be passed to a MinGW program
 dnl is a PATH-style list of directories.  But that heuristics plays it
@@ -4312,7 +4302,7 @@ esac
 
 
 case $opsys in
-  irix6-5 | sol2* | unixware )
+  sol2* | unixware )
     dnl Some SVr4s don't define NSIG in sys/signal.h for ANSI environments;
     dnl instead, there's a system variable _sys_nsig.  Unfortunately, we
     dnl need the constant to dimension an array.  So wire in the appropriate
@@ -4326,7 +4316,7 @@ emacs_broken_SIGIO=no
 case $opsys in
   dnl SIGIO exists, but the feature doesn't work in the way Emacs needs.
   dnl See eg <http://article.gmane.org/gmane.os.openbsd.ports/46831>.
-  hpux* | irix6-5 | nacl | openbsd | sol2* | unixware )
+  hpux* | nacl | openbsd | sol2* | unixware )
     emacs_broken_SIGIO=yes
     ;;
 
@@ -4434,7 +4424,7 @@ dnl generated in the Makefile generated by 'xmkmf'.  If we don't define
 dnl NARROWPROTO, we will see the wrong function prototypes for X functions
 dnl taking float or double parameters.
 case $opsys in
-  cygwin|gnu|gnu-linux|gnu-kfreebsd|irix6-5|freebsd|netbsd|openbsd)
+  cygwin|gnu|gnu-linux|gnu-kfreebsd|freebsd|netbsd|openbsd)
     AC_DEFINE(NARROWPROTO, 1, [Define if system's imake configuration
       file defines 'NeedWidePrototypes' as 'NO'.])
   ;;
@@ -4442,7 +4432,6 @@ esac
 
 
 dnl Used in process.c, this must be a loop, even if it only runs once.
-dnl (Except on SGI; see below.  Take that, clarity and consistency!)
 AH_TEMPLATE(PTY_ITERATION, [How to iterate over PTYs.])
 dnl Only used if !PTY_ITERATION.  Iterate from FIRST_PTY_LETTER to z,
 dnl trying suffixes 0-16.
@@ -4505,27 +4494,6 @@ case $opsys in
     AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/pty/tty%c%x", c, i);])
     ;;
 
-  irix6-5 )
-    dnl It looks like this cannot be right, because it is not a loop.
-    dnl However, process.c actually does this:
-    dnl # ifndef __sgi
-    dnl   continue;
-    dnl # else
-    dnl   return -1;
-    dnl # endif
-    dnl which presumably makes it OK, since irix == sgi (?).
-    dnl FIXME it seems like this special treatment is unnecessary?
-    dnl Why can't irix use a single-trip loop like eg cygwin?
-    AC_DEFINE(PTY_ITERATION, [])
-    dnl Not used, because PTY_ITERATION is defined.
-    AC_DEFINE(FIRST_PTY_LETTER, ['q'])
-    AC_DEFINE(PTY_OPEN, [ { struct sigaction ocstat, cstat; struct stat stb; char * name; sigemptyset(&cstat.sa_mask); cstat.sa_handler = SIG_DFL; cstat.sa_flags = 0; sigaction(SIGCHLD, &cstat, &ocstat); name = _getpty (&fd, O_RDWR | O_NDELAY, 0600, 0); sigaction(SIGCHLD, &ocstat, (struct sigaction *)0); if (name == 0) return -1; if (fd < 0) return -1; if (fstat (fd, &stb) < 0) return -1; strcpy (pty_name, name); }])
-    dnl No need to get the pty name at all.
-    AC_DEFINE(PTY_NAME_SPRINTF, [])
-    dnl No need to use sprintf to get the tty name--we get that from _getpty.
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [])
-    ;;
-
   sol2* )
     dnl On SysVr4, grantpt(3) forks a subprocess, so do not use
     dnl O_CLOEXEC when opening the pty, and keep the SIGCHLD handler
@@ -4560,8 +4528,7 @@ AH_TEMPLATE(SIGNALS_VIA_CHARACTERS, [Make process_send_signal work by
 
 case $opsys in
   dnl Perry Smith <pedz@ddivt1.austin.ibm.com> says this is correct for AIX.
-  dnl thomas@mathematik.uni-bremen.de says this is needed for IRIX.
-  aix4-2 | cygwin | gnu | irix6-5 | dragonfly | freebsd | netbsd | openbsd | darwin )
+  aix4-2 | cygwin | gnu | dragonfly | freebsd | netbsd | openbsd | darwin )
     AC_DEFINE(SIGNALS_VIA_CHARACTERS, 1)
     ;;
 
@@ -4641,8 +4608,7 @@ if test x$GCC = xyes; then
    AC_DEFINE(GC_SETJMP_WORKS, 1)
 else
   case $opsys in
-    dnl irix: Tested on Irix 6.5.  SCM worked on earlier versions.
-    aix* | dragonfly | freebsd | netbsd | openbsd | irix6-5 | sol2* )
+    aix* | dragonfly | freebsd | netbsd | openbsd | sol2* )
       AC_DEFINE(GC_SETJMP_WORKS, 1)
       ;;
   esac
@@ -4746,12 +4712,6 @@ case $opsys in
     AC_DEFINE(HPUX, [], [Define if the system is HPUX.])
     ;;
 
-  irix6-5)
-    AC_DEFINE(USG, [])
-    AC_DEFINE(USG5_4, [])
-    AC_DEFINE(IRIX6_5, [], [Define if the system is IRIX.])
-    ;;
-
   mingw32)
     AC_DEFINE(DOS_NT, [])
     AC_DEFINE(WINDOWSNT, 1, [Define if compiling for native MS Windows.])
@@ -4825,11 +4785,6 @@ case $opsys in
       reopen it in the child.])
     ;;
 
-  irix6-5)
-    AC_DEFINE(PREFER_VSUSP, 1, [Define if process_send_signal should
-      use VSUSP instead of VSWTCH.])
-    ;;
-
   sol2-10)
     AC_DEFINE(_STRUCTURED_PROC, 1, [Needed for system_process_attributes
       on Solaris.])
@@ -5043,7 +4998,7 @@ fi
 AC_SUBST(RALLOC_OBJ)
 
 if test "$opsys" = "cygwin"; then
-  CYGWIN_OBJ="sheap.o cygw32.o"
+  CYGWIN_OBJ="cygw32.o"
   ## Cygwin differs because of its unexec().
   PRE_ALLOC_OBJ=
   POST_ALLOC_OBJ=lastfile.o
@@ -5272,7 +5227,7 @@ emacs_config_features=
 for opt in XAW3D XPM JPEG TIFF GIF PNG RSVG CAIRO IMAGEMAGICK SOUND GPM DBUS \
   GCONF GSETTINGS NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT \
   LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS X_TOOLKIT X11 NS MODULES \
-  XWIDGETS; do
+  XWIDGETS LIBSYSTEMD; do
 
     case $opt in
       NOTIFY|ACL) eval val=\${${opt}_SUMMARY} ;;
@@ -5319,6 +5274,7 @@ AS_ECHO(["  Does Emacs use -lXaw3d?                                 ${HAVE_XAW3D
   Does Emacs use -lm17n-flt?                              ${HAVE_M17N_FLT}
   Does Emacs use -lotf?                                   ${HAVE_LIBOTF}
   Does Emacs use -lxft?                                   ${HAVE_XFT}
+  Does Emacs use -lsystemd?                               ${HAVE_LIBSYSTEMD}
   Does Emacs directly use zlib?                           ${HAVE_ZLIB}
   Does Emacs have dynamic modules support?                ${HAVE_MODULES}
   Does Emacs use toolkit scroll bars?                     ${USE_TOOLKIT_SCROLL_BARS}
@@ -5397,13 +5353,13 @@ AC_CONFIG_FILES([Makefile lib/Makefile lib-src/Makefile oldXMenu/Makefile \
        leim/Makefile nextstep/Makefile nt/Makefile])
 
 dnl test/ is not present in release tarfiles.
-opt_makefile=test/automated/Makefile
+opt_makefile=test/Makefile
 
 if test -f "$srcdir/$opt_makefile.in"; then
   SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES $opt_makefile"
   dnl Again, it's best not to use a variable.  Though you can add
   dnl ", [], [opt_makefile='$opt_makefile']" and it should work.
-  AC_CONFIG_FILES([test/automated/Makefile])
+  AC_CONFIG_FILES([test/Makefile])
 fi
 
 
index 1efd1d98d7bd5d54e836eeecae6afa71bca04177..2eb837f151029588bbc4ef0f3a6a023fda4408be 100644 (file)
@@ -699,10 +699,10 @@ C-b}.  To customize this buffer list, use the @code{bs} Custom group
 @cindex mode, MSB
 @cindex MSB mode
 @findex mouse-buffer-menu
-@kindex C-Down-Mouse-1
+@kindex C-Down-mouse-1
   MSB global minor mode (``MSB'' stands for ``mouse select buffer'')
 provides a different and customizable mouse buffer menu which you may
 prefer.  It replaces the bindings of @code{mouse-buffer-menu},
-normally on @kbd{C-Down-Mouse-1} and @kbd{C-@key{F10}}, and the menu
+normally on @kbd{C-Down-mouse-1} and @kbd{C-@key{F10}}, and the menu
 bar buffer menu.  You can customize the menu in the @code{msb} Custom
 group.
index 3fa89d9062db575cca009ea6cdd04439705f6c62..a416734d40ed0fd362d109e14d2407d6cec2702d 100644 (file)
@@ -382,6 +382,14 @@ use of this feature by setting @code{grep-highlight-matches} to
 @code{t}.  When displaying a match in the source buffer, the exact
 match will be highlighted, instead of the entire source line.
 
+  The @command{grep} commands will offer to save buffers before
+running.  This is controlled by the @code{grep-save-buffers} variable.
+The possible values are either @code{nil} (don't save), @code{ask}
+(ask before saving), a function which will be used as a predicate (and
+is called with the file name as the parameter and should return
+non-nil if the buffer is to be saved), and any other non-@code{nil}
+value means that all buffers should be saved without asking.
+
 @findex grep-find
 @findex find-grep
   The command @kbd{M-x grep-find} (also available as @kbd{M-x
@@ -921,23 +929,23 @@ still in the right places.
 @cindex fringes, for debugging
 
 @table @asis
-@item @kbd{Mouse-1} (in fringe)
+@item @kbd{mouse-1} (in fringe)
 Set or clear a breakpoint on that line.
 
-@item @kbd{C-Mouse-1} (in fringe)
+@item @kbd{C-mouse-1} (in fringe)
 Enable or disable a breakpoint on that line.
 
-@item @kbd{Mouse-3} (in fringe)
+@item @kbd{mouse-3} (in fringe)
 Continue execution to that line.
 
-@item @kbd{C-Mouse-3} (in fringe)
+@item @kbd{C-mouse-3} (in fringe)
 Jump to that line.
 @end table
 
-  On a graphical display, you can click @kbd{Mouse-1} in the fringe of
+  On a graphical display, you can click @kbd{mouse-1} in the fringe of
 a source buffer, to set a breakpoint on that line (@pxref{Fringes}).
 A red dot appears in the fringe, where you clicked.  If a breakpoint
-already exists there, the click removes it.  A @kbd{C-Mouse-1} click
+already exists there, the click removes it.  A @kbd{C-mouse-1} click
 enables or disables an existing breakpoint; a breakpoint that is
 disabled, but not unset, is indicated by a gray dot.
 
@@ -949,10 +957,10 @@ of the window.  Disabled breakpoints are indicated with @samp{b}.
   A solid arrow in the left fringe of a source buffer indicates the
 line of the innermost frame where the debugged program has stopped.  A
 hollow arrow indicates the current execution line of a higher-level
-frame.  If you drag the arrow in the fringe with @kbd{Mouse-1}, that
+frame.  If you drag the arrow in the fringe with @kbd{mouse-1}, that
 causes execution to advance to the line where you release the button.
-Alternatively, you can click @kbd{Mouse-3} in the fringe to advance to
-that line.  You can click @kbd{C-Mouse-3} in the fringe to jump to
+Alternatively, you can click @kbd{mouse-3} in the fringe to advance to
+that line.  You can click @kbd{C-mouse-3} in the fringe to jump to
 that line without executing the intermediate lines.  This command
 allows you to go backwards, which can be useful for running through
 code that has already executed, in order to examine its execution in
@@ -986,15 +994,15 @@ Delete the current breakpoint (@code{gdb-delete-breakpoint}).
 Visit the source line for the current breakpoint
 (@code{gdb-goto-breakpoint}).
 
-@item Mouse-2
-@kindex Mouse-2 @r{(GDB Breakpoints buffer)}
+@item mouse-2
+@kindex mouse-2 @r{(GDB Breakpoints buffer)}
 Visit the source line for the breakpoint you click on.
 @end table
 
 @vindex gdb-show-threads-by-default
   When @code{gdb-many-windows} is non-@code{nil}, the GDB Breakpoints
 buffer shares its window with the GDB Threads buffer.  To switch from
-one to the other click with @kbd{Mouse-1} on the relevant button in
+one to the other click with @kbd{mouse-1} on the relevant button in
 the header line.  If @code{gdb-show-threads-by-default} is
 non-@code{nil}, the GDB Threads buffer is the one shown by default.
 
@@ -1006,7 +1014,7 @@ non-@code{nil}, the GDB Threads buffer is the one shown by default.
 debugged program.  @xref{Threads, Threads, Debugging programs with
 multiple threads, gdb, The GNU debugger}.  To select a thread, move
 point there and press @key{RET} (@code{gdb-select-thread}), or click on
-it with @kbd{Mouse-2}.  This also displays the associated source
+it with @kbd{mouse-2}.  This also displays the associated source
 buffer, and updates the contents of the other GDB buffers.
 
   You can customize variables under @code{gdb-buffers} group to select
@@ -1087,7 +1095,7 @@ debugger}.
 arrow in the fringe.  On text terminals, or when fringes are disabled,
 the selected stack frame is displayed in reverse contrast.  To select
 a stack frame, move point in its line and type @key{RET}
-(@code{gdb-frames-select}), or click @kbd{Mouse-2} on it.  Doing so
+(@code{gdb-frames-select}), or click @kbd{mouse-2} on it.  Doing so
 also updates the Locals buffer
 @ifnottex
 (@pxref{Other GDB Buffers}).
@@ -1104,19 +1112,19 @@ also updates the Locals buffer
 This buffer displays the values of local variables of the current
 frame for simple data types (@pxref{Frame Info, Frame Info,
 Information on a frame, gdb, The GNU debugger}).  Press @key{RET} or
-click @kbd{Mouse-2} on the value if you want to edit it.
+click @kbd{mouse-2} on the value if you want to edit it.
 
 Arrays and structures display their type only.  With GDB 6.4 or later,
 you can examine the value of the local variable at point by typing
-@key{RET}, or with a @kbd{Mouse-2} click.  With earlier versions of
-GDB, use @key{RET} or @kbd{Mouse-2} on the type description
+@key{RET}, or with a @kbd{mouse-2} click.  With earlier versions of
+GDB, use @key{RET} or @kbd{mouse-2} on the type description
 (@samp{[struct/union]} or @samp{[array]}).  @xref{Watch Expressions}.
 
 @item Registers Buffer
 @findex toggle-gdb-all-registers
 This buffer displays the values held by the registers
 (@pxref{Registers,,, gdb, The GNU debugger}).  Press @key{RET} or
-click @kbd{Mouse-2} on a register if you want to edit its value.  With
+click @kbd{mouse-2} on a register if you want to edit its value.  With
 GDB 6.4 or later, recently changed register values display with
 @code{font-lock-warning-face}.
 
@@ -1129,17 +1137,17 @@ the fringe or margin.
 @item Memory Buffer
 The memory buffer lets you examine sections of program memory
 (@pxref{Memory, Memory, Examining memory, gdb, The GNU debugger}).
-Click @kbd{Mouse-1} on the appropriate part of the header line to
+Click @kbd{mouse-1} on the appropriate part of the header line to
 change the starting address or number of data items that the buffer
 displays.  Alternatively, use @kbd{S} or @kbd{N} respectively.  Click
-@kbd{Mouse-3} on the header line to select the display format or unit
+@kbd{mouse-3} on the header line to select the display format or unit
 size for these data items.
 @end table
 
 When @code{gdb-many-windows} is non-@code{nil}, the locals buffer
 shares its window with the registers buffer, just like breakpoints and
 threads buffers.  To switch from one to the other, click with
-@kbd{Mouse-1} on the relevant button in the header line.
+@kbd{mouse-1} on the relevant button in the header line.
 
 @node Watch Expressions
 @subsubsection Watch Expressions
@@ -1163,7 +1171,7 @@ name and type otherwise.  Root expressions also display the frame
 address as a tooltip to help identify the frame in which they were
 defined.
 
-  To expand or contract a complex data type, click @kbd{Mouse-2} or
+  To expand or contract a complex data type, click @kbd{mouse-2} or
 press @key{SPC} on the tag to the left of the expression.  Emacs asks
 for confirmation before expanding the expression if its number of
 immediate children exceeds the value of the variable
@@ -1178,7 +1186,7 @@ expression in the speedbar and type @kbd{D} (@code{gdb-var-delete}).
 @findex gdb-edit-value
   To edit a variable with a simple data type, or a simple element of a
 complex data type, move point there in the speedbar and type @key{RET}
-(@code{gdb-edit-value}).  Or you can click @kbd{Mouse-2} on a value to
+(@code{gdb-edit-value}).  Or you can click @kbd{mouse-2} on a value to
 edit it.  Either way, this reads the new value using the minibuffer.
 
 @vindex gdb-show-changed-values
index 0fc18fcbbcfbb023173ebbdeeed64fa314046749..60d323be840d59fa8ef4a1a637e6b4d7732144a1 100644 (file)
@@ -19,8 +19,8 @@ prompts you for the month and year to be the center of the three-month
 calendar.  The calendar uses its own buffer, whose major mode is
 Calendar mode.
 
-  @kbd{Mouse-3} in the calendar brings up a menu of operations on a
-particular date; @kbd{Mouse-2} brings up a menu of commonly used
+  @kbd{mouse-3} in the calendar brings up a menu of operations on a
+particular date; @kbd{mouse-2} brings up a menu of commonly used
 calendar features that are independent of any particular date.  To exit
 the calendar, type @kbd{q}.
 
@@ -460,7 +460,7 @@ to.
 and can display them.  You can add your own holidays to the default list.
 
 @table @kbd
-@item Mouse-3 Holidays
+@item mouse-3 Holidays
 @itemx h
 Display holidays for the selected date
 (@code{calendar-cursor-holidays}).
@@ -483,7 +483,7 @@ List holidays in another window for a specified range of years.
 @vindex calendar-view-holidays-initially-flag
   To see if any holidays fall on a given date, position point on that
 date in the calendar window and use the @kbd{h} command.  Alternatively,
-click on that date with @kbd{Mouse-3} and then choose @kbd{Holidays}
+click on that date with @kbd{mouse-3} and then choose @kbd{Holidays}
 from the menu that appears.  Either way, this displays the holidays for
 that date, in the echo area if they fit there, otherwise in a separate
 window.
@@ -548,7 +548,7 @@ practice}, not historical fact.  For example Veteran's Day began in
 times of sunrise and sunset for any date.
 
 @table @kbd
-@item Mouse-3 Sunrise/sunset
+@item mouse-3 Sunrise/sunset
 @itemx S
 Display times of sunrise and sunset for the selected date
 (@code{calendar-sunrise-sunset}).
@@ -565,7 +565,7 @@ Display times of sunrise and sunset for the selected month.
 @findex sunrise-sunset
   Within the calendar, to display the @emph{local times} of sunrise and
 sunset in the echo area, move point to the date you want, and type
-@kbd{S}.  Alternatively, click @kbd{Mouse-3} on the date, then choose
+@kbd{S}.  Alternatively, click @kbd{mouse-3} on the date, then choose
 @samp{Sunrise/sunset} from the menu that appears.  The command @kbd{M-x
 sunrise-sunset} is available outside the calendar to display this
 information for today's date or a specified date.  To specify a date
@@ -777,7 +777,7 @@ in various other calendar systems:
 @table @kbd
 @kindex p @r{(Calendar mode)}
 @findex calendar-print-other-dates
-@item Mouse-3  Other calendars
+@item mouse-3  Other calendars
 @itemx p o
 Display the selected date in various other calendars.
 (@code{calendar-print-other-dates}).
@@ -831,7 +831,7 @@ Display Mayan date for selected day (@code{calendar-mayan-print-date}).
 appropriate command starting with @kbd{p} from the table above.  The
 prefix @kbd{p} is a mnemonic for ``print'', since Emacs ``prints'' the
 equivalent date in the echo area.  @kbd{p o} displays the
-date in all forms known to Emacs.  You can also use @kbd{Mouse-3} and
+date in all forms known to Emacs.  You can also use @kbd{mouse-3} and
 then choose @kbd{Other calendars} from the menu that appears.  This
 displays the equivalent forms of the date in all the calendars Emacs
 understands, in the form of a menu.  (Choosing an alternative from
@@ -1020,7 +1020,7 @@ it.  You can also view today's events outside of Calendar mode.  In the
 following, key bindings refer to the Calendar buffer.
 
 @table @kbd
-@item Mouse-3 Diary
+@item mouse-3 Diary
 @itemx d
 Display all diary entries for the selected date
 (@code{diary-view-entries}).
@@ -1058,7 +1058,7 @@ entries for that many successive days.  Thus, @kbd{2 d} displays all the
 entries for the selected date and for the following day.
 
   Another way to display the diary entries for a date is to click
-@kbd{Mouse-3} on the date, and then choose @kbd{Diary entries} from
+@kbd{mouse-3} on the date, and then choose @kbd{Diary entries} from
 the menu that appears.  If the variable
 @code{calendar-view-diary-initially-flag} is non-@code{nil}, creating the
 calendar lists the diary entries for the current date (provided the
index f0f686f855c1909167ec4cc8fc0af8839b7b8b96..444d30527f8fc8ed1122225575bd0e66ac5278a5 100644 (file)
@@ -283,6 +283,13 @@ which will invoke Emacs with @samp{--script} and supply the name of
 the script file as @var{file}.  Emacs Lisp then treats the @samp{#!}
 on this first line as a comment delimiter.
 
+@item --no-build-details
+@opindex --no-build-details
+@cindex build details
+@cindex deterministic build
+Omit details like system name and build time from the Emacs executable,
+so that builds are more deterministic.
+
 @item -q
 @opindex -q
 @itemx --no-init-file
index c1093353757c4f90478fe7a92728765e552b5a85..5cb52e62ab9c7c65cb206079f899c72a782f044a 100644 (file)
@@ -1298,7 +1298,11 @@ accomplished with @dfn{directory-local variables}.
 named @file{.dir-locals.el}@footnote{ On MS-DOS, the name of this file
 should be @file{_dir-locals.el}, due to limitations of the DOS
 filesystems.  If the filesystem is limited to 8+3 file names, the name
-of the file will be truncated by the OS to @file{_dir-loc.el}.  } in a
+of the file will be truncated by the OS to @file{_dir-loc.el}.
+}@footnote{ You can also use @file{.dir-locals-2.el}, which
+is loaded in addition.  This is useful when @file{.dir-locals.el} is
+under version control in a shared repository and can't be used for
+personal customizations.  } in a
 directory.  Whenever Emacs visits any file in that directory or any of
 its subdirectories, it will apply the directory-local variables
 specified in @file{.dir-locals.el}, as though they had been defined as
@@ -1396,7 +1400,7 @@ init file (@pxref{Init Rebinding}).
 * Minibuffer Maps::     The minibuffer uses its own local keymaps.
 * Rebinding::           How to redefine one key's meaning conveniently.
 * Init Rebinding::      Rebinding keys with your initialization file.
-* Modifier Keys::       Using modifier keys in key bindings.
+* Modifier Keys::       Using modifier keys.
 * Function Keys::       Rebinding terminal function keys.
 * Named ASCII Chars::   Distinguishing @key{TAB} from @kbd{C-i}, and so on.
 * Mouse Buttons::       Rebinding mouse buttons in Emacs.
index ea48a26500c3f7ab40ea19a75c728c3b6f1aff70..68c6813c2427c2b3d22e95ed533940a16889b103 100644 (file)
@@ -353,8 +353,8 @@ file.  @xref{Windows}.
 Visit the file described on the current line, and display the buffer in
 another window, but do not select that window (@code{dired-display-file}).
 
-@item Mouse-1
-@itemx Mouse-2
+@item mouse-1
+@itemx mouse-2
 @findex dired-mouse-find-file-other-window
 Visit the file whose name you clicked on
 (@code{dired-mouse-find-file-other-window}).  This uses another window
@@ -1300,6 +1300,10 @@ relative).  To mark a file for deletion, delete the entire file name.
 To change the target of a symbolic link, edit the link target name
 which appears next to the link name.
 
+  If you edit the file names to create a new subdirectory, Wdired will
+automatically create these new directories.  To inhibit this behavior,
+set @code{wdired-create-parent-directories} to @code{nil}.
+
   The rest of the text in the buffer, such as the file sizes and
 modification dates, is marked read-only, so you can't edit it.
 However, if you set @code{wdired-allow-to-change-permissions} to
@@ -1424,6 +1428,13 @@ names into arguments for other Emacs commands.  It also displays what
 it added to the kill ring, so you can use it to display the list of
 currently marked files in the echo area.
 
+@kindex W @r{(Dired)}
+@findex browse-url-of-dired-file
+  If you have an HTML file in the file listing, it can be useful to
+view that file with a browser.  The @kbd{W}
+(@code{browse-url-of-dired-file}) command will use the standard
+configured browser to view that file.
+
 @kindex ( @r{(Dired)}
 @findex dired-hide-details-mode
 @vindex dired-hide-details-hide-symlink-targets
index 8039291298c0dde986376f5fdb520f8b25ca1c29..89f5bec3639535f358913cd593ca11e8e1142d87 100644 (file)
@@ -657,6 +657,9 @@ The face for displaying control characters and escape sequences
 @item nobreak-space
 The face for displaying no-break space characters (@pxref{Text
 Display}).
+@item nobreak-hyphen
+The face for displaying no-break hyphen characters (@pxref{Text
+Display}).
 @end table
 
   The following faces control the appearance of parts of the Emacs
@@ -1481,7 +1484,7 @@ characters.  To deal with this problem, Emacs displays such characters
 specially: it displays @code{U+00A0} (no-break space) with the
 @code{nobreak-space} face, and it displays @code{U+00AD} (soft
 hyphen), @code{U+2010} (hyphen), and @code{U+2011} (non-breaking
-hyphen) with the @code{escape-glyph} face.  To disable this, change
+hyphen) with the @code{nobreak-hyphen} face.  To disable this, change
 the variable @code{nobreak-char-display} to @code{nil}.  If you give
 this variable a non-@code{nil} and non-@code{t} value, Emacs instead
 displays such characters as a highlighted backslash followed by a
index 3e936e73944f1fd0beab4e0d1b8fc35476839daf..66817e3067f3b581aef709ceeac8f14bcefde7e1 100644 (file)
@@ -133,6 +133,9 @@ run.  One convenient function to use as the value of
 @code{confirm-kill-emacs} is the function @code{yes-or-no-p}.  The
 default value of @code{confirm-kill-emacs} is @code{nil}.
 
+  To further customize what happens when Emacs is exiting, see
+@ref{Killing Emacs,,, elisp, The GNU Emacs Lisp Reference Manual}.
+
 @findex kill-emacs
   To kill Emacs without being prompted about saving, type @kbd{M-x
 kill-emacs}.
index ab20d4a18f92b380485bc9419066b925e03e278f..af9d4d50306822ad1621e996df16290b13794b81 100644 (file)
@@ -522,6 +522,18 @@ a new backup file.  @kbd{C-u C-u C-u C-x C-s} does both things: it
 makes a backup from the previous contents, and arranges to make
 another from the newly saved contents if you save again.
 
+@vindex backup-directory-alist
+  You can customize the variable @code{backup-directory-alist} to
+specify that files matching certain patterns should be backed up in
+specific directories.  A typical use is to add an element @code{("."
+. @var{dir})} to make all backups in the directory with absolute name
+@var{dir}.  Emacs modifies the backup file names to avoid clashes
+between files with the same names originating in different
+directories.  Alternatively, adding, @code{("." . ".~")} would make
+backups in the invisible subdirectory @file{.~} of the original file's
+directory.  Emacs creates the directory, if necessary, to make the
+backup.
+
 @menu
 * Names: Backup Names.          How backup files are named.
 * Deletion: Backup Deletion.    Emacs deletes excess numbered backups.
@@ -585,19 +597,6 @@ value is @samp{nil} or @samp{existing}, then @code{version-control}
 becomes @code{nil}; if it is @samp{never} or @samp{simple}, then
 @code{version-control} becomes @code{never}.
 
-@vindex backup-directory-alist
-  You can customize the variable @code{backup-directory-alist} to
-specify that files matching certain patterns should be backed up in
-specific directories.  This variable applies to both single and
-numbered backups.  A typical use is to add an element @code{("."
-. @var{dir})} to make all backups in the directory with absolute name
-@var{dir}; Emacs modifies the backup file names to avoid clashes
-between files with the same names originating in different
-directories.  Alternatively, adding, @code{("." . ".~")} would make
-backups in the invisible subdirectory @file{.~} of the original file's
-directory.  Emacs creates the directory, if necessary, to make the
-backup.
-
 @vindex make-backup-file-name-function
   If you set the variable @code{make-backup-file-name-function} to
 a suitable Lisp function, you can override the usual way Emacs
@@ -1969,6 +1968,9 @@ point.  Partial Completion mode offers other features extending
 major mode, you can type @kbd{C-c C-c} (@code{image-toggle-display})
 to toggle between displaying the file as an image in the Emacs buffer,
 and displaying its underlying text (or raw byte) representation.
+Additionally you can type @kbd{C-c C-x} (@code{image-toggle-hex-display})
+to toggle between displaying the file as an image in the Emacs buffer,
+and displaying it in hex representation.
 Displaying the file as an image works only if Emacs is compiled with
 support for displaying such images.  If the displayed image is wider
 or taller than the frame, the usual point motion keys (@kbd{C-f},
index b398a7dbfb866859370ea847b355b0abc771d35b..584efc68116d05d474b9d28bf0ebcf22f872f9b6 100644 (file)
@@ -408,7 +408,7 @@ buffers, add @code{flyspell-mode} to @code{text-mode-hook}.
 @findex flyspell-auto-correct-word
 @findex flyspell-correct-word-before-point
   When Flyspell mode highlights a word as misspelled, you can click on
-it with @kbd{Mouse-2} (@code{flyspell-correct-word}) to display a menu
+it with @kbd{mouse-2} (@code{flyspell-correct-word}) to display a menu
 of possible corrections and actions.  In addition, @kbd{C-.} or
 @kbd{@key{ESC}-@key{TAB}} (@code{flyspell-auto-correct-word}) will
 propose various successive corrections for the word at point, and
index 383ae7fd6ee4caa167dbd7d7aff27ca00bb0239f..23ccd6a8f41268a948ec4a91480554e90cc1764d 100644 (file)
@@ -70,22 +70,22 @@ for doing so on MS-DOS).  Menus are supported on all text terminals.
 @cindex mouse buttons (what they do)
 @cindex mouse, selecting text using
 
-@kindex Mouse-1
-@kindex Mouse-2
-@kindex Mouse-3
+@kindex mouse-1
+@kindex mouse-2
+@kindex mouse-3
 @table @kbd
-@item Mouse-1
+@item mouse-1
 Move point to where you click (@code{mouse-set-point}).
 
-@item Drag-Mouse-1
+@item Drag-mouse-1
 Activate the region around the text selected by dragging, and put the
 text in the primary selection (@code{mouse-set-region}).
 
-@item Mouse-2
+@item mouse-2
 Move point to where you click, and insert the contents of the primary
 selection there (@code{mouse-yank-primary}).
 
-@item Mouse-3
+@item mouse-3
 If the region is active, move the nearer end of the region to the
 click position; otherwise, set mark at the current value of point and
 point at the click position.  Save the resulting region in the kill
@@ -94,7 +94,7 @@ ring; on a second click, kill it (@code{mouse-save-then-kill}).
 
 @findex mouse-set-point
   The most basic mouse command is @code{mouse-set-point}, which is
-invoked by clicking with the left mouse button, @kbd{Mouse-1}, in the
+invoked by clicking with the left mouse button, @kbd{mouse-1}, in the
 text area of a window.  This moves point to the position where you
 clicked.  If that window was not the selected window, it becomes the
 selected window.
@@ -110,7 +110,7 @@ the window and sets the cursor position.
 
 @cindex mouse, dragging
 @findex mouse-set-region
-  Holding down @kbd{Mouse-1} and dragging the mouse over a stretch
+  Holding down @kbd{mouse-1} and dragging the mouse over a stretch
 of text activates the region around that text
 (@code{mouse-set-region}), placing the mark where you started holding
 down the mouse button, and point where you release it (@pxref{Mark}).
@@ -132,49 +132,49 @@ on how far away from the window edge the mouse has gone; the variable
 
 @findex mouse-yank-primary
 @findex mouse-yank-at-click
-  Clicking with the middle mouse button, @kbd{Mouse-2}, moves point to
+  Clicking with the middle mouse button, @kbd{mouse-2}, moves point to
 the position where you clicked and inserts the contents of the primary
 selection (@code{mouse-yank-primary}).  @xref{Primary Selection}.
 This behavior is consistent with other X applications.  Alternatively,
-you can rebind @kbd{Mouse-2} to @code{mouse-yank-at-click}, which
+you can rebind @kbd{mouse-2} to @code{mouse-yank-at-click}, which
 performs a yank at the position you click.
 
 @vindex mouse-yank-at-point
   If you change the variable @code{mouse-yank-at-point} to a
-non-@code{nil} value, @kbd{Mouse-2} does not move point; it inserts
+non-@code{nil} value, @kbd{mouse-2} does not move point; it inserts
 the text at point, regardless of where you clicked or even which of
 the frame's windows you clicked on.  This variable affects both
 @code{mouse-yank-primary} and @code{mouse-yank-at-click}.
 
 @findex mouse-save-then-kill
-  Clicking with the right mouse button, @kbd{Mouse-3}, runs the
+  Clicking with the right mouse button, @kbd{mouse-3}, runs the
 command @code{mouse-save-then-kill}.  This performs several actions
 depending on where you click and the status of the region:
 
 @itemize @bullet
 @item
-If no region is active, clicking @kbd{Mouse-3} activates the region,
+If no region is active, clicking @kbd{mouse-3} activates the region,
 placing the mark where point was and point at the clicked position.
 
 @item
-If a region is active, clicking @kbd{Mouse-3} adjusts the nearer end
+If a region is active, clicking @kbd{mouse-3} adjusts the nearer end
 of the region by moving it to the clicked position.  The adjusted
 region's text is copied to the kill ring; if the text in the original
 region was already on the kill ring, it replaces it there.
 
 @item
 If you originally specified the region using a double or triple
-@kbd{Mouse-1}, so that the region is defined to consist of entire
+@kbd{mouse-1}, so that the region is defined to consist of entire
 words or lines (@pxref{Word and Line Mouse}), then adjusting the
-region with @kbd{Mouse-3} also proceeds by entire words or lines.
+region with @kbd{mouse-3} also proceeds by entire words or lines.
 
 @item
-If you use @kbd{Mouse-3} a second time consecutively, at the same
+If you use @kbd{mouse-3} a second time consecutively, at the same
 place, that kills the region already selected.  Thus, the simplest way
-to kill text with the mouse is to click @kbd{Mouse-1} at one end, then
-click @kbd{Mouse-3} twice at the other end.  To copy the text into the
-kill ring without deleting it from the buffer, press @kbd{Mouse-3}
-just once---or just drag across the text with @kbd{Mouse-1}.  Then you
+to kill text with the mouse is to click @kbd{mouse-1} at one end, then
+click @kbd{mouse-3} twice at the other end.  To copy the text into the
+kill ring without deleting it from the buffer, press @kbd{mouse-3}
+just once---or just drag across the text with @kbd{mouse-1}.  Then you
 can copy it elsewhere by yanking it.
 @end itemize
 
@@ -209,12 +209,12 @@ speed is linked to how fast you move the wheel.
 @node Word and Line Mouse
 @section Mouse Commands for Words and Lines
 
-  These variants of @kbd{Mouse-1} select entire words or lines at a
+  These variants of @kbd{mouse-1} select entire words or lines at a
 time.  Emacs activates the region around the selected text, which is
 also copied to the kill ring.
 
 @table @kbd
-@item Double-Mouse-1
+@item Double-mouse-1
 Select the text around the word which you click on.
 
 Double-clicking on a character with symbol syntax (such as
@@ -226,20 +226,20 @@ ends.  Double-clicking on a character with string-delimiter syntax
 constant (Emacs uses heuristics to figure out whether that character
 is the beginning or the end of it).
 
-@item Double-Drag-Mouse-1
+@item Double-Drag-mouse-1
 Select the text you drag across, in the form of whole words.
 
-@item Triple-Mouse-1
+@item Triple-mouse-1
 Select the line you click on.
 
-@item Triple-Drag-Mouse-1
+@item Triple-Drag-mouse-1
 Select the text you drag across, in the form of whole lines.
 @end table
 
 @node Mouse References
 @section Following References with the Mouse
-@kindex Mouse-1 @r{(on buttons)}
-@kindex Mouse-2 @r{(on buttons)}
+@kindex mouse-1 @r{(on buttons)}
+@kindex mouse-2 @r{(on buttons)}
 @cindex hyperlinks
 @cindex links
 @cindex text buttons
@@ -256,14 +256,14 @@ cursor changes and the button lights up.  If you change the variable
 highlighting.
 
   You can activate a button by moving point to it and typing
-@key{RET}, or by clicking either @kbd{Mouse-1} or @kbd{Mouse-2} on the
+@key{RET}, or by clicking either @kbd{mouse-1} or @kbd{mouse-2} on the
 button.  For example, in a Dired buffer, each file name is a button;
 activating it causes Emacs to visit that file (@pxref{Dired}).  In a
 @file{*Compilation*} buffer, each error message is a button, and
 activating it visits the source code for that error
 (@pxref{Compilation}).
 
-  Although clicking @kbd{Mouse-1} on a button usually activates the
+  Although clicking @kbd{mouse-1} on a button usually activates the
 button, if you hold the mouse button down for a period of time before
 releasing it (specifically, for more than 450 milliseconds), then
 Emacs moves point where you clicked, without activating the button.
@@ -271,20 +271,20 @@ In this way, you can use the mouse to move point over a button without
 activating it.  Dragging the mouse over or onto a button has its usual
 behavior of setting the region, and does not activate the button.
 
-  You can change how @kbd{Mouse-1} applies to buttons by customizing
+  You can change how @kbd{mouse-1} applies to buttons by customizing
 the variable @code{mouse-1-click-follows-link}.  If the value is a
 positive integer, that determines how long you need to hold the mouse
 button down for, in milliseconds, to cancel button activation; the
 default is 450, as described in the previous paragraph.  If the value
-is @code{nil}, @kbd{Mouse-1} just sets point where you clicked, and
+is @code{nil}, @kbd{mouse-1} just sets point where you clicked, and
 does not activate buttons.  If the value is @code{double}, double
 clicks activate buttons but single clicks just set point.
 
 @vindex mouse-1-click-in-non-selected-windows
-  Normally, @kbd{Mouse-1} on a button activates the button even if it
+  Normally, @kbd{mouse-1} on a button activates the button even if it
 is in a non-selected window.  If you change the variable
 @code{mouse-1-click-in-non-selected-windows} to @code{nil},
-@kbd{Mouse-1} on a button in an unselected window moves point to the
+@kbd{mouse-1} on a button in an unselected window moves point to the
 clicked position and selects that window, without activating the
 button.
 
@@ -295,21 +295,21 @@ button.
 bring up menus.
 
 @table @kbd
-@item C-Mouse-1
-@kindex C-Mouse-1
+@item C-mouse-1
+@kindex C-mouse-1
 This menu is for selecting a buffer.
 
 The MSB (``mouse select buffer'') global minor mode makes this
 menu smarter and more customizable.  @xref{Buffer Menus}.
 
-@item C-Mouse-2
-@kindex C-Mouse-2
+@item C-mouse-2
+@kindex C-mouse-2
 This menu contains entries for examining faces and other text
 properties, and well as for setting them (the latter is mainly useful
 when editing enriched text; @pxref{Enriched Text}).
 
-@item C-Mouse-3
-@kindex C-Mouse-3
+@item C-mouse-3
+@kindex C-mouse-3
 This menu is mode-specific.  For most modes if Menu-bar mode is on,
 this menu has the same items as all the mode-specific menu-bar menus
 put together.  Some modes may specify a different menu for this
@@ -318,15 +318,15 @@ which would be present in the menu bar---not just the mode-specific
 ones---so that you can access them without having to display the menu
 bar.
 
-@item S-Mouse-1
+@item S-mouse-1
 This menu is for changing the default face within the window's buffer.
 @xref{Text Scale}.
 @end table
 
-  Some graphical applications use @kbd{Mouse-3} for a mode-specific
-menu.  If you prefer @kbd{Mouse-3} in Emacs to bring up such a menu
+  Some graphical applications use @kbd{mouse-3} for a mode-specific
+menu.  If you prefer @kbd{mouse-3} in Emacs to bring up such a menu
 instead of running the @code{mouse-save-then-kill} command, rebind
-@kbd{Mouse-3} by adding the following line to your init file
+@kbd{mouse-3} by adding the following line to your init file
 (@pxref{Init Rebinding}):
 
 @c FIXME: `mouse-popup-menubar-stuff' is obsolete since 23.1.
@@ -349,32 +349,32 @@ the special bindings will be displayed (@pxref{Tooltips}).  This
 section's commands do not apply in those areas.
 
 @table @kbd
-@item Mouse-1
-@kindex Mouse-1 @r{(mode line)}
-@kbd{Mouse-1} on a mode line selects the window it belongs to.  By
-dragging @kbd{Mouse-1} on the mode line, you can move it, thus
+@item mouse-1
+@kindex mouse-1 @r{(mode line)}
+@kbd{mouse-1} on a mode line selects the window it belongs to.  By
+dragging @kbd{mouse-1} on the mode line, you can move it, thus
 changing the height of the windows above and below.  Changing heights
 with the mouse in this way never deletes windows, it just refuses to
 make any window smaller than the minimum height.
 
-@item Mouse-2
-@kindex Mouse-2 @r{(mode line)}
-@kbd{Mouse-2} on a mode line expands that window to fill its frame.
+@item mouse-2
+@kindex mouse-2 @r{(mode line)}
+@kbd{mouse-2} on a mode line expands that window to fill its frame.
 
-@item Mouse-3
-@kindex Mouse-3 @r{(mode line)}
-@kbd{Mouse-3} on a mode line deletes the window it belongs to.  If the
+@item mouse-3
+@kindex mouse-3 @r{(mode line)}
+@kbd{mouse-3} on a mode line deletes the window it belongs to.  If the
 frame has only one window, it does nothing.
 
-@item C-Mouse-2
+@item C-mouse-2
 @kindex C-mouse-2 @r{(mode line)}
-@kbd{C-Mouse-2} on a mode line splits that window, producing two
+@kbd{C-mouse-2} on a mode line splits that window, producing two
 side-by-side windows with the boundary running through the click
 position (@pxref{Split Window}).
 @end table
 
-@kindex Mouse-1 @r{(scroll bar)}
-  Furthermore, by clicking and dragging @kbd{Mouse-1} on the divider
+@kindex mouse-1 @r{(scroll bar)}
+  Furthermore, by clicking and dragging @kbd{mouse-1} on the divider
 between two side-by-side mode lines, you can move the vertical
 boundary to the left or right.
 
@@ -919,17 +919,17 @@ those are drawn by the toolkit and not directly by Emacs.
 @cindex Vertical Scroll Bar
 
   On graphical displays, there is a @dfn{vertical scroll bar} on the
-side of each Emacs window.  Clicking @kbd{Mouse-1} on the scroll bar's
+side of each Emacs window.  Clicking @kbd{mouse-1} on the scroll bar's
 up and down buttons scrolls the window by one line at a time.  Clicking
-@kbd{Mouse-1} above or below the scroll bar's inner box scrolls the
+@kbd{mouse-1} above or below the scroll bar's inner box scrolls the
 window by nearly the entire height of the window, like @kbd{M-v} and
 @kbd{C-v} respectively (@pxref{Moving Point}).  Dragging the inner box
 scrolls continuously.
 
   If Emacs is compiled on the X Window System without X toolkit
-support, the scroll bar behaves differently.  Clicking @kbd{Mouse-1}
+support, the scroll bar behaves differently.  Clicking @kbd{mouse-1}
 anywhere on the scroll bar scrolls forward like @kbd{C-v}, while
-@kbd{Mouse-3} scrolls backward like @kbd{M-v}.  Clicking @kbd{Mouse-2}
+@kbd{mouse-3} scrolls backward like @kbd{M-v}.  Clicking @kbd{mouse-2}
 in the scroll bar lets you drag the inner box up and down.
 
 @findex scroll-bar-mode
@@ -975,8 +975,8 @@ when the entire buffer is visible.
 @cindex Horizontal Scroll Bar mode
   On graphical displays with toolkit support, Emacs may also supply a
 @dfn{horizontal scroll bar} on the bottom of each window.  Clicking
-@kbd{Mouse-1} on the that scroll bar's left and right buttons scrolls
-the window horizontally by one column at a time.  Clicking @kbd{Mouse-1}
+@kbd{mouse-1} on the that scroll bar's left and right buttons scrolls
+the window horizontally by one column at a time.  Clicking @kbd{mouse-1}
 on the left or right of the scroll bar's inner box scrolls the window by
 four columns.  Dragging the inner box scrolls the window continuously.
 
@@ -1066,11 +1066,11 @@ argument is positive, off if the argument is not positive.  To control
 the use of menu bars at startup, customize the variable
 @code{menu-bar-mode}.
 
-@kindex C-Mouse-3 @r{(when menu bar is disabled)}
+@kindex C-mouse-3 @r{(when menu bar is disabled)}
   Expert users often turn off the menu bar, especially on text
 terminals, where this makes one additional line available for text.
 If the menu bar is off, you can still pop up a menu of its contents
-with @kbd{C-Mouse-3} on a display which supports pop-up menus.
+with @kbd{C-mouse-3} on a display which supports pop-up menus.
 @xref{Menu Mouse Clicks}.
 
   @xref{Menu Bar}, for information on how to invoke commands with the
index 172d058f857d0f81e80faeb588f879e24c18af4a..4b7b7fc6315decafeb92fd3f2ec5245455343f12 100644 (file)
@@ -343,7 +343,7 @@ invoke it with.  In our example, it would say that you can invoke
 
   For more information about a function definition, variable or symbol
 property listed in an apropos buffer, you can click on it with
-@kbd{Mouse-1} or @kbd{Mouse-2}, or move there and type @key{RET}.
+@kbd{mouse-1} or @kbd{mouse-2}, or move there and type @key{RET}.
 
   When you specify more than one word in the apropos pattern, a name
 must contain at least two of the words in order to match.  Thus, if
@@ -404,8 +404,8 @@ Follow a cross reference at point (@code{help-follow}).
 Move point forward to the next hyperlink (@code{forward-button}).
 @item S-@key{TAB}
 Move point back to the previous hyperlink (@code{backward-button}).
-@item Mouse-1
-@itemx Mouse-2
+@item mouse-1
+@itemx mouse-2
 Follow a hyperlink that you click on.
 @item C-c C-c
 Show all documentation about the symbol at point
@@ -427,7 +427,7 @@ Go back to the previous help topic (@code{help-go-back}).
 appears in the documentation in the help buffer, it is normally an
 underlined @dfn{hyperlink}.  To view the associated documentation,
 move point there and type @key{RET} (@code{help-follow}), or click on
-the hyperlink with @kbd{Mouse-1} or @kbd{Mouse-2}.  Doing so replaces
+the hyperlink with @kbd{mouse-1} or @kbd{mouse-2}.  Doing so replaces
 the contents of the help buffer; to retrace your steps, type @kbd{C-c
 C-b} (@code{help-go-back}).  While retracing your steps, you can go
 forward by using @kbd{C-c C-b} (@code{help-go-forward}).
index dd3671c95f1ca1abbeae541b65f9a6d25c4f8399..107adb99ec454254c018934ce5fb16f41209bd65 100644 (file)
@@ -587,9 +587,9 @@ you can access it using the following Emacs commands:
 
 @table @kbd
 @findex mouse-set-secondary
-@kindex M-Drag-Mouse-1
+@kindex M-Drag-mouse-1
 @cindex secondary-selection face
-@item M-Drag-Mouse-1
+@item M-Drag-mouse-1
 Set the secondary selection, with one end at the place where you press
 down the button, and the other end at the place where you release it
 (@code{mouse-set-secondary}).  The selected text is highlighted, using
@@ -600,31 +600,31 @@ window, just like @code{mouse-set-region} (@pxref{Mouse Commands}).
 This command does not alter the kill ring.
 
 @findex mouse-start-secondary
-@kindex M-Mouse-1
-@item M-Mouse-1
+@kindex M-mouse-1
+@item M-mouse-1
 Set one endpoint for the @dfn{secondary selection}
 (@code{mouse-start-secondary}).
 
 @findex mouse-secondary-save-then-kill
-@kindex M-Mouse-3
-@item M-Mouse-3
+@kindex M-mouse-3
+@item M-mouse-3
 Set the secondary selection, with one end at the position clicked and
-the other at the position specified with @kbd{M-Mouse-1}
+the other at the position specified with @kbd{M-mouse-1}
 (@code{mouse-secondary-save-then-kill}).  This also puts the selected
-text in the kill ring.  A second @kbd{M-Mouse-3} at the same place
+text in the kill ring.  A second @kbd{M-mouse-3} at the same place
 kills the secondary selection just made.
 
 @findex mouse-yank-secondary
-@kindex M-Mouse-2
-@item M-Mouse-2
+@kindex M-mouse-2
+@item M-mouse-2
 Insert the secondary selection where you click, placing point at the
 end of the yanked text (@code{mouse-yank-secondary}).
 @end table
 
-Double or triple clicking of @kbd{M-Mouse-1} operates on words and
-lines, much like @kbd{Mouse-1}.
+Double or triple clicking of @kbd{M-mouse-1} operates on words and
+lines, much like @kbd{mouse-1}.
 
-If @code{mouse-yank-at-point} is non-@code{nil}, @kbd{M-Mouse-2} yanks
+If @code{mouse-yank-at-point} is non-@code{nil}, @kbd{M-mouse-2} yanks
 at point.  Then it does not matter precisely where you click, or even
 which of the frame's windows you click on.  @xref{Mouse Commands}.
 
index 9e5f50b5e91aaac8a3568ba95c2b22df59410de0..4b1165a11304e4c3f8c2f8fec919033bedeb0c5b 100644 (file)
@@ -69,11 +69,13 @@ number, in which case Emacs will show the binding for that many
 seconds before removing it from display.  The default behavior is to
 display the binding for 2 seconds.
 
+@vindex extended-command-suggest-shorter
   Commands that don't have key bindings, can still be invoked after
 typing less than their full name at the @samp{M-x} prompt.  Emacs
 mentions such shorthands in the echo area if they are significantly
-shorter than the full command name.  The setting of
-@code{suggest-key-bindings} affects these hints as well.
+shorter than the full command name, and
+@code{extended-command-suggest-shorter} is non-@code{nil}.  The
+setting of @code{suggest-key-bindings} affects these hints as well.
 
   In this manual, when we speak of running a command by name, we often
 omit the @key{RET} that terminates the name.  Thus we might say
index 71d2e99950c6d6a3f529251ddd737314b9c9c188..b0597dc24999e1f9cca44a8de0a6176b8802aa96 100644 (file)
@@ -51,9 +51,9 @@ modifier keys; a value to @code{left} means be the same key as
 @code{ns-alternate-modifier}; a value of @code{none} tells Emacs to
 ignore them.
 
-  @kbd{S-Mouse-1} adjusts the region to the click position,
-just like @kbd{Mouse-3} (@code{mouse-save-then-kill}); it does not pop
-up a menu for changing the default face, as @kbd{S-Mouse-1} normally
+  @kbd{S-mouse-1} adjusts the region to the click position,
+just like @kbd{mouse-3} (@code{mouse-save-then-kill}); it does not pop
+up a menu for changing the default face, as @kbd{S-mouse-1} normally
 does (@pxref{Text Scale}).  This change makes Emacs behave more like
 other Mac / GNUstep applications.
 
index 797b53f16e82e18fa2f7abdb5191a8f4bbb918bf..1037bd1fdd7a4760d8db398b2897d8ffdeb01732 100644 (file)
@@ -432,7 +432,7 @@ to the master repository.
 
   On a graphical display, you can move the mouse over this mode line
 indicator to pop up a tool-tip, which displays a more verbose
-description of the version control status.  Pressing @kbd{Mouse-1}
+description of the version control status.  Pressing @kbd{mouse-1}
 over the indicator pops up a menu of VC commands, identical to
 @samp{Tools / Version Control} on the menu bar.
 
@@ -1335,7 +1335,7 @@ their single-buffer counterparts (@pxref{Search}).
 @cindex stashes in version control
 @cindex shelves in version control
   The above commands are also available via the menu bar, and via a
-context menu invoked by @kbd{Mouse-2}.  Furthermore, some VC backends
+context menu invoked by @kbd{mouse-2}.  Furthermore, some VC backends
 use the menu to provide extra backend-specific commands.  For example,
 Git and Bazaar allow you to manipulate @dfn{stashes} and @dfn{shelves}
 (where are a way to temporarily put aside uncommitted changes, and
@@ -1590,6 +1590,13 @@ also creates a new item for the current file.  For many languages, it
 can even guess the name of the function or other object that was
 changed.
 
+@c Not worth it.
+@c @vindex change-log-directory-files
+To find the change log file, Emacs searches up the directory tree from
+the file you are editing.  By default, it stops if it finds a
+directory that seems to be the root of a version-control repository.
+To change this, customize @code{change-log-directory-files}.
+
 @vindex add-log-keep-changes-together
   When the variable @code{add-log-keep-changes-together} is
 non-@code{nil}, @kbd{C-x 4 a} adds to any existing item for the file
@@ -1806,7 +1813,7 @@ object-oriented language, or if there's a function and a variable by
 the same name), the command shows the candidate definitions in a
 @file{*xref*} buffer, together with the files in which these
 definitions are found.  Selecting one of these candidates by typing
-@kbd{@key{RET}} or clicking @kbd{Mouse-2} will pop a buffer showing
+@kbd{@key{RET}} or clicking @kbd{mouse-2} will pop a buffer showing
 the corresponding definition.
 
   When entering the identifier argument to @kbd{M-.}, the usual
@@ -1858,7 +1865,7 @@ the special XREF mode:
 
 @table @kbd
 @item @key{RET}
-@itemx Mouse-2
+@itemx mouse-2
 Display the reference on the current line and bury the @file{*xref*}
 buffer.
 @item n
index dd47532e7ed78b435f4c05f6bbd028bf4233e802..fdba0a47461c59cb80dd809777cac85c05283c17 100644 (file)
@@ -69,9 +69,9 @@ The same.
 @item C-x C-x
 Set the mark at point, and activate it; then move point where the mark
 used to be (@code{exchange-point-and-mark}).
-@item Drag-Mouse-1
+@item Drag-mouse-1
 Set point and the mark around the text you drag across.
-@item Mouse-3
+@item mouse-3
 Set the mark at point, then move point to where you click
 (@code{mouse-save-then-kill}).
 @item @samp{Shifted cursor motion keys}
index 6ab716d909ad0e11d56e44b132b333c5c21fc372..be4206cb60ca5aa08a28f1226973ee49ba2e9e48 100644 (file)
@@ -219,7 +219,7 @@ set the variable @code{enable-recursive-minibuffers} to @code{t}.
 
 @findex minibuffer-inactive-mode
   When not active, the minibuffer is in @code{minibuffer-inactive-mode},
-and clicking @kbd{Mouse-1} there shows the @file{*Messages*} buffer.
+and clicking @kbd{mouse-1} there shows the @file{*Messages*} buffer.
 If you use a dedicated frame for minibuffers, Emacs also recognizes
 certain keys there, for example @kbd{n} to make a new frame.
 
@@ -337,8 +337,8 @@ used with the completion list:
 
 @table @kbd
 @findex mouse-choose-completion
-@item Mouse-1
-@itemx Mouse-2
+@item mouse-1
+@itemx mouse-2
 Clicking mouse button 1 or 2 on a completion alternative chooses it
 (@code{mouse-choose-completion}).
 
index b5a21500fcbf158eb446742f313d2bc1f2ba00ee..5786bc40709218e3b158da897c6e79ee5ef78e67 100644 (file)
@@ -1217,7 +1217,7 @@ submit the copy as input with @key{RET}.  If you wish, you can edit
 the copy before resubmitting it.  If you use this command on an output
 line, it copies that line to the end of the buffer.
 
-@item Mouse-2
+@item mouse-2
 If @code{comint-use-prompt-regexp} is @code{nil} (the default), copy
 the old input command that you click on, inserting the copy at the end
 of the buffer (@code{comint-insert-input}).  If
@@ -1226,7 +1226,7 @@ not over old input, just yank as usual.
 @end table
 
   Moving to a previous input and then copying it with @kbd{C-c
-@key{RET}} or @kbd{Mouse-2} produces the same results---the same
+@key{RET}} or @kbd{mouse-2} produces the same results---the same
 buffer contents---that you would get by using @kbd{M-p} enough times
 to fetch that previous input from the history list.  However, @kbd{C-c
 @key{RET}} copies the text from the buffer, which can be different
@@ -1580,6 +1580,44 @@ option.  @xref{Initial Options}.  When Emacs is started this way, it
 calls @code{server-start} after initialization, and returns control to
 the calling terminal instead of opening an initial frame; it then
 waits in the background, listening for edit requests.
+
+@cindex socket activation, systemd, Emacs
+@item
+An external process can invoke the Emacs server when a connection
+event occurs upon a specified socket and pass the socket to the new
+Emacs server process.  An instance of this is @command{systemd}'s
+socket functionality: the @command{systemd} service creates a socket and
+listens for connections on it; when @command{emacsclient} connects to
+it for the first time, @command{systemd} can launch the Emacs server
+and hand over the socket to it for servicing @command{emacsclient}
+connections.  A setup to use this functionality could be:
+
+@file{~/.config/systemd/user/emacs.service}:
+@example
+[Unit]
+Description=Emacs
+
+[Service]
+Type=forking
+ExecStart=/path/to/emacs --daemon
+ExecStop=/path/to/emacsclient --eval "(kill-emacs)"
+Restart=always
+
+[Install]
+WantedBy=default.target
+@end example
+
+@file{~/.config/systemd/user/emacs.socket}:
+@example
+[Socket]
+ListenStream=/path/to/.emacs.socket
+
+[Install]
+WantedBy=sockets.target
+@end example
+
+The @code{ListenStream} path will be the path that Emacs listens for
+connections from @command{emacsclient}; this is a file of your choice.
 @end itemize
 
 @cindex @env{TEXEDIT} environment variable
@@ -2097,7 +2135,7 @@ You can also type @kbd{M-x pr-interface @key{RET}}; this creates a
 @file{*Printing Interface*} buffer, similar to a customization buffer,
 where you can set the printing options.  After selecting what and how
 to print, you start the print job using the @samp{Print} button (click
-@kbd{Mouse-2} on it, or move point over it and type @key{RET}).  For
+@kbd{mouse-2} on it, or move point over it and type @key{RET}).  For
 further information on the various options, use the @samp{Interface
 Help} button.
 
@@ -2606,8 +2644,8 @@ typing @kbd{M-x goto-address-mode}.  When this buffer-local minor mode
 is enabled, it finds all the URLs in the buffer, highlights them, and
 turns them into clickable buttons.  You can follow the URL by typing
 @kbd{C-c @key{RET}} (@code{goto-address-at-point}) while point is on
-its text; or by clicking with @kbd{Mouse-2}, or by clicking
-@kbd{Mouse-1} quickly (@pxref{Mouse References}).  Following a URL is
+its text; or by clicking with @kbd{mouse-2}, or by clicking
+@kbd{mouse-1} quickly (@pxref{Mouse References}).  Following a URL is
 done by calling @code{browse-url} as a subroutine
 (@pxref{Browse-URL}).
 
@@ -2680,12 +2718,12 @@ point (@code{dired-at-point}).
 @code{ffap-dired-other-frame}, analogous to @code{dired-other-frame}.
 @item M-x ffap-next
 Search buffer for next file name or URL, then find that file or URL.
-@item S-Mouse-3
-@kindex S-Mouse-3 @r{(FFAP)}
+@item S-mouse-3
+@kindex S-mouse-3 @r{(FFAP)}
 @code{ffap-at-mouse} finds the file guessed from text around the position
 of a mouse click.
-@item C-S-Mouse-3
-@kindex C-S-Mouse-3 @r{(FFAP)}
+@item C-S-mouse-3
+@kindex C-S-mouse-3 @r{(FFAP)}
 Display a menu of files and URLs mentioned in current buffer, then
 find the one you select (@code{ffap-menu}).
 @end table
index 45edd6cb7f98f2d9ab0b0edf80df10f2d782d5f1..89c14d239140dda799968b578ad8bdccca9dad84 100644 (file)
@@ -122,8 +122,8 @@ and the menu bar
 (@pxref{Menu Bar}).
 @end ifnottex
  Scroll bars don't work in MS-DOS Emacs.  PC mice usually have only
-two buttons; these act as @kbd{Mouse-1} and @kbd{Mouse-2}, but if you
-press both of them together, that has the effect of @kbd{Mouse-3}.  If
+two buttons; these act as @kbd{mouse-1} and @kbd{mouse-2}, but if you
+press both of them together, that has the effect of @kbd{mouse-3}.  If
 the mouse does have 3 buttons, Emacs detects that at startup, and all
 the 3 buttons function normally, as on X.
 
index 6ad12d646a1cd32e9511df00f0ad8871c15b318d..a87561ccf1817aed3414f86f30739584e7b98305 100644 (file)
@@ -507,32 +507,64 @@ the variable @code{w32-alt-is-meta} to a @code{nil} value.
 @findex w32-register-hot-key
 @findex w32-unregister-hot-key
   MS-Windows reserves certain key combinations, such as
-@kbd{@key{Alt}-@key{TAB}}, for its own use.  These key combinations are
-intercepted by the system before Emacs can see them.  You can use the
-@code{w32-register-hot-key} function to allow a key sequence to be
-seen by Emacs instead of being grabbed by Windows.  This function
-registers a key sequence as a @dfn{hot key}, overriding the special
-meaning of that key sequence for Windows.  (MS-Windows is told that
-the key sequence is a hot key only when one of the Emacs windows has
-focus, so that the special keys still have their usual meaning for
-other Windows applications.)
-
-  The argument to @code{w32-register-hot-key} must be a single key,
-with or without modifiers, in vector form that would be acceptable to
-@code{define-key}.  The meta modifier is interpreted as the @key{Alt}
-key if @code{w32-alt-is-meta} is @code{t} (the default), and the hyper
-modifier is always interpreted as the Windows key (usually labeled
-with @key{start} and the Windows logo).  If the function succeeds in
-registering the key sequence, it returns the hotkey ID, a number;
-otherwise it returns @code{nil}.
+@kbd{@key{Alt}-@key{TAB}} and a number of Windows key combinations,
+for its own use.  These key combinations are intercepted by the system
+before Emacs can see them.  Also, on Windows 10, all Windows key
+combinations are reserved by the system in such a way that they are
+never propagated to applications, even if the system does not
+currently define a hotkey on the specific combination.  You can use
+the @code{w32-register-hot-key} function to allow a key sequence to be
+seen by Emacs instead of being grabbed by Windows.  When registered as
+a hot key, the key combination is pulled out of the system's input
+queue before it is handled by Windows, effectively overriding the
+special meaning of that key sequence for Windows.  The override is
+only effective when Emacs is active; with other applications on the
+foreground the keys behave normally.
+
+  The argument to @code{w32-register-hot-key} must be a single key with a
+single modifier, in vector form that would be acceptable to
+@code{define-key}.  The control and shift modifiers have no effect on the
+argument.  The meta modifier is interpreted as the @key{Alt} key if
+@code{w32-alt-is-meta} is @code{t} (the default), and the super and hyper
+modifiers are interpreted according to the bindings of
+@code{w32-lwindow-modifier} and @code{w32-rwindow-modifier}.  Additionally, a
+modifier with the trailing dash but with no key indicates that all
+Windows defined hotkeys for that modifier are to be overridden in the
+favor of Emacs.
 
 @kindex M-TAB@r{, (MS-Windows)}
 @cindex @kbd{M-@key{TAB}} vs @kbd{@key{Alt}-@key{TAB}} (MS-Windows)
 @cindex @kbd{@key{Alt}-@key{TAB}} vs @kbd{M-@key{TAB}} (MS-Windows)
   For example, @code{(w32-register-hot-key [M-tab])} lets you use
-@kbd{M-@key{TAB}} normally in Emacs; for instance, to complete the word or
-symbol at point at top level, or to complete the current search string
-against previously sought strings during incremental search.
+@kbd{M-@key{TAB}} normally in Emacs; for instance, to complete the
+word or symbol at point at top level, or to complete the current
+search string against previously sought strings during incremental
+search.  @code{(w32-register-hot-key [s-])} with
+@code{w32-lwindow-modifier} bound to @code{super} disables all the
+Windows' own Windows key based shortcuts.@footnote{There is one known
+exception: The combination @kbd{@key{Windows}-@key{L}} that locks the
+workstation is handled by the system on a lower level.  For this
+reason, @code{w32-register-hot-key} cannot override this key
+combination - it always locks the computer.}
+
+  Note that @code{w32-register-hot-key} checks the
+@code{w32-[lr]window-modifier} values at the time of the function
+call.  Thus, you can set @code{w32-lwindow-modifier} as @code{super},
+then call @code{(w32-register-hot-key [s-r])}, and finally set
+@code{w32-rwindow-modifier} as @code{super} as well.  The result is
+that the left Windows key together with @key{R} invokes whichever
+function you have bound for the combination in Emacs, and the right
+Windows key and @key{R} opens the Windows @code{Run} dialog.
+
+  The hotkey registrations always also include all the shift and
+control modifier combinations for the given hotkey; that is,
+registering @kbd{s-@key{a}} as a hotkey gives you @kbd{S-s-@key{a}},
+@kbd{C-s-@key{a}} and @kbd{C-S-s-@key{a}} as well.
+
+  On Windows 98 and ME, the hotkey registration is more restricted.
+The desired hotkey must always be fully specified, and
+@code{w32-phantom-key-code} can be customized to achieve desired
+results.
 
   The function @code{w32-unregister-hot-key} reverses the effect of
 @code{w32-register-hot-key} for its argument key sequence.
@@ -607,12 +639,7 @@ keys are passed to Windows or swallowed by Emacs.  If the value is
 otherwise it is passed to Windows.  The default is @code{t} for both
 of these variables.  Passing each of these keys to Windows produces
 its normal effect: for example, @kbd{@key{Lwindow}} opens the
-@code{Start} menu, etc.@footnote{
-Some combinations of the ``Windows'' keys with other keys are caught
-by Windows at a low level in a way that Emacs currently cannot prevent.
-For example, @kbd{@key{Lwindow} r} always pops up the Windows
-@samp{Run} dialog.  Customizing the value of
-@code{w32-phantom-key-code} might help in some cases, though.}
+@code{Start} menu, etc.
 
 @vindex w32-recognize-altgr
 @kindex AltGr @r{(MS-Windows)}
index a0b1d626a7b037eed962a1bef747c863a19b3ea3..e735343cc7548f6db5dfa8c0a5b3b4b0888f598c 100644 (file)
@@ -499,7 +499,7 @@ the alternative.  Typing a number selects the associated alternative
 of the current row and uses it as input.
 
   @key{TAB} in these Chinese input methods displays a buffer showing
-all the possible characters at once; then clicking @kbd{Mouse-2} on
+all the possible characters at once; then clicking @kbd{mouse-2} on
 one of them selects that alternative.  The keys @kbd{C-f}, @kbd{C-b},
 @kbd{C-n}, @kbd{C-p}, and digits continue to work as usual, but they
 do the highlighting in the buffer showing the possible characters,
@@ -1036,7 +1036,7 @@ decoding it using coding system @var{right} instead.
 the current buffer (i.e., the coding system to use when saving or
 reverting the file).  You specify which coding system using the
 minibuffer.  You can also invoke this command by clicking with
-@kbd{Mouse-3} on the coding system indicator in the mode line
+@kbd{mouse-3} on the coding system indicator in the mode line
 (@pxref{Mode Line}).
 
   If you specify a coding system that cannot handle all the characters
index 780e00ca681df9774d10f7f1bcad0030aadc6001..0c79d9c3de13eededc43f84d1a9daf7d9034ae37 100644 (file)
@@ -1305,7 +1305,7 @@ count as blocks.
 @kindex C-c @@ C-M-s
 @kindex C-c @@ C-r
 @kindex C-c @@ C-l
-@kindex S-Mouse-2
+@kindex S-mouse-2
 @table @kbd
 @item C-c @@ C-h
 Hide the current block (@code{hs-hide-block}).
@@ -1313,7 +1313,7 @@ Hide the current block (@code{hs-hide-block}).
 Show the current block (@code{hs-show-block}).
 @item C-c @@ C-c
 Either hide or show the current block (@code{hs-toggle-hiding}).
-@item S-Mouse-2
+@item S-mouse-2
 Toggle hiding for the block you click on (@code{hs-mouse-toggle-hiding}).
 @item C-c @@ C-M-h
 Hide all top-level blocks (@code{hs-hide-all}).
index ef9894d6f26013c9c73e55617198157744cedb55..a8cf5e4a51268876b028c85bee2b9f476c369356 100644 (file)
@@ -1252,8 +1252,8 @@ Address mode:
 @end example
 
 @noindent
-Then you can browse these URLs by clicking on them with @kbd{Mouse-2}
-(or @kbd{Mouse-1} quickly) or by moving to one and typing @kbd{C-c
+Then you can browse these URLs by clicking on them with @kbd{mouse-2}
+(or @kbd{mouse-1} quickly) or by moving to one and typing @kbd{C-c
 @key{RET}}.  @xref{Goto Address mode, Activating URLs, Activating URLs}.
 
 @node Rmail Coding
index 459e8446937929b53707e6222a8dbeab12f399f2..7958a4a2bfa13480e14f0b8b1ce302555fe995d9 100644 (file)
@@ -203,10 +203,10 @@ saved in the search ring is specified by the variable
 @cindex incremental search, edit search string
 @cindex interactively edit search string
 @kindex M-e @r{(Incremental search)}
-@kindex Mouse-1 @r{in the minibuffer (Incremental Search)}
+@kindex mouse-1 @r{in the minibuffer (Incremental Search)}
   To edit the current search string in the minibuffer without
 replacing it with items from the search ring, type @kbd{M-e} or click
-@kbd{Mouse-1} in the minibuffer.  Type @key{RET}, @kbd{C-s} or
+@kbd{mouse-1} in the minibuffer.  Type @key{RET}, @kbd{C-s} or
 @kbd{C-r} to finish editing the string and search for it.  Type
 @kbd{C-f} or @kbd{@key{RIGHT}} to add to the search string characters
 following point from the buffer from which you started the search.
@@ -234,7 +234,7 @@ end of a line, it appends the next line.  With a prefix argument
 
 @kindex C-y @r{(Incremental search)}
 @kindex M-y @r{(Incremental search)}
-@kindex Mouse-2 @r{in the minibuffer (Incremental search)}
+@kindex mouse-2 @r{in the minibuffer (Incremental search)}
 @findex isearch-yank-kill
 @findex isearch-yank-pop
 @findex isearch-yank-x-selection
@@ -242,7 +242,7 @@ end of a line, it appends the next line.  With a prefix argument
 appends the current kill to the search string.  @kbd{M-y}
 (@code{isearch-yank-pop}), if called after @kbd{C-y}, replaces that
 appended text with an earlier kill, similar to the usual @kbd{M-y}
-(@code{yank-pop}) command (@pxref{Yanking}).  Clicking @kbd{Mouse-2}
+(@code{yank-pop}) command (@pxref{Yanking}).  Clicking @kbd{mouse-2}
 in the echo area appends the current X selection (@pxref{Primary
 Selection}) to the search string (@code{isearch-yank-x-selection}).
 
index 41abb42fb5d08490429b1fb9f9e56b6407324298..66f01b495d1a0436fc195862cff65d5715197ba6 100644 (file)
@@ -1255,7 +1255,7 @@ C-x} exits two folds and leaves the text and subheadings exposed.
 folds, and for showing and hiding text:
 
 @table @asis
-@item @kbd{C-M-Mouse-1} zooms in on the heading clicked on
+@item @kbd{C-M-mouse-1} zooms in on the heading clicked on
 @itemize @w{}
 @item
 single click: expose body.
@@ -1266,7 +1266,7 @@ triple click: expose body and subheadings.
 @item
 quad click: expose entire subtree.
 @end itemize
-@item @kbd{C-M-Mouse-2} exposes text under the heading clicked on
+@item @kbd{C-M-mouse-2} exposes text under the heading clicked on
 @itemize @w{}
 @item
 single click: expose body.
@@ -1277,7 +1277,7 @@ triple click: expose body and subheadings.
 @item
 quad click: expose entire subtree.
 @end itemize
-@item @kbd{C-M-Mouse-3} hides text under the heading clicked on or exits fold
+@item @kbd{C-M-mouse-3} hides text under the heading clicked on or exits fold
 @itemize @w{}
 @item
 single click: hide subtree.
@@ -1302,7 +1302,8 @@ it in order for this to take effect.
 automatically by putting the following in your init file:
 
 @example
-(eval-after-load "outline" '(require 'foldout))
+(with-eval-after-load "outline"
+  (require 'foldout))
 @end example
 
 @node Org Mode
@@ -2156,7 +2157,7 @@ want to set the justification style to @code{unfilled}
 
   The easiest way to alter properties is with the @samp{Text
 Properties} menu.  You can get to this menu from the @samp{Edit} menu
-in the menu bar (@pxref{Menu Bar}), or with @kbd{C-Mouse-2}
+in the menu bar (@pxref{Menu Bar}), or with @kbd{C-mouse-2}
 (@pxref{Menu Mouse Clicks}).  Some of the commands in the @samp{Text
 Properties} menu are listed below (you can also invoke them with
 @kbd{M-x}):
index 326806337694977577f4363a943be24a8847f8af..f4e3393ea9de9a6492b86ed3ce995552157ed0cf 100644 (file)
@@ -417,19 +417,22 @@ first @kbd{C-g} properly, then the second one will get you back to the
 shell.
 
   When you resume Emacs after a suspension caused by emergency escape,
-it asks two questions before going back to what it had been doing:
+it reports the resumption and asks a question or two before going back
+to what it had been doing:
 
 @example
+Emacs is resuming after an emergency escape.
 Auto-save? (y or n)
 Abort (and dump core)? (y or n)
 @end example
 
 @noindent
-Answer each one with @kbd{y} or @kbd{n} followed by @key{RET}.
+Answer each question with @kbd{y} or @kbd{n} followed by @key{RET}.
 
   Saying @kbd{y} to @samp{Auto-save?} causes immediate auto-saving of
 all modified buffers in which auto-saving is enabled.  Saying @kbd{n}
-skips this.
+skips this.  This question is omitted if Emacs is in a state where
+auto-saving cannot be done safely.
 
   Saying @kbd{y} to @samp{Abort (and dump core)?} causes Emacs to
 crash, dumping core.  This is to enable a wizard to figure out why
@@ -1359,7 +1362,7 @@ Appendix, elisp, Emacs Lisp Reference}.
 @end ifclear
 
 @item
-Avoid using @code{defadvice} or @code{eval-after-load} for Lisp code
+Avoid using @code{defadvice} or @code{with-eval-after-load} for Lisp code
 to be included in Emacs.
 
 @item
index 702963f75c58b86f9f8fd8c01fc0df57847987e0..bb8b68bf5f4811fdb5d385ec4af945829bfd2a75 100644 (file)
@@ -71,7 +71,7 @@ Split the selected window into two windows, one above the other
 @item C-x 3
 Split the selected window into two windows, positioned side by side
 (@code{split-window-right}).
-@item C-Mouse-2
+@item C-mouse-2
 In the mode line of a window, split that window.
 @end table
 
@@ -129,12 +129,12 @@ truncation glyphs, the margins, and the scroll bar.
   On text terminals, side-by-side windows are separated by a vertical
 divider which is drawn using the @code{vertical-border} face.
 
-@kindex C-Mouse-2 @r{(mode line)}
-@kindex C-Mouse-2 @r{(scroll bar)}
-  If you click @kbd{C-Mouse-2} in the mode line of a window, that
+@kindex C-mouse-2 @r{(mode line)}
+@kindex C-mouse-2 @r{(scroll bar)}
+  If you click @kbd{C-mouse-2} in the mode line of a window, that
 splits the window, putting a vertical divider where you click.
 Depending on how Emacs is compiled, you can also split a window by
-clicking @kbd{C-Mouse-2} in the scroll bar, which puts a horizontal
+clicking @kbd{C-mouse-2} in the scroll bar, which puts a horizontal
 divider where you click (this feature does not work when Emacs uses
 GTK+ scroll bars).
 
@@ -158,8 +158,8 @@ this option is @code{nil}.
 Select another window (@code{other-window}).
 @item C-M-v
 Scroll the next window (@code{scroll-other-window}).
-@item Mouse-1
-@kbd{Mouse-1}, in the text area of a window, selects the window and
+@item mouse-1
+@kbd{mouse-1}, in the text area of a window, selects the window and
 moves point to the position clicked.  Clicking in the mode line
 selects the window without moving point in it.
 @end table
index a94d46e168490de9c6b291e894f743b8c6fb0278..2048e28d959c621a6a87853eb152500cf7a22f5b 100644 (file)
@@ -2618,6 +2618,31 @@ causes it to evaluate @code{help-form} and display the result.  It
 then continues to wait for a valid input character, or keyboard-quit.
 @end defun
 
+@defun read-multiple-choice prompt choices
+Ask user a multiple choice question.  @var{prompt} should be a string
+that will be displayed as the prompt.
+
+@var{choices} is an alist where the first element in each entry is a
+character to be entered, the second element is a short name for the
+entry to be displayed while prompting (if there's room, it might be
+shortened), and the third, optional entry is a longer explanation that
+will be displayed in a help buffer if the user requests more help.
+
+The return value is the matching value from @var{choices}.
+
+@lisp
+(read-multiple-choice
+ "Continue connecting?"
+ '((?a "always" "Accept this certificate this session and for all future sessions.")
+   (?s "session only" "Accept this certificate this session only.")
+   (?n "no" "Refuse to use this certificate, and close the connection.")))
+@end lisp
+
+The @code{read-multiple-choice-face} face is used to highlight the
+matching characters in the name string on graphical terminals.
+
+@end defun
+
 @node Event Mod
 @subsection Modifying and Translating Input Events
 @cindex modifiers of events
index 994c346331f929f9910f33778b321106611df9cf..14e6eb3ab25f5a8f5ecfa81eab19d3f2f3693532 100644 (file)
@@ -841,6 +841,7 @@ most general last.  Here's an example of proper usage:
 This way, the special value @code{nil} is not treated like other
 symbols, and symbols are not treated like other Lisp expressions.
 
+@cindex radio, customization types
 @item (radio @var{element-types}@dots{})
 This is similar to @code{choice}, except that the choices are displayed
 using radio buttons rather than a menu.  This has the advantage of
@@ -936,6 +937,7 @@ The value must be a list and each element of the list must fit the type
 list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
 more elements or removing elements.
 
+@cindex restricted-sexp, customization types
 @item (restricted-sexp :match-alternatives @var{criteria})
 This is the most general composite type construct.  The value may be
 any Lisp object that satisfies one of @var{criteria}.  @var{criteria}
@@ -1020,6 +1022,7 @@ and whose remaining arguments should be zero or more of @code{foo} and
 This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
 and @code{(baz foo bar)}.
 
+@cindex choice, customization types
   When the element-type is a @code{choice}, you use @code{:inline} not
 in the @code{choice} itself, but in (some of) the alternatives of the
 @code{choice}.  For example, to match a list which must start with a
index 010dcb2fd1f738ab84bef8cd06ecfaff25a3013d..3673d1140417953cdbe156814630f1627ec5056e 100644 (file)
@@ -4766,6 +4766,7 @@ displayed (@pxref{Display Feature Testing}).
 * XPM Images::          Special features for XPM format.
 * PostScript Images::   Special features for PostScript format.
 * ImageMagick Images::  Special features available through ImageMagick.
+* SVG Images::          Creating and manipulating SVG images.
 * 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.
@@ -5138,12 +5139,18 @@ specifying the bounding box of the PostScript image, analogous to the
 @cindex ImageMagick images
 @cindex images, support for more formats
 
-  If you build Emacs with ImageMagick support, you can use the
+  If your Emacs build has ImageMagick support, you can use the
 ImageMagick library to load many image formats (@pxref{File
 Conveniences,,, emacs, The GNU Emacs Manual}).  The image type symbol
 for images loaded via ImageMagick is @code{imagemagick}, regardless of
 the actual underlying image format.
 
+To check for ImageMagick support, use the following:
+
+@lisp
+(image-type-available-p 'imagemagick)
+@end lisp
+
 @defun imagemagick-types
 This function returns a list of image file extensions supported by the
 current ImageMagick installation.  Each list element is a symbol
@@ -5203,6 +5210,16 @@ and if @code{:height} is set it will have precedence over
 wish.  @code{:max-width} and @code{:max-height} will always preserve
 the aspect ratio.
 
+@item :scale @var{scale}
+This should be a number, where values higher than 1 means to increase
+the size, and lower means to decrease the size.  For instance, a value
+of 0.25 will make the image a quarter size of what it originally was.
+If the scaling makes the image larger than specified by
+@code{:max-width} or @code{:max-height}, the resulting size will not
+exceed those two values.  If both @code{:scale} and
+@code{:height}/@code{:width} are specified, the height/width will be
+adjusted by the specified scaling factor.
+
 @item :format @var{type}
 The value, @var{type}, should be a symbol specifying the type of the
 image data, as found in @code{image-format-suffixes}.  This is used
@@ -5217,6 +5234,128 @@ Specifies a rotation angle in degrees.
 @xref{Multi-Frame Images}.
 @end table
 
+@node SVG Images
+@subsection SVG Images
+@cindex SVG images
+
+SVG (Scalable Vector Graphics) is an XML format for specifying images.
+If your Emacs build has with SVG support, you can create and manipulate
+these images with the following commands.
+
+@defun svg-create width height &rest args
+Create a new, empty SVG image with the specified dimensions.
+@var{args} is an argument plist with you can specify following:
+
+@table @code
+@item :stroke-width
+The default width (in pixels) of any lines created.
+
+@item :stroke
+The default stroke color on any lines created.
+@end table
+
+This function returns an SVG structure, and all the following commands
+work on that structure.
+@end defun
+
+@defun svg-gradient svg id type stops
+Create a gradient in @var{svg} with identifier @var{id}.  @var{type}
+specifies the gradient type, and can be either @code{linear} or
+@code{radial}.  @var{stops} is a list of percentage/color pairs.
+
+The following will create a linear gradient that goes from red at the
+start, to green 25% of the way, to blue at the end:
+
+@lisp
+(svg-gradient svg "gradient1" 'linear
+              '((0 . "red") (25 . "green") (100 . "blue")))
+@end lisp
+
+The gradient created (and inserted into the SVG object) can later be
+used by all functions that create shapes.
+@end defun
+
+All the following functions take an optional list of keyword
+parameters that alter the various attributes from their default
+values.  Valid attributes include:
+
+@table @code
+@item :stroke-width
+The width (in pixels) of lines drawn, and outlines around solid
+shapes.
+
+@item :stroke-color
+The color of lines drawn, and outlines around solid shapes.
+
+@item :fill-color
+The color used for solid shapes.
+
+@item :id
+The identified of the shape.
+
+@item :gradient
+If given, this should be the identifier of a previously defined
+gradient object.
+@end table
+
+@defun svg-rectangle svg x y width height &rest args
+Add a rectangle to @var{svg} where the upper left corner is at
+position @var{x}/@var{y} and is of size @var{width}/@var{height}.
+
+@lisp
+(svg-rectangle svg 100 100 500 500 :gradient "gradient1")
+@end lisp
+@end defun
+
+@defun svg-circle svg x y radius &rest args
+Add a circle to @var{svg} where the center is at @var{x}/@var{y}
+and the radius is @var{radius}.
+@end defun
+
+@defun svg-ellipse svg x y x-radius y-radius &rest args
+Add a circle to @var{svg} where the center is at @var{x}/@var{y} and
+the horizontal radius is @var{x-radius} and the vertical radius is
+@var{y-radius}.
+@end defun
+
+@defun svg-line svg x1 y1 x2 y2 &rest args
+Add a line to @var{svg} that starts at @var{x1}/@var{y1} and extends
+to @var{x2}/@var{y2}.
+@end defun
+
+@defun svg-polyline svg points &rest args
+Add a multiple segment line to @var{svg} that goes through
+@var{points}, which is a list of X/Y position pairs.
+
+@lisp
+(svg-polyline svg '((200 . 100) (500 . 450) (80 . 100))
+              :stroke-color "green")
+@end lisp
+@end defun
+
+@defun svg-polygon svg points &rest args
+Add a polygon to @var{svg} where @var{points} is a list of X/Y pairs
+that describe the outer circumference of the polygon.
+
+@lisp
+(svg-polygon svg '((100 . 100) (200 . 150) (150 . 90))
+             :stroke-color "blue" :fill-color "red"")
+@end lisp
+@end defun
+
+Finally, the @code{svg-image} takes an SVG object as its parameter and
+returns an image object suitable for use in functions like
+@code{insert-image}.  Here's a complete example that creates and
+inserts an image with a circle:
+
+@lisp
+(let ((svg (svg-create 400 400 :stroke-width 10)))
+  (svg-gradient svg "gradient1" 'linear '((0 . "red") (100 . "blue")))
+  (svg-circle svg 200 200 100 :gradient "gradient1" :stroke-color "green")
+  (insert-image (svg-image svg)))
+@end lisp
+
+
 @node Other Image Types
 @subsection Other Image Types
 @cindex PBM
@@ -5253,9 +5392,6 @@ Image type @code{jpeg}.
 @item PNG
 Image type @code{png}.
 
-@item SVG
-Image type @code{svg}.
-
 @item TIFF
 Image type @code{tiff}.
 Supports the @code{:index} property.  @xref{Multi-Frame Images}.
@@ -5319,6 +5455,12 @@ If none of the alternatives will work, then @var{symbol} is defined
 as @code{nil}.
 @end defmac
 
+@defun image-property image property
+Return the value of @var{property} in @var{image}.  Properties can be
+set by using @code{setf}.  Setting a property to @code{nil} will
+remove the property from the image.
+@end defun
+
 @defun find-image specs
 This function provides a convenient way to find an image satisfying one
 of a list of image specifications @var{specs}.
@@ -5389,6 +5531,13 @@ Here is an example of using @code{image-load-path-for-library}:
 @end example
 @end defun
 
+@vindex image-scaling-factor
+Images are automatically scaled when created based on the
+@code{image-scaling-factor} variable.  The value is either a floating
+point number (where numbers higher than 1 means to increase the size
+and lower means to shrink the size), or the symbol @code{auto}, which
+will compute a scaling factor based on the font pixel size.
+
 @node Showing Images
 @subsection Showing Images
 @cindex show image
@@ -5498,6 +5647,26 @@ cache, it can always be displayed, even if the value of
 @code{max-image-size} is subsequently changed (@pxref{Image Cache}).
 @end defvar
 
+Images inserted with the insertion functions above also get a local
+keymap installed in the text properties (or overlays) that span the
+displayed image.  This keymap defines the following commands:
+
+@table @kbd
+@item +
+Increase the image size (@code{image-increase-size}).  A prefix value
+of @samp{4} means to increase the size by 40%.  The default is 20%.
+
+@item -
+Decrease the image size (@code{image-increase-size}).  A prefix value
+of @samp{4} means to decrease the size by 40%.  The default is 20%.
+
+@item r
+Rotate the image by 90 degrees (@code{image-rotate}).
+
+@item o
+Save the image to a file (@code{image-save}).
+@end table
+
 @node Multi-Frame Images
 @subsection Multi-Frame Images
 @cindex multi-frame images
@@ -5820,7 +5989,7 @@ A string displayed by the Emacs tool-tip help system; by default,
 
 @item follow-link
 @kindex follow-link @r{(button property)}
-The follow-link property, defining how a @key{Mouse-1} click behaves
+The follow-link property, defining how a @key{mouse-1} click behaves
 on this button, @xref{Clickable Text}.
 
 @item button
@@ -6007,7 +6176,7 @@ additionally available in the keymap stored in
 @code{button-buffer-map} as a parent keymap for its keymap.
 
 If the button has a non-@code{nil} @code{follow-link} property, and
-@code{mouse-1-click-follows-link} is set, a quick @key{Mouse-1} click
+@code{mouse-1-click-follows-link} is set, a quick @key{mouse-1} click
 will also activate the @code{push-button} command.
 @xref{Clickable Text}.
 
index 6b7ee19d5f395fd3e2c094af35bb817fe22ffdd2..f3650a4556fea6555e46791a34b94a4fe7bed195 100644 (file)
@@ -1195,73 +1195,83 @@ the default, but we plan to change that, so you should specify a
 non-@code{nil} value for @var{id-format} if you use the returned
 @acronym{UID} or @acronym{GID}.
 
+Accessor functions are provided to access the elements in this list.
+The accessors are mentioned along with the descriptions of the
+elements below.
+
 The elements of the list, in order, are:
 
 @enumerate 0
 @item
 @code{t} for a directory, a string for a symbolic link (the name
-linked to), or @code{nil} for a text file.
+linked to), or @code{nil} for a text file
+(@code{file-attribute-type}).
 
 @c Wordy so as to prevent an overfull hbox.  --rjc 15mar92
 @item
-The number of names the file has.  Alternate names, also known as hard
-links, can be created by using the @code{add-name-to-file} function
-(@pxref{Changing Files}).
+The number of names the file has (@code{file-attribute-link-number}).
+Alternate names, also known as hard links, can be created by using the
+@code{add-name-to-file} function (@pxref{Changing Files}).
 
 @item
-The file's @acronym{UID}, normally as a string.  However, if it does
-not correspond to a named user, the value is a number.
+The file's @acronym{UID}, normally as a string
+(@code{file-attribute-user-id}).  However, if it does not correspond
+to a named user, the value is a number.
 
 @item
-The file's @acronym{GID}, likewise.
+The file's @acronym{GID}, likewise (@code{file-attribute-group-id}).
 
 @item
-The time of last access, as a list of four integers @code{(@var{sec-high}
-@var{sec-low} @var{microsec} @var{picosec})}.  (This is similar to the
-value of @code{current-time}; see @ref{Time of Day}.)  Note that on
-some FAT-based filesystems, only the date of last access is recorded,
-so this time will always hold the midnight of the day of last access.
+The time of last access, as a list of four integers
+@code{(@var{sec-high} @var{sec-low} @var{microsec} @var{picosec})}
+(@code{file-attribute-access-time}).  (This is similar to the value of
+@code{current-time}; see @ref{Time of Day}.)  Note that on some
+FAT-based filesystems, only the date of last access is recorded, so
+this time will always hold the midnight of the day of last access.
 
 @cindex modification time of file
 @item
-The time of last modification as a list of four integers (as above).
-This is the last time when the file's contents were modified.
+The time of last modification as a list of four integers (as above)
+(@code{file-attribute-modification-time}).  This is the last time when
+the file's contents were modified.
 
 @item
-The time of last status change as a list of four integers (as above).
-This is the time of the last change to the file's access mode bits,
-its owner and group, and other information recorded in the filesystem
-for the file, beyond the file's contents.
+The time of last status change as a list of four integers (as above)
+(@code{file-attribute-status-change-time}).  This is the time of the
+last change to the file's access mode bits, its owner and group, and
+other information recorded in the filesystem for the file, beyond the
+file's contents.
 
 @item
-The size of the file in bytes.  This is floating point if the size is
-too large to fit in a Lisp integer.
+The size of the file in bytes (@code{file-attribute-size}).  This is
+floating point if the size is too large to fit in a Lisp integer.
 
 @item
-The file's modes, as a string of ten letters or dashes,
-as in @samp{ls -l}.
+The file's modes, as a string of ten letters or dashes, as in
+@samp{ls -l} (@code{file-attribute-modes}).
 
 @item
 An unspecified value, present for backward compatibility.
 
 @item
-The file's inode number.  If possible, this is an integer.  If the
-inode number is too large to be represented as an integer in Emacs
-Lisp but dividing it by @math{2^{16}} yields a representable integer,
-then the value has the
+The file's inode number (@code{file-attribute-inode-number}).  If
+possible, this is an integer.  If the inode number is too large to be
+represented as an integer in Emacs Lisp but dividing it by
+@math{2^{16}} yields a representable integer, then the value has the
 form @code{(@var{high} . @var{low})}, where @var{low} holds the low 16
-bits.  If the inode number is too wide for even that, the value is of the form
-@code{(@var{high} @var{middle} . @var{low})}, where @code{high} holds
-the high bits, @var{middle} the middle 24 bits, and @var{low} the low
-16 bits.
+bits.  If the inode number is too wide for even that, the value is of
+the form @code{(@var{high} @var{middle} . @var{low})}, where
+@code{high} holds the high bits, @var{middle} the middle 24 bits, and
+@var{low} the low 16 bits.
 
 @item
-The filesystem number of the device that the file is on.  Depending on
-the magnitude of the value, this can be either an integer or a cons
-cell, in the same manner as the inode number.  This element and the
-file's inode number together give enough information to distinguish
-any two files on the system---no two files can have the same values
-for both of these numbers.
+The filesystem number of the device that the file is on
+@code{file-attribute-device-number}).  Depending on the magnitude of
+the value, this can be either an integer or a cons cell, in the same
+manner as the inode number.  This element and the file's inode number
+together give enough information to distinguish any two files on the
+system---no two files can have the same values for both of these
+numbers.
 @end enumerate
 
 For example, here are the file attributes for @file{files.texi}:
index a2e94c34b62e34b1c1609adba9b2ac0f26065501..ff21abba61e87939dd688141fc7e4e5975d8b9cf 100644 (file)
@@ -141,6 +141,37 @@ This function returns @code{t} if @var{object} is any kind of
 function, i.e., can be passed to @code{funcall}.  Note that
 @code{functionp} returns @code{t} for symbols that are function names,
 and returns @code{nil} for special forms.
+@end defun
+
+  It is also possible to find out how many arguments an arbitrary
+function expects:
+
+@defun func-arity function
+This function provides information about the argument list of the
+specified @var{function}.  The returned value is a cons cell of the
+form @w{@code{(@var{min} . @var{max})}}, where @var{min} is the
+minimum number of arguments, and @var{max} is either the maximum
+number of arguments, or the symbol @code{many} for functions with
+@code{&rest} arguments, or the symbol @code{unevalled} if
+@var{function} is a special form.
+
+Note that this function might return inaccurate results in some
+situations, such as the following:
+
+@itemize @minus
+@item
+Functions defined using @code{apply-partially} (@pxref{Calling
+Functions, apply-partially}).
+
+@item
+Functions that are advised using @code{advice-add} (@pxref{Advising
+Named Functions}).
+
+@item
+Functions that determine the argument list dynamically, as part of
+their code.
+@end itemize
+
 @end defun
 
 @noindent
@@ -176,12 +207,9 @@ function.  For example:
 @end defun
 
 @defun subr-arity subr
-This function provides information about the argument list of a
-primitive, @var{subr}.  The returned value is a pair
-@code{(@var{min} . @var{max})}.  @var{min} is the minimum number of
-args.  @var{max} is the maximum number or the symbol @code{many}, for a
-function with @code{&rest} arguments, or the symbol @code{unevalled} if
-@var{subr} is a special form.
+This works like @code{func-arity}, but only for built-in functions and
+without symbol indirection.  It signals an error for non-built-in
+functions.  We recommend to use @code{func-arity} instead.
 @end defun
 
 @node Lambda Expressions
index 8389c2147078f2ab25780cb8ad14a163253100de..4607bb0a0d13c394783873e1c3bece09decfbb1d 100644 (file)
@@ -268,18 +268,43 @@ under the property @code{hash-table-test}; the property value's form is
 @code{(@var{test-fn} @var{hash-fn})}.
 @end defun
 
-@defun sxhash obj
+@defun sxhash-equal obj
 This function returns a hash code for Lisp object @var{obj}.
 This is an integer which reflects the contents of @var{obj}
 and the other Lisp objects it points to.
 
-If two objects @var{obj1} and @var{obj2} are equal, then @code{(sxhash
-@var{obj1})} and @code{(sxhash @var{obj2})} are the same integer.
+If two objects @var{obj1} and @var{obj2} are @code{equal}, then
+@code{(sxhash-equal @var{obj1})} and @code{(sxhash-equal @var{obj2})}
+are the same integer.
 
-If the two objects are not equal, the values returned by @code{sxhash}
-are usually different, but not always; once in a rare while, by luck,
-you will encounter two distinct-looking objects that give the same
-result from @code{sxhash}.
+If the two objects are not @code{equal}, the values returned by
+@code{sxhash-equal} are usually different, but not always; once in a
+rare while, by luck, you will encounter two distinct-looking objects
+that give the same result from @code{sxhash-equal}.
+
+@b{Common Lisp note:} In Common Lisp a similar function is called
+@code{sxhash}.  Emacs provides this name as a compatibility alias for
+@code{sxhash-equal}.
+@end defun
+
+@defun sxhash-eq obj
+This function returns a hash code for Lisp object @var{obj}.  Its
+result reflects identity of @var{obj}, but not its contents.
+
+If two objects @var{obj1} and @var{obj2} are @code{eq}, then
+@code{(xhash @var{obj1})} and @code{(xhash @var{obj2})} are the same
+integer.
+@end defun
+
+@defun sxhash-eql obj
+This function returns a hash code for Lisp object @var{obj} suitable
+for @code{eql} comparison.  I.e. it reflects identity of @var{obj}
+except for the case where the object is a float number, in which case
+hash code is generated for the value.
+
+If two objects @var{obj1} and @var{obj2} are @code{eql}, then
+@code{(xhash @var{obj1})} and @code{(xhash @var{obj2})} are the same
+integer.
 @end defun
 
   This example creates a hash table whose keys are strings that are
@@ -289,7 +314,7 @@ compared case-insensitively.
 (defun case-fold-string= (a b)
   (eq t (compare-strings a nil nil b nil nil t)))
 (defun case-fold-string-hash (a)
-  (sxhash (upcase a)))
+  (sxhash-equal (upcase a)))
 
 (define-hash-table-test 'case-fold
   'case-fold-string= 'case-fold-string-hash)
@@ -302,7 +327,7 @@ predefined test value @code{equal}.  The keys can be any Lisp object,
 and equal-looking objects are considered the same key.
 
 @example
-(define-hash-table-test 'contents-hash 'equal 'sxhash)
+(define-hash-table-test 'contents-hash 'equal 'sxhash-equal)
 
 (make-hash-table :test 'contents-hash)
 @end example
index 41064df5a287f6d060db59186ed53fa736bd71c0..fedef3d7f46dfc1ddda4caf115a00b0c2121ba6e 100644 (file)
@@ -66,6 +66,16 @@ into the dumped Emacs.  If you port Emacs to a new operating system,
 and are not able to implement dumping, then Emacs must load
 @file{loadup.el} each time it starts.
 
+@cindex build details
+@cindex deterministic build
+@cindex @option{--disable-build-details} option to @command{configure}
+  By default the dumped @file{emacs} executable records details such
+as the build time and host name.  Use the
+@option{--disable-build-details} option of @command{configure} to
+suppress these details, so that building and installing Emacs twice
+from the same sources is more likely to result in identical copies of
+Emacs.
+
 @cindex @file{site-load.el}
   You can specify additional files to preload by writing a library named
 @file{site-load.el} that loads them.  You may need to rebuild Emacs
index 0f42d4d8a7fd11941c7f140005815748a57fc438..2f84aeee39ee09c3ba5b0b23be26e8fe16ec1fcb 100644 (file)
@@ -494,7 +494,8 @@ giving a prefix argument makes @var{here} non-@code{nil}.
 @defvar emacs-build-time
 The value of this variable indicates the time at which Emacs was
 built.  It is a list of four integers, like the value of
-@code{current-time} (@pxref{Time of Day}).
+@code{current-time} (@pxref{Time of Day}), or is @code{nil}
+if the information is not available.
 
 @example
 @group
index 0ea30283d7d1c51d342f523c894f3e882c8fda62..61ac80c589cef6dd40168df90ac8cdd5dc11db32 100644 (file)
@@ -2605,8 +2605,8 @@ this is how you specify the image to display in the tool bar:
 
 @table @code
 @item :image @var{image}
-@var{images} is either a single image specification or a vector of four
-image specifications.  If you use a vector of four,
+@var{image} is either a single image specification (@pxref{Images}) or
+a vector of four image specifications.  If you use a vector of four,
 one of them is used, depending on circumstances:
 
 @table @asis
index 06900a49477eb193e53901df1f012d45c2249ea5..d2d38d7fb5ef3122d1a1b33e32ba0c7bd2c7e9ba 100644 (file)
@@ -1089,11 +1089,12 @@ execution of the rest of @var{body}.
 @end defmac
 
 Normally, well-designed Lisp programs should not use
-@code{eval-after-load}.  If you need to examine and set the variables
-defined in another library (those meant for outside use), you can do
-it immediately---there is no need to wait until the library is loaded.
-If you need to call functions defined by that library, you should load
-the library, preferably with @code{require} (@pxref{Named Features}).
+@code{with-eval-after-load}.  If you need to examine and set the
+variables defined in another library (those meant for outside use),
+you can do it immediately---there is no need to wait until the library
+is loaded.  If you need to call functions defined by that library, you
+should load the library, preferably with @code{require} (@pxref{Named
+Features}).
 
 @node Dynamic Modules
 @section Emacs Dynamic Modules
index 3f9db8ce3756ff37fcbb23a657f58a9aaee9ee1f..6472bd1b03afd893ceb368ecec4df6476a29547b 100644 (file)
@@ -594,6 +594,11 @@ calls to the macro.  An indentation specification is written like this:
 (declare (indent @var{indent-spec}))
 @end example
 
+@noindent
+@cindex @code{lisp-indent-function} property
+This results in the @code{lisp-indent-function} property being set on
+the macro name.
+
 @noindent
 Here are the possibilities for @var{indent-spec}:
 
index 6f41090ebea2ab7442c14d3270aa5f5578392312..88662aba08a204df5b9afe493d259795d608d9a2 100644 (file)
@@ -170,6 +170,23 @@ non-@code{nil}, then the string that is returned includes whatever text
 properties were present in the minibuffer.  Otherwise all the text
 properties are stripped when the value is returned.
 
+@cvindex minibuffer-prompt-properties
+The text properties in @code{minibuffer-prompt-properties} are applied
+to the prompt.  By default, this property list defines a face to use
+for the prompt.  This face, if present, is applied to the end of the
+face list and merged before display.
+
+If the user wants to completely control the look of the prompt, the
+most convenient way to do that is to specify the @code{default} face
+at the end of all face lists.  For instance:
+
+@lisp
+(read-from-minibuffer
+ (concat
+  (propertize "Bold" 'face '(bold default))
+  (propertize " and normal: " 'face '(default))))
+@end lisp
+
 If the argument @var{inherit-input-method} is non-@code{nil}, then the
 minibuffer inherits the current input method (@pxref{Input Methods}) and
 the setting of @code{enable-multibyte-characters} (@pxref{Text
index 52cc8f86bcf5b8281657cc537f4d3c1ba18f5b6e..ae79128f84db551747e06b07eb1587579026371e 100644 (file)
@@ -1912,7 +1912,8 @@ could have the same effects on the mode line if the value of
 @code{mode-line-format} is changed to use them.  However, various parts
 of Emacs set these variables on the understanding that they will control
 parts of the mode line; therefore, practically speaking, it is essential
-for the mode line to use them.
+for the mode line to use them.  Also see
+@ref{Optional Mode Line,,, emacs, The GNU Emacs Manual}.
 
 @defvar mode-line-mule-info
 This variable holds the value of the mode line construct that displays
@@ -1993,6 +1994,21 @@ with the major mode as: @samp{(Shell:run)}.  Normally this variable
 is @code{nil}.
 @end defvar
 
+@defvar mode-line-front-space
+This variable is displayed at the front of the mode line.  By default,
+this construct is displayed right at the beginning of the mode line,
+except that if there is a memory-full message, it is displayed first.
+@end defvar
+
+@defvar mode-line-end-spaces
+This variable is displayed at the end of the mode line.
+@end defvar
+
+@defvar mode-line-misc-info
+Mode line construct for miscellaneous information.  By default, this
+shows the information specified by @code{global-mode-string}.
+@end defvar
+
 @defvar minor-mode-alist
 @anchor{Definition of minor-mode-alist}
 This variable holds an association list whose elements specify how the
index 9cf3b5750f2a32cfd1d3ebde57eeab0d047b3279..fd2ce3248fd53ae7e76dd2f7e20cd34687beb54e 100644 (file)
@@ -420,6 +420,18 @@ codepoint can have.
 @end example
 @end defun
 
+@defun char-from-name string &optional ignore-case
+This function returns the character whose Unicode name is @var{string}.
+If @var{ignore-case} is non-@code{nil}, case is ignored in @var{string}.
+This function returns @code{nil} if @var{string} does not name a character.
+
+@example
+;; U+03A3
+(= (char-from-name "GREEK CAPITAL LETTER SIGMA") #x03A3)
+     @result{} t
+@end example
+@end defun
+
 @defun get-byte &optional pos string
 This function returns the byte at character position @var{pos} in the
 current buffer.  If the current buffer is unibyte, this is literally
@@ -622,18 +634,21 @@ This function returns the value of @var{char}'s @var{propname} property.
      @result{} Nd
 @end group
 @group
-;; U+2084 SUBSCRIPT FOUR
-(get-char-code-property ?\u2084 'digit-value)
+;; U+2084
+(get-char-code-property ?\N@{SUBSCRIPT FOUR@}
+                        'digit-value)
      @result{} 4
 @end group
 @group
-;; U+2155 VULGAR FRACTION ONE FIFTH
-(get-char-code-property ?\u2155 'numeric-value)
+;; U+2155
+(get-char-code-property ?\N@{VULGAR FRACTION ONE FIFTH@}
+                        'numeric-value)
      @result{} 0.2
 @end group
 @group
-;; U+2163 ROMAN NUMERAL FOUR
-(get-char-code-property ?\u2163 'numeric-value)
+;; U+2163
+(get-char-code-property ?\N@{ROMAN NUMERAL FOUR@}
+                        'numeric-value)
      @result{} 4
 @end group
 @group
index 324593068d51e2de152fbbf263a2363d88bcfaf5..54894b8e24e52b0a5f5e81a7379870d1e9dfa25a 100644 (file)
@@ -353,25 +353,32 @@ following text.)
 control characters, Emacs provides several types of escape syntax that
 you can use to specify non-@acronym{ASCII} text characters.
 
+@enumerate
+@item
 @cindex @samp{\} in character constant
 @cindex backslash in character constants
 @cindex unicode character escape
-  Firstly, you can specify characters by their Unicode values.
-@code{?\u@var{nnnn}} represents a character with Unicode code point
-@samp{U+@var{nnnn}}, where @var{nnnn} is (by convention) a hexadecimal
-number with exactly four digits.  The backslash indicates that the
-subsequent characters form an escape sequence, and the @samp{u}
-specifies a Unicode escape sequence.
-
-  There is a slightly different syntax for specifying Unicode
-characters with code points higher than @code{U+@var{ffff}}:
-@code{?\U00@var{nnnnnn}} represents the character with code point
-@samp{U+@var{nnnnnn}}, where @var{nnnnnn} is a six-digit hexadecimal
-number.  The Unicode Standard only defines code points up to
-@samp{U+@var{10ffff}}, so if you specify a code point higher than
-that, Emacs signals an error.
-
-  Secondly, you can specify characters by their hexadecimal character
+You can specify characters by their Unicode names, if any.
+@code{?\N@{@var{NAME}@}} represents the Unicode character named
+@var{NAME}.  Thus, @samp{?\N@{LATIN SMALL LETTER A WITH GRAVE@}} is
+equivalent to @code{?à} and denotes the Unicode character U+00E0.  To
+simplify entering multi-line strings, you can replace spaces in the
+names by non-empty sequences of whitespace (e.g., newlines).
+
+@item
+You can specify characters by their Unicode values.
+@code{?\N@{U+@var{X}@}} represents a character with Unicode code point
+@var{X}, where @var{X} is a hexadecimal number.  Also,
+@code{?\u@var{xxxx}} and @code{?\U@var{xxxxxxxx}} represent code
+points @var{xxxx} and @var{xxxxxxxx}, respectively, where each @var{x}
+is a single hexadecimal digit.  For example, @code{?\N@{U+E0@}},
+@code{?\u00e0} and @code{?\U000000E0} are all equivalent to @code{?à}
+and to @samp{?\N@{LATIN SMALL LETTER A WITH GRAVE@}}.  The Unicode
+Standard defines code points only up to @samp{U+@var{10ffff}}, so if
+you specify a code point higher than that, Emacs signals an error.
+
+@item
+You can specify characters by their hexadecimal character
 codes.  A hexadecimal escape sequence consists of a backslash,
 @samp{x}, and the hexadecimal character code.  Thus, @samp{?\x41} is
 the character @kbd{A}, @samp{?\x1} is the character @kbd{C-a}, and
@@ -379,14 +386,17 @@ the character @kbd{A}, @samp{?\x1} is the character @kbd{C-a}, and
 You can use any number of hex digits, so you can represent any
 character code in this way.
 
+@item
 @cindex octal character code
-  Thirdly, you can specify characters by their character code in
+You can specify characters by their character code in
 octal.  An octal escape sequence consists of a backslash followed by
 up to three octal digits; thus, @samp{?\101} for the character
 @kbd{A}, @samp{?\001} for the character @kbd{C-a}, and @code{?\002}
 for the character @kbd{C-b}.  Only characters up to octal code 777 can
 be specified this way.
 
+@end enumerate
+
   These escape sequences may also be used in strings.  @xref{Non-ASCII
 in Strings}.
 
index 5f189b984a32f1de6105d3c8079f31ff24ac11ba..becb691581b3283a64bd06d3ce7dc38668e36664 100644 (file)
@@ -900,9 +900,6 @@ A GNU (glibc-based) system with a FreeBSD kernel.
 @item hpux
 Hewlett-Packard HPUX operating system.
 
-@item irix
-Silicon Graphics Irix system.
-
 @item nacl
 Google Native Client (@acronym{NaCl}) sandboxing system.
 
@@ -1328,7 +1325,12 @@ omitted or @code{nil}, the conversion uses Emacs's default time zone.
 If it is @code{t}, the conversion uses Universal Time.  If it is
 @code{wall}, the conversion uses the system wall clock time.  If it is
 a string, the conversion uses the time zone rule equivalent to setting
-@env{TZ} to that string.
+@env{TZ} to that string.  If it is an integer @var{offset}, the
+conversion uses a fixed time zone with the given offset and a numeric
+abbreviation.  If it is a list (@var{offset} @var{abbr}), where
+@var{offset} is an integer number of seconds east of Universal Time
+and @var{abbr} is a string, the conversion uses a fixed time zone with
+the given offset and abbreviation.
 
 @defun current-time-zone &optional time zone
 @cindex time zone, current
@@ -1426,10 +1428,6 @@ yourself before you call @code{encode-time}.
 
 The optional argument @var{zone} defaults to the current time zone rule.
 @xref{Time Zone Rules}.
-In addition to the usual time zone rule values, it can also be a list
-(as you would get from @code{current-time-zone}) or an integer (as
-from @code{decode-time}), applied without any further alteration for
-daylight saving time.
 
 If you pass more than seven arguments to @code{encode-time}, the first
 six are used as @var{seconds} through @var{year}, the last argument is
@@ -1862,6 +1860,12 @@ one of these functions; the arrival of the specified time will not
 cause anything special to happen.
 @end defun
 
+@findex timer-list
+The @code{timer-list} command lists all the currently active timers.
+There's only one command available in the buffer displayed: @kbd{c}
+(@code{timer-list-cancel}) that will cancel the timer on the line
+under point.
+
 @node Idle Timers
 @section Idle Timers
 @cindex idle timers
index f660b159386915af11185bdd22a69c187ce6bc91..e8a9ad05c22b3c9713759375f19f56552e4d5874 100644 (file)
@@ -2128,7 +2128,8 @@ associated with any buffer.
 
 The arguments @var{host} and @var{service} specify where to connect to;
 @var{host} is the host name (a string), and @var{service} is the name of
-a defined network service (a string) or a port number (an integer).
+a defined network service (a string) or a port number (an integer like
+@code{80} or an integer string like @code{"80"}).
 
 The remaining arguments @var{parameters} are keyword/argument pairs
 that are mainly relevant to encrypted connections:
@@ -2352,8 +2353,9 @@ connecting to that address will be accepted.
 
 @item :service @var{service}
 @var{service} specifies a port number to connect to; or, for a server,
-the port number to listen on.  It should be a service name that
-translates to a port number, or an integer specifying the port number
+the port number to listen on.  It should be a service name like
+@samp{"http"} that translates to a port number, or an integer like @samp{80}
+or an integer string like @samp{"80"} that specifies the port number
 directly.  For a server, it can also be @code{t}, which means to let
 the system select an unused port number.
 
@@ -2365,6 +2367,12 @@ automatically for the given @var{host} and @var{service}.
 ignored.  @code{ipv4} and @code{ipv6} specify to use IPv4 and IPv6,
 respectively.
 
+@item :use-external-socket @var{use-external-socket}
+If @var{use-external-socket} is non-@code{nil} use any sockets passed
+to Emacs on invocation instead of allocating one.  This is used by the
+Emacs server code to allow on-demand socket activation.  If Emacs
+wasn't passed a socket, this option is silently ignored.
+
 @item :local @var{local-address}
 For a server process, @var{local-address} is the address to listen on.
 It overrides @var{family}, @var{host} and @var{service}, so you
@@ -2415,8 +2423,33 @@ without waiting for the connection to complete.  When the connection
 succeeds or fails, Emacs will call the sentinel function, with a
 second argument matching @code{"open"} (if successful) or
 @code{"failed"}.  The default is to block, so that
-@code{make-network-process} does not return until the connection
-has succeeded or failed.
+@code{make-network-process} does not return until the connection has
+succeeded or failed.
+
+If you're setting up an asynchronous TLS connection, you have to also
+provide the @code{:tls-parameters} parameter (see below).
+
+Depending on the capabilities of Emacs, how asynchronous
+@code{:nowait} is may vary.  The three elements that may (or may not)
+be done asynchronously are domain name resolution, socket setup, and
+(for TLS connections) TLS negotiation.
+
+Many functions that interact with process objects, (for instance,
+@code{process-datagram-address}) rely on them at least having a socket
+before they can return a useful value.  These functions will block
+until the socket has achieved the desired status.  The recommended way
+of interacting with asynchronous sockets is to place a sentinel on the
+process, and not try to interact with it before it has changed status
+to @samp{"run"}.  That way, none of these functions will block.
+
+@item :tls-parameters
+When opening a TLS connection, this should be where the first element
+is the TLS type (which should either be @code{gnutls-x509pki} or
+@code{gnutls-anon}, and the remaining elements should form a keyword
+list acceptable for @code{gnutls-boot}.  (This keyword list can be
+obtained from the @code{gnutls-boot-parameters} function.)  The TLS
+connection will then be negotiated after completing the connection to
+the host.
 
 @item :stop @var{stopped}
 If @var{stopped} is non-@code{nil}, start the network connection or
index 1243d720bc30b80081eeeae22176c2ea49ead9d6..644716a95c7165c7003413ad3f725cbdfa7d369e 100644 (file)
@@ -1805,6 +1805,14 @@ Answer this question and all subsequent questions in the series with
 @item backup
 Move back to the previous place that a question was asked about.
 
+@item undo
+Undo last replacement and move back to the place where that
+replacement was performed.
+
+@item undo-all
+Undo all replacements and move back to the place where the first
+replacement was performed.
+
 @item edit
 Enter a recursive edit to deal with this question---instead of any
 other action that would normally be taken.
index a54ab104ab55408807b0e488e7fb9c407afd9849..08e5e3ae35c6e6ff15909fc4f78cc1712bb9d415 100644 (file)
@@ -576,6 +576,21 @@ element of @var{sequence}.  The returned value is a list.
 @end example
 @end defun
 
+@defun seq-map-indexed function sequence
+  This function returns the result of applying @var{function} to each
+element of @var{sequence} and its index within @var{seq}.  The
+returned value is a list.
+
+@example
+@group
+(seq-map-indexed (lambda (elt idx)
+                   (list idx elt))
+                 '(a b c))
+@result{} ((0 a) (b 1) (c 2))
+@end group
+@end example
+@end defun
+
 @defun seq-mapn function &rest sequences
   This function returns the result of applying @var{function} to each
 element of @var{sequences}.  The arity (@pxref{What Is a Function,
@@ -748,6 +763,18 @@ according to @var{function}, a function of two arguments that returns
 non-@code{nil} if the first argument should sort before the second.
 @end defun
 
+@defun seq-sort-by function predicate sequence
+  This function is similar to @code{seq-sort}, but the elements of
+@var{sequence} are transformed by applying @var{function} on them
+before being sorted.  @var{function} is a function of one argument.
+
+@example
+(seq-sort-by #'seq-length #'> ["a" "ab" "abc"])
+@result{} ["abc" "ab" "a"]
+@end example
+@end defun
+
+
 @defun seq-contains sequence elt &optional function
   This function returns the first element in @var{sequence} that is equal to
 @var{elt}.  If the optional argument @var{function} is non-@code{nil},
index 9d6613c522cfde999ffb8cb983398d87b2d82dcf..ce629aa8259e9883d84c4af064dbd1b3a9cb5c78 100644 (file)
@@ -633,6 +633,14 @@ If your system does not support a locale environment, this function
 behaves like @code{string-lessp}.
 @end defun
 
+@defun string-version-lessp string1 string2
+This function compares strings lexicographically, except it treats
+sequences of numerical characters as if they comprised a base-ten
+number, and then compares the numbers.  So @samp{foo2.png} is
+``smaller'' than @samp{foo12.png} according to this predicate, even if
+@samp{12} is lexicographically ``smaller'' than @samp{2}.
+@end defun
+
 @defun string-prefix-p string1 string2 &optional ignore-case
 This function returns non-@code{nil} if @var{string1} is a prefix of
 @var{string2}; i.e., if @var{string2} starts with @var{string1}.  If
index 19782d0fbde805f4feb590226d756cd338c99cfc..f81c1643c21ef4d7a8e4f53dc07348ee05694df9 100644 (file)
@@ -331,10 +331,10 @@ alternative ``c'' comment style.  For a two-character comment
 delimiter, @samp{c} on either character makes it of style ``c''.
 
 @item
-@samp{n} on a comment delimiter character specifies
-that this kind of comment can be nested.  For a two-character
-comment delimiter, @samp{n} on either character makes it
-nestable.
+@samp{n} on a comment delimiter character specifies that this kind of
+comment can be nested.  Inside such a comment, only comments of the
+same style will be recognized.  For a two-character comment delimiter,
+@samp{n} on either character makes it nestable.
 
 @cindex comment style
 Emacs supports several comment styles simultaneously in any one syntax
@@ -791,10 +791,10 @@ Hooks}).
 @subsection Parser State
 @cindex parser state
 
-  A @dfn{parser state} is a list of ten elements describing the state
-of the syntactic parser, after it parses the text between a specified
-starting point and a specified end point in the buffer.  Parsing
-functions such as @code{syntax-ppss}
+  A @dfn{parser state} is a list of (currently) eleven elements
+describing the state of the syntactic parser, after it parses the text
+between a specified starting point and a specified end point in the
+buffer.  Parsing functions such as @code{syntax-ppss}
 @ifnottex
 (@pxref{Position Parse})
 @end ifnottex
@@ -851,15 +851,20 @@ position where the string began.  When outside of strings and comments,
 this element is @code{nil}.
 
 @item
-Internal data for continuing the parsing.  The meaning of this
-data is subject to change; it is used if you pass this list
-as the @var{state} argument to another call.
+The list of the positions of the currently open parentheses, starting
+with the outermost.
+
+@item
+When the last buffer position scanned was the (potential) first
+character of a two character construct (comment delimiter or
+escaped/char-quoted character pair), the @var{syntax-code}
+(@pxref{Syntax Table Internals}) of that position.  Otherwise
+@code{nil}.
 @end enumerate
 
   Elements 1, 2, and 6 are ignored in a state which you pass as an
-argument to continue parsing, and elements 8 and 9 are used only in
-trivial cases.  Those elements are mainly used internally by the
-parser code.
+argument to continue parsing.  Elements 9 and 10 are mainly used
+internally by the parser code.
 
   One additional piece of useful information is available from a
 parser state using this function:
@@ -898,10 +903,11 @@ The depth starts at 0, or at whatever is given in @var{state}.
 
 If the fourth argument @var{stop-before} is non-@code{nil}, parsing
 stops when it comes to any character that starts a sexp.  If
-@var{stop-comment} is non-@code{nil}, parsing stops when it comes to the
-start of a comment.  If @var{stop-comment} is the symbol
-@code{syntax-table}, parsing stops after the start of a comment or a
-string, or the end of a comment or a string, whichever comes first.
+@var{stop-comment} is non-@code{nil}, parsing stops after the start of
+an unnested comment.  If @var{stop-comment} is the symbol
+@code{syntax-table}, parsing stops after the start of an unnested
+comment or a string, or after the end of an unnested comment or a
+string, whichever comes first.
 
 If @var{state} is @code{nil}, @var{start} is assumed to be at the top
 level of parenthesis structure, such as the beginning of a function
index 1ad665f0e5b32648798cfe71258bf77f550fadf6..0b7759347fc270d02fcfb65064a6813a7dce9e86 100644 (file)
@@ -2362,6 +2362,83 @@ already indented, it calls @code{completion-at-point} to complete the
 text at point (@pxref{Completion in Buffers}).
 @end defopt
 
+@cindex literate programming
+@cindex multi-mode indentation
+  Some major modes need to support embedded regions of text whose
+syntax belongs to a different major mode.  Examples include
+@dfn{literate programming} source files that combine documentation and
+snippets of source code, Yacc/Bison programs that include snippets of
+plain C code, etc.  To correctly indent the embedded chunks, the major
+mode needs to delegate the indentation to another mode's indentation
+engine (e.g., call @code{c-indent-defun} for C code or
+@code{python-indent-line} for Python), while providing it with some
+context to guide the indentation.  The following facilities support
+such multi-mode indentation.
+
+@defvar prog-indentation-context
+This variable, when non-@code{nil}, holds the indentation context for
+the sub-mode's indentation engine provided by the superior major mode.
+The value should be a list of the form @code{(@var{first-column}
+@w{(@var{start} . @var{end})} @code{prev-chunk})}.  The members of the
+list have the following meaning:
+
+@table @var
+@item first-column
+The column to be used for top-level constructs.  This replaces the
+default value of the top-level column used by the sub-mode, usually
+zero.
+@item start
+@itemx end
+The region of the code chunk to be indented by the sub-mode.  The
+value of @var{end} can be @code{nil}, which stands for the value of
+@code{point-max}.
+@item prev-chunk
+If this is non-@code{nil}, it should provide the sub-mode's
+indentation engine with a virtual context of the code chunk.  Valid
+values include:
+
+@itemize @minus
+@item
+A string whose contents is the text the sub-mode's indentation engine
+should consider to precede the code chunk.  The sub-mode's indentation
+engine can add text properties to that string, to be reused in
+repeated calls with the same string, thus using it as a cache.  An
+example where this is useful is code chunks that need to be indented
+as function bodies, but lack the function's preamble---the string
+could then include that missing preamble.
+@item
+A function.  It is expected to be called with the start position of
+the current chunk, and should return a cons cell
+@w{@code{(@var{prev-start} . @var{prev-end})}} that specifies the
+region of the previous code chunk, or @code{nil} if there is no previous
+chunk.  This is useful in literate-programming sources, where code is
+split into chunks, and correct indentation needs to access previous
+chunks.
+@end itemize
+@end table
+@end defvar
+
+The following convenience functions should be used by major mode's
+indentation engine in support of invocations as sub-modes of another
+major mode.
+
+@defun prog-first-column
+Call this function instead of using a literal value (usually, zero) of
+the column number for indenting top-level program constructs.  The
+function's value is the column number to use for top-level constructs.
+When no superior mode is in effect, this function returns zero.
+@end defun
+
+@defun prog-widen
+Call this function instead of @code{widen} to remove any restrictions
+imposed by the mode's indentation engine and restore the restrictions
+recorded in @code{prog-indentation-context}.  This prevents the
+indentation engine of a sub-mode from inadvertently operating on text
+outside of the chunk it was supposed to indent, and preserves the
+restriction imposed by the superior mode.  When no superior mode is in
+effect, this function just calls @code{widen}.
+@end defun
+
 
 @node Region Indent
 @subsection Indenting an Entire Region
@@ -2963,6 +3040,11 @@ construct each part with @code{propertize} and then combine them with
 @code{buffer-substring-no-properties}, which copies text from the
 buffer but does not copy its properties.
 
+@findex with-silent-modifications
+  If you wish to add or remove text properties to a buffer without
+marking the buffer as modified, you can wrap the calls above in the
+@code{with-silent-modifications} macro.
+
 @node Property Search
 @subsection Text Property Search Functions
 @cindex searching text properties
@@ -3707,7 +3789,7 @@ properties.  For simplicity, we will refer to the clickable text as a
 
   Implementing a link involves three separate steps: (1) indicating
 clickability when the mouse moves over the link; (2) making @key{RET}
-or @kbd{Mouse-2} on that link do something; and (3) setting up a
+or @kbd{mouse-2} on that link do something; and (3) setting up a
 @code{follow-link} condition so that the link obeys
 @code{mouse-1-click-follows-link}.
 
@@ -3729,10 +3811,10 @@ names are clickable:
          help-echo "mouse-2: visit this file in other window")))
 @end smallexample
 
-  To make the link clickable, bind @key{RET} and @kbd{Mouse-2} to
+  To make the link clickable, bind @key{RET} and @kbd{mouse-2} to
 commands that perform the desired action.  Each command should check
 to see whether it was called on a link, and act accordingly.  For
-instance, Dired's major mode keymap binds @kbd{Mouse-2} to the
+instance, Dired's major mode keymap binds @kbd{mouse-2} to the
 following command:
 
 @smallexample
@@ -3775,12 +3857,12 @@ bind it within the link text, using the @code{keymap} text property
 @noindent
 With this method, you can easily define different commands for
 different links.  Furthermore, the global definition of @key{RET} and
-@kbd{Mouse-2} remain available for the rest of the text in the buffer.
+@kbd{mouse-2} remain available for the rest of the text in the buffer.
 
 @vindex mouse-1-click-follows-link
-  The basic Emacs command for clicking on links is @kbd{Mouse-2}.
+  The basic Emacs command for clicking on links is @kbd{mouse-2}.
 However, for compatibility with other graphical applications, Emacs
-also recognizes @kbd{Mouse-1} clicks on links, provided the user
+also recognizes @kbd{mouse-1} clicks on links, provided the user
 clicks on the link quickly without moving the mouse.  This behavior is
 controlled by the user option @code{mouse-1-click-follows-link}.
 @xref{Mouse References,,, emacs, The GNU Emacs Manual}.
@@ -3794,9 +3876,9 @@ mode keymap or a local keymap specified via the @code{keymap} text
 property).  The value of the @code{follow-link} property, or the
 binding for the @code{follow-link} event, acts as a condition for
 the link action.  This condition tells Emacs two things: the
-circumstances under which a @kbd{Mouse-1} click should be regarded as
+circumstances under which a @kbd{mouse-1} click should be regarded as
 occurring inside the link, and how to compute an action code
-that says what to translate the @kbd{Mouse-1} click into.  The link
+that says what to translate the @kbd{mouse-1} click into.  The link
 action condition can be one of the following:
 
 @table @asis
@@ -3805,7 +3887,7 @@ If the condition is the symbol @code{mouse-face}, a position is inside
 a link if there is a non-@code{nil} @code{mouse-face} property at that
 position.  The action code is always @code{t}.
 
-For example, here is how Info mode handles @key{Mouse-1}:
+For example, here is how Info mode handles @key{mouse-1}:
 
 @smallexample
 (define-key Info-mode-map [follow-link] 'mouse-face)
@@ -3817,7 +3899,7 @@ is inside a link if @code{(@var{func} @var{pos})} evaluates to
 non-@code{nil}.  The value returned by @var{func} serves as the action
 code.
 
-For example, here is how pcvs enables @kbd{Mouse-1} to follow links on
+For example, here is how pcvs enables @kbd{mouse-1} to follow links on
 file names only:
 
 @smallexample
@@ -3835,27 +3917,27 @@ to the entire buffer).
 @end table
 
 @noindent
-The action code tells @kbd{Mouse-1} how to follow the link:
+The action code tells @kbd{mouse-1} how to follow the link:
 
 @table @asis
 @item a string or vector
-If the action code is a string or vector, the @kbd{Mouse-1} event is
+If the action code is a string or vector, the @kbd{mouse-1} event is
 translated into the first element of the string or vector; i.e., the
-action of the @kbd{Mouse-1} click is the local or global binding of
+action of the @kbd{mouse-1} click is the local or global binding of
 that character or symbol.  Thus, if the action code is @code{"foo"},
-@kbd{Mouse-1} translates into @kbd{f}.  If it is @code{[foo]},
-@kbd{Mouse-1} translates into @key{foo}.
+@kbd{mouse-1} translates into @kbd{f}.  If it is @code{[foo]},
+@kbd{mouse-1} translates into @key{foo}.
 
 @item anything else
-For any other non-@code{nil} action code, the @kbd{Mouse-1} event is
-translated into a @kbd{Mouse-2} event at the same position.
+For any other non-@code{nil} action code, the @kbd{mouse-1} event is
+translated into a @kbd{mouse-2} event at the same position.
 @end table
 
-  To define @kbd{Mouse-1} to activate a button defined with
+  To define @kbd{mouse-1} to activate a button defined with
 @code{define-button-type}, give the button a @code{follow-link}
 property.  The property value should be a link action condition, as
 described above.  @xref{Buttons}.  For example, here is how Help mode
-handles @kbd{Mouse-1}:
+handles @kbd{mouse-1}:
 
 @smallexample
 (define-button-type 'help-xref
@@ -3863,11 +3945,11 @@ handles @kbd{Mouse-1}:
   'action #'help-button-action)
 @end smallexample
 
-  To define @kbd{Mouse-1} on a widget defined with
+  To define @kbd{mouse-1} on a widget defined with
 @code{define-widget}, give the widget a @code{:follow-link} property.
 The property value should be a link action condition, as described
 above.  For example, here is how the @code{link} widget specifies that
-a @key{Mouse-1} click shall be translated to @key{RET}:
+a @key{mouse-1} click shall be translated to @key{RET}:
 
 @smallexample
 (define-widget 'link 'item
@@ -4387,6 +4469,20 @@ using the specified or chosen coding system.  However, if
 coding instead.
 @end defun
 
+@defun buffer-hash &optional buffer-or-name
+Return a hash of @var{buffer-or-name}.  If @code{nil}, this defaults
+to the current buffer.  As opposed to @code{secure-hash}, this
+function computes the hash based on the internal representation of the
+buffer, disregarding any coding systems.  It's therefore only useful
+when comparing two buffers running in the same Emacs, and is not
+guaranteed to return the same hash between different Emacs versions.
+It should be somewhat more efficient on larger buffers than
+@code{secure-hash} is, and should not allocate more memory.
+@c Note that we do not document what hashing function we're using, or
+@c even whether it's a cryptographic hash, since that may change
+@c according to what we find useful.
+@end defun
+
 @node Parsing HTML/XML
 @section Parsing HTML and XML
 @cindex parsing html
index 0a3d244157eb22fcd6b8e30bbd5a10987c9e083f..d12de7aee2d7ad260804faa888a76c0add05feda 100644 (file)
@@ -200,12 +200,12 @@ It is likewise a bad idea for one Lisp package to advise a function in
 another Lisp package (@pxref{Advising Functions}).
 
 @item
-Avoid using @code{eval-after-load} in libraries and packages
-(@pxref{Hooks for Loading}).  This feature is meant for personal
-customizations; using it in a Lisp program is unclean, because it
-modifies the behavior of another Lisp file in a way that's not visible
-in that file.  This is an obstacle for debugging, much like advising a
-function in the other package.
+Avoid using @code{eval-after-load} and @code{with-eval-after-load} in
+libraries and packages (@pxref{Hooks for Loading}).  This feature is
+meant for personal customizations; using it in a Lisp program is
+unclean, because it modifies the behavior of another Lisp file in a
+way that's not visible in that file.  This is an obstacle for
+debugging, much like advising a function in the other package.
 
 @item
 If a file does replace any of the standard functions or library
index 0665eb9098db6e9966a18fa7585948fae0dd6854..9a09b35371d9b10994419309a2e64742bf9e5aba 100644 (file)
@@ -545,6 +545,12 @@ its pixel height is the pixel height of the screen areas spanned by its
 children.
 @end defun
 
+@defun window-pixel-height-before-size-change &optional Lisp_Object &optional window
+This function returns the height of window @var{window} in pixels at the
+time @code{window-size-change-functions} was run for the last time on
+@var{window}'s frame (@pxref{Window Hooks}).
+@end defun
+
 @cindex window pixel width
 @cindex pixel width of a window
 @cindex total pixel width of a window
@@ -559,6 +565,12 @@ If @var{window} is an internal window, its pixel width is the width of
 the screen areas spanned by its children.
 @end defun
 
+@defun window-pixel-width-before-size-change &optional Lisp_Object &optional window
+This function returns the width of window @var{window} in pixels at the
+time @code{window-size-change-functions} was run for the last time on
+@var{window}'s frame (@pxref{Window Hooks}).
+@end defun
+
 @cindex full-width window
 @cindex full-height window
   The following functions can be used to determine whether a given
@@ -2259,7 +2271,7 @@ display in.  These steps are described by means of @dfn{display
 actions}, which have the form @code{(@var{function} . @var{alist})}.
 Here, @var{function} is either a function or a list of functions,
 which we refer to as @dfn{action functions}; @var{alist} is an
-association list, which we refer to as @dfn{action alists}.
+association list, which we refer to as an @dfn{action alist}.
 
   An action function accepts two arguments: the buffer to display and
 an action alist.  It attempts to display the buffer in some window,
@@ -2403,6 +2415,23 @@ visible and, unless @var{alist} contains an @code{inhibit-switch-frame}
 entry (@pxref{Choosing Window Options}), raises that frame if necessary.
 @end defun
 
+@defun display-buffer-reuse-mode-window buffer alist
+This function tries to display @var{buffer} by finding a window
+that is displaying a buffer in a given mode.
+
+If @var{alist} contains a @code{mode} entry, its value is a major mode
+(a symbol) or a list of major modes.  If @var{alist} contains no
+@code{mode} entry, the current major mode of @var{buffer} is used.  A
+window is a candidate if it displays a buffer that derives from one of
+the given modes.
+
+The behaviour is also controlled by entries for
+@code{inhibit-same-window}, @code{reusable-frames} and
+@code{inhibit-switch-frame} as is done in the function
+@code{display-buffer-reuse-window}.
+
+@end defun
+
 @defun display-buffer-pop-up-frame buffer alist
 This function creates a new frame, and displays the buffer in that
 frame's window.  It actually performs the frame creation by calling
@@ -4093,11 +4122,11 @@ was created for.
 The argument @var{configuration} must be a value that was previously
 returned by @code{current-window-configuration}.  The configuration is
 restored in the frame from which @var{configuration} was made, whether
-that frame is selected or not.  This always counts as a window size
-change and triggers execution of the @code{window-size-change-functions}
-(@pxref{Window Hooks}), because @code{set-window-configuration} doesn't
-know how to tell whether the new configuration actually differs from the
-old one.
+that frame is selected or not.  In some rare cases this may trigger
+execution of the @code{window-size-change-functions} (@pxref{Window
+Hooks}) even if the size of windows did not change at all.  The
+@code{window-configuration-change-hook} functions will be called if and
+only if at least one window was added to or deleted from the frame.
 
 If the frame from which @var{configuration} was saved is dead, all this
 function does is restore the three variables @code{window-min-height},
@@ -4384,33 +4413,38 @@ work.
 @end defvar
 
 @defvar window-size-change-functions
-This variable holds a list of functions to be called if the size of
-any window changes for any reason.  The functions are called at the
-beginning of a redisplay cycle, and just once for each frame on which
-size changes have occurred.
-
-Each function receives the frame as its sole argument.  There is no
-direct way to find out which windows on that frame have changed size, or
-precisely how.  However, if a size-change function records, at each
-call, the existing windows and their sizes, it can also compare the
-present sizes and the previous sizes.
-
-Creating or deleting windows counts as a size change, and therefore
-causes these functions to be called.  Changing the frame size also
-counts, because it changes the sizes of the existing windows.
+This variable holds a list of functions to be called if the size of any
+window changes for any reason.  The functions are called once per
+redisplay, and once for each frame on which size changes have occurred.
+
+Each function receives the frame as its sole argument.  To find out
+whether a specific window has changed size, compare the return values of
+@code{window-pixel-width-before-size-change} and
+@code{window-pixel-width} respectively
+@code{window-pixel-height-before-size-change} and
+@code{window-pixel-height} for that window (@pxref{Window Sizes}).
+
+These function are usually only called when at least one window was
+added or has changed size since the last time this hook was run for the
+associated frame.  In some rare cases this hook also runs when a window
+that was added intermittently has been deleted afterwards.  In these
+cases none of the windows on the frame will appear to have changed its
+size.
 
 You may use @code{save-selected-window} in these functions
 (@pxref{Selecting Windows}).  However, do not use
 @code{save-window-excursion} (@pxref{Window Configurations}); exiting
-that macro counts as a size change, which would cause these functions
-to be called over and over.
+that macro counts as a size change, which would cause these functions to
+be called again.
 @end defvar
 
 @defvar window-configuration-change-hook
-A normal hook that is run every time you change the window configuration
-of an existing frame.  This includes splitting or deleting windows,
-changing the sizes of windows, or displaying a different buffer in a
-window.
+A normal hook that is run every time the window configuration of a frame
+changes.  Window configuration changes include splitting and deleting
+windows and the display of a different buffer in a window.  Resizing the
+frame or individual windows do not count as configuration changes.  Use
+@code{window-size-change-functions}, see above, when you want to track
+size changes that are not caused by the deletion or creation of windows.
 
 The buffer-local part of this hook is run once for each window on the
 affected frame, with the relevant window selected and its buffer
index 4dffeafb1d26dd63d2f563be303cddd60d83dc6c..eca74a0c6451ac55a67a85cf563f4c5108cd9b7f 100644 (file)
@@ -218,7 +218,6 @@ gnus.pdf: $(gnus_deps)
        cp gnustmppdf.pdf $@
        rm gnustmppdf.*
 
-${buildinfodir}/tramp.info tramp.html: EXTRA_OPTS = -D emacs
 ${buildinfodir}/tramp.info tramp.html: ${srcdir}/trampver.texi
 
 
index 459369ed9c4610c0432b13bf7635d8d87ad4bca7..70146b2eb57eee1c4b7766362f218f44c6bb12d5 100644 (file)
@@ -338,14 +338,15 @@ Line-Up Functions
 * Comment Line-Up::
 * Misc Line-Up::
 
+
 Customizing Macros
 
 * Macro Backslashes::
 * Macros with ;::
+* Noise Macros::
 
 @end detailmenu
 @end menu
-
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 @node    Introduction, Overview, Top, Top
 @comment node-name, next, previous, up
@@ -6654,15 +6655,18 @@ Because a macro can expand into anything at all, near where one is
 invoked @ccmode{} can only indent and fontify code heuristically.
 Sometimes it gets it wrong.  Usually you should try to design your
 macros so that they ''look like ordinary code'' when you invoke them.
-However, one situation is so common that @ccmode{} handles it
+However, two situations are so common that @ccmode{} handles them
 specially: that is when certain macros needn't (or mustn't) be
-followed by a @samp{;}.  You need to configure @ccmode{} to handle
-these macros properly, see @ref{Macros with ;}.
+followed by a @samp{;}, and when certain macros (or compiler
+directives) expand to nothing.  You need to configure @ccmode{} to
+handle these macros properly, see @ref{Macros with ;} and @ref{Noise
+Macros}.
 
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 @menu
 * Macro Backslashes::
 * Macros with ;::
+* Noise Macros::
 @end menu
 
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -6714,7 +6718,7 @@ get aligned only when you explicitly invoke the command
 @end defopt
 
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-@node Macros with ;,  , Macro Backslashes, Custom Macros
+@node Macros with ;, Noise Macros, Macro Backslashes, Custom Macros
 @comment  node-name,  next,  previous,  up
 @section Macros with semicolons
 @cindex macros with semicolons
@@ -6769,6 +6773,60 @@ return value has no meaning.  This function is called by @ccmode{}'s
 initialization code.
 @end defun
 
+@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+@node    Noise Macros,  , Macros with ;, Custom Macros
+@comment node-name, next, previous, up
+@section Noise Macros
+@cindex noise macros
+@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+In @ccmode{}, @dfn{noise macros} are macros which expand to nothing,
+or compiler directives (such as GCC's @code{__attribute__}) which play
+no part in the syntax of the C (etc.) language.  Some noise macros are
+followed by arguments in parentheses (possibly optionally), others
+are not.
+
+Noise macros can easily confuse @ccmode{}'s analysis of function
+headers, causing them to be mis-fontified, or even mis-indented.  You
+can prevent this confusion by specifying the identifiers which
+constitute noise macros.
+
+@defopt c-noise-macro-names
+@vindex noise-macro-names (c-)
+This variable is a list of names of noise macros which never have
+parenthesized arguments.  Each element is a string, and must be a
+valid identifier.  An element in @code{c-noise-macro-names} must not
+also be in @code{c-noise-macro-with-parens-names}.  Such an element is
+treated as whitespace by @ccmode{}.
+@end defopt
+
+@defopt c-noise-macro-with-parens-names
+@vindex noise-macro-with-parens-names (c-)
+This variable is a list of names of noise macros which optionally have
+arguments in parentheses.  Each element of the list is a string, and
+must be a valid identifier.  An element in
+@code{c-noise-macro-with-parens-names} must not also be in
+@code{c-noise-macro-names}.  For performance reasons, such an element,
+together with the optional parenthesized arguments, is specially
+handled, but it is only handled when used in declaration
+contexts@footnote{If this restriction causes your project
+difficulties, please get in touch with @email{bug-cc-mode@@gnu.org}.}.
+
+The two compiler directives @code{__attribute__} and @code{__declspec}
+have traditionally been handled specially in @ccmode{}; for example
+they are fontified with font-lock-keyword-face.  You don't need to
+include these directives in @code{c-noise-macro-with-parens-names},
+but doing so is OK.
+@end defopt
+
+@defun c-make-noise-macro-regexps
+@findex make-noise-macro-regexps (c-)
+Call this (non-interactive) function, which sets internal variables,
+after changing the value of @code{c-noise-macro-names} or
+@code{c-noise-macro-with-parens-names} (e.g. in a hook (@pxref{CC
+Hooks})).  This function is called by @ccmode{}'s initialization code.
+@end defun
+
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 @node    Odds and Ends, Sample Init File, Custom Macros, Top
 @comment node-name, next, previous, up
index 572124d452d09fcde04118a601b0ddac95e951da..4137a95b3b2b1d280bdddd57533a5d5c75d41dfa 100644 (file)
@@ -4501,8 +4501,9 @@ referenced by @code{cl-return} or @code{cl-return-from} inside the block.
 @appendix Common Lisp Compatibility
 
 @noindent
-The following is a list of all known incompatibilities between this
-package and Common Lisp as documented in Steele (2nd edition).
+The following is a list of some of the most important
+incompatibilities between this package and Common Lisp as documented
+in Steele (2nd edition).
 
 The word @code{cl-defun} is required instead of @code{defun} in order
 to use extended Common Lisp argument lists in a function.  Likewise,
index 28fa42b33ef687010f5d1556559879eeef240465..816cb5625553ffb171f6a35a586e4ec5f1b00126 100644 (file)
@@ -421,9 +421,9 @@ regions in the buffer.  Please notice the help strings in the echo area
 when the mouse moves over a sensitive region.
 
 @cindex context menu
-A click with @kbd{Mouse-3} on a mouse-sensitive region opens a context
+A click with @kbd{mouse-3} on a mouse-sensitive region opens a context
 menu.  In addition to this, each buffer also has a buffer-specific menu
-that is opened with a click with @kbd{Mouse-3} somewhere in the buffer
+that is opened with a click with @kbd{mouse-3} somewhere in the buffer
 where no highlight is displayed.
 
 
@@ -488,7 +488,7 @@ editing.
 @end table
 
 The same functionality is available from the menu opened with
-@kbd{Mouse-3} on the class name.
+@kbd{mouse-3} on the class name.
 
 
 
@@ -551,7 +551,7 @@ Display a list of types.
 @end table
 
 These lists are also available from the class' context menu invoked with
-@kbd{Mouse-3} on the class name.
+@kbd{mouse-3} on the class name.
 
 
 
@@ -898,7 +898,7 @@ You can install a hook function to perform actions after a member or
 class declaration or definition has been found, or when it is not found.
 
 All the commands described above can also be found in the context menu
-displayed when clicking @kbd{Mouse-2} on a member name.
+displayed when clicking @kbd{mouse-2} on a member name.
 
 
 
index 1fa4649208044e78712bfa9b0d579c8480afbe0d..fd4fd4f37984e583b2aea187fbd0699b2164098e 100644 (file)
@@ -2408,7 +2408,7 @@ error messages, inserts them into a special buffer called
 the source.  Type @kbd{C-x `} to step through the offending lines one by
 one (starting with Emacs 22, you can also use @kbd{M-g M-p} and
 @kbd{M-g M-n} to go to the previous and next matches directly).  Click
-@kbd{Mouse-2} or press @key{RET} on a message text in the
+@kbd{mouse-2} or press @key{RET} on a message text in the
 @file{*compilation*} buffer to go to the line whose number is mentioned
 in that message.
 
@@ -3888,7 +3888,7 @@ is how to make @kbd{H-M-RIGHT} move forward a word:
 Not all modifiers are permitted in all situations.  @key{Hyper},
 @key{Super}, and @key{Alt} are not available on Unix character
 terminals.  Non-@acronym{ASCII} keys and mouse events (e.g., @kbd{C-=} and
-@kbd{Mouse-1}) also fall under this category.
+@kbd{mouse-1}) also fall under this category.
 
 @end itemize
 
index 1a850c6823500876f80fed4898c6f8a70ab063a6..9d52508b6441ffc7d1bfca069422f2090c0f8e27 100644 (file)
@@ -173,7 +173,7 @@ Just use @code{open-protocol-stream} or @code{open-network-stream}
 You should not have to use the @file{gnutls.el} functions directly.
 But you can test them with @code{open-gnutls-stream}.
 
-@defun open-gnutls-stream name buffer host service
+@defun open-gnutls-stream name buffer host service &optional nowait
 This function creates a buffer connected to a specific @var{host} and
 @var{service} (port number or service name).  The parameters and their
 syntax are the same as those given to @code{open-network-stream}
@@ -181,6 +181,10 @@ syntax are the same as those given to @code{open-network-stream}
 Manual}).  The connection process is called @var{name} (made unique if
 necessary).  This function returns the connection process.
 
+The @var{nowait} parameter means that the socket should be
+asynchronous, and the connection process will be returned to the
+caller before TLS negotiation has happened.
+
 @lisp
 ;; open a HTTPS connection
 (open-gnutls-stream "tls" "tls-buffer" "yourserver.com" "https")
@@ -191,6 +195,12 @@ necessary).  This function returns the connection process.
 
 @end defun
 
+@findex gnutls-asynchronous-parameters
+If called with @var{nowait}, the process is returned immediately
+(before connecting to the server).  In that case, the process object
+is told what parameters to use when negotiating the connection
+by using the @code{gnutls-asynchronous-parameters} function.
+
 The function @code{gnutls-negotiate} is not generally useful and it
 may change as needed, so please see @file{gnutls.el} for the details.
 
index c9c4b7c2a2fa3c37ae1f5841cfd8dd82a95e359d..2b3bba39ad985698644d8c623a14446b8a1f2983 100644 (file)
@@ -1826,6 +1826,11 @@ matching types.
 @vindex mailcap-mime-data
 This variable is an alist of alists containing backup viewing rules.
 
+@item mailcap-user-mime-data
+@vindex mailcap-user-mime-data
+A customizable list of viewers that take preference over
+@code{mailcap-mime-data}.
+
 @end table
 
 Interface functions:
index da63975c2e5e0689e5daab47188067f4f1f7b492..53f1beb1a0c0254a150de44064f4cc991f02c603 100644 (file)
@@ -177,12 +177,10 @@ initialization file to add a shortcut for email address expansion in
 email composition buffers (@pxref{Inline Query Expansion})
 
 @lisp
-(eval-after-load
- "message"
- '(define-key message-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
-(eval-after-load
- "sendmail"
- '(define-key mail-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
+(with-eval-after-load "message"
+  (define-key message-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
+(with-eval-after-load "sendmail"
+  (define-key mail-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
 @end lisp
 
 @menu
@@ -271,8 +269,8 @@ LDAP:
 @vindex eudc-server-hotlist
 @vindex ldap-host-parameters-alist
 @lisp
-(eval-after-load "message"
-  '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
+(with-eval-after-load "message"
+  (define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
 (customize-set-variable 'eudc-server-hotlist
                         '(("" . bbdb)
                           ("ldaps://ldap.gnu.org" . ldap)))
@@ -327,8 +325,8 @@ configure EUDC for LDAP:
 @vindex eudc-server-hotlist
 @vindex ldap-host-parameters-alist
 @lisp
-(eval-after-load "message"
-  '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
+(with-eval-after-load "message"
+  (define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
 (customize-set-variable 'eudc-server-hotlist
                         '(("" . bbdb)
                           ("ldaps://ldap.gnu.org" . ldap)))
@@ -356,8 +354,8 @@ and the @file{.emacs} expressions become:
 @vindex eudc-server-hotlist
 @vindex ldap-host-parameters-alist
 @lisp
-(eval-after-load "message"
-  '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
+(with-eval-after-load "message"
+  (define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
 (customize-set-variable 'eudc-server-hotlist
                         '(("" . bbdb) ("" . ldap)))
 (customize-set-variable 'ldap-host-parameters-alist
index 795556b922bc9e47eedbe5c8f0debdacecdeb35e..f15e2f2518ee434d977c1bf2eef6a266a161a521 100644 (file)
@@ -109,6 +109,12 @@ only display this part.  This usually gets rid of menus and the like.
   The @kbd{F} command (@code{eww-toggle-fonts}) toggles whether to use
 variable-pitch fonts or not.  This sets the @code{shr-use-fonts} variable.
 
+@findex eww-toggle-colors
+@findex shr-use-colors
+@kindex F
+  The @kbd{C} command (@code{eww-toggle-colors}) toggles whether to use
+HTML-specified colors or not.  This sets the @code{shr-use-colors} variable.
+
 @findex eww-download
 @vindex eww-download-directory
 @kindex d
@@ -158,12 +164,16 @@ You can view stored bookmarks with @kbd{B}
 (@code{eww-list-bookmarks}).  This will open the bookmark buffer
 @file{*eww bookmarks*}.
 
+@findex eww-switch-to-buffer
 @findex eww-list-buffers
+@kindex s
 @kindex S
 @cindex Multiple Buffers
   To get summary of currently opened EWW buffers, press @kbd{S}
 (@code{eww-list-buffers}).  The @file{*eww buffers*} buffer allows you
-to quickly kill, flip through and switch to specific EWW buffer.
+to quickly kill, flip through and switch to specific EWW buffer.  To
+switch EWW buffers through a minibuffer prompt, press @kbd{s}
+(@code{eww-switch-to-buffer}).
 
 @findex eww-browse-with-external-browser
 @vindex shr-external-browser
index 90bb10f6c35675c934216a942c369dffe02480db..5a49f4ac325724ad1cd2b4d006c7e310f7ae7339 100644 (file)
@@ -584,10 +584,10 @@ Now we need to tell Gnus, where to get its mail from. If
 it's a POP3 server, then you need something like this:
 
 @example
-(eval-after-load "mail-source"
-  '(add-to-list 'mail-sources '(pop :server "pop.YourProvider.net"
-                                    :user "yourUserName"
-                                    :password "yourPassword")))
+(with-eval-after-load "mail-source"
+  (add-to-list 'mail-sources '(pop :server "pop.YourProvider.net"
+                                   :user "yourUserName"
+                                   :password "yourPassword")))
 @end example
 @noindent
 
@@ -596,8 +596,8 @@ your password there. If you want to read your mail from a
 traditional spool file on your local machine, it's
 
 @example
-(eval-after-load "mail-source"
-  '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))
+(with-eval-after-load "mail-source"
+  (add-to-list 'mail-sources '(file :path "/path/to/spool/file"))
 @end example
 @noindent
 
@@ -605,9 +605,9 @@ If it's a Maildir, with one file per message as used by
 postfix, Qmail and (optionally) fetchmail it's
 
 @example
-(eval-after-load "mail-source"
-  '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/"
-                                        :subdirs ("cur" "new")))
+(with-eval-after-load "mail-source"
+  (add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/"
+                                       :subdirs ("cur" "new")))
 @end example
 @noindent
 
@@ -616,10 +616,10 @@ in one directory, for example because procmail already split your
 mail, it's
 
 @example
-(eval-after-load "mail-source"
-  '(add-to-list 'mail-sources
-                '(directory :path "/path/to/procmail-dir/"
-                            :suffix ".prcml")))
+(with-eval-after-load "mail-source"
+  (add-to-list 'mail-sources
+               '(directory :path "/path/to/procmail-dir/"
+                           :suffix ".prcml")))
 @end example
 @noindent
 
@@ -850,10 +850,9 @@ text part if it's available. How to do it?
 Say
 
 @example
-(eval-after-load "mm-decode"
- '(progn
-      (add-to-list 'mm-discouraged-alternatives "text/html")
-      (add-to-list 'mm-discouraged-alternatives "text/richtext")))
+(with-eval-after-load "mm-decode"
+  (add-to-list 'mm-discouraged-alternatives "text/html")
+  (add-to-list 'mm-discouraged-alternatives "text/richtext"))
 @end example
 @noindent
 
@@ -1577,14 +1576,14 @@ if you already use Gnus 5.10, if you still use 5.8.8 or
 5.9 try this instead:
 
 @example
-(eval-after-load "gnus-msg"
-  '(unless (boundp 'gnus-confirm-mail-reply-to-news)
-     (defadvice gnus-summary-reply (around reply-in-news activate)
-       "Request confirmation when replying to news."
-       (interactive)
-       (when (or (not (gnus-news-group-p gnus-newsgroup-name))
-                 (y-or-n-p "Really reply by mail to article author? "))
-         ad-do-it))))
+(with-eval-after-load "gnus-msg"
+  (unless (boundp 'gnus-confirm-mail-reply-to-news)
+    (defadvice gnus-summary-reply (around reply-in-news activate)
+      "Request confirmation when replying to news."
+      (interactive)
+      (when (or (not (gnus-news-group-p gnus-newsgroup-name))
+                (y-or-n-p "Really reply by mail to article author? "))
+        ad-do-it))))
 @end example
 @noindent
 
@@ -1599,8 +1598,8 @@ Since 5.10 Gnus doesn't generate a sender header by
 default. For older Gnus' try this in @file{~/.gnus.el}:
 
 @example
-(eval-after-load "message"
-      '(add-to-list 'message-syntax-checks '(sender . disabled)))
+(with-eval-after-load "message"
+  (add-to-list 'message-syntax-checks '(sender . disabled)))
 @end example
 @noindent
 
@@ -1665,14 +1664,14 @@ in @file{~/.gnus.el}.  If you use Gnus 5.9 or earlier, you can use this
 instead (works for newer versions as well):
 
 @example
-(eval-after-load "message"
-  '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this!
-     (if (boundp 'message-user-fqdn)
-         (setq message-user-fqdn fqdn)
-       (gnus-message 1 "Redefining `message-make-fqdn'.")
-       (defun message-make-fqdn ()
-         "Return user's fully qualified domain name."
-         fqdn))))
+(with-eval-after-load "message"
+  (let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this!
+    (if (boundp 'message-user-fqdn)
+        (setq message-user-fqdn fqdn)
+      (gnus-message 1 "Redefining `message-make-fqdn'.")
+      (defun message-make-fqdn ()
+        "Return user's fully qualified domain name."
+        fqdn))))
 @end example
 @noindent
 
@@ -2195,7 +2194,7 @@ An other idea would be to byte compile your @file{~/.gnus.el} (say
 @samp{M-x byte-compile-file RET ~/.gnus.el
 RET} to do it). Finally, if you have require
 statements in your .gnus, you could replace them with
-eval-after-load, which loads the stuff not at startup
+@code{with-eval-after-load}, which loads the stuff not at startup
 time, but when it's needed. Say you've got this in your
 @file{~/.gnus.el}:
 
@@ -2209,8 +2208,8 @@ then as soon as you start Gnus, message.el is loaded. If
 you replace it with
 
 @example
-(eval-after-load "message"
-      '(add-to-list 'message-syntax-checks '(sender . disabled)))
+(with-eval-after-load "message"
+  (add-to-list 'message-syntax-checks '(sender . disabled)))
 @end example
 @noindent
 
index 2ae2e18ed00d29a6b0a648851274027d1d8b5300..df673fc099ff13c6baebad29371fca75720f4636 100644 (file)
@@ -5042,11 +5042,12 @@ access the @code{X-Newsreader} header:
 
 @item
 @vindex gnus-ignored-from-addresses
-The @code{gnus-ignored-from-addresses} variable says when the @samp{%f}
-summary line spec returns the @code{To}, @code{Newsreader} or
-@code{From} header.  If this regexp matches the contents of the
-@code{From} header, the value of the @code{To} or @code{Newsreader}
-headers are used instead.
+The @code{gnus-ignored-from-addresses} variable says when the
+@samp{%f} summary line spec returns the @code{To}, @code{Newsreader}
+or @code{From} header.  The variable may be a regexp or a predicate
+function.  If this matches the contents of the @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
@@ -17147,9 +17148,9 @@ summary buffer.
           (gnus-summary-mark-as-read-forward 1))
       (gnus-summary-scroll-up arg))))
 
-(eval-after-load "gnus"
-  #'(define-key gnus-summary-mode-map
-      (kbd "<RET>") 'browse-nnrss-url))
+(with-eval-after-load "gnus"
+  (define-key gnus-summary-mode-map
+    (kbd "<RET>") 'browse-nnrss-url))
 (add-to-list 'nnmail-extra-headers nnrss-url-field)
 @end lisp
 
@@ -17165,11 +17166,11 @@ Parameters}) in order to display @samp{text/html} parts only in
 
 @lisp
 ;; @r{Set the default value of @code{mm-discouraged-alternatives}.}
-(eval-after-load "gnus-sum"
-  '(add-to-list
-    'gnus-newsgroup-variables
-    '(mm-discouraged-alternatives
-      . '("text/html" "image/.*"))))
+(with-eval-after-load "gnus-sum"
+  (add-to-list
+   'gnus-newsgroup-variables
+   '(mm-discouraged-alternatives
+     . '("text/html" "image/.*"))))
 
 ;; @r{Display @samp{text/html} parts in @code{nnrss} groups.}
 (add-to-list
index 64b1585c5cec58c06b3ecbd9d056bdceb4deb50b..26c81d65948d5b544e3079ce88781d3ef0760adc 100644 (file)
@@ -1281,7 +1281,7 @@ the routine documentation header and/or routine source.
 @kindex M-?
 In any IDL program (or, as with most IDLWAVE commands, in the IDL
 Shell), press @kbd{M-?} (@code{idlwave-context-help}), or click with
-@kbd{S-Mouse-3} to access context sensitive online help.  The following
+@kbd{S-mouse-3} to access context sensitive online help.  The following
 locations are recognized context for help:
 
 @cindex Context, for online help
@@ -1327,11 +1327,11 @@ which online help can be accessed.
 @itemize @bullet
 @item
 Online help for routines and keywords can be accessed through the
-Routine Info display.  Click with @kbd{Mouse-3} on an item to see the
+Routine Info display.  Click with @kbd{mouse-3} on an item to see the
 corresponding help (@pxref{Routine Info}).
 @item
 When using completion and Emacs pops up a @file{*Completions*} buffer
-with possible completions, clicking with @kbd{Mouse-3} on a completion
+with possible completions, clicking with @kbd{mouse-3} on a completion
 item invokes help on that item (@pxref{Completion}).  Items for which
 help is available in the online system documentation (vs. just the
 program source itself) will be emphasized (e.g., colored blue).
@@ -1577,7 +1577,7 @@ search for a procedure matching a regexp.
 If the list of completions is too long to fit in the
 @file{*Completions*} window, the window can be scrolled by pressing
 @kbd{M-@key{TAB}} repeatedly.  Online help (if installed) for each
-possible completion is available by clicking with @kbd{Mouse-3} on the
+possible completion is available by clicking with @kbd{mouse-3} on the
 item.  Items for which system online help (from the IDL manual) is
 available will be emphasized (e.g., colored blue).  For other items, the
 corresponding source code or DocLib header will be used as the help
@@ -2811,7 +2811,7 @@ you add or remove some on the command line) using @kbd{C-c C-d C-l}.
 
 In recent IDLWAVE versions, the breakpoint line is highlighted when the
 mouse is moved over it, and a tooltip pops up describing the break
-details.  @kbd{Mouse-3} on the breakpoint line pops up a menu of
+details.  @kbd{mouse-3} on the breakpoint line pops up a menu of
 breakpoint actions, including clearing, disabling, and adding or
 changing break conditions or ``after'' break count.
 
@@ -3151,7 +3151,7 @@ print, only an initial portion of long arrays will be printed, up to
 
 For added speed and convenience, there are mouse bindings which allow
 you to click on expressions and examine their values.  Use
-@kbd{S-Mouse-2} to print an expression and @kbd{C-M-Mouse-2} to invoke
+@kbd{S-mouse-2} to print an expression and @kbd{C-M-mouse-2} to invoke
 help (i.e., you need to hold down @key{META} and @key{CONTROL} while
 clicking with the middle mouse button).  If you simply click, the
 nearest expression will be selected in the same manner as described
@@ -3219,7 +3219,7 @@ mouse examine command, and two macros for generating your own examine
 key and mouse bindings.
 
 The most powerful and flexible mouse examine command of all is
-available on @kbd{C-S-Mouse-2}.  Just as for all the other mouse
+available on @kbd{C-S-mouse-2}.  Just as for all the other mouse
 examine commands, it permits click or drag expression selection, but
 instead of sending hard-coded commands to the shell, it pops-up a
 customizable selection list of examine functions to choose among,
index 135c443c075d4abedb9ed87da419d106df6fd96e..0a8100fec466790129e754f88df753bede45c2c9 100644 (file)
@@ -671,7 +671,7 @@ the @key{Shift} key and then press @key{TAB}).
 that subtopic's node.
 
 @cindex mouse support in Info mode
-@kindex Mouse-2 @r{(Info mode)}
+@kindex mouse-2 @r{(Info mode)}
   If your terminal supports a mouse, you have yet another way of going
 to a subtopic.  Move your mouse pointer to the subtopic line,
 somewhere between the beginning @samp{*} and the colon @samp{:} which
@@ -679,22 +679,22 @@ ends the subtopic's brief name.  You will see the subtopic's name
 change its appearance (usually, its background color will change), and
 the shape of the mouse pointer will change if your platform supports
 that.  After a while, if you leave the mouse on that spot, a small
-window will pop up, saying ``Mouse-2: go to that node,'' or the same
+window will pop up, saying ``mouse-2: go to that node,'' or the same
 message may appear at the bottom of the screen.
 
-  @kbd{Mouse-2} is the second button of your mouse counting from the
+  @kbd{mouse-2} is the second button of your mouse counting from the
 left---the middle button on a 3-button mouse.  (On a 2-button mouse,
 you may have to press both buttons together to ``press the middle
-button''.)  The message tells you pressing @kbd{Mouse-2} with the
+button''.)  The message tells you pressing @kbd{mouse-2} with the
 current position of the mouse pointer (on subtopic in the menu) will
 go to that subtopic.
 
 @findex Info-mouse-follow-nearest-node
-  More generally, @kbd{Mouse-2} in an Info buffer finds the nearest
+  More generally, @kbd{mouse-2} in an Info buffer finds the nearest
 link to another node and goes there.  For example, near a cross
 reference it acts like @kbd{f}, in a menu it acts like @kbd{m}, on the
 node's header line it acts like @kbd{n}, @kbd{p}, or @kbd{u}, etc.  At
-end of the node's text @kbd{Mouse-2} moves to the next node, or up if
+end of the node's text @kbd{mouse-2} moves to the next node, or up if
 there's no next node.
 
 @format
@@ -719,7 +719,7 @@ to the subnode that the @kbd{u} command brought you from.  (Some Info
 readers may put you at the @emph{front} of the node instead---to get
 back to where you were reading, you have to type some @key{SPC}s.)
 
-  Another way to go Up is to click @kbd{Mouse-2} on the @samp{Up}
+  Another way to go Up is to click @kbd{mouse-2} on the @samp{Up}
 pointer shown in the header line (provided that you have a mouse).
 
 @format
@@ -740,7 +740,7 @@ in Emacs.  Do @kbd{M-x visible-mode} to show or hide it.)
 @findex Info-follow-reference
   You can follow a cross reference by moving the cursor to it and
 press @key{RET}, just as in a menu.  In Emacs, you can also click
-@kbd{Mouse-1} on a cross reference to follow it; you can see that the
+@kbd{mouse-1} on a cross reference to follow it; you can see that the
 cross reference is mouse-sensitive by moving the mouse pointer to the
 reference and watching how the underlying text and the mouse pointer
 change in response.
index 761fb772f464a24d0e333b24e5f93922c7ddcea7..fa4fa4398b4cd54123a57a372189bb4c952cf271 100644 (file)
@@ -185,8 +185,9 @@ 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 (or list of regular expressions) will be removed from the
-@code{Cc} header. A value of @code{nil} means exclude your name only.
+expression (or list of regular expressions or a predicate function)
+will be removed from the @code{Cc} header. A value of @code{nil} means
+exclude your name only.
 
 @vindex message-prune-recipient-rules
 @code{message-prune-recipient-rules} is used to prune the addresses
@@ -1672,10 +1673,10 @@ trailing old subject.  In this case,
 
 @item message-alternative-emails
 @vindex message-alternative-emails
-Regexp matching alternative email addresses.  The first address in the
-To, Cc or From headers of the original article matching this variable is
-used as the From field of outgoing messages, replacing the default From
-value.
+Regexp or predicate function matching alternative email addresses.
+The first address in the To, Cc or From headers of the original
+article matching this variable is used as the From field of outgoing
+messages, replacing the default From value.
 
 For example, if you have two secondary email addresses john@@home.net
 and john.doe@@work.com and want to use them in the From field when
index d1fd8f76118222c983d092bb98063485eedd4537..c48e4a40ea91dd0362f82bc48b2682f7f195dd2d 100644 (file)
@@ -1566,7 +1566,7 @@ M-x mh-rmail @key{RET} bob @key{RET}}). @xref{Folders}.}.
 @findex display-time
 @vindex read-mail-command
 
-There are some commands that need to read mail, such as @kbd{Mouse-2}
+There are some commands that need to read mail, such as @kbd{mouse-2}
 over the @samp{Mail} button that @code{display-time} adds to the mode
 line. You can configure Emacs to have these commands use MH-E by
 setting the option @code{read-mail-command} to @samp{mh-rmail}.
@@ -1835,9 +1835,9 @@ minibuffer (@code{mh-prefix-help}).
 Unpack message created with @command{uudecode} or @command{shar}
 (@code{mh-store-msg}).
 @c -------------------------
-@kindex Mouse-2
+@kindex mouse-2
 @findex mh-show-mouse
-@item Mouse-2
+@item mouse-2
 Move point to mouse event and show message (@code{mh-show-mouse}).
 @end table
 
@@ -1845,12 +1845,12 @@ Within the MH-Show buffer, the following command is defined.
 
 @table @kbd
 @kindex @key{RET}
-@kindex Mouse-1
-@kindex Mouse-2
+@kindex mouse-1
+@kindex mouse-2
 @findex mh-press-button
 @item @key{RET}
-@itemx Mouse-1
-@itemx Mouse-2
+@itemx mouse-1
+@itemx mouse-2
 View contents of button (@code{mh-press-button}).
 @end table
 
@@ -2022,10 +2022,10 @@ detail in the following sections.
 @kindex @key{BS}
 @kindex @key{RET}
 @kindex @key{SPC}
-@kindex Mouse-2
+@kindex mouse-2
 
 The command @key{RET} (@code{mh-show}) displays the message that the
-cursor is on while @kbd{Mouse-2} (@code{mh-show-mouse}) displays the
+cursor is on while @kbd{mouse-2} (@code{mh-show-mouse}) displays the
 message that the mouse cursor is on. If the message is already
 displayed, it scrolls to the beginning of the message. Use @key{SPC}
 (@code{mh-page-msg}) and @key{BS} (@code{mh-previous-page}) to move
@@ -2201,13 +2201,13 @@ highlighting of citations entirely, choose @samp{None}.
 @cindex links, following
 @findex goto-address-at-point
 @kindex C-c @key{RET}
-@kindex Mouse-2
+@kindex mouse-2
 @vindex goto-address-highlight-p
 
 Email addresses and URLs in the message are highlighted if the option
 @code{goto-address-highlight-p} is on, which it is by default. To view
 the web page for a highlighted URL or to send a message using a
-highlighted email address, use @kbd{Mouse-2} or @kbd{C-c @key{RET}}
+highlighted email address, use @kbd{mouse-2} or @kbd{C-c @key{RET}}
 (@code{goto-address-at-point}). @xref{Sending Mail}, to see how to
 configure Emacs to send the message using MH-E.
 
@@ -2337,11 +2337,11 @@ Attachments in MH-E are indicated by @dfn{buttons} like this:
 @kindex @key{RET}
 @kindex K @key{TAB}
 @kindex K S-@key{TAB}
-@kindex Mouse-1
-@kindex Mouse-2
+@kindex mouse-1
+@kindex mouse-2
 
-To view the contents of the button, use either @kbd{Mouse-1} or
-@kbd{Mouse-2} on the button or @key{RET} (@code{mh-press-button}) when
+To view the contents of the button, use either @kbd{mouse-1} or
+@kbd{mouse-2} on the button or @key{RET} (@code{mh-press-button}) when
 the cursor is over the button. This command is a toggle so if you use
 it again on the same attachment, it is hidden. If Emacs does not know
 how to display the attachment, then Emacs offers to save the
@@ -2561,11 +2561,11 @@ includes the results of a quick poll of MH-E users from 2005-12-23.
 @table @asis
 @cindex browser, @samp{w3m}
 @cindex @samp{w3m}
-@kindex Mouse-2
+@kindex 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
+that highlights links. These can be clicked with @kbd{mouse-2} to view
 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
@@ -2650,7 +2650,7 @@ documentation for the Gnus command @kbd{W h} (see section
 @cindex @file{.emacs}
 @cindex files, @file{.emacs}
 @findex browse-url-at-mouse
-@kindex S-Mouse-2
+@kindex S-mouse-2
 
 A useful key binding that you can add to @file{~/.emacs} is the
 following which displays an HTML link or textual URL in an external
@@ -6261,7 +6261,7 @@ containing the value for the field is given.
 @findex mh-visit-folder
 @kindex F v
 @kindex M-x speedbar
-@kindex Mouse-2
+@kindex mouse-2
 
 You can also use the speedbar
 @ifnothtml
@@ -6275,7 +6275,7 @@ Speedbar Frames} in @cite{The GNU Emacs Manual})
 to view your folders. To bring up the speedbar, run @kbd{M-x speedbar
 @key{RET}}. You will see a new frame appear with all of your MH
 folders. Folders with unseen messages appear in boldface. Click on a
-folder name with @kbd{Mouse-2} to visit that folder in a similar
+folder name with @kbd{mouse-2} to visit that folder in a similar
 fashion to the command @kbd{F v} (@code{mh-visit-folder})
 (@pxref{Folders}). Click on the @samp{+} icon to expand and view the
 sub-folders of that folder.
@@ -6310,9 +6310,9 @@ count before the next automatic update (@code{mh-speed-refresh}).
 
 @findex delete-frame
 @kindex C-x 5 0
-@kindex Mouse-3
+@kindex mouse-3
 
-You can click on @kbd{Mouse-3} to bring up a context menu that
+You can click on @kbd{mouse-3} to bring up a context menu that
 contains these items. Dismiss the speedbar with @kbd{C-x 5 0}
 (@code{delete-frame}).
 
index 0098e2049d85e602ed7f5044a4a76b3bcacf91bc..cdead72c630e2953bde7af004bc2884968c42e2d 100644 (file)
@@ -880,11 +880,11 @@ because @code{defun-rcirc-command} is not yet available, and without
 @code{rcirc} loaded, the command wouldn't do us much good anyway.
 
 @smallexample
-(eval-after-load 'rcirc
-  '(defun-rcirc-command sv (arg)
-     "Boast about rcirc."
-     (interactive "i")
-     (rcirc-send-message process target
+(with-eval-after-load 'rcirc
+  (defun-rcirc-command sv (arg)
+    "Boast about rcirc."
+    (interactive "i")
+    (rcirc-send-message process target
                          (concat "I use " rcirc-id-string))))
 @end smallexample
 
@@ -904,29 +904,29 @@ copies of every channel buffer, one dead and one live.
 The real answer, therefore, is a @code{/reconnect} command:
 
 @smallexample
-(eval-after-load 'rcirc
-  '(defun-rcirc-command reconnect (arg)
-     "Reconnect the server process."
-     (interactive "i")
-     (unless process
-       (error "There's no process for this target"))
-     (let* ((server (car (process-contact process)))
-            (port (process-contact process :service))
-            (nick (rcirc-nick process))
-            channels query-buffers)
-       (dolist (buf (buffer-list))
-         (with-current-buffer buf
-           (when (eq process (rcirc-buffer-process))
-             (remove-hook 'change-major-mode-hook
-                          'rcirc-change-major-mode-hook)
-             (if (rcirc-channel-p rcirc-target)
-                 (setq channels (cons rcirc-target channels))
-               (setq query-buffers (cons buf query-buffers))))))
-       (delete-process process)
-       (rcirc-connect server port nick
-                      rcirc-default-user-name
-                      rcirc-default-full-name
-                      channels))))
+(with-eval-after-load 'rcirc
+  (defun-rcirc-command reconnect (arg)
+    "Reconnect the server process."
+    (interactive "i")
+    (unless process
+      (error "There's no process for this target"))
+    (let* ((server (car (process-contact process)))
+           (port (process-contact process :service))
+           (nick (rcirc-nick process))
+           channels query-buffers)
+      (dolist (buf (buffer-list))
+        (with-current-buffer buf
+          (when (eq process (rcirc-buffer-process))
+            (remove-hook 'change-major-mode-hook
+                         'rcirc-change-major-mode-hook)
+            (if (rcirc-channel-p rcirc-target)
+                (setq channels (cons rcirc-target channels))
+              (setq query-buffers (cons buf query-buffers))))))
+      (delete-process process)
+      (rcirc-connect server port nick
+                     rcirc-default-user-name
+                     rcirc-default-full-name
+                     channels))))
 @end smallexample
 
 @node GNU Free Documentation License
index f11e0b83fa1a3f0ec5a250016af061eee92049c8..a8684a40b3a59fcf7fea656c4b326540ccb3c3da 100644 (file)
@@ -1173,7 +1173,7 @@ the declaration line of the function or tag on the topmost line in the
 text area.  This allows you to keep that declaration line in view at
 all times, even if it is scrolls off the ``top'' of the screen.
 
-In addition, clicking @kbd{Mouse-1} on the header line opens a context
+In addition, clicking @kbd{mouse-1} on the header line opens a context
 menu that contains menu items for copying, killing, or narrowing to
 that tag.
 
@@ -1199,7 +1199,7 @@ Semantic Highlight Function minor mode highlights the declaration line
 of the current function or tag (that is to say, the first line that
 describes the rest of the construct).
 
-In addition, clicking @kbd{Mouse-3} on the highlighted declaration
+In addition, clicking @kbd{mouse-3} on the highlighted declaration
 line opens a context menu that contains menu items for copying,
 killing, or narrowing to that tag.
 
index 58f9ba8ccf324d7db89facd92f17bb5370a0d391..8b0bb82f17487eb16dbd0b7bcea7cbb67d6d1b3d 100644 (file)
@@ -444,6 +444,36 @@ printer function.  Then, if you call again
 @code{"%.3f"}, all the cells using printer @samp{foo} will be
 reprinted accordingly.
 
+When you define a printer function with a lambda expression taking one
+argument, please take care that the returned value is a string, or a
+list containing a string, even when the input argument has an
+unexpected value. Here is an example:
+
+@example
+(lambda (val)
+   (cond
+      ((null val) "")
+      ((and (numberp val) (>= val 0)) (format "%.1f" val))
+      (t (ses-center-span (format "%S" val) ?#))))
+@end example
+
+This example will:
+@itemize
+@item
+When the cell is empty (ie.@: when @code{val} is @code{nil}), print an
+empty string @code{""}
+@item
+When the cell value is a non negative number, format the the value in
+fixed-point notation with one decimal after point
+@item
+Otherwise, handle the value as erroneous by printing it as an
+s-expression (using @code{prin1}), centered and surrounded by @code{#}
+filling.
+@end itemize
+
+
+
+
 @node Clearing cells
 @section Clearing cells
 @cindex clearing commands
index 377e412bb301624406d601d2a2e41272b51893a1..d43c521f76afc4e0c70f1b7885961dcf99b0bd42 100644 (file)
@@ -62,7 +62,7 @@ authors of other packages to provide speedbar summaries customized to
 the needs of that mode.
 
 Throughout this manual, activities are defined as ``clicking on'', or
-``expanding'' items.  Clicking means using @kbd{Mouse-2} on a
+``expanding'' items.  Clicking means using @kbd{mouse-2} on a
 button.  Expanding refers to clicking on an expansion button to display
 an expanded summary of the entry the expansion button is
 on.  @xref{Basic Navigation}.
@@ -316,29 +316,29 @@ with the mouse, or affected by the menu.
 The mouse bindings are:
 
 @table @kbd
-@item Mouse-1
+@item mouse-1
 Move cursor to that location.
-@item Mouse-2
-@itemx Double-Mouse-1
-Activate the current button.  @kbd{Double-Mouse-1} is called a @dfn{double
+@item mouse-2
+@itemx Double-mouse-1
+Activate the current button.  @kbd{Double-mouse-1} is called a @dfn{double
 click} on other platforms, and is useful for windows users with two
 button mice.
-@c Isn't it true that with two-button mice, the right button is Mouse-2?
-@c On GNU/Linux, the right button is Mouse-3.
-@item S-Mouse-2
-@itemx S-Double-Mouse-1
+@c Isn't it true that with two-button mice, the right button is mouse-2?
+@c On GNU/Linux, the right button is mouse-3.
+@item S-mouse-2
+@itemx S-Double-mouse-1
 @cindex power click
-This has the same effect as @kbd{Mouse-2}, except it is called a power
+This has the same effect as @kbd{mouse-2}, except it is called a power
 click.  This means that if a group with an expansion button @samp{+} is
 clicked, any caches are flushed, and subitems re-read.  If it is a name,
 it will be opened in a new frame.
-@item Mouse-3
+@item mouse-3
 Activate the speedbar menu.  The item selected affects the line clicked,
 not the line where the cursor was.
-@item Mouse-1 @r{(mode line)}
+@item mouse-1 @r{(mode line)}
 Activate the menu.  This affects the item the cursor is on before the
 click, since the mouse was not clicked on anything.
-@item C-Mouse-1
+@item C-mouse-1
 Buffers sub-menu.  The buffer in the attached frame is switched.
 @end table
 
@@ -355,7 +355,7 @@ You can display different data by using different display modes.  These
 specialized modes make it easier to navigate the relevant pieces of
 information, such as files and directories, or buffers.
 
-In the main menu, found by clicking @kbd{Mouse-3}, there is a submenu
+In the main menu, found by clicking @kbd{mouse-3}, there is a submenu
 labeled @samp{Displays}.  This submenu lets you easily choose between
 different display modes.
 
index 9320a6e166f1c032c8b3decb70a9ab40645136a9..08e5de20c21352e376e880fd5fd5f521047677be 100644 (file)
@@ -17,9 +17,9 @@
 
 @include trampver.texi
 
-@c Macro for formatting a file name according to the respective syntax.
-@c Macro arguments should not have any leading or
-@c trailing whitespace.  Not very elegant, but I don't know it better.
+@c Macro for formatting a file name according to the respective
+@c syntax.  Macro arguments should not have any leading or trailing
+@c whitespace.  Not very elegant, but I don't know it better.
 
 @macro trampfn {method, userhost, localname}
 @value{prefix}@c
@@ -51,10 +51,10 @@ copy and modify this GNU manual.''
 @end copying
 
 @c Entries for @command{install-info} to use
-@dircategory @value{emacsname} network features
+@dircategory Emacs network features
 @direntry
 * TRAMP: (tramp).               Transparent Remote Access, Multiple Protocol
-                                  @value{emacsname} remote file access via ssh and scp.
+                                  Emacs remote file access via ssh and scp.
 @end direntry
 
 @titlepage
@@ -68,39 +68,25 @@ copy and modify this GNU manual.''
 @contents
 
 
-@ifnottex
 @node Top, Overview, (dir), (dir)
 @top @value{tramp} version @value{trampver} User Manual
 
+@ifnottex
 This file documents @value{tramp} version @value{trampver}, a remote file
-editing package for @value{emacsname}.
+editing package for Emacs.
 
 @value{tramp} stands for ``Transparent Remote (file) Access, Multiple
 Protocol''.  This package provides remote file editing, similar to
-@value{ftppackagename}.
+Ange FTP.
 
-The difference is that @value{ftppackagename} uses FTP to transfer
-files between the local and the remote host, whereas @value{tramp} uses a
-combination of @command{rsh} and @command{rcp} or other work-alike
-programs, such as @command{ssh}/@command{scp}.
+The difference is that Ange FTP uses FTP to transfer files between the
+local and the remote host, whereas @value{tramp} uses a combination of
+@command{rsh} and @command{rcp} or other work-alike programs, such as
+@command{ssh}/@command{scp}.
 
 You can find the latest version of this document on the web at
 @uref{http://www.gnu.org/software/tramp/}.
 
-@c Pointer to the other Emacs flavor is necessary only in case of
-@c standalone installation.
-@ifset installchapter
-The manual has been generated for @value{emacsname}.
-@ifinfo
-If you want to read the info pages for @value{emacsothername}, you
-should read in @ref{Installation} how to create them.
-@end ifinfo
-@ifhtml
-If you're using the other Emacs flavor, you should read the
-@uref{@value{emacsotherfilename}, @value{emacsothername}} pages.
-@end ifhtml
-@end ifset
-
 @ifhtml
 The latest release of @value{tramp} is available for
 @uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see
@@ -126,7 +112,6 @@ The Mail Archive}.
 @end ifhtml
 
 @insertcopying
-
 @end ifnottex
 
 @menu
@@ -137,7 +122,7 @@ For the end user:
 * Obtaining Tramp::             How to obtain @value{tramp}.
 * History::                     History of @value{tramp}.
 @ifset installchapter
-* Installation::                Installing @value{tramp} with your @value{emacsname}.
+* Installation::                Installing @value{tramp} with your Emacs.
 @end ifset
 * Configuration::               Configuring @value{tramp} for use.
 * Usage::                       An overview of the operation of @value{tramp}.
@@ -150,7 +135,6 @@ For the developer:
                                 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.
 * Function Index::              @value{tramp} functions.
@@ -161,7 +145,7 @@ For the developer:
  --- The Detailed Node Listing ---
 @c
 @ifset installchapter
-Installing @value{tramp} with your @value{emacsname}
+Installing @value{tramp} with your Emacs
 
 * Installation parameters::     Parameters in order to control installation.
 * Load paths::                  How to plug-in @value{tramp} into your environment.
@@ -173,12 +157,8 @@ Configuring @value{tramp} for use
 * Connection types::            Types of connections to remote hosts.
 * Inline methods::              Inline methods.
 * External methods::            External methods.
-@ifset emacsgvfs
 * GVFS based methods::          GVFS based external methods.
-@end ifset
-@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.
@@ -200,15 +180,13 @@ Using @value{tramp}
 * File name Syntax::            @value{tramp} file name conventions.
 * File name completion::        File name completion.
 * Ad-hoc multi-hops::           Declaring multiple hops in the file name.
-* Remote processes::            Integration with other @value{emacsname} packages.
+* Remote processes::            Integration with other Emacs packages.
 * Cleanup remote connections::  Cleanup remote connections.
 
 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
@@ -219,10 +197,9 @@ How file names, directories and localnames are mangled and managed
 @cindex overview
 
 @value{tramp} is for transparently accessing remote files from within
-@value{emacsname}.  @value{tramp} enables an easy, convenient, and
-consistent interface to remote files as if they are local files.
-@value{tramp}'s transparency extends to editing, version control, and
-@code{dired}.
+Emacs.  @value{tramp} enables an easy, convenient, and consistent
+interface to remote files as if they are local files.  @value{tramp}'s
+transparency extends to editing, version control, and @code{dired}.
 
 @value{tramp} can access remote hosts using any number of access
 methods, such as @command{rsh}, @command{rlogin}, @command{telnet},
@@ -245,7 +222,7 @@ and transparent access.
 @value{tramp} temporarily transfers a remote file's contents to the
 local host editing and related operations.  @value{tramp} can also
 transfer files between hosts using standard Emacs interfaces, a
-benefit of direct integration of @value{tramp} in @value{emacsname}.
+benefit of direct integration of @value{tramp} in Emacs.
 
 @value{tramp} can transfer files using any number of available host
 programs for remote files, such as @command{rcp}, @command{scp},
@@ -279,8 +256,7 @@ first time connection to that host, here's what happens:
 @value{tramp} invokes @samp{telnet @var{host}} or @samp{rsh @var{host}
 -l @var{user}} and establishes an external process to connect to the
 remote host.  @value{tramp} communicates with the process through an
-@value{emacsname} buffer, which also shows output from the remote
-host.
+Emacs buffer, which also shows output from the remote host.
 
 @item
 The remote host may prompt for a login name (for @command{telnet}, for
@@ -358,7 +334,7 @@ behind the scenes when you open a file with @value{tramp}.
 
 @c For the end user
 @node Obtaining Tramp
-@chapter Obtaining Tramp.
+@chapter Obtaining @value{tramp}
 @cindex obtaining Tramp
 
 @value{tramp} is included as part of Emacs (since Emacs version 22.1).
@@ -380,7 +356,7 @@ navigation bar at the top.
 Another way is to follow the terminal session below:
 
 @example
-] @strong{cd ~/@value{emacsdir}}
+] @strong{cd ~/emacs}
 ] @strong{git clone git://git.savannah.gnu.org/tramp.git}
 @end example
 
@@ -400,14 +376,14 @@ Tramp developers:
 @end example
 
 @noindent
-After one of the above commands, @file{~/@value{emacsdir}/tramp} will
+After one of the above commands, @file{~/emacs/tramp} will
 containing the latest version of @value{tramp}.
 
 @noindent
 To fetch updates from the repository, use git pull:
 
 @example
-] @strong{cd ~/@value{emacsdir}/tramp}
+] @strong{cd ~/emacs/tramp}
 ] @strong{git pull}
 @end example
 
@@ -416,7 +392,7 @@ Run @command{autoconf} as follows to generate an up-to-date
 @file{configure} script:
 
 @example
-] @strong{cd ~/@value{emacsdir}/tramp}
+] @strong{cd ~/emacs/tramp}
 ] @strong{autoconf}
 @end example
 
@@ -436,23 +412,13 @@ for version control.
 April 2000 was the first time when multi-hop methods were added.  In
 July 2002, @value{tramp} unified file names with Ange-FTP@.  In July
 2004, proxy hosts replaced multi-hop methods.  Running commands on
-remote hosts was introduced in December 2005.
-@ifset emacsgw
-Support for gateways since April 2007.
-@end ifset
-@ifset emacsgvfs
-GVFS integration started in February 2009.
-@end ifset
-@ifset emacs
-Remote commands on Windows hosts since September 2011.
-@end ifset
-Ad-hoc multi-hop methods (with a changed syntax) re-enabled in November
-2011.
-
-In November 2012, added Juergen Hoetzel's @file{tramp-adb.el}.
-
-In December 2001, XEmacs package repository adds @value{tramp}.
+remote hosts was introduced in December 2005.  Support for gateways
+since April 2007.  GVFS integration started in February 2009.  Remote
+commands on Windows hosts since September 2011.  Ad-hoc multi-hop
+methods (with a changed syntax) re-enabled in November 2011.  In
+November 2012, added Juergen Hoetzel's @file{tramp-adb.el}.
 
+XEmacs support has been stopped in January 2016.
 
 @c Installation chapter is necessary only in case of standalone
 @c installation.  Text taken from trampinst.texi.
@@ -468,8 +434,8 @@ In December 2001, XEmacs package repository adds @value{tramp}.
 
 @value{tramp} is initially configured to use the @command{scp} program
 to connect to the remote host.  Just type @kbd{C-x C-f} and then enter
-file name @file{@trampf{user@@host,/path/to.file}}.  For details,
-see @xref{Default Method}.
+file name @file{@trampf{user@@host,/path/to.file}}.  For details, see
+@xref{Default Method}.
 
 For problems related to the behavior of remote shell, see @ref{Remote
 shell setup} for details.
@@ -479,8 +445,8 @@ defaults to one of several other options, see (@pxref{Connection
 types}).
 
 @strong{Note} that some user options and variables described in these
-examples are not auto loaded by @value{emacsname}.  All examples
-require @value{tramp} is installed and loaded:
+examples are not auto loaded by Emacs.  All examples require
+@value{tramp} is installed and loaded:
 
 @lisp
 (require 'tramp)
@@ -491,12 +457,8 @@ require @value{tramp} is installed and loaded:
 * Connection types::            Types of connections to remote hosts.
 * Inline methods::              Inline methods.
 * External methods::            External methods.
-@ifset emacsgvfs
 * GVFS based methods::          GVFS based external methods.
-@end ifset
-@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
@@ -561,7 +523,7 @@ Inline methods use the same login connection to transfer file
 contents.  Inline methods are quick and easy for small files.  They
 depend on the availability of suitable encoding and decoding programs
 on the remote host.  For local source and destination, @value{tramp}
-may use built-in equivalents of such programs in @value{emacsname}.
+may use built-in equivalents of such programs in Emacs.
 
 Inline methods can work in situations where an external transfer
 program is unavailable.  Inline methods also work when transferring
@@ -593,7 +555,6 @@ specifies the file size for such optimization.
 @command{rsh} is an option for connecting to hosts within local
 networks since @command{rsh} is not as secure as other methods.
 
-
 @item @option{ssh}
 @cindex method ssh
 @cindex ssh method
@@ -613,7 +574,6 @@ host name, a hash sign, then a port number).  It is the same as passing
 Connecting to a remote host with @command{telnet} is as insecure
 as the @option{rsh} method.
 
-
 @item @option{su}
 @cindex method su
 @cindex su method
@@ -630,6 +590,22 @@ the host returned by the function @command{(system-name)}.  See
 Similar to @option{su} method, @option{sudo} uses @command{sudo}.
 @command{sudo} must have sufficient rights to start a shell.
 
+@item @option{doas}
+@cindex method doas
+@cindex doas method
+
+This method is used on OpenBSD like the @command{sudo} command.
+
+@item @option{sg}
+@cindex method sg
+@cindex sg method
+
+The @command{sg} program allows editing as different group.  The host
+can be either @samp{localhost} or the host returned by the function
+@command{(system-name)}.  The user name must be specified, but it
+denotes a group name.  See @ref{Multi-hops} for an exception to this
+behavior.
+
 @item @option{sshx}
 @cindex method sshx
 @cindex sshx method
@@ -666,7 +642,6 @@ This method is also similar to @option{ssh}.  It uses the
 
 This is another method from the Kerberos suite.  It behaves like @option{su}.
 
-
 @item @option{plink}
 @cindex method plink
 @cindex plink method
@@ -680,7 +655,6 @@ session.
 
 @option{plink} method supports the @samp{-P} argument.
 
-
 @item @option{plinkx}
 @cindex method plinkx
 @cindex plinkx method
@@ -757,7 +731,6 @@ is lost if the file exists only on one side of the connection.
 
 This method supports the @samp{-p} argument.
 
-
 @item @option{scpx}---@command{ssh} and @command{scp}
 @cindex method scpx
 @cindex scpx method
@@ -774,7 +747,6 @@ shell prompts that confuses @value{tramp}.
 
 This method supports the @samp{-p} argument.
 
-
 @item @option{pscp}---@command{plink} and @command{pscp}
 @item @option{psftp}---@command{plink} and @command{psftp}
 @cindex method pscp
@@ -798,7 +770,6 @@ session.
 
 These methods support the @samp{-P} argument.
 
-
 @item @option{fcp}---@command{fsh} and @command{fcp}
 @cindex method fcp
 @cindex fcp method
@@ -839,13 +810,8 @@ decode programs.
 @cindex ftp method
 
 When @value{tramp} uses @option{ftp}, it forwards requests to whatever
-ftp program is specified by @value{ftppackagename}.  This external
-program must be capable of servicing requests from @value{tramp}.
-
-@ifset xemacs
-This method works only for unified file names, see @ref{Issues}.
-@end ifset
-
+ftp program is specified by Ange FTP.  This external program must be
+capable of servicing requests from @value{tramp}.
 
 @item @option{smb}---@command{smbclient}
 @cindex method smb
@@ -905,9 +871,9 @@ uses the anonymous user (without prompting for password).  This
 behavior is unlike other @value{tramp} methods, where local user name
 is substituted.
 
-The @option{smb} method is unavailable if @value{emacsname} is run under a
-local user authentication context in MS Windows.  However such users
-can still access remote files using UNC file names instead of @value{tramp}:
+The @option{smb} method is unavailable if Emacs is run under a local
+user authentication context in MS Windows.  However such users can
+still access remote files using UNC file names instead of @value{tramp}:
 
 @example
 //melancholia/daniel$$/.emacs
@@ -933,12 +899,12 @@ or the absolute path set in the variable @var{tramp-adb-program}.
 @value{tramp} connects to Android devices with @option{adb} only when
 the custom option @option{tramp-adb-connect-if-not-connected} is not
 @code{nil}.  Otherwise, the connection must be established outside
-@value{emacsname}.
+Emacs.
 
 @value{tramp} does not require a host name part of the remote file
 name when a single Android device is connected to @command{adb}.
-@value{tramp} instead uses @file{@trampfn{adb,,}} as the default
-name.  @command{adb devices} shows available host names.
+@value{tramp} instead uses @file{@trampfn{adb,,}} as the default name.
+@command{adb devices} shows available host names.
 
 @option{adb} method normally does not need user name to authenticate
 on the Android device because it runs under the @command{adbd}
@@ -955,7 +921,6 @@ numbers are not applicable to Android devices connected through USB@.
 @end table
 
 
-@ifset emacsgvfs
 @node GVFS based methods
 @section GVFS based external methods
 @cindex methods, gvfs
@@ -967,9 +932,9 @@ GVFS is the virtual file system for the Gnome Desktop,
 mounted locally through FUSE and @value{tramp} uses this locally
 mounted directory internally.
 
-@value{emacsname} uses the D-Bus mechanism to communicate with GVFS@.
-@value{emacsname} must have the message bus system, D-Bus integration
-active, @pxref{Top, , D-Bus, dbus}.
+Emacs uses the D-Bus mechanism to communicate with GVFS@.  Emacs must
+have the message bus system, D-Bus integration active, @pxref{Top, ,
+D-Bus, dbus}.
 
 @table @asis
 @item @option{afp}
@@ -999,7 +964,6 @@ but with SSL encryption.  Both methods support the port numbers.
 OBEX is an FTP-like access protocol for cell phones and similar simple
 devices.  @value{tramp} supports OBEX over Bluetooth.
 
-
 @item @option{sftp}
 @cindex method sftp
 @cindex sftp method
@@ -1025,10 +989,8 @@ default, this list includes @option{afp}, @option{dav}, @option{davs},
 @option{obex}, @option{sftp} and @option{synce}.  Other methods to
 include are: @option{ftp} and @option{smb}.
 @end defopt
-@end ifset
 
 
-@ifset emacsgw
 @node Gateway methods
 @section Gateway methods
 @cindex methods, gateway
@@ -1061,7 +1023,6 @@ For authentication, this protocol uses only @option{Basic
 Authentication} (see RFC 2617).  When no port number is specified, this
 protocol defaults to @option{8080}.
 
-
 @item @option{socks}
 @cindex method socks
 @cindex socks method
@@ -1073,7 +1034,6 @@ The default port number for the socks server is @option{1080}, if not
 specified otherwise.
 
 @end table
-@end ifset
 
 
 @node Default Method
@@ -1197,9 +1157,9 @@ See the documentation for the variable @code{tramp-default-user-alist}
 for more details.
 
 A Caution: @value{tramp} will override any default user specified in
-the configuration files outside @value{emacsname}, such as
-@file{~/.ssh/config}.  To stop @value{tramp} from applying the default
-value, set the corresponding alist entry to nil:
+the configuration files outside Emacs, such as @file{~/.ssh/config}.
+To stop @value{tramp} from applying the default value, set the
+corresponding alist entry to nil:
 
 @lisp
 (add-to-list 'tramp-default-user-alist
@@ -1222,9 +1182,9 @@ for catch-all or most often used login.
 @vindex tramp-default-host-alist
 
 When host name is omitted, @value{tramp} substitutes the value from
-the @code{tramp-default-host} variable.  It is initially populated with
-the local hostname where @value{emacsname} is running.  Both the
-default user and default host can be overridden as follows:
+the @code{tramp-default-host} variable.  It is initially populated
+with the local hostname where Emacs is running.  Both the default user
+and default host can be overridden as follows:
 
 @lisp
 (setq tramp-default-user "john"
@@ -1234,10 +1194,8 @@ default user and default host can be overridden as follows:
 With both defaults set, @samp{@trampfn{ssh,,}} will connect
 @value{tramp} to John's home directory on target.
 
-@ifset emacs
 @strong{Note} @samp{/::} won't work, because @samp{/:} is the prefix
 for quoted file names.
-@end ifset
 
 Instead of a single default host, @code{tramp-default-host-alist}
 allows multiple default host values based on access method or user
@@ -1276,13 +1234,8 @@ regular expression which always matches.
 @var{proxy} is a literal @value{tramp} file name whose local name part
 is ignored, and the method and user name parts are optional.
 
-@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}.
 
@@ -1322,9 +1275,9 @@ access, then use this alist entry:
              '("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh,%h,}"))
 @end lisp
 
-Opening @file{@trampfn{sudo,randomhost.your.domain,}} first
-connects to @samp{randomhost.your.domain} via @code{ssh} under your
-account name, and then perform @code{sudo -u root} on that host.
+Opening @file{@trampfn{sudo,randomhost.your.domain,}} first connects
+to @samp{randomhost.your.domain} via @code{ssh} under your account
+name, and then perform @code{sudo -u root} on that host.
 
 It is key for the sudo method in the above example to be applied on
 the host after reaching it and not on the local host.
@@ -1346,7 +1299,6 @@ local one, first connect via @command{ssh}, and then apply
 The above configuration allows @value{tramp} connection as @samp{root}
 to remote Ubuntu hosts.
 
-@ifset emacsgw
 @code{tramp-default-proxies-alist} is also used for passing through
 firewalls or proxy servers.
 
@@ -1367,7 +1319,6 @@ discussion of ethical issues.}  Then the configuration is:
 @end lisp
 
 Gateway methods in a multiple hop chain can be declared only as the first hop.
-@end ifset
 @end defopt
 
 Passing through hops involves dealing with restricted shells, such as
@@ -1495,6 +1446,11 @@ A function dedicated to @file{/etc/hosts} for host names.
 
 A function which parses @file{/etc/passwd} files for user names.
 
+@item @code{tramp-parse-etc-group}
+@findex tramp-parse-etc-group
+
+A function which parses @file{/etc/group} files for group names.
+
 @item @code{tramp-parse-netrc}
 @findex tramp-parse-netrc
 
@@ -1566,9 +1522,8 @@ the same user or host name independent of the access method.
 
 @code{password-cache-expiry} sets the duration (in seconds) the
 passwords are remembered.  Passwords are never saved permanently nor
-can they extend beyond the lifetime of the current @value{emacsname}
-session.  Set @code{password-cache-expiry} to @code{nil} to disable
-expiration.
+can they extend beyond the lifetime of the current Emacs session.  Set
+@code{password-cache-expiry} to @code{nil} to disable expiration.
 
 @vindex password-cache
 
@@ -1576,8 +1531,8 @@ Set @code{password-cache} to @code{nil} to disable password caching.
 
 @strong{Implementation Note}: password caching depends on
 @file{password-cache.el} package.  @value{tramp} activates password
-caching only if @value{tramp} can discover, while @value{emacsname} is
-loading, the package through @code{load-path}.
+caching only if @value{tramp} can discover, while Emacs is loading,
+the package through @code{load-path}.
 
 @ifset installchapter
 @file{password.el} is available from No Gnus or from the @value{tramp}
@@ -1594,17 +1549,12 @@ For faster initial connection times, @value{tramp} stores previous
 connection properties in a file specified by the variable
 @code{tramp-persistency-file-name}.
 
-The default file name for @code{tramp-persistency-file-name} is:
-@ifset emacs
+The default file name for @code{tramp-persistency-file-name} is
 @file{~/.emacs.d/tramp}.
-@end ifset
-@ifset xemacs
-@file{~/.xemacs/tramp}.
-@end ifset
 
-@value{tramp} reads this file during @value{emacsname} startup, and
-writes to it when exiting @value{emacsname}.  Delete this file for
-@value{tramp} to recreate a new one on next @value{emacsname} startup.
+@value{tramp} reads this file during Emacs startup, and writes to it
+when exiting Emacs.  Delete this file for @value{tramp} to recreate a
+new one on next Emacs startup.
 
 Set @code{tramp-persistency-file-name} to @code{nil} to disable
 storing connections persistently.
@@ -1721,8 +1671,8 @@ preserves the path value, which can be used to update
 
 When remote search paths are changed, local @value{tramp} caches must
 be recomputed.  To force @value{tramp} to recompute afresh, exit
-@value{emacsname}, remove the persistent file (@pxref{Connection
-caching}), and restart @value{emacsname}.
+Emacs, remove the persistent file (@pxref{Connection caching}), and
+restart Emacs.
 
 
 @node Remote shell setup
@@ -1893,9 +1843,7 @@ fi
 @end example
 
 @ifinfo
-@ifset emacs
-@xref{Interactive Shell, , , @value{emacsdir}}.
-@end ifset
+@xref{Interactive Shell, , , emacs}.
 @end ifinfo
 
 @item @command{busybox} / @command{nc}
@@ -1970,8 +1918,8 @@ directory for temporary files:
 
 @noindent
 Open a remote connection with the command @kbd{C-x C-f
-@trampfn{ssh,192.168.0.26#2222,}}, where @command{sshd} is listening on port
-@samp{2222}.
+@trampfn{ssh,192.168.0.26#2222,}}, where @command{sshd} is listening
+on port @samp{2222}.
 
 To add a corresponding entry to the @file{~/.ssh/config} file
 (recommended), use this:
@@ -2001,59 +1949,32 @@ Open a remote connection with a more concise command @kbd{C-x C-f
 @section Auto-save and Backup configuration
 @cindex auto-save
 @cindex backup
-@ifset emacs
 @vindex backup-directory-alist
-@end ifset
-@ifset xemacs
-@vindex bkup-backup-directory-info
-@end ifset
 
-To avoid @value{tramp} from saving backup files owned by root to
-locations accessible to others, default backup settings in
-@ifset emacs
-@code{backup-directory-alist}
-@end ifset
-@ifset xemacs
-@code{bkup-backup-directory-info}
-@end ifset
-have to be altered.
+To avoid @value{tramp} from saving backup files owned by @samp{root}
+to locations accessible to others, default backup settings in
+@code{backup-directory-alist} have to be altered.
 
-Here's a scenario where files could be inadvertently
-exposed.  @value{emacsname} by default writes backup files to the same
-directory as the original files unless changed to another location,
-such as @file{~/.emacs.d/backups/}.  Such a directory will also be used
-by default by @value{tramp} when using, say, a restricted file
+Here's a scenario where files could be inadvertently exposed.  Emacs
+by default writes backup files to the same directory as the original
+files unless changed to another location, such as
+@file{~/.emacs.d/backups/}.  Such a directory will also be used by
+default by @value{tramp} when using, say, a restricted file
 @file{@trampfn{su,root@@localhost,/etc/secretfile}}.  The backup file
-of the secretfile is now owned by the user logged in from tramp and
-not root.
+of the secretfile is now owned by the user logged in from
+@value{tramp} and not @samp{root}.
 
-When
-@ifset emacs
-@code{backup-directory-alist}
-@end ifset
-@ifset xemacs
-@code{bkup-backup-directory-info}
-@end ifset
-is @code{nil} (the default), such problems do not occur.
+When @code{backup-directory-alist} is @code{nil} (the default), such
+problems do not occur.
 
 To ``turn off'' the backup feature for @value{tramp} files and stop
 @value{tramp} from saving to the backup directory, use this:
 
-@ifset emacs
 @lisp
 (add-to-list 'backup-directory-alist
              (cons tramp-file-name-regexp nil))
 @end lisp
-@end ifset
-@ifset xemacs
-@lisp
-(require 'backup-dir)
-(add-to-list 'bkup-backup-directory-info
-             (list tramp-file-name-regexp ""))
-@end lisp
-@end ifset
 
-@ifset emacs
 @noindent
 Disabling backups can be targeted to just the @option{su} and
 @option{sudo} methods:
@@ -2067,26 +1988,13 @@ Disabling backups can be targeted to just the @option{su} and
                 (when (stringp method)
                   (member method '("su" "sudo"))))))))
 @end lisp
-@end ifset
 
 Another option is to create better backup file naming with user and
 host names prefixed to the file name.  For example, transforming
 @file{/etc/secretfile} to
 @file{~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile}, set the
-@value{tramp} variable
-@ifset emacs
-@code{tramp-backup-directory-alist}
-@end ifset
-@ifset xemacs
-@code{tramp-bkup-backup-directory-info}
-@end ifset
-from the existing variable
-@ifset emacs
-@code{backup-directory-alist}.
-@end ifset
-@ifset xemacs
-@code{bkup-backup-directory-info}.
-@end ifset
+@value{tramp} variable @code{tramp-backup-directory-alist} from the
+existing variable @code{backup-directory-alist}.
 
 Then @value{tramp} backs up to a file name that is transformed with a
 prefix consisting of the DIRECTORY name.  This file name prefixing
@@ -2095,51 +2003,35 @@ happens only when the DIRECTORY is an absolute local file name.
 @noindent
 Example:
 
-@ifset emacs
 @lisp
 (add-to-list 'backup-directory-alist
              (cons "." "~/.emacs.d/backups/"))
 (setq tramp-backup-directory-alist backup-directory-alist)
 @end lisp
-@end ifset
-@ifset xemacs
-@lisp
-(require 'backup-dir)
-(add-to-list 'bkup-backup-directory-info
-             (list "." "~/.emacs.d/backups/" 'full-path))
-(setq tramp-bkup-backup-directory-info bkup-backup-directory-info)
-@end lisp
-@end ifset
 
 @noindent
 The backup file name of
 @file{@trampfn{su,root@@localhost,/etc/secretfile}} would be
-@ifset emacs
+@ifset unified
 @file{@trampfn{su,root@@localhost,~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
 @end ifset
-@ifset xemacs
+@ifset separate
 @file{@trampfn{su,root@@localhost,~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
 @end ifset
 
 Just as for backup files, similar issues of file naming affect
-auto-saving @value{tramp} files.
-@ifset emacs
-Auto-saved files are saved in the directory specified by the variable
+auto-saving @value{tramp} files.  Auto-saved files are saved in the
+directory specified by the variable
 @code{auto-save-file-name-transforms}.  By default this is set to the
 local temporary directory.  But in some versions of Debian GNU/Linux,
-this points to the source directory where the @value{emacsname} was
-compiled.   Reset such values to a valid directory.
+this points to the source directory where the Emacs was compiled.
+Reset such values to a valid directory.
 
 Set @code{auto-save-file-name-transforms} to @code{nil} to save
 auto-saved files to the same directory as the original file.
 
 Alternatively, set the variable @code{tramp-auto-save-directory} to
 direct all auto saves to that location.
-@end ifset
-@ifset xemacs
-@code{auto-save-directory} can also be used here instead of other
-locations specified above.
-@end ifset
 
 @node Windows setup hints
 @section Issues with Cygwin ssh
@@ -2150,9 +2042,9 @@ This section is incomplete.  Please share your solutions.
 @cindex method sshx with Cygwin
 @cindex sshx method with Cygwin
 
-Cygwin's @command{ssh} works only with a Cygwin version of
-@value{emacsname}.  To check for compatibility: type @kbd{M-x eshell}, and
-start @kbd{ssh test.host}.  Incompatibilities trigger this message:
+Cygwin's @command{ssh} works only with a Cygwin version of Emacs.  To
+check for compatibility: type @kbd{M-x eshell}, and start @kbd{ssh
+test.host}.  Incompatibilities trigger this message:
 
 @example
 Pseudo-terminal will not be allocated because stdin is not a terminal.
@@ -2166,7 +2058,7 @@ Some older versions of Cygwin's @command{ssh} work with the
 @cindex method scpx with Cygwin
 @cindex scpx method with Cygwin
 
-When using the @option{scpx} access method, @value{emacsname} may call
+When using the @option{scpx} access method, Emacs may call
 @command{scp} with Windows file naming, such as @code{c:/foo}.  But
 the version of @command{scp} that is installed with Cygwin does not
 know about Windows file naming, which causes it to incorrectly look
@@ -2176,18 +2068,17 @@ A workaround: write a wrapper script for @option{scp} to convert
 Windows file names to Cygwin file names.
 
 @cindex Cygwin and ssh-agent
-@cindex SSH_AUTH_SOCK and @value{emacsname} on Windows
+@cindex SSH_AUTH_SOCK and Emacs on Windows
 
 When using the @command{ssh-agent} on Windows for password-less
 interaction, @option{ssh} methods depend on the environment variable
-@env{SSH_AUTH_SOCK}.  But this variable is not set when
-@value{emacsname} is started from a Desktop shortcut and
-authentication fails.
+@env{SSH_AUTH_SOCK}.  But this variable is not set when Emacs is
+started from a Desktop shortcut and authentication fails.
 
 One workaround is to use a Windows based SSH Agent, such as
 Pageant.  It is part of the Putty Suite of tools.
 
-The fallback is to start @value{emacsname} from a shell.
+The fallback is to start Emacs from a shell.
 
 
 @node Usage
@@ -2198,27 +2089,24 @@ The fallback is to start @value{emacsname} from a shell.
 they are local.  However, @value{tramp} employs a formalized remote
 file naming syntax to perform its functions transparently.  This
 syntax consists of many parts specifying access methods,
-authentication, host names, and file names.
-@ifset emacs
-@value{ftppackagename} uses a similar syntax.
-@end ifset
+authentication, host names, and file names.  Ange FTP uses a similar
+syntax.
 
 @cindex type-ahead
 
-Unlike opening local files in @value{emacsname}, which are
-instantaneous, opening remote files in @value{tramp} is slower at
-first.  Sometimes there is a noticeable delay before the prompts for
-passwords or authentication appear in the minibuffer.  Hitting
-@kbd{@key{RET}} or other keys during this gap will be processed by
-@value{emacsname}.  This type-ahead facility is a feature of
-@value{emacsname} that may cause missed prompts when using
+Unlike opening local files in Emacs, which are instantaneous, opening
+remote files in @value{tramp} is slower at first.  Sometimes there is
+a noticeable delay before the prompts for passwords or authentication
+appear in the minibuffer.  Hitting @kbd{@key{RET}} or other keys
+during this gap will be processed by Emacs.  This type-ahead facility
+is a feature of Emacs that may cause missed prompts when using
 @value{tramp}.
 
 @menu
 * File name Syntax::            @value{tramp} file name conventions.
 * File name completion::        File name completion.
 * Ad-hoc multi-hops::           Declaring multiple hops in the file name.
-* Remote processes::            Integration with other @value{emacsname} packages.
+* Remote processes::            Integration with other Emacs packages.
 * Cleanup remote connections::  Cleanup remote connections.
 @end menu
 
@@ -2228,9 +2116,9 @@ passwords or authentication appear in the minibuffer.  Hitting
 @cindex file name syntax
 @cindex file name examples
 
-@file{@trampf{host,localfilename}}
-opens file @var{localfilename} on the remote host @var{host}, using
-the default method.  @xref{Default Method}.
+@file{@trampf{host,localfilename}} opens file @var{localfilename} on
+the remote host @var{host}, using the default method.  @xref{Default
+Method}.
 
 @table @file
 @item @value{prefix}melancholia@value{postfix}.emacs
@@ -2257,7 +2145,7 @@ For the file @file{/etc/squid.conf} on the host @code{melancholia}.
 @var{host} can take IPv4 or IPv6 address, as in
 @file{@trampf{127.0.0.1,.emacs}} or
 @file{@trampf{@value{ipv6prefix}::1@value{ipv6postfix},.emacs}}.
-@ifset emacs
+@ifset unified
 For syntactical reasons, IPv6 addresses must be embedded in square
 brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
 @end ifset
@@ -2270,24 +2158,16 @@ name using the proper syntax will override this default behavior:
 @trampf{user@@host,path/to.file}
 @end example
 
-@file{@trampf{daniel@@melancholia,.emacs}} is for file
-@file{.emacs} in @code{daniel}'s home directory on the host,
-@code{melancholia}.
+@file{@trampf{daniel@@melancholia,.emacs}} is for file @file{.emacs}
+in @code{daniel}'s home directory on the host, @code{melancholia}.
 
 Specify other file access methods (@pxref{Inline methods},
 @pxref{External methods}) as part of the file name.
 
-@ifset emacs
 Method name comes before user name, as 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}@var{method}@value{postfixhop}} (Note the trailing
-slash!).
-@end ifset
-The syntax specifications for user, host, and file do not change.
+colon).  The syntax specifications for user, host, and file do not
+change.
 
 To connect to the host @code{melancholia} as @code{daniel}, using
 @option{ssh} method for @file{.emacs} in @code{daniel}'s home
@@ -2307,13 +2187,11 @@ name.  For example: @file{@trampfn{ssh,daniel@@melancholia#42,.emacs}}.
 
 @value{tramp} can complete the following @value{tramp} file name
 components: method names, user names, host names, and file names
-located on remote hosts.
-@ifset emacs
-Enable this by activating partial completion in @file{.emacs}.
+located on remote hosts.  Enable this by activating partial completion
+in @file{.emacs}.
 @ifinfo
-@xref{Completion Options, , , @value{emacsdir}}.
+@xref{Completion Options, , , emacs}.
 @end ifinfo
-@end ifset
 
 For example, type @kbd{C-x C-f @value{prefix}t @key{TAB}},
 @value{tramp} completion choices show up as
@@ -2321,24 +2199,17 @@ For example, type @kbd{C-x C-f @value{prefix}t @key{TAB}},
 @example
 @c @multitable {@trampfn{telnet,melancholia.danann.net,}} {@trampfn{telnet,192.168.0.1,}}
 @multitable @columnfractions .5 .5
-@ifset emacs
 @item @value{prefixhop}telnet@value{postfixhop} @tab tmp/
 @item @value{prefixhop}toto@value{postfix} @tab
-@end ifset
-@ifset xemacs
-@item @value{prefixhop}telnet@value{postfixhop} @tab @value{prefixhop}toto@value{postfix}
-@end ifset
 @end multitable
 @end example
 
-@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 host,
-@end ifset
-and @samp{@value{prefixhop}toto@value{postfix}}
-might be a host @value{tramp} has detected in your @file{~/.ssh/known_hosts}
-file (when using @option{ssh} as default method).
+@samp{@value{prefixhop}telnet@value{postfixhop}} is a possible
+completion for the respective method, @samp{tmp/} stands for the
+directory @file{/tmp} on your local host, and
+@samp{@value{prefixhop}toto@value{postfix}} might be a host
+@value{tramp} has detected in your @file{~/.ssh/known_hosts} file
+(when using @option{ssh} as default method).
 
 Type @kbd{e @key{TAB}} for the minibuffer completion to
 @samp{@value{prefix}telnet@value{postfixhop}}.  Typing @kbd{@key{TAB}}
@@ -2365,21 +2236,18 @@ persistently (@pxref{Connection caching}) will be included in the
 completion lists.
 
 After remote host name completion comes completion of file names on
-the remote host.  It works the same as with local host file completion,
+the remote host.  It works the same as with local host file completion
 except that killing with double-slash @file{//} kills only the file
-name part of the @value{tramp} file name syntax.
-@ifset emacs
-A triple-slash stands for the default behavior.
-@end ifset
+name part of the @value{tramp} file name syntax.  A triple-slash
+stands for the default behavior.
 @ifinfo
-@xref{Minibuffer File, , , @value{emacsdir}}.
+@xref{Minibuffer File, , , emacs}.
 @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}
 
@@ -2388,22 +2256,13 @@ Example:
 
 @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,/}
-
-@kbd{C-x C-f @trampfn{telnet,melancholia,//}}
-     @print{} /
-@end ifset
 @end example
 
 During file name completion, remote directory contents are re-read
 regularly to account for any changes in the filesystem that may affect
 the completion candidates.  Such re-reads can account for changes to
-the file system by applications outside @value{emacsname}
-(@pxref{Connection caching}).
+the file system by applications outside Emacs (@pxref{Connection
+caching}).
 
 @defopt tramp-completion-reread-directory-timeout
 @vindex tramp-completion-reread-directory-timeout
@@ -2437,15 +2296,15 @@ Proxies can take patterns @code{%h} or @code{%u}.
 
 @value{tramp} adds the ad-hoc definitions on the fly to
 @code{tramp-default-proxies-alist} and is available for re-use during
-that @value{emacsname} session.  Subsequent @value{tramp} connections
-to the same remote host can then use the shortcut form:
+that Emacs session.  Subsequent @value{tramp} connections to the same
+remote host can then use the shortcut form:
 @samp{@trampfn{ssh,you@@remotehost,/path}}.
 
 @defopt tramp-save-ad-hoc-proxies
 @vindex tramp-save-ad-hoc-proxies
 For ad-hoc definitions to be saved automatically in
-@option{tramp-default-proxies-alist} for future @value{emacsname}
-sessions, set @option{tramp-save-ad-hoc-proxies}.
+@option{tramp-default-proxies-alist} for future Emacs sessions, set
+@option{tramp-save-ad-hoc-proxies}.
 
 @lisp
 (setq tramp-save-ad-hoc-proxies t)
@@ -2454,14 +2313,13 @@ sessions, set @option{tramp-save-ad-hoc-proxies}.
 
 
 @node Remote processes
-@section Integration with other @value{emacsname} packages
+@section Integration with other Emacs packages
 @cindex compile
 @cindex recompile
 
 @value{tramp} supports starting new running processes on the remote
-host for discovering remote file names.  @value{emacsname} packages on
-the remote host need no specific modifications for @value{tramp}'s
-use.
+host for discovering remote file names.  Emacs packages on the remote
+host need no specific modifications for @value{tramp}'s use.
 
 This type of integration does not work with the @option{ftp} method,
 and does not support the pty association as specified in
@@ -2476,12 +2334,9 @@ host when the variable @code{default-directory} is remote:
                       "/bin/sh" "-c" "grep -e tramp *"))
 @end lisp
 
-
-@ifset emacsgvfs
 Remote processes do not apply to GVFS (see @ref{GVFS based methods})
 because the remote file system is mounted on the local host and
 @value{tramp} just accesses by changing the @code{default-directory}.
-@end ifset
 
 @value{tramp} starts a remote process when a command is executed in a
 remote file or directory buffer.  As of now, these packages have been
@@ -2544,8 +2399,8 @@ them as follows:
 This works only for environment variables not already set in the
 @code{process-environment}.
 
-For integrating other @value{emacsname} packages so @value{tramp} can
-execute remotely, please file a bug report.  @xref{Bug Reports}.
+For integrating other Emacs packages so @value{tramp} can execute
+remotely, please file a bug report.  @xref{Bug Reports}.
 
 
 @subsection Running remote programs that create local X11 windows
@@ -2580,11 +2435,9 @@ when using @value{tramp} between two hosts with different operating
 systems, such as @samp{windows-nt} and @samp{gnu/linux}.  This option
 ensures the correct name of the remote shell program.
 
-@ifset emacs
 Starting with Emacs 24, when @option{explicit-shell-file-name} is
 equal to @code{nil}, calling @code{shell} interactively will prompt
 for a shell name.
-@end ifset
 
 
 @subsection Running @code{shell-command} on a remote host
@@ -2602,9 +2455,7 @@ host.  Example:
 @command{tail} command outputs continuously to the local buffer,
 @file{*Async Shell Command*}
 
-@ifset emacs
 @kbd{M-x auto-revert-tail-mode} runs similarly showing continuous output.
-@end ifset
 
 
 @subsection Running @code{eshell} on a remote host
@@ -2627,9 +2478,8 @@ uid=0(root) gid=0(root) groups=0(root)
 @b{@trampfn{sudo,root@@host,/etc} $}
 @end example
 
-@ifset emacs
-@code{eshell} in @value{emacsname} 23.2 added custom @code{su} and
-@code{sudo} commands that set the default directory correctly for the
+@code{eshell} in Emacs 23.2 added custom @code{su} and @code{sudo}
+commands that set the default directory correctly for the
 @file{*eshell*} buffer.  @value{tramp} silently updates
 @code{tramp-default-proxies-alist} with an entry for this directory
 (@pxref{Multi-hops}):
@@ -2646,7 +2496,6 @@ File is not readable: @trampfn{ssh,user@@remotehost,/etc/shadow}
 uid=0(root) gid=0(root) groups=0(root)
 @b{@trampfn{su,root@@remotehost,/root} $}
 @end example
-@end ifset
 
 
 @anchor{Running a debugger on a remote host}
@@ -2656,11 +2505,9 @@ uid=0(root) gid=0(root) groups=0(root)
 @cindex perldb
 
 @file{gud.el} provides a unified interface to symbolic debuggers
-@ifset emacs
 @ifinfo
-(@ref{Debuggers, , , @value{emacsdir}}).
+(@ref{Debuggers, , , emacs}).
 @end ifinfo
-@end ifset
 @value{tramp} can run debug on remote hosts by calling @code{gdb}
 with a remote file name:
 
@@ -2670,8 +2517,8 @@ with a remote file name:
 @end example
 
 Relative file names are based on the remote default directory.  When
-@file{myprog.pl} exists in @file{@trampfn{ssh,host,/home/user}},
-valid calls include:
+@file{myprog.pl} exists in @file{@trampfn{ssh,host,/home/user}}, valid
+calls include:
 
 @example
 @kbd{M-x perldb @key{RET}}
@@ -2727,9 +2574,8 @@ the internal representation of a remote connection.  When called
 interactively, this command lists active remote connections in the
 minibuffer.  Each connection is of the format
 @file{@trampfn{method,user@@host,}}.  Flushing remote connections also
-cleans the password
-cache (@pxref{Password handling}), file cache, connection cache
-(@pxref{Connection caching}), and connection buffers.
+cleans the password cache (@pxref{Password handling}), file cache,
+connection cache (@pxref{Connection caching}), and connection buffers.
 @end deffn
 
 @deffn Command tramp-cleanup-this-connection
@@ -2772,11 +2618,9 @@ To subscribe to the mailing list, visit:
 @uref{http://lists.gnu.org/mailman/listinfo/tramp-devel/, the
 @value{tramp} Mail Subscription Page}.
 
-@ifset emacs
 @ifset installchapter
 Before sending a bug report, run the test suite first @ref{Testing}.
 @end ifset
-@end ifset
 
 @findex tramp-bug
 Check if the bug or problem is already addressed in @xref{Frequently
@@ -2835,8 +2679,7 @@ Where is the latest @value{tramp}?
 @item
 Which systems does it work on?
 
-The package works successfully on Emacs 22, Emacs 23, Emacs 24, Emacs
-25, XEmacs 21 (starting with 21.4), and SXEmacs 22.
+The package works successfully on Emacs 23, Emacs 24, and Emacs 25.
 
 While Unix and Unix-like systems are the primary remote targets,
 @value{tramp} has equal success connecting to other platforms, such as
@@ -2984,9 +2827,9 @@ Host *
 
 @value{tramp} overwrites @code{ControlPath} settings when initiating
 @command{ssh} sessions.  @value{tramp} does this to fend off a stall
-if a master session opened outside the @value{emacsname} session is no
-longer open.  That is why @value{tramp} prompts for the password again
-even if there is an @command{ssh} already open.
+if a master session opened outside the Emacs session is no longer
+open.  That is why @value{tramp} prompts for the password again even
+if there is an @command{ssh} already open.
 
 Some @command{ssh} versions support a @code{ControlPersist} option,
 which allows you to set the @code{ControlPath} provided the variable
@@ -3046,8 +2889,8 @@ When testing, ensure the remote shell is the same shell
 @item
 How to get notified after @value{tramp} completes file transfers?
 
-Make @value{emacsname} beep after reading from or writing to the
-remote host with the following code in @file{~/.emacs} file.
+Make Emacs beep after reading from or writing to the remote host with
+the following code in @file{~/.emacs} file.
 
 @lisp
 (defadvice tramp-handle-write-region
@@ -3070,84 +2913,22 @@ remote host with the following code in @file{~/.emacs} file.
 @end lisp
 
 
-@ifset emacs
 @item
-How to get a Visual Warning when working with @samp{root} privileges
-
-Get a modeline indication when working with @samp{root} privileges
-with the following code (tested with @value{emacsname} 22.1) in
-@file{~/.emacs} file:
+How to get a Visual Warning when working with @samp{root} privileges?
+Host indication in the mode line?
 
-@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-hook 'my-mode-line-function)
-(add-hook 'dired-mode-hook 'my-mode-line-function)
-@end lisp
-@end ifset
+Install @file{tramp-theme} from GNU ELPA via Emacs' Package Manager.
+Enable it via @kbd{M-x load-theme @key{RET} tramp}.  Further
+customization is explained in variable
+@code{tramp-theme-face-remapping-alist}.
 
 
-@ifset emacs
-@item
-How to get host indication in the mode line?
-
-The following code (tested with @value{emacsname} 22.1) in
-@file{~/.emacs} file shows it:
-
-@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
-
-The mode line in @value{emacsname} 23.1 and later versions now
-contains an indication if @code{default-directory} for the current
-buffer is on a remote host.  Moreover, the corresponding tool-tip
-shows the remote host name.  The above @code{:eval} clause can also be
-simplified to show the host name in the mode line:
-
-@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
 Remote host does not understand default options for directory listing
 
-@value{emacsname} computes the @command{dired} options based on the
-local host but if the remote host cannot understand the same
-@command{ls} command, then set them with a hook as follows:
+Emacs computes the @command{dired} options based on the local host but
+if the remote host cannot understand the same @command{ls} command,
+then set them with a hook as follows:
 
 @lisp
 (add-hook
@@ -3156,7 +2937,6 @@ local host but if the remote host cannot understand the same
    (when (file-remote-p default-directory)
      (setq dired-actual-switches "-al"))))
 @end lisp
-@end ifset
 
 
 @item
@@ -3235,8 +3015,8 @@ completion can further reduce key strokes: @kbd{C-x C-f
 Use environment variables to expand long strings
 
 For long file names, set up environment variables that are expanded in
-the minibuffer.  Environment variables are set either outside
-@value{emacsname} or inside @value{emacsname} with Lisp:
+the minibuffer.  Environment variables are set either outside Emacs or
+inside Emacs with Lisp:
 
 @lisp
 (setenv "xy" "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}")
@@ -3250,7 +3030,7 @@ minibuffer.
 
 @item Define own keys:
 
-Redefine another key sequence in @value{emacsname} for @kbd{C-x C-f}:
+Redefine another key sequence in Emacs for @kbd{C-x C-f}:
 
 @lisp
 (global-set-key
@@ -3320,76 +3100,40 @@ The minibuffer expands for further editing.
 
 Use bookmarks to save Tramp file names.
 @ifinfo
-@pxref{Bookmarks, , , @value{emacsdir}}.
+@pxref{Bookmarks, , , emacs}.
 @end ifinfo
 
 Upon visiting a location with @value{tramp}, save it as a bookmark with
-@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
 
 To revisit that bookmark:
-@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.
+@file{recentf} remembers visited places.
 @ifinfo
-@ifset emacs
-@pxref{File Conveniences, , , @value{emacsdir}}.
-@end ifset
-@ifset xemacs
-@pxref{recent-files, , , edit-utils}.
-@end ifset
+@pxref{File Conveniences, , , emacs}.
 @end ifinfo
 
 Keep remote file names in the recent list without have to check for
 their accessibility through remote access:
 
 @lisp
-@ifset emacs
 (recentf-mode 1)
-@end ifset
-@ifset xemacs
-(recent-files-initialize)
-(add-hook
- 'find-file-hook
- (lambda ()
-   (when (file-remote-p (buffer-file-name))
-     (recent-files-make-permanent)))
- 'append)
-@end ifset
 @end lisp
 
-Reaching recently opened files:
-@ifset emacs
-@kbd{@key{menu-bar} @key{file} @key{Open Recent}}.
-@end ifset
-@ifset xemacs
-@kbd{@key{menu-bar} @key{Recent Files}}.
-@end ifset
+Reaching recently opened files: @kbd{@key{menu-bar} @key{file}
+@key{Open Recent}}.
 
-@ifset emacs
 @item Use filecache:
 
 Since @file{filecache} remembers visited places, add the remote
 directory to the cache:
 
 @lisp
+@c `with-eval-after-load' has been introduced with Emacs 24.4.  Shall
+@c be used when appropriate.
 (eval-after-load "filecache"
   '(file-cache-add-directory
     "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))
@@ -3397,18 +3141,16 @@ directory to the cache:
 
 Then use directory completion in the minibuffer with @kbd{C-x C-f
 C-@key{TAB}}.
-@end ifset
 
-@ifset emacs
 @item Use bbdb:
 
-@file{bbdb} has a built-in feature for @value{ftppackagename} files,
-which also works for @value{tramp} file names.
+@file{bbdb} has a built-in feature for Ange FTP files, which also
+works for @value{tramp} file names.
 @ifinfo
 @pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}.
 @end ifinfo
 
-Load @file{bbdb} in @value{emacs}:
+Load @file{bbdb} in Emacs:
 
 @lisp
 (require 'bbdb)
@@ -3428,23 +3170,17 @@ a method and user name where needed.  Examples:
 @end example
 
 In BBDB buffer, access an entry by pressing the key @key{F}.
-@end ifset
 
 @end enumerate
 
 Thanks to @value{tramp} users for contributing to these recipes.
 
 @item
-Why saved multi-hop file names do not work in a new @value{emacsname}
-session?
+Why saved multi-hop file names do not work in a new Emacs session?
 
 When saving ad-hoc multi-hop @value{tramp} file names (@pxref{Ad-hoc
-multi-hops}) via bookmarks, recent files,
-@ifset emacs
-filecache, bbdb,
-@end ifset
-or another package, use the full ad-hoc file name including all hops,
-like
+multi-hops}) via bookmarks, recent files, filecache, bbdb, or another
+package, use the full ad-hoc file name including all hops, like
 @file{@trampfn{ssh,bird@@bastion|ssh@value{postfixhop}news.my.domain,/opt/news/etc}}.
 
 Alternatively, when saving abbreviated multi-hop file names
@@ -3453,13 +3189,12 @@ option @code{tramp-save-ad-hoc-proxies} must be set non-@code{nil}
 value.
 
 
-@ifset emacs
 @item
-How to connect to a remote @value{emacsname} session using @value{tramp}?
+How to connect to a remote Emacs session using @value{tramp}?
 
 Configure Emacs Client
 @ifinfo
-(@pxref{Emacs Server, , , @value{emacsdir}}).
+(@pxref{Emacs Server, , , emacs}).
 @end ifinfo
 
 Then on the remote host, start the Emacs Server:
@@ -3500,7 +3235,6 @@ wrapper script:
 @example
 export EDITOR=/path/to/emacsclient.sh
 @end example
-@end ifset
 
 
 @item
@@ -3537,35 +3271,25 @@ Disable remote directory tracking mode:
 How to disable @value{tramp}?
 
 @itemize @minus
-@ifset emacs
 @item
-To keep @value{ftppackagename} as default the remote files access
-package, set this in @file{.emacs}:
+To keep Ange FTP as default the remote files access package, set this
+in @file{.emacs}:
 
 @lisp
 (setq tramp-default-method "ftp")
 @end lisp
-@end ifset
 
 @item
-To disable both
-@ifset emacs
-@value{tramp} (and @value{ftppackagename}),
-@end ifset
-@ifset xemacs
-@value{tramp},
-@end ifset
-set @code{tramp-mode} to @code{nil} in @file{.emacs}.
+To disable both @value{tramp} (and Ange FTP), set @code{tramp-mode} to
+@code{nil} in @file{.emacs}.
 
 @lisp
 (setq tramp-mode nil)
 @end lisp
 
 @item
-To unload @value{tramp}, type @kbd{M-x tramp-unload-tramp}.
-@ifset emacs
-Unloading @value{tramp} resets @value{ftppackagename} plugins also.
-@end ifset
+To unload @value{tramp}, type @kbd{M-x tramp-unload-tramp}.  Unloading
+@value{tramp} resets Ange FTP plugins also.
 @end itemize
 @end itemize
 
@@ -3576,9 +3300,7 @@ Unloading @value{tramp} resets @value{ftppackagename} plugins also.
 
 @menu
 * Localname deconstruction::    Splitting a localname into its component parts.
-@ifset emacs
 * External packages::           Integrating with external Lisp packages.
-@end ifset
 @end menu
 
 
@@ -3596,7 +3318,6 @@ file name.  By relying on the original handlers for localnames,
 handlers.
 
 
-@ifset emacs
 @node External packages
 @section Integrating with external Lisp packages
 @subsection File name completion.
@@ -3654,7 +3375,6 @@ attributes cache in its process sentinel with this code:
 Since @value{tramp} traverses subdirectories starting with the
 root-directory, it is most likely sufficient to make the
 @code{default-directory} of the process buffer as the root directory.
-@end ifset
 
 
 @node Traces and Profiles
@@ -3685,7 +3405,7 @@ set the @code{tramp-verbose} level to 6 (@pxref{Bug Reports}).
 
 The debug buffer is in
 @ifinfo
-@ref{Outline Mode, , , @value{emacsdir}}.
+@ref{Outline Mode, , , emacs}.
 @end ifinfo
 @ifnotinfo
 Outline Mode.
@@ -3694,7 +3414,7 @@ In this buffer, messages can be filtered by their level.  To see
 messages up to verbosity level 5, enter @kbd{C-u 6 C-c C-q}.
 @ifinfo
 Other navigation keys are described in
-@ref{Outline Visibility, , , @value{emacsdir}}.
+@ref{Outline Visibility, , , emacs}.
 @end ifinfo
 
 @value{tramp} handles errors internally.  But to get a Lisp backtrace,
@@ -3722,62 +3442,6 @@ call traces.  Disable @code{tramp-read-passwd} and
 being written to @file{*trace-output*}.
 
 
-@node Issues
-@chapter Debatable Issues and What Was Decided
-
-@itemize @bullet
-@item The uuencode method does not always work.
-
-@command{uudecode} on some systems cannot write to stdout, but
-@value{tramp} depends on encoding and decoding programs to be able to
-read from stdin and write to stdout.
-
-We can find ways to circumvent @command{uudecode}'s ability to write
-to stdout, such as writing to a temporary file and then piping that to
-stdout.
-
-But I have decided not to implement workarounds as they are too
-fragile to work reliably.  Some on systems, @value{tramp} will not have
-uuencode method.
-
-@item The @value{tramp} file name syntax differs between Emacs and XEmacs.
-
-The Emacs maintainers wish to use a unified file name syntax for
-Ange-FTP and @value{tramp} so that users don't have to learn yet
-another syntax though it is okay to learn new extensions.
-
-For the XEmacs maintainers, the disruption from a unified file name
-syntax are not worth the gains.  Firstly, the XEmacs package system
-relies on EFS for downloading new packages and therefore is already
-installed.  On the other hand, @value{tramp} is not installed by
-default in XEmacs.  Unifying will require @value{tramp} installed from
-the start.
-
-@ifset xemacs
-@strong{Note:} To make the syntax similar to @value{ftppackagename},
-make this change to the init file:
-
-@lisp
-(setq tramp-unified-filenames t)
-(require 'tramp)
-@end lisp
-
-To disable auto loading @value{emacsname} @value{tramp} package, set
-file permissions of
-@file{@dots{}/xemacs-packages/lisp/tramp/auto-autoloads.el*} to
-@code{000}.
-
-When using unified file names, @value{emacsname} download sites are
-added to @code{tramp-default-method-alist} with default method of
-@option{ftp} @xref{Default Method} for proper working of the
-@value{emacsname} package system.
-
-The syntax for unified file names is described in the @value{tramp} manual
-for @value{emacsothername}.
-@end ifset
-@end itemize
-
-
 @node GNU Free Documentation License
 @appendix GNU Free Documentation License
 @include doclicense.texi
index 0cdf08daee1df30617e655fc6543ccd8a6b4e677..cdd008bc8651dc157e2c7bdeb99f3298d1a978f2 100644 (file)
@@ -8,7 +8,7 @@
 @c In the Tramp GIT, 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.2.13.25.1
+@set trampver 2.3.0-pre
 
 @c Other flags from configuration
 @set instprefix /usr/local
 @set infodir /usr/local/share/info
 
 @c Formatting of the tramp program name consistent.
-@set tramp @sc{tramp}
+@set tramp @sc{Tramp}
 
-@c Whether or not describe GVFS integration.
-@ifclear noemacsgvfs
-@set emacsgvfs
-@end ifclear
-
-@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
+@c Some flags which define the remote file name syntax.
+@ifclear unified
+@ifclear separate
+@set unified
 @end ifclear
 @end ifclear
 
-@c Emacs values.
-@ifset emacs
-@set emacsname          Emacs
-@set emacsdir           emacs
-@set ftppackagename     Ange-FTP
+@ifset unified
 @set prefix             /
 @set prefixhop
 @set postfix            :
 @set postfixhop         :
 @set ipv6prefix         [
 @set ipv6postfix        ]
-@set emacsothername     XEmacs
-@set emacsotherdir      xemacs
-@set emacsotherfilename tramp-xemacs.html
 @end ifset
 
-@c XEmacs counterparts.
-@ifset xemacs
-@set emacsname          XEmacs
-@set emacsdir           xemacs
-@set ftppackagename     EFS
+@ifset separate
 @set prefix             /[
 @set prefixhop          [
 @set postfix            ]
 @set postfixhop         /
 @set ipv6prefix
 @set ipv6postfix
-@set emacsothername     Emacs
-@set emacsotherdir      emacs
-@set emacsotherfilename tramp-emacs.html
 @end ifset
index a3c6b88ea05d3f43f8c1d02318f1c49947c6e4a9..097f626e71893aca4db457bb241bbd02362f58cd 100644 (file)
@@ -289,7 +289,7 @@ string or a parsed URL structure.  If it is a string, that string is
 passed through @code{url-encode-url} before using it, to ensure that
 it is properly URI-encoded (@pxref{URI Encoding}).
 
-@defun url-retrieve-synchronously url silent no-cookies
+@defun url-retrieve-synchronously url &optional silent no-cookies timeout
 This function synchronously retrieves the data specified by @var{url},
 and returns a buffer containing the data.  The return value is
 @code{nil} if there is no data associated with the URL (as is the case
@@ -297,7 +297,9 @@ for @code{dired}, @code{info}, and @code{mailto} URLs).
 
 If the optional argument @var{silent} is non-@code{nil}, progress
 messages are suppressed.  If the optional argument @var{no-cookies} is
-non-@code{nil}, cookies are not stored or sent.
+non-@code{nil}, cookies are not stored or sent.  If the optional
+argument @var{timeout} is non-@code{nil}, it should be a number that
+says (in seconds) how long to wait for a response before giving up.
 @end defun
 
 @defun url-retrieve url callback &optional cbargs silent no-cookies
@@ -421,6 +423,12 @@ cookies, if there are any.  You can remove a cookie using the
 @kbd{C-k} (@code{url-cookie-delete}) command.
 @end defun
 
+@defun url-cookie-delete-cookies &optional regexp
+This function takes a regular expression as its parameters and deletes
+all cookies from that domain.  If @var{regexp} is @code{nil}, delete
+all cookies.
+@end defun
+
 @defopt url-cookie-file
 The file in which cookies are stored, defaulting to @file{cookies} in
 the directory specified by @code{url-configuration-directory}.
@@ -1335,10 +1343,16 @@ Connect directly.
 @end defopt
 
 @defopt url-user-agent
-The User Agent string used for sending HTTP/HTTPS requests.  The value
-should be a string or a function of no arguments that returns a
-string.  The default value is @w{@samp{User-Agent: @var{package-name}
-URL/Emacs}}, where @var{package-name} is the value of
+The User Agent string used for sending @acronym{HTTP}/@acronym{HTTPS}
+requests.  The value should be @code{nil}, which means that no
+@samp{User-Agent} header is generated, @code{default}, which means
+that a string is generated based on the setting of
+@code{url-privacy-leve}, a string or a function of no arguments that
+returns a string.
+
+The default is @code{default}, which means that the
+@w{@samp{User-Agent: @var{package-name} URL/Emacs}} string will be
+generated, where @var{package-name} is the value of
 @code{url-package-name} and its version, if they are non-@code{nil}.
 @end defopt
 
index 3f81f67beb4350fb23274f766121223105e4f477..6b169f3c8e6f7d6227940d1d3919910aad9bf0ce 100644 (file)
@@ -2591,7 +2591,7 @@ occurrence of the pattern to search for.
 
 Note: while loading initially, Viper binds this mouse action only if it is
 not already bound to something else.  If you want to use the mouse-search
-feature, and the @kbd{Meta-Shift-Mouse-1} mouse action is already bound to
+feature, and the @kbd{Meta-Shift-mouse-1} mouse action is already bound to
 something else, you can rebind the mouse-search feature by setting
 @code{viper-mouse-search-key} to something else in
 your Viper customization file:
@@ -2669,8 +2669,8 @@ purpose of mouse search and mouse insert.  By default, this is set to
 @code{double-click-time} in Emacs and to
 @code{mouse-track-multi-click-time} milliseconds in XEmacs.
 @end table
-@kindex @kbd{S-Mouse-1}
-@kindex @kbd{S-Mouse-2}
+@kindex @kbd{S-mouse-1}
+@kindex @kbd{S-mouse-2}
 @kindex @kbd{meta shift button1up}
 @kindex @kbd{meta shift button2up}
 @vindex @code{viper-multiclick-timeout}
@@ -4428,7 +4428,7 @@ The following two mouse actions are normally bound to special search and
 insert commands in of Viper:
 
 @table @kbd
-@item S-Mouse-1
+@item S-mouse-1
 Holding Shift and clicking mouse button 1 will
 initiate search for
 a region under the mouse pointer.
@@ -4437,7 +4437,7 @@ binding only if this mouse action is not
 already bound to something else.
 @xref{Viper Specials}, for more information.
 
-@item S-Mouse-2
+@item S-mouse-2
 Holding Shift and clicking button 2 of the mouse will
 insert a region surrounding the mouse pointer.
 This command can also take a prefix argument.
@@ -4445,8 +4445,8 @@ Note: Viper sets this binding only if this mouse action is not
 already bound to something else.
 @xref{Viper Specials}, for more details.
 @end table
-@kindex @kbd{S-Mouse-1}
-@kindex @kbd{S-Mouse-2}
+@kindex @kbd{S-mouse-1}
+@kindex @kbd{S-mouse-2}
 @kindex @kbd{meta button1up}
 @kindex @kbd{meta button2up}
 
index 49606ed969287b384558500abde93763957008d3..953bcae3ef27ad3bbecf343cb3b5cfaa2fb46b6d 100644 (file)
@@ -243,8 +243,8 @@ If point is not located on a button, invoke the binding in
 @code{widget-global-map} (by default the global map).
 @end deffn
 
-@kindex Mouse-2 @r{(on button widgets})
-@item Mouse-2
+@kindex mouse-2 @r{(on button widgets})
+@item mouse-2
 @deffn Command widget-button-click @var{event}
 Invoke the button at the location of the mouse pointer.  If the mouse
 pointer is located in an editable text field, invoke the binding in
@@ -456,7 +456,7 @@ There is a standard widget keymap which you might find useful.
 @findex widget-button-click
 @defvr Const widget-keymap
 @key{TAB} and @kbd{C-@key{TAB}} are bound to @code{widget-forward} and
-@code{widget-backward}, respectively.  @key{RET} and @kbd{Mouse-2}
+@code{widget-backward}, respectively.  @key{RET} and @kbd{mouse-2}
 are bound to @code{widget-button-press} and
 @code{widget-button-click}.
 @end defvr
index 59320d2368492aafc2fe95c7b514cb8416c7e9cd..f1fbba6151b769fd631047a1d7e66829d3d51bda 100644 (file)
@@ -671,19 +671,19 @@ to other man pages.  If these man pages are installed then WoMan can
 easily be directed to follow the reference, i.e., to find and format the
 man page.  When the mouse is passed over a correctly formatted reference
 it is highlighted, in which case clicking the middle button
-@kbd{Mouse-2} will cause WoMan to follow the reference.  Alternatively,
+@kbd{mouse-2} will cause WoMan to follow the reference.  Alternatively,
 when point is over such a reference the key @key{RET} will follow the
 reference.
 
 Any word in the buffer can be used as a reference by clicking
-@kbd{Mouse-2} over it provided the Meta key is also used (although in
+@kbd{mouse-2} over it provided the Meta key is also used (although in
 general such a ``reference'' will not lead to a man page).
 Alternatively, the key @kbd{r} allows completion to be used to select a
 reference to follow, based on the word at point as default.
 
 @table @kbd
-@item @kbd{Mouse-2}
-@kindex Mouse-2
+@item @kbd{mouse-2}
+@kindex mouse-2
 @findex woman-mouse-2
 Run WoMan with word under mouse as topic (@code{woman-mouse-2}).  The
 word must be mouse-highlighted unless @code{woman-mouse-2} is used with
index eef67dad500659533d4a30c8e81b6a52082fc49d..d5d582902ab9b57f4762cb151721f7467145f31a 100644 (file)
--- a/etc/DEBUG
+++ b/etc/DEBUG
@@ -144,8 +144,8 @@ These are displayed as integer values (or structures, if you used the
 "--enable-check-lisp-object-type" option at configure time) that are
 hard to interpret, especially if they represent long lists.  You can
 use the 'pp' command to display them in their Lisp form.  That command
-displays its output on the standard error stream (on GNU/Linux, you
-can redirect that to a file using "M-x redirect-debugging-output").
+displays its output on the standard error stream, which you
+can redirect to a file using "M-x redirect-debugging-output".
 This means that if you attach GDB to a running Emacs that was invoked
 from a desktop icon, chances are you will not see the output at all,
 or it will wind up in an obscure place (check the documentation of
@@ -250,8 +250,8 @@ To see the current value of a Lisp Variable, use 'pv variable'.
 These commands send their output to stderr; if that is closed or
 redirected to some file you don't know, you won't see their output.
 This is particularly so for Emacs invoked on MS-Windows from the
-desktop shortcut.  On GNU/Linux, you can use the command
-'redirect-debugging-output' to redirect stderr to a file.
+desktop shortcut.  You can use the command 'redirect-debugging-output'
+to redirect stderr to a file.
 
 Note: It is not a good idea to try 'pr', 'pp', or 'pv' if you know that Emacs
 is in deep trouble: its stack smashed (e.g., if it encountered SIGSEGV
index 085f169e85bdb4f91856d8f55de899f20b5eb8be..5562dc260358f5dbe01c51c7aa7555d2e0936c94 100644 (file)
@@ -105,12 +105,10 @@ the list at the end of this file.
 
   Emacs versions later than 24.4 will not compile on Irix by default.
   (Note that SGI stopped supporting Irix in December 2013.)
-  You should be able to work around the problem either by porting the
-  Emacs undumping code to GCC under Irix, or by configuring --with-wide-int.
   Older versions of Emacs 24 (and 23?) also had problems on Irix.
   It *may* be possible to build Emacs <= 24.4 on Irix 6.5 with an old
   version (3.1) of gcc.  Newer versions of gcc may not work.
-  See <http://debbugs.gnu.org/9684>.
+  See <http://bugs.gnu.org/9684>.
 
 \f
 * Obsolete platforms
index b5d2b44d39fff0e99f190dfe7d8d2707e009639f..420c14a824b1cb430a2c40d23e3a450999f4730a 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -22,6 +22,447 @@ Temporary note:
 When you add a new item, use the appropriate mark if you are sure it applies,
 otherwise leave it unmarked.
 
+\f
+* Installation Changes in Emacs 25.2
+
+** The new option 'configure --enable-gcc-warnings=warn-only' causes
+GCC to issue warnings without stopping the build.  This behavior is
+now the default in developer builds.  As before, use
+'--disable-gcc-warnings' to suppress GCC's warnings, and
+'--enable-gcc-warnings' to stop the build if GCC issues warnings.
+
++++
+** The Emacs server now has socket-launching support.  This allows
+socket based activation, where an external process like systemd can
+invoke the Emacs server process upon a socket connection event and
+hand the socket over to Emacs.  Emacs uses this socket to service
+emacsclient commands.  This new functionality can be disabled with the
+configure option '--disable-libsystemd'.
+
+** New configure option '--disable-build-details' attempts to build an
+Emacs that is more likely to be reproducible; that is, if you build
+and install Emacs twice, the second Emacs is a copy of the first.
+Deterministic builds omit the build date from the output of the
+emacs-version and erc-cmd-SV functions, and the leave the following
+variables nil: emacs-build-system, emacs-build-time,
+erc-emacs-build-time.
+
+** Emacs no longer works on IRIX.  We expect that Emacs users are not
+affected by this, as SGI stopped supporting IRIX in December 2013.
+
+\f
+* Startup Changes in Emacs 25.2
+
+\f
+* Changes in Emacs 25.2
+
+---
+** `find-library-name' will now fall back on looking at `load-history'
+to try to locate libraries that have been loaded with an explicit path
+outside `load-path'.
+
++++
+** Faces in `minibuffer-prompt-properties' no longer overwrite properties
+in the text in functions like `read-from-minibuffer', but instead are
+added to the end of the face list.  This allows users to say things
+like `(read-from-minibuffer (propertize "Enter something: " 'face 'bold))'.
+
++++
+** The new variable `extended-command-suggest-shorter' has been added
+to control whether to suggest shorter `M-x' commands or not.
+
+---
+** icomplete now respects `completion-ignored-extensions'.
+
++++
+** Non-breaking hypens are now displayed with the `nobreak-hyphen'
+face instead of the `escape-glyph' face.
+
+---
+** `C-x h' (`mark-whole-buffer') will now avoid marking the prompt
+part of minibuffers.
+
+---
+** `find-library' now takes a prefix argument to pop to a different
+window.
+
+** `find-library', `help-function-def' and `help-variable-def' now run
+`find-function-after-hook'.
+
+---
+** 'process-attributes' on Darwin systems now returns more information.
+
++++
+** Several accessors for the value returned by 'file-attributes'
+have been added.  They are: 'file-attribute-type',
+'file-attribute-link-number', 'file-attribute-user-id',
+'file-attribute-group-id', 'file-attribute-access-time',
+'file-attribute-modification-time',
+'file-attribute-status-change-time', 'file-attribute-size',
+'file-attribute-modes', 'file-attribute-inode-number', and
+'file-attribute-device-number'.
+
++++
+** The new function 'buffer-hash' computes compute a fast, non-consing
+hash of a buffer's contents.
+
+---
+** 'fill-paragraph' no longer marks the buffer as changed unless it
+actually changed something.
+
+---
+** The locale language name 'ca' is now mapped to the language
+environment 'Catalan', which has been added.
+
+---
+** 'align-regexp' has a separate history for its interactive argument.
+'align-regexp' no longer shares its history with all other
+history-less functions that use 'read-string'.
+
++++
+** The networking code has been reworked so that it's more
+asynchronous than it was (when specifying :nowait t in
+'make-network-process').  How asynchronous it is varies based on the
+capabilities of the system, but on a typical GNU/Linux system the DNS
+resolution, the connection, and (for TLS streams) the TLS negotiation
+are all done without blocking the main Emacs thread.  To get
+asynchronous TLS, the TLS boot parameters have to be passed in (see
+the manual for details).
+
+Certain process oriented functions (like 'process-datagram-address')
+will block until socket setup has been performed.  The recommended way
+to deal with asynchronous sockets is to avoid interacting with them
+until they have changed status to "run".  This is most easily done
+from a process sentinel.
+
+** 'make-network-process' and 'open-network-stream' sometimes allowed
+:service to be an integer string (e.g., :service "993") and sometimes
+required an integer (e.g., :service 993).  This difference has been
+eliminated, and integer strings work everywhere.
+
+** It is possible to disable attempted recovery on fatal signals.
+
+Two new variables support disabling attempts to recover from stack
+overflow and to avoid automatic auto-save when Emacs is delivered a
+fatal signal.  'attempt-stack-overflow-recovery', if set to 'nil',
+will disable attempts to recover from C stack overflows; Emacs will
+then crash as with any other fatal signal.
+'attempt-orderly-shutdown-on-fatal-signal', if set to 'nil', will
+disable attempts to auto-save the session and shut down in an orderly
+fashion when Emacs receives a fatal signal; instead, Emacs will
+terminate immediately.  Both variables are non-'nil' by default.
+These variables are for users who would like to avoid the small
+probability of data corruption due to techniques Emacs uses to recover
+in these situations.
+
++++
+** A second dir-local file (.dir-locals-2.el) is now accepted.
+See the variable 'dir-locals-file-2' for more information.
+
+---
+** International domain names (IDNA) are now encoded via the new
+puny.el library, so that one can visit web sites with non-ASCII URLs.
+
++++
+** The new 'timer-list' command lists all active timers in a buffer,
+where you can cancel them with the 'c' command.
+
++++
+** The new function 'read-multiple-choice' prompts for multiple-choice
+questions, with a handy way to display help texts.
+
+\f
+* Editing Changes in Emacs 25.2
+
++++
+** New bindings for 'query-replace-map'.
+'undo', undo the last replacement; bound to 'u'.
+'undo-all', undo all replacements; bound to 'U'.
+
+\f
+* Changes in Specialized Modes and Packages in Emacs 25.2
+
+** Compilation mode
+
+---
+*** Messages from CMake are now recognized.
+
+** Dired
+
++++
+*** In wdired, when editing files to contain slash characters,
+the resulting directories are automatically created.  Whether to do
+this is controlled by the 'wdired-create-parent-directories' variable.
+
++++
+*** 'W' is now bound to 'browse-url-of-dired-file', and is useful for
+viewing HTML files and the like.
+
+** eww
+
++++
+*** A new 's' command for switching to another eww buffer via the minibuffer.
+
+---
+*** The 'o' command ('shr-save-contents') has moved to 'O' to avoid collision
+with the 'o' command from 'image-map'.
+
++++
+*** A new command 'C' ('eww-toggle-colors') can be used to toggle
+whether to use the HTML-specified colors or not.  The user can also
+customize the 'shr-use-colors' variable.
+
+---
+*** Images that are being loaded are now marked with gray
+"placeholder" images of the size specified by the HTML.  They are then
+replaced by the real images asynchronously, which will also now
+respect width/height HTML specs (unless they specify widths/heights
+bigger than the current window).
+
+** Images
+
++++
+*** Images are automatically scaled before displaying based on the
+'image-scaling-factor' variable (if Emacs supports scaling the images
+in question).
+
++++
+*** Images inserted with 'insert-image' and related functions get a
+keymap put into the text properties (or overlays) that span the
+image.  This keymap binds keystrokes for manipulating size and
+rotation, as well as saving the image to a file.  These commands are
+also available in 'image-mode'.
+
++++
+*** A new library for creating and manipulating SVG images has been
+added.  See the "SVG Images" section in the lispref manual for
+details.
+
++++
+*** New setf-able function to access and set image parameters is
+provided: 'image-property'.
+
++++
+** The commands that add ChangeLog entries now prefer a VCS root directory
+for the ChangeLog file, if none already exists.  Customize
+'change-log-directory-files' to nil for the old behavior.
+
+---
+** Support for non-string values of 'time-stamp-format' has been removed.
+
+** Message
+
+---
+*** 'message-use-idna' now defaults to t (because Emacs comes with
+built-in IDNA support now).
+
+---
+*** The 'message-valid-fqdn-regexp' variable has been removed, since
+there are now top-level domains added all the time.  Message will no
+longer warn about sending emails to top-level domains it hasn't heard
+about.
+
+*** 'message-beginning-of-line' (bound to C-a) understands folded headers.
+In 'visual-line-mode' it will look for the true beginning of a header
+while in non-'visual-line-mode' it will move the point to the indented
+header's value.
+
+** Tramp
+
++++
+*** New connection method "sg", which supports editing files under a
+different group ID.
+
++++
+*** New connection method "doas" for OpenBSD hosts.
+
+---
+** 'auto-revert-use-notify' is set back to t in 'global-auto-revert-mode'.
+
+** CSS mode
+
+---
+*** Support for completing attribute values and bang-rules using the
+'completion-at-point' command.
+
++++
+** Emacs now supports character name escape sequences in character and
+string literals.  The syntax variants \N{character name} and
+\N{U+code} are supported.
+
++++
+** Prog mode has some support for multi-mode indentation.
+This allows better indentation support in modes that support multiple
+programming languages in the same buffer, like literate programming
+environments or ANTLR programs with embedded Python code.
+
+A major mode can provide indentation context for a sub-mode through
+the 'prog-indentation-context' variable.  To support this, modes that
+provide indentation should use 'prog-widen' instead of 'widen' and
+'prog-first-column' instead of a literal zero.  See the node
+"Mode-Specific Indent" in the ELisp manual for more details.
+
+** ERC
+
+*** New variable 'erc-default-port-tls' used to connect to TLS IRC
+servers.
+
+** URL
+
++++
+*** The new function 'url-cookie-delete-cookie' can be used to
+programmatically delete all cookies, or cookies from a specific
+domain.
+
++++
+*** `url-retrieve-synchronously' now takes an optional timeout parameter.
+
+---
+*** The URL package now support HTTPS over proxies supporting CONNECT.
+
++++
+*** 'url-user-agent' now defaults to 'default', and the User-Agent
+string is computed dynamically based on 'url-privacy-level'.
+
+** VC and related modes
+
+---
+*** The VC state indicator in the mode line now defaults to more
+colorful faces to make it more obvious to the user what the state is.
+See the 'vc-faces' customization group.
+
+\f
+* New Modes and Packages in Emacs 25.2
+
+\f
+* Incompatible Lisp Changes in Emacs 25.2
+
++++
+** Resizing a frame no longer runs 'window-configuration-change-hook'.
+Put your function on 'window-size-change-functions' instead.
+
+** 'C-up', 'C-down', 'C-left' and 'C-right' are now defined in term
+mode to send the same escape sequences that xterm does.  This makes
+things like forward-word in readline work.
+
+---
+** hideshow mode got four key bindings that are analogous to outline
+mode bindings: 'C-c @ C-a', 'C-c @ C-t', 'C-c @ C-d', and 'C-c @ C-e.'
+
+** The grep/rgrep/lgrep functions will now ask about saving files
+before running.  This is controlled by the 'grep-save-buffers'
+variable.
+
+\f
+* Lisp Changes in Emacs 25.2
+
+** New var syntax-ppss-table to control the syntax-table used in syntax-ppss.
+
+** Autoload files can be generated without timestamps,
+by setting 'autoload-timestamps' to nil.
+FIXME As an experiment, nil is the current default.
+If no insurmountable problems before next release, it can stay that way.
+
+** 'ert-with-function-mocked' of 'ert-x package allows mocking of functions
+in unit tests.
+
+---
+** 'gnutls-boot' now takes a parameter :complete-negotiation that says
+that negotiation should complete even on non-blocking sockets.
+
++++
+** New functions 'window-pixel-width-before-size-change' and
+'window-pixel-height-before-size-change' support detecting which
+window changed size when 'window-size-change-functions' are run.
+
++++
+** New function 'display-buffer-reuse-mode-window' is an action function
+suitable for use in 'display-buffer-alist'. For example, to avoid creating
+a new window when opening man pages when there's already one, use
+(add-to-list 'display-buffer-alist
+     '("\\`\\*Man .*\\*\\'" .
+       (display-buffer-reuse-mode-window
+        (inhibit-same-window . nil)
+        (mode . Man-mode))))
+
+---
+** There is now a new variable 'flyspell-sort-corrections-function'
+that allows changing the way corrections are sorted.
+
+---
+** The new command 'fortune-message' has been added, which displays
+fortunes in the echo area.
+
++++
+** New function 'func-arity' returns information about the argument list
+of an arbitrary function.  This generalizes 'subr-arity' for functions
+that are not built-in primitives.  We recommend using this new
+function instead of 'subr-arity'.
+
++++
+** 'parse-partial-sexp' state has a new element.  Element 10 is
+non-nil when the last character scanned might be the first character
+of a two character construct, i.e., a comment delimiter or escaped
+character.  Its value is the syntax of that last character.
+
++++
+** 'parse-partial-sexp''s state, element 9, has now been confirmed as
+permanent and documented, and may be used by Lisp programs.  Its value
+is a list of currently open parenthesis positions, starting with the
+outermost parenthesis.
+
+---
+** 'read-color' will now display the color names using the color itself
+as the background color.
+
+** The function 'redirect-debugging-output' now works on platforms
+other than GNU/Linux.
+
++++
+** The new function 'string-version-lessp' compares strings by
+interpreting consecutive runs of numerical characters as numbers, and
+compares their numerical values.  According to this predicate,
+"foo2.png" is smaller than "foo12.png".
+
++++
+** The new function 'char-from-name' converts a Unicode name string
+to the corresponding character code.
+
++++
+** New functions 'sxhash-eq' and 'sxhash-eql' return hash codes of a
+Lisp object suitable for use with 'eq' and 'eql' correspondingly.  If
+two objects are 'eq' ('eql'), then the result of 'sxhash-eq'
+('sxhash-eql') on them will be the same.
+
++++
+** Function 'sxhash' has been renamed to 'sxhash-equal' for
+consistency with the new functions.  For compatibility, 'sxhash'
+remains as an alias to 'sxhash-equal'.
+
++++
+** Time conversion functions that accept a time zone rule argument now
+allow it to be OFFSET or a list (OFFSET ABBR), where the integer
+OFFSET is a count of seconds east of Universal Time, and the string
+ABBR is a time zone abbreviation.  The affected functions are
+'current-time-string', 'current-time-zone', 'decode-time',
+'format-time-string', and 'set-time-zone-rule'.
+
+\f
+* Changes in Emacs 25.2 on Non-Free Operating Systems
+
+** Intercepting hotkeys on Windows 7 and later now works better.
+The new keyboard hooking code properly grabs system hotkeys such as
+Win-* and Alt-TAB, in a way that Emacs can get at them before the
+system.  This makes the 'w32-register-hot-key' functionality work
+again on all versions of MS-Windows starting with Windows 7.  On
+Windows NT and later you can now register any hotkey combination.  (On
+Windows 9X, the previous limitations, spelled out in the Emacs manual,
+still apply.)
+
+** `convert-standard-filename' no longer mirrors slashes on MS-Windows.
+Previously, on MS-Windows this function converted slash characters in
+file names into backslashes.  It no longer does that.
+
 \f
 * Installation Changes in Emacs 25.1
 
index be9400bf2647a79a9188d91b46d8fc72c848d053..4288808f407348b53ed50ae779a33babb9bbdbb8 100644 (file)
@@ -542,26 +542,6 @@ Other systems allow to set LD_RUN_PATH in a similar way, but before
 Emacs is linked.  With LD_RUN_PATH set, the linker will include a
 specified run-time search path in the executable.
 
-On some systems, Emacs can crash due to problems with dynamic
-linking.  Specifically, on SGI Irix 6.5, crashes were reported with
-backtraces like this:
-
-  (dbx) where
-   0 strcmp(0xf49239d, 0x4031184, 0x40302b4, 0x12, 0xf0000000, 0xf4923aa, 0x0, 0x492ddb2) ["/xlv22/ficus-jan23/work/irix/lib/libc/libc_n32_M3_ns/strings/strcmp.s":35, 0xfb7e480]
-   1 general_find_symbol(0xf49239d, 0x0, 0x0, 0x0, 0xf0000000, 0xf4923aa, 0x0, 0x492ddb2)
- ["/comp2/mtibuild/v73/workarea/v7.3/rld/rld.c":2140, 0xfb65a98]
-   2 resolve_symbol(0xf49239d, 0x4031184, 0x0, 0xfbdd438, 0x0, 0xf4923aa, 0x0, 0x492ddb2)
- ["/comp2/mtibuild/v73/workarea/v7.3/rld/rld.c":1947, 0xfb657e4]
-   3 lazy_text_resolve(0xd18, 0x1a3, 0x40302b4, 0x12, 0xf0000000, 0xf4923aa, 0x0, 0x492ddb2)
- ["/comp2/mtibuild/v73/workarea/v7.3/rld/rld.c":997, 0xfb64d44]
-   4 _rld_text_resolve(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
- ["/comp2/mtibuild/v73/workarea/v7.3/rld/rld_bridge.s":175, 0xfb6032c]
-
-('rld' is the dynamic linker.)  We don't know why this
-happens, but setting the environment variable LD_BIND_NOW to 1 (which
-forces the dynamic linker to bind all shared objects early on) seems
-to work around the problem.
-
 Please refer to the documentation of your dynamic linker for details.
 
 *** When you run Ispell from Emacs, it reports a "misalignment" error.
@@ -598,17 +578,6 @@ you have a personal configuration file (normally ~/.aspell.conf), it
 can cause this error.  Remove that file, execute 'ispell-kill-ispell'
 in Emacs, and then try spell-checking again.
 
-*** Emacs eats all file descriptors when using kqueue file notifications.
-See <http://debbugs.gnu.org/22814>.
-
-When you have a large number of buffers running auto-revert-mode, and
-Emacs is configured to use the kqueue file notification library, it
-uses an own file descriptor for every watched file.  On systems with a
-small limit of file descriptors allowed per process, like OS X, you
-could run out of file descriptors.  You won't be able to open new files.
-
-auto-revert-use-notify is set to nil in global-auto-revert-mode, therefore.
-
 * Runtime problems related to font handling
 
 ** Characters are displayed as empty boxes or with wrong font under X.
@@ -1940,14 +1909,6 @@ This seems to be a GCC optimization bug that occurs for GCC 4.1.2 (-g
 and -g -O2) and GCC 4.2.3 (-g -O and -g -O2).  You can fix this by
 compiling with GCC 4.2.3 or CC 5.7, with no optimizations.
 
-** Irix
-
-*** Irix: Trouble using ptys, or running out of ptys.
-
-The program mkpts (which may be in '/usr/adm' or '/usr/sbin') needs to
-be set-UID to root, or non-root programs like Emacs will not be able
-to allocate ptys reliably.
-
 * Runtime problems specific to MS-Windows
 
 ** Emacs on Windows 9X requires UNICOWS.DLL
index d26af20985c291b33f31b003762503153e961890..4a1531265a0c3fa05ef83d9fb927a09f159516f5 100644 (file)
@@ -84,6 +84,32 @@ Warning: this expression should have type unit.
   File "/tmp/foo.py", line 10
 
 
+* CMake
+
+symbols: cmake cmake-info
+
+CMake Error at CMakeLists.txt:19 (hurz):
+  Unknown CMake command "hurz".
+CMake Warning at cmake/modules/UseUG.cmake:73 (find_package):
+  Could not find a package configuration file provided by "UG" (requested
+  version 3.11.0) with any of the following names:
+
+    UGConfig.cmake
+    ug-config.cmake
+
+  Add the installation prefix of "UG" to CMAKE_PREFIX_PATH or set "UG_DIR" to
+  a directory containing one of the above files.  If "UG" provides a separate
+  development package or SDK, be sure it has been installed.
+Call Stack (most recent call first):
+  cmake/modules/DuneGridMacros.cmake:19 (include)
+  /home/joe/Projekte/EXA-DUNE/patches/dune-common/cmake/modules/DuneMacros.cmake:556 (include)
+  /home/joe/Projekte/EXA-DUNE/patches/dune-common/cmake/modules/DuneMacros.cmake:694 (dune_process_dependency_macros)
+  CMakeLists.txt:22 (dune_project)
+
+
+-- Could NOT find UG (missing:  UG_DIR HAVE_UG)
+
+
 * Apollo cc, 4.3BSD fc & IBM RS6000/AIX xlc compiler & Microtec mcc68k & GNAT (July 94)
 
 symbol: comma
diff --git a/etc/nxml/00000-0007F.el b/etc/nxml/00000-0007F.el
deleted file mode 100644 (file)
index 4fc236b..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-(nxml-define-char-name-set 'basic-latin
-  '(("SPACE" #x0020)
-    ("EXCLAMATION MARK" #x0021)
-    ("QUOTATION MARK" #x0022)
-    ("NUMBER SIGN" #x0023)
-    ("DOLLAR SIGN" #x0024)
-    ("PERCENT SIGN" #x0025)
-    ("AMPERSAND" #x0026)
-    ("APOSTROPHE" #x0027)
-    ("LEFT PARENTHESIS" #x0028)
-    ("RIGHT PARENTHESIS" #x0029)
-    ("ASTERISK" #x002A)
-    ("PLUS SIGN" #x002B)
-    ("COMMA" #x002C)
-    ("HYPHEN-MINUS" #x002D)
-    ("FULL STOP" #x002E)
-    ("SOLIDUS" #x002F)
-    ("DIGIT ZERO" #x0030)
-    ("DIGIT ONE" #x0031)
-    ("DIGIT TWO" #x0032)
-    ("DIGIT THREE" #x0033)
-    ("DIGIT FOUR" #x0034)
-    ("DIGIT FIVE" #x0035)
-    ("DIGIT SIX" #x0036)
-    ("DIGIT SEVEN" #x0037)
-    ("DIGIT EIGHT" #x0038)
-    ("DIGIT NINE" #x0039)
-    ("COLON" #x003A)
-    ("SEMICOLON" #x003B)
-    ("LESS-THAN SIGN" #x003C)
-    ("EQUALS SIGN" #x003D)
-    ("GREATER-THAN SIGN" #x003E)
-    ("QUESTION MARK" #x003F)
-    ("COMMERCIAL AT" #x0040)
-    ("LATIN CAPITAL LETTER A" #x0041)
-    ("LATIN CAPITAL LETTER B" #x0042)
-    ("LATIN CAPITAL LETTER C" #x0043)
-    ("LATIN CAPITAL LETTER D" #x0044)
-    ("LATIN CAPITAL LETTER E" #x0045)
-    ("LATIN CAPITAL LETTER F" #x0046)
-    ("LATIN CAPITAL LETTER G" #x0047)
-    ("LATIN CAPITAL LETTER H" #x0048)
-    ("LATIN CAPITAL LETTER I" #x0049)
-    ("LATIN CAPITAL LETTER J" #x004A)
-    ("LATIN CAPITAL LETTER K" #x004B)
-    ("LATIN CAPITAL LETTER L" #x004C)
-    ("LATIN CAPITAL LETTER M" #x004D)
-    ("LATIN CAPITAL LETTER N" #x004E)
-    ("LATIN CAPITAL LETTER O" #x004F)
-    ("LATIN CAPITAL LETTER P" #x0050)
-    ("LATIN CAPITAL LETTER Q" #x0051)
-    ("LATIN CAPITAL LETTER R" #x0052)
-    ("LATIN CAPITAL LETTER S" #x0053)
-    ("LATIN CAPITAL LETTER T" #x0054)
-    ("LATIN CAPITAL LETTER U" #x0055)
-    ("LATIN CAPITAL LETTER V" #x0056)
-    ("LATIN CAPITAL LETTER W" #x0057)
-    ("LATIN CAPITAL LETTER X" #x0058)
-    ("LATIN CAPITAL LETTER Y" #x0059)
-    ("LATIN CAPITAL LETTER Z" #x005A)
-    ("LEFT SQUARE BRACKET" #x005B)
-    ("REVERSE SOLIDUS" #x005C)
-    ("RIGHT SQUARE BRACKET" #x005D)
-    ("CIRCUMFLEX ACCENT" #x005E)
-    ("LOW LINE" #x005F)
-    ("GRAVE ACCENT" #x0060)
-    ("LATIN SMALL LETTER A" #x0061)
-    ("LATIN SMALL LETTER B" #x0062)
-    ("LATIN SMALL LETTER C" #x0063)
-    ("LATIN SMALL LETTER D" #x0064)
-    ("LATIN SMALL LETTER E" #x0065)
-    ("LATIN SMALL LETTER F" #x0066)
-    ("LATIN SMALL LETTER G" #x0067)
-    ("LATIN SMALL LETTER H" #x0068)
-    ("LATIN SMALL LETTER I" #x0069)
-    ("LATIN SMALL LETTER J" #x006A)
-    ("LATIN SMALL LETTER K" #x006B)
-    ("LATIN SMALL LETTER L" #x006C)
-    ("LATIN SMALL LETTER M" #x006D)
-    ("LATIN SMALL LETTER N" #x006E)
-    ("LATIN SMALL LETTER O" #x006F)
-    ("LATIN SMALL LETTER P" #x0070)
-    ("LATIN SMALL LETTER Q" #x0071)
-    ("LATIN SMALL LETTER R" #x0072)
-    ("LATIN SMALL LETTER S" #x0073)
-    ("LATIN SMALL LETTER T" #x0074)
-    ("LATIN SMALL LETTER U" #x0075)
-    ("LATIN SMALL LETTER V" #x0076)
-    ("LATIN SMALL LETTER W" #x0077)
-    ("LATIN SMALL LETTER X" #x0078)
-    ("LATIN SMALL LETTER Y" #x0079)
-    ("LATIN SMALL LETTER Z" #x007A)
-    ("LEFT CURLY BRACKET" #x007B)
-    ("VERTICAL LINE" #x007C)
-    ("RIGHT CURLY BRACKET" #x007D)
-    ("TILDE" #x007E)
-    ))
-
diff --git a/etc/nxml/00080-000FF.el b/etc/nxml/00080-000FF.el
deleted file mode 100644 (file)
index 8f00b10..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-(nxml-define-char-name-set 'latin-1-supplement
-  '(("NO-BREAK SPACE" #x00A0)
-    ("INVERTED EXCLAMATION MARK" #x00A1)
-    ("CENT SIGN" #x00A2)
-    ("POUND SIGN" #x00A3)
-    ("CURRENCY SIGN" #x00A4)
-    ("YEN SIGN" #x00A5)
-    ("BROKEN BAR" #x00A6)
-    ("SECTION SIGN" #x00A7)
-    ("DIAERESIS" #x00A8)
-    ("COPYRIGHT SIGN" #x00A9)
-    ("FEMININE ORDINAL INDICATOR" #x00AA)
-    ("LEFT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00AB)
-    ("NOT SIGN" #x00AC)
-    ("SOFT HYPHEN" #x00AD)
-    ("REGISTERED SIGN" #x00AE)
-    ("MACRON" #x00AF)
-    ("DEGREE SIGN" #x00B0)
-    ("PLUS-MINUS SIGN" #x00B1)
-    ("SUPERSCRIPT TWO" #x00B2)
-    ("SUPERSCRIPT THREE" #x00B3)
-    ("ACUTE ACCENT" #x00B4)
-    ("MICRO SIGN" #x00B5)
-    ("PILCROW SIGN" #x00B6)
-    ("MIDDLE DOT" #x00B7)
-    ("CEDILLA" #x00B8)
-    ("SUPERSCRIPT ONE" #x00B9)
-    ("MASCULINE ORDINAL INDICATOR" #x00BA)
-    ("RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00BB)
-    ("VULGAR FRACTION ONE QUARTER" #x00BC)
-    ("VULGAR FRACTION ONE HALF" #x00BD)
-    ("VULGAR FRACTION THREE QUARTERS" #x00BE)
-    ("INVERTED QUESTION MARK" #x00BF)
-    ("LATIN CAPITAL LETTER A WITH GRAVE" #x00C0)
-    ("LATIN CAPITAL LETTER A WITH ACUTE" #x00C1)
-    ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX" #x00C2)
-    ("LATIN CAPITAL LETTER A WITH TILDE" #x00C3)
-    ("LATIN CAPITAL LETTER A WITH DIAERESIS" #x00C4)
-    ("LATIN CAPITAL LETTER A WITH RING ABOVE" #x00C5)
-    ("LATIN CAPITAL LETTER AE" #x00C6)
-    ("LATIN CAPITAL LETTER C WITH CEDILLA" #x00C7)
-    ("LATIN CAPITAL LETTER E WITH GRAVE" #x00C8)
-    ("LATIN CAPITAL LETTER E WITH ACUTE" #x00C9)
-    ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX" #x00CA)
-    ("LATIN CAPITAL LETTER E WITH DIAERESIS" #x00CB)
-    ("LATIN CAPITAL LETTER I WITH GRAVE" #x00CC)
-    ("LATIN CAPITAL LETTER I WITH ACUTE" #x00CD)
-    ("LATIN CAPITAL LETTER I WITH CIRCUMFLEX" #x00CE)
-    ("LATIN CAPITAL LETTER I WITH DIAERESIS" #x00CF)
-    ("LATIN CAPITAL LETTER ETH" #x00D0)
-    ("LATIN CAPITAL LETTER N WITH TILDE" #x00D1)
-    ("LATIN CAPITAL LETTER O WITH GRAVE" #x00D2)
-    ("LATIN CAPITAL LETTER O WITH ACUTE" #x00D3)
-    ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX" #x00D4)
-    ("LATIN CAPITAL LETTER O WITH TILDE" #x00D5)
-    ("LATIN CAPITAL LETTER O WITH DIAERESIS" #x00D6)
-    ("MULTIPLICATION SIGN" #x00D7)
-    ("LATIN CAPITAL LETTER O WITH STROKE" #x00D8)
-    ("LATIN CAPITAL LETTER U WITH GRAVE" #x00D9)
-    ("LATIN CAPITAL LETTER U WITH ACUTE" #x00DA)
-    ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX" #x00DB)
-    ("LATIN CAPITAL LETTER U WITH DIAERESIS" #x00DC)
-    ("LATIN CAPITAL LETTER Y WITH ACUTE" #x00DD)
-    ("LATIN CAPITAL LETTER THORN" #x00DE)
-    ("LATIN SMALL LETTER SHARP S" #x00DF)
-    ("LATIN SMALL LETTER A WITH GRAVE" #x00E0)
-    ("LATIN SMALL LETTER A WITH ACUTE" #x00E1)
-    ("LATIN SMALL LETTER A WITH CIRCUMFLEX" #x00E2)
-    ("LATIN SMALL LETTER A WITH TILDE" #x00E3)
-    ("LATIN SMALL LETTER A WITH DIAERESIS" #x00E4)
-    ("LATIN SMALL LETTER A WITH RING ABOVE" #x00E5)
-    ("LATIN SMALL LETTER AE" #x00E6)
-    ("LATIN SMALL LETTER C WITH CEDILLA" #x00E7)
-    ("LATIN SMALL LETTER E WITH GRAVE" #x00E8)
-    ("LATIN SMALL LETTER E WITH ACUTE" #x00E9)
-    ("LATIN SMALL LETTER E WITH CIRCUMFLEX" #x00EA)
-    ("LATIN SMALL LETTER E WITH DIAERESIS" #x00EB)
-    ("LATIN SMALL LETTER I WITH GRAVE" #x00EC)
-    ("LATIN SMALL LETTER I WITH ACUTE" #x00ED)
-    ("LATIN SMALL LETTER I WITH CIRCUMFLEX" #x00EE)
-    ("LATIN SMALL LETTER I WITH DIAERESIS" #x00EF)
-    ("LATIN SMALL LETTER ETH" #x00F0)
-    ("LATIN SMALL LETTER N WITH TILDE" #x00F1)
-    ("LATIN SMALL LETTER O WITH GRAVE" #x00F2)
-    ("LATIN SMALL LETTER O WITH ACUTE" #x00F3)
-    ("LATIN SMALL LETTER O WITH CIRCUMFLEX" #x00F4)
-    ("LATIN SMALL LETTER O WITH TILDE" #x00F5)
-    ("LATIN SMALL LETTER O WITH DIAERESIS" #x00F6)
-    ("DIVISION SIGN" #x00F7)
-    ("LATIN SMALL LETTER O WITH STROKE" #x00F8)
-    ("LATIN SMALL LETTER U WITH GRAVE" #x00F9)
-    ("LATIN SMALL LETTER U WITH ACUTE" #x00FA)
-    ("LATIN SMALL LETTER U WITH CIRCUMFLEX" #x00FB)
-    ("LATIN SMALL LETTER U WITH DIAERESIS" #x00FC)
-    ("LATIN SMALL LETTER Y WITH ACUTE" #x00FD)
-    ("LATIN SMALL LETTER THORN" #x00FE)
-    ("LATIN SMALL LETTER Y WITH DIAERESIS" #x00FF)
-    ))
-
diff --git a/etc/nxml/00100-0017F.el b/etc/nxml/00100-0017F.el
deleted file mode 100644 (file)
index f780066..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-(nxml-define-char-name-set 'latin-extended-a
-  '(("LATIN CAPITAL LETTER A WITH MACRON" #x0100)
-    ("LATIN SMALL LETTER A WITH MACRON" #x0101)
-    ("LATIN CAPITAL LETTER A WITH BREVE" #x0102)
-    ("LATIN SMALL LETTER A WITH BREVE" #x0103)
-    ("LATIN CAPITAL LETTER A WITH OGONEK" #x0104)
-    ("LATIN SMALL LETTER A WITH OGONEK" #x0105)
-    ("LATIN CAPITAL LETTER C WITH ACUTE" #x0106)
-    ("LATIN SMALL LETTER C WITH ACUTE" #x0107)
-    ("LATIN CAPITAL LETTER C WITH CIRCUMFLEX" #x0108)
-    ("LATIN SMALL LETTER C WITH CIRCUMFLEX" #x0109)
-    ("LATIN CAPITAL LETTER C WITH DOT ABOVE" #x010A)
-    ("LATIN SMALL LETTER C WITH DOT ABOVE" #x010B)
-    ("LATIN CAPITAL LETTER C WITH CARON" #x010C)
-    ("LATIN SMALL LETTER C WITH CARON" #x010D)
-    ("LATIN CAPITAL LETTER D WITH CARON" #x010E)
-    ("LATIN SMALL LETTER D WITH CARON" #x010F)
-    ("LATIN CAPITAL LETTER D WITH STROKE" #x0110)
-    ("LATIN SMALL LETTER D WITH STROKE" #x0111)
-    ("LATIN CAPITAL LETTER E WITH MACRON" #x0112)
-    ("LATIN SMALL LETTER E WITH MACRON" #x0113)
-    ("LATIN CAPITAL LETTER E WITH BREVE" #x0114)
-    ("LATIN SMALL LETTER E WITH BREVE" #x0115)
-    ("LATIN CAPITAL LETTER E WITH DOT ABOVE" #x0116)
-    ("LATIN SMALL LETTER E WITH DOT ABOVE" #x0117)
-    ("LATIN CAPITAL LETTER E WITH OGONEK" #x0118)
-    ("LATIN SMALL LETTER E WITH OGONEK" #x0119)
-    ("LATIN CAPITAL LETTER E WITH CARON" #x011A)
-    ("LATIN SMALL LETTER E WITH CARON" #x011B)
-    ("LATIN CAPITAL LETTER G WITH CIRCUMFLEX" #x011C)
-    ("LATIN SMALL LETTER G WITH CIRCUMFLEX" #x011D)
-    ("LATIN CAPITAL LETTER G WITH BREVE" #x011E)
-    ("LATIN SMALL LETTER G WITH BREVE" #x011F)
-    ("LATIN CAPITAL LETTER G WITH DOT ABOVE" #x0120)
-    ("LATIN SMALL LETTER G WITH DOT ABOVE" #x0121)
-    ("LATIN CAPITAL LETTER G WITH CEDILLA" #x0122)
-    ("LATIN SMALL LETTER G WITH CEDILLA" #x0123)
-    ("LATIN CAPITAL LETTER H WITH CIRCUMFLEX" #x0124)
-    ("LATIN SMALL LETTER H WITH CIRCUMFLEX" #x0125)
-    ("LATIN CAPITAL LETTER H WITH STROKE" #x0126)
-    ("LATIN SMALL LETTER H WITH STROKE" #x0127)
-    ("LATIN CAPITAL LETTER I WITH TILDE" #x0128)
-    ("LATIN SMALL LETTER I WITH TILDE" #x0129)
-    ("LATIN CAPITAL LETTER I WITH MACRON" #x012A)
-    ("LATIN SMALL LETTER I WITH MACRON" #x012B)
-    ("LATIN CAPITAL LETTER I WITH BREVE" #x012C)
-    ("LATIN SMALL LETTER I WITH BREVE" #x012D)
-    ("LATIN CAPITAL LETTER I WITH OGONEK" #x012E)
-    ("LATIN SMALL LETTER I WITH OGONEK" #x012F)
-    ("LATIN CAPITAL LETTER I WITH DOT ABOVE" #x0130)
-    ("LATIN SMALL LETTER DOTLESS I" #x0131)
-    ("LATIN CAPITAL LIGATURE IJ" #x0132)
-    ("LATIN SMALL LIGATURE IJ" #x0133)
-    ("LATIN CAPITAL LETTER J WITH CIRCUMFLEX" #x0134)
-    ("LATIN SMALL LETTER J WITH CIRCUMFLEX" #x0135)
-    ("LATIN CAPITAL LETTER K WITH CEDILLA" #x0136)
-    ("LATIN SMALL LETTER K WITH CEDILLA" #x0137)
-    ("LATIN SMALL LETTER KRA" #x0138)
-    ("LATIN CAPITAL LETTER L WITH ACUTE" #x0139)
-    ("LATIN SMALL LETTER L WITH ACUTE" #x013A)
-    ("LATIN CAPITAL LETTER L WITH CEDILLA" #x013B)
-    ("LATIN SMALL LETTER L WITH CEDILLA" #x013C)
-    ("LATIN CAPITAL LETTER L WITH CARON" #x013D)
-    ("LATIN SMALL LETTER L WITH CARON" #x013E)
-    ("LATIN CAPITAL LETTER L WITH MIDDLE DOT" #x013F)
-    ("LATIN SMALL LETTER L WITH MIDDLE DOT" #x0140)
-    ("LATIN CAPITAL LETTER L WITH STROKE" #x0141)
-    ("LATIN SMALL LETTER L WITH STROKE" #x0142)
-    ("LATIN CAPITAL LETTER N WITH ACUTE" #x0143)
-    ("LATIN SMALL LETTER N WITH ACUTE" #x0144)
-    ("LATIN CAPITAL LETTER N WITH CEDILLA" #x0145)
-    ("LATIN SMALL LETTER N WITH CEDILLA" #x0146)
-    ("LATIN CAPITAL LETTER N WITH CARON" #x0147)
-    ("LATIN SMALL LETTER N WITH CARON" #x0148)
-    ("LATIN SMALL LETTER N PRECEDED BY APOSTROPHE" #x0149)
-    ("LATIN CAPITAL LETTER ENG" #x014A)
-    ("LATIN SMALL LETTER ENG" #x014B)
-    ("LATIN CAPITAL LETTER O WITH MACRON" #x014C)
-    ("LATIN SMALL LETTER O WITH MACRON" #x014D)
-    ("LATIN CAPITAL LETTER O WITH BREVE" #x014E)
-    ("LATIN SMALL LETTER O WITH BREVE" #x014F)
-    ("LATIN CAPITAL LETTER O WITH DOUBLE ACUTE" #x0150)
-    ("LATIN SMALL LETTER O WITH DOUBLE ACUTE" #x0151)
-    ("LATIN CAPITAL LIGATURE OE" #x0152)
-    ("LATIN SMALL LIGATURE OE" #x0153)
-    ("LATIN CAPITAL LETTER R WITH ACUTE" #x0154)
-    ("LATIN SMALL LETTER R WITH ACUTE" #x0155)
-    ("LATIN CAPITAL LETTER R WITH CEDILLA" #x0156)
-    ("LATIN SMALL LETTER R WITH CEDILLA" #x0157)
-    ("LATIN CAPITAL LETTER R WITH CARON" #x0158)
-    ("LATIN SMALL LETTER R WITH CARON" #x0159)
-    ("LATIN CAPITAL LETTER S WITH ACUTE" #x015A)
-    ("LATIN SMALL LETTER S WITH ACUTE" #x015B)
-    ("LATIN CAPITAL LETTER S WITH CIRCUMFLEX" #x015C)
-    ("LATIN SMALL LETTER S WITH CIRCUMFLEX" #x015D)
-    ("LATIN CAPITAL LETTER S WITH CEDILLA" #x015E)
-    ("LATIN SMALL LETTER S WITH CEDILLA" #x015F)
-    ("LATIN CAPITAL LETTER S WITH CARON" #x0160)
-    ("LATIN SMALL LETTER S WITH CARON" #x0161)
-    ("LATIN CAPITAL LETTER T WITH CEDILLA" #x0162)
-    ("LATIN SMALL LETTER T WITH CEDILLA" #x0163)
-    ("LATIN CAPITAL LETTER T WITH CARON" #x0164)
-    ("LATIN SMALL LETTER T WITH CARON" #x0165)
-    ("LATIN CAPITAL LETTER T WITH STROKE" #x0166)
-    ("LATIN SMALL LETTER T WITH STROKE" #x0167)
-    ("LATIN CAPITAL LETTER U WITH TILDE" #x0168)
-    ("LATIN SMALL LETTER U WITH TILDE" #x0169)
-    ("LATIN CAPITAL LETTER U WITH MACRON" #x016A)
-    ("LATIN SMALL LETTER U WITH MACRON" #x016B)
-    ("LATIN CAPITAL LETTER U WITH BREVE" #x016C)
-    ("LATIN SMALL LETTER U WITH BREVE" #x016D)
-    ("LATIN CAPITAL LETTER U WITH RING ABOVE" #x016E)
-    ("LATIN SMALL LETTER U WITH RING ABOVE" #x016F)
-    ("LATIN CAPITAL LETTER U WITH DOUBLE ACUTE" #x0170)
-    ("LATIN SMALL LETTER U WITH DOUBLE ACUTE" #x0171)
-    ("LATIN CAPITAL LETTER U WITH OGONEK" #x0172)
-    ("LATIN SMALL LETTER U WITH OGONEK" #x0173)
-    ("LATIN CAPITAL LETTER W WITH CIRCUMFLEX" #x0174)
-    ("LATIN SMALL LETTER W WITH CIRCUMFLEX" #x0175)
-    ("LATIN CAPITAL LETTER Y WITH CIRCUMFLEX" #x0176)
-    ("LATIN SMALL LETTER Y WITH CIRCUMFLEX" #x0177)
-    ("LATIN CAPITAL LETTER Y WITH DIAERESIS" #x0178)
-    ("LATIN CAPITAL LETTER Z WITH ACUTE" #x0179)
-    ("LATIN SMALL LETTER Z WITH ACUTE" #x017A)
-    ("LATIN CAPITAL LETTER Z WITH DOT ABOVE" #x017B)
-    ("LATIN SMALL LETTER Z WITH DOT ABOVE" #x017C)
-    ("LATIN CAPITAL LETTER Z WITH CARON" #x017D)
-    ("LATIN SMALL LETTER Z WITH CARON" #x017E)
-    ("LATIN SMALL LETTER LONG S" #x017F)
-    ))
-
diff --git a/etc/nxml/00180-0024F.el b/etc/nxml/00180-0024F.el
deleted file mode 100644 (file)
index fe99bee..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-(nxml-define-char-name-set 'latin-extended-b
-  '(("LATIN SMALL LETTER B WITH STROKE" #x0180)
-    ("LATIN CAPITAL LETTER B WITH HOOK" #x0181)
-    ("LATIN CAPITAL LETTER B WITH TOPBAR" #x0182)
-    ("LATIN SMALL LETTER B WITH TOPBAR" #x0183)
-    ("LATIN CAPITAL LETTER TONE SIX" #x0184)
-    ("LATIN SMALL LETTER TONE SIX" #x0185)
-    ("LATIN CAPITAL LETTER OPEN O" #x0186)
-    ("LATIN CAPITAL LETTER C WITH HOOK" #x0187)
-    ("LATIN SMALL LETTER C WITH HOOK" #x0188)
-    ("LATIN CAPITAL LETTER AFRICAN D" #x0189)
-    ("LATIN CAPITAL LETTER D WITH HOOK" #x018A)
-    ("LATIN CAPITAL LETTER D WITH TOPBAR" #x018B)
-    ("LATIN SMALL LETTER D WITH TOPBAR" #x018C)
-    ("LATIN SMALL LETTER TURNED DELTA" #x018D)
-    ("LATIN CAPITAL LETTER REVERSED E" #x018E)
-    ("LATIN CAPITAL LETTER SCHWA" #x018F)
-    ("LATIN CAPITAL LETTER OPEN E" #x0190)
-    ("LATIN CAPITAL LETTER F WITH HOOK" #x0191)
-    ("LATIN SMALL LETTER F WITH HOOK" #x0192)
-    ("LATIN CAPITAL LETTER G WITH HOOK" #x0193)
-    ("LATIN CAPITAL LETTER GAMMA" #x0194)
-    ("LATIN SMALL LETTER HV" #x0195)
-    ("LATIN CAPITAL LETTER IOTA" #x0196)
-    ("LATIN CAPITAL LETTER I WITH STROKE" #x0197)
-    ("LATIN CAPITAL LETTER K WITH HOOK" #x0198)
-    ("LATIN SMALL LETTER K WITH HOOK" #x0199)
-    ("LATIN SMALL LETTER L WITH BAR" #x019A)
-    ("LATIN SMALL LETTER LAMBDA WITH STROKE" #x019B)
-    ("LATIN CAPITAL LETTER TURNED M" #x019C)
-    ("LATIN CAPITAL LETTER N WITH LEFT HOOK" #x019D)
-    ("LATIN SMALL LETTER N WITH LONG RIGHT LEG" #x019E)
-    ("LATIN CAPITAL LETTER O WITH MIDDLE TILDE" #x019F)
-    ("LATIN CAPITAL LETTER O WITH HORN" #x01A0)
-    ("LATIN SMALL LETTER O WITH HORN" #x01A1)
-    ("LATIN CAPITAL LETTER OI" #x01A2)
-    ("LATIN SMALL LETTER OI" #x01A3)
-    ("LATIN CAPITAL LETTER P WITH HOOK" #x01A4)
-    ("LATIN SMALL LETTER P WITH HOOK" #x01A5)
-    ("LATIN LETTER YR" #x01A6)
-    ("LATIN CAPITAL LETTER TONE TWO" #x01A7)
-    ("LATIN SMALL LETTER TONE TWO" #x01A8)
-    ("LATIN CAPITAL LETTER ESH" #x01A9)
-    ("LATIN LETTER REVERSED ESH LOOP" #x01AA)
-    ("LATIN SMALL LETTER T WITH PALATAL HOOK" #x01AB)
-    ("LATIN CAPITAL LETTER T WITH HOOK" #x01AC)
-    ("LATIN SMALL LETTER T WITH HOOK" #x01AD)
-    ("LATIN CAPITAL LETTER T WITH RETROFLEX HOOK" #x01AE)
-    ("LATIN CAPITAL LETTER U WITH HORN" #x01AF)
-    ("LATIN SMALL LETTER U WITH HORN" #x01B0)
-    ("LATIN CAPITAL LETTER UPSILON" #x01B1)
-    ("LATIN CAPITAL LETTER V WITH HOOK" #x01B2)
-    ("LATIN CAPITAL LETTER Y WITH HOOK" #x01B3)
-    ("LATIN SMALL LETTER Y WITH HOOK" #x01B4)
-    ("LATIN CAPITAL LETTER Z WITH STROKE" #x01B5)
-    ("LATIN SMALL LETTER Z WITH STROKE" #x01B6)
-    ("LATIN CAPITAL LETTER EZH" #x01B7)
-    ("LATIN CAPITAL LETTER EZH REVERSED" #x01B8)
-    ("LATIN SMALL LETTER EZH REVERSED" #x01B9)
-    ("LATIN SMALL LETTER EZH WITH TAIL" #x01BA)
-    ("LATIN LETTER TWO WITH STROKE" #x01BB)
-    ("LATIN CAPITAL LETTER TONE FIVE" #x01BC)
-    ("LATIN SMALL LETTER TONE FIVE" #x01BD)
-    ("LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE" #x01BE)
-    ("LATIN LETTER WYNN" #x01BF)
-    ("LATIN LETTER DENTAL CLICK" #x01C0)
-    ("LATIN LETTER LATERAL CLICK" #x01C1)
-    ("LATIN LETTER ALVEOLAR CLICK" #x01C2)
-    ("LATIN LETTER RETROFLEX CLICK" #x01C3)
-    ("LATIN CAPITAL LETTER DZ WITH CARON" #x01C4)
-    ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON" #x01C5)
-    ("LATIN SMALL LETTER DZ WITH CARON" #x01C6)
-    ("LATIN CAPITAL LETTER LJ" #x01C7)
-    ("LATIN CAPITAL LETTER L WITH SMALL LETTER J" #x01C8)
-    ("LATIN SMALL LETTER LJ" #x01C9)
-    ("LATIN CAPITAL LETTER NJ" #x01CA)
-    ("LATIN CAPITAL LETTER N WITH SMALL LETTER J" #x01CB)
-    ("LATIN SMALL LETTER NJ" #x01CC)
-    ("LATIN CAPITAL LETTER A WITH CARON" #x01CD)
-    ("LATIN SMALL LETTER A WITH CARON" #x01CE)
-    ("LATIN CAPITAL LETTER I WITH CARON" #x01CF)
-    ("LATIN SMALL LETTER I WITH CARON" #x01D0)
-    ("LATIN CAPITAL LETTER O WITH CARON" #x01D1)
-    ("LATIN SMALL LETTER O WITH CARON" #x01D2)
-    ("LATIN CAPITAL LETTER U WITH CARON" #x01D3)
-    ("LATIN SMALL LETTER U WITH CARON" #x01D4)
-    ("LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON" #x01D5)
-    ("LATIN SMALL LETTER U WITH DIAERESIS AND MACRON" #x01D6)
-    ("LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE" #x01D7)
-    ("LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE" #x01D8)
-    ("LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON" #x01D9)
-    ("LATIN SMALL LETTER U WITH DIAERESIS AND CARON" #x01DA)
-    ("LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE" #x01DB)
-    ("LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE" #x01DC)
-    ("LATIN SMALL LETTER TURNED E" #x01DD)
-    ("LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON" #x01DE)
-    ("LATIN SMALL LETTER A WITH DIAERESIS AND MACRON" #x01DF)
-    ("LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON" #x01E0)
-    ("LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON" #x01E1)
-    ("LATIN CAPITAL LETTER AE WITH MACRON" #x01E2)
-    ("LATIN SMALL LETTER AE WITH MACRON" #x01E3)
-    ("LATIN CAPITAL LETTER G WITH STROKE" #x01E4)
-    ("LATIN SMALL LETTER G WITH STROKE" #x01E5)
-    ("LATIN CAPITAL LETTER G WITH CARON" #x01E6)
-    ("LATIN SMALL LETTER G WITH CARON" #x01E7)
-    ("LATIN CAPITAL LETTER K WITH CARON" #x01E8)
-    ("LATIN SMALL LETTER K WITH CARON" #x01E9)
-    ("LATIN CAPITAL LETTER O WITH OGONEK" #x01EA)
-    ("LATIN SMALL LETTER O WITH OGONEK" #x01EB)
-    ("LATIN CAPITAL LETTER O WITH OGONEK AND MACRON" #x01EC)
-    ("LATIN SMALL LETTER O WITH OGONEK AND MACRON" #x01ED)
-    ("LATIN CAPITAL LETTER EZH WITH CARON" #x01EE)
-    ("LATIN SMALL LETTER EZH WITH CARON" #x01EF)
-    ("LATIN SMALL LETTER J WITH CARON" #x01F0)
-    ("LATIN CAPITAL LETTER DZ" #x01F1)
-    ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z" #x01F2)
-    ("LATIN SMALL LETTER DZ" #x01F3)
-    ("LATIN CAPITAL LETTER G WITH ACUTE" #x01F4)
-    ("LATIN SMALL LETTER G WITH ACUTE" #x01F5)
-    ("LATIN CAPITAL LETTER HWAIR" #x01F6)
-    ("LATIN CAPITAL LETTER WYNN" #x01F7)
-    ("LATIN CAPITAL LETTER N WITH GRAVE" #x01F8)
-    ("LATIN SMALL LETTER N WITH GRAVE" #x01F9)
-    ("LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE" #x01FA)
-    ("LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE" #x01FB)
-    ("LATIN CAPITAL LETTER AE WITH ACUTE" #x01FC)
-    ("LATIN SMALL LETTER AE WITH ACUTE" #x01FD)
-    ("LATIN CAPITAL LETTER O WITH STROKE AND ACUTE" #x01FE)
-    ("LATIN SMALL LETTER O WITH STROKE AND ACUTE" #x01FF)
-    ("LATIN CAPITAL LETTER A WITH DOUBLE GRAVE" #x0200)
-    ("LATIN SMALL LETTER A WITH DOUBLE GRAVE" #x0201)
-    ("LATIN CAPITAL LETTER A WITH INVERTED BREVE" #x0202)
-    ("LATIN SMALL LETTER A WITH INVERTED BREVE" #x0203)
-    ("LATIN CAPITAL LETTER E WITH DOUBLE GRAVE" #x0204)
-    ("LATIN SMALL LETTER E WITH DOUBLE GRAVE" #x0205)
-    ("LATIN CAPITAL LETTER E WITH INVERTED BREVE" #x0206)
-    ("LATIN SMALL LETTER E WITH INVERTED BREVE" #x0207)
-    ("LATIN CAPITAL LETTER I WITH DOUBLE GRAVE" #x0208)
-    ("LATIN SMALL LETTER I WITH DOUBLE GRAVE" #x0209)
-    ("LATIN CAPITAL LETTER I WITH INVERTED BREVE" #x020A)
-    ("LATIN SMALL LETTER I WITH INVERTED BREVE" #x020B)
-    ("LATIN CAPITAL LETTER O WITH DOUBLE GRAVE" #x020C)
-    ("LATIN SMALL LETTER O WITH DOUBLE GRAVE" #x020D)
-    ("LATIN CAPITAL LETTER O WITH INVERTED BREVE" #x020E)
-    ("LATIN SMALL LETTER O WITH INVERTED BREVE" #x020F)
-    ("LATIN CAPITAL LETTER R WITH DOUBLE GRAVE" #x0210)
-    ("LATIN SMALL LETTER R WITH DOUBLE GRAVE" #x0211)
-    ("LATIN CAPITAL LETTER R WITH INVERTED BREVE" #x0212)
-    ("LATIN SMALL LETTER R WITH INVERTED BREVE" #x0213)
-    ("LATIN CAPITAL LETTER U WITH DOUBLE GRAVE" #x0214)
-    ("LATIN SMALL LETTER U WITH DOUBLE GRAVE" #x0215)
-    ("LATIN CAPITAL LETTER U WITH INVERTED BREVE" #x0216)
-    ("LATIN SMALL LETTER U WITH INVERTED BREVE" #x0217)
-    ("LATIN CAPITAL LETTER S WITH COMMA BELOW" #x0218)
-    ("LATIN SMALL LETTER S WITH COMMA BELOW" #x0219)
-    ("LATIN CAPITAL LETTER T WITH COMMA BELOW" #x021A)
-    ("LATIN SMALL LETTER T WITH COMMA BELOW" #x021B)
-    ("LATIN CAPITAL LETTER YOGH" #x021C)
-    ("LATIN SMALL LETTER YOGH" #x021D)
-    ("LATIN CAPITAL LETTER H WITH CARON" #x021E)
-    ("LATIN SMALL LETTER H WITH CARON" #x021F)
-    ("LATIN CAPITAL LETTER N WITH LONG RIGHT LEG" #x0220)
-    ("LATIN CAPITAL LETTER OU" #x0222)
-    ("LATIN SMALL LETTER OU" #x0223)
-    ("LATIN CAPITAL LETTER Z WITH HOOK" #x0224)
-    ("LATIN SMALL LETTER Z WITH HOOK" #x0225)
-    ("LATIN CAPITAL LETTER A WITH DOT ABOVE" #x0226)
-    ("LATIN SMALL LETTER A WITH DOT ABOVE" #x0227)
-    ("LATIN CAPITAL LETTER E WITH CEDILLA" #x0228)
-    ("LATIN SMALL LETTER E WITH CEDILLA" #x0229)
-    ("LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON" #x022A)
-    ("LATIN SMALL LETTER O WITH DIAERESIS AND MACRON" #x022B)
-    ("LATIN CAPITAL LETTER O WITH TILDE AND MACRON" #x022C)
-    ("LATIN SMALL LETTER O WITH TILDE AND MACRON" #x022D)
-    ("LATIN CAPITAL LETTER O WITH DOT ABOVE" #x022E)
-    ("LATIN SMALL LETTER O WITH DOT ABOVE" #x022F)
-    ("LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON" #x0230)
-    ("LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON" #x0231)
-    ("LATIN CAPITAL LETTER Y WITH MACRON" #x0232)
-    ("LATIN SMALL LETTER Y WITH MACRON" #x0233)
-    ))
-
diff --git a/etc/nxml/00250-002AF.el b/etc/nxml/00250-002AF.el
deleted file mode 100644 (file)
index 63c474c..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-(nxml-define-char-name-set 'ipa-extensions
-  '(("LATIN SMALL LETTER TURNED A" #x0250)
-    ("LATIN SMALL LETTER ALPHA" #x0251)
-    ("LATIN SMALL LETTER TURNED ALPHA" #x0252)
-    ("LATIN SMALL LETTER B WITH HOOK" #x0253)
-    ("LATIN SMALL LETTER OPEN O" #x0254)
-    ("LATIN SMALL LETTER C WITH CURL" #x0255)
-    ("LATIN SMALL LETTER D WITH TAIL" #x0256)
-    ("LATIN SMALL LETTER D WITH HOOK" #x0257)
-    ("LATIN SMALL LETTER REVERSED E" #x0258)
-    ("LATIN SMALL LETTER SCHWA" #x0259)
-    ("LATIN SMALL LETTER SCHWA WITH HOOK" #x025A)
-    ("LATIN SMALL LETTER OPEN E" #x025B)
-    ("LATIN SMALL LETTER REVERSED OPEN E" #x025C)
-    ("LATIN SMALL LETTER REVERSED OPEN E WITH HOOK" #x025D)
-    ("LATIN SMALL LETTER CLOSED REVERSED OPEN E" #x025E)
-    ("LATIN SMALL LETTER DOTLESS J WITH STROKE" #x025F)
-    ("LATIN SMALL LETTER G WITH HOOK" #x0260)
-    ("LATIN SMALL LETTER SCRIPT G" #x0261)
-    ("LATIN LETTER SMALL CAPITAL G" #x0262)
-    ("LATIN SMALL LETTER GAMMA" #x0263)
-    ("LATIN SMALL LETTER RAMS HORN" #x0264)
-    ("LATIN SMALL LETTER TURNED H" #x0265)
-    ("LATIN SMALL LETTER H WITH HOOK" #x0266)
-    ("LATIN SMALL LETTER HENG WITH HOOK" #x0267)
-    ("LATIN SMALL LETTER I WITH STROKE" #x0268)
-    ("LATIN SMALL LETTER IOTA" #x0269)
-    ("LATIN LETTER SMALL CAPITAL I" #x026A)
-    ("LATIN SMALL LETTER L WITH MIDDLE TILDE" #x026B)
-    ("LATIN SMALL LETTER L WITH BELT" #x026C)
-    ("LATIN SMALL LETTER L WITH RETROFLEX HOOK" #x026D)
-    ("LATIN SMALL LETTER LEZH" #x026E)
-    ("LATIN SMALL LETTER TURNED M" #x026F)
-    ("LATIN SMALL LETTER TURNED M WITH LONG LEG" #x0270)
-    ("LATIN SMALL LETTER M WITH HOOK" #x0271)
-    ("LATIN SMALL LETTER N WITH LEFT HOOK" #x0272)
-    ("LATIN SMALL LETTER N WITH RETROFLEX HOOK" #x0273)
-    ("LATIN LETTER SMALL CAPITAL N" #x0274)
-    ("LATIN SMALL LETTER BARRED O" #x0275)
-    ("LATIN LETTER SMALL CAPITAL OE" #x0276)
-    ("LATIN SMALL LETTER CLOSED OMEGA" #x0277)
-    ("LATIN SMALL LETTER PHI" #x0278)
-    ("LATIN SMALL LETTER TURNED R" #x0279)
-    ("LATIN SMALL LETTER TURNED R WITH LONG LEG" #x027A)
-    ("LATIN SMALL LETTER TURNED R WITH HOOK" #x027B)
-    ("LATIN SMALL LETTER R WITH LONG LEG" #x027C)
-    ("LATIN SMALL LETTER R WITH TAIL" #x027D)
-    ("LATIN SMALL LETTER R WITH FISHHOOK" #x027E)
-    ("LATIN SMALL LETTER REVERSED R WITH FISHHOOK" #x027F)
-    ("LATIN LETTER SMALL CAPITAL R" #x0280)
-    ("LATIN LETTER SMALL CAPITAL INVERTED R" #x0281)
-    ("LATIN SMALL LETTER S WITH HOOK" #x0282)
-    ("LATIN SMALL LETTER ESH" #x0283)
-    ("LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK" #x0284)
-    ("LATIN SMALL LETTER SQUAT REVERSED ESH" #x0285)
-    ("LATIN SMALL LETTER ESH WITH CURL" #x0286)
-    ("LATIN SMALL LETTER TURNED T" #x0287)
-    ("LATIN SMALL LETTER T WITH RETROFLEX HOOK" #x0288)
-    ("LATIN SMALL LETTER U BAR" #x0289)
-    ("LATIN SMALL LETTER UPSILON" #x028A)
-    ("LATIN SMALL LETTER V WITH HOOK" #x028B)
-    ("LATIN SMALL LETTER TURNED V" #x028C)
-    ("LATIN SMALL LETTER TURNED W" #x028D)
-    ("LATIN SMALL LETTER TURNED Y" #x028E)
-    ("LATIN LETTER SMALL CAPITAL Y" #x028F)
-    ("LATIN SMALL LETTER Z WITH RETROFLEX HOOK" #x0290)
-    ("LATIN SMALL LETTER Z WITH CURL" #x0291)
-    ("LATIN SMALL LETTER EZH" #x0292)
-    ("LATIN SMALL LETTER EZH WITH CURL" #x0293)
-    ("LATIN LETTER GLOTTAL STOP" #x0294)
-    ("LATIN LETTER PHARYNGEAL VOICED FRICATIVE" #x0295)
-    ("LATIN LETTER INVERTED GLOTTAL STOP" #x0296)
-    ("LATIN LETTER STRETCHED C" #x0297)
-    ("LATIN LETTER BILABIAL CLICK" #x0298)
-    ("LATIN LETTER SMALL CAPITAL B" #x0299)
-    ("LATIN SMALL LETTER CLOSED OPEN E" #x029A)
-    ("LATIN LETTER SMALL CAPITAL G WITH HOOK" #x029B)
-    ("LATIN LETTER SMALL CAPITAL H" #x029C)
-    ("LATIN SMALL LETTER J WITH CROSSED-TAIL" #x029D)
-    ("LATIN SMALL LETTER TURNED K" #x029E)
-    ("LATIN LETTER SMALL CAPITAL L" #x029F)
-    ("LATIN SMALL LETTER Q WITH HOOK" #x02A0)
-    ("LATIN LETTER GLOTTAL STOP WITH STROKE" #x02A1)
-    ("LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE" #x02A2)
-    ("LATIN SMALL LETTER DZ DIGRAPH" #x02A3)
-    ("LATIN SMALL LETTER DEZH DIGRAPH" #x02A4)
-    ("LATIN SMALL LETTER DZ DIGRAPH WITH CURL" #x02A5)
-    ("LATIN SMALL LETTER TS DIGRAPH" #x02A6)
-    ("LATIN SMALL LETTER TESH DIGRAPH" #x02A7)
-    ("LATIN SMALL LETTER TC DIGRAPH WITH CURL" #x02A8)
-    ("LATIN SMALL LETTER FENG DIGRAPH" #x02A9)
-    ("LATIN SMALL LETTER LS DIGRAPH" #x02AA)
-    ("LATIN SMALL LETTER LZ DIGRAPH" #x02AB)
-    ("LATIN LETTER BILABIAL PERCUSSIVE" #x02AC)
-    ("LATIN LETTER BIDENTAL PERCUSSIVE" #x02AD)
-    ))
-
diff --git a/etc/nxml/002B0-002FF.el b/etc/nxml/002B0-002FF.el
deleted file mode 100644 (file)
index e72339e..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-(nxml-define-char-name-set 'spacing-modifier-letters
-  '(("MODIFIER LETTER SMALL H" #x02B0)
-    ("MODIFIER LETTER SMALL H WITH HOOK" #x02B1)
-    ("MODIFIER LETTER SMALL J" #x02B2)
-    ("MODIFIER LETTER SMALL R" #x02B3)
-    ("MODIFIER LETTER SMALL TURNED R" #x02B4)
-    ("MODIFIER LETTER SMALL TURNED R WITH HOOK" #x02B5)
-    ("MODIFIER LETTER SMALL CAPITAL INVERTED R" #x02B6)
-    ("MODIFIER LETTER SMALL W" #x02B7)
-    ("MODIFIER LETTER SMALL Y" #x02B8)
-    ("MODIFIER LETTER PRIME" #x02B9)
-    ("MODIFIER LETTER DOUBLE PRIME" #x02BA)
-    ("MODIFIER LETTER TURNED COMMA" #x02BB)
-    ("MODIFIER LETTER APOSTROPHE" #x02BC)
-    ("MODIFIER LETTER REVERSED COMMA" #x02BD)
-    ("MODIFIER LETTER RIGHT HALF RING" #x02BE)
-    ("MODIFIER LETTER LEFT HALF RING" #x02BF)
-    ("MODIFIER LETTER GLOTTAL STOP" #x02C0)
-    ("MODIFIER LETTER REVERSED GLOTTAL STOP" #x02C1)
-    ("MODIFIER LETTER LEFT ARROWHEAD" #x02C2)
-    ("MODIFIER LETTER RIGHT ARROWHEAD" #x02C3)
-    ("MODIFIER LETTER UP ARROWHEAD" #x02C4)
-    ("MODIFIER LETTER DOWN ARROWHEAD" #x02C5)
-    ("MODIFIER LETTER CIRCUMFLEX ACCENT" #x02C6)
-    ("CARON" #x02C7)
-    ("MODIFIER LETTER VERTICAL LINE" #x02C8)
-    ("MODIFIER LETTER MACRON" #x02C9)
-    ("MODIFIER LETTER ACUTE ACCENT" #x02CA)
-    ("MODIFIER LETTER GRAVE ACCENT" #x02CB)
-    ("MODIFIER LETTER LOW VERTICAL LINE" #x02CC)
-    ("MODIFIER LETTER LOW MACRON" #x02CD)
-    ("MODIFIER LETTER LOW GRAVE ACCENT" #x02CE)
-    ("MODIFIER LETTER LOW ACUTE ACCENT" #x02CF)
-    ("MODIFIER LETTER TRIANGULAR COLON" #x02D0)
-    ("MODIFIER LETTER HALF TRIANGULAR COLON" #x02D1)
-    ("MODIFIER LETTER CENTRED RIGHT HALF RING" #x02D2)
-    ("MODIFIER LETTER CENTRED LEFT HALF RING" #x02D3)
-    ("MODIFIER LETTER UP TACK" #x02D4)
-    ("MODIFIER LETTER DOWN TACK" #x02D5)
-    ("MODIFIER LETTER PLUS SIGN" #x02D6)
-    ("MODIFIER LETTER MINUS SIGN" #x02D7)
-    ("BREVE" #x02D8)
-    ("DOT ABOVE" #x02D9)
-    ("RING ABOVE" #x02DA)
-    ("OGONEK" #x02DB)
-    ("SMALL TILDE" #x02DC)
-    ("DOUBLE ACUTE ACCENT" #x02DD)
-    ("MODIFIER LETTER RHOTIC HOOK" #x02DE)
-    ("MODIFIER LETTER CROSS ACCENT" #x02DF)
-    ("MODIFIER LETTER SMALL GAMMA" #x02E0)
-    ("MODIFIER LETTER SMALL L" #x02E1)
-    ("MODIFIER LETTER SMALL S" #x02E2)
-    ("MODIFIER LETTER SMALL X" #x02E3)
-    ("MODIFIER LETTER SMALL REVERSED GLOTTAL STOP" #x02E4)
-    ("MODIFIER LETTER EXTRA-HIGH TONE BAR" #x02E5)
-    ("MODIFIER LETTER HIGH TONE BAR" #x02E6)
-    ("MODIFIER LETTER MID TONE BAR" #x02E7)
-    ("MODIFIER LETTER LOW TONE BAR" #x02E8)
-    ("MODIFIER LETTER EXTRA-LOW TONE BAR" #x02E9)
-    ("MODIFIER LETTER YIN DEPARTING TONE MARK" #x02EA)
-    ("MODIFIER LETTER YANG DEPARTING TONE MARK" #x02EB)
-    ("MODIFIER LETTER VOICING" #x02EC)
-    ("MODIFIER LETTER UNASPIRATED" #x02ED)
-    ("MODIFIER LETTER DOUBLE APOSTROPHE" #x02EE)
-    ))
-
diff --git a/etc/nxml/00300-0036F.el b/etc/nxml/00300-0036F.el
deleted file mode 100644 (file)
index 09024c9..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-(nxml-define-char-name-set 'combining-diacritical-marks
-  '(("COMBINING GRAVE ACCENT" #x0300)
-    ("COMBINING ACUTE ACCENT" #x0301)
-    ("COMBINING CIRCUMFLEX ACCENT" #x0302)
-    ("COMBINING TILDE" #x0303)
-    ("COMBINING MACRON" #x0304)
-    ("COMBINING OVERLINE" #x0305)
-    ("COMBINING BREVE" #x0306)
-    ("COMBINING DOT ABOVE" #x0307)
-    ("COMBINING DIAERESIS" #x0308)
-    ("COMBINING HOOK ABOVE" #x0309)
-    ("COMBINING RING ABOVE" #x030A)
-    ("COMBINING DOUBLE ACUTE ACCENT" #x030B)
-    ("COMBINING CARON" #x030C)
-    ("COMBINING VERTICAL LINE ABOVE" #x030D)
-    ("COMBINING DOUBLE VERTICAL LINE ABOVE" #x030E)
-    ("COMBINING DOUBLE GRAVE ACCENT" #x030F)
-    ("COMBINING CANDRABINDU" #x0310)
-    ("COMBINING INVERTED BREVE" #x0311)
-    ("COMBINING TURNED COMMA ABOVE" #x0312)
-    ("COMBINING COMMA ABOVE" #x0313)
-    ("COMBINING REVERSED COMMA ABOVE" #x0314)
-    ("COMBINING COMMA ABOVE RIGHT" #x0315)
-    ("COMBINING GRAVE ACCENT BELOW" #x0316)
-    ("COMBINING ACUTE ACCENT BELOW" #x0317)
-    ("COMBINING LEFT TACK BELOW" #x0318)
-    ("COMBINING RIGHT TACK BELOW" #x0319)
-    ("COMBINING LEFT ANGLE ABOVE" #x031A)
-    ("COMBINING HORN" #x031B)
-    ("COMBINING LEFT HALF RING BELOW" #x031C)
-    ("COMBINING UP TACK BELOW" #x031D)
-    ("COMBINING DOWN TACK BELOW" #x031E)
-    ("COMBINING PLUS SIGN BELOW" #x031F)
-    ("COMBINING MINUS SIGN BELOW" #x0320)
-    ("COMBINING PALATALIZED HOOK BELOW" #x0321)
-    ("COMBINING RETROFLEX HOOK BELOW" #x0322)
-    ("COMBINING DOT BELOW" #x0323)
-    ("COMBINING DIAERESIS BELOW" #x0324)
-    ("COMBINING RING BELOW" #x0325)
-    ("COMBINING COMMA BELOW" #x0326)
-    ("COMBINING CEDILLA" #x0327)
-    ("COMBINING OGONEK" #x0328)
-    ("COMBINING VERTICAL LINE BELOW" #x0329)
-    ("COMBINING BRIDGE BELOW" #x032A)
-    ("COMBINING INVERTED DOUBLE ARCH BELOW" #x032B)
-    ("COMBINING CARON BELOW" #x032C)
-    ("COMBINING CIRCUMFLEX ACCENT BELOW" #x032D)
-    ("COMBINING BREVE BELOW" #x032E)
-    ("COMBINING INVERTED BREVE BELOW" #x032F)
-    ("COMBINING TILDE BELOW" #x0330)
-    ("COMBINING MACRON BELOW" #x0331)
-    ("COMBINING LOW LINE" #x0332)
-    ("COMBINING DOUBLE LOW LINE" #x0333)
-    ("COMBINING TILDE OVERLAY" #x0334)
-    ("COMBINING SHORT STROKE OVERLAY" #x0335)
-    ("COMBINING LONG STROKE OVERLAY" #x0336)
-    ("COMBINING SHORT SOLIDUS OVERLAY" #x0337)
-    ("COMBINING LONG SOLIDUS OVERLAY" #x0338)
-    ("COMBINING RIGHT HALF RING BELOW" #x0339)
-    ("COMBINING INVERTED BRIDGE BELOW" #x033A)
-    ("COMBINING SQUARE BELOW" #x033B)
-    ("COMBINING SEAGULL BELOW" #x033C)
-    ("COMBINING X ABOVE" #x033D)
-    ("COMBINING VERTICAL TILDE" #x033E)
-    ("COMBINING DOUBLE OVERLINE" #x033F)
-    ("COMBINING GRAVE TONE MARK" #x0340)
-    ("COMBINING ACUTE TONE MARK" #x0341)
-    ("COMBINING GREEK PERISPOMENI" #x0342)
-    ("COMBINING GREEK KORONIS" #x0343)
-    ("COMBINING GREEK DIALYTIKA TONOS" #x0344)
-    ("COMBINING GREEK YPOGEGRAMMENI" #x0345)
-    ("COMBINING BRIDGE ABOVE" #x0346)
-    ("COMBINING EQUALS SIGN BELOW" #x0347)
-    ("COMBINING DOUBLE VERTICAL LINE BELOW" #x0348)
-    ("COMBINING LEFT ANGLE BELOW" #x0349)
-    ("COMBINING NOT TILDE ABOVE" #x034A)
-    ("COMBINING HOMOTHETIC ABOVE" #x034B)
-    ("COMBINING ALMOST EQUAL TO ABOVE" #x034C)
-    ("COMBINING LEFT RIGHT ARROW BELOW" #x034D)
-    ("COMBINING UPWARDS ARROW BELOW" #x034E)
-    ("COMBINING GRAPHEME JOINER" #x034F)
-    ("COMBINING DOUBLE TILDE" #x0360)
-    ("COMBINING DOUBLE INVERTED BREVE" #x0361)
-    ("COMBINING DOUBLE RIGHTWARDS ARROW BELOW" #x0362)
-    ("COMBINING LATIN SMALL LETTER A" #x0363)
-    ("COMBINING LATIN SMALL LETTER E" #x0364)
-    ("COMBINING LATIN SMALL LETTER I" #x0365)
-    ("COMBINING LATIN SMALL LETTER O" #x0366)
-    ("COMBINING LATIN SMALL LETTER U" #x0367)
-    ("COMBINING LATIN SMALL LETTER C" #x0368)
-    ("COMBINING LATIN SMALL LETTER D" #x0369)
-    ("COMBINING LATIN SMALL LETTER H" #x036A)
-    ("COMBINING LATIN SMALL LETTER M" #x036B)
-    ("COMBINING LATIN SMALL LETTER R" #x036C)
-    ("COMBINING LATIN SMALL LETTER T" #x036D)
-    ("COMBINING LATIN SMALL LETTER V" #x036E)
-    ("COMBINING LATIN SMALL LETTER X" #x036F)
-    ))
-
diff --git a/etc/nxml/00370-003FF.el b/etc/nxml/00370-003FF.el
deleted file mode 100644 (file)
index e127ea1..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-(nxml-define-char-name-set 'greek-and-coptic
-  '(("GREEK NUMERAL SIGN" #x0374)
-    ("GREEK LOWER NUMERAL SIGN" #x0375)
-    ("GREEK YPOGEGRAMMENI" #x037A)
-    ("GREEK QUESTION MARK" #x037E)
-    ("GREEK TONOS" #x0384)
-    ("GREEK DIALYTIKA TONOS" #x0385)
-    ("GREEK CAPITAL LETTER ALPHA WITH TONOS" #x0386)
-    ("GREEK ANO TELEIA" #x0387)
-    ("GREEK CAPITAL LETTER EPSILON WITH TONOS" #x0388)
-    ("GREEK CAPITAL LETTER ETA WITH TONOS" #x0389)
-    ("GREEK CAPITAL LETTER IOTA WITH TONOS" #x038A)
-    ("GREEK CAPITAL LETTER OMICRON WITH TONOS" #x038C)
-    ("GREEK CAPITAL LETTER UPSILON WITH TONOS" #x038E)
-    ("GREEK CAPITAL LETTER OMEGA WITH TONOS" #x038F)
-    ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS" #x0390)
-    ("GREEK CAPITAL LETTER ALPHA" #x0391)
-    ("GREEK CAPITAL LETTER BETA" #x0392)
-    ("GREEK CAPITAL LETTER GAMMA" #x0393)
-    ("GREEK CAPITAL LETTER DELTA" #x0394)
-    ("GREEK CAPITAL LETTER EPSILON" #x0395)
-    ("GREEK CAPITAL LETTER ZETA" #x0396)
-    ("GREEK CAPITAL LETTER ETA" #x0397)
-    ("GREEK CAPITAL LETTER THETA" #x0398)
-    ("GREEK CAPITAL LETTER IOTA" #x0399)
-    ("GREEK CAPITAL LETTER KAPPA" #x039A)
-    ("GREEK CAPITAL LETTER LAMDA" #x039B)
-    ("GREEK CAPITAL LETTER MU" #x039C)
-    ("GREEK CAPITAL LETTER NU" #x039D)
-    ("GREEK CAPITAL LETTER XI" #x039E)
-    ("GREEK CAPITAL LETTER OMICRON" #x039F)
-    ("GREEK CAPITAL LETTER PI" #x03A0)
-    ("GREEK CAPITAL LETTER RHO" #x03A1)
-    ("GREEK CAPITAL LETTER SIGMA" #x03A3)
-    ("GREEK CAPITAL LETTER TAU" #x03A4)
-    ("GREEK CAPITAL LETTER UPSILON" #x03A5)
-    ("GREEK CAPITAL LETTER PHI" #x03A6)
-    ("GREEK CAPITAL LETTER CHI" #x03A7)
-    ("GREEK CAPITAL LETTER PSI" #x03A8)
-    ("GREEK CAPITAL LETTER OMEGA" #x03A9)
-    ("GREEK CAPITAL LETTER IOTA WITH DIALYTIKA" #x03AA)
-    ("GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA" #x03AB)
-    ("GREEK SMALL LETTER ALPHA WITH TONOS" #x03AC)
-    ("GREEK SMALL LETTER EPSILON WITH TONOS" #x03AD)
-    ("GREEK SMALL LETTER ETA WITH TONOS" #x03AE)
-    ("GREEK SMALL LETTER IOTA WITH TONOS" #x03AF)
-    ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS" #x03B0)
-    ("GREEK SMALL LETTER ALPHA" #x03B1)
-    ("GREEK SMALL LETTER BETA" #x03B2)
-    ("GREEK SMALL LETTER GAMMA" #x03B3)
-    ("GREEK SMALL LETTER DELTA" #x03B4)
-    ("GREEK SMALL LETTER EPSILON" #x03B5)
-    ("GREEK SMALL LETTER ZETA" #x03B6)
-    ("GREEK SMALL LETTER ETA" #x03B7)
-    ("GREEK SMALL LETTER THETA" #x03B8)
-    ("GREEK SMALL LETTER IOTA" #x03B9)
-    ("GREEK SMALL LETTER KAPPA" #x03BA)
-    ("GREEK SMALL LETTER LAMDA" #x03BB)
-    ("GREEK SMALL LETTER MU" #x03BC)
-    ("GREEK SMALL LETTER NU" #x03BD)
-    ("GREEK SMALL LETTER XI" #x03BE)
-    ("GREEK SMALL LETTER OMICRON" #x03BF)
-    ("GREEK SMALL LETTER PI" #x03C0)
-    ("GREEK SMALL LETTER RHO" #x03C1)
-    ("GREEK SMALL LETTER FINAL SIGMA" #x03C2)
-    ("GREEK SMALL LETTER SIGMA" #x03C3)
-    ("GREEK SMALL LETTER TAU" #x03C4)
-    ("GREEK SMALL LETTER UPSILON" #x03C5)
-    ("GREEK SMALL LETTER PHI" #x03C6)
-    ("GREEK SMALL LETTER CHI" #x03C7)
-    ("GREEK SMALL LETTER PSI" #x03C8)
-    ("GREEK SMALL LETTER OMEGA" #x03C9)
-    ("GREEK SMALL LETTER IOTA WITH DIALYTIKA" #x03CA)
-    ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA" #x03CB)
-    ("GREEK SMALL LETTER OMICRON WITH TONOS" #x03CC)
-    ("GREEK SMALL LETTER UPSILON WITH TONOS" #x03CD)
-    ("GREEK SMALL LETTER OMEGA WITH TONOS" #x03CE)
-    ("GREEK BETA SYMBOL" #x03D0)
-    ("GREEK THETA SYMBOL" #x03D1)
-    ("GREEK UPSILON WITH HOOK SYMBOL" #x03D2)
-    ("GREEK UPSILON WITH ACUTE AND HOOK SYMBOL" #x03D3)
-    ("GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL" #x03D4)
-    ("GREEK PHI SYMBOL" #x03D5)
-    ("GREEK PI SYMBOL" #x03D6)
-    ("GREEK KAI SYMBOL" #x03D7)
-    ("GREEK LETTER ARCHAIC KOPPA" #x03D8)
-    ("GREEK SMALL LETTER ARCHAIC KOPPA" #x03D9)
-    ("GREEK LETTER STIGMA" #x03DA)
-    ("GREEK SMALL LETTER STIGMA" #x03DB)
-    ("GREEK LETTER DIGAMMA" #x03DC)
-    ("GREEK SMALL LETTER DIGAMMA" #x03DD)
-    ("GREEK LETTER KOPPA" #x03DE)
-    ("GREEK SMALL LETTER KOPPA" #x03DF)
-    ("GREEK LETTER SAMPI" #x03E0)
-    ("GREEK SMALL LETTER SAMPI" #x03E1)
-    ("COPTIC CAPITAL LETTER SHEI" #x03E2)
-    ("COPTIC SMALL LETTER SHEI" #x03E3)
-    ("COPTIC CAPITAL LETTER FEI" #x03E4)
-    ("COPTIC SMALL LETTER FEI" #x03E5)
-    ("COPTIC CAPITAL LETTER KHEI" #x03E6)
-    ("COPTIC SMALL LETTER KHEI" #x03E7)
-    ("COPTIC CAPITAL LETTER HORI" #x03E8)
-    ("COPTIC SMALL LETTER HORI" #x03E9)
-    ("COPTIC CAPITAL LETTER GANGIA" #x03EA)
-    ("COPTIC SMALL LETTER GANGIA" #x03EB)
-    ("COPTIC CAPITAL LETTER SHIMA" #x03EC)
-    ("COPTIC SMALL LETTER SHIMA" #x03ED)
-    ("COPTIC CAPITAL LETTER DEI" #x03EE)
-    ("COPTIC SMALL LETTER DEI" #x03EF)
-    ("GREEK KAPPA SYMBOL" #x03F0)
-    ("GREEK RHO SYMBOL" #x03F1)
-    ("GREEK LUNATE SIGMA SYMBOL" #x03F2)
-    ("GREEK LETTER YOT" #x03F3)
-    ("GREEK CAPITAL THETA SYMBOL" #x03F4)
-    ("GREEK LUNATE EPSILON SYMBOL" #x03F5)
-    ("GREEK REVERSED LUNATE EPSILON SYMBOL" #x03F6)
-    ))
-
diff --git a/etc/nxml/00400-004FF.el b/etc/nxml/00400-004FF.el
deleted file mode 100644 (file)
index e931099..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-(nxml-define-char-name-set 'cyrillic
-  '(("CYRILLIC CAPITAL LETTER IE WITH GRAVE" #x0400)
-    ("CYRILLIC CAPITAL LETTER IO" #x0401)
-    ("CYRILLIC CAPITAL LETTER DJE" #x0402)
-    ("CYRILLIC CAPITAL LETTER GJE" #x0403)
-    ("CYRILLIC CAPITAL LETTER UKRAINIAN IE" #x0404)
-    ("CYRILLIC CAPITAL LETTER DZE" #x0405)
-    ("CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I" #x0406)
-    ("CYRILLIC CAPITAL LETTER YI" #x0407)
-    ("CYRILLIC CAPITAL LETTER JE" #x0408)
-    ("CYRILLIC CAPITAL LETTER LJE" #x0409)
-    ("CYRILLIC CAPITAL LETTER NJE" #x040A)
-    ("CYRILLIC CAPITAL LETTER TSHE" #x040B)
-    ("CYRILLIC CAPITAL LETTER KJE" #x040C)
-    ("CYRILLIC CAPITAL LETTER I WITH GRAVE" #x040D)
-    ("CYRILLIC CAPITAL LETTER SHORT U" #x040E)
-    ("CYRILLIC CAPITAL LETTER DZHE" #x040F)
-    ("CYRILLIC CAPITAL LETTER A" #x0410)
-    ("CYRILLIC CAPITAL LETTER BE" #x0411)
-    ("CYRILLIC CAPITAL LETTER VE" #x0412)
-    ("CYRILLIC CAPITAL LETTER GHE" #x0413)
-    ("CYRILLIC CAPITAL LETTER DE" #x0414)
-    ("CYRILLIC CAPITAL LETTER IE" #x0415)
-    ("CYRILLIC CAPITAL LETTER ZHE" #x0416)
-    ("CYRILLIC CAPITAL LETTER ZE" #x0417)
-    ("CYRILLIC CAPITAL LETTER I" #x0418)
-    ("CYRILLIC CAPITAL LETTER SHORT I" #x0419)
-    ("CYRILLIC CAPITAL LETTER KA" #x041A)
-    ("CYRILLIC CAPITAL LETTER EL" #x041B)
-    ("CYRILLIC CAPITAL LETTER EM" #x041C)
-    ("CYRILLIC CAPITAL LETTER EN" #x041D)
-    ("CYRILLIC CAPITAL LETTER O" #x041E)
-    ("CYRILLIC CAPITAL LETTER PE" #x041F)
-    ("CYRILLIC CAPITAL LETTER ER" #x0420)
-    ("CYRILLIC CAPITAL LETTER ES" #x0421)
-    ("CYRILLIC CAPITAL LETTER TE" #x0422)
-    ("CYRILLIC CAPITAL LETTER U" #x0423)
-    ("CYRILLIC CAPITAL LETTER EF" #x0424)
-    ("CYRILLIC CAPITAL LETTER HA" #x0425)
-    ("CYRILLIC CAPITAL LETTER TSE" #x0426)
-    ("CYRILLIC CAPITAL LETTER CHE" #x0427)
-    ("CYRILLIC CAPITAL LETTER SHA" #x0428)
-    ("CYRILLIC CAPITAL LETTER SHCHA" #x0429)
-    ("CYRILLIC CAPITAL LETTER HARD SIGN" #x042A)
-    ("CYRILLIC CAPITAL LETTER YERU" #x042B)
-    ("CYRILLIC CAPITAL LETTER SOFT SIGN" #x042C)
-    ("CYRILLIC CAPITAL LETTER E" #x042D)
-    ("CYRILLIC CAPITAL LETTER YU" #x042E)
-    ("CYRILLIC CAPITAL LETTER YA" #x042F)
-    ("CYRILLIC SMALL LETTER A" #x0430)
-    ("CYRILLIC SMALL LETTER BE" #x0431)
-    ("CYRILLIC SMALL LETTER VE" #x0432)
-    ("CYRILLIC SMALL LETTER GHE" #x0433)
-    ("CYRILLIC SMALL LETTER DE" #x0434)
-    ("CYRILLIC SMALL LETTER IE" #x0435)
-    ("CYRILLIC SMALL LETTER ZHE" #x0436)
-    ("CYRILLIC SMALL LETTER ZE" #x0437)
-    ("CYRILLIC SMALL LETTER I" #x0438)
-    ("CYRILLIC SMALL LETTER SHORT I" #x0439)
-    ("CYRILLIC SMALL LETTER KA" #x043A)
-    ("CYRILLIC SMALL LETTER EL" #x043B)
-    ("CYRILLIC SMALL LETTER EM" #x043C)
-    ("CYRILLIC SMALL LETTER EN" #x043D)
-    ("CYRILLIC SMALL LETTER O" #x043E)
-    ("CYRILLIC SMALL LETTER PE" #x043F)
-    ("CYRILLIC SMALL LETTER ER" #x0440)
-    ("CYRILLIC SMALL LETTER ES" #x0441)
-    ("CYRILLIC SMALL LETTER TE" #x0442)
-    ("CYRILLIC SMALL LETTER U" #x0443)
-    ("CYRILLIC SMALL LETTER EF" #x0444)
-    ("CYRILLIC SMALL LETTER HA" #x0445)
-    ("CYRILLIC SMALL LETTER TSE" #x0446)
-    ("CYRILLIC SMALL LETTER CHE" #x0447)
-    ("CYRILLIC SMALL LETTER SHA" #x0448)
-    ("CYRILLIC SMALL LETTER SHCHA" #x0449)
-    ("CYRILLIC SMALL LETTER HARD SIGN" #x044A)
-    ("CYRILLIC SMALL LETTER YERU" #x044B)
-    ("CYRILLIC SMALL LETTER SOFT SIGN" #x044C)
-    ("CYRILLIC SMALL LETTER E" #x044D)
-    ("CYRILLIC SMALL LETTER YU" #x044E)
-    ("CYRILLIC SMALL LETTER YA" #x044F)
-    ("CYRILLIC SMALL LETTER IE WITH GRAVE" #x0450)
-    ("CYRILLIC SMALL LETTER IO" #x0451)
-    ("CYRILLIC SMALL LETTER DJE" #x0452)
-    ("CYRILLIC SMALL LETTER GJE" #x0453)
-    ("CYRILLIC SMALL LETTER UKRAINIAN IE" #x0454)
-    ("CYRILLIC SMALL LETTER DZE" #x0455)
-    ("CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I" #x0456)
-    ("CYRILLIC SMALL LETTER YI" #x0457)
-    ("CYRILLIC SMALL LETTER JE" #x0458)
-    ("CYRILLIC SMALL LETTER LJE" #x0459)
-    ("CYRILLIC SMALL LETTER NJE" #x045A)
-    ("CYRILLIC SMALL LETTER TSHE" #x045B)
-    ("CYRILLIC SMALL LETTER KJE" #x045C)
-    ("CYRILLIC SMALL LETTER I WITH GRAVE" #x045D)
-    ("CYRILLIC SMALL LETTER SHORT U" #x045E)
-    ("CYRILLIC SMALL LETTER DZHE" #x045F)
-    ("CYRILLIC CAPITAL LETTER OMEGA" #x0460)
-    ("CYRILLIC SMALL LETTER OMEGA" #x0461)
-    ("CYRILLIC CAPITAL LETTER YAT" #x0462)
-    ("CYRILLIC SMALL LETTER YAT" #x0463)
-    ("CYRILLIC CAPITAL LETTER IOTIFIED E" #x0464)
-    ("CYRILLIC SMALL LETTER IOTIFIED E" #x0465)
-    ("CYRILLIC CAPITAL LETTER LITTLE YUS" #x0466)
-    ("CYRILLIC SMALL LETTER LITTLE YUS" #x0467)
-    ("CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS" #x0468)
-    ("CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS" #x0469)
-    ("CYRILLIC CAPITAL LETTER BIG YUS" #x046A)
-    ("CYRILLIC SMALL LETTER BIG YUS" #x046B)
-    ("CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS" #x046C)
-    ("CYRILLIC SMALL LETTER IOTIFIED BIG YUS" #x046D)
-    ("CYRILLIC CAPITAL LETTER KSI" #x046E)
-    ("CYRILLIC SMALL LETTER KSI" #x046F)
-    ("CYRILLIC CAPITAL LETTER PSI" #x0470)
-    ("CYRILLIC SMALL LETTER PSI" #x0471)
-    ("CYRILLIC CAPITAL LETTER FITA" #x0472)
-    ("CYRILLIC SMALL LETTER FITA" #x0473)
-    ("CYRILLIC CAPITAL LETTER IZHITSA" #x0474)
-    ("CYRILLIC SMALL LETTER IZHITSA" #x0475)
-    ("CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0476)
-    ("CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0477)
-    ("CYRILLIC CAPITAL LETTER UK" #x0478)
-    ("CYRILLIC SMALL LETTER UK" #x0479)
-    ("CYRILLIC CAPITAL LETTER ROUND OMEGA" #x047A)
-    ("CYRILLIC SMALL LETTER ROUND OMEGA" #x047B)
-    ("CYRILLIC CAPITAL LETTER OMEGA WITH TITLO" #x047C)
-    ("CYRILLIC SMALL LETTER OMEGA WITH TITLO" #x047D)
-    ("CYRILLIC CAPITAL LETTER OT" #x047E)
-    ("CYRILLIC SMALL LETTER OT" #x047F)
-    ("CYRILLIC CAPITAL LETTER KOPPA" #x0480)
-    ("CYRILLIC SMALL LETTER KOPPA" #x0481)
-    ("CYRILLIC THOUSANDS SIGN" #x0482)
-    ("COMBINING CYRILLIC TITLO" #x0483)
-    ("COMBINING CYRILLIC PALATALIZATION" #x0484)
-    ("COMBINING CYRILLIC DASIA PNEUMATA" #x0485)
-    ("COMBINING CYRILLIC PSILI PNEUMATA" #x0486)
-    ("COMBINING CYRILLIC HUNDRED THOUSANDS SIGN" #x0488)
-    ("COMBINING CYRILLIC MILLIONS SIGN" #x0489)
-    ("CYRILLIC CAPITAL LETTER SHORT I WITH TAIL" #x048A)
-    ("CYRILLIC SMALL LETTER SHORT I WITH TAIL" #x048B)
-    ("CYRILLIC CAPITAL LETTER SEMISOFT SIGN" #x048C)
-    ("CYRILLIC SMALL LETTER SEMISOFT SIGN" #x048D)
-    ("CYRILLIC CAPITAL LETTER ER WITH TICK" #x048E)
-    ("CYRILLIC SMALL LETTER ER WITH TICK" #x048F)
-    ("CYRILLIC CAPITAL LETTER GHE WITH UPTURN" #x0490)
-    ("CYRILLIC SMALL LETTER GHE WITH UPTURN" #x0491)
-    ("CYRILLIC CAPITAL LETTER GHE WITH STROKE" #x0492)
-    ("CYRILLIC SMALL LETTER GHE WITH STROKE" #x0493)
-    ("CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK" #x0494)
-    ("CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK" #x0495)
-    ("CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER" #x0496)
-    ("CYRILLIC SMALL LETTER ZHE WITH DESCENDER" #x0497)
-    ("CYRILLIC CAPITAL LETTER ZE WITH DESCENDER" #x0498)
-    ("CYRILLIC SMALL LETTER ZE WITH DESCENDER" #x0499)
-    ("CYRILLIC CAPITAL LETTER KA WITH DESCENDER" #x049A)
-    ("CYRILLIC SMALL LETTER KA WITH DESCENDER" #x049B)
-    ("CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE" #x049C)
-    ("CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE" #x049D)
-    ("CYRILLIC CAPITAL LETTER KA WITH STROKE" #x049E)
-    ("CYRILLIC SMALL LETTER KA WITH STROKE" #x049F)
-    ("CYRILLIC CAPITAL LETTER BASHKIR KA" #x04A0)
-    ("CYRILLIC SMALL LETTER BASHKIR KA" #x04A1)
-    ("CYRILLIC CAPITAL LETTER EN WITH DESCENDER" #x04A2)
-    ("CYRILLIC SMALL LETTER EN WITH DESCENDER" #x04A3)
-    ("CYRILLIC CAPITAL LIGATURE EN GHE" #x04A4)
-    ("CYRILLIC SMALL LIGATURE EN GHE" #x04A5)
-    ("CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK" #x04A6)
-    ("CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK" #x04A7)
-    ("CYRILLIC CAPITAL LETTER ABKHASIAN HA" #x04A8)
-    ("CYRILLIC SMALL LETTER ABKHASIAN HA" #x04A9)
-    ("CYRILLIC CAPITAL LETTER ES WITH DESCENDER" #x04AA)
-    ("CYRILLIC SMALL LETTER ES WITH DESCENDER" #x04AB)
-    ("CYRILLIC CAPITAL LETTER TE WITH DESCENDER" #x04AC)
-    ("CYRILLIC SMALL LETTER TE WITH DESCENDER" #x04AD)
-    ("CYRILLIC CAPITAL LETTER STRAIGHT U" #x04AE)
-    ("CYRILLIC SMALL LETTER STRAIGHT U" #x04AF)
-    ("CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE" #x04B0)
-    ("CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE" #x04B1)
-    ("CYRILLIC CAPITAL LETTER HA WITH DESCENDER" #x04B2)
-    ("CYRILLIC SMALL LETTER HA WITH DESCENDER" #x04B3)
-    ("CYRILLIC CAPITAL LIGATURE TE TSE" #x04B4)
-    ("CYRILLIC SMALL LIGATURE TE TSE" #x04B5)
-    ("CYRILLIC CAPITAL LETTER CHE WITH DESCENDER" #x04B6)
-    ("CYRILLIC SMALL LETTER CHE WITH DESCENDER" #x04B7)
-    ("CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE" #x04B8)
-    ("CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE" #x04B9)
-    ("CYRILLIC CAPITAL LETTER SHHA" #x04BA)
-    ("CYRILLIC SMALL LETTER SHHA" #x04BB)
-    ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE" #x04BC)
-    ("CYRILLIC SMALL LETTER ABKHASIAN CHE" #x04BD)
-    ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BE)
-    ("CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BF)
-    ("CYRILLIC LETTER PALOCHKA" #x04C0)
-    ("CYRILLIC CAPITAL LETTER ZHE WITH BREVE" #x04C1)
-    ("CYRILLIC SMALL LETTER ZHE WITH BREVE" #x04C2)
-    ("CYRILLIC CAPITAL LETTER KA WITH HOOK" #x04C3)
-    ("CYRILLIC SMALL LETTER KA WITH HOOK" #x04C4)
-    ("CYRILLIC CAPITAL LETTER EL WITH TAIL" #x04C5)
-    ("CYRILLIC SMALL LETTER EL WITH TAIL" #x04C6)
-    ("CYRILLIC CAPITAL LETTER EN WITH HOOK" #x04C7)
-    ("CYRILLIC SMALL LETTER EN WITH HOOK" #x04C8)
-    ("CYRILLIC CAPITAL LETTER EN WITH TAIL" #x04C9)
-    ("CYRILLIC SMALL LETTER EN WITH TAIL" #x04CA)
-    ("CYRILLIC CAPITAL LETTER KHAKASSIAN CHE" #x04CB)
-    ("CYRILLIC SMALL LETTER KHAKASSIAN CHE" #x04CC)
-    ("CYRILLIC CAPITAL LETTER EM WITH TAIL" #x04CD)
-    ("CYRILLIC SMALL LETTER EM WITH TAIL" #x04CE)
-    ("CYRILLIC CAPITAL LETTER A WITH BREVE" #x04D0)
-    ("CYRILLIC SMALL LETTER A WITH BREVE" #x04D1)
-    ("CYRILLIC CAPITAL LETTER A WITH DIAERESIS" #x04D2)
-    ("CYRILLIC SMALL LETTER A WITH DIAERESIS" #x04D3)
-    ("CYRILLIC CAPITAL LIGATURE A IE" #x04D4)
-    ("CYRILLIC SMALL LIGATURE A IE" #x04D5)
-    ("CYRILLIC CAPITAL LETTER IE WITH BREVE" #x04D6)
-    ("CYRILLIC SMALL LETTER IE WITH BREVE" #x04D7)
-    ("CYRILLIC CAPITAL LETTER SCHWA" #x04D8)
-    ("CYRILLIC SMALL LETTER SCHWA" #x04D9)
-    ("CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS" #x04DA)
-    ("CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS" #x04DB)
-    ("CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS" #x04DC)
-    ("CYRILLIC SMALL LETTER ZHE WITH DIAERESIS" #x04DD)
-    ("CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS" #x04DE)
-    ("CYRILLIC SMALL LETTER ZE WITH DIAERESIS" #x04DF)
-    ("CYRILLIC CAPITAL LETTER ABKHASIAN DZE" #x04E0)
-    ("CYRILLIC SMALL LETTER ABKHASIAN DZE" #x04E1)
-    ("CYRILLIC CAPITAL LETTER I WITH MACRON" #x04E2)
-    ("CYRILLIC SMALL LETTER I WITH MACRON" #x04E3)
-    ("CYRILLIC CAPITAL LETTER I WITH DIAERESIS" #x04E4)
-    ("CYRILLIC SMALL LETTER I WITH DIAERESIS" #x04E5)
-    ("CYRILLIC CAPITAL LETTER O WITH DIAERESIS" #x04E6)
-    ("CYRILLIC SMALL LETTER O WITH DIAERESIS" #x04E7)
-    ("CYRILLIC CAPITAL LETTER BARRED O" #x04E8)
-    ("CYRILLIC SMALL LETTER BARRED O" #x04E9)
-    ("CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS" #x04EA)
-    ("CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS" #x04EB)
-    ("CYRILLIC CAPITAL LETTER E WITH DIAERESIS" #x04EC)
-    ("CYRILLIC SMALL LETTER E WITH DIAERESIS" #x04ED)
-    ("CYRILLIC CAPITAL LETTER U WITH MACRON" #x04EE)
-    ("CYRILLIC SMALL LETTER U WITH MACRON" #x04EF)
-    ("CYRILLIC CAPITAL LETTER U WITH DIAERESIS" #x04F0)
-    ("CYRILLIC SMALL LETTER U WITH DIAERESIS" #x04F1)
-    ("CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE" #x04F2)
-    ("CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE" #x04F3)
-    ("CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS" #x04F4)
-    ("CYRILLIC SMALL LETTER CHE WITH DIAERESIS" #x04F5)
-    ("CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS" #x04F8)
-    ("CYRILLIC SMALL LETTER YERU WITH DIAERESIS" #x04F9)
-    ))
-
diff --git a/etc/nxml/00500-0052F.el b/etc/nxml/00500-0052F.el
deleted file mode 100644 (file)
index ba1587a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(nxml-define-char-name-set 'cyrillic-supplementary
-  '(("CYRILLIC CAPITAL LETTER KOMI DE" #x0500)
-    ("CYRILLIC SMALL LETTER KOMI DE" #x0501)
-    ("CYRILLIC CAPITAL LETTER KOMI DJE" #x0502)
-    ("CYRILLIC SMALL LETTER KOMI DJE" #x0503)
-    ("CYRILLIC CAPITAL LETTER KOMI ZJE" #x0504)
-    ("CYRILLIC SMALL LETTER KOMI ZJE" #x0505)
-    ("CYRILLIC CAPITAL LETTER KOMI DZJE" #x0506)
-    ("CYRILLIC SMALL LETTER KOMI DZJE" #x0507)
-    ("CYRILLIC CAPITAL LETTER KOMI LJE" #x0508)
-    ("CYRILLIC SMALL LETTER KOMI LJE" #x0509)
-    ("CYRILLIC CAPITAL LETTER KOMI NJE" #x050A)
-    ("CYRILLIC SMALL LETTER KOMI NJE" #x050B)
-    ("CYRILLIC CAPITAL LETTER KOMI SJE" #x050C)
-    ("CYRILLIC SMALL LETTER KOMI SJE" #x050D)
-    ("CYRILLIC CAPITAL LETTER KOMI TJE" #x050E)
-    ("CYRILLIC SMALL LETTER KOMI TJE" #x050F)
-    ))
-
diff --git a/etc/nxml/00530-0058F.el b/etc/nxml/00530-0058F.el
deleted file mode 100644 (file)
index 83b5bdf..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-(nxml-define-char-name-set 'armenian
-  '(("ARMENIAN CAPITAL LETTER AYB" #x0531)
-    ("ARMENIAN CAPITAL LETTER BEN" #x0532)
-    ("ARMENIAN CAPITAL LETTER GIM" #x0533)
-    ("ARMENIAN CAPITAL LETTER DA" #x0534)
-    ("ARMENIAN CAPITAL LETTER ECH" #x0535)
-    ("ARMENIAN CAPITAL LETTER ZA" #x0536)
-    ("ARMENIAN CAPITAL LETTER EH" #x0537)
-    ("ARMENIAN CAPITAL LETTER ET" #x0538)
-    ("ARMENIAN CAPITAL LETTER TO" #x0539)
-    ("ARMENIAN CAPITAL LETTER ZHE" #x053A)
-    ("ARMENIAN CAPITAL LETTER INI" #x053B)
-    ("ARMENIAN CAPITAL LETTER LIWN" #x053C)
-    ("ARMENIAN CAPITAL LETTER XEH" #x053D)
-    ("ARMENIAN CAPITAL LETTER CA" #x053E)
-    ("ARMENIAN CAPITAL LETTER KEN" #x053F)
-    ("ARMENIAN CAPITAL LETTER HO" #x0540)
-    ("ARMENIAN CAPITAL LETTER JA" #x0541)
-    ("ARMENIAN CAPITAL LETTER GHAD" #x0542)
-    ("ARMENIAN CAPITAL LETTER CHEH" #x0543)
-    ("ARMENIAN CAPITAL LETTER MEN" #x0544)
-    ("ARMENIAN CAPITAL LETTER YI" #x0545)
-    ("ARMENIAN CAPITAL LETTER NOW" #x0546)
-    ("ARMENIAN CAPITAL LETTER SHA" #x0547)
-    ("ARMENIAN CAPITAL LETTER VO" #x0548)
-    ("ARMENIAN CAPITAL LETTER CHA" #x0549)
-    ("ARMENIAN CAPITAL LETTER PEH" #x054A)
-    ("ARMENIAN CAPITAL LETTER JHEH" #x054B)
-    ("ARMENIAN CAPITAL LETTER RA" #x054C)
-    ("ARMENIAN CAPITAL LETTER SEH" #x054D)
-    ("ARMENIAN CAPITAL LETTER VEW" #x054E)
-    ("ARMENIAN CAPITAL LETTER TIWN" #x054F)
-    ("ARMENIAN CAPITAL LETTER REH" #x0550)
-    ("ARMENIAN CAPITAL LETTER CO" #x0551)
-    ("ARMENIAN CAPITAL LETTER YIWN" #x0552)
-    ("ARMENIAN CAPITAL LETTER PIWR" #x0553)
-    ("ARMENIAN CAPITAL LETTER KEH" #x0554)
-    ("ARMENIAN CAPITAL LETTER OH" #x0555)
-    ("ARMENIAN CAPITAL LETTER FEH" #x0556)
-    ("ARMENIAN MODIFIER LETTER LEFT HALF RING" #x0559)
-    ("ARMENIAN APOSTROPHE" #x055A)
-    ("ARMENIAN EMPHASIS MARK" #x055B)
-    ("ARMENIAN EXCLAMATION MARK" #x055C)
-    ("ARMENIAN COMMA" #x055D)
-    ("ARMENIAN QUESTION MARK" #x055E)
-    ("ARMENIAN ABBREVIATION MARK" #x055F)
-    ("ARMENIAN SMALL LETTER AYB" #x0561)
-    ("ARMENIAN SMALL LETTER BEN" #x0562)
-    ("ARMENIAN SMALL LETTER GIM" #x0563)
-    ("ARMENIAN SMALL LETTER DA" #x0564)
-    ("ARMENIAN SMALL LETTER ECH" #x0565)
-    ("ARMENIAN SMALL LETTER ZA" #x0566)
-    ("ARMENIAN SMALL LETTER EH" #x0567)
-    ("ARMENIAN SMALL LETTER ET" #x0568)
-    ("ARMENIAN SMALL LETTER TO" #x0569)
-    ("ARMENIAN SMALL LETTER ZHE" #x056A)
-    ("ARMENIAN SMALL LETTER INI" #x056B)
-    ("ARMENIAN SMALL LETTER LIWN" #x056C)
-    ("ARMENIAN SMALL LETTER XEH" #x056D)
-    ("ARMENIAN SMALL LETTER CA" #x056E)
-    ("ARMENIAN SMALL LETTER KEN" #x056F)
-    ("ARMENIAN SMALL LETTER HO" #x0570)
-    ("ARMENIAN SMALL LETTER JA" #x0571)
-    ("ARMENIAN SMALL LETTER GHAD" #x0572)
-    ("ARMENIAN SMALL LETTER CHEH" #x0573)
-    ("ARMENIAN SMALL LETTER MEN" #x0574)
-    ("ARMENIAN SMALL LETTER YI" #x0575)
-    ("ARMENIAN SMALL LETTER NOW" #x0576)
-    ("ARMENIAN SMALL LETTER SHA" #x0577)
-    ("ARMENIAN SMALL LETTER VO" #x0578)
-    ("ARMENIAN SMALL LETTER CHA" #x0579)
-    ("ARMENIAN SMALL LETTER PEH" #x057A)
-    ("ARMENIAN SMALL LETTER JHEH" #x057B)
-    ("ARMENIAN SMALL LETTER RA" #x057C)
-    ("ARMENIAN SMALL LETTER SEH" #x057D)
-    ("ARMENIAN SMALL LETTER VEW" #x057E)
-    ("ARMENIAN SMALL LETTER TIWN" #x057F)
-    ("ARMENIAN SMALL LETTER REH" #x0580)
-    ("ARMENIAN SMALL LETTER CO" #x0581)
-    ("ARMENIAN SMALL LETTER YIWN" #x0582)
-    ("ARMENIAN SMALL LETTER PIWR" #x0583)
-    ("ARMENIAN SMALL LETTER KEH" #x0584)
-    ("ARMENIAN SMALL LETTER OH" #x0585)
-    ("ARMENIAN SMALL LETTER FEH" #x0586)
-    ("ARMENIAN SMALL LIGATURE ECH YIWN" #x0587)
-    ("ARMENIAN FULL STOP" #x0589)
-    ("ARMENIAN HYPHEN" #x058A)
-    ))
-
diff --git a/etc/nxml/00590-005FF.el b/etc/nxml/00590-005FF.el
deleted file mode 100644 (file)
index ecd07b1..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-(nxml-define-char-name-set 'hebrew
-  '(("HEBREW ACCENT ETNAHTA" #x0591)
-    ("HEBREW ACCENT SEGOL" #x0592)
-    ("HEBREW ACCENT SHALSHELET" #x0593)
-    ("HEBREW ACCENT ZAQEF QATAN" #x0594)
-    ("HEBREW ACCENT ZAQEF GADOL" #x0595)
-    ("HEBREW ACCENT TIPEHA" #x0596)
-    ("HEBREW ACCENT REVIA" #x0597)
-    ("HEBREW ACCENT ZARQA" #x0598)
-    ("HEBREW ACCENT PASHTA" #x0599)
-    ("HEBREW ACCENT YETIV" #x059A)
-    ("HEBREW ACCENT TEVIR" #x059B)
-    ("HEBREW ACCENT GERESH" #x059C)
-    ("HEBREW ACCENT GERESH MUQDAM" #x059D)
-    ("HEBREW ACCENT GERSHAYIM" #x059E)
-    ("HEBREW ACCENT QARNEY PARA" #x059F)
-    ("HEBREW ACCENT TELISHA GEDOLA" #x05A0)
-    ("HEBREW ACCENT PAZER" #x05A1)
-    ("HEBREW ACCENT MUNAH" #x05A3)
-    ("HEBREW ACCENT MAHAPAKH" #x05A4)
-    ("HEBREW ACCENT MERKHA" #x05A5)
-    ("HEBREW ACCENT MERKHA KEFULA" #x05A6)
-    ("HEBREW ACCENT DARGA" #x05A7)
-    ("HEBREW ACCENT QADMA" #x05A8)
-    ("HEBREW ACCENT TELISHA QETANA" #x05A9)
-    ("HEBREW ACCENT YERAH BEN YOMO" #x05AA)
-    ("HEBREW ACCENT OLE" #x05AB)
-    ("HEBREW ACCENT ILUY" #x05AC)
-    ("HEBREW ACCENT DEHI" #x05AD)
-    ("HEBREW ACCENT ZINOR" #x05AE)
-    ("HEBREW MARK MASORA CIRCLE" #x05AF)
-    ("HEBREW POINT SHEVA" #x05B0)
-    ("HEBREW POINT HATAF SEGOL" #x05B1)
-    ("HEBREW POINT HATAF PATAH" #x05B2)
-    ("HEBREW POINT HATAF QAMATS" #x05B3)
-    ("HEBREW POINT HIRIQ" #x05B4)
-    ("HEBREW POINT TSERE" #x05B5)
-    ("HEBREW POINT SEGOL" #x05B6)
-    ("HEBREW POINT PATAH" #x05B7)
-    ("HEBREW POINT QAMATS" #x05B8)
-    ("HEBREW POINT HOLAM" #x05B9)
-    ("HEBREW POINT QUBUTS" #x05BB)
-    ("HEBREW POINT DAGESH OR MAPIQ" #x05BC)
-    ("HEBREW POINT METEG" #x05BD)
-    ("HEBREW PUNCTUATION MAQAF" #x05BE)
-    ("HEBREW POINT RAFE" #x05BF)
-    ("HEBREW PUNCTUATION PASEQ" #x05C0)
-    ("HEBREW POINT SHIN DOT" #x05C1)
-    ("HEBREW POINT SIN DOT" #x05C2)
-    ("HEBREW PUNCTUATION SOF PASUQ" #x05C3)
-    ("HEBREW MARK UPPER DOT" #x05C4)
-    ("HEBREW LETTER ALEF" #x05D0)
-    ("HEBREW LETTER BET" #x05D1)
-    ("HEBREW LETTER GIMEL" #x05D2)
-    ("HEBREW LETTER DALET" #x05D3)
-    ("HEBREW LETTER HE" #x05D4)
-    ("HEBREW LETTER VAV" #x05D5)
-    ("HEBREW LETTER ZAYIN" #x05D6)
-    ("HEBREW LETTER HET" #x05D7)
-    ("HEBREW LETTER TET" #x05D8)
-    ("HEBREW LETTER YOD" #x05D9)
-    ("HEBREW LETTER FINAL KAF" #x05DA)
-    ("HEBREW LETTER KAF" #x05DB)
-    ("HEBREW LETTER LAMED" #x05DC)
-    ("HEBREW LETTER FINAL MEM" #x05DD)
-    ("HEBREW LETTER MEM" #x05DE)
-    ("HEBREW LETTER FINAL NUN" #x05DF)
-    ("HEBREW LETTER NUN" #x05E0)
-    ("HEBREW LETTER SAMEKH" #x05E1)
-    ("HEBREW LETTER AYIN" #x05E2)
-    ("HEBREW LETTER FINAL PE" #x05E3)
-    ("HEBREW LETTER PE" #x05E4)
-    ("HEBREW LETTER FINAL TSADI" #x05E5)
-    ("HEBREW LETTER TSADI" #x05E6)
-    ("HEBREW LETTER QOF" #x05E7)
-    ("HEBREW LETTER RESH" #x05E8)
-    ("HEBREW LETTER SHIN" #x05E9)
-    ("HEBREW LETTER TAV" #x05EA)
-    ("HEBREW LIGATURE YIDDISH DOUBLE VAV" #x05F0)
-    ("HEBREW LIGATURE YIDDISH VAV YOD" #x05F1)
-    ("HEBREW LIGATURE YIDDISH DOUBLE YOD" #x05F2)
-    ("HEBREW PUNCTUATION GERESH" #x05F3)
-    ("HEBREW PUNCTUATION GERSHAYIM" #x05F4)
-    ))
-
diff --git a/etc/nxml/00600-006FF.el b/etc/nxml/00600-006FF.el
deleted file mode 100644 (file)
index a3b997f..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-(nxml-define-char-name-set 'arabic
-  '(("ARABIC COMMA" #x060C)
-    ("ARABIC SEMICOLON" #x061B)
-    ("ARABIC QUESTION MARK" #x061F)
-    ("ARABIC LETTER HAMZA" #x0621)
-    ("ARABIC LETTER ALEF WITH MADDA ABOVE" #x0622)
-    ("ARABIC LETTER ALEF WITH HAMZA ABOVE" #x0623)
-    ("ARABIC LETTER WAW WITH HAMZA ABOVE" #x0624)
-    ("ARABIC LETTER ALEF WITH HAMZA BELOW" #x0625)
-    ("ARABIC LETTER YEH WITH HAMZA ABOVE" #x0626)
-    ("ARABIC LETTER ALEF" #x0627)
-    ("ARABIC LETTER BEH" #x0628)
-    ("ARABIC LETTER TEH MARBUTA" #x0629)
-    ("ARABIC LETTER TEH" #x062A)
-    ("ARABIC LETTER THEH" #x062B)
-    ("ARABIC LETTER JEEM" #x062C)
-    ("ARABIC LETTER HAH" #x062D)
-    ("ARABIC LETTER KHAH" #x062E)
-    ("ARABIC LETTER DAL" #x062F)
-    ("ARABIC LETTER THAL" #x0630)
-    ("ARABIC LETTER REH" #x0631)
-    ("ARABIC LETTER ZAIN" #x0632)
-    ("ARABIC LETTER SEEN" #x0633)
-    ("ARABIC LETTER SHEEN" #x0634)
-    ("ARABIC LETTER SAD" #x0635)
-    ("ARABIC LETTER DAD" #x0636)
-    ("ARABIC LETTER TAH" #x0637)
-    ("ARABIC LETTER ZAH" #x0638)
-    ("ARABIC LETTER AIN" #x0639)
-    ("ARABIC LETTER GHAIN" #x063A)
-    ("ARABIC TATWEEL" #x0640)
-    ("ARABIC LETTER FEH" #x0641)
-    ("ARABIC LETTER QAF" #x0642)
-    ("ARABIC LETTER KAF" #x0643)
-    ("ARABIC LETTER LAM" #x0644)
-    ("ARABIC LETTER MEEM" #x0645)
-    ("ARABIC LETTER NOON" #x0646)
-    ("ARABIC LETTER HEH" #x0647)
-    ("ARABIC LETTER WAW" #x0648)
-    ("ARABIC LETTER ALEF MAKSURA" #x0649)
-    ("ARABIC LETTER YEH" #x064A)
-    ("ARABIC FATHATAN" #x064B)
-    ("ARABIC DAMMATAN" #x064C)
-    ("ARABIC KASRATAN" #x064D)
-    ("ARABIC FATHA" #x064E)
-    ("ARABIC DAMMA" #x064F)
-    ("ARABIC KASRA" #x0650)
-    ("ARABIC SHADDA" #x0651)
-    ("ARABIC SUKUN" #x0652)
-    ("ARABIC MADDAH ABOVE" #x0653)
-    ("ARABIC HAMZA ABOVE" #x0654)
-    ("ARABIC HAMZA BELOW" #x0655)
-    ("ARABIC-INDIC DIGIT ZERO" #x0660)
-    ("ARABIC-INDIC DIGIT ONE" #x0661)
-    ("ARABIC-INDIC DIGIT TWO" #x0662)
-    ("ARABIC-INDIC DIGIT THREE" #x0663)
-    ("ARABIC-INDIC DIGIT FOUR" #x0664)
-    ("ARABIC-INDIC DIGIT FIVE" #x0665)
-    ("ARABIC-INDIC DIGIT SIX" #x0666)
-    ("ARABIC-INDIC DIGIT SEVEN" #x0667)
-    ("ARABIC-INDIC DIGIT EIGHT" #x0668)
-    ("ARABIC-INDIC DIGIT NINE" #x0669)
-    ("ARABIC PERCENT SIGN" #x066A)
-    ("ARABIC DECIMAL SEPARATOR" #x066B)
-    ("ARABIC THOUSANDS SEPARATOR" #x066C)
-    ("ARABIC FIVE POINTED STAR" #x066D)
-    ("ARABIC LETTER DOTLESS BEH" #x066E)
-    ("ARABIC LETTER DOTLESS QAF" #x066F)
-    ("ARABIC LETTER SUPERSCRIPT ALEF" #x0670)
-    ("ARABIC LETTER ALEF WASLA" #x0671)
-    ("ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE" #x0672)
-    ("ARABIC LETTER ALEF WITH WAVY HAMZA BELOW" #x0673)
-    ("ARABIC LETTER HIGH HAMZA" #x0674)
-    ("ARABIC LETTER HIGH HAMZA ALEF" #x0675)
-    ("ARABIC LETTER HIGH HAMZA WAW" #x0676)
-    ("ARABIC LETTER U WITH HAMZA ABOVE" #x0677)
-    ("ARABIC LETTER HIGH HAMZA YEH" #x0678)
-    ("ARABIC LETTER TTEH" #x0679)
-    ("ARABIC LETTER TTEHEH" #x067A)
-    ("ARABIC LETTER BEEH" #x067B)
-    ("ARABIC LETTER TEH WITH RING" #x067C)
-    ("ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS" #x067D)
-    ("ARABIC LETTER PEH" #x067E)
-    ("ARABIC LETTER TEHEH" #x067F)
-    ("ARABIC LETTER BEHEH" #x0680)
-    ("ARABIC LETTER HAH WITH HAMZA ABOVE" #x0681)
-    ("ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE" #x0682)
-    ("ARABIC LETTER NYEH" #x0683)
-    ("ARABIC LETTER DYEH" #x0684)
-    ("ARABIC LETTER HAH WITH THREE DOTS ABOVE" #x0685)
-    ("ARABIC LETTER TCHEH" #x0686)
-    ("ARABIC LETTER TCHEHEH" #x0687)
-    ("ARABIC LETTER DDAL" #x0688)
-    ("ARABIC LETTER DAL WITH RING" #x0689)
-    ("ARABIC LETTER DAL WITH DOT BELOW" #x068A)
-    ("ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH" #x068B)
-    ("ARABIC LETTER DAHAL" #x068C)
-    ("ARABIC LETTER DDAHAL" #x068D)
-    ("ARABIC LETTER DUL" #x068E)
-    ("ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS" #x068F)
-    ("ARABIC LETTER DAL WITH FOUR DOTS ABOVE" #x0690)
-    ("ARABIC LETTER RREH" #x0691)
-    ("ARABIC LETTER REH WITH SMALL V" #x0692)
-    ("ARABIC LETTER REH WITH RING" #x0693)
-    ("ARABIC LETTER REH WITH DOT BELOW" #x0694)
-    ("ARABIC LETTER REH WITH SMALL V BELOW" #x0695)
-    ("ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE" #x0696)
-    ("ARABIC LETTER REH WITH TWO DOTS ABOVE" #x0697)
-    ("ARABIC LETTER JEH" #x0698)
-    ("ARABIC LETTER REH WITH FOUR DOTS ABOVE" #x0699)
-    ("ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE" #x069A)
-    ("ARABIC LETTER SEEN WITH THREE DOTS BELOW" #x069B)
-    ("ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE" #x069C)
-    ("ARABIC LETTER SAD WITH TWO DOTS BELOW" #x069D)
-    ("ARABIC LETTER SAD WITH THREE DOTS ABOVE" #x069E)
-    ("ARABIC LETTER TAH WITH THREE DOTS ABOVE" #x069F)
-    ("ARABIC LETTER AIN WITH THREE DOTS ABOVE" #x06A0)
-    ("ARABIC LETTER DOTLESS FEH" #x06A1)
-    ("ARABIC LETTER FEH WITH DOT MOVED BELOW" #x06A2)
-    ("ARABIC LETTER FEH WITH DOT BELOW" #x06A3)
-    ("ARABIC LETTER VEH" #x06A4)
-    ("ARABIC LETTER FEH WITH THREE DOTS BELOW" #x06A5)
-    ("ARABIC LETTER PEHEH" #x06A6)
-    ("ARABIC LETTER QAF WITH DOT ABOVE" #x06A7)
-    ("ARABIC LETTER QAF WITH THREE DOTS ABOVE" #x06A8)
-    ("ARABIC LETTER KEHEH" #x06A9)
-    ("ARABIC LETTER SWASH KAF" #x06AA)
-    ("ARABIC LETTER KAF WITH RING" #x06AB)
-    ("ARABIC LETTER KAF WITH DOT ABOVE" #x06AC)
-    ("ARABIC LETTER NG" #x06AD)
-    ("ARABIC LETTER KAF WITH THREE DOTS BELOW" #x06AE)
-    ("ARABIC LETTER GAF" #x06AF)
-    ("ARABIC LETTER GAF WITH RING" #x06B0)
-    ("ARABIC LETTER NGOEH" #x06B1)
-    ("ARABIC LETTER GAF WITH TWO DOTS BELOW" #x06B2)
-    ("ARABIC LETTER GUEH" #x06B3)
-    ("ARABIC LETTER GAF WITH THREE DOTS ABOVE" #x06B4)
-    ("ARABIC LETTER LAM WITH SMALL V" #x06B5)
-    ("ARABIC LETTER LAM WITH DOT ABOVE" #x06B6)
-    ("ARABIC LETTER LAM WITH THREE DOTS ABOVE" #x06B7)
-    ("ARABIC LETTER LAM WITH THREE DOTS BELOW" #x06B8)
-    ("ARABIC LETTER NOON WITH DOT BELOW" #x06B9)
-    ("ARABIC LETTER NOON GHUNNA" #x06BA)
-    ("ARABIC LETTER RNOON" #x06BB)
-    ("ARABIC LETTER NOON WITH RING" #x06BC)
-    ("ARABIC LETTER NOON WITH THREE DOTS ABOVE" #x06BD)
-    ("ARABIC LETTER HEH DOACHASHMEE" #x06BE)
-    ("ARABIC LETTER TCHEH WITH DOT ABOVE" #x06BF)
-    ("ARABIC LETTER HEH WITH YEH ABOVE" #x06C0)
-    ("ARABIC LETTER HEH GOAL" #x06C1)
-    ("ARABIC LETTER HEH GOAL WITH HAMZA ABOVE" #x06C2)
-    ("ARABIC LETTER TEH MARBUTA GOAL" #x06C3)
-    ("ARABIC LETTER WAW WITH RING" #x06C4)
-    ("ARABIC LETTER KIRGHIZ OE" #x06C5)
-    ("ARABIC LETTER OE" #x06C6)
-    ("ARABIC LETTER U" #x06C7)
-    ("ARABIC LETTER YU" #x06C8)
-    ("ARABIC LETTER KIRGHIZ YU" #x06C9)
-    ("ARABIC LETTER WAW WITH TWO DOTS ABOVE" #x06CA)
-    ("ARABIC LETTER VE" #x06CB)
-    ("ARABIC LETTER FARSI YEH" #x06CC)
-    ("ARABIC LETTER YEH WITH TAIL" #x06CD)
-    ("ARABIC LETTER YEH WITH SMALL V" #x06CE)
-    ("ARABIC LETTER WAW WITH DOT ABOVE" #x06CF)
-    ("ARABIC LETTER E" #x06D0)
-    ("ARABIC LETTER YEH WITH THREE DOTS BELOW" #x06D1)
-    ("ARABIC LETTER YEH BARREE" #x06D2)
-    ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE" #x06D3)
-    ("ARABIC FULL STOP" #x06D4)
-    ("ARABIC LETTER AE" #x06D5)
-    ("ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA" #x06D6)
-    ("ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA" #x06D7)
-    ("ARABIC SMALL HIGH MEEM INITIAL FORM" #x06D8)
-    ("ARABIC SMALL HIGH LAM ALEF" #x06D9)
-    ("ARABIC SMALL HIGH JEEM" #x06DA)
-    ("ARABIC SMALL HIGH THREE DOTS" #x06DB)
-    ("ARABIC SMALL HIGH SEEN" #x06DC)
-    ("ARABIC END OF AYAH" #x06DD)
-    ("ARABIC START OF RUB EL HIZB" #x06DE)
-    ("ARABIC SMALL HIGH ROUNDED ZERO" #x06DF)
-    ("ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO" #x06E0)
-    ("ARABIC SMALL HIGH DOTLESS HEAD OF KHAH" #x06E1)
-    ("ARABIC SMALL HIGH MEEM ISOLATED FORM" #x06E2)
-    ("ARABIC SMALL LOW SEEN" #x06E3)
-    ("ARABIC SMALL HIGH MADDA" #x06E4)
-    ("ARABIC SMALL WAW" #x06E5)
-    ("ARABIC SMALL YEH" #x06E6)
-    ("ARABIC SMALL HIGH YEH" #x06E7)
-    ("ARABIC SMALL HIGH NOON" #x06E8)
-    ("ARABIC PLACE OF SAJDAH" #x06E9)
-    ("ARABIC EMPTY CENTRE LOW STOP" #x06EA)
-    ("ARABIC EMPTY CENTRE HIGH STOP" #x06EB)
-    ("ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE" #x06EC)
-    ("ARABIC SMALL LOW MEEM" #x06ED)
-    ("EXTENDED ARABIC-INDIC DIGIT ZERO" #x06F0)
-    ("EXTENDED ARABIC-INDIC DIGIT ONE" #x06F1)
-    ("EXTENDED ARABIC-INDIC DIGIT TWO" #x06F2)
-    ("EXTENDED ARABIC-INDIC DIGIT THREE" #x06F3)
-    ("EXTENDED ARABIC-INDIC DIGIT FOUR" #x06F4)
-    ("EXTENDED ARABIC-INDIC DIGIT FIVE" #x06F5)
-    ("EXTENDED ARABIC-INDIC DIGIT SIX" #x06F6)
-    ("EXTENDED ARABIC-INDIC DIGIT SEVEN" #x06F7)
-    ("EXTENDED ARABIC-INDIC DIGIT EIGHT" #x06F8)
-    ("EXTENDED ARABIC-INDIC DIGIT NINE" #x06F9)
-    ("ARABIC LETTER SHEEN WITH DOT BELOW" #x06FA)
-    ("ARABIC LETTER DAD WITH DOT BELOW" #x06FB)
-    ("ARABIC LETTER GHAIN WITH DOT BELOW" #x06FC)
-    ("ARABIC SIGN SINDHI AMPERSAND" #x06FD)
-    ("ARABIC SIGN SINDHI POSTPOSITION MEN" #x06FE)
-    ))
-
diff --git a/etc/nxml/00700-0074F.el b/etc/nxml/00700-0074F.el
deleted file mode 100644 (file)
index 16bc7ae..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-(nxml-define-char-name-set 'syriac
-  '(("SYRIAC END OF PARAGRAPH" #x0700)
-    ("SYRIAC SUPRALINEAR FULL STOP" #x0701)
-    ("SYRIAC SUBLINEAR FULL STOP" #x0702)
-    ("SYRIAC SUPRALINEAR COLON" #x0703)
-    ("SYRIAC SUBLINEAR COLON" #x0704)
-    ("SYRIAC HORIZONTAL COLON" #x0705)
-    ("SYRIAC COLON SKEWED LEFT" #x0706)
-    ("SYRIAC COLON SKEWED RIGHT" #x0707)
-    ("SYRIAC SUPRALINEAR COLON SKEWED LEFT" #x0708)
-    ("SYRIAC SUBLINEAR COLON SKEWED RIGHT" #x0709)
-    ("SYRIAC CONTRACTION" #x070A)
-    ("SYRIAC HARKLEAN OBELUS" #x070B)
-    ("SYRIAC HARKLEAN METOBELUS" #x070C)
-    ("SYRIAC HARKLEAN ASTERISCUS" #x070D)
-    ("SYRIAC ABBREVIATION MARK" #x070F)
-    ("SYRIAC LETTER ALAPH" #x0710)
-    ("SYRIAC LETTER SUPERSCRIPT ALAPH" #x0711)
-    ("SYRIAC LETTER BETH" #x0712)
-    ("SYRIAC LETTER GAMAL" #x0713)
-    ("SYRIAC LETTER GAMAL GARSHUNI" #x0714)
-    ("SYRIAC LETTER DALATH" #x0715)
-    ("SYRIAC LETTER DOTLESS DALATH RISH" #x0716)
-    ("SYRIAC LETTER HE" #x0717)
-    ("SYRIAC LETTER WAW" #x0718)
-    ("SYRIAC LETTER ZAIN" #x0719)
-    ("SYRIAC LETTER HETH" #x071A)
-    ("SYRIAC LETTER TETH" #x071B)
-    ("SYRIAC LETTER TETH GARSHUNI" #x071C)
-    ("SYRIAC LETTER YUDH" #x071D)
-    ("SYRIAC LETTER YUDH HE" #x071E)
-    ("SYRIAC LETTER KAPH" #x071F)
-    ("SYRIAC LETTER LAMADH" #x0720)
-    ("SYRIAC LETTER MIM" #x0721)
-    ("SYRIAC LETTER NUN" #x0722)
-    ("SYRIAC LETTER SEMKATH" #x0723)
-    ("SYRIAC LETTER FINAL SEMKATH" #x0724)
-    ("SYRIAC LETTER E" #x0725)
-    ("SYRIAC LETTER PE" #x0726)
-    ("SYRIAC LETTER REVERSED PE" #x0727)
-    ("SYRIAC LETTER SADHE" #x0728)
-    ("SYRIAC LETTER QAPH" #x0729)
-    ("SYRIAC LETTER RISH" #x072A)
-    ("SYRIAC LETTER SHIN" #x072B)
-    ("SYRIAC LETTER TAW" #x072C)
-    ("SYRIAC PTHAHA ABOVE" #x0730)
-    ("SYRIAC PTHAHA BELOW" #x0731)
-    ("SYRIAC PTHAHA DOTTED" #x0732)
-    ("SYRIAC ZQAPHA ABOVE" #x0733)
-    ("SYRIAC ZQAPHA BELOW" #x0734)
-    ("SYRIAC ZQAPHA DOTTED" #x0735)
-    ("SYRIAC RBASA ABOVE" #x0736)
-    ("SYRIAC RBASA BELOW" #x0737)
-    ("SYRIAC DOTTED ZLAMA HORIZONTAL" #x0738)
-    ("SYRIAC DOTTED ZLAMA ANGULAR" #x0739)
-    ("SYRIAC HBASA ABOVE" #x073A)
-    ("SYRIAC HBASA BELOW" #x073B)
-    ("SYRIAC HBASA-ESASA DOTTED" #x073C)
-    ("SYRIAC ESASA ABOVE" #x073D)
-    ("SYRIAC ESASA BELOW" #x073E)
-    ("SYRIAC RWAHA" #x073F)
-    ("SYRIAC FEMININE DOT" #x0740)
-    ("SYRIAC QUSHSHAYA" #x0741)
-    ("SYRIAC RUKKAKHA" #x0742)
-    ("SYRIAC TWO VERTICAL DOTS ABOVE" #x0743)
-    ("SYRIAC TWO VERTICAL DOTS BELOW" #x0744)
-    ("SYRIAC THREE DOTS ABOVE" #x0745)
-    ("SYRIAC THREE DOTS BELOW" #x0746)
-    ("SYRIAC OBLIQUE LINE ABOVE" #x0747)
-    ("SYRIAC OBLIQUE LINE BELOW" #x0748)
-    ("SYRIAC MUSIC" #x0749)
-    ("SYRIAC BARREKH" #x074A)
-    ))
-
diff --git a/etc/nxml/00780-007BF.el b/etc/nxml/00780-007BF.el
deleted file mode 100644 (file)
index 8d54fd5..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-(nxml-define-char-name-set 'thaana
-  '(("THAANA LETTER HAA" #x0780)
-    ("THAANA LETTER SHAVIYANI" #x0781)
-    ("THAANA LETTER NOONU" #x0782)
-    ("THAANA LETTER RAA" #x0783)
-    ("THAANA LETTER BAA" #x0784)
-    ("THAANA LETTER LHAVIYANI" #x0785)
-    ("THAANA LETTER KAAFU" #x0786)
-    ("THAANA LETTER ALIFU" #x0787)
-    ("THAANA LETTER VAAVU" #x0788)
-    ("THAANA LETTER MEEMU" #x0789)
-    ("THAANA LETTER FAAFU" #x078A)
-    ("THAANA LETTER DHAALU" #x078B)
-    ("THAANA LETTER THAA" #x078C)
-    ("THAANA LETTER LAAMU" #x078D)
-    ("THAANA LETTER GAAFU" #x078E)
-    ("THAANA LETTER GNAVIYANI" #x078F)
-    ("THAANA LETTER SEENU" #x0790)
-    ("THAANA LETTER DAVIYANI" #x0791)
-    ("THAANA LETTER ZAVIYANI" #x0792)
-    ("THAANA LETTER TAVIYANI" #x0793)
-    ("THAANA LETTER YAA" #x0794)
-    ("THAANA LETTER PAVIYANI" #x0795)
-    ("THAANA LETTER JAVIYANI" #x0796)
-    ("THAANA LETTER CHAVIYANI" #x0797)
-    ("THAANA LETTER TTAA" #x0798)
-    ("THAANA LETTER HHAA" #x0799)
-    ("THAANA LETTER KHAA" #x079A)
-    ("THAANA LETTER THAALU" #x079B)
-    ("THAANA LETTER ZAA" #x079C)
-    ("THAANA LETTER SHEENU" #x079D)
-    ("THAANA LETTER SAADHU" #x079E)
-    ("THAANA LETTER DAADHU" #x079F)
-    ("THAANA LETTER TO" #x07A0)
-    ("THAANA LETTER ZO" #x07A1)
-    ("THAANA LETTER AINU" #x07A2)
-    ("THAANA LETTER GHAINU" #x07A3)
-    ("THAANA LETTER QAAFU" #x07A4)
-    ("THAANA LETTER WAAVU" #x07A5)
-    ("THAANA ABAFILI" #x07A6)
-    ("THAANA AABAAFILI" #x07A7)
-    ("THAANA IBIFILI" #x07A8)
-    ("THAANA EEBEEFILI" #x07A9)
-    ("THAANA UBUFILI" #x07AA)
-    ("THAANA OOBOOFILI" #x07AB)
-    ("THAANA EBEFILI" #x07AC)
-    ("THAANA EYBEYFILI" #x07AD)
-    ("THAANA OBOFILI" #x07AE)
-    ("THAANA OABOAFILI" #x07AF)
-    ("THAANA SUKUN" #x07B0)
-    ("THAANA LETTER NAA" #x07B1)
-    ))
-
diff --git a/etc/nxml/00900-0097F.el b/etc/nxml/00900-0097F.el
deleted file mode 100644 (file)
index 3a253f6..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-(nxml-define-char-name-set 'devanagari
-  '(("DEVANAGARI SIGN CANDRABINDU" #x0901)
-    ("DEVANAGARI SIGN ANUSVARA" #x0902)
-    ("DEVANAGARI SIGN VISARGA" #x0903)
-    ("DEVANAGARI LETTER A" #x0905)
-    ("DEVANAGARI LETTER AA" #x0906)
-    ("DEVANAGARI LETTER I" #x0907)
-    ("DEVANAGARI LETTER II" #x0908)
-    ("DEVANAGARI LETTER U" #x0909)
-    ("DEVANAGARI LETTER UU" #x090A)
-    ("DEVANAGARI LETTER VOCALIC R" #x090B)
-    ("DEVANAGARI LETTER VOCALIC L" #x090C)
-    ("DEVANAGARI LETTER CANDRA E" #x090D)
-    ("DEVANAGARI LETTER SHORT E" #x090E)
-    ("DEVANAGARI LETTER E" #x090F)
-    ("DEVANAGARI LETTER AI" #x0910)
-    ("DEVANAGARI LETTER CANDRA O" #x0911)
-    ("DEVANAGARI LETTER SHORT O" #x0912)
-    ("DEVANAGARI LETTER O" #x0913)
-    ("DEVANAGARI LETTER AU" #x0914)
-    ("DEVANAGARI LETTER KA" #x0915)
-    ("DEVANAGARI LETTER KHA" #x0916)
-    ("DEVANAGARI LETTER GA" #x0917)
-    ("DEVANAGARI LETTER GHA" #x0918)
-    ("DEVANAGARI LETTER NGA" #x0919)
-    ("DEVANAGARI LETTER CA" #x091A)
-    ("DEVANAGARI LETTER CHA" #x091B)
-    ("DEVANAGARI LETTER JA" #x091C)
-    ("DEVANAGARI LETTER JHA" #x091D)
-    ("DEVANAGARI LETTER NYA" #x091E)
-    ("DEVANAGARI LETTER TTA" #x091F)
-    ("DEVANAGARI LETTER TTHA" #x0920)
-    ("DEVANAGARI LETTER DDA" #x0921)
-    ("DEVANAGARI LETTER DDHA" #x0922)
-    ("DEVANAGARI LETTER NNA" #x0923)
-    ("DEVANAGARI LETTER TA" #x0924)
-    ("DEVANAGARI LETTER THA" #x0925)
-    ("DEVANAGARI LETTER DA" #x0926)
-    ("DEVANAGARI LETTER DHA" #x0927)
-    ("DEVANAGARI LETTER NA" #x0928)
-    ("DEVANAGARI LETTER NNNA" #x0929)
-    ("DEVANAGARI LETTER PA" #x092A)
-    ("DEVANAGARI LETTER PHA" #x092B)
-    ("DEVANAGARI LETTER BA" #x092C)
-    ("DEVANAGARI LETTER BHA" #x092D)
-    ("DEVANAGARI LETTER MA" #x092E)
-    ("DEVANAGARI LETTER YA" #x092F)
-    ("DEVANAGARI LETTER RA" #x0930)
-    ("DEVANAGARI LETTER RRA" #x0931)
-    ("DEVANAGARI LETTER LA" #x0932)
-    ("DEVANAGARI LETTER LLA" #x0933)
-    ("DEVANAGARI LETTER LLLA" #x0934)
-    ("DEVANAGARI LETTER VA" #x0935)
-    ("DEVANAGARI LETTER SHA" #x0936)
-    ("DEVANAGARI LETTER SSA" #x0937)
-    ("DEVANAGARI LETTER SA" #x0938)
-    ("DEVANAGARI LETTER HA" #x0939)
-    ("DEVANAGARI SIGN NUKTA" #x093C)
-    ("DEVANAGARI SIGN AVAGRAHA" #x093D)
-    ("DEVANAGARI VOWEL SIGN AA" #x093E)
-    ("DEVANAGARI VOWEL SIGN I" #x093F)
-    ("DEVANAGARI VOWEL SIGN II" #x0940)
-    ("DEVANAGARI VOWEL SIGN U" #x0941)
-    ("DEVANAGARI VOWEL SIGN UU" #x0942)
-    ("DEVANAGARI VOWEL SIGN VOCALIC R" #x0943)
-    ("DEVANAGARI VOWEL SIGN VOCALIC RR" #x0944)
-    ("DEVANAGARI VOWEL SIGN CANDRA E" #x0945)
-    ("DEVANAGARI VOWEL SIGN SHORT E" #x0946)
-    ("DEVANAGARI VOWEL SIGN E" #x0947)
-    ("DEVANAGARI VOWEL SIGN AI" #x0948)
-    ("DEVANAGARI VOWEL SIGN CANDRA O" #x0949)
-    ("DEVANAGARI VOWEL SIGN SHORT O" #x094A)
-    ("DEVANAGARI VOWEL SIGN O" #x094B)
-    ("DEVANAGARI VOWEL SIGN AU" #x094C)
-    ("DEVANAGARI SIGN VIRAMA" #x094D)
-    ("DEVANAGARI OM" #x0950)
-    ("DEVANAGARI STRESS SIGN UDATTA" #x0951)
-    ("DEVANAGARI STRESS SIGN ANUDATTA" #x0952)
-    ("DEVANAGARI GRAVE ACCENT" #x0953)
-    ("DEVANAGARI ACUTE ACCENT" #x0954)
-    ("DEVANAGARI LETTER QA" #x0958)
-    ("DEVANAGARI LETTER KHHA" #x0959)
-    ("DEVANAGARI LETTER GHHA" #x095A)
-    ("DEVANAGARI LETTER ZA" #x095B)
-    ("DEVANAGARI LETTER DDDHA" #x095C)
-    ("DEVANAGARI LETTER RHA" #x095D)
-    ("DEVANAGARI LETTER FA" #x095E)
-    ("DEVANAGARI LETTER YYA" #x095F)
-    ("DEVANAGARI LETTER VOCALIC RR" #x0960)
-    ("DEVANAGARI LETTER VOCALIC LL" #x0961)
-    ("DEVANAGARI VOWEL SIGN VOCALIC L" #x0962)
-    ("DEVANAGARI VOWEL SIGN VOCALIC LL" #x0963)
-    ("DEVANAGARI DANDA" #x0964)
-    ("DEVANAGARI DOUBLE DANDA" #x0965)
-    ("DEVANAGARI DIGIT ZERO" #x0966)
-    ("DEVANAGARI DIGIT ONE" #x0967)
-    ("DEVANAGARI DIGIT TWO" #x0968)
-    ("DEVANAGARI DIGIT THREE" #x0969)
-    ("DEVANAGARI DIGIT FOUR" #x096A)
-    ("DEVANAGARI DIGIT FIVE" #x096B)
-    ("DEVANAGARI DIGIT SIX" #x096C)
-    ("DEVANAGARI DIGIT SEVEN" #x096D)
-    ("DEVANAGARI DIGIT EIGHT" #x096E)
-    ("DEVANAGARI DIGIT NINE" #x096F)
-    ("DEVANAGARI ABBREVIATION SIGN" #x0970)
-    ))
-
diff --git a/etc/nxml/00980-009FF.el b/etc/nxml/00980-009FF.el
deleted file mode 100644 (file)
index 5cec96e..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-(nxml-define-char-name-set 'bengali
-  '(("BENGALI SIGN CANDRABINDU" #x0981)
-    ("BENGALI SIGN ANUSVARA" #x0982)
-    ("BENGALI SIGN VISARGA" #x0983)
-    ("BENGALI LETTER A" #x0985)
-    ("BENGALI LETTER AA" #x0986)
-    ("BENGALI LETTER I" #x0987)
-    ("BENGALI LETTER II" #x0988)
-    ("BENGALI LETTER U" #x0989)
-    ("BENGALI LETTER UU" #x098A)
-    ("BENGALI LETTER VOCALIC R" #x098B)
-    ("BENGALI LETTER VOCALIC L" #x098C)
-    ("BENGALI LETTER E" #x098F)
-    ("BENGALI LETTER AI" #x0990)
-    ("BENGALI LETTER O" #x0993)
-    ("BENGALI LETTER AU" #x0994)
-    ("BENGALI LETTER KA" #x0995)
-    ("BENGALI LETTER KHA" #x0996)
-    ("BENGALI LETTER GA" #x0997)
-    ("BENGALI LETTER GHA" #x0998)
-    ("BENGALI LETTER NGA" #x0999)
-    ("BENGALI LETTER CA" #x099A)
-    ("BENGALI LETTER CHA" #x099B)
-    ("BENGALI LETTER JA" #x099C)
-    ("BENGALI LETTER JHA" #x099D)
-    ("BENGALI LETTER NYA" #x099E)
-    ("BENGALI LETTER TTA" #x099F)
-    ("BENGALI LETTER TTHA" #x09A0)
-    ("BENGALI LETTER DDA" #x09A1)
-    ("BENGALI LETTER DDHA" #x09A2)
-    ("BENGALI LETTER NNA" #x09A3)
-    ("BENGALI LETTER TA" #x09A4)
-    ("BENGALI LETTER THA" #x09A5)
-    ("BENGALI LETTER DA" #x09A6)
-    ("BENGALI LETTER DHA" #x09A7)
-    ("BENGALI LETTER NA" #x09A8)
-    ("BENGALI LETTER PA" #x09AA)
-    ("BENGALI LETTER PHA" #x09AB)
-    ("BENGALI LETTER BA" #x09AC)
-    ("BENGALI LETTER BHA" #x09AD)
-    ("BENGALI LETTER MA" #x09AE)
-    ("BENGALI LETTER YA" #x09AF)
-    ("BENGALI LETTER RA" #x09B0)
-    ("BENGALI LETTER LA" #x09B2)
-    ("BENGALI LETTER SHA" #x09B6)
-    ("BENGALI LETTER SSA" #x09B7)
-    ("BENGALI LETTER SA" #x09B8)
-    ("BENGALI LETTER HA" #x09B9)
-    ("BENGALI SIGN NUKTA" #x09BC)
-    ("BENGALI VOWEL SIGN AA" #x09BE)
-    ("BENGALI VOWEL SIGN I" #x09BF)
-    ("BENGALI VOWEL SIGN II" #x09C0)
-    ("BENGALI VOWEL SIGN U" #x09C1)
-    ("BENGALI VOWEL SIGN UU" #x09C2)
-    ("BENGALI VOWEL SIGN VOCALIC R" #x09C3)
-    ("BENGALI VOWEL SIGN VOCALIC RR" #x09C4)
-    ("BENGALI VOWEL SIGN E" #x09C7)
-    ("BENGALI VOWEL SIGN AI" #x09C8)
-    ("BENGALI VOWEL SIGN O" #x09CB)
-    ("BENGALI VOWEL SIGN AU" #x09CC)
-    ("BENGALI SIGN VIRAMA" #x09CD)
-    ("BENGALI AU LENGTH MARK" #x09D7)
-    ("BENGALI LETTER RRA" #x09DC)
-    ("BENGALI LETTER RHA" #x09DD)
-    ("BENGALI LETTER YYA" #x09DF)
-    ("BENGALI LETTER VOCALIC RR" #x09E0)
-    ("BENGALI LETTER VOCALIC LL" #x09E1)
-    ("BENGALI VOWEL SIGN VOCALIC L" #x09E2)
-    ("BENGALI VOWEL SIGN VOCALIC LL" #x09E3)
-    ("BENGALI DIGIT ZERO" #x09E6)
-    ("BENGALI DIGIT ONE" #x09E7)
-    ("BENGALI DIGIT TWO" #x09E8)
-    ("BENGALI DIGIT THREE" #x09E9)
-    ("BENGALI DIGIT FOUR" #x09EA)
-    ("BENGALI DIGIT FIVE" #x09EB)
-    ("BENGALI DIGIT SIX" #x09EC)
-    ("BENGALI DIGIT SEVEN" #x09ED)
-    ("BENGALI DIGIT EIGHT" #x09EE)
-    ("BENGALI DIGIT NINE" #x09EF)
-    ("BENGALI LETTER RA WITH MIDDLE DIAGONAL" #x09F0)
-    ("BENGALI LETTER RA WITH LOWER DIAGONAL" #x09F1)
-    ("BENGALI RUPEE MARK" #x09F2)
-    ("BENGALI RUPEE SIGN" #x09F3)
-    ("BENGALI CURRENCY NUMERATOR ONE" #x09F4)
-    ("BENGALI CURRENCY NUMERATOR TWO" #x09F5)
-    ("BENGALI CURRENCY NUMERATOR THREE" #x09F6)
-    ("BENGALI CURRENCY NUMERATOR FOUR" #x09F7)
-    ("BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR" #x09F8)
-    ("BENGALI CURRENCY DENOMINATOR SIXTEEN" #x09F9)
-    ("BENGALI ISSHAR" #x09FA)
-    ))
-
diff --git a/etc/nxml/00A00-00A7F.el b/etc/nxml/00A00-00A7F.el
deleted file mode 100644 (file)
index be542ff..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-(nxml-define-char-name-set 'gurmukhi
-  '(("GURMUKHI SIGN BINDI" #x0A02)
-    ("GURMUKHI LETTER A" #x0A05)
-    ("GURMUKHI LETTER AA" #x0A06)
-    ("GURMUKHI LETTER I" #x0A07)
-    ("GURMUKHI LETTER II" #x0A08)
-    ("GURMUKHI LETTER U" #x0A09)
-    ("GURMUKHI LETTER UU" #x0A0A)
-    ("GURMUKHI LETTER EE" #x0A0F)
-    ("GURMUKHI LETTER AI" #x0A10)
-    ("GURMUKHI LETTER OO" #x0A13)
-    ("GURMUKHI LETTER AU" #x0A14)
-    ("GURMUKHI LETTER KA" #x0A15)
-    ("GURMUKHI LETTER KHA" #x0A16)
-    ("GURMUKHI LETTER GA" #x0A17)
-    ("GURMUKHI LETTER GHA" #x0A18)
-    ("GURMUKHI LETTER NGA" #x0A19)
-    ("GURMUKHI LETTER CA" #x0A1A)
-    ("GURMUKHI LETTER CHA" #x0A1B)
-    ("GURMUKHI LETTER JA" #x0A1C)
-    ("GURMUKHI LETTER JHA" #x0A1D)
-    ("GURMUKHI LETTER NYA" #x0A1E)
-    ("GURMUKHI LETTER TTA" #x0A1F)
-    ("GURMUKHI LETTER TTHA" #x0A20)
-    ("GURMUKHI LETTER DDA" #x0A21)
-    ("GURMUKHI LETTER DDHA" #x0A22)
-    ("GURMUKHI LETTER NNA" #x0A23)
-    ("GURMUKHI LETTER TA" #x0A24)
-    ("GURMUKHI LETTER THA" #x0A25)
-    ("GURMUKHI LETTER DA" #x0A26)
-    ("GURMUKHI LETTER DHA" #x0A27)
-    ("GURMUKHI LETTER NA" #x0A28)
-    ("GURMUKHI LETTER PA" #x0A2A)
-    ("GURMUKHI LETTER PHA" #x0A2B)
-    ("GURMUKHI LETTER BA" #x0A2C)
-    ("GURMUKHI LETTER BHA" #x0A2D)
-    ("GURMUKHI LETTER MA" #x0A2E)
-    ("GURMUKHI LETTER YA" #x0A2F)
-    ("GURMUKHI LETTER RA" #x0A30)
-    ("GURMUKHI LETTER LA" #x0A32)
-    ("GURMUKHI LETTER LLA" #x0A33)
-    ("GURMUKHI LETTER VA" #x0A35)
-    ("GURMUKHI LETTER SHA" #x0A36)
-    ("GURMUKHI LETTER SA" #x0A38)
-    ("GURMUKHI LETTER HA" #x0A39)
-    ("GURMUKHI SIGN NUKTA" #x0A3C)
-    ("GURMUKHI VOWEL SIGN AA" #x0A3E)
-    ("GURMUKHI VOWEL SIGN I" #x0A3F)
-    ("GURMUKHI VOWEL SIGN II" #x0A40)
-    ("GURMUKHI VOWEL SIGN U" #x0A41)
-    ("GURMUKHI VOWEL SIGN UU" #x0A42)
-    ("GURMUKHI VOWEL SIGN EE" #x0A47)
-    ("GURMUKHI VOWEL SIGN AI" #x0A48)
-    ("GURMUKHI VOWEL SIGN OO" #x0A4B)
-    ("GURMUKHI VOWEL SIGN AU" #x0A4C)
-    ("GURMUKHI SIGN VIRAMA" #x0A4D)
-    ("GURMUKHI LETTER KHHA" #x0A59)
-    ("GURMUKHI LETTER GHHA" #x0A5A)
-    ("GURMUKHI LETTER ZA" #x0A5B)
-    ("GURMUKHI LETTER RRA" #x0A5C)
-    ("GURMUKHI LETTER FA" #x0A5E)
-    ("GURMUKHI DIGIT ZERO" #x0A66)
-    ("GURMUKHI DIGIT ONE" #x0A67)
-    ("GURMUKHI DIGIT TWO" #x0A68)
-    ("GURMUKHI DIGIT THREE" #x0A69)
-    ("GURMUKHI DIGIT FOUR" #x0A6A)
-    ("GURMUKHI DIGIT FIVE" #x0A6B)
-    ("GURMUKHI DIGIT SIX" #x0A6C)
-    ("GURMUKHI DIGIT SEVEN" #x0A6D)
-    ("GURMUKHI DIGIT EIGHT" #x0A6E)
-    ("GURMUKHI DIGIT NINE" #x0A6F)
-    ("GURMUKHI TIPPI" #x0A70)
-    ("GURMUKHI ADDAK" #x0A71)
-    ("GURMUKHI IRI" #x0A72)
-    ("GURMUKHI URA" #x0A73)
-    ("GURMUKHI EK ONKAR" #x0A74)
-    ))
-
diff --git a/etc/nxml/00A80-00AFF.el b/etc/nxml/00A80-00AFF.el
deleted file mode 100644 (file)
index 029c351..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-(nxml-define-char-name-set 'gujarati
-  '(("GUJARATI SIGN CANDRABINDU" #x0A81)
-    ("GUJARATI SIGN ANUSVARA" #x0A82)
-    ("GUJARATI SIGN VISARGA" #x0A83)
-    ("GUJARATI LETTER A" #x0A85)
-    ("GUJARATI LETTER AA" #x0A86)
-    ("GUJARATI LETTER I" #x0A87)
-    ("GUJARATI LETTER II" #x0A88)
-    ("GUJARATI LETTER U" #x0A89)
-    ("GUJARATI LETTER UU" #x0A8A)
-    ("GUJARATI LETTER VOCALIC R" #x0A8B)
-    ("GUJARATI VOWEL CANDRA E" #x0A8D)
-    ("GUJARATI LETTER E" #x0A8F)
-    ("GUJARATI LETTER AI" #x0A90)
-    ("GUJARATI VOWEL CANDRA O" #x0A91)
-    ("GUJARATI LETTER O" #x0A93)
-    ("GUJARATI LETTER AU" #x0A94)
-    ("GUJARATI LETTER KA" #x0A95)
-    ("GUJARATI LETTER KHA" #x0A96)
-    ("GUJARATI LETTER GA" #x0A97)
-    ("GUJARATI LETTER GHA" #x0A98)
-    ("GUJARATI LETTER NGA" #x0A99)
-    ("GUJARATI LETTER CA" #x0A9A)
-    ("GUJARATI LETTER CHA" #x0A9B)
-    ("GUJARATI LETTER JA" #x0A9C)
-    ("GUJARATI LETTER JHA" #x0A9D)
-    ("GUJARATI LETTER NYA" #x0A9E)
-    ("GUJARATI LETTER TTA" #x0A9F)
-    ("GUJARATI LETTER TTHA" #x0AA0)
-    ("GUJARATI LETTER DDA" #x0AA1)
-    ("GUJARATI LETTER DDHA" #x0AA2)
-    ("GUJARATI LETTER NNA" #x0AA3)
-    ("GUJARATI LETTER TA" #x0AA4)
-    ("GUJARATI LETTER THA" #x0AA5)
-    ("GUJARATI LETTER DA" #x0AA6)
-    ("GUJARATI LETTER DHA" #x0AA7)
-    ("GUJARATI LETTER NA" #x0AA8)
-    ("GUJARATI LETTER PA" #x0AAA)
-    ("GUJARATI LETTER PHA" #x0AAB)
-    ("GUJARATI LETTER BA" #x0AAC)
-    ("GUJARATI LETTER BHA" #x0AAD)
-    ("GUJARATI LETTER MA" #x0AAE)
-    ("GUJARATI LETTER YA" #x0AAF)
-    ("GUJARATI LETTER RA" #x0AB0)
-    ("GUJARATI LETTER LA" #x0AB2)
-    ("GUJARATI LETTER LLA" #x0AB3)
-    ("GUJARATI LETTER VA" #x0AB5)
-    ("GUJARATI LETTER SHA" #x0AB6)
-    ("GUJARATI LETTER SSA" #x0AB7)
-    ("GUJARATI LETTER SA" #x0AB8)
-    ("GUJARATI LETTER HA" #x0AB9)
-    ("GUJARATI SIGN NUKTA" #x0ABC)
-    ("GUJARATI SIGN AVAGRAHA" #x0ABD)
-    ("GUJARATI VOWEL SIGN AA" #x0ABE)
-    ("GUJARATI VOWEL SIGN I" #x0ABF)
-    ("GUJARATI VOWEL SIGN II" #x0AC0)
-    ("GUJARATI VOWEL SIGN U" #x0AC1)
-    ("GUJARATI VOWEL SIGN UU" #x0AC2)
-    ("GUJARATI VOWEL SIGN VOCALIC R" #x0AC3)
-    ("GUJARATI VOWEL SIGN VOCALIC RR" #x0AC4)
-    ("GUJARATI VOWEL SIGN CANDRA E" #x0AC5)
-    ("GUJARATI VOWEL SIGN E" #x0AC7)
-    ("GUJARATI VOWEL SIGN AI" #x0AC8)
-    ("GUJARATI VOWEL SIGN CANDRA O" #x0AC9)
-    ("GUJARATI VOWEL SIGN O" #x0ACB)
-    ("GUJARATI VOWEL SIGN AU" #x0ACC)
-    ("GUJARATI SIGN VIRAMA" #x0ACD)
-    ("GUJARATI OM" #x0AD0)
-    ("GUJARATI LETTER VOCALIC RR" #x0AE0)
-    ("GUJARATI DIGIT ZERO" #x0AE6)
-    ("GUJARATI DIGIT ONE" #x0AE7)
-    ("GUJARATI DIGIT TWO" #x0AE8)
-    ("GUJARATI DIGIT THREE" #x0AE9)
-    ("GUJARATI DIGIT FOUR" #x0AEA)
-    ("GUJARATI DIGIT FIVE" #x0AEB)
-    ("GUJARATI DIGIT SIX" #x0AEC)
-    ("GUJARATI DIGIT SEVEN" #x0AED)
-    ("GUJARATI DIGIT EIGHT" #x0AEE)
-    ("GUJARATI DIGIT NINE" #x0AEF)
-    ))
-
diff --git a/etc/nxml/00B00-00B7F.el b/etc/nxml/00B00-00B7F.el
deleted file mode 100644 (file)
index 5f32f4f..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-(nxml-define-char-name-set 'oriya
-  '(("ORIYA SIGN CANDRABINDU" #x0B01)
-    ("ORIYA SIGN ANUSVARA" #x0B02)
-    ("ORIYA SIGN VISARGA" #x0B03)
-    ("ORIYA LETTER A" #x0B05)
-    ("ORIYA LETTER AA" #x0B06)
-    ("ORIYA LETTER I" #x0B07)
-    ("ORIYA LETTER II" #x0B08)
-    ("ORIYA LETTER U" #x0B09)
-    ("ORIYA LETTER UU" #x0B0A)
-    ("ORIYA LETTER VOCALIC R" #x0B0B)
-    ("ORIYA LETTER VOCALIC L" #x0B0C)
-    ("ORIYA LETTER E" #x0B0F)
-    ("ORIYA LETTER AI" #x0B10)
-    ("ORIYA LETTER O" #x0B13)
-    ("ORIYA LETTER AU" #x0B14)
-    ("ORIYA LETTER KA" #x0B15)
-    ("ORIYA LETTER KHA" #x0B16)
-    ("ORIYA LETTER GA" #x0B17)
-    ("ORIYA LETTER GHA" #x0B18)
-    ("ORIYA LETTER NGA" #x0B19)
-    ("ORIYA LETTER CA" #x0B1A)
-    ("ORIYA LETTER CHA" #x0B1B)
-    ("ORIYA LETTER JA" #x0B1C)
-    ("ORIYA LETTER JHA" #x0B1D)
-    ("ORIYA LETTER NYA" #x0B1E)
-    ("ORIYA LETTER TTA" #x0B1F)
-    ("ORIYA LETTER TTHA" #x0B20)
-    ("ORIYA LETTER DDA" #x0B21)
-    ("ORIYA LETTER DDHA" #x0B22)
-    ("ORIYA LETTER NNA" #x0B23)
-    ("ORIYA LETTER TA" #x0B24)
-    ("ORIYA LETTER THA" #x0B25)
-    ("ORIYA LETTER DA" #x0B26)
-    ("ORIYA LETTER DHA" #x0B27)
-    ("ORIYA LETTER NA" #x0B28)
-    ("ORIYA LETTER PA" #x0B2A)
-    ("ORIYA LETTER PHA" #x0B2B)
-    ("ORIYA LETTER BA" #x0B2C)
-    ("ORIYA LETTER BHA" #x0B2D)
-    ("ORIYA LETTER MA" #x0B2E)
-    ("ORIYA LETTER YA" #x0B2F)
-    ("ORIYA LETTER RA" #x0B30)
-    ("ORIYA LETTER LA" #x0B32)
-    ("ORIYA LETTER LLA" #x0B33)
-    ("ORIYA LETTER SHA" #x0B36)
-    ("ORIYA LETTER SSA" #x0B37)
-    ("ORIYA LETTER SA" #x0B38)
-    ("ORIYA LETTER HA" #x0B39)
-    ("ORIYA SIGN NUKTA" #x0B3C)
-    ("ORIYA SIGN AVAGRAHA" #x0B3D)
-    ("ORIYA VOWEL SIGN AA" #x0B3E)
-    ("ORIYA VOWEL SIGN I" #x0B3F)
-    ("ORIYA VOWEL SIGN II" #x0B40)
-    ("ORIYA VOWEL SIGN U" #x0B41)
-    ("ORIYA VOWEL SIGN UU" #x0B42)
-    ("ORIYA VOWEL SIGN VOCALIC R" #x0B43)
-    ("ORIYA VOWEL SIGN E" #x0B47)
-    ("ORIYA VOWEL SIGN AI" #x0B48)
-    ("ORIYA VOWEL SIGN O" #x0B4B)
-    ("ORIYA VOWEL SIGN AU" #x0B4C)
-    ("ORIYA SIGN VIRAMA" #x0B4D)
-    ("ORIYA AI LENGTH MARK" #x0B56)
-    ("ORIYA AU LENGTH MARK" #x0B57)
-    ("ORIYA LETTER RRA" #x0B5C)
-    ("ORIYA LETTER RHA" #x0B5D)
-    ("ORIYA LETTER YYA" #x0B5F)
-    ("ORIYA LETTER VOCALIC RR" #x0B60)
-    ("ORIYA LETTER VOCALIC LL" #x0B61)
-    ("ORIYA DIGIT ZERO" #x0B66)
-    ("ORIYA DIGIT ONE" #x0B67)
-    ("ORIYA DIGIT TWO" #x0B68)
-    ("ORIYA DIGIT THREE" #x0B69)
-    ("ORIYA DIGIT FOUR" #x0B6A)
-    ("ORIYA DIGIT FIVE" #x0B6B)
-    ("ORIYA DIGIT SIX" #x0B6C)
-    ("ORIYA DIGIT SEVEN" #x0B6D)
-    ("ORIYA DIGIT EIGHT" #x0B6E)
-    ("ORIYA DIGIT NINE" #x0B6F)
-    ("ORIYA ISSHAR" #x0B70)
-    ))
-
diff --git a/etc/nxml/00B80-00BFF.el b/etc/nxml/00B80-00BFF.el
deleted file mode 100644 (file)
index 5258288..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-(nxml-define-char-name-set 'tamil
-  '(("TAMIL SIGN ANUSVARA" #x0B82)
-    ("TAMIL SIGN VISARGA" #x0B83)
-    ("TAMIL LETTER A" #x0B85)
-    ("TAMIL LETTER AA" #x0B86)
-    ("TAMIL LETTER I" #x0B87)
-    ("TAMIL LETTER II" #x0B88)
-    ("TAMIL LETTER U" #x0B89)
-    ("TAMIL LETTER UU" #x0B8A)
-    ("TAMIL LETTER E" #x0B8E)
-    ("TAMIL LETTER EE" #x0B8F)
-    ("TAMIL LETTER AI" #x0B90)
-    ("TAMIL LETTER O" #x0B92)
-    ("TAMIL LETTER OO" #x0B93)
-    ("TAMIL LETTER AU" #x0B94)
-    ("TAMIL LETTER KA" #x0B95)
-    ("TAMIL LETTER NGA" #x0B99)
-    ("TAMIL LETTER CA" #x0B9A)
-    ("TAMIL LETTER JA" #x0B9C)
-    ("TAMIL LETTER NYA" #x0B9E)
-    ("TAMIL LETTER TTA" #x0B9F)
-    ("TAMIL LETTER NNA" #x0BA3)
-    ("TAMIL LETTER TA" #x0BA4)
-    ("TAMIL LETTER NA" #x0BA8)
-    ("TAMIL LETTER NNNA" #x0BA9)
-    ("TAMIL LETTER PA" #x0BAA)
-    ("TAMIL LETTER MA" #x0BAE)
-    ("TAMIL LETTER YA" #x0BAF)
-    ("TAMIL LETTER RA" #x0BB0)
-    ("TAMIL LETTER RRA" #x0BB1)
-    ("TAMIL LETTER LA" #x0BB2)
-    ("TAMIL LETTER LLA" #x0BB3)
-    ("TAMIL LETTER LLLA" #x0BB4)
-    ("TAMIL LETTER VA" #x0BB5)
-    ("TAMIL LETTER SSA" #x0BB7)
-    ("TAMIL LETTER SA" #x0BB8)
-    ("TAMIL LETTER HA" #x0BB9)
-    ("TAMIL VOWEL SIGN AA" #x0BBE)
-    ("TAMIL VOWEL SIGN I" #x0BBF)
-    ("TAMIL VOWEL SIGN II" #x0BC0)
-    ("TAMIL VOWEL SIGN U" #x0BC1)
-    ("TAMIL VOWEL SIGN UU" #x0BC2)
-    ("TAMIL VOWEL SIGN E" #x0BC6)
-    ("TAMIL VOWEL SIGN EE" #x0BC7)
-    ("TAMIL VOWEL SIGN AI" #x0BC8)
-    ("TAMIL VOWEL SIGN O" #x0BCA)
-    ("TAMIL VOWEL SIGN OO" #x0BCB)
-    ("TAMIL VOWEL SIGN AU" #x0BCC)
-    ("TAMIL SIGN VIRAMA" #x0BCD)
-    ("TAMIL AU LENGTH MARK" #x0BD7)
-    ("TAMIL DIGIT ONE" #x0BE7)
-    ("TAMIL DIGIT TWO" #x0BE8)
-    ("TAMIL DIGIT THREE" #x0BE9)
-    ("TAMIL DIGIT FOUR" #x0BEA)
-    ("TAMIL DIGIT FIVE" #x0BEB)
-    ("TAMIL DIGIT SIX" #x0BEC)
-    ("TAMIL DIGIT SEVEN" #x0BED)
-    ("TAMIL DIGIT EIGHT" #x0BEE)
-    ("TAMIL DIGIT NINE" #x0BEF)
-    ("TAMIL NUMBER TEN" #x0BF0)
-    ("TAMIL NUMBER ONE HUNDRED" #x0BF1)
-    ("TAMIL NUMBER ONE THOUSAND" #x0BF2)
-    ))
-
diff --git a/etc/nxml/00C00-00C7F.el b/etc/nxml/00C00-00C7F.el
deleted file mode 100644 (file)
index f33086d..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-(nxml-define-char-name-set 'telugu
-  '(("TELUGU SIGN CANDRABINDU" #x0C01)
-    ("TELUGU SIGN ANUSVARA" #x0C02)
-    ("TELUGU SIGN VISARGA" #x0C03)
-    ("TELUGU LETTER A" #x0C05)
-    ("TELUGU LETTER AA" #x0C06)
-    ("TELUGU LETTER I" #x0C07)
-    ("TELUGU LETTER II" #x0C08)
-    ("TELUGU LETTER U" #x0C09)
-    ("TELUGU LETTER UU" #x0C0A)
-    ("TELUGU LETTER VOCALIC R" #x0C0B)
-    ("TELUGU LETTER VOCALIC L" #x0C0C)
-    ("TELUGU LETTER E" #x0C0E)
-    ("TELUGU LETTER EE" #x0C0F)
-    ("TELUGU LETTER AI" #x0C10)
-    ("TELUGU LETTER O" #x0C12)
-    ("TELUGU LETTER OO" #x0C13)
-    ("TELUGU LETTER AU" #x0C14)
-    ("TELUGU LETTER KA" #x0C15)
-    ("TELUGU LETTER KHA" #x0C16)
-    ("TELUGU LETTER GA" #x0C17)
-    ("TELUGU LETTER GHA" #x0C18)
-    ("TELUGU LETTER NGA" #x0C19)
-    ("TELUGU LETTER CA" #x0C1A)
-    ("TELUGU LETTER CHA" #x0C1B)
-    ("TELUGU LETTER JA" #x0C1C)
-    ("TELUGU LETTER JHA" #x0C1D)
-    ("TELUGU LETTER NYA" #x0C1E)
-    ("TELUGU LETTER TTA" #x0C1F)
-    ("TELUGU LETTER TTHA" #x0C20)
-    ("TELUGU LETTER DDA" #x0C21)
-    ("TELUGU LETTER DDHA" #x0C22)
-    ("TELUGU LETTER NNA" #x0C23)
-    ("TELUGU LETTER TA" #x0C24)
-    ("TELUGU LETTER THA" #x0C25)
-    ("TELUGU LETTER DA" #x0C26)
-    ("TELUGU LETTER DHA" #x0C27)
-    ("TELUGU LETTER NA" #x0C28)
-    ("TELUGU LETTER PA" #x0C2A)
-    ("TELUGU LETTER PHA" #x0C2B)
-    ("TELUGU LETTER BA" #x0C2C)
-    ("TELUGU LETTER BHA" #x0C2D)
-    ("TELUGU LETTER MA" #x0C2E)
-    ("TELUGU LETTER YA" #x0C2F)
-    ("TELUGU LETTER RA" #x0C30)
-    ("TELUGU LETTER RRA" #x0C31)
-    ("TELUGU LETTER LA" #x0C32)
-    ("TELUGU LETTER LLA" #x0C33)
-    ("TELUGU LETTER VA" #x0C35)
-    ("TELUGU LETTER SHA" #x0C36)
-    ("TELUGU LETTER SSA" #x0C37)
-    ("TELUGU LETTER SA" #x0C38)
-    ("TELUGU LETTER HA" #x0C39)
-    ("TELUGU VOWEL SIGN AA" #x0C3E)
-    ("TELUGU VOWEL SIGN I" #x0C3F)
-    ("TELUGU VOWEL SIGN II" #x0C40)
-    ("TELUGU VOWEL SIGN U" #x0C41)
-    ("TELUGU VOWEL SIGN UU" #x0C42)
-    ("TELUGU VOWEL SIGN VOCALIC R" #x0C43)
-    ("TELUGU VOWEL SIGN VOCALIC RR" #x0C44)
-    ("TELUGU VOWEL SIGN E" #x0C46)
-    ("TELUGU VOWEL SIGN EE" #x0C47)
-    ("TELUGU VOWEL SIGN AI" #x0C48)
-    ("TELUGU VOWEL SIGN O" #x0C4A)
-    ("TELUGU VOWEL SIGN OO" #x0C4B)
-    ("TELUGU VOWEL SIGN AU" #x0C4C)
-    ("TELUGU SIGN VIRAMA" #x0C4D)
-    ("TELUGU LENGTH MARK" #x0C55)
-    ("TELUGU AI LENGTH MARK" #x0C56)
-    ("TELUGU LETTER VOCALIC RR" #x0C60)
-    ("TELUGU LETTER VOCALIC LL" #x0C61)
-    ("TELUGU DIGIT ZERO" #x0C66)
-    ("TELUGU DIGIT ONE" #x0C67)
-    ("TELUGU DIGIT TWO" #x0C68)
-    ("TELUGU DIGIT THREE" #x0C69)
-    ("TELUGU DIGIT FOUR" #x0C6A)
-    ("TELUGU DIGIT FIVE" #x0C6B)
-    ("TELUGU DIGIT SIX" #x0C6C)
-    ("TELUGU DIGIT SEVEN" #x0C6D)
-    ("TELUGU DIGIT EIGHT" #x0C6E)
-    ("TELUGU DIGIT NINE" #x0C6F)
-    ))
-
diff --git a/etc/nxml/00C80-00CFF.el b/etc/nxml/00C80-00CFF.el
deleted file mode 100644 (file)
index 459b253..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-(nxml-define-char-name-set 'kannada
-  '(("KANNADA SIGN ANUSVARA" #x0C82)
-    ("KANNADA SIGN VISARGA" #x0C83)
-    ("KANNADA LETTER A" #x0C85)
-    ("KANNADA LETTER AA" #x0C86)
-    ("KANNADA LETTER I" #x0C87)
-    ("KANNADA LETTER II" #x0C88)
-    ("KANNADA LETTER U" #x0C89)
-    ("KANNADA LETTER UU" #x0C8A)
-    ("KANNADA LETTER VOCALIC R" #x0C8B)
-    ("KANNADA LETTER VOCALIC L" #x0C8C)
-    ("KANNADA LETTER E" #x0C8E)
-    ("KANNADA LETTER EE" #x0C8F)
-    ("KANNADA LETTER AI" #x0C90)
-    ("KANNADA LETTER O" #x0C92)
-    ("KANNADA LETTER OO" #x0C93)
-    ("KANNADA LETTER AU" #x0C94)
-    ("KANNADA LETTER KA" #x0C95)
-    ("KANNADA LETTER KHA" #x0C96)
-    ("KANNADA LETTER GA" #x0C97)
-    ("KANNADA LETTER GHA" #x0C98)
-    ("KANNADA LETTER NGA" #x0C99)
-    ("KANNADA LETTER CA" #x0C9A)
-    ("KANNADA LETTER CHA" #x0C9B)
-    ("KANNADA LETTER JA" #x0C9C)
-    ("KANNADA LETTER JHA" #x0C9D)
-    ("KANNADA LETTER NYA" #x0C9E)
-    ("KANNADA LETTER TTA" #x0C9F)
-    ("KANNADA LETTER TTHA" #x0CA0)
-    ("KANNADA LETTER DDA" #x0CA1)
-    ("KANNADA LETTER DDHA" #x0CA2)
-    ("KANNADA LETTER NNA" #x0CA3)
-    ("KANNADA LETTER TA" #x0CA4)
-    ("KANNADA LETTER THA" #x0CA5)
-    ("KANNADA LETTER DA" #x0CA6)
-    ("KANNADA LETTER DHA" #x0CA7)
-    ("KANNADA LETTER NA" #x0CA8)
-    ("KANNADA LETTER PA" #x0CAA)
-    ("KANNADA LETTER PHA" #x0CAB)
-    ("KANNADA LETTER BA" #x0CAC)
-    ("KANNADA LETTER BHA" #x0CAD)
-    ("KANNADA LETTER MA" #x0CAE)
-    ("KANNADA LETTER YA" #x0CAF)
-    ("KANNADA LETTER RA" #x0CB0)
-    ("KANNADA LETTER RRA" #x0CB1)
-    ("KANNADA LETTER LA" #x0CB2)
-    ("KANNADA LETTER LLA" #x0CB3)
-    ("KANNADA LETTER VA" #x0CB5)
-    ("KANNADA LETTER SHA" #x0CB6)
-    ("KANNADA LETTER SSA" #x0CB7)
-    ("KANNADA LETTER SA" #x0CB8)
-    ("KANNADA LETTER HA" #x0CB9)
-    ("KANNADA VOWEL SIGN AA" #x0CBE)
-    ("KANNADA VOWEL SIGN I" #x0CBF)
-    ("KANNADA VOWEL SIGN II" #x0CC0)
-    ("KANNADA VOWEL SIGN U" #x0CC1)
-    ("KANNADA VOWEL SIGN UU" #x0CC2)
-    ("KANNADA VOWEL SIGN VOCALIC R" #x0CC3)
-    ("KANNADA VOWEL SIGN VOCALIC RR" #x0CC4)
-    ("KANNADA VOWEL SIGN E" #x0CC6)
-    ("KANNADA VOWEL SIGN EE" #x0CC7)
-    ("KANNADA VOWEL SIGN AI" #x0CC8)
-    ("KANNADA VOWEL SIGN O" #x0CCA)
-    ("KANNADA VOWEL SIGN OO" #x0CCB)
-    ("KANNADA VOWEL SIGN AU" #x0CCC)
-    ("KANNADA SIGN VIRAMA" #x0CCD)
-    ("KANNADA LENGTH MARK" #x0CD5)
-    ("KANNADA AI LENGTH MARK" #x0CD6)
-    ("KANNADA LETTER FA" #x0CDE)
-    ("KANNADA LETTER VOCALIC RR" #x0CE0)
-    ("KANNADA LETTER VOCALIC LL" #x0CE1)
-    ("KANNADA DIGIT ZERO" #x0CE6)
-    ("KANNADA DIGIT ONE" #x0CE7)
-    ("KANNADA DIGIT TWO" #x0CE8)
-    ("KANNADA DIGIT THREE" #x0CE9)
-    ("KANNADA DIGIT FOUR" #x0CEA)
-    ("KANNADA DIGIT FIVE" #x0CEB)
-    ("KANNADA DIGIT SIX" #x0CEC)
-    ("KANNADA DIGIT SEVEN" #x0CED)
-    ("KANNADA DIGIT EIGHT" #x0CEE)
-    ("KANNADA DIGIT NINE" #x0CEF)
-    ))
-
diff --git a/etc/nxml/00D00-00D7F.el b/etc/nxml/00D00-00D7F.el
deleted file mode 100644 (file)
index 80001ac..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-(nxml-define-char-name-set 'malayalam
-  '(("MALAYALAM SIGN ANUSVARA" #x0D02)
-    ("MALAYALAM SIGN VISARGA" #x0D03)
-    ("MALAYALAM LETTER A" #x0D05)
-    ("MALAYALAM LETTER AA" #x0D06)
-    ("MALAYALAM LETTER I" #x0D07)
-    ("MALAYALAM LETTER II" #x0D08)
-    ("MALAYALAM LETTER U" #x0D09)
-    ("MALAYALAM LETTER UU" #x0D0A)
-    ("MALAYALAM LETTER VOCALIC R" #x0D0B)
-    ("MALAYALAM LETTER VOCALIC L" #x0D0C)
-    ("MALAYALAM LETTER E" #x0D0E)
-    ("MALAYALAM LETTER EE" #x0D0F)
-    ("MALAYALAM LETTER AI" #x0D10)
-    ("MALAYALAM LETTER O" #x0D12)
-    ("MALAYALAM LETTER OO" #x0D13)
-    ("MALAYALAM LETTER AU" #x0D14)
-    ("MALAYALAM LETTER KA" #x0D15)
-    ("MALAYALAM LETTER KHA" #x0D16)
-    ("MALAYALAM LETTER GA" #x0D17)
-    ("MALAYALAM LETTER GHA" #x0D18)
-    ("MALAYALAM LETTER NGA" #x0D19)
-    ("MALAYALAM LETTER CA" #x0D1A)
-    ("MALAYALAM LETTER CHA" #x0D1B)
-    ("MALAYALAM LETTER JA" #x0D1C)
-    ("MALAYALAM LETTER JHA" #x0D1D)
-    ("MALAYALAM LETTER NYA" #x0D1E)
-    ("MALAYALAM LETTER TTA" #x0D1F)
-    ("MALAYALAM LETTER TTHA" #x0D20)
-    ("MALAYALAM LETTER DDA" #x0D21)
-    ("MALAYALAM LETTER DDHA" #x0D22)
-    ("MALAYALAM LETTER NNA" #x0D23)
-    ("MALAYALAM LETTER TA" #x0D24)
-    ("MALAYALAM LETTER THA" #x0D25)
-    ("MALAYALAM LETTER DA" #x0D26)
-    ("MALAYALAM LETTER DHA" #x0D27)
-    ("MALAYALAM LETTER NA" #x0D28)
-    ("MALAYALAM LETTER PA" #x0D2A)
-    ("MALAYALAM LETTER PHA" #x0D2B)
-    ("MALAYALAM LETTER BA" #x0D2C)
-    ("MALAYALAM LETTER BHA" #x0D2D)
-    ("MALAYALAM LETTER MA" #x0D2E)
-    ("MALAYALAM LETTER YA" #x0D2F)
-    ("MALAYALAM LETTER RA" #x0D30)
-    ("MALAYALAM LETTER RRA" #x0D31)
-    ("MALAYALAM LETTER LA" #x0D32)
-    ("MALAYALAM LETTER LLA" #x0D33)
-    ("MALAYALAM LETTER LLLA" #x0D34)
-    ("MALAYALAM LETTER VA" #x0D35)
-    ("MALAYALAM LETTER SHA" #x0D36)
-    ("MALAYALAM LETTER SSA" #x0D37)
-    ("MALAYALAM LETTER SA" #x0D38)
-    ("MALAYALAM LETTER HA" #x0D39)
-    ("MALAYALAM VOWEL SIGN AA" #x0D3E)
-    ("MALAYALAM VOWEL SIGN I" #x0D3F)
-    ("MALAYALAM VOWEL SIGN II" #x0D40)
-    ("MALAYALAM VOWEL SIGN U" #x0D41)
-    ("MALAYALAM VOWEL SIGN UU" #x0D42)
-    ("MALAYALAM VOWEL SIGN VOCALIC R" #x0D43)
-    ("MALAYALAM VOWEL SIGN E" #x0D46)
-    ("MALAYALAM VOWEL SIGN EE" #x0D47)
-    ("MALAYALAM VOWEL SIGN AI" #x0D48)
-    ("MALAYALAM VOWEL SIGN O" #x0D4A)
-    ("MALAYALAM VOWEL SIGN OO" #x0D4B)
-    ("MALAYALAM VOWEL SIGN AU" #x0D4C)
-    ("MALAYALAM SIGN VIRAMA" #x0D4D)
-    ("MALAYALAM AU LENGTH MARK" #x0D57)
-    ("MALAYALAM LETTER VOCALIC RR" #x0D60)
-    ("MALAYALAM LETTER VOCALIC LL" #x0D61)
-    ("MALAYALAM DIGIT ZERO" #x0D66)
-    ("MALAYALAM DIGIT ONE" #x0D67)
-    ("MALAYALAM DIGIT TWO" #x0D68)
-    ("MALAYALAM DIGIT THREE" #x0D69)
-    ("MALAYALAM DIGIT FOUR" #x0D6A)
-    ("MALAYALAM DIGIT FIVE" #x0D6B)
-    ("MALAYALAM DIGIT SIX" #x0D6C)
-    ("MALAYALAM DIGIT SEVEN" #x0D6D)
-    ("MALAYALAM DIGIT EIGHT" #x0D6E)
-    ("MALAYALAM DIGIT NINE" #x0D6F)
-    ))
-
diff --git a/etc/nxml/00D80-00DFF.el b/etc/nxml/00D80-00DFF.el
deleted file mode 100644 (file)
index 9806898..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-(nxml-define-char-name-set 'sinhala
-  '(("SINHALA SIGN ANUSVARAYA" #x0D82)
-    ("SINHALA SIGN VISARGAYA" #x0D83)
-    ("SINHALA LETTER AYANNA" #x0D85)
-    ("SINHALA LETTER AAYANNA" #x0D86)
-    ("SINHALA LETTER AEYANNA" #x0D87)
-    ("SINHALA LETTER AEEYANNA" #x0D88)
-    ("SINHALA LETTER IYANNA" #x0D89)
-    ("SINHALA LETTER IIYANNA" #x0D8A)
-    ("SINHALA LETTER UYANNA" #x0D8B)
-    ("SINHALA LETTER UUYANNA" #x0D8C)
-    ("SINHALA LETTER IRUYANNA" #x0D8D)
-    ("SINHALA LETTER IRUUYANNA" #x0D8E)
-    ("SINHALA LETTER ILUYANNA" #x0D8F)
-    ("SINHALA LETTER ILUUYANNA" #x0D90)
-    ("SINHALA LETTER EYANNA" #x0D91)
-    ("SINHALA LETTER EEYANNA" #x0D92)
-    ("SINHALA LETTER AIYANNA" #x0D93)
-    ("SINHALA LETTER OYANNA" #x0D94)
-    ("SINHALA LETTER OOYANNA" #x0D95)
-    ("SINHALA LETTER AUYANNA" #x0D96)
-    ("SINHALA LETTER ALPAPRAANA KAYANNA" #x0D9A)
-    ("SINHALA LETTER MAHAAPRAANA KAYANNA" #x0D9B)
-    ("SINHALA LETTER ALPAPRAANA GAYANNA" #x0D9C)
-    ("SINHALA LETTER MAHAAPRAANA GAYANNA" #x0D9D)
-    ("SINHALA LETTER KANTAJA NAASIKYAYA" #x0D9E)
-    ("SINHALA LETTER SANYAKA GAYANNA" #x0D9F)
-    ("SINHALA LETTER ALPAPRAANA CAYANNA" #x0DA0)
-    ("SINHALA LETTER MAHAAPRAANA CAYANNA" #x0DA1)
-    ("SINHALA LETTER ALPAPRAANA JAYANNA" #x0DA2)
-    ("SINHALA LETTER MAHAAPRAANA JAYANNA" #x0DA3)
-    ("SINHALA LETTER TAALUJA NAASIKYAYA" #x0DA4)
-    ("SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA" #x0DA5)
-    ("SINHALA LETTER SANYAKA JAYANNA" #x0DA6)
-    ("SINHALA LETTER ALPAPRAANA TTAYANNA" #x0DA7)
-    ("SINHALA LETTER MAHAAPRAANA TTAYANNA" #x0DA8)
-    ("SINHALA LETTER ALPAPRAANA DDAYANNA" #x0DA9)
-    ("SINHALA LETTER MAHAAPRAANA DDAYANNA" #x0DAA)
-    ("SINHALA LETTER MUURDHAJA NAYANNA" #x0DAB)
-    ("SINHALA LETTER SANYAKA DDAYANNA" #x0DAC)
-    ("SINHALA LETTER ALPAPRAANA TAYANNA" #x0DAD)
-    ("SINHALA LETTER MAHAAPRAANA TAYANNA" #x0DAE)
-    ("SINHALA LETTER ALPAPRAANA DAYANNA" #x0DAF)
-    ("SINHALA LETTER MAHAAPRAANA DAYANNA" #x0DB0)
-    ("SINHALA LETTER DANTAJA NAYANNA" #x0DB1)
-    ("SINHALA LETTER SANYAKA DAYANNA" #x0DB3)
-    ("SINHALA LETTER ALPAPRAANA PAYANNA" #x0DB4)
-    ("SINHALA LETTER MAHAAPRAANA PAYANNA" #x0DB5)
-    ("SINHALA LETTER ALPAPRAANA BAYANNA" #x0DB6)
-    ("SINHALA LETTER MAHAAPRAANA BAYANNA" #x0DB7)
-    ("SINHALA LETTER MAYANNA" #x0DB8)
-    ("SINHALA LETTER AMBA BAYANNA" #x0DB9)
-    ("SINHALA LETTER YAYANNA" #x0DBA)
-    ("SINHALA LETTER RAYANNA" #x0DBB)
-    ("SINHALA LETTER DANTAJA LAYANNA" #x0DBD)
-    ("SINHALA LETTER VAYANNA" #x0DC0)
-    ("SINHALA LETTER TAALUJA SAYANNA" #x0DC1)
-    ("SINHALA LETTER MUURDHAJA SAYANNA" #x0DC2)
-    ("SINHALA LETTER DANTAJA SAYANNA" #x0DC3)
-    ("SINHALA LETTER HAYANNA" #x0DC4)
-    ("SINHALA LETTER MUURDHAJA LAYANNA" #x0DC5)
-    ("SINHALA LETTER FAYANNA" #x0DC6)
-    ("SINHALA SIGN AL-LAKUNA" #x0DCA)
-    ("SINHALA VOWEL SIGN AELA-PILLA" #x0DCF)
-    ("SINHALA VOWEL SIGN KETTI AEDA-PILLA" #x0DD0)
-    ("SINHALA VOWEL SIGN DIGA AEDA-PILLA" #x0DD1)
-    ("SINHALA VOWEL SIGN KETTI IS-PILLA" #x0DD2)
-    ("SINHALA VOWEL SIGN DIGA IS-PILLA" #x0DD3)
-    ("SINHALA VOWEL SIGN KETTI PAA-PILLA" #x0DD4)
-    ("SINHALA VOWEL SIGN DIGA PAA-PILLA" #x0DD6)
-    ("SINHALA VOWEL SIGN GAETTA-PILLA" #x0DD8)
-    ("SINHALA VOWEL SIGN KOMBUVA" #x0DD9)
-    ("SINHALA VOWEL SIGN DIGA KOMBUVA" #x0DDA)
-    ("SINHALA VOWEL SIGN KOMBU DEKA" #x0DDB)
-    ("SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA" #x0DDC)
-    ("SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA" #x0DDD)
-    ("SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA" #x0DDE)
-    ("SINHALA VOWEL SIGN GAYANUKITTA" #x0DDF)
-    ("SINHALA VOWEL SIGN DIGA GAETTA-PILLA" #x0DF2)
-    ("SINHALA VOWEL SIGN DIGA GAYANUKITTA" #x0DF3)
-    ("SINHALA PUNCTUATION KUNDDALIYA" #x0DF4)
-    ))
-
diff --git a/etc/nxml/00E00-00E7F.el b/etc/nxml/00E00-00E7F.el
deleted file mode 100644 (file)
index 992ee9a..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-(nxml-define-char-name-set 'thai
-  '(("THAI CHARACTER KO KAI" #x0E01)
-    ("THAI CHARACTER KHO KHAI" #x0E02)
-    ("THAI CHARACTER KHO KHUAT" #x0E03)
-    ("THAI CHARACTER KHO KHWAI" #x0E04)
-    ("THAI CHARACTER KHO KHON" #x0E05)
-    ("THAI CHARACTER KHO RAKHANG" #x0E06)
-    ("THAI CHARACTER NGO NGU" #x0E07)
-    ("THAI CHARACTER CHO CHAN" #x0E08)
-    ("THAI CHARACTER CHO CHING" #x0E09)
-    ("THAI CHARACTER CHO CHANG" #x0E0A)
-    ("THAI CHARACTER SO SO" #x0E0B)
-    ("THAI CHARACTER CHO CHOE" #x0E0C)
-    ("THAI CHARACTER YO YING" #x0E0D)
-    ("THAI CHARACTER DO CHADA" #x0E0E)
-    ("THAI CHARACTER TO PATAK" #x0E0F)
-    ("THAI CHARACTER THO THAN" #x0E10)
-    ("THAI CHARACTER THO NANGMONTHO" #x0E11)
-    ("THAI CHARACTER THO PHUTHAO" #x0E12)
-    ("THAI CHARACTER NO NEN" #x0E13)
-    ("THAI CHARACTER DO DEK" #x0E14)
-    ("THAI CHARACTER TO TAO" #x0E15)
-    ("THAI CHARACTER THO THUNG" #x0E16)
-    ("THAI CHARACTER THO THAHAN" #x0E17)
-    ("THAI CHARACTER THO THONG" #x0E18)
-    ("THAI CHARACTER NO NU" #x0E19)
-    ("THAI CHARACTER BO BAIMAI" #x0E1A)
-    ("THAI CHARACTER PO PLA" #x0E1B)
-    ("THAI CHARACTER PHO PHUNG" #x0E1C)
-    ("THAI CHARACTER FO FA" #x0E1D)
-    ("THAI CHARACTER PHO PHAN" #x0E1E)
-    ("THAI CHARACTER FO FAN" #x0E1F)
-    ("THAI CHARACTER PHO SAMPHAO" #x0E20)
-    ("THAI CHARACTER MO MA" #x0E21)
-    ("THAI CHARACTER YO YAK" #x0E22)
-    ("THAI CHARACTER RO RUA" #x0E23)
-    ("THAI CHARACTER RU" #x0E24)
-    ("THAI CHARACTER LO LING" #x0E25)
-    ("THAI CHARACTER LU" #x0E26)
-    ("THAI CHARACTER WO WAEN" #x0E27)
-    ("THAI CHARACTER SO SALA" #x0E28)
-    ("THAI CHARACTER SO RUSI" #x0E29)
-    ("THAI CHARACTER SO SUA" #x0E2A)
-    ("THAI CHARACTER HO HIP" #x0E2B)
-    ("THAI CHARACTER LO CHULA" #x0E2C)
-    ("THAI CHARACTER O ANG" #x0E2D)
-    ("THAI CHARACTER HO NOKHUK" #x0E2E)
-    ("THAI CHARACTER PAIYANNOI" #x0E2F)
-    ("THAI CHARACTER SARA A" #x0E30)
-    ("THAI CHARACTER MAI HAN-AKAT" #x0E31)
-    ("THAI CHARACTER SARA AA" #x0E32)
-    ("THAI CHARACTER SARA AM" #x0E33)
-    ("THAI CHARACTER SARA I" #x0E34)
-    ("THAI CHARACTER SARA II" #x0E35)
-    ("THAI CHARACTER SARA UE" #x0E36)
-    ("THAI CHARACTER SARA UEE" #x0E37)
-    ("THAI CHARACTER SARA U" #x0E38)
-    ("THAI CHARACTER SARA UU" #x0E39)
-    ("THAI CHARACTER PHINTHU" #x0E3A)
-    ("THAI CURRENCY SYMBOL BAHT" #x0E3F)
-    ("THAI CHARACTER SARA E" #x0E40)
-    ("THAI CHARACTER SARA AE" #x0E41)
-    ("THAI CHARACTER SARA O" #x0E42)
-    ("THAI CHARACTER SARA AI MAIMUAN" #x0E43)
-    ("THAI CHARACTER SARA AI MAIMALAI" #x0E44)
-    ("THAI CHARACTER LAKKHANGYAO" #x0E45)
-    ("THAI CHARACTER MAIYAMOK" #x0E46)
-    ("THAI CHARACTER MAITAIKHU" #x0E47)
-    ("THAI CHARACTER MAI EK" #x0E48)
-    ("THAI CHARACTER MAI THO" #x0E49)
-    ("THAI CHARACTER MAI TRI" #x0E4A)
-    ("THAI CHARACTER MAI CHATTAWA" #x0E4B)
-    ("THAI CHARACTER THANTHAKHAT" #x0E4C)
-    ("THAI CHARACTER NIKHAHIT" #x0E4D)
-    ("THAI CHARACTER YAMAKKAN" #x0E4E)
-    ("THAI CHARACTER FONGMAN" #x0E4F)
-    ("THAI DIGIT ZERO" #x0E50)
-    ("THAI DIGIT ONE" #x0E51)
-    ("THAI DIGIT TWO" #x0E52)
-    ("THAI DIGIT THREE" #x0E53)
-    ("THAI DIGIT FOUR" #x0E54)
-    ("THAI DIGIT FIVE" #x0E55)
-    ("THAI DIGIT SIX" #x0E56)
-    ("THAI DIGIT SEVEN" #x0E57)
-    ("THAI DIGIT EIGHT" #x0E58)
-    ("THAI DIGIT NINE" #x0E59)
-    ("THAI CHARACTER ANGKHANKHU" #x0E5A)
-    ("THAI CHARACTER KHOMUT" #x0E5B)
-    ))
-
diff --git a/etc/nxml/00E80-00EFF.el b/etc/nxml/00E80-00EFF.el
deleted file mode 100644 (file)
index 8ef8a30..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-(nxml-define-char-name-set 'lao
-  '(("LAO LETTER KO" #x0E81)
-    ("LAO LETTER KHO SUNG" #x0E82)
-    ("LAO LETTER KHO TAM" #x0E84)
-    ("LAO LETTER NGO" #x0E87)
-    ("LAO LETTER CO" #x0E88)
-    ("LAO LETTER SO TAM" #x0E8A)
-    ("LAO LETTER NYO" #x0E8D)
-    ("LAO LETTER DO" #x0E94)
-    ("LAO LETTER TO" #x0E95)
-    ("LAO LETTER THO SUNG" #x0E96)
-    ("LAO LETTER THO TAM" #x0E97)
-    ("LAO LETTER NO" #x0E99)
-    ("LAO LETTER BO" #x0E9A)
-    ("LAO LETTER PO" #x0E9B)
-    ("LAO LETTER PHO SUNG" #x0E9C)
-    ("LAO LETTER FO TAM" #x0E9D)
-    ("LAO LETTER PHO TAM" #x0E9E)
-    ("LAO LETTER FO SUNG" #x0E9F)
-    ("LAO LETTER MO" #x0EA1)
-    ("LAO LETTER YO" #x0EA2)
-    ("LAO LETTER LO LING" #x0EA3)
-    ("LAO LETTER LO LOOT" #x0EA5)
-    ("LAO LETTER WO" #x0EA7)
-    ("LAO LETTER SO SUNG" #x0EAA)
-    ("LAO LETTER HO SUNG" #x0EAB)
-    ("LAO LETTER O" #x0EAD)
-    ("LAO LETTER HO TAM" #x0EAE)
-    ("LAO ELLIPSIS" #x0EAF)
-    ("LAO VOWEL SIGN A" #x0EB0)
-    ("LAO VOWEL SIGN MAI KAN" #x0EB1)
-    ("LAO VOWEL SIGN AA" #x0EB2)
-    ("LAO VOWEL SIGN AM" #x0EB3)
-    ("LAO VOWEL SIGN I" #x0EB4)
-    ("LAO VOWEL SIGN II" #x0EB5)
-    ("LAO VOWEL SIGN Y" #x0EB6)
-    ("LAO VOWEL SIGN YY" #x0EB7)
-    ("LAO VOWEL SIGN U" #x0EB8)
-    ("LAO VOWEL SIGN UU" #x0EB9)
-    ("LAO VOWEL SIGN MAI KON" #x0EBB)
-    ("LAO SEMIVOWEL SIGN LO" #x0EBC)
-    ("LAO SEMIVOWEL SIGN NYO" #x0EBD)
-    ("LAO VOWEL SIGN E" #x0EC0)
-    ("LAO VOWEL SIGN EI" #x0EC1)
-    ("LAO VOWEL SIGN O" #x0EC2)
-    ("LAO VOWEL SIGN AY" #x0EC3)
-    ("LAO VOWEL SIGN AI" #x0EC4)
-    ("LAO KO LA" #x0EC6)
-    ("LAO TONE MAI EK" #x0EC8)
-    ("LAO TONE MAI THO" #x0EC9)
-    ("LAO TONE MAI TI" #x0ECA)
-    ("LAO TONE MAI CATAWA" #x0ECB)
-    ("LAO CANCELLATION MARK" #x0ECC)
-    ("LAO NIGGAHITA" #x0ECD)
-    ("LAO DIGIT ZERO" #x0ED0)
-    ("LAO DIGIT ONE" #x0ED1)
-    ("LAO DIGIT TWO" #x0ED2)
-    ("LAO DIGIT THREE" #x0ED3)
-    ("LAO DIGIT FOUR" #x0ED4)
-    ("LAO DIGIT FIVE" #x0ED5)
-    ("LAO DIGIT SIX" #x0ED6)
-    ("LAO DIGIT SEVEN" #x0ED7)
-    ("LAO DIGIT EIGHT" #x0ED8)
-    ("LAO DIGIT NINE" #x0ED9)
-    ("LAO HO NO" #x0EDC)
-    ("LAO HO MO" #x0EDD)
-    ))
-
diff --git a/etc/nxml/00F00-00FFF.el b/etc/nxml/00F00-00FFF.el
deleted file mode 100644 (file)
index adc8fec..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-(nxml-define-char-name-set 'tibetan
-  '(("TIBETAN SYLLABLE OM" #x0F00)
-    ("TIBETAN MARK GTER YIG MGO TRUNCATED A" #x0F01)
-    ("TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA" #x0F02)
-    ("TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA" #x0F03)
-    ("TIBETAN MARK INITIAL YIG MGO MDUN MA" #x0F04)
-    ("TIBETAN MARK CLOSING YIG MGO SGAB MA" #x0F05)
-    ("TIBETAN MARK CARET YIG MGO PHUR SHAD MA" #x0F06)
-    ("TIBETAN MARK YIG MGO TSHEG SHAD MA" #x0F07)
-    ("TIBETAN MARK SBRUL SHAD" #x0F08)
-    ("TIBETAN MARK BSKUR YIG MGO" #x0F09)
-    ("TIBETAN MARK BKA- SHOG YIG MGO" #x0F0A)
-    ("TIBETAN MARK INTERSYLLABIC TSHEG" #x0F0B)
-    ("TIBETAN MARK DELIMITER TSHEG BSTAR" #x0F0C)
-    ("TIBETAN MARK SHAD" #x0F0D)
-    ("TIBETAN MARK NYIS SHAD" #x0F0E)
-    ("TIBETAN MARK TSHEG SHAD" #x0F0F)
-    ("TIBETAN MARK NYIS TSHEG SHAD" #x0F10)
-    ("TIBETAN MARK RIN CHEN SPUNGS SHAD" #x0F11)
-    ("TIBETAN MARK RGYA GRAM SHAD" #x0F12)
-    ("TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN" #x0F13)
-    ("TIBETAN MARK GTER TSHEG" #x0F14)
-    ("TIBETAN LOGOTYPE SIGN CHAD RTAGS" #x0F15)
-    ("TIBETAN LOGOTYPE SIGN LHAG RTAGS" #x0F16)
-    ("TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS" #x0F17)
-    ("TIBETAN ASTROLOGICAL SIGN -KHYUD PA" #x0F18)
-    ("TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS" #x0F19)
-    ("TIBETAN SIGN RDEL DKAR GCIG" #x0F1A)
-    ("TIBETAN SIGN RDEL DKAR GNYIS" #x0F1B)
-    ("TIBETAN SIGN RDEL DKAR GSUM" #x0F1C)
-    ("TIBETAN SIGN RDEL NAG GCIG" #x0F1D)
-    ("TIBETAN SIGN RDEL NAG GNYIS" #x0F1E)
-    ("TIBETAN SIGN RDEL DKAR RDEL NAG" #x0F1F)
-    ("TIBETAN DIGIT ZERO" #x0F20)
-    ("TIBETAN DIGIT ONE" #x0F21)
-    ("TIBETAN DIGIT TWO" #x0F22)
-    ("TIBETAN DIGIT THREE" #x0F23)
-    ("TIBETAN DIGIT FOUR" #x0F24)
-    ("TIBETAN DIGIT FIVE" #x0F25)
-    ("TIBETAN DIGIT SIX" #x0F26)
-    ("TIBETAN DIGIT SEVEN" #x0F27)
-    ("TIBETAN DIGIT EIGHT" #x0F28)
-    ("TIBETAN DIGIT NINE" #x0F29)
-    ("TIBETAN DIGIT HALF ONE" #x0F2A)
-    ("TIBETAN DIGIT HALF TWO" #x0F2B)
-    ("TIBETAN DIGIT HALF THREE" #x0F2C)
-    ("TIBETAN DIGIT HALF FOUR" #x0F2D)
-    ("TIBETAN DIGIT HALF FIVE" #x0F2E)
-    ("TIBETAN DIGIT HALF SIX" #x0F2F)
-    ("TIBETAN DIGIT HALF SEVEN" #x0F30)
-    ("TIBETAN DIGIT HALF EIGHT" #x0F31)
-    ("TIBETAN DIGIT HALF NINE" #x0F32)
-    ("TIBETAN DIGIT HALF ZERO" #x0F33)
-    ("TIBETAN MARK BSDUS RTAGS" #x0F34)
-    ("TIBETAN MARK NGAS BZUNG NYI ZLA" #x0F35)
-    ("TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN" #x0F36)
-    ("TIBETAN MARK NGAS BZUNG SGOR RTAGS" #x0F37)
-    ("TIBETAN MARK CHE MGO" #x0F38)
-    ("TIBETAN MARK TSA -PHRU" #x0F39)
-    ("TIBETAN MARK GUG RTAGS GYON" #x0F3A)
-    ("TIBETAN MARK GUG RTAGS GYAS" #x0F3B)
-    ("TIBETAN MARK ANG KHANG GYON" #x0F3C)
-    ("TIBETAN MARK ANG KHANG GYAS" #x0F3D)
-    ("TIBETAN SIGN YAR TSHES" #x0F3E)
-    ("TIBETAN SIGN MAR TSHES" #x0F3F)
-    ("TIBETAN LETTER KA" #x0F40)
-    ("TIBETAN LETTER KHA" #x0F41)
-    ("TIBETAN LETTER GA" #x0F42)
-    ("TIBETAN LETTER GHA" #x0F43)
-    ("TIBETAN LETTER NGA" #x0F44)
-    ("TIBETAN LETTER CA" #x0F45)
-    ("TIBETAN LETTER CHA" #x0F46)
-    ("TIBETAN LETTER JA" #x0F47)
-    ("TIBETAN LETTER NYA" #x0F49)
-    ("TIBETAN LETTER TTA" #x0F4A)
-    ("TIBETAN LETTER TTHA" #x0F4B)
-    ("TIBETAN LETTER DDA" #x0F4C)
-    ("TIBETAN LETTER DDHA" #x0F4D)
-    ("TIBETAN LETTER NNA" #x0F4E)
-    ("TIBETAN LETTER TA" #x0F4F)
-    ("TIBETAN LETTER THA" #x0F50)
-    ("TIBETAN LETTER DA" #x0F51)
-    ("TIBETAN LETTER DHA" #x0F52)
-    ("TIBETAN LETTER NA" #x0F53)
-    ("TIBETAN LETTER PA" #x0F54)
-    ("TIBETAN LETTER PHA" #x0F55)
-    ("TIBETAN LETTER BA" #x0F56)
-    ("TIBETAN LETTER BHA" #x0F57)
-    ("TIBETAN LETTER MA" #x0F58)
-    ("TIBETAN LETTER TSA" #x0F59)
-    ("TIBETAN LETTER TSHA" #x0F5A)
-    ("TIBETAN LETTER DZA" #x0F5B)
-    ("TIBETAN LETTER DZHA" #x0F5C)
-    ("TIBETAN LETTER WA" #x0F5D)
-    ("TIBETAN LETTER ZHA" #x0F5E)
-    ("TIBETAN LETTER ZA" #x0F5F)
-    ("TIBETAN LETTER -A" #x0F60)
-    ("TIBETAN LETTER YA" #x0F61)
-    ("TIBETAN LETTER RA" #x0F62)
-    ("TIBETAN LETTER LA" #x0F63)
-    ("TIBETAN LETTER SHA" #x0F64)
-    ("TIBETAN LETTER SSA" #x0F65)
-    ("TIBETAN LETTER SA" #x0F66)
-    ("TIBETAN LETTER HA" #x0F67)
-    ("TIBETAN LETTER A" #x0F68)
-    ("TIBETAN LETTER KSSA" #x0F69)
-    ("TIBETAN LETTER FIXED-FORM RA" #x0F6A)
-    ("TIBETAN VOWEL SIGN AA" #x0F71)
-    ("TIBETAN VOWEL SIGN I" #x0F72)
-    ("TIBETAN VOWEL SIGN II" #x0F73)
-    ("TIBETAN VOWEL SIGN U" #x0F74)
-    ("TIBETAN VOWEL SIGN UU" #x0F75)
-    ("TIBETAN VOWEL SIGN VOCALIC R" #x0F76)
-    ("TIBETAN VOWEL SIGN VOCALIC RR" #x0F77)
-    ("TIBETAN VOWEL SIGN VOCALIC L" #x0F78)
-    ("TIBETAN VOWEL SIGN VOCALIC LL" #x0F79)
-    ("TIBETAN VOWEL SIGN E" #x0F7A)
-    ("TIBETAN VOWEL SIGN EE" #x0F7B)
-    ("TIBETAN VOWEL SIGN O" #x0F7C)
-    ("TIBETAN VOWEL SIGN OO" #x0F7D)
-    ("TIBETAN SIGN RJES SU NGA RO" #x0F7E)
-    ("TIBETAN SIGN RNAM BCAD" #x0F7F)
-    ("TIBETAN VOWEL SIGN REVERSED I" #x0F80)
-    ("TIBETAN VOWEL SIGN REVERSED II" #x0F81)
-    ("TIBETAN SIGN NYI ZLA NAA DA" #x0F82)
-    ("TIBETAN SIGN SNA LDAN" #x0F83)
-    ("TIBETAN MARK HALANTA" #x0F84)
-    ("TIBETAN MARK PALUTA" #x0F85)
-    ("TIBETAN SIGN LCI RTAGS" #x0F86)
-    ("TIBETAN SIGN YANG RTAGS" #x0F87)
-    ("TIBETAN SIGN LCE TSA CAN" #x0F88)
-    ("TIBETAN SIGN MCHU CAN" #x0F89)
-    ("TIBETAN SIGN GRU CAN RGYINGS" #x0F8A)
-    ("TIBETAN SIGN GRU MED RGYINGS" #x0F8B)
-    ("TIBETAN SUBJOINED LETTER KA" #x0F90)
-    ("TIBETAN SUBJOINED LETTER KHA" #x0F91)
-    ("TIBETAN SUBJOINED LETTER GA" #x0F92)
-    ("TIBETAN SUBJOINED LETTER GHA" #x0F93)
-    ("TIBETAN SUBJOINED LETTER NGA" #x0F94)
-    ("TIBETAN SUBJOINED LETTER CA" #x0F95)
-    ("TIBETAN SUBJOINED LETTER CHA" #x0F96)
-    ("TIBETAN SUBJOINED LETTER JA" #x0F97)
-    ("TIBETAN SUBJOINED LETTER NYA" #x0F99)
-    ("TIBETAN SUBJOINED LETTER TTA" #x0F9A)
-    ("TIBETAN SUBJOINED LETTER TTHA" #x0F9B)
-    ("TIBETAN SUBJOINED LETTER DDA" #x0F9C)
-    ("TIBETAN SUBJOINED LETTER DDHA" #x0F9D)
-    ("TIBETAN SUBJOINED LETTER NNA" #x0F9E)
-    ("TIBETAN SUBJOINED LETTER TA" #x0F9F)
-    ("TIBETAN SUBJOINED LETTER THA" #x0FA0)
-    ("TIBETAN SUBJOINED LETTER DA" #x0FA1)
-    ("TIBETAN SUBJOINED LETTER DHA" #x0FA2)
-    ("TIBETAN SUBJOINED LETTER NA" #x0FA3)
-    ("TIBETAN SUBJOINED LETTER PA" #x0FA4)
-    ("TIBETAN SUBJOINED LETTER PHA" #x0FA5)
-    ("TIBETAN SUBJOINED LETTER BA" #x0FA6)
-    ("TIBETAN SUBJOINED LETTER BHA" #x0FA7)
-    ("TIBETAN SUBJOINED LETTER MA" #x0FA8)
-    ("TIBETAN SUBJOINED LETTER TSA" #x0FA9)
-    ("TIBETAN SUBJOINED LETTER TSHA" #x0FAA)
-    ("TIBETAN SUBJOINED LETTER DZA" #x0FAB)
-    ("TIBETAN SUBJOINED LETTER DZHA" #x0FAC)
-    ("TIBETAN SUBJOINED LETTER WA" #x0FAD)
-    ("TIBETAN SUBJOINED LETTER ZHA" #x0FAE)
-    ("TIBETAN SUBJOINED LETTER ZA" #x0FAF)
-    ("TIBETAN SUBJOINED LETTER -A" #x0FB0)
-    ("TIBETAN SUBJOINED LETTER YA" #x0FB1)
-    ("TIBETAN SUBJOINED LETTER RA" #x0FB2)
-    ("TIBETAN SUBJOINED LETTER LA" #x0FB3)
-    ("TIBETAN SUBJOINED LETTER SHA" #x0FB4)
-    ("TIBETAN SUBJOINED LETTER SSA" #x0FB5)
-    ("TIBETAN SUBJOINED LETTER SA" #x0FB6)
-    ("TIBETAN SUBJOINED LETTER HA" #x0FB7)
-    ("TIBETAN SUBJOINED LETTER A" #x0FB8)
-    ("TIBETAN SUBJOINED LETTER KSSA" #x0FB9)
-    ("TIBETAN SUBJOINED LETTER FIXED-FORM WA" #x0FBA)
-    ("TIBETAN SUBJOINED LETTER FIXED-FORM YA" #x0FBB)
-    ("TIBETAN SUBJOINED LETTER FIXED-FORM RA" #x0FBC)
-    ("TIBETAN KU RU KHA" #x0FBE)
-    ("TIBETAN KU RU KHA BZHI MIG CAN" #x0FBF)
-    ("TIBETAN CANTILLATION SIGN HEAVY BEAT" #x0FC0)
-    ("TIBETAN CANTILLATION SIGN LIGHT BEAT" #x0FC1)
-    ("TIBETAN CANTILLATION SIGN CANG TE-U" #x0FC2)
-    ("TIBETAN CANTILLATION SIGN SBUB -CHAL" #x0FC3)
-    ("TIBETAN SYMBOL DRIL BU" #x0FC4)
-    ("TIBETAN SYMBOL RDO RJE" #x0FC5)
-    ("TIBETAN SYMBOL PADMA GDAN" #x0FC6)
-    ("TIBETAN SYMBOL RDO RJE RGYA GRAM" #x0FC7)
-    ("TIBETAN SYMBOL PHUR PA" #x0FC8)
-    ("TIBETAN SYMBOL NOR BU" #x0FC9)
-    ("TIBETAN SYMBOL NOR BU NYIS -KHYIL" #x0FCA)
-    ("TIBETAN SYMBOL NOR BU GSUM -KHYIL" #x0FCB)
-    ("TIBETAN SYMBOL NOR BU BZHI -KHYIL" #x0FCC)
-    ("TIBETAN SIGN RDEL NAG GSUM" #x0FCF)
-    ))
-
diff --git a/etc/nxml/01000-0109F.el b/etc/nxml/01000-0109F.el
deleted file mode 100644 (file)
index 56c6310..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-(nxml-define-char-name-set 'myanmar
-  '(("MYANMAR LETTER KA" #x1000)
-    ("MYANMAR LETTER KHA" #x1001)
-    ("MYANMAR LETTER GA" #x1002)
-    ("MYANMAR LETTER GHA" #x1003)
-    ("MYANMAR LETTER NGA" #x1004)
-    ("MYANMAR LETTER CA" #x1005)
-    ("MYANMAR LETTER CHA" #x1006)
-    ("MYANMAR LETTER JA" #x1007)
-    ("MYANMAR LETTER JHA" #x1008)
-    ("MYANMAR LETTER NYA" #x1009)
-    ("MYANMAR LETTER NNYA" #x100A)
-    ("MYANMAR LETTER TTA" #x100B)
-    ("MYANMAR LETTER TTHA" #x100C)
-    ("MYANMAR LETTER DDA" #x100D)
-    ("MYANMAR LETTER DDHA" #x100E)
-    ("MYANMAR LETTER NNA" #x100F)
-    ("MYANMAR LETTER TA" #x1010)
-    ("MYANMAR LETTER THA" #x1011)
-    ("MYANMAR LETTER DA" #x1012)
-    ("MYANMAR LETTER DHA" #x1013)
-    ("MYANMAR LETTER NA" #x1014)
-    ("MYANMAR LETTER PA" #x1015)
-    ("MYANMAR LETTER PHA" #x1016)
-    ("MYANMAR LETTER BA" #x1017)
-    ("MYANMAR LETTER BHA" #x1018)
-    ("MYANMAR LETTER MA" #x1019)
-    ("MYANMAR LETTER YA" #x101A)
-    ("MYANMAR LETTER RA" #x101B)
-    ("MYANMAR LETTER LA" #x101C)
-    ("MYANMAR LETTER WA" #x101D)
-    ("MYANMAR LETTER SA" #x101E)
-    ("MYANMAR LETTER HA" #x101F)
-    ("MYANMAR LETTER LLA" #x1020)
-    ("MYANMAR LETTER A" #x1021)
-    ("MYANMAR LETTER I" #x1023)
-    ("MYANMAR LETTER II" #x1024)
-    ("MYANMAR LETTER U" #x1025)
-    ("MYANMAR LETTER UU" #x1026)
-    ("MYANMAR LETTER E" #x1027)
-    ("MYANMAR LETTER O" #x1029)
-    ("MYANMAR LETTER AU" #x102A)
-    ("MYANMAR VOWEL SIGN AA" #x102C)
-    ("MYANMAR VOWEL SIGN I" #x102D)
-    ("MYANMAR VOWEL SIGN II" #x102E)
-    ("MYANMAR VOWEL SIGN U" #x102F)
-    ("MYANMAR VOWEL SIGN UU" #x1030)
-    ("MYANMAR VOWEL SIGN E" #x1031)
-    ("MYANMAR VOWEL SIGN AI" #x1032)
-    ("MYANMAR SIGN ANUSVARA" #x1036)
-    ("MYANMAR SIGN DOT BELOW" #x1037)
-    ("MYANMAR SIGN VISARGA" #x1038)
-    ("MYANMAR SIGN VIRAMA" #x1039)
-    ("MYANMAR DIGIT ZERO" #x1040)
-    ("MYANMAR DIGIT ONE" #x1041)
-    ("MYANMAR DIGIT TWO" #x1042)
-    ("MYANMAR DIGIT THREE" #x1043)
-    ("MYANMAR DIGIT FOUR" #x1044)
-    ("MYANMAR DIGIT FIVE" #x1045)
-    ("MYANMAR DIGIT SIX" #x1046)
-    ("MYANMAR DIGIT SEVEN" #x1047)
-    ("MYANMAR DIGIT EIGHT" #x1048)
-    ("MYANMAR DIGIT NINE" #x1049)
-    ("MYANMAR SIGN LITTLE SECTION" #x104A)
-    ("MYANMAR SIGN SECTION" #x104B)
-    ("MYANMAR SYMBOL LOCATIVE" #x104C)
-    ("MYANMAR SYMBOL COMPLETED" #x104D)
-    ("MYANMAR SYMBOL AFOREMENTIONED" #x104E)
-    ("MYANMAR SYMBOL GENITIVE" #x104F)
-    ("MYANMAR LETTER SHA" #x1050)
-    ("MYANMAR LETTER SSA" #x1051)
-    ("MYANMAR LETTER VOCALIC R" #x1052)
-    ("MYANMAR LETTER VOCALIC RR" #x1053)
-    ("MYANMAR LETTER VOCALIC L" #x1054)
-    ("MYANMAR LETTER VOCALIC LL" #x1055)
-    ("MYANMAR VOWEL SIGN VOCALIC R" #x1056)
-    ("MYANMAR VOWEL SIGN VOCALIC RR" #x1057)
-    ("MYANMAR VOWEL SIGN VOCALIC L" #x1058)
-    ("MYANMAR VOWEL SIGN VOCALIC LL" #x1059)
-    ))
-
diff --git a/etc/nxml/010A0-010FF.el b/etc/nxml/010A0-010FF.el
deleted file mode 100644 (file)
index e7b5916..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-(nxml-define-char-name-set 'georgian
-  '(("GEORGIAN CAPITAL LETTER AN" #x10A0)
-    ("GEORGIAN CAPITAL LETTER BAN" #x10A1)
-    ("GEORGIAN CAPITAL LETTER GAN" #x10A2)
-    ("GEORGIAN CAPITAL LETTER DON" #x10A3)
-    ("GEORGIAN CAPITAL LETTER EN" #x10A4)
-    ("GEORGIAN CAPITAL LETTER VIN" #x10A5)
-    ("GEORGIAN CAPITAL LETTER ZEN" #x10A6)
-    ("GEORGIAN CAPITAL LETTER TAN" #x10A7)
-    ("GEORGIAN CAPITAL LETTER IN" #x10A8)
-    ("GEORGIAN CAPITAL LETTER KAN" #x10A9)
-    ("GEORGIAN CAPITAL LETTER LAS" #x10AA)
-    ("GEORGIAN CAPITAL LETTER MAN" #x10AB)
-    ("GEORGIAN CAPITAL LETTER NAR" #x10AC)
-    ("GEORGIAN CAPITAL LETTER ON" #x10AD)
-    ("GEORGIAN CAPITAL LETTER PAR" #x10AE)
-    ("GEORGIAN CAPITAL LETTER ZHAR" #x10AF)
-    ("GEORGIAN CAPITAL LETTER RAE" #x10B0)
-    ("GEORGIAN CAPITAL LETTER SAN" #x10B1)
-    ("GEORGIAN CAPITAL LETTER TAR" #x10B2)
-    ("GEORGIAN CAPITAL LETTER UN" #x10B3)
-    ("GEORGIAN CAPITAL LETTER PHAR" #x10B4)
-    ("GEORGIAN CAPITAL LETTER KHAR" #x10B5)
-    ("GEORGIAN CAPITAL LETTER GHAN" #x10B6)
-    ("GEORGIAN CAPITAL LETTER QAR" #x10B7)
-    ("GEORGIAN CAPITAL LETTER SHIN" #x10B8)
-    ("GEORGIAN CAPITAL LETTER CHIN" #x10B9)
-    ("GEORGIAN CAPITAL LETTER CAN" #x10BA)
-    ("GEORGIAN CAPITAL LETTER JIL" #x10BB)
-    ("GEORGIAN CAPITAL LETTER CIL" #x10BC)
-    ("GEORGIAN CAPITAL LETTER CHAR" #x10BD)
-    ("GEORGIAN CAPITAL LETTER XAN" #x10BE)
-    ("GEORGIAN CAPITAL LETTER JHAN" #x10BF)
-    ("GEORGIAN CAPITAL LETTER HAE" #x10C0)
-    ("GEORGIAN CAPITAL LETTER HE" #x10C1)
-    ("GEORGIAN CAPITAL LETTER HIE" #x10C2)
-    ("GEORGIAN CAPITAL LETTER WE" #x10C3)
-    ("GEORGIAN CAPITAL LETTER HAR" #x10C4)
-    ("GEORGIAN CAPITAL LETTER HOE" #x10C5)
-    ("GEORGIAN LETTER AN" #x10D0)
-    ("GEORGIAN LETTER BAN" #x10D1)
-    ("GEORGIAN LETTER GAN" #x10D2)
-    ("GEORGIAN LETTER DON" #x10D3)
-    ("GEORGIAN LETTER EN" #x10D4)
-    ("GEORGIAN LETTER VIN" #x10D5)
-    ("GEORGIAN LETTER ZEN" #x10D6)
-    ("GEORGIAN LETTER TAN" #x10D7)
-    ("GEORGIAN LETTER IN" #x10D8)
-    ("GEORGIAN LETTER KAN" #x10D9)
-    ("GEORGIAN LETTER LAS" #x10DA)
-    ("GEORGIAN LETTER MAN" #x10DB)
-    ("GEORGIAN LETTER NAR" #x10DC)
-    ("GEORGIAN LETTER ON" #x10DD)
-    ("GEORGIAN LETTER PAR" #x10DE)
-    ("GEORGIAN LETTER ZHAR" #x10DF)
-    ("GEORGIAN LETTER RAE" #x10E0)
-    ("GEORGIAN LETTER SAN" #x10E1)
-    ("GEORGIAN LETTER TAR" #x10E2)
-    ("GEORGIAN LETTER UN" #x10E3)
-    ("GEORGIAN LETTER PHAR" #x10E4)
-    ("GEORGIAN LETTER KHAR" #x10E5)
-    ("GEORGIAN LETTER GHAN" #x10E6)
-    ("GEORGIAN LETTER QAR" #x10E7)
-    ("GEORGIAN LETTER SHIN" #x10E8)
-    ("GEORGIAN LETTER CHIN" #x10E9)
-    ("GEORGIAN LETTER CAN" #x10EA)
-    ("GEORGIAN LETTER JIL" #x10EB)
-    ("GEORGIAN LETTER CIL" #x10EC)
-    ("GEORGIAN LETTER CHAR" #x10ED)
-    ("GEORGIAN LETTER XAN" #x10EE)
-    ("GEORGIAN LETTER JHAN" #x10EF)
-    ("GEORGIAN LETTER HAE" #x10F0)
-    ("GEORGIAN LETTER HE" #x10F1)
-    ("GEORGIAN LETTER HIE" #x10F2)
-    ("GEORGIAN LETTER WE" #x10F3)
-    ("GEORGIAN LETTER HAR" #x10F4)
-    ("GEORGIAN LETTER HOE" #x10F5)
-    ("GEORGIAN LETTER FI" #x10F6)
-    ("GEORGIAN LETTER YN" #x10F7)
-    ("GEORGIAN LETTER ELIFI" #x10F8)
-    ("GEORGIAN PARAGRAPH SEPARATOR" #x10FB)
-    ))
-
diff --git a/etc/nxml/01100-011FF.el b/etc/nxml/01100-011FF.el
deleted file mode 100644 (file)
index dbaa621..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-(nxml-define-char-name-set 'hangul-jamo
-  '(("HANGUL CHOSEONG KIYEOK" #x1100)
-    ("HANGUL CHOSEONG SSANGKIYEOK" #x1101)
-    ("HANGUL CHOSEONG NIEUN" #x1102)
-    ("HANGUL CHOSEONG TIKEUT" #x1103)
-    ("HANGUL CHOSEONG SSANGTIKEUT" #x1104)
-    ("HANGUL CHOSEONG RIEUL" #x1105)
-    ("HANGUL CHOSEONG MIEUM" #x1106)
-    ("HANGUL CHOSEONG PIEUP" #x1107)
-    ("HANGUL CHOSEONG SSANGPIEUP" #x1108)
-    ("HANGUL CHOSEONG SIOS" #x1109)
-    ("HANGUL CHOSEONG SSANGSIOS" #x110A)
-    ("HANGUL CHOSEONG IEUNG" #x110B)
-    ("HANGUL CHOSEONG CIEUC" #x110C)
-    ("HANGUL CHOSEONG SSANGCIEUC" #x110D)
-    ("HANGUL CHOSEONG CHIEUCH" #x110E)
-    ("HANGUL CHOSEONG KHIEUKH" #x110F)
-    ("HANGUL CHOSEONG THIEUTH" #x1110)
-    ("HANGUL CHOSEONG PHIEUPH" #x1111)
-    ("HANGUL CHOSEONG HIEUH" #x1112)
-    ("HANGUL CHOSEONG NIEUN-KIYEOK" #x1113)
-    ("HANGUL CHOSEONG SSANGNIEUN" #x1114)
-    ("HANGUL CHOSEONG NIEUN-TIKEUT" #x1115)
-    ("HANGUL CHOSEONG NIEUN-PIEUP" #x1116)
-    ("HANGUL CHOSEONG TIKEUT-KIYEOK" #x1117)
-    ("HANGUL CHOSEONG RIEUL-NIEUN" #x1118)
-    ("HANGUL CHOSEONG SSANGRIEUL" #x1119)
-    ("HANGUL CHOSEONG RIEUL-HIEUH" #x111A)
-    ("HANGUL CHOSEONG KAPYEOUNRIEUL" #x111B)
-    ("HANGUL CHOSEONG MIEUM-PIEUP" #x111C)
-    ("HANGUL CHOSEONG KAPYEOUNMIEUM" #x111D)
-    ("HANGUL CHOSEONG PIEUP-KIYEOK" #x111E)
-    ("HANGUL CHOSEONG PIEUP-NIEUN" #x111F)
-    ("HANGUL CHOSEONG PIEUP-TIKEUT" #x1120)
-    ("HANGUL CHOSEONG PIEUP-SIOS" #x1121)
-    ("HANGUL CHOSEONG PIEUP-SIOS-KIYEOK" #x1122)
-    ("HANGUL CHOSEONG PIEUP-SIOS-TIKEUT" #x1123)
-    ("HANGUL CHOSEONG PIEUP-SIOS-PIEUP" #x1124)
-    ("HANGUL CHOSEONG PIEUP-SSANGSIOS" #x1125)
-    ("HANGUL CHOSEONG PIEUP-SIOS-CIEUC" #x1126)
-    ("HANGUL CHOSEONG PIEUP-CIEUC" #x1127)
-    ("HANGUL CHOSEONG PIEUP-CHIEUCH" #x1128)
-    ("HANGUL CHOSEONG PIEUP-THIEUTH" #x1129)
-    ("HANGUL CHOSEONG PIEUP-PHIEUPH" #x112A)
-    ("HANGUL CHOSEONG KAPYEOUNPIEUP" #x112B)
-    ("HANGUL CHOSEONG KAPYEOUNSSANGPIEUP" #x112C)
-    ("HANGUL CHOSEONG SIOS-KIYEOK" #x112D)
-    ("HANGUL CHOSEONG SIOS-NIEUN" #x112E)
-    ("HANGUL CHOSEONG SIOS-TIKEUT" #x112F)
-    ("HANGUL CHOSEONG SIOS-RIEUL" #x1130)
-    ("HANGUL CHOSEONG SIOS-MIEUM" #x1131)
-    ("HANGUL CHOSEONG SIOS-PIEUP" #x1132)
-    ("HANGUL CHOSEONG SIOS-PIEUP-KIYEOK" #x1133)
-    ("HANGUL CHOSEONG SIOS-SSANGSIOS" #x1134)
-    ("HANGUL CHOSEONG SIOS-IEUNG" #x1135)
-    ("HANGUL CHOSEONG SIOS-CIEUC" #x1136)
-    ("HANGUL CHOSEONG SIOS-CHIEUCH" #x1137)
-    ("HANGUL CHOSEONG SIOS-KHIEUKH" #x1138)
-    ("HANGUL CHOSEONG SIOS-THIEUTH" #x1139)
-    ("HANGUL CHOSEONG SIOS-PHIEUPH" #x113A)
-    ("HANGUL CHOSEONG SIOS-HIEUH" #x113B)
-    ("HANGUL CHOSEONG CHITUEUMSIOS" #x113C)
-    ("HANGUL CHOSEONG CHITUEUMSSANGSIOS" #x113D)
-    ("HANGUL CHOSEONG CEONGCHIEUMSIOS" #x113E)
-    ("HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS" #x113F)
-    ("HANGUL CHOSEONG PANSIOS" #x1140)
-    ("HANGUL CHOSEONG IEUNG-KIYEOK" #x1141)
-    ("HANGUL CHOSEONG IEUNG-TIKEUT" #x1142)
-    ("HANGUL CHOSEONG IEUNG-MIEUM" #x1143)
-    ("HANGUL CHOSEONG IEUNG-PIEUP" #x1144)
-    ("HANGUL CHOSEONG IEUNG-SIOS" #x1145)
-    ("HANGUL CHOSEONG IEUNG-PANSIOS" #x1146)
-    ("HANGUL CHOSEONG SSANGIEUNG" #x1147)
-    ("HANGUL CHOSEONG IEUNG-CIEUC" #x1148)
-    ("HANGUL CHOSEONG IEUNG-CHIEUCH" #x1149)
-    ("HANGUL CHOSEONG IEUNG-THIEUTH" #x114A)
-    ("HANGUL CHOSEONG IEUNG-PHIEUPH" #x114B)
-    ("HANGUL CHOSEONG YESIEUNG" #x114C)
-    ("HANGUL CHOSEONG CIEUC-IEUNG" #x114D)
-    ("HANGUL CHOSEONG CHITUEUMCIEUC" #x114E)
-    ("HANGUL CHOSEONG CHITUEUMSSANGCIEUC" #x114F)
-    ("HANGUL CHOSEONG CEONGCHIEUMCIEUC" #x1150)
-    ("HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC" #x1151)
-    ("HANGUL CHOSEONG CHIEUCH-KHIEUKH" #x1152)
-    ("HANGUL CHOSEONG CHIEUCH-HIEUH" #x1153)
-    ("HANGUL CHOSEONG CHITUEUMCHIEUCH" #x1154)
-    ("HANGUL CHOSEONG CEONGCHIEUMCHIEUCH" #x1155)
-    ("HANGUL CHOSEONG PHIEUPH-PIEUP" #x1156)
-    ("HANGUL CHOSEONG KAPYEOUNPHIEUPH" #x1157)
-    ("HANGUL CHOSEONG SSANGHIEUH" #x1158)
-    ("HANGUL CHOSEONG YEORINHIEUH" #x1159)
-    ("HANGUL CHOSEONG FILLER" #x115F)
-    ("HANGUL JUNGSEONG FILLER" #x1160)
-    ("HANGUL JUNGSEONG A" #x1161)
-    ("HANGUL JUNGSEONG AE" #x1162)
-    ("HANGUL JUNGSEONG YA" #x1163)
-    ("HANGUL JUNGSEONG YAE" #x1164)
-    ("HANGUL JUNGSEONG EO" #x1165)
-    ("HANGUL JUNGSEONG E" #x1166)
-    ("HANGUL JUNGSEONG YEO" #x1167)
-    ("HANGUL JUNGSEONG YE" #x1168)
-    ("HANGUL JUNGSEONG O" #x1169)
-    ("HANGUL JUNGSEONG WA" #x116A)
-    ("HANGUL JUNGSEONG WAE" #x116B)
-    ("HANGUL JUNGSEONG OE" #x116C)
-    ("HANGUL JUNGSEONG YO" #x116D)
-    ("HANGUL JUNGSEONG U" #x116E)
-    ("HANGUL JUNGSEONG WEO" #x116F)
-    ("HANGUL JUNGSEONG WE" #x1170)
-    ("HANGUL JUNGSEONG WI" #x1171)
-    ("HANGUL JUNGSEONG YU" #x1172)
-    ("HANGUL JUNGSEONG EU" #x1173)
-    ("HANGUL JUNGSEONG YI" #x1174)
-    ("HANGUL JUNGSEONG I" #x1175)
-    ("HANGUL JUNGSEONG A-O" #x1176)
-    ("HANGUL JUNGSEONG A-U" #x1177)
-    ("HANGUL JUNGSEONG YA-O" #x1178)
-    ("HANGUL JUNGSEONG YA-YO" #x1179)
-    ("HANGUL JUNGSEONG EO-O" #x117A)
-    ("HANGUL JUNGSEONG EO-U" #x117B)
-    ("HANGUL JUNGSEONG EO-EU" #x117C)
-    ("HANGUL JUNGSEONG YEO-O" #x117D)
-    ("HANGUL JUNGSEONG YEO-U" #x117E)
-    ("HANGUL JUNGSEONG O-EO" #x117F)
-    ("HANGUL JUNGSEONG O-E" #x1180)
-    ("HANGUL JUNGSEONG O-YE" #x1181)
-    ("HANGUL JUNGSEONG O-O" #x1182)
-    ("HANGUL JUNGSEONG O-U" #x1183)
-    ("HANGUL JUNGSEONG YO-YA" #x1184)
-    ("HANGUL JUNGSEONG YO-YAE" #x1185)
-    ("HANGUL JUNGSEONG YO-YEO" #x1186)
-    ("HANGUL JUNGSEONG YO-O" #x1187)
-    ("HANGUL JUNGSEONG YO-I" #x1188)
-    ("HANGUL JUNGSEONG U-A" #x1189)
-    ("HANGUL JUNGSEONG U-AE" #x118A)
-    ("HANGUL JUNGSEONG U-EO-EU" #x118B)
-    ("HANGUL JUNGSEONG U-YE" #x118C)
-    ("HANGUL JUNGSEONG U-U" #x118D)
-    ("HANGUL JUNGSEONG YU-A" #x118E)
-    ("HANGUL JUNGSEONG YU-EO" #x118F)
-    ("HANGUL JUNGSEONG YU-E" #x1190)
-    ("HANGUL JUNGSEONG YU-YEO" #x1191)
-    ("HANGUL JUNGSEONG YU-YE" #x1192)
-    ("HANGUL JUNGSEONG YU-U" #x1193)
-    ("HANGUL JUNGSEONG YU-I" #x1194)
-    ("HANGUL JUNGSEONG EU-U" #x1195)
-    ("HANGUL JUNGSEONG EU-EU" #x1196)
-    ("HANGUL JUNGSEONG YI-U" #x1197)
-    ("HANGUL JUNGSEONG I-A" #x1198)
-    ("HANGUL JUNGSEONG I-YA" #x1199)
-    ("HANGUL JUNGSEONG I-O" #x119A)
-    ("HANGUL JUNGSEONG I-U" #x119B)
-    ("HANGUL JUNGSEONG I-EU" #x119C)
-    ("HANGUL JUNGSEONG I-ARAEA" #x119D)
-    ("HANGUL JUNGSEONG ARAEA" #x119E)
-    ("HANGUL JUNGSEONG ARAEA-EO" #x119F)
-    ("HANGUL JUNGSEONG ARAEA-U" #x11A0)
-    ("HANGUL JUNGSEONG ARAEA-I" #x11A1)
-    ("HANGUL JUNGSEONG SSANGARAEA" #x11A2)
-    ("HANGUL JONGSEONG KIYEOK" #x11A8)
-    ("HANGUL JONGSEONG SSANGKIYEOK" #x11A9)
-    ("HANGUL JONGSEONG KIYEOK-SIOS" #x11AA)
-    ("HANGUL JONGSEONG NIEUN" #x11AB)
-    ("HANGUL JONGSEONG NIEUN-CIEUC" #x11AC)
-    ("HANGUL JONGSEONG NIEUN-HIEUH" #x11AD)
-    ("HANGUL JONGSEONG TIKEUT" #x11AE)
-    ("HANGUL JONGSEONG RIEUL" #x11AF)
-    ("HANGUL JONGSEONG RIEUL-KIYEOK" #x11B0)
-    ("HANGUL JONGSEONG RIEUL-MIEUM" #x11B1)
-    ("HANGUL JONGSEONG RIEUL-PIEUP" #x11B2)
-    ("HANGUL JONGSEONG RIEUL-SIOS" #x11B3)
-    ("HANGUL JONGSEONG RIEUL-THIEUTH" #x11B4)
-    ("HANGUL JONGSEONG RIEUL-PHIEUPH" #x11B5)
-    ("HANGUL JONGSEONG RIEUL-HIEUH" #x11B6)
-    ("HANGUL JONGSEONG MIEUM" #x11B7)
-    ("HANGUL JONGSEONG PIEUP" #x11B8)
-    ("HANGUL JONGSEONG PIEUP-SIOS" #x11B9)
-    ("HANGUL JONGSEONG SIOS" #x11BA)
-    ("HANGUL JONGSEONG SSANGSIOS" #x11BB)
-    ("HANGUL JONGSEONG IEUNG" #x11BC)
-    ("HANGUL JONGSEONG CIEUC" #x11BD)
-    ("HANGUL JONGSEONG CHIEUCH" #x11BE)
-    ("HANGUL JONGSEONG KHIEUKH" #x11BF)
-    ("HANGUL JONGSEONG THIEUTH" #x11C0)
-    ("HANGUL JONGSEONG PHIEUPH" #x11C1)
-    ("HANGUL JONGSEONG HIEUH" #x11C2)
-    ("HANGUL JONGSEONG KIYEOK-RIEUL" #x11C3)
-    ("HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK" #x11C4)
-    ("HANGUL JONGSEONG NIEUN-KIYEOK" #x11C5)
-    ("HANGUL JONGSEONG NIEUN-TIKEUT" #x11C6)
-    ("HANGUL JONGSEONG NIEUN-SIOS" #x11C7)
-    ("HANGUL JONGSEONG NIEUN-PANSIOS" #x11C8)
-    ("HANGUL JONGSEONG NIEUN-THIEUTH" #x11C9)
-    ("HANGUL JONGSEONG TIKEUT-KIYEOK" #x11CA)
-    ("HANGUL JONGSEONG TIKEUT-RIEUL" #x11CB)
-    ("HANGUL JONGSEONG RIEUL-KIYEOK-SIOS" #x11CC)
-    ("HANGUL JONGSEONG RIEUL-NIEUN" #x11CD)
-    ("HANGUL JONGSEONG RIEUL-TIKEUT" #x11CE)
-    ("HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH" #x11CF)
-    ("HANGUL JONGSEONG SSANGRIEUL" #x11D0)
-    ("HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK" #x11D1)
-    ("HANGUL JONGSEONG RIEUL-MIEUM-SIOS" #x11D2)
-    ("HANGUL JONGSEONG RIEUL-PIEUP-SIOS" #x11D3)
-    ("HANGUL JONGSEONG RIEUL-PIEUP-HIEUH" #x11D4)
-    ("HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP" #x11D5)
-    ("HANGUL JONGSEONG RIEUL-SSANGSIOS" #x11D6)
-    ("HANGUL JONGSEONG RIEUL-PANSIOS" #x11D7)
-    ("HANGUL JONGSEONG RIEUL-KHIEUKH" #x11D8)
-    ("HANGUL JONGSEONG RIEUL-YEORINHIEUH" #x11D9)
-    ("HANGUL JONGSEONG MIEUM-KIYEOK" #x11DA)
-    ("HANGUL JONGSEONG MIEUM-RIEUL" #x11DB)
-    ("HANGUL JONGSEONG MIEUM-PIEUP" #x11DC)
-    ("HANGUL JONGSEONG MIEUM-SIOS" #x11DD)
-    ("HANGUL JONGSEONG MIEUM-SSANGSIOS" #x11DE)
-    ("HANGUL JONGSEONG MIEUM-PANSIOS" #x11DF)
-    ("HANGUL JONGSEONG MIEUM-CHIEUCH" #x11E0)
-    ("HANGUL JONGSEONG MIEUM-HIEUH" #x11E1)
-    ("HANGUL JONGSEONG KAPYEOUNMIEUM" #x11E2)
-    ("HANGUL JONGSEONG PIEUP-RIEUL" #x11E3)
-    ("HANGUL JONGSEONG PIEUP-PHIEUPH" #x11E4)
-    ("HANGUL JONGSEONG PIEUP-HIEUH" #x11E5)
-    ("HANGUL JONGSEONG KAPYEOUNPIEUP" #x11E6)
-    ("HANGUL JONGSEONG SIOS-KIYEOK" #x11E7)
-    ("HANGUL JONGSEONG SIOS-TIKEUT" #x11E8)
-    ("HANGUL JONGSEONG SIOS-RIEUL" #x11E9)
-    ("HANGUL JONGSEONG SIOS-PIEUP" #x11EA)
-    ("HANGUL JONGSEONG PANSIOS" #x11EB)
-    ("HANGUL JONGSEONG IEUNG-KIYEOK" #x11EC)
-    ("HANGUL JONGSEONG IEUNG-SSANGKIYEOK" #x11ED)
-    ("HANGUL JONGSEONG SSANGIEUNG" #x11EE)
-    ("HANGUL JONGSEONG IEUNG-KHIEUKH" #x11EF)
-    ("HANGUL JONGSEONG YESIEUNG" #x11F0)
-    ("HANGUL JONGSEONG YESIEUNG-SIOS" #x11F1)
-    ("HANGUL JONGSEONG YESIEUNG-PANSIOS" #x11F2)
-    ("HANGUL JONGSEONG PHIEUPH-PIEUP" #x11F3)
-    ("HANGUL JONGSEONG KAPYEOUNPHIEUPH" #x11F4)
-    ("HANGUL JONGSEONG HIEUH-NIEUN" #x11F5)
-    ("HANGUL JONGSEONG HIEUH-RIEUL" #x11F6)
-    ("HANGUL JONGSEONG HIEUH-MIEUM" #x11F7)
-    ("HANGUL JONGSEONG HIEUH-PIEUP" #x11F8)
-    ("HANGUL JONGSEONG YEORINHIEUH" #x11F9)
-    ))
-
diff --git a/etc/nxml/01200-0137F.el b/etc/nxml/01200-0137F.el
deleted file mode 100644 (file)
index c7ac4e0..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-(nxml-define-char-name-set 'ethiopic
-  '(("ETHIOPIC SYLLABLE HA" #x1200)
-    ("ETHIOPIC SYLLABLE HU" #x1201)
-    ("ETHIOPIC SYLLABLE HI" #x1202)
-    ("ETHIOPIC SYLLABLE HAA" #x1203)
-    ("ETHIOPIC SYLLABLE HEE" #x1204)
-    ("ETHIOPIC SYLLABLE HE" #x1205)
-    ("ETHIOPIC SYLLABLE HO" #x1206)
-    ("ETHIOPIC SYLLABLE LA" #x1208)
-    ("ETHIOPIC SYLLABLE LU" #x1209)
-    ("ETHIOPIC SYLLABLE LI" #x120A)
-    ("ETHIOPIC SYLLABLE LAA" #x120B)
-    ("ETHIOPIC SYLLABLE LEE" #x120C)
-    ("ETHIOPIC SYLLABLE LE" #x120D)
-    ("ETHIOPIC SYLLABLE LO" #x120E)
-    ("ETHIOPIC SYLLABLE LWA" #x120F)
-    ("ETHIOPIC SYLLABLE HHA" #x1210)
-    ("ETHIOPIC SYLLABLE HHU" #x1211)
-    ("ETHIOPIC SYLLABLE HHI" #x1212)
-    ("ETHIOPIC SYLLABLE HHAA" #x1213)
-    ("ETHIOPIC SYLLABLE HHEE" #x1214)
-    ("ETHIOPIC SYLLABLE HHE" #x1215)
-    ("ETHIOPIC SYLLABLE HHO" #x1216)
-    ("ETHIOPIC SYLLABLE HHWA" #x1217)
-    ("ETHIOPIC SYLLABLE MA" #x1218)
-    ("ETHIOPIC SYLLABLE MU" #x1219)
-    ("ETHIOPIC SYLLABLE MI" #x121A)
-    ("ETHIOPIC SYLLABLE MAA" #x121B)
-    ("ETHIOPIC SYLLABLE MEE" #x121C)
-    ("ETHIOPIC SYLLABLE ME" #x121D)
-    ("ETHIOPIC SYLLABLE MO" #x121E)
-    ("ETHIOPIC SYLLABLE MWA" #x121F)
-    ("ETHIOPIC SYLLABLE SZA" #x1220)
-    ("ETHIOPIC SYLLABLE SZU" #x1221)
-    ("ETHIOPIC SYLLABLE SZI" #x1222)
-    ("ETHIOPIC SYLLABLE SZAA" #x1223)
-    ("ETHIOPIC SYLLABLE SZEE" #x1224)
-    ("ETHIOPIC SYLLABLE SZE" #x1225)
-    ("ETHIOPIC SYLLABLE SZO" #x1226)
-    ("ETHIOPIC SYLLABLE SZWA" #x1227)
-    ("ETHIOPIC SYLLABLE RA" #x1228)
-    ("ETHIOPIC SYLLABLE RU" #x1229)
-    ("ETHIOPIC SYLLABLE RI" #x122A)
-    ("ETHIOPIC SYLLABLE RAA" #x122B)
-    ("ETHIOPIC SYLLABLE REE" #x122C)
-    ("ETHIOPIC SYLLABLE RE" #x122D)
-    ("ETHIOPIC SYLLABLE RO" #x122E)
-    ("ETHIOPIC SYLLABLE RWA" #x122F)
-    ("ETHIOPIC SYLLABLE SA" #x1230)
-    ("ETHIOPIC SYLLABLE SU" #x1231)
-    ("ETHIOPIC SYLLABLE SI" #x1232)
-    ("ETHIOPIC SYLLABLE SAA" #x1233)
-    ("ETHIOPIC SYLLABLE SEE" #x1234)
-    ("ETHIOPIC SYLLABLE SE" #x1235)
-    ("ETHIOPIC SYLLABLE SO" #x1236)
-    ("ETHIOPIC SYLLABLE SWA" #x1237)
-    ("ETHIOPIC SYLLABLE SHA" #x1238)
-    ("ETHIOPIC SYLLABLE SHU" #x1239)
-    ("ETHIOPIC SYLLABLE SHI" #x123A)
-    ("ETHIOPIC SYLLABLE SHAA" #x123B)
-    ("ETHIOPIC SYLLABLE SHEE" #x123C)
-    ("ETHIOPIC SYLLABLE SHE" #x123D)
-    ("ETHIOPIC SYLLABLE SHO" #x123E)
-    ("ETHIOPIC SYLLABLE SHWA" #x123F)
-    ("ETHIOPIC SYLLABLE QA" #x1240)
-    ("ETHIOPIC SYLLABLE QU" #x1241)
-    ("ETHIOPIC SYLLABLE QI" #x1242)
-    ("ETHIOPIC SYLLABLE QAA" #x1243)
-    ("ETHIOPIC SYLLABLE QEE" #x1244)
-    ("ETHIOPIC SYLLABLE QE" #x1245)
-    ("ETHIOPIC SYLLABLE QO" #x1246)
-    ("ETHIOPIC SYLLABLE QWA" #x1248)
-    ("ETHIOPIC SYLLABLE QWI" #x124A)
-    ("ETHIOPIC SYLLABLE QWAA" #x124B)
-    ("ETHIOPIC SYLLABLE QWEE" #x124C)
-    ("ETHIOPIC SYLLABLE QWE" #x124D)
-    ("ETHIOPIC SYLLABLE QHA" #x1250)
-    ("ETHIOPIC SYLLABLE QHU" #x1251)
-    ("ETHIOPIC SYLLABLE QHI" #x1252)
-    ("ETHIOPIC SYLLABLE QHAA" #x1253)
-    ("ETHIOPIC SYLLABLE QHEE" #x1254)
-    ("ETHIOPIC SYLLABLE QHE" #x1255)
-    ("ETHIOPIC SYLLABLE QHO" #x1256)
-    ("ETHIOPIC SYLLABLE QHWA" #x1258)
-    ("ETHIOPIC SYLLABLE QHWI" #x125A)
-    ("ETHIOPIC SYLLABLE QHWAA" #x125B)
-    ("ETHIOPIC SYLLABLE QHWEE" #x125C)
-    ("ETHIOPIC SYLLABLE QHWE" #x125D)
-    ("ETHIOPIC SYLLABLE BA" #x1260)
-    ("ETHIOPIC SYLLABLE BU" #x1261)
-    ("ETHIOPIC SYLLABLE BI" #x1262)
-    ("ETHIOPIC SYLLABLE BAA" #x1263)
-    ("ETHIOPIC SYLLABLE BEE" #x1264)
-    ("ETHIOPIC SYLLABLE BE" #x1265)
-    ("ETHIOPIC SYLLABLE BO" #x1266)
-    ("ETHIOPIC SYLLABLE BWA" #x1267)
-    ("ETHIOPIC SYLLABLE VA" #x1268)
-    ("ETHIOPIC SYLLABLE VU" #x1269)
-    ("ETHIOPIC SYLLABLE VI" #x126A)
-    ("ETHIOPIC SYLLABLE VAA" #x126B)
-    ("ETHIOPIC SYLLABLE VEE" #x126C)
-    ("ETHIOPIC SYLLABLE VE" #x126D)
-    ("ETHIOPIC SYLLABLE VO" #x126E)
-    ("ETHIOPIC SYLLABLE VWA" #x126F)
-    ("ETHIOPIC SYLLABLE TA" #x1270)
-    ("ETHIOPIC SYLLABLE TU" #x1271)
-    ("ETHIOPIC SYLLABLE TI" #x1272)
-    ("ETHIOPIC SYLLABLE TAA" #x1273)
-    ("ETHIOPIC SYLLABLE TEE" #x1274)
-    ("ETHIOPIC SYLLABLE TE" #x1275)
-    ("ETHIOPIC SYLLABLE TO" #x1276)
-    ("ETHIOPIC SYLLABLE TWA" #x1277)
-    ("ETHIOPIC SYLLABLE CA" #x1278)
-    ("ETHIOPIC SYLLABLE CU" #x1279)
-    ("ETHIOPIC SYLLABLE CI" #x127A)
-    ("ETHIOPIC SYLLABLE CAA" #x127B)
-    ("ETHIOPIC SYLLABLE CEE" #x127C)
-    ("ETHIOPIC SYLLABLE CE" #x127D)
-    ("ETHIOPIC SYLLABLE CO" #x127E)
-    ("ETHIOPIC SYLLABLE CWA" #x127F)
-    ("ETHIOPIC SYLLABLE XA" #x1280)
-    ("ETHIOPIC SYLLABLE XU" #x1281)
-    ("ETHIOPIC SYLLABLE XI" #x1282)
-    ("ETHIOPIC SYLLABLE XAA" #x1283)
-    ("ETHIOPIC SYLLABLE XEE" #x1284)
-    ("ETHIOPIC SYLLABLE XE" #x1285)
-    ("ETHIOPIC SYLLABLE XO" #x1286)
-    ("ETHIOPIC SYLLABLE XWA" #x1288)
-    ("ETHIOPIC SYLLABLE XWI" #x128A)
-    ("ETHIOPIC SYLLABLE XWAA" #x128B)
-    ("ETHIOPIC SYLLABLE XWEE" #x128C)
-    ("ETHIOPIC SYLLABLE XWE" #x128D)
-    ("ETHIOPIC SYLLABLE NA" #x1290)
-    ("ETHIOPIC SYLLABLE NU" #x1291)
-    ("ETHIOPIC SYLLABLE NI" #x1292)
-    ("ETHIOPIC SYLLABLE NAA" #x1293)
-    ("ETHIOPIC SYLLABLE NEE" #x1294)
-    ("ETHIOPIC SYLLABLE NE" #x1295)
-    ("ETHIOPIC SYLLABLE NO" #x1296)
-    ("ETHIOPIC SYLLABLE NWA" #x1297)
-    ("ETHIOPIC SYLLABLE NYA" #x1298)
-    ("ETHIOPIC SYLLABLE NYU" #x1299)
-    ("ETHIOPIC SYLLABLE NYI" #x129A)
-    ("ETHIOPIC SYLLABLE NYAA" #x129B)
-    ("ETHIOPIC SYLLABLE NYEE" #x129C)
-    ("ETHIOPIC SYLLABLE NYE" #x129D)
-    ("ETHIOPIC SYLLABLE NYO" #x129E)
-    ("ETHIOPIC SYLLABLE NYWA" #x129F)
-    ("ETHIOPIC SYLLABLE GLOTTAL A" #x12A0)
-    ("ETHIOPIC SYLLABLE GLOTTAL U" #x12A1)
-    ("ETHIOPIC SYLLABLE GLOTTAL I" #x12A2)
-    ("ETHIOPIC SYLLABLE GLOTTAL AA" #x12A3)
-    ("ETHIOPIC SYLLABLE GLOTTAL EE" #x12A4)
-    ("ETHIOPIC SYLLABLE GLOTTAL E" #x12A5)
-    ("ETHIOPIC SYLLABLE GLOTTAL O" #x12A6)
-    ("ETHIOPIC SYLLABLE GLOTTAL WA" #x12A7)
-    ("ETHIOPIC SYLLABLE KA" #x12A8)
-    ("ETHIOPIC SYLLABLE KU" #x12A9)
-    ("ETHIOPIC SYLLABLE KI" #x12AA)
-    ("ETHIOPIC SYLLABLE KAA" #x12AB)
-    ("ETHIOPIC SYLLABLE KEE" #x12AC)
-    ("ETHIOPIC SYLLABLE KE" #x12AD)
-    ("ETHIOPIC SYLLABLE KO" #x12AE)
-    ("ETHIOPIC SYLLABLE KWA" #x12B0)
-    ("ETHIOPIC SYLLABLE KWI" #x12B2)
-    ("ETHIOPIC SYLLABLE KWAA" #x12B3)
-    ("ETHIOPIC SYLLABLE KWEE" #x12B4)
-    ("ETHIOPIC SYLLABLE KWE" #x12B5)
-    ("ETHIOPIC SYLLABLE KXA" #x12B8)
-    ("ETHIOPIC SYLLABLE KXU" #x12B9)
-    ("ETHIOPIC SYLLABLE KXI" #x12BA)
-    ("ETHIOPIC SYLLABLE KXAA" #x12BB)
-    ("ETHIOPIC SYLLABLE KXEE" #x12BC)
-    ("ETHIOPIC SYLLABLE KXE" #x12BD)
-    ("ETHIOPIC SYLLABLE KXO" #x12BE)
-    ("ETHIOPIC SYLLABLE KXWA" #x12C0)
-    ("ETHIOPIC SYLLABLE KXWI" #x12C2)
-    ("ETHIOPIC SYLLABLE KXWAA" #x12C3)
-    ("ETHIOPIC SYLLABLE KXWEE" #x12C4)
-    ("ETHIOPIC SYLLABLE KXWE" #x12C5)
-    ("ETHIOPIC SYLLABLE WA" #x12C8)
-    ("ETHIOPIC SYLLABLE WU" #x12C9)
-    ("ETHIOPIC SYLLABLE WI" #x12CA)
-    ("ETHIOPIC SYLLABLE WAA" #x12CB)
-    ("ETHIOPIC SYLLABLE WEE" #x12CC)
-    ("ETHIOPIC SYLLABLE WE" #x12CD)
-    ("ETHIOPIC SYLLABLE WO" #x12CE)
-    ("ETHIOPIC SYLLABLE PHARYNGEAL A" #x12D0)
-    ("ETHIOPIC SYLLABLE PHARYNGEAL U" #x12D1)
-    ("ETHIOPIC SYLLABLE PHARYNGEAL I" #x12D2)
-    ("ETHIOPIC SYLLABLE PHARYNGEAL AA" #x12D3)
-    ("ETHIOPIC SYLLABLE PHARYNGEAL EE" #x12D4)
-    ("ETHIOPIC SYLLABLE PHARYNGEAL E" #x12D5)
-    ("ETHIOPIC SYLLABLE PHARYNGEAL O" #x12D6)
-    ("ETHIOPIC SYLLABLE ZA" #x12D8)
-    ("ETHIOPIC SYLLABLE ZU" #x12D9)
-    ("ETHIOPIC SYLLABLE ZI" #x12DA)
-    ("ETHIOPIC SYLLABLE ZAA" #x12DB)
-    ("ETHIOPIC SYLLABLE ZEE" #x12DC)
-    ("ETHIOPIC SYLLABLE ZE" #x12DD)
-    ("ETHIOPIC SYLLABLE ZO" #x12DE)
-    ("ETHIOPIC SYLLABLE ZWA" #x12DF)
-    ("ETHIOPIC SYLLABLE ZHA" #x12E0)
-    ("ETHIOPIC SYLLABLE ZHU" #x12E1)
-    ("ETHIOPIC SYLLABLE ZHI" #x12E2)
-    ("ETHIOPIC SYLLABLE ZHAA" #x12E3)
-    ("ETHIOPIC SYLLABLE ZHEE" #x12E4)
-    ("ETHIOPIC SYLLABLE ZHE" #x12E5)
-    ("ETHIOPIC SYLLABLE ZHO" #x12E6)
-    ("ETHIOPIC SYLLABLE ZHWA" #x12E7)
-    ("ETHIOPIC SYLLABLE YA" #x12E8)
-    ("ETHIOPIC SYLLABLE YU" #x12E9)
-    ("ETHIOPIC SYLLABLE YI" #x12EA)
-    ("ETHIOPIC SYLLABLE YAA" #x12EB)
-    ("ETHIOPIC SYLLABLE YEE" #x12EC)
-    ("ETHIOPIC SYLLABLE YE" #x12ED)
-    ("ETHIOPIC SYLLABLE YO" #x12EE)
-    ("ETHIOPIC SYLLABLE DA" #x12F0)
-    ("ETHIOPIC SYLLABLE DU" #x12F1)
-    ("ETHIOPIC SYLLABLE DI" #x12F2)
-    ("ETHIOPIC SYLLABLE DAA" #x12F3)
-    ("ETHIOPIC SYLLABLE DEE" #x12F4)
-    ("ETHIOPIC SYLLABLE DE" #x12F5)
-    ("ETHIOPIC SYLLABLE DO" #x12F6)
-    ("ETHIOPIC SYLLABLE DWA" #x12F7)
-    ("ETHIOPIC SYLLABLE DDA" #x12F8)
-    ("ETHIOPIC SYLLABLE DDU" #x12F9)
-    ("ETHIOPIC SYLLABLE DDI" #x12FA)
-    ("ETHIOPIC SYLLABLE DDAA" #x12FB)
-    ("ETHIOPIC SYLLABLE DDEE" #x12FC)
-    ("ETHIOPIC SYLLABLE DDE" #x12FD)
-    ("ETHIOPIC SYLLABLE DDO" #x12FE)
-    ("ETHIOPIC SYLLABLE DDWA" #x12FF)
-    ("ETHIOPIC SYLLABLE JA" #x1300)
-    ("ETHIOPIC SYLLABLE JU" #x1301)
-    ("ETHIOPIC SYLLABLE JI" #x1302)
-    ("ETHIOPIC SYLLABLE JAA" #x1303)
-    ("ETHIOPIC SYLLABLE JEE" #x1304)
-    ("ETHIOPIC SYLLABLE JE" #x1305)
-    ("ETHIOPIC SYLLABLE JO" #x1306)
-    ("ETHIOPIC SYLLABLE JWA" #x1307)
-    ("ETHIOPIC SYLLABLE GA" #x1308)
-    ("ETHIOPIC SYLLABLE GU" #x1309)
-    ("ETHIOPIC SYLLABLE GI" #x130A)
-    ("ETHIOPIC SYLLABLE GAA" #x130B)
-    ("ETHIOPIC SYLLABLE GEE" #x130C)
-    ("ETHIOPIC SYLLABLE GE" #x130D)
-    ("ETHIOPIC SYLLABLE GO" #x130E)
-    ("ETHIOPIC SYLLABLE GWA" #x1310)
-    ("ETHIOPIC SYLLABLE GWI" #x1312)
-    ("ETHIOPIC SYLLABLE GWAA" #x1313)
-    ("ETHIOPIC SYLLABLE GWEE" #x1314)
-    ("ETHIOPIC SYLLABLE GWE" #x1315)
-    ("ETHIOPIC SYLLABLE GGA" #x1318)
-    ("ETHIOPIC SYLLABLE GGU" #x1319)
-    ("ETHIOPIC SYLLABLE GGI" #x131A)
-    ("ETHIOPIC SYLLABLE GGAA" #x131B)
-    ("ETHIOPIC SYLLABLE GGEE" #x131C)
-    ("ETHIOPIC SYLLABLE GGE" #x131D)
-    ("ETHIOPIC SYLLABLE GGO" #x131E)
-    ("ETHIOPIC SYLLABLE THA" #x1320)
-    ("ETHIOPIC SYLLABLE THU" #x1321)
-    ("ETHIOPIC SYLLABLE THI" #x1322)
-    ("ETHIOPIC SYLLABLE THAA" #x1323)
-    ("ETHIOPIC SYLLABLE THEE" #x1324)
-    ("ETHIOPIC SYLLABLE THE" #x1325)
-    ("ETHIOPIC SYLLABLE THO" #x1326)
-    ("ETHIOPIC SYLLABLE THWA" #x1327)
-    ("ETHIOPIC SYLLABLE CHA" #x1328)
-    ("ETHIOPIC SYLLABLE CHU" #x1329)
-    ("ETHIOPIC SYLLABLE CHI" #x132A)
-    ("ETHIOPIC SYLLABLE CHAA" #x132B)
-    ("ETHIOPIC SYLLABLE CHEE" #x132C)
-    ("ETHIOPIC SYLLABLE CHE" #x132D)
-    ("ETHIOPIC SYLLABLE CHO" #x132E)
-    ("ETHIOPIC SYLLABLE CHWA" #x132F)
-    ("ETHIOPIC SYLLABLE PHA" #x1330)
-    ("ETHIOPIC SYLLABLE PHU" #x1331)
-    ("ETHIOPIC SYLLABLE PHI" #x1332)
-    ("ETHIOPIC SYLLABLE PHAA" #x1333)
-    ("ETHIOPIC SYLLABLE PHEE" #x1334)
-    ("ETHIOPIC SYLLABLE PHE" #x1335)
-    ("ETHIOPIC SYLLABLE PHO" #x1336)
-    ("ETHIOPIC SYLLABLE PHWA" #x1337)
-    ("ETHIOPIC SYLLABLE TSA" #x1338)
-    ("ETHIOPIC SYLLABLE TSU" #x1339)
-    ("ETHIOPIC SYLLABLE TSI" #x133A)
-    ("ETHIOPIC SYLLABLE TSAA" #x133B)
-    ("ETHIOPIC SYLLABLE TSEE" #x133C)
-    ("ETHIOPIC SYLLABLE TSE" #x133D)
-    ("ETHIOPIC SYLLABLE TSO" #x133E)
-    ("ETHIOPIC SYLLABLE TSWA" #x133F)
-    ("ETHIOPIC SYLLABLE TZA" #x1340)
-    ("ETHIOPIC SYLLABLE TZU" #x1341)
-    ("ETHIOPIC SYLLABLE TZI" #x1342)
-    ("ETHIOPIC SYLLABLE TZAA" #x1343)
-    ("ETHIOPIC SYLLABLE TZEE" #x1344)
-    ("ETHIOPIC SYLLABLE TZE" #x1345)
-    ("ETHIOPIC SYLLABLE TZO" #x1346)
-    ("ETHIOPIC SYLLABLE FA" #x1348)
-    ("ETHIOPIC SYLLABLE FU" #x1349)
-    ("ETHIOPIC SYLLABLE FI" #x134A)
-    ("ETHIOPIC SYLLABLE FAA" #x134B)
-    ("ETHIOPIC SYLLABLE FEE" #x134C)
-    ("ETHIOPIC SYLLABLE FE" #x134D)
-    ("ETHIOPIC SYLLABLE FO" #x134E)
-    ("ETHIOPIC SYLLABLE FWA" #x134F)
-    ("ETHIOPIC SYLLABLE PA" #x1350)
-    ("ETHIOPIC SYLLABLE PU" #x1351)
-    ("ETHIOPIC SYLLABLE PI" #x1352)
-    ("ETHIOPIC SYLLABLE PAA" #x1353)
-    ("ETHIOPIC SYLLABLE PEE" #x1354)
-    ("ETHIOPIC SYLLABLE PE" #x1355)
-    ("ETHIOPIC SYLLABLE PO" #x1356)
-    ("ETHIOPIC SYLLABLE PWA" #x1357)
-    ("ETHIOPIC SYLLABLE RYA" #x1358)
-    ("ETHIOPIC SYLLABLE MYA" #x1359)
-    ("ETHIOPIC SYLLABLE FYA" #x135A)
-    ("ETHIOPIC WORDSPACE" #x1361)
-    ("ETHIOPIC FULL STOP" #x1362)
-    ("ETHIOPIC COMMA" #x1363)
-    ("ETHIOPIC SEMICOLON" #x1364)
-    ("ETHIOPIC COLON" #x1365)
-    ("ETHIOPIC PREFACE COLON" #x1366)
-    ("ETHIOPIC QUESTION MARK" #x1367)
-    ("ETHIOPIC PARAGRAPH SEPARATOR" #x1368)
-    ("ETHIOPIC DIGIT ONE" #x1369)
-    ("ETHIOPIC DIGIT TWO" #x136A)
-    ("ETHIOPIC DIGIT THREE" #x136B)
-    ("ETHIOPIC DIGIT FOUR" #x136C)
-    ("ETHIOPIC DIGIT FIVE" #x136D)
-    ("ETHIOPIC DIGIT SIX" #x136E)
-    ("ETHIOPIC DIGIT SEVEN" #x136F)
-    ("ETHIOPIC DIGIT EIGHT" #x1370)
-    ("ETHIOPIC DIGIT NINE" #x1371)
-    ("ETHIOPIC NUMBER TEN" #x1372)
-    ("ETHIOPIC NUMBER TWENTY" #x1373)
-    ("ETHIOPIC NUMBER THIRTY" #x1374)
-    ("ETHIOPIC NUMBER FORTY" #x1375)
-    ("ETHIOPIC NUMBER FIFTY" #x1376)
-    ("ETHIOPIC NUMBER SIXTY" #x1377)
-    ("ETHIOPIC NUMBER SEVENTY" #x1378)
-    ("ETHIOPIC NUMBER EIGHTY" #x1379)
-    ("ETHIOPIC NUMBER NINETY" #x137A)
-    ("ETHIOPIC NUMBER HUNDRED" #x137B)
-    ("ETHIOPIC NUMBER TEN THOUSAND" #x137C)
-    ))
-
diff --git a/etc/nxml/013A0-013FF.el b/etc/nxml/013A0-013FF.el
deleted file mode 100644 (file)
index 392b4f2..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-(nxml-define-char-name-set 'cherokee
-  '(("CHEROKEE LETTER A" #x13A0)
-    ("CHEROKEE LETTER E" #x13A1)
-    ("CHEROKEE LETTER I" #x13A2)
-    ("CHEROKEE LETTER O" #x13A3)
-    ("CHEROKEE LETTER U" #x13A4)
-    ("CHEROKEE LETTER V" #x13A5)
-    ("CHEROKEE LETTER GA" #x13A6)
-    ("CHEROKEE LETTER KA" #x13A7)
-    ("CHEROKEE LETTER GE" #x13A8)
-    ("CHEROKEE LETTER GI" #x13A9)
-    ("CHEROKEE LETTER GO" #x13AA)
-    ("CHEROKEE LETTER GU" #x13AB)
-    ("CHEROKEE LETTER GV" #x13AC)
-    ("CHEROKEE LETTER HA" #x13AD)
-    ("CHEROKEE LETTER HE" #x13AE)
-    ("CHEROKEE LETTER HI" #x13AF)
-    ("CHEROKEE LETTER HO" #x13B0)
-    ("CHEROKEE LETTER HU" #x13B1)
-    ("CHEROKEE LETTER HV" #x13B2)
-    ("CHEROKEE LETTER LA" #x13B3)
-    ("CHEROKEE LETTER LE" #x13B4)
-    ("CHEROKEE LETTER LI" #x13B5)
-    ("CHEROKEE LETTER LO" #x13B6)
-    ("CHEROKEE LETTER LU" #x13B7)
-    ("CHEROKEE LETTER LV" #x13B8)
-    ("CHEROKEE LETTER MA" #x13B9)
-    ("CHEROKEE LETTER ME" #x13BA)
-    ("CHEROKEE LETTER MI" #x13BB)
-    ("CHEROKEE LETTER MO" #x13BC)
-    ("CHEROKEE LETTER MU" #x13BD)
-    ("CHEROKEE LETTER NA" #x13BE)
-    ("CHEROKEE LETTER HNA" #x13BF)
-    ("CHEROKEE LETTER NAH" #x13C0)
-    ("CHEROKEE LETTER NE" #x13C1)
-    ("CHEROKEE LETTER NI" #x13C2)
-    ("CHEROKEE LETTER NO" #x13C3)
-    ("CHEROKEE LETTER NU" #x13C4)
-    ("CHEROKEE LETTER NV" #x13C5)
-    ("CHEROKEE LETTER QUA" #x13C6)
-    ("CHEROKEE LETTER QUE" #x13C7)
-    ("CHEROKEE LETTER QUI" #x13C8)
-    ("CHEROKEE LETTER QUO" #x13C9)
-    ("CHEROKEE LETTER QUU" #x13CA)
-    ("CHEROKEE LETTER QUV" #x13CB)
-    ("CHEROKEE LETTER SA" #x13CC)
-    ("CHEROKEE LETTER S" #x13CD)
-    ("CHEROKEE LETTER SE" #x13CE)
-    ("CHEROKEE LETTER SI" #x13CF)
-    ("CHEROKEE LETTER SO" #x13D0)
-    ("CHEROKEE LETTER SU" #x13D1)
-    ("CHEROKEE LETTER SV" #x13D2)
-    ("CHEROKEE LETTER DA" #x13D3)
-    ("CHEROKEE LETTER TA" #x13D4)
-    ("CHEROKEE LETTER DE" #x13D5)
-    ("CHEROKEE LETTER TE" #x13D6)
-    ("CHEROKEE LETTER DI" #x13D7)
-    ("CHEROKEE LETTER TI" #x13D8)
-    ("CHEROKEE LETTER DO" #x13D9)
-    ("CHEROKEE LETTER DU" #x13DA)
-    ("CHEROKEE LETTER DV" #x13DB)
-    ("CHEROKEE LETTER DLA" #x13DC)
-    ("CHEROKEE LETTER TLA" #x13DD)
-    ("CHEROKEE LETTER TLE" #x13DE)
-    ("CHEROKEE LETTER TLI" #x13DF)
-    ("CHEROKEE LETTER TLO" #x13E0)
-    ("CHEROKEE LETTER TLU" #x13E1)
-    ("CHEROKEE LETTER TLV" #x13E2)
-    ("CHEROKEE LETTER TSA" #x13E3)
-    ("CHEROKEE LETTER TSE" #x13E4)
-    ("CHEROKEE LETTER TSI" #x13E5)
-    ("CHEROKEE LETTER TSO" #x13E6)
-    ("CHEROKEE LETTER TSU" #x13E7)
-    ("CHEROKEE LETTER TSV" #x13E8)
-    ("CHEROKEE LETTER WA" #x13E9)
-    ("CHEROKEE LETTER WE" #x13EA)
-    ("CHEROKEE LETTER WI" #x13EB)
-    ("CHEROKEE LETTER WO" #x13EC)
-    ("CHEROKEE LETTER WU" #x13ED)
-    ("CHEROKEE LETTER WV" #x13EE)
-    ("CHEROKEE LETTER YA" #x13EF)
-    ("CHEROKEE LETTER YE" #x13F0)
-    ("CHEROKEE LETTER YI" #x13F1)
-    ("CHEROKEE LETTER YO" #x13F2)
-    ("CHEROKEE LETTER YU" #x13F3)
-    ("CHEROKEE LETTER YV" #x13F4)
-    ))
-
diff --git a/etc/nxml/01400-0167F.el b/etc/nxml/01400-0167F.el
deleted file mode 100644 (file)
index 996d5b4..0000000
+++ /dev/null
@@ -1,633 +0,0 @@
-(nxml-define-char-name-set 'unified-canadian-aboriginal-syllabics
-  '(("CANADIAN SYLLABICS E" #x1401)
-    ("CANADIAN SYLLABICS AAI" #x1402)
-    ("CANADIAN SYLLABICS I" #x1403)
-    ("CANADIAN SYLLABICS II" #x1404)
-    ("CANADIAN SYLLABICS O" #x1405)
-    ("CANADIAN SYLLABICS OO" #x1406)
-    ("CANADIAN SYLLABICS Y-CREE OO" #x1407)
-    ("CANADIAN SYLLABICS CARRIER EE" #x1408)
-    ("CANADIAN SYLLABICS CARRIER I" #x1409)
-    ("CANADIAN SYLLABICS A" #x140A)
-    ("CANADIAN SYLLABICS AA" #x140B)
-    ("CANADIAN SYLLABICS WE" #x140C)
-    ("CANADIAN SYLLABICS WEST-CREE WE" #x140D)
-    ("CANADIAN SYLLABICS WI" #x140E)
-    ("CANADIAN SYLLABICS WEST-CREE WI" #x140F)
-    ("CANADIAN SYLLABICS WII" #x1410)
-    ("CANADIAN SYLLABICS WEST-CREE WII" #x1411)
-    ("CANADIAN SYLLABICS WO" #x1412)
-    ("CANADIAN SYLLABICS WEST-CREE WO" #x1413)
-    ("CANADIAN SYLLABICS WOO" #x1414)
-    ("CANADIAN SYLLABICS WEST-CREE WOO" #x1415)
-    ("CANADIAN SYLLABICS NASKAPI WOO" #x1416)
-    ("CANADIAN SYLLABICS WA" #x1417)
-    ("CANADIAN SYLLABICS WEST-CREE WA" #x1418)
-    ("CANADIAN SYLLABICS WAA" #x1419)
-    ("CANADIAN SYLLABICS WEST-CREE WAA" #x141A)
-    ("CANADIAN SYLLABICS NASKAPI WAA" #x141B)
-    ("CANADIAN SYLLABICS AI" #x141C)
-    ("CANADIAN SYLLABICS Y-CREE W" #x141D)
-    ("CANADIAN SYLLABICS GLOTTAL STOP" #x141E)
-    ("CANADIAN SYLLABICS FINAL ACUTE" #x141F)
-    ("CANADIAN SYLLABICS FINAL GRAVE" #x1420)
-    ("CANADIAN SYLLABICS FINAL BOTTOM HALF RING" #x1421)
-    ("CANADIAN SYLLABICS FINAL TOP HALF RING" #x1422)
-    ("CANADIAN SYLLABICS FINAL RIGHT HALF RING" #x1423)
-    ("CANADIAN SYLLABICS FINAL RING" #x1424)
-    ("CANADIAN SYLLABICS FINAL DOUBLE ACUTE" #x1425)
-    ("CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES" #x1426)
-    ("CANADIAN SYLLABICS FINAL MIDDLE DOT" #x1427)
-    ("CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE" #x1428)
-    ("CANADIAN SYLLABICS FINAL PLUS" #x1429)
-    ("CANADIAN SYLLABICS FINAL DOWN TACK" #x142A)
-    ("CANADIAN SYLLABICS EN" #x142B)
-    ("CANADIAN SYLLABICS IN" #x142C)
-    ("CANADIAN SYLLABICS ON" #x142D)
-    ("CANADIAN SYLLABICS AN" #x142E)
-    ("CANADIAN SYLLABICS PE" #x142F)
-    ("CANADIAN SYLLABICS PAAI" #x1430)
-    ("CANADIAN SYLLABICS PI" #x1431)
-    ("CANADIAN SYLLABICS PII" #x1432)
-    ("CANADIAN SYLLABICS PO" #x1433)
-    ("CANADIAN SYLLABICS POO" #x1434)
-    ("CANADIAN SYLLABICS Y-CREE POO" #x1435)
-    ("CANADIAN SYLLABICS CARRIER HEE" #x1436)
-    ("CANADIAN SYLLABICS CARRIER HI" #x1437)
-    ("CANADIAN SYLLABICS PA" #x1438)
-    ("CANADIAN SYLLABICS PAA" #x1439)
-    ("CANADIAN SYLLABICS PWE" #x143A)
-    ("CANADIAN SYLLABICS WEST-CREE PWE" #x143B)
-    ("CANADIAN SYLLABICS PWI" #x143C)
-    ("CANADIAN SYLLABICS WEST-CREE PWI" #x143D)
-    ("CANADIAN SYLLABICS PWII" #x143E)
-    ("CANADIAN SYLLABICS WEST-CREE PWII" #x143F)
-    ("CANADIAN SYLLABICS PWO" #x1440)
-    ("CANADIAN SYLLABICS WEST-CREE PWO" #x1441)
-    ("CANADIAN SYLLABICS PWOO" #x1442)
-    ("CANADIAN SYLLABICS WEST-CREE PWOO" #x1443)
-    ("CANADIAN SYLLABICS PWA" #x1444)
-    ("CANADIAN SYLLABICS WEST-CREE PWA" #x1445)
-    ("CANADIAN SYLLABICS PWAA" #x1446)
-    ("CANADIAN SYLLABICS WEST-CREE PWAA" #x1447)
-    ("CANADIAN SYLLABICS Y-CREE PWAA" #x1448)
-    ("CANADIAN SYLLABICS P" #x1449)
-    ("CANADIAN SYLLABICS WEST-CREE P" #x144A)
-    ("CANADIAN SYLLABICS CARRIER H" #x144B)
-    ("CANADIAN SYLLABICS TE" #x144C)
-    ("CANADIAN SYLLABICS TAAI" #x144D)
-    ("CANADIAN SYLLABICS TI" #x144E)
-    ("CANADIAN SYLLABICS TII" #x144F)
-    ("CANADIAN SYLLABICS TO" #x1450)
-    ("CANADIAN SYLLABICS TOO" #x1451)
-    ("CANADIAN SYLLABICS Y-CREE TOO" #x1452)
-    ("CANADIAN SYLLABICS CARRIER DEE" #x1453)
-    ("CANADIAN SYLLABICS CARRIER DI" #x1454)
-    ("CANADIAN SYLLABICS TA" #x1455)
-    ("CANADIAN SYLLABICS TAA" #x1456)
-    ("CANADIAN SYLLABICS TWE" #x1457)
-    ("CANADIAN SYLLABICS WEST-CREE TWE" #x1458)
-    ("CANADIAN SYLLABICS TWI" #x1459)
-    ("CANADIAN SYLLABICS WEST-CREE TWI" #x145A)
-    ("CANADIAN SYLLABICS TWII" #x145B)
-    ("CANADIAN SYLLABICS WEST-CREE TWII" #x145C)
-    ("CANADIAN SYLLABICS TWO" #x145D)
-    ("CANADIAN SYLLABICS WEST-CREE TWO" #x145E)
-    ("CANADIAN SYLLABICS TWOO" #x145F)
-    ("CANADIAN SYLLABICS WEST-CREE TWOO" #x1460)
-    ("CANADIAN SYLLABICS TWA" #x1461)
-    ("CANADIAN SYLLABICS WEST-CREE TWA" #x1462)
-    ("CANADIAN SYLLABICS TWAA" #x1463)
-    ("CANADIAN SYLLABICS WEST-CREE TWAA" #x1464)
-    ("CANADIAN SYLLABICS NASKAPI TWAA" #x1465)
-    ("CANADIAN SYLLABICS T" #x1466)
-    ("CANADIAN SYLLABICS TTE" #x1467)
-    ("CANADIAN SYLLABICS TTI" #x1468)
-    ("CANADIAN SYLLABICS TTO" #x1469)
-    ("CANADIAN SYLLABICS TTA" #x146A)
-    ("CANADIAN SYLLABICS KE" #x146B)
-    ("CANADIAN SYLLABICS KAAI" #x146C)
-    ("CANADIAN SYLLABICS KI" #x146D)
-    ("CANADIAN SYLLABICS KII" #x146E)
-    ("CANADIAN SYLLABICS KO" #x146F)
-    ("CANADIAN SYLLABICS KOO" #x1470)
-    ("CANADIAN SYLLABICS Y-CREE KOO" #x1471)
-    ("CANADIAN SYLLABICS KA" #x1472)
-    ("CANADIAN SYLLABICS KAA" #x1473)
-    ("CANADIAN SYLLABICS KWE" #x1474)
-    ("CANADIAN SYLLABICS WEST-CREE KWE" #x1475)
-    ("CANADIAN SYLLABICS KWI" #x1476)
-    ("CANADIAN SYLLABICS WEST-CREE KWI" #x1477)
-    ("CANADIAN SYLLABICS KWII" #x1478)
-    ("CANADIAN SYLLABICS WEST-CREE KWII" #x1479)
-    ("CANADIAN SYLLABICS KWO" #x147A)
-    ("CANADIAN SYLLABICS WEST-CREE KWO" #x147B)
-    ("CANADIAN SYLLABICS KWOO" #x147C)
-    ("CANADIAN SYLLABICS WEST-CREE KWOO" #x147D)
-    ("CANADIAN SYLLABICS KWA" #x147E)
-    ("CANADIAN SYLLABICS WEST-CREE KWA" #x147F)
-    ("CANADIAN SYLLABICS KWAA" #x1480)
-    ("CANADIAN SYLLABICS WEST-CREE KWAA" #x1481)
-    ("CANADIAN SYLLABICS NASKAPI KWAA" #x1482)
-    ("CANADIAN SYLLABICS K" #x1483)
-    ("CANADIAN SYLLABICS KW" #x1484)
-    ("CANADIAN SYLLABICS SOUTH-SLAVEY KEH" #x1485)
-    ("CANADIAN SYLLABICS SOUTH-SLAVEY KIH" #x1486)
-    ("CANADIAN SYLLABICS SOUTH-SLAVEY KOH" #x1487)
-    ("CANADIAN SYLLABICS SOUTH-SLAVEY KAH" #x1488)
-    ("CANADIAN SYLLABICS CE" #x1489)
-    ("CANADIAN SYLLABICS CAAI" #x148A)
-    ("CANADIAN SYLLABICS CI" #x148B)
-    ("CANADIAN SYLLABICS CII" #x148C)
-    ("CANADIAN SYLLABICS CO" #x148D)
-    ("CANADIAN SYLLABICS COO" #x148E)
-    ("CANADIAN SYLLABICS Y-CREE COO" #x148F)
-    ("CANADIAN SYLLABICS CA" #x1490)
-    ("CANADIAN SYLLABICS CAA" #x1491)
-    ("CANADIAN SYLLABICS CWE" #x1492)
-    ("CANADIAN SYLLABICS WEST-CREE CWE" #x1493)
-    ("CANADIAN SYLLABICS CWI" #x1494)
-    ("CANADIAN SYLLABICS WEST-CREE CWI" #x1495)
-    ("CANADIAN SYLLABICS CWII" #x1496)
-    ("CANADIAN SYLLABICS WEST-CREE CWII" #x1497)
-    ("CANADIAN SYLLABICS CWO" #x1498)
-    ("CANADIAN SYLLABICS WEST-CREE CWO" #x1499)
-    ("CANADIAN SYLLABICS CWOO" #x149A)
-    ("CANADIAN SYLLABICS WEST-CREE CWOO" #x149B)
-    ("CANADIAN SYLLABICS CWA" #x149C)
-    ("CANADIAN SYLLABICS WEST-CREE CWA" #x149D)
-    ("CANADIAN SYLLABICS CWAA" #x149E)
-    ("CANADIAN SYLLABICS WEST-CREE CWAA" #x149F)
-    ("CANADIAN SYLLABICS NASKAPI CWAA" #x14A0)
-    ("CANADIAN SYLLABICS C" #x14A1)
-    ("CANADIAN SYLLABICS SAYISI TH" #x14A2)
-    ("CANADIAN SYLLABICS ME" #x14A3)
-    ("CANADIAN SYLLABICS MAAI" #x14A4)
-    ("CANADIAN SYLLABICS MI" #x14A5)
-    ("CANADIAN SYLLABICS MII" #x14A6)
-    ("CANADIAN SYLLABICS MO" #x14A7)
-    ("CANADIAN SYLLABICS MOO" #x14A8)
-    ("CANADIAN SYLLABICS Y-CREE MOO" #x14A9)
-    ("CANADIAN SYLLABICS MA" #x14AA)
-    ("CANADIAN SYLLABICS MAA" #x14AB)
-    ("CANADIAN SYLLABICS MWE" #x14AC)
-    ("CANADIAN SYLLABICS WEST-CREE MWE" #x14AD)
-    ("CANADIAN SYLLABICS MWI" #x14AE)
-    ("CANADIAN SYLLABICS WEST-CREE MWI" #x14AF)
-    ("CANADIAN SYLLABICS MWII" #x14B0)
-    ("CANADIAN SYLLABICS WEST-CREE MWII" #x14B1)
-    ("CANADIAN SYLLABICS MWO" #x14B2)
-    ("CANADIAN SYLLABICS WEST-CREE MWO" #x14B3)
-    ("CANADIAN SYLLABICS MWOO" #x14B4)
-    ("CANADIAN SYLLABICS WEST-CREE MWOO" #x14B5)
-    ("CANADIAN SYLLABICS MWA" #x14B6)
-    ("CANADIAN SYLLABICS WEST-CREE MWA" #x14B7)
-    ("CANADIAN SYLLABICS MWAA" #x14B8)
-    ("CANADIAN SYLLABICS WEST-CREE MWAA" #x14B9)
-    ("CANADIAN SYLLABICS NASKAPI MWAA" #x14BA)
-    ("CANADIAN SYLLABICS M" #x14BB)
-    ("CANADIAN SYLLABICS WEST-CREE M" #x14BC)
-    ("CANADIAN SYLLABICS MH" #x14BD)
-    ("CANADIAN SYLLABICS ATHAPASCAN M" #x14BE)
-    ("CANADIAN SYLLABICS SAYISI M" #x14BF)
-    ("CANADIAN SYLLABICS NE" #x14C0)
-    ("CANADIAN SYLLABICS NAAI" #x14C1)
-    ("CANADIAN SYLLABICS NI" #x14C2)
-    ("CANADIAN SYLLABICS NII" #x14C3)
-    ("CANADIAN SYLLABICS NO" #x14C4)
-    ("CANADIAN SYLLABICS NOO" #x14C5)
-    ("CANADIAN SYLLABICS Y-CREE NOO" #x14C6)
-    ("CANADIAN SYLLABICS NA" #x14C7)
-    ("CANADIAN SYLLABICS NAA" #x14C8)
-    ("CANADIAN SYLLABICS NWE" #x14C9)
-    ("CANADIAN SYLLABICS WEST-CREE NWE" #x14CA)
-    ("CANADIAN SYLLABICS NWA" #x14CB)
-    ("CANADIAN SYLLABICS WEST-CREE NWA" #x14CC)
-    ("CANADIAN SYLLABICS NWAA" #x14CD)
-    ("CANADIAN SYLLABICS WEST-CREE NWAA" #x14CE)
-    ("CANADIAN SYLLABICS NASKAPI NWAA" #x14CF)
-    ("CANADIAN SYLLABICS N" #x14D0)
-    ("CANADIAN SYLLABICS CARRIER NG" #x14D1)
-    ("CANADIAN SYLLABICS NH" #x14D2)
-    ("CANADIAN SYLLABICS LE" #x14D3)
-    ("CANADIAN SYLLABICS LAAI" #x14D4)
-    ("CANADIAN SYLLABICS LI" #x14D5)
-    ("CANADIAN SYLLABICS LII" #x14D6)
-    ("CANADIAN SYLLABICS LO" #x14D7)
-    ("CANADIAN SYLLABICS LOO" #x14D8)
-    ("CANADIAN SYLLABICS Y-CREE LOO" #x14D9)
-    ("CANADIAN SYLLABICS LA" #x14DA)
-    ("CANADIAN SYLLABICS LAA" #x14DB)
-    ("CANADIAN SYLLABICS LWE" #x14DC)
-    ("CANADIAN SYLLABICS WEST-CREE LWE" #x14DD)
-    ("CANADIAN SYLLABICS LWI" #x14DE)
-    ("CANADIAN SYLLABICS WEST-CREE LWI" #x14DF)
-    ("CANADIAN SYLLABICS LWII" #x14E0)
-    ("CANADIAN SYLLABICS WEST-CREE LWII" #x14E1)
-    ("CANADIAN SYLLABICS LWO" #x14E2)
-    ("CANADIAN SYLLABICS WEST-CREE LWO" #x14E3)
-    ("CANADIAN SYLLABICS LWOO" #x14E4)
-    ("CANADIAN SYLLABICS WEST-CREE LWOO" #x14E5)
-    ("CANADIAN SYLLABICS LWA" #x14E6)
-    ("CANADIAN SYLLABICS WEST-CREE LWA" #x14E7)
-    ("CANADIAN SYLLABICS LWAA" #x14E8)
-    ("CANADIAN SYLLABICS WEST-CREE LWAA" #x14E9)
-    ("CANADIAN SYLLABICS L" #x14EA)
-    ("CANADIAN SYLLABICS WEST-CREE L" #x14EB)
-    ("CANADIAN SYLLABICS MEDIAL L" #x14EC)
-    ("CANADIAN SYLLABICS SE" #x14ED)
-    ("CANADIAN SYLLABICS SAAI" #x14EE)
-    ("CANADIAN SYLLABICS SI" #x14EF)
-    ("CANADIAN SYLLABICS SII" #x14F0)
-    ("CANADIAN SYLLABICS SO" #x14F1)
-    ("CANADIAN SYLLABICS SOO" #x14F2)
-    ("CANADIAN SYLLABICS Y-CREE SOO" #x14F3)
-    ("CANADIAN SYLLABICS SA" #x14F4)
-    ("CANADIAN SYLLABICS SAA" #x14F5)
-    ("CANADIAN SYLLABICS SWE" #x14F6)
-    ("CANADIAN SYLLABICS WEST-CREE SWE" #x14F7)
-    ("CANADIAN SYLLABICS SWI" #x14F8)
-    ("CANADIAN SYLLABICS WEST-CREE SWI" #x14F9)
-    ("CANADIAN SYLLABICS SWII" #x14FA)
-    ("CANADIAN SYLLABICS WEST-CREE SWII" #x14FB)
-    ("CANADIAN SYLLABICS SWO" #x14FC)
-    ("CANADIAN SYLLABICS WEST-CREE SWO" #x14FD)
-    ("CANADIAN SYLLABICS SWOO" #x14FE)
-    ("CANADIAN SYLLABICS WEST-CREE SWOO" #x14FF)
-    ("CANADIAN SYLLABICS SWA" #x1500)
-    ("CANADIAN SYLLABICS WEST-CREE SWA" #x1501)
-    ("CANADIAN SYLLABICS SWAA" #x1502)
-    ("CANADIAN SYLLABICS WEST-CREE SWAA" #x1503)
-    ("CANADIAN SYLLABICS NASKAPI SWAA" #x1504)
-    ("CANADIAN SYLLABICS S" #x1505)
-    ("CANADIAN SYLLABICS ATHAPASCAN S" #x1506)
-    ("CANADIAN SYLLABICS SW" #x1507)
-    ("CANADIAN SYLLABICS BLACKFOOT S" #x1508)
-    ("CANADIAN SYLLABICS MOOSE-CREE SK" #x1509)
-    ("CANADIAN SYLLABICS NASKAPI SKW" #x150A)
-    ("CANADIAN SYLLABICS NASKAPI S-W" #x150B)
-    ("CANADIAN SYLLABICS NASKAPI SPWA" #x150C)
-    ("CANADIAN SYLLABICS NASKAPI STWA" #x150D)
-    ("CANADIAN SYLLABICS NASKAPI SKWA" #x150E)
-    ("CANADIAN SYLLABICS NASKAPI SCWA" #x150F)
-    ("CANADIAN SYLLABICS SHE" #x1510)
-    ("CANADIAN SYLLABICS SHI" #x1511)
-    ("CANADIAN SYLLABICS SHII" #x1512)
-    ("CANADIAN SYLLABICS SHO" #x1513)
-    ("CANADIAN SYLLABICS SHOO" #x1514)
-    ("CANADIAN SYLLABICS SHA" #x1515)
-    ("CANADIAN SYLLABICS SHAA" #x1516)
-    ("CANADIAN SYLLABICS SHWE" #x1517)
-    ("CANADIAN SYLLABICS WEST-CREE SHWE" #x1518)
-    ("CANADIAN SYLLABICS SHWI" #x1519)
-    ("CANADIAN SYLLABICS WEST-CREE SHWI" #x151A)
-    ("CANADIAN SYLLABICS SHWII" #x151B)
-    ("CANADIAN SYLLABICS WEST-CREE SHWII" #x151C)
-    ("CANADIAN SYLLABICS SHWO" #x151D)
-    ("CANADIAN SYLLABICS WEST-CREE SHWO" #x151E)
-    ("CANADIAN SYLLABICS SHWOO" #x151F)
-    ("CANADIAN SYLLABICS WEST-CREE SHWOO" #x1520)
-    ("CANADIAN SYLLABICS SHWA" #x1521)
-    ("CANADIAN SYLLABICS WEST-CREE SHWA" #x1522)
-    ("CANADIAN SYLLABICS SHWAA" #x1523)
-    ("CANADIAN SYLLABICS WEST-CREE SHWAA" #x1524)
-    ("CANADIAN SYLLABICS SH" #x1525)
-    ("CANADIAN SYLLABICS YE" #x1526)
-    ("CANADIAN SYLLABICS YAAI" #x1527)
-    ("CANADIAN SYLLABICS YI" #x1528)
-    ("CANADIAN SYLLABICS YII" #x1529)
-    ("CANADIAN SYLLABICS YO" #x152A)
-    ("CANADIAN SYLLABICS YOO" #x152B)
-    ("CANADIAN SYLLABICS Y-CREE YOO" #x152C)
-    ("CANADIAN SYLLABICS YA" #x152D)
-    ("CANADIAN SYLLABICS YAA" #x152E)
-    ("CANADIAN SYLLABICS YWE" #x152F)
-    ("CANADIAN SYLLABICS WEST-CREE YWE" #x1530)
-    ("CANADIAN SYLLABICS YWI" #x1531)
-    ("CANADIAN SYLLABICS WEST-CREE YWI" #x1532)
-    ("CANADIAN SYLLABICS YWII" #x1533)
-    ("CANADIAN SYLLABICS WEST-CREE YWII" #x1534)
-    ("CANADIAN SYLLABICS YWO" #x1535)
-    ("CANADIAN SYLLABICS WEST-CREE YWO" #x1536)
-    ("CANADIAN SYLLABICS YWOO" #x1537)
-    ("CANADIAN SYLLABICS WEST-CREE YWOO" #x1538)
-    ("CANADIAN SYLLABICS YWA" #x1539)
-    ("CANADIAN SYLLABICS WEST-CREE YWA" #x153A)
-    ("CANADIAN SYLLABICS YWAA" #x153B)
-    ("CANADIAN SYLLABICS WEST-CREE YWAA" #x153C)
-    ("CANADIAN SYLLABICS NASKAPI YWAA" #x153D)
-    ("CANADIAN SYLLABICS Y" #x153E)
-    ("CANADIAN SYLLABICS BIBLE-CREE Y" #x153F)
-    ("CANADIAN SYLLABICS WEST-CREE Y" #x1540)
-    ("CANADIAN SYLLABICS SAYISI YI" #x1541)
-    ("CANADIAN SYLLABICS RE" #x1542)
-    ("CANADIAN SYLLABICS R-CREE RE" #x1543)
-    ("CANADIAN SYLLABICS WEST-CREE LE" #x1544)
-    ("CANADIAN SYLLABICS RAAI" #x1545)
-    ("CANADIAN SYLLABICS RI" #x1546)
-    ("CANADIAN SYLLABICS RII" #x1547)
-    ("CANADIAN SYLLABICS RO" #x1548)
-    ("CANADIAN SYLLABICS ROO" #x1549)
-    ("CANADIAN SYLLABICS WEST-CREE LO" #x154A)
-    ("CANADIAN SYLLABICS RA" #x154B)
-    ("CANADIAN SYLLABICS RAA" #x154C)
-    ("CANADIAN SYLLABICS WEST-CREE LA" #x154D)
-    ("CANADIAN SYLLABICS RWAA" #x154E)
-    ("CANADIAN SYLLABICS WEST-CREE RWAA" #x154F)
-    ("CANADIAN SYLLABICS R" #x1550)
-    ("CANADIAN SYLLABICS WEST-CREE R" #x1551)
-    ("CANADIAN SYLLABICS MEDIAL R" #x1552)
-    ("CANADIAN SYLLABICS FE" #x1553)
-    ("CANADIAN SYLLABICS FAAI" #x1554)
-    ("CANADIAN SYLLABICS FI" #x1555)
-    ("CANADIAN SYLLABICS FII" #x1556)
-    ("CANADIAN SYLLABICS FO" #x1557)
-    ("CANADIAN SYLLABICS FOO" #x1558)
-    ("CANADIAN SYLLABICS FA" #x1559)
-    ("CANADIAN SYLLABICS FAA" #x155A)
-    ("CANADIAN SYLLABICS FWAA" #x155B)
-    ("CANADIAN SYLLABICS WEST-CREE FWAA" #x155C)
-    ("CANADIAN SYLLABICS F" #x155D)
-    ("CANADIAN SYLLABICS THE" #x155E)
-    ("CANADIAN SYLLABICS N-CREE THE" #x155F)
-    ("CANADIAN SYLLABICS THI" #x1560)
-    ("CANADIAN SYLLABICS N-CREE THI" #x1561)
-    ("CANADIAN SYLLABICS THII" #x1562)
-    ("CANADIAN SYLLABICS N-CREE THII" #x1563)
-    ("CANADIAN SYLLABICS THO" #x1564)
-    ("CANADIAN SYLLABICS THOO" #x1565)
-    ("CANADIAN SYLLABICS THA" #x1566)
-    ("CANADIAN SYLLABICS THAA" #x1567)
-    ("CANADIAN SYLLABICS THWAA" #x1568)
-    ("CANADIAN SYLLABICS WEST-CREE THWAA" #x1569)
-    ("CANADIAN SYLLABICS TH" #x156A)
-    ("CANADIAN SYLLABICS TTHE" #x156B)
-    ("CANADIAN SYLLABICS TTHI" #x156C)
-    ("CANADIAN SYLLABICS TTHO" #x156D)
-    ("CANADIAN SYLLABICS TTHA" #x156E)
-    ("CANADIAN SYLLABICS TTH" #x156F)
-    ("CANADIAN SYLLABICS TYE" #x1570)
-    ("CANADIAN SYLLABICS TYI" #x1571)
-    ("CANADIAN SYLLABICS TYO" #x1572)
-    ("CANADIAN SYLLABICS TYA" #x1573)
-    ("CANADIAN SYLLABICS NUNAVIK HE" #x1574)
-    ("CANADIAN SYLLABICS NUNAVIK HI" #x1575)
-    ("CANADIAN SYLLABICS NUNAVIK HII" #x1576)
-    ("CANADIAN SYLLABICS NUNAVIK HO" #x1577)
-    ("CANADIAN SYLLABICS NUNAVIK HOO" #x1578)
-    ("CANADIAN SYLLABICS NUNAVIK HA" #x1579)
-    ("CANADIAN SYLLABICS NUNAVIK HAA" #x157A)
-    ("CANADIAN SYLLABICS NUNAVIK H" #x157B)
-    ("CANADIAN SYLLABICS NUNAVUT H" #x157C)
-    ("CANADIAN SYLLABICS HK" #x157D)
-    ("CANADIAN SYLLABICS QAAI" #x157E)
-    ("CANADIAN SYLLABICS QI" #x157F)
-    ("CANADIAN SYLLABICS QII" #x1580)
-    ("CANADIAN SYLLABICS QO" #x1581)
-    ("CANADIAN SYLLABICS QOO" #x1582)
-    ("CANADIAN SYLLABICS QA" #x1583)
-    ("CANADIAN SYLLABICS QAA" #x1584)
-    ("CANADIAN SYLLABICS Q" #x1585)
-    ("CANADIAN SYLLABICS TLHE" #x1586)
-    ("CANADIAN SYLLABICS TLHI" #x1587)
-    ("CANADIAN SYLLABICS TLHO" #x1588)
-    ("CANADIAN SYLLABICS TLHA" #x1589)
-    ("CANADIAN SYLLABICS WEST-CREE RE" #x158A)
-    ("CANADIAN SYLLABICS WEST-CREE RI" #x158B)
-    ("CANADIAN SYLLABICS WEST-CREE RO" #x158C)
-    ("CANADIAN SYLLABICS WEST-CREE RA" #x158D)
-    ("CANADIAN SYLLABICS NGAAI" #x158E)
-    ("CANADIAN SYLLABICS NGI" #x158F)
-    ("CANADIAN SYLLABICS NGII" #x1590)
-    ("CANADIAN SYLLABICS NGO" #x1591)
-    ("CANADIAN SYLLABICS NGOO" #x1592)
-    ("CANADIAN SYLLABICS NGA" #x1593)
-    ("CANADIAN SYLLABICS NGAA" #x1594)
-    ("CANADIAN SYLLABICS NG" #x1595)
-    ("CANADIAN SYLLABICS NNG" #x1596)
-    ("CANADIAN SYLLABICS SAYISI SHE" #x1597)
-    ("CANADIAN SYLLABICS SAYISI SHI" #x1598)
-    ("CANADIAN SYLLABICS SAYISI SHO" #x1599)
-    ("CANADIAN SYLLABICS SAYISI SHA" #x159A)
-    ("CANADIAN SYLLABICS WOODS-CREE THE" #x159B)
-    ("CANADIAN SYLLABICS WOODS-CREE THI" #x159C)
-    ("CANADIAN SYLLABICS WOODS-CREE THO" #x159D)
-    ("CANADIAN SYLLABICS WOODS-CREE THA" #x159E)
-    ("CANADIAN SYLLABICS WOODS-CREE TH" #x159F)
-    ("CANADIAN SYLLABICS LHI" #x15A0)
-    ("CANADIAN SYLLABICS LHII" #x15A1)
-    ("CANADIAN SYLLABICS LHO" #x15A2)
-    ("CANADIAN SYLLABICS LHOO" #x15A3)
-    ("CANADIAN SYLLABICS LHA" #x15A4)
-    ("CANADIAN SYLLABICS LHAA" #x15A5)
-    ("CANADIAN SYLLABICS LH" #x15A6)
-    ("CANADIAN SYLLABICS TH-CREE THE" #x15A7)
-    ("CANADIAN SYLLABICS TH-CREE THI" #x15A8)
-    ("CANADIAN SYLLABICS TH-CREE THII" #x15A9)
-    ("CANADIAN SYLLABICS TH-CREE THO" #x15AA)
-    ("CANADIAN SYLLABICS TH-CREE THOO" #x15AB)
-    ("CANADIAN SYLLABICS TH-CREE THA" #x15AC)
-    ("CANADIAN SYLLABICS TH-CREE THAA" #x15AD)
-    ("CANADIAN SYLLABICS TH-CREE TH" #x15AE)
-    ("CANADIAN SYLLABICS AIVILIK B" #x15AF)
-    ("CANADIAN SYLLABICS BLACKFOOT E" #x15B0)
-    ("CANADIAN SYLLABICS BLACKFOOT I" #x15B1)
-    ("CANADIAN SYLLABICS BLACKFOOT O" #x15B2)
-    ("CANADIAN SYLLABICS BLACKFOOT A" #x15B3)
-    ("CANADIAN SYLLABICS BLACKFOOT WE" #x15B4)
-    ("CANADIAN SYLLABICS BLACKFOOT WI" #x15B5)
-    ("CANADIAN SYLLABICS BLACKFOOT WO" #x15B6)
-    ("CANADIAN SYLLABICS BLACKFOOT WA" #x15B7)
-    ("CANADIAN SYLLABICS BLACKFOOT NE" #x15B8)
-    ("CANADIAN SYLLABICS BLACKFOOT NI" #x15B9)
-    ("CANADIAN SYLLABICS BLACKFOOT NO" #x15BA)
-    ("CANADIAN SYLLABICS BLACKFOOT NA" #x15BB)
-    ("CANADIAN SYLLABICS BLACKFOOT KE" #x15BC)
-    ("CANADIAN SYLLABICS BLACKFOOT KI" #x15BD)
-    ("CANADIAN SYLLABICS BLACKFOOT KO" #x15BE)
-    ("CANADIAN SYLLABICS BLACKFOOT KA" #x15BF)
-    ("CANADIAN SYLLABICS SAYISI HE" #x15C0)
-    ("CANADIAN SYLLABICS SAYISI HI" #x15C1)
-    ("CANADIAN SYLLABICS SAYISI HO" #x15C2)
-    ("CANADIAN SYLLABICS SAYISI HA" #x15C3)
-    ("CANADIAN SYLLABICS CARRIER GHU" #x15C4)
-    ("CANADIAN SYLLABICS CARRIER GHO" #x15C5)
-    ("CANADIAN SYLLABICS CARRIER GHE" #x15C6)
-    ("CANADIAN SYLLABICS CARRIER GHEE" #x15C7)
-    ("CANADIAN SYLLABICS CARRIER GHI" #x15C8)
-    ("CANADIAN SYLLABICS CARRIER GHA" #x15C9)
-    ("CANADIAN SYLLABICS CARRIER RU" #x15CA)
-    ("CANADIAN SYLLABICS CARRIER RO" #x15CB)
-    ("CANADIAN SYLLABICS CARRIER RE" #x15CC)
-    ("CANADIAN SYLLABICS CARRIER REE" #x15CD)
-    ("CANADIAN SYLLABICS CARRIER RI" #x15CE)
-    ("CANADIAN SYLLABICS CARRIER RA" #x15CF)
-    ("CANADIAN SYLLABICS CARRIER WU" #x15D0)
-    ("CANADIAN SYLLABICS CARRIER WO" #x15D1)
-    ("CANADIAN SYLLABICS CARRIER WE" #x15D2)
-    ("CANADIAN SYLLABICS CARRIER WEE" #x15D3)
-    ("CANADIAN SYLLABICS CARRIER WI" #x15D4)
-    ("CANADIAN SYLLABICS CARRIER WA" #x15D5)
-    ("CANADIAN SYLLABICS CARRIER HWU" #x15D6)
-    ("CANADIAN SYLLABICS CARRIER HWO" #x15D7)
-    ("CANADIAN SYLLABICS CARRIER HWE" #x15D8)
-    ("CANADIAN SYLLABICS CARRIER HWEE" #x15D9)
-    ("CANADIAN SYLLABICS CARRIER HWI" #x15DA)
-    ("CANADIAN SYLLABICS CARRIER HWA" #x15DB)
-    ("CANADIAN SYLLABICS CARRIER THU" #x15DC)
-    ("CANADIAN SYLLABICS CARRIER THO" #x15DD)
-    ("CANADIAN SYLLABICS CARRIER THE" #x15DE)
-    ("CANADIAN SYLLABICS CARRIER THEE" #x15DF)
-    ("CANADIAN SYLLABICS CARRIER THI" #x15E0)
-    ("CANADIAN SYLLABICS CARRIER THA" #x15E1)
-    ("CANADIAN SYLLABICS CARRIER TTU" #x15E2)
-    ("CANADIAN SYLLABICS CARRIER TTO" #x15E3)
-    ("CANADIAN SYLLABICS CARRIER TTE" #x15E4)
-    ("CANADIAN SYLLABICS CARRIER TTEE" #x15E5)
-    ("CANADIAN SYLLABICS CARRIER TTI" #x15E6)
-    ("CANADIAN SYLLABICS CARRIER TTA" #x15E7)
-    ("CANADIAN SYLLABICS CARRIER PU" #x15E8)
-    ("CANADIAN SYLLABICS CARRIER PO" #x15E9)
-    ("CANADIAN SYLLABICS CARRIER PE" #x15EA)
-    ("CANADIAN SYLLABICS CARRIER PEE" #x15EB)
-    ("CANADIAN SYLLABICS CARRIER PI" #x15EC)
-    ("CANADIAN SYLLABICS CARRIER PA" #x15ED)
-    ("CANADIAN SYLLABICS CARRIER P" #x15EE)
-    ("CANADIAN SYLLABICS CARRIER GU" #x15EF)
-    ("CANADIAN SYLLABICS CARRIER GO" #x15F0)
-    ("CANADIAN SYLLABICS CARRIER GE" #x15F1)
-    ("CANADIAN SYLLABICS CARRIER GEE" #x15F2)
-    ("CANADIAN SYLLABICS CARRIER GI" #x15F3)
-    ("CANADIAN SYLLABICS CARRIER GA" #x15F4)
-    ("CANADIAN SYLLABICS CARRIER KHU" #x15F5)
-    ("CANADIAN SYLLABICS CARRIER KHO" #x15F6)
-    ("CANADIAN SYLLABICS CARRIER KHE" #x15F7)
-    ("CANADIAN SYLLABICS CARRIER KHEE" #x15F8)
-    ("CANADIAN SYLLABICS CARRIER KHI" #x15F9)
-    ("CANADIAN SYLLABICS CARRIER KHA" #x15FA)
-    ("CANADIAN SYLLABICS CARRIER KKU" #x15FB)
-    ("CANADIAN SYLLABICS CARRIER KKO" #x15FC)
-    ("CANADIAN SYLLABICS CARRIER KKE" #x15FD)
-    ("CANADIAN SYLLABICS CARRIER KKEE" #x15FE)
-    ("CANADIAN SYLLABICS CARRIER KKI" #x15FF)
-    ("CANADIAN SYLLABICS CARRIER KKA" #x1600)
-    ("CANADIAN SYLLABICS CARRIER KK" #x1601)
-    ("CANADIAN SYLLABICS CARRIER NU" #x1602)
-    ("CANADIAN SYLLABICS CARRIER NO" #x1603)
-    ("CANADIAN SYLLABICS CARRIER NE" #x1604)
-    ("CANADIAN SYLLABICS CARRIER NEE" #x1605)
-    ("CANADIAN SYLLABICS CARRIER NI" #x1606)
-    ("CANADIAN SYLLABICS CARRIER NA" #x1607)
-    ("CANADIAN SYLLABICS CARRIER MU" #x1608)
-    ("CANADIAN SYLLABICS CARRIER MO" #x1609)
-    ("CANADIAN SYLLABICS CARRIER ME" #x160A)
-    ("CANADIAN SYLLABICS CARRIER MEE" #x160B)
-    ("CANADIAN SYLLABICS CARRIER MI" #x160C)
-    ("CANADIAN SYLLABICS CARRIER MA" #x160D)
-    ("CANADIAN SYLLABICS CARRIER YU" #x160E)
-    ("CANADIAN SYLLABICS CARRIER YO" #x160F)
-    ("CANADIAN SYLLABICS CARRIER YE" #x1610)
-    ("CANADIAN SYLLABICS CARRIER YEE" #x1611)
-    ("CANADIAN SYLLABICS CARRIER YI" #x1612)
-    ("CANADIAN SYLLABICS CARRIER YA" #x1613)
-    ("CANADIAN SYLLABICS CARRIER JU" #x1614)
-    ("CANADIAN SYLLABICS SAYISI JU" #x1615)
-    ("CANADIAN SYLLABICS CARRIER JO" #x1616)
-    ("CANADIAN SYLLABICS CARRIER JE" #x1617)
-    ("CANADIAN SYLLABICS CARRIER JEE" #x1618)
-    ("CANADIAN SYLLABICS CARRIER JI" #x1619)
-    ("CANADIAN SYLLABICS SAYISI JI" #x161A)
-    ("CANADIAN SYLLABICS CARRIER JA" #x161B)
-    ("CANADIAN SYLLABICS CARRIER JJU" #x161C)
-    ("CANADIAN SYLLABICS CARRIER JJO" #x161D)
-    ("CANADIAN SYLLABICS CARRIER JJE" #x161E)
-    ("CANADIAN SYLLABICS CARRIER JJEE" #x161F)
-    ("CANADIAN SYLLABICS CARRIER JJI" #x1620)
-    ("CANADIAN SYLLABICS CARRIER JJA" #x1621)
-    ("CANADIAN SYLLABICS CARRIER LU" #x1622)
-    ("CANADIAN SYLLABICS CARRIER LO" #x1623)
-    ("CANADIAN SYLLABICS CARRIER LE" #x1624)
-    ("CANADIAN SYLLABICS CARRIER LEE" #x1625)
-    ("CANADIAN SYLLABICS CARRIER LI" #x1626)
-    ("CANADIAN SYLLABICS CARRIER LA" #x1627)
-    ("CANADIAN SYLLABICS CARRIER DLU" #x1628)
-    ("CANADIAN SYLLABICS CARRIER DLO" #x1629)
-    ("CANADIAN SYLLABICS CARRIER DLE" #x162A)
-    ("CANADIAN SYLLABICS CARRIER DLEE" #x162B)
-    ("CANADIAN SYLLABICS CARRIER DLI" #x162C)
-    ("CANADIAN SYLLABICS CARRIER DLA" #x162D)
-    ("CANADIAN SYLLABICS CARRIER LHU" #x162E)
-    ("CANADIAN SYLLABICS CARRIER LHO" #x162F)
-    ("CANADIAN SYLLABICS CARRIER LHE" #x1630)
-    ("CANADIAN SYLLABICS CARRIER LHEE" #x1631)
-    ("CANADIAN SYLLABICS CARRIER LHI" #x1632)
-    ("CANADIAN SYLLABICS CARRIER LHA" #x1633)
-    ("CANADIAN SYLLABICS CARRIER TLHU" #x1634)
-    ("CANADIAN SYLLABICS CARRIER TLHO" #x1635)
-    ("CANADIAN SYLLABICS CARRIER TLHE" #x1636)
-    ("CANADIAN SYLLABICS CARRIER TLHEE" #x1637)
-    ("CANADIAN SYLLABICS CARRIER TLHI" #x1638)
-    ("CANADIAN SYLLABICS CARRIER TLHA" #x1639)
-    ("CANADIAN SYLLABICS CARRIER TLU" #x163A)
-    ("CANADIAN SYLLABICS CARRIER TLO" #x163B)
-    ("CANADIAN SYLLABICS CARRIER TLE" #x163C)
-    ("CANADIAN SYLLABICS CARRIER TLEE" #x163D)
-    ("CANADIAN SYLLABICS CARRIER TLI" #x163E)
-    ("CANADIAN SYLLABICS CARRIER TLA" #x163F)
-    ("CANADIAN SYLLABICS CARRIER ZU" #x1640)
-    ("CANADIAN SYLLABICS CARRIER ZO" #x1641)
-    ("CANADIAN SYLLABICS CARRIER ZE" #x1642)
-    ("CANADIAN SYLLABICS CARRIER ZEE" #x1643)
-    ("CANADIAN SYLLABICS CARRIER ZI" #x1644)
-    ("CANADIAN SYLLABICS CARRIER ZA" #x1645)
-    ("CANADIAN SYLLABICS CARRIER Z" #x1646)
-    ("CANADIAN SYLLABICS CARRIER INITIAL Z" #x1647)
-    ("CANADIAN SYLLABICS CARRIER DZU" #x1648)
-    ("CANADIAN SYLLABICS CARRIER DZO" #x1649)
-    ("CANADIAN SYLLABICS CARRIER DZE" #x164A)
-    ("CANADIAN SYLLABICS CARRIER DZEE" #x164B)
-    ("CANADIAN SYLLABICS CARRIER DZI" #x164C)
-    ("CANADIAN SYLLABICS CARRIER DZA" #x164D)
-    ("CANADIAN SYLLABICS CARRIER SU" #x164E)
-    ("CANADIAN SYLLABICS CARRIER SO" #x164F)
-    ("CANADIAN SYLLABICS CARRIER SE" #x1650)
-    ("CANADIAN SYLLABICS CARRIER SEE" #x1651)
-    ("CANADIAN SYLLABICS CARRIER SI" #x1652)
-    ("CANADIAN SYLLABICS CARRIER SA" #x1653)
-    ("CANADIAN SYLLABICS CARRIER SHU" #x1654)
-    ("CANADIAN SYLLABICS CARRIER SHO" #x1655)
-    ("CANADIAN SYLLABICS CARRIER SHE" #x1656)
-    ("CANADIAN SYLLABICS CARRIER SHEE" #x1657)
-    ("CANADIAN SYLLABICS CARRIER SHI" #x1658)
-    ("CANADIAN SYLLABICS CARRIER SHA" #x1659)
-    ("CANADIAN SYLLABICS CARRIER SH" #x165A)
-    ("CANADIAN SYLLABICS CARRIER TSU" #x165B)
-    ("CANADIAN SYLLABICS CARRIER TSO" #x165C)
-    ("CANADIAN SYLLABICS CARRIER TSE" #x165D)
-    ("CANADIAN SYLLABICS CARRIER TSEE" #x165E)
-    ("CANADIAN SYLLABICS CARRIER TSI" #x165F)
-    ("CANADIAN SYLLABICS CARRIER TSA" #x1660)
-    ("CANADIAN SYLLABICS CARRIER CHU" #x1661)
-    ("CANADIAN SYLLABICS CARRIER CHO" #x1662)
-    ("CANADIAN SYLLABICS CARRIER CHE" #x1663)
-    ("CANADIAN SYLLABICS CARRIER CHEE" #x1664)
-    ("CANADIAN SYLLABICS CARRIER CHI" #x1665)
-    ("CANADIAN SYLLABICS CARRIER CHA" #x1666)
-    ("CANADIAN SYLLABICS CARRIER TTSU" #x1667)
-    ("CANADIAN SYLLABICS CARRIER TTSO" #x1668)
-    ("CANADIAN SYLLABICS CARRIER TTSE" #x1669)
-    ("CANADIAN SYLLABICS CARRIER TTSEE" #x166A)
-    ("CANADIAN SYLLABICS CARRIER TTSI" #x166B)
-    ("CANADIAN SYLLABICS CARRIER TTSA" #x166C)
-    ("CANADIAN SYLLABICS CHI SIGN" #x166D)
-    ("CANADIAN SYLLABICS FULL STOP" #x166E)
-    ("CANADIAN SYLLABICS QAI" #x166F)
-    ("CANADIAN SYLLABICS NGAI" #x1670)
-    ("CANADIAN SYLLABICS NNGI" #x1671)
-    ("CANADIAN SYLLABICS NNGII" #x1672)
-    ("CANADIAN SYLLABICS NNGO" #x1673)
-    ("CANADIAN SYLLABICS NNGOO" #x1674)
-    ("CANADIAN SYLLABICS NNGA" #x1675)
-    ("CANADIAN SYLLABICS NNGAA" #x1676)
-    ))
-
diff --git a/etc/nxml/01680-0169F.el b/etc/nxml/01680-0169F.el
deleted file mode 100644 (file)
index ef59332..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-(nxml-define-char-name-set 'ogham
-  '(("OGHAM SPACE MARK" #x1680)
-    ("OGHAM LETTER BEITH" #x1681)
-    ("OGHAM LETTER LUIS" #x1682)
-    ("OGHAM LETTER FEARN" #x1683)
-    ("OGHAM LETTER SAIL" #x1684)
-    ("OGHAM LETTER NION" #x1685)
-    ("OGHAM LETTER UATH" #x1686)
-    ("OGHAM LETTER DAIR" #x1687)
-    ("OGHAM LETTER TINNE" #x1688)
-    ("OGHAM LETTER COLL" #x1689)
-    ("OGHAM LETTER CEIRT" #x168A)
-    ("OGHAM LETTER MUIN" #x168B)
-    ("OGHAM LETTER GORT" #x168C)
-    ("OGHAM LETTER NGEADAL" #x168D)
-    ("OGHAM LETTER STRAIF" #x168E)
-    ("OGHAM LETTER RUIS" #x168F)
-    ("OGHAM LETTER AILM" #x1690)
-    ("OGHAM LETTER ONN" #x1691)
-    ("OGHAM LETTER UR" #x1692)
-    ("OGHAM LETTER EADHADH" #x1693)
-    ("OGHAM LETTER IODHADH" #x1694)
-    ("OGHAM LETTER EABHADH" #x1695)
-    ("OGHAM LETTER OR" #x1696)
-    ("OGHAM LETTER UILLEANN" #x1697)
-    ("OGHAM LETTER IFIN" #x1698)
-    ("OGHAM LETTER EAMHANCHOLL" #x1699)
-    ("OGHAM LETTER PEITH" #x169A)
-    ("OGHAM FEATHER MARK" #x169B)
-    ("OGHAM REVERSED FEATHER MARK" #x169C)
-    ))
-
diff --git a/etc/nxml/016A0-016FF.el b/etc/nxml/016A0-016FF.el
deleted file mode 100644 (file)
index b194a0c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-(nxml-define-char-name-set 'runic
-  '(("RUNIC LETTER FEHU FEOH FE F" #x16A0)
-    ("RUNIC LETTER V" #x16A1)
-    ("RUNIC LETTER URUZ UR U" #x16A2)
-    ("RUNIC LETTER YR" #x16A3)
-    ("RUNIC LETTER Y" #x16A4)
-    ("RUNIC LETTER W" #x16A5)
-    ("RUNIC LETTER THURISAZ THURS THORN" #x16A6)
-    ("RUNIC LETTER ETH" #x16A7)
-    ("RUNIC LETTER ANSUZ A" #x16A8)
-    ("RUNIC LETTER OS O" #x16A9)
-    ("RUNIC LETTER AC A" #x16AA)
-    ("RUNIC LETTER AESC" #x16AB)
-    ("RUNIC LETTER LONG-BRANCH-OSS O" #x16AC)
-    ("RUNIC LETTER SHORT-TWIG-OSS O" #x16AD)
-    ("RUNIC LETTER O" #x16AE)
-    ("RUNIC LETTER OE" #x16AF)
-    ("RUNIC LETTER ON" #x16B0)
-    ("RUNIC LETTER RAIDO RAD REID R" #x16B1)
-    ("RUNIC LETTER KAUNA" #x16B2)
-    ("RUNIC LETTER CEN" #x16B3)
-    ("RUNIC LETTER KAUN K" #x16B4)
-    ("RUNIC LETTER G" #x16B5)
-    ("RUNIC LETTER ENG" #x16B6)
-    ("RUNIC LETTER GEBO GYFU G" #x16B7)
-    ("RUNIC LETTER GAR" #x16B8)
-    ("RUNIC LETTER WUNJO WYNN W" #x16B9)
-    ("RUNIC LETTER HAGLAZ H" #x16BA)
-    ("RUNIC LETTER HAEGL H" #x16BB)
-    ("RUNIC LETTER LONG-BRANCH-HAGALL H" #x16BC)
-    ("RUNIC LETTER SHORT-TWIG-HAGALL H" #x16BD)
-    ("RUNIC LETTER NAUDIZ NYD NAUD N" #x16BE)
-    ("RUNIC LETTER SHORT-TWIG-NAUD N" #x16BF)
-    ("RUNIC LETTER DOTTED-N" #x16C0)
-    ("RUNIC LETTER ISAZ IS ISS I" #x16C1)
-    ("RUNIC LETTER E" #x16C2)
-    ("RUNIC LETTER JERAN J" #x16C3)
-    ("RUNIC LETTER GER" #x16C4)
-    ("RUNIC LETTER LONG-BRANCH-AR AE" #x16C5)
-    ("RUNIC LETTER SHORT-TWIG-AR A" #x16C6)
-    ("RUNIC LETTER IWAZ EOH" #x16C7)
-    ("RUNIC LETTER PERTHO PEORTH P" #x16C8)
-    ("RUNIC LETTER ALGIZ EOLHX" #x16C9)
-    ("RUNIC LETTER SOWILO S" #x16CA)
-    ("RUNIC LETTER SIGEL LONG-BRANCH-SOL S" #x16CB)
-    ("RUNIC LETTER SHORT-TWIG-SOL S" #x16CC)
-    ("RUNIC LETTER C" #x16CD)
-    ("RUNIC LETTER Z" #x16CE)
-    ("RUNIC LETTER TIWAZ TIR TYR T" #x16CF)
-    ("RUNIC LETTER SHORT-TWIG-TYR T" #x16D0)
-    ("RUNIC LETTER D" #x16D1)
-    ("RUNIC LETTER BERKANAN BEORC BJARKAN B" #x16D2)
-    ("RUNIC LETTER SHORT-TWIG-BJARKAN B" #x16D3)
-    ("RUNIC LETTER DOTTED-P" #x16D4)
-    ("RUNIC LETTER OPEN-P" #x16D5)
-    ("RUNIC LETTER EHWAZ EH E" #x16D6)
-    ("RUNIC LETTER MANNAZ MAN M" #x16D7)
-    ("RUNIC LETTER LONG-BRANCH-MADR M" #x16D8)
-    ("RUNIC LETTER SHORT-TWIG-MADR M" #x16D9)
-    ("RUNIC LETTER LAUKAZ LAGU LOGR L" #x16DA)
-    ("RUNIC LETTER DOTTED-L" #x16DB)
-    ("RUNIC LETTER INGWAZ" #x16DC)
-    ("RUNIC LETTER ING" #x16DD)
-    ("RUNIC LETTER DAGAZ DAEG D" #x16DE)
-    ("RUNIC LETTER OTHALAN ETHEL O" #x16DF)
-    ("RUNIC LETTER EAR" #x16E0)
-    ("RUNIC LETTER IOR" #x16E1)
-    ("RUNIC LETTER CWEORTH" #x16E2)
-    ("RUNIC LETTER CALC" #x16E3)
-    ("RUNIC LETTER CEALC" #x16E4)
-    ("RUNIC LETTER STAN" #x16E5)
-    ("RUNIC LETTER LONG-BRANCH-YR" #x16E6)
-    ("RUNIC LETTER SHORT-TWIG-YR" #x16E7)
-    ("RUNIC LETTER ICELANDIC-YR" #x16E8)
-    ("RUNIC LETTER Q" #x16E9)
-    ("RUNIC LETTER X" #x16EA)
-    ("RUNIC SINGLE PUNCTUATION" #x16EB)
-    ("RUNIC MULTIPLE PUNCTUATION" #x16EC)
-    ("RUNIC CROSS PUNCTUATION" #x16ED)
-    ("RUNIC ARLAUG SYMBOL" #x16EE)
-    ("RUNIC TVIMADUR SYMBOL" #x16EF)
-    ("RUNIC BELGTHOR SYMBOL" #x16F0)
-    ))
-
diff --git a/etc/nxml/01700-0171F.el b/etc/nxml/01700-0171F.el
deleted file mode 100644 (file)
index 2b1238c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(nxml-define-char-name-set 'tagalog
-  '(("TAGALOG LETTER A" #x1700)
-    ("TAGALOG LETTER I" #x1701)
-    ("TAGALOG LETTER U" #x1702)
-    ("TAGALOG LETTER KA" #x1703)
-    ("TAGALOG LETTER GA" #x1704)
-    ("TAGALOG LETTER NGA" #x1705)
-    ("TAGALOG LETTER TA" #x1706)
-    ("TAGALOG LETTER DA" #x1707)
-    ("TAGALOG LETTER NA" #x1708)
-    ("TAGALOG LETTER PA" #x1709)
-    ("TAGALOG LETTER BA" #x170A)
-    ("TAGALOG LETTER MA" #x170B)
-    ("TAGALOG LETTER YA" #x170C)
-    ("TAGALOG LETTER LA" #x170E)
-    ("TAGALOG LETTER WA" #x170F)
-    ("TAGALOG LETTER SA" #x1710)
-    ("TAGALOG LETTER HA" #x1711)
-    ("TAGALOG VOWEL SIGN I" #x1712)
-    ("TAGALOG VOWEL SIGN U" #x1713)
-    ("TAGALOG SIGN VIRAMA" #x1714)
-    ))
-
diff --git a/etc/nxml/01720-0173F.el b/etc/nxml/01720-0173F.el
deleted file mode 100644 (file)
index 7fb9c22..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-(nxml-define-char-name-set 'hanunoo
-  '(("HANUNOO LETTER A" #x1720)
-    ("HANUNOO LETTER I" #x1721)
-    ("HANUNOO LETTER U" #x1722)
-    ("HANUNOO LETTER KA" #x1723)
-    ("HANUNOO LETTER GA" #x1724)
-    ("HANUNOO LETTER NGA" #x1725)
-    ("HANUNOO LETTER TA" #x1726)
-    ("HANUNOO LETTER DA" #x1727)
-    ("HANUNOO LETTER NA" #x1728)
-    ("HANUNOO LETTER PA" #x1729)
-    ("HANUNOO LETTER BA" #x172A)
-    ("HANUNOO LETTER MA" #x172B)
-    ("HANUNOO LETTER YA" #x172C)
-    ("HANUNOO LETTER RA" #x172D)
-    ("HANUNOO LETTER LA" #x172E)
-    ("HANUNOO LETTER WA" #x172F)
-    ("HANUNOO LETTER SA" #x1730)
-    ("HANUNOO LETTER HA" #x1731)
-    ("HANUNOO VOWEL SIGN I" #x1732)
-    ("HANUNOO VOWEL SIGN U" #x1733)
-    ("HANUNOO SIGN PAMUDPOD" #x1734)
-    ("PHILIPPINE SINGLE PUNCTUATION" #x1735)
-    ("PHILIPPINE DOUBLE PUNCTUATION" #x1736)
-    ))
-
diff --git a/etc/nxml/01740-0175F.el b/etc/nxml/01740-0175F.el
deleted file mode 100644 (file)
index 26f8f6e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(nxml-define-char-name-set 'buhid
-  '(("BUHID LETTER A" #x1740)
-    ("BUHID LETTER I" #x1741)
-    ("BUHID LETTER U" #x1742)
-    ("BUHID LETTER KA" #x1743)
-    ("BUHID LETTER GA" #x1744)
-    ("BUHID LETTER NGA" #x1745)
-    ("BUHID LETTER TA" #x1746)
-    ("BUHID LETTER DA" #x1747)
-    ("BUHID LETTER NA" #x1748)
-    ("BUHID LETTER PA" #x1749)
-    ("BUHID LETTER BA" #x174A)
-    ("BUHID LETTER MA" #x174B)
-    ("BUHID LETTER YA" #x174C)
-    ("BUHID LETTER RA" #x174D)
-    ("BUHID LETTER LA" #x174E)
-    ("BUHID LETTER WA" #x174F)
-    ("BUHID LETTER SA" #x1750)
-    ("BUHID LETTER HA" #x1751)
-    ("BUHID VOWEL SIGN I" #x1752)
-    ("BUHID VOWEL SIGN U" #x1753)
-    ))
-
diff --git a/etc/nxml/01760-0177F.el b/etc/nxml/01760-0177F.el
deleted file mode 100644 (file)
index 2097b4f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(nxml-define-char-name-set 'tagbanwa
-  '(("TAGBANWA LETTER A" #x1760)
-    ("TAGBANWA LETTER I" #x1761)
-    ("TAGBANWA LETTER U" #x1762)
-    ("TAGBANWA LETTER KA" #x1763)
-    ("TAGBANWA LETTER GA" #x1764)
-    ("TAGBANWA LETTER NGA" #x1765)
-    ("TAGBANWA LETTER TA" #x1766)
-    ("TAGBANWA LETTER DA" #x1767)
-    ("TAGBANWA LETTER NA" #x1768)
-    ("TAGBANWA LETTER PA" #x1769)
-    ("TAGBANWA LETTER BA" #x176A)
-    ("TAGBANWA LETTER MA" #x176B)
-    ("TAGBANWA LETTER YA" #x176C)
-    ("TAGBANWA LETTER LA" #x176E)
-    ("TAGBANWA LETTER WA" #x176F)
-    ("TAGBANWA LETTER SA" #x1770)
-    ("TAGBANWA VOWEL SIGN I" #x1772)
-    ("TAGBANWA VOWEL SIGN U" #x1773)
-    ))
-
diff --git a/etc/nxml/01780-017FF.el b/etc/nxml/01780-017FF.el
deleted file mode 100644 (file)
index 762fd46..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-(nxml-define-char-name-set 'khmer
-  '(("KHMER LETTER KA" #x1780)
-    ("KHMER LETTER KHA" #x1781)
-    ("KHMER LETTER KO" #x1782)
-    ("KHMER LETTER KHO" #x1783)
-    ("KHMER LETTER NGO" #x1784)
-    ("KHMER LETTER CA" #x1785)
-    ("KHMER LETTER CHA" #x1786)
-    ("KHMER LETTER CO" #x1787)
-    ("KHMER LETTER CHO" #x1788)
-    ("KHMER LETTER NYO" #x1789)
-    ("KHMER LETTER DA" #x178A)
-    ("KHMER LETTER TTHA" #x178B)
-    ("KHMER LETTER DO" #x178C)
-    ("KHMER LETTER TTHO" #x178D)
-    ("KHMER LETTER NNO" #x178E)
-    ("KHMER LETTER TA" #x178F)
-    ("KHMER LETTER THA" #x1790)
-    ("KHMER LETTER TO" #x1791)
-    ("KHMER LETTER THO" #x1792)
-    ("KHMER LETTER NO" #x1793)
-    ("KHMER LETTER BA" #x1794)
-    ("KHMER LETTER PHA" #x1795)
-    ("KHMER LETTER PO" #x1796)
-    ("KHMER LETTER PHO" #x1797)
-    ("KHMER LETTER MO" #x1798)
-    ("KHMER LETTER YO" #x1799)
-    ("KHMER LETTER RO" #x179A)
-    ("KHMER LETTER LO" #x179B)
-    ("KHMER LETTER VO" #x179C)
-    ("KHMER LETTER SHA" #x179D)
-    ("KHMER LETTER SSO" #x179E)
-    ("KHMER LETTER SA" #x179F)
-    ("KHMER LETTER HA" #x17A0)
-    ("KHMER LETTER LA" #x17A1)
-    ("KHMER LETTER QA" #x17A2)
-    ("KHMER INDEPENDENT VOWEL QAQ" #x17A3)
-    ("KHMER INDEPENDENT VOWEL QAA" #x17A4)
-    ("KHMER INDEPENDENT VOWEL QI" #x17A5)
-    ("KHMER INDEPENDENT VOWEL QII" #x17A6)
-    ("KHMER INDEPENDENT VOWEL QU" #x17A7)
-    ("KHMER INDEPENDENT VOWEL QUK" #x17A8)
-    ("KHMER INDEPENDENT VOWEL QUU" #x17A9)
-    ("KHMER INDEPENDENT VOWEL QUUV" #x17AA)
-    ("KHMER INDEPENDENT VOWEL RY" #x17AB)
-    ("KHMER INDEPENDENT VOWEL RYY" #x17AC)
-    ("KHMER INDEPENDENT VOWEL LY" #x17AD)
-    ("KHMER INDEPENDENT VOWEL LYY" #x17AE)
-    ("KHMER INDEPENDENT VOWEL QE" #x17AF)
-    ("KHMER INDEPENDENT VOWEL QAI" #x17B0)
-    ("KHMER INDEPENDENT VOWEL QOO TYPE ONE" #x17B1)
-    ("KHMER INDEPENDENT VOWEL QOO TYPE TWO" #x17B2)
-    ("KHMER INDEPENDENT VOWEL QAU" #x17B3)
-    ("KHMER VOWEL INHERENT AQ" #x17B4)
-    ("KHMER VOWEL INHERENT AA" #x17B5)
-    ("KHMER VOWEL SIGN AA" #x17B6)
-    ("KHMER VOWEL SIGN I" #x17B7)
-    ("KHMER VOWEL SIGN II" #x17B8)
-    ("KHMER VOWEL SIGN Y" #x17B9)
-    ("KHMER VOWEL SIGN YY" #x17BA)
-    ("KHMER VOWEL SIGN U" #x17BB)
-    ("KHMER VOWEL SIGN UU" #x17BC)
-    ("KHMER VOWEL SIGN UA" #x17BD)
-    ("KHMER VOWEL SIGN OE" #x17BE)
-    ("KHMER VOWEL SIGN YA" #x17BF)
-    ("KHMER VOWEL SIGN IE" #x17C0)
-    ("KHMER VOWEL SIGN E" #x17C1)
-    ("KHMER VOWEL SIGN AE" #x17C2)
-    ("KHMER VOWEL SIGN AI" #x17C3)
-    ("KHMER VOWEL SIGN OO" #x17C4)
-    ("KHMER VOWEL SIGN AU" #x17C5)
-    ("KHMER SIGN NIKAHIT" #x17C6)
-    ("KHMER SIGN REAHMUK" #x17C7)
-    ("KHMER SIGN YUUKALEAPINTU" #x17C8)
-    ("KHMER SIGN MUUSIKATOAN" #x17C9)
-    ("KHMER SIGN TRIISAP" #x17CA)
-    ("KHMER SIGN BANTOC" #x17CB)
-    ("KHMER SIGN ROBAT" #x17CC)
-    ("KHMER SIGN TOANDAKHIAT" #x17CD)
-    ("KHMER SIGN KAKABAT" #x17CE)
-    ("KHMER SIGN AHSDA" #x17CF)
-    ("KHMER SIGN SAMYOK SANNYA" #x17D0)
-    ("KHMER SIGN VIRIAM" #x17D1)
-    ("KHMER SIGN COENG" #x17D2)
-    ("KHMER SIGN BATHAMASAT" #x17D3)
-    ("KHMER SIGN KHAN" #x17D4)
-    ("KHMER SIGN BARIYOOSAN" #x17D5)
-    ("KHMER SIGN CAMNUC PII KUUH" #x17D6)
-    ("KHMER SIGN LEK TOO" #x17D7)
-    ("KHMER SIGN BEYYAL" #x17D8)
-    ("KHMER SIGN PHNAEK MUAN" #x17D9)
-    ("KHMER SIGN KOOMUUT" #x17DA)
-    ("KHMER CURRENCY SYMBOL RIEL" #x17DB)
-    ("KHMER SIGN AVAKRAHASANYA" #x17DC)
-    ("KHMER DIGIT ZERO" #x17E0)
-    ("KHMER DIGIT ONE" #x17E1)
-    ("KHMER DIGIT TWO" #x17E2)
-    ("KHMER DIGIT THREE" #x17E3)
-    ("KHMER DIGIT FOUR" #x17E4)
-    ("KHMER DIGIT FIVE" #x17E5)
-    ("KHMER DIGIT SIX" #x17E6)
-    ("KHMER DIGIT SEVEN" #x17E7)
-    ("KHMER DIGIT EIGHT" #x17E8)
-    ("KHMER DIGIT NINE" #x17E9)
-    ))
-
diff --git a/etc/nxml/01800-018AF.el b/etc/nxml/01800-018AF.el
deleted file mode 100644 (file)
index b3701d4..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-(nxml-define-char-name-set 'mongolian
-  '(("MONGOLIAN BIRGA" #x1800)
-    ("MONGOLIAN ELLIPSIS" #x1801)
-    ("MONGOLIAN COMMA" #x1802)
-    ("MONGOLIAN FULL STOP" #x1803)
-    ("MONGOLIAN COLON" #x1804)
-    ("MONGOLIAN FOUR DOTS" #x1805)
-    ("MONGOLIAN TODO SOFT HYPHEN" #x1806)
-    ("MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER" #x1807)
-    ("MONGOLIAN MANCHU COMMA" #x1808)
-    ("MONGOLIAN MANCHU FULL STOP" #x1809)
-    ("MONGOLIAN NIRUGU" #x180A)
-    ("MONGOLIAN FREE VARIATION SELECTOR ONE" #x180B)
-    ("MONGOLIAN FREE VARIATION SELECTOR TWO" #x180C)
-    ("MONGOLIAN FREE VARIATION SELECTOR THREE" #x180D)
-    ("MONGOLIAN VOWEL SEPARATOR" #x180E)
-    ("MONGOLIAN DIGIT ZERO" #x1810)
-    ("MONGOLIAN DIGIT ONE" #x1811)
-    ("MONGOLIAN DIGIT TWO" #x1812)
-    ("MONGOLIAN DIGIT THREE" #x1813)
-    ("MONGOLIAN DIGIT FOUR" #x1814)
-    ("MONGOLIAN DIGIT FIVE" #x1815)
-    ("MONGOLIAN DIGIT SIX" #x1816)
-    ("MONGOLIAN DIGIT SEVEN" #x1817)
-    ("MONGOLIAN DIGIT EIGHT" #x1818)
-    ("MONGOLIAN DIGIT NINE" #x1819)
-    ("MONGOLIAN LETTER A" #x1820)
-    ("MONGOLIAN LETTER E" #x1821)
-    ("MONGOLIAN LETTER I" #x1822)
-    ("MONGOLIAN LETTER O" #x1823)
-    ("MONGOLIAN LETTER U" #x1824)
-    ("MONGOLIAN LETTER OE" #x1825)
-    ("MONGOLIAN LETTER UE" #x1826)
-    ("MONGOLIAN LETTER EE" #x1827)
-    ("MONGOLIAN LETTER NA" #x1828)
-    ("MONGOLIAN LETTER ANG" #x1829)
-    ("MONGOLIAN LETTER BA" #x182A)
-    ("MONGOLIAN LETTER PA" #x182B)
-    ("MONGOLIAN LETTER QA" #x182C)
-    ("MONGOLIAN LETTER GA" #x182D)
-    ("MONGOLIAN LETTER MA" #x182E)
-    ("MONGOLIAN LETTER LA" #x182F)
-    ("MONGOLIAN LETTER SA" #x1830)
-    ("MONGOLIAN LETTER SHA" #x1831)
-    ("MONGOLIAN LETTER TA" #x1832)
-    ("MONGOLIAN LETTER DA" #x1833)
-    ("MONGOLIAN LETTER CHA" #x1834)
-    ("MONGOLIAN LETTER JA" #x1835)
-    ("MONGOLIAN LETTER YA" #x1836)
-    ("MONGOLIAN LETTER RA" #x1837)
-    ("MONGOLIAN LETTER WA" #x1838)
-    ("MONGOLIAN LETTER FA" #x1839)
-    ("MONGOLIAN LETTER KA" #x183A)
-    ("MONGOLIAN LETTER KHA" #x183B)
-    ("MONGOLIAN LETTER TSA" #x183C)
-    ("MONGOLIAN LETTER ZA" #x183D)
-    ("MONGOLIAN LETTER HAA" #x183E)
-    ("MONGOLIAN LETTER ZRA" #x183F)
-    ("MONGOLIAN LETTER LHA" #x1840)
-    ("MONGOLIAN LETTER ZHI" #x1841)
-    ("MONGOLIAN LETTER CHI" #x1842)
-    ("MONGOLIAN LETTER TODO LONG VOWEL SIGN" #x1843)
-    ("MONGOLIAN LETTER TODO E" #x1844)
-    ("MONGOLIAN LETTER TODO I" #x1845)
-    ("MONGOLIAN LETTER TODO O" #x1846)
-    ("MONGOLIAN LETTER TODO U" #x1847)
-    ("MONGOLIAN LETTER TODO OE" #x1848)
-    ("MONGOLIAN LETTER TODO UE" #x1849)
-    ("MONGOLIAN LETTER TODO ANG" #x184A)
-    ("MONGOLIAN LETTER TODO BA" #x184B)
-    ("MONGOLIAN LETTER TODO PA" #x184C)
-    ("MONGOLIAN LETTER TODO QA" #x184D)
-    ("MONGOLIAN LETTER TODO GA" #x184E)
-    ("MONGOLIAN LETTER TODO MA" #x184F)
-    ("MONGOLIAN LETTER TODO TA" #x1850)
-    ("MONGOLIAN LETTER TODO DA" #x1851)
-    ("MONGOLIAN LETTER TODO CHA" #x1852)
-    ("MONGOLIAN LETTER TODO JA" #x1853)
-    ("MONGOLIAN LETTER TODO TSA" #x1854)
-    ("MONGOLIAN LETTER TODO YA" #x1855)
-    ("MONGOLIAN LETTER TODO WA" #x1856)
-    ("MONGOLIAN LETTER TODO KA" #x1857)
-    ("MONGOLIAN LETTER TODO GAA" #x1858)
-    ("MONGOLIAN LETTER TODO HAA" #x1859)
-    ("MONGOLIAN LETTER TODO JIA" #x185A)
-    ("MONGOLIAN LETTER TODO NIA" #x185B)
-    ("MONGOLIAN LETTER TODO DZA" #x185C)
-    ("MONGOLIAN LETTER SIBE E" #x185D)
-    ("MONGOLIAN LETTER SIBE I" #x185E)
-    ("MONGOLIAN LETTER SIBE IY" #x185F)
-    ("MONGOLIAN LETTER SIBE UE" #x1860)
-    ("MONGOLIAN LETTER SIBE U" #x1861)
-    ("MONGOLIAN LETTER SIBE ANG" #x1862)
-    ("MONGOLIAN LETTER SIBE KA" #x1863)
-    ("MONGOLIAN LETTER SIBE GA" #x1864)
-    ("MONGOLIAN LETTER SIBE HA" #x1865)
-    ("MONGOLIAN LETTER SIBE PA" #x1866)
-    ("MONGOLIAN LETTER SIBE SHA" #x1867)
-    ("MONGOLIAN LETTER SIBE TA" #x1868)
-    ("MONGOLIAN LETTER SIBE DA" #x1869)
-    ("MONGOLIAN LETTER SIBE JA" #x186A)
-    ("MONGOLIAN LETTER SIBE FA" #x186B)
-    ("MONGOLIAN LETTER SIBE GAA" #x186C)
-    ("MONGOLIAN LETTER SIBE HAA" #x186D)
-    ("MONGOLIAN LETTER SIBE TSA" #x186E)
-    ("MONGOLIAN LETTER SIBE ZA" #x186F)
-    ("MONGOLIAN LETTER SIBE RAA" #x1870)
-    ("MONGOLIAN LETTER SIBE CHA" #x1871)
-    ("MONGOLIAN LETTER SIBE ZHA" #x1872)
-    ("MONGOLIAN LETTER MANCHU I" #x1873)
-    ("MONGOLIAN LETTER MANCHU KA" #x1874)
-    ("MONGOLIAN LETTER MANCHU RA" #x1875)
-    ("MONGOLIAN LETTER MANCHU FA" #x1876)
-    ("MONGOLIAN LETTER MANCHU ZHA" #x1877)
-    ("MONGOLIAN LETTER ALI GALI ANUSVARA ONE" #x1880)
-    ("MONGOLIAN LETTER ALI GALI VISARGA ONE" #x1881)
-    ("MONGOLIAN LETTER ALI GALI DAMARU" #x1882)
-    ("MONGOLIAN LETTER ALI GALI UBADAMA" #x1883)
-    ("MONGOLIAN LETTER ALI GALI INVERTED UBADAMA" #x1884)
-    ("MONGOLIAN LETTER ALI GALI BALUDA" #x1885)
-    ("MONGOLIAN LETTER ALI GALI THREE BALUDA" #x1886)
-    ("MONGOLIAN LETTER ALI GALI A" #x1887)
-    ("MONGOLIAN LETTER ALI GALI I" #x1888)
-    ("MONGOLIAN LETTER ALI GALI KA" #x1889)
-    ("MONGOLIAN LETTER ALI GALI NGA" #x188A)
-    ("MONGOLIAN LETTER ALI GALI CA" #x188B)
-    ("MONGOLIAN LETTER ALI GALI TTA" #x188C)
-    ("MONGOLIAN LETTER ALI GALI TTHA" #x188D)
-    ("MONGOLIAN LETTER ALI GALI DDA" #x188E)
-    ("MONGOLIAN LETTER ALI GALI NNA" #x188F)
-    ("MONGOLIAN LETTER ALI GALI TA" #x1890)
-    ("MONGOLIAN LETTER ALI GALI DA" #x1891)
-    ("MONGOLIAN LETTER ALI GALI PA" #x1892)
-    ("MONGOLIAN LETTER ALI GALI PHA" #x1893)
-    ("MONGOLIAN LETTER ALI GALI SSA" #x1894)
-    ("MONGOLIAN LETTER ALI GALI ZHA" #x1895)
-    ("MONGOLIAN LETTER ALI GALI ZA" #x1896)
-    ("MONGOLIAN LETTER ALI GALI AH" #x1897)
-    ("MONGOLIAN LETTER TODO ALI GALI TA" #x1898)
-    ("MONGOLIAN LETTER TODO ALI GALI ZHA" #x1899)
-    ("MONGOLIAN LETTER MANCHU ALI GALI GHA" #x189A)
-    ("MONGOLIAN LETTER MANCHU ALI GALI NGA" #x189B)
-    ("MONGOLIAN LETTER MANCHU ALI GALI CA" #x189C)
-    ("MONGOLIAN LETTER MANCHU ALI GALI JHA" #x189D)
-    ("MONGOLIAN LETTER MANCHU ALI GALI TTA" #x189E)
-    ("MONGOLIAN LETTER MANCHU ALI GALI DDHA" #x189F)
-    ("MONGOLIAN LETTER MANCHU ALI GALI TA" #x18A0)
-    ("MONGOLIAN LETTER MANCHU ALI GALI DHA" #x18A1)
-    ("MONGOLIAN LETTER MANCHU ALI GALI SSA" #x18A2)
-    ("MONGOLIAN LETTER MANCHU ALI GALI CYA" #x18A3)
-    ("MONGOLIAN LETTER MANCHU ALI GALI ZHA" #x18A4)
-    ("MONGOLIAN LETTER MANCHU ALI GALI ZA" #x18A5)
-    ("MONGOLIAN LETTER ALI GALI HALF U" #x18A6)
-    ("MONGOLIAN LETTER ALI GALI HALF YA" #x18A7)
-    ("MONGOLIAN LETTER MANCHU ALI GALI BHA" #x18A8)
-    ("MONGOLIAN LETTER ALI GALI DAGALGA" #x18A9)
-    ))
-
diff --git a/etc/nxml/01E00-01EFF.el b/etc/nxml/01E00-01EFF.el
deleted file mode 100644 (file)
index 2f86f03..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-(nxml-define-char-name-set 'latin-extended-additional
-  '(("LATIN CAPITAL LETTER A WITH RING BELOW" #x1E00)
-    ("LATIN SMALL LETTER A WITH RING BELOW" #x1E01)
-    ("LATIN CAPITAL LETTER B WITH DOT ABOVE" #x1E02)
-    ("LATIN SMALL LETTER B WITH DOT ABOVE" #x1E03)
-    ("LATIN CAPITAL LETTER B WITH DOT BELOW" #x1E04)
-    ("LATIN SMALL LETTER B WITH DOT BELOW" #x1E05)
-    ("LATIN CAPITAL LETTER B WITH LINE BELOW" #x1E06)
-    ("LATIN SMALL LETTER B WITH LINE BELOW" #x1E07)
-    ("LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE" #x1E08)
-    ("LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" #x1E09)
-    ("LATIN CAPITAL LETTER D WITH DOT ABOVE" #x1E0A)
-    ("LATIN SMALL LETTER D WITH DOT ABOVE" #x1E0B)
-    ("LATIN CAPITAL LETTER D WITH DOT BELOW" #x1E0C)
-    ("LATIN SMALL LETTER D WITH DOT BELOW" #x1E0D)
-    ("LATIN CAPITAL LETTER D WITH LINE BELOW" #x1E0E)
-    ("LATIN SMALL LETTER D WITH LINE BELOW" #x1E0F)
-    ("LATIN CAPITAL LETTER D WITH CEDILLA" #x1E10)
-    ("LATIN SMALL LETTER D WITH CEDILLA" #x1E11)
-    ("LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW" #x1E12)
-    ("LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW" #x1E13)
-    ("LATIN CAPITAL LETTER E WITH MACRON AND GRAVE" #x1E14)
-    ("LATIN SMALL LETTER E WITH MACRON AND GRAVE" #x1E15)
-    ("LATIN CAPITAL LETTER E WITH MACRON AND ACUTE" #x1E16)
-    ("LATIN SMALL LETTER E WITH MACRON AND ACUTE" #x1E17)
-    ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW" #x1E18)
-    ("LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW" #x1E19)
-    ("LATIN CAPITAL LETTER E WITH TILDE BELOW" #x1E1A)
-    ("LATIN SMALL LETTER E WITH TILDE BELOW" #x1E1B)
-    ("LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE" #x1E1C)
-    ("LATIN SMALL LETTER E WITH CEDILLA AND BREVE" #x1E1D)
-    ("LATIN CAPITAL LETTER F WITH DOT ABOVE" #x1E1E)
-    ("LATIN SMALL LETTER F WITH DOT ABOVE" #x1E1F)
-    ("LATIN CAPITAL LETTER G WITH MACRON" #x1E20)
-    ("LATIN SMALL LETTER G WITH MACRON" #x1E21)
-    ("LATIN CAPITAL LETTER H WITH DOT ABOVE" #x1E22)
-    ("LATIN SMALL LETTER H WITH DOT ABOVE" #x1E23)
-    ("LATIN CAPITAL LETTER H WITH DOT BELOW" #x1E24)
-    ("LATIN SMALL LETTER H WITH DOT BELOW" #x1E25)
-    ("LATIN CAPITAL LETTER H WITH DIAERESIS" #x1E26)
-    ("LATIN SMALL LETTER H WITH DIAERESIS" #x1E27)
-    ("LATIN CAPITAL LETTER H WITH CEDILLA" #x1E28)
-    ("LATIN SMALL LETTER H WITH CEDILLA" #x1E29)
-    ("LATIN CAPITAL LETTER H WITH BREVE BELOW" #x1E2A)
-    ("LATIN SMALL LETTER H WITH BREVE BELOW" #x1E2B)
-    ("LATIN CAPITAL LETTER I WITH TILDE BELOW" #x1E2C)
-    ("LATIN SMALL LETTER I WITH TILDE BELOW" #x1E2D)
-    ("LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE" #x1E2E)
-    ("LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE" #x1E2F)
-    ("LATIN CAPITAL LETTER K WITH ACUTE" #x1E30)
-    ("LATIN SMALL LETTER K WITH ACUTE" #x1E31)
-    ("LATIN CAPITAL LETTER K WITH DOT BELOW" #x1E32)
-    ("LATIN SMALL LETTER K WITH DOT BELOW" #x1E33)
-    ("LATIN CAPITAL LETTER K WITH LINE BELOW" #x1E34)
-    ("LATIN SMALL LETTER K WITH LINE BELOW" #x1E35)
-    ("LATIN CAPITAL LETTER L WITH DOT BELOW" #x1E36)
-    ("LATIN SMALL LETTER L WITH DOT BELOW" #x1E37)
-    ("LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON" #x1E38)
-    ("LATIN SMALL LETTER L WITH DOT BELOW AND MACRON" #x1E39)
-    ("LATIN CAPITAL LETTER L WITH LINE BELOW" #x1E3A)
-    ("LATIN SMALL LETTER L WITH LINE BELOW" #x1E3B)
-    ("LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW" #x1E3C)
-    ("LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW" #x1E3D)
-    ("LATIN CAPITAL LETTER M WITH ACUTE" #x1E3E)
-    ("LATIN SMALL LETTER M WITH ACUTE" #x1E3F)
-    ("LATIN CAPITAL LETTER M WITH DOT ABOVE" #x1E40)
-    ("LATIN SMALL LETTER M WITH DOT ABOVE" #x1E41)
-    ("LATIN CAPITAL LETTER M WITH DOT BELOW" #x1E42)
-    ("LATIN SMALL LETTER M WITH DOT BELOW" #x1E43)
-    ("LATIN CAPITAL LETTER N WITH DOT ABOVE" #x1E44)
-    ("LATIN SMALL LETTER N WITH DOT ABOVE" #x1E45)
-    ("LATIN CAPITAL LETTER N WITH DOT BELOW" #x1E46)
-    ("LATIN SMALL LETTER N WITH DOT BELOW" #x1E47)
-    ("LATIN CAPITAL LETTER N WITH LINE BELOW" #x1E48)
-    ("LATIN SMALL LETTER N WITH LINE BELOW" #x1E49)
-    ("LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW" #x1E4A)
-    ("LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW" #x1E4B)
-    ("LATIN CAPITAL LETTER O WITH TILDE AND ACUTE" #x1E4C)
-    ("LATIN SMALL LETTER O WITH TILDE AND ACUTE" #x1E4D)
-    ("LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS" #x1E4E)
-    ("LATIN SMALL LETTER O WITH TILDE AND DIAERESIS" #x1E4F)
-    ("LATIN CAPITAL LETTER O WITH MACRON AND GRAVE" #x1E50)
-    ("LATIN SMALL LETTER O WITH MACRON AND GRAVE" #x1E51)
-    ("LATIN CAPITAL LETTER O WITH MACRON AND ACUTE" #x1E52)
-    ("LATIN SMALL LETTER O WITH MACRON AND ACUTE" #x1E53)
-    ("LATIN CAPITAL LETTER P WITH ACUTE" #x1E54)
-    ("LATIN SMALL LETTER P WITH ACUTE" #x1E55)
-    ("LATIN CAPITAL LETTER P WITH DOT ABOVE" #x1E56)
-    ("LATIN SMALL LETTER P WITH DOT ABOVE" #x1E57)
-    ("LATIN CAPITAL LETTER R WITH DOT ABOVE" #x1E58)
-    ("LATIN SMALL LETTER R WITH DOT ABOVE" #x1E59)
-    ("LATIN CAPITAL LETTER R WITH DOT BELOW" #x1E5A)
-    ("LATIN SMALL LETTER R WITH DOT BELOW" #x1E5B)
-    ("LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON" #x1E5C)
-    ("LATIN SMALL LETTER R WITH DOT BELOW AND MACRON" #x1E5D)
-    ("LATIN CAPITAL LETTER R WITH LINE BELOW" #x1E5E)
-    ("LATIN SMALL LETTER R WITH LINE BELOW" #x1E5F)
-    ("LATIN CAPITAL LETTER S WITH DOT ABOVE" #x1E60)
-    ("LATIN SMALL LETTER S WITH DOT ABOVE" #x1E61)
-    ("LATIN CAPITAL LETTER S WITH DOT BELOW" #x1E62)
-    ("LATIN SMALL LETTER S WITH DOT BELOW" #x1E63)
-    ("LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE" #x1E64)
-    ("LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE" #x1E65)
-    ("LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE" #x1E66)
-    ("LATIN SMALL LETTER S WITH CARON AND DOT ABOVE" #x1E67)
-    ("LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E68)
-    ("LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E69)
-    ("LATIN CAPITAL LETTER T WITH DOT ABOVE" #x1E6A)
-    ("LATIN SMALL LETTER T WITH DOT ABOVE" #x1E6B)
-    ("LATIN CAPITAL LETTER T WITH DOT BELOW" #x1E6C)
-    ("LATIN SMALL LETTER T WITH DOT BELOW" #x1E6D)
-    ("LATIN CAPITAL LETTER T WITH LINE BELOW" #x1E6E)
-    ("LATIN SMALL LETTER T WITH LINE BELOW" #x1E6F)
-    ("LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW" #x1E70)
-    ("LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW" #x1E71)
-    ("LATIN CAPITAL LETTER U WITH DIAERESIS BELOW" #x1E72)
-    ("LATIN SMALL LETTER U WITH DIAERESIS BELOW" #x1E73)
-    ("LATIN CAPITAL LETTER U WITH TILDE BELOW" #x1E74)
-    ("LATIN SMALL LETTER U WITH TILDE BELOW" #x1E75)
-    ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW" #x1E76)
-    ("LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW" #x1E77)
-    ("LATIN CAPITAL LETTER U WITH TILDE AND ACUTE" #x1E78)
-    ("LATIN SMALL LETTER U WITH TILDE AND ACUTE" #x1E79)
-    ("LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS" #x1E7A)
-    ("LATIN SMALL LETTER U WITH MACRON AND DIAERESIS" #x1E7B)
-    ("LATIN CAPITAL LETTER V WITH TILDE" #x1E7C)
-    ("LATIN SMALL LETTER V WITH TILDE" #x1E7D)
-    ("LATIN CAPITAL LETTER V WITH DOT BELOW" #x1E7E)
-    ("LATIN SMALL LETTER V WITH DOT BELOW" #x1E7F)
-    ("LATIN CAPITAL LETTER W WITH GRAVE" #x1E80)
-    ("LATIN SMALL LETTER W WITH GRAVE" #x1E81)
-    ("LATIN CAPITAL LETTER W WITH ACUTE" #x1E82)
-    ("LATIN SMALL LETTER W WITH ACUTE" #x1E83)
-    ("LATIN CAPITAL LETTER W WITH DIAERESIS" #x1E84)
-    ("LATIN SMALL LETTER W WITH DIAERESIS" #x1E85)
-    ("LATIN CAPITAL LETTER W WITH DOT ABOVE" #x1E86)
-    ("LATIN SMALL LETTER W WITH DOT ABOVE" #x1E87)
-    ("LATIN CAPITAL LETTER W WITH DOT BELOW" #x1E88)
-    ("LATIN SMALL LETTER W WITH DOT BELOW" #x1E89)
-    ("LATIN CAPITAL LETTER X WITH DOT ABOVE" #x1E8A)
-    ("LATIN SMALL LETTER X WITH DOT ABOVE" #x1E8B)
-    ("LATIN CAPITAL LETTER X WITH DIAERESIS" #x1E8C)
-    ("LATIN SMALL LETTER X WITH DIAERESIS" #x1E8D)
-    ("LATIN CAPITAL LETTER Y WITH DOT ABOVE" #x1E8E)
-    ("LATIN SMALL LETTER Y WITH DOT ABOVE" #x1E8F)
-    ("LATIN CAPITAL LETTER Z WITH CIRCUMFLEX" #x1E90)
-    ("LATIN SMALL LETTER Z WITH CIRCUMFLEX" #x1E91)
-    ("LATIN CAPITAL LETTER Z WITH DOT BELOW" #x1E92)
-    ("LATIN SMALL LETTER Z WITH DOT BELOW" #x1E93)
-    ("LATIN CAPITAL LETTER Z WITH LINE BELOW" #x1E94)
-    ("LATIN SMALL LETTER Z WITH LINE BELOW" #x1E95)
-    ("LATIN SMALL LETTER H WITH LINE BELOW" #x1E96)
-    ("LATIN SMALL LETTER T WITH DIAERESIS" #x1E97)
-    ("LATIN SMALL LETTER W WITH RING ABOVE" #x1E98)
-    ("LATIN SMALL LETTER Y WITH RING ABOVE" #x1E99)
-    ("LATIN SMALL LETTER A WITH RIGHT HALF RING" #x1E9A)
-    ("LATIN SMALL LETTER LONG S WITH DOT ABOVE" #x1E9B)
-    ("LATIN CAPITAL LETTER A WITH DOT BELOW" #x1EA0)
-    ("LATIN SMALL LETTER A WITH DOT BELOW" #x1EA1)
-    ("LATIN CAPITAL LETTER A WITH HOOK ABOVE" #x1EA2)
-    ("LATIN SMALL LETTER A WITH HOOK ABOVE" #x1EA3)
-    ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA4)
-    ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA5)
-    ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA6)
-    ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA7)
-    ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA8)
-    ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA9)
-    ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAA)
-    ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAB)
-    ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAC)
-    ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAD)
-    ("LATIN CAPITAL LETTER A WITH BREVE AND ACUTE" #x1EAE)
-    ("LATIN SMALL LETTER A WITH BREVE AND ACUTE" #x1EAF)
-    ("LATIN CAPITAL LETTER A WITH BREVE AND GRAVE" #x1EB0)
-    ("LATIN SMALL LETTER A WITH BREVE AND GRAVE" #x1EB1)
-    ("LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB2)
-    ("LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB3)
-    ("LATIN CAPITAL LETTER A WITH BREVE AND TILDE" #x1EB4)
-    ("LATIN SMALL LETTER A WITH BREVE AND TILDE" #x1EB5)
-    ("LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW" #x1EB6)
-    ("LATIN SMALL LETTER A WITH BREVE AND DOT BELOW" #x1EB7)
-    ("LATIN CAPITAL LETTER E WITH DOT BELOW" #x1EB8)
-    ("LATIN SMALL LETTER E WITH DOT BELOW" #x1EB9)
-    ("LATIN CAPITAL LETTER E WITH HOOK ABOVE" #x1EBA)
-    ("LATIN SMALL LETTER E WITH HOOK ABOVE" #x1EBB)
-    ("LATIN CAPITAL LETTER E WITH TILDE" #x1EBC)
-    ("LATIN SMALL LETTER E WITH TILDE" #x1EBD)
-    ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBE)
-    ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBF)
-    ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC0)
-    ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC1)
-    ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC2)
-    ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC3)
-    ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC4)
-    ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC5)
-    ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC6)
-    ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC7)
-    ("LATIN CAPITAL LETTER I WITH HOOK ABOVE" #x1EC8)
-    ("LATIN SMALL LETTER I WITH HOOK ABOVE" #x1EC9)
-    ("LATIN CAPITAL LETTER I WITH DOT BELOW" #x1ECA)
-    ("LATIN SMALL LETTER I WITH DOT BELOW" #x1ECB)
-    ("LATIN CAPITAL LETTER O WITH DOT BELOW" #x1ECC)
-    ("LATIN SMALL LETTER O WITH DOT BELOW" #x1ECD)
-    ("LATIN CAPITAL LETTER O WITH HOOK ABOVE" #x1ECE)
-    ("LATIN SMALL LETTER O WITH HOOK ABOVE" #x1ECF)
-    ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED0)
-    ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED1)
-    ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED2)
-    ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED3)
-    ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED4)
-    ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED5)
-    ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED6)
-    ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED7)
-    ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED8)
-    ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED9)
-    ("LATIN CAPITAL LETTER O WITH HORN AND ACUTE" #x1EDA)
-    ("LATIN SMALL LETTER O WITH HORN AND ACUTE" #x1EDB)
-    ("LATIN CAPITAL LETTER O WITH HORN AND GRAVE" #x1EDC)
-    ("LATIN SMALL LETTER O WITH HORN AND GRAVE" #x1EDD)
-    ("LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE" #x1EDE)
-    ("LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE" #x1EDF)
-    ("LATIN CAPITAL LETTER O WITH HORN AND TILDE" #x1EE0)
-    ("LATIN SMALL LETTER O WITH HORN AND TILDE" #x1EE1)
-    ("LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW" #x1EE2)
-    ("LATIN SMALL LETTER O WITH HORN AND DOT BELOW" #x1EE3)
-    ("LATIN CAPITAL LETTER U WITH DOT BELOW" #x1EE4)
-    ("LATIN SMALL LETTER U WITH DOT BELOW" #x1EE5)
-    ("LATIN CAPITAL LETTER U WITH HOOK ABOVE" #x1EE6)
-    ("LATIN SMALL LETTER U WITH HOOK ABOVE" #x1EE7)
-    ("LATIN CAPITAL LETTER U WITH HORN AND ACUTE" #x1EE8)
-    ("LATIN SMALL LETTER U WITH HORN AND ACUTE" #x1EE9)
-    ("LATIN CAPITAL LETTER U WITH HORN AND GRAVE" #x1EEA)
-    ("LATIN SMALL LETTER U WITH HORN AND GRAVE" #x1EEB)
-    ("LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE" #x1EEC)
-    ("LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE" #x1EED)
-    ("LATIN CAPITAL LETTER U WITH HORN AND TILDE" #x1EEE)
-    ("LATIN SMALL LETTER U WITH HORN AND TILDE" #x1EEF)
-    ("LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW" #x1EF0)
-    ("LATIN SMALL LETTER U WITH HORN AND DOT BELOW" #x1EF1)
-    ("LATIN CAPITAL LETTER Y WITH GRAVE" #x1EF2)
-    ("LATIN SMALL LETTER Y WITH GRAVE" #x1EF3)
-    ("LATIN CAPITAL LETTER Y WITH DOT BELOW" #x1EF4)
-    ("LATIN SMALL LETTER Y WITH DOT BELOW" #x1EF5)
-    ("LATIN CAPITAL LETTER Y WITH HOOK ABOVE" #x1EF6)
-    ("LATIN SMALL LETTER Y WITH HOOK ABOVE" #x1EF7)
-    ("LATIN CAPITAL LETTER Y WITH TILDE" #x1EF8)
-    ("LATIN SMALL LETTER Y WITH TILDE" #x1EF9)
-    ))
-
diff --git a/etc/nxml/01F00-01FFF.el b/etc/nxml/01F00-01FFF.el
deleted file mode 100644 (file)
index 64e5f26..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-(nxml-define-char-name-set 'greek-extended
-  '(("GREEK SMALL LETTER ALPHA WITH PSILI" #x1F00)
-    ("GREEK SMALL LETTER ALPHA WITH DASIA" #x1F01)
-    ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA" #x1F02)
-    ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA" #x1F03)
-    ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA" #x1F04)
-    ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA" #x1F05)
-    ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F06)
-    ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F07)
-    ("GREEK CAPITAL LETTER ALPHA WITH PSILI" #x1F08)
-    ("GREEK CAPITAL LETTER ALPHA WITH DASIA" #x1F09)
-    ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA" #x1F0A)
-    ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA" #x1F0B)
-    ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA" #x1F0C)
-    ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA" #x1F0D)
-    ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F0E)
-    ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F0F)
-    ("GREEK SMALL LETTER EPSILON WITH PSILI" #x1F10)
-    ("GREEK SMALL LETTER EPSILON WITH DASIA" #x1F11)
-    ("GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA" #x1F12)
-    ("GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA" #x1F13)
-    ("GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA" #x1F14)
-    ("GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA" #x1F15)
-    ("GREEK CAPITAL LETTER EPSILON WITH PSILI" #x1F18)
-    ("GREEK CAPITAL LETTER EPSILON WITH DASIA" #x1F19)
-    ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA" #x1F1A)
-    ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA" #x1F1B)
-    ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA" #x1F1C)
-    ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA" #x1F1D)
-    ("GREEK SMALL LETTER ETA WITH PSILI" #x1F20)
-    ("GREEK SMALL LETTER ETA WITH DASIA" #x1F21)
-    ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA" #x1F22)
-    ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA" #x1F23)
-    ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA" #x1F24)
-    ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA" #x1F25)
-    ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F26)
-    ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F27)
-    ("GREEK CAPITAL LETTER ETA WITH PSILI" #x1F28)
-    ("GREEK CAPITAL LETTER ETA WITH DASIA" #x1F29)
-    ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA" #x1F2A)
-    ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA" #x1F2B)
-    ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA" #x1F2C)
-    ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA" #x1F2D)
-    ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F2E)
-    ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F2F)
-    ("GREEK SMALL LETTER IOTA WITH PSILI" #x1F30)
-    ("GREEK SMALL LETTER IOTA WITH DASIA" #x1F31)
-    ("GREEK SMALL LETTER IOTA WITH PSILI AND VARIA" #x1F32)
-    ("GREEK SMALL LETTER IOTA WITH DASIA AND VARIA" #x1F33)
-    ("GREEK SMALL LETTER IOTA WITH PSILI AND OXIA" #x1F34)
-    ("GREEK SMALL LETTER IOTA WITH DASIA AND OXIA" #x1F35)
-    ("GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F36)
-    ("GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F37)
-    ("GREEK CAPITAL LETTER IOTA WITH PSILI" #x1F38)
-    ("GREEK CAPITAL LETTER IOTA WITH DASIA" #x1F39)
-    ("GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA" #x1F3A)
-    ("GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA" #x1F3B)
-    ("GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA" #x1F3C)
-    ("GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA" #x1F3D)
-    ("GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F3E)
-    ("GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F3F)
-    ("GREEK SMALL LETTER OMICRON WITH PSILI" #x1F40)
-    ("GREEK SMALL LETTER OMICRON WITH DASIA" #x1F41)
-    ("GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA" #x1F42)
-    ("GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA" #x1F43)
-    ("GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA" #x1F44)
-    ("GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA" #x1F45)
-    ("GREEK CAPITAL LETTER OMICRON WITH PSILI" #x1F48)
-    ("GREEK CAPITAL LETTER OMICRON WITH DASIA" #x1F49)
-    ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA" #x1F4A)
-    ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA" #x1F4B)
-    ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA" #x1F4C)
-    ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA" #x1F4D)
-    ("GREEK SMALL LETTER UPSILON WITH PSILI" #x1F50)
-    ("GREEK SMALL LETTER UPSILON WITH DASIA" #x1F51)
-    ("GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA" #x1F52)
-    ("GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA" #x1F53)
-    ("GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA" #x1F54)
-    ("GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA" #x1F55)
-    ("GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI" #x1F56)
-    ("GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F57)
-    ("GREEK CAPITAL LETTER UPSILON WITH DASIA" #x1F59)
-    ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA" #x1F5B)
-    ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA" #x1F5D)
-    ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F5F)
-    ("GREEK SMALL LETTER OMEGA WITH PSILI" #x1F60)
-    ("GREEK SMALL LETTER OMEGA WITH DASIA" #x1F61)
-    ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA" #x1F62)
-    ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA" #x1F63)
-    ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA" #x1F64)
-    ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA" #x1F65)
-    ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F66)
-    ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F67)
-    ("GREEK CAPITAL LETTER OMEGA WITH PSILI" #x1F68)
-    ("GREEK CAPITAL LETTER OMEGA WITH DASIA" #x1F69)
-    ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA" #x1F6A)
-    ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA" #x1F6B)
-    ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA" #x1F6C)
-    ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA" #x1F6D)
-    ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F6E)
-    ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F6F)
-    ("GREEK SMALL LETTER ALPHA WITH VARIA" #x1F70)
-    ("GREEK SMALL LETTER ALPHA WITH OXIA" #x1F71)
-    ("GREEK SMALL LETTER EPSILON WITH VARIA" #x1F72)
-    ("GREEK SMALL LETTER EPSILON WITH OXIA" #x1F73)
-    ("GREEK SMALL LETTER ETA WITH VARIA" #x1F74)
-    ("GREEK SMALL LETTER ETA WITH OXIA" #x1F75)
-    ("GREEK SMALL LETTER IOTA WITH VARIA" #x1F76)
-    ("GREEK SMALL LETTER IOTA WITH OXIA" #x1F77)
-    ("GREEK SMALL LETTER OMICRON WITH VARIA" #x1F78)
-    ("GREEK SMALL LETTER OMICRON WITH OXIA" #x1F79)
-    ("GREEK SMALL LETTER UPSILON WITH VARIA" #x1F7A)
-    ("GREEK SMALL LETTER UPSILON WITH OXIA" #x1F7B)
-    ("GREEK SMALL LETTER OMEGA WITH VARIA" #x1F7C)
-    ("GREEK SMALL LETTER OMEGA WITH OXIA" #x1F7D)
-    ("GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI" #x1F80)
-    ("GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI" #x1F81)
-    ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F82)
-    ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F83)
-    ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F84)
-    ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F85)
-    ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F86)
-    ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F87)
-    ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI" #x1F88)
-    ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI" #x1F89)
-    ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F8A)
-    ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F8B)
-    ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F8C)
-    ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F8D)
-    ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8E)
-    ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8F)
-    ("GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI" #x1F90)
-    ("GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI" #x1F91)
-    ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F92)
-    ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F93)
-    ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F94)
-    ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F95)
-    ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F96)
-    ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F97)
-    ("GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI" #x1F98)
-    ("GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI" #x1F99)
-    ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F9A)
-    ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F9B)
-    ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F9C)
-    ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F9D)
-    ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9E)
-    ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9F)
-    ("GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI" #x1FA0)
-    ("GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI" #x1FA1)
-    ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1FA2)
-    ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1FA3)
-    ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1FA4)
-    ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1FA5)
-    ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA6)
-    ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA7)
-    ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI" #x1FA8)
-    ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI" #x1FA9)
-    ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1FAA)
-    ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1FAB)
-    ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1FAC)
-    ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1FAD)
-    ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAE)
-    ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAF)
-    ("GREEK SMALL LETTER ALPHA WITH VRACHY" #x1FB0)
-    ("GREEK SMALL LETTER ALPHA WITH MACRON" #x1FB1)
-    ("GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI" #x1FB2)
-    ("GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI" #x1FB3)
-    ("GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI" #x1FB4)
-    ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI" #x1FB6)
-    ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FB7)
-    ("GREEK CAPITAL LETTER ALPHA WITH VRACHY" #x1FB8)
-    ("GREEK CAPITAL LETTER ALPHA WITH MACRON" #x1FB9)
-    ("GREEK CAPITAL LETTER ALPHA WITH VARIA" #x1FBA)
-    ("GREEK CAPITAL LETTER ALPHA WITH OXIA" #x1FBB)
-    ("GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI" #x1FBC)
-    ("GREEK KORONIS" #x1FBD)
-    ("GREEK PROSGEGRAMMENI" #x1FBE)
-    ("GREEK PSILI" #x1FBF)
-    ("GREEK PERISPOMENI" #x1FC0)
-    ("GREEK DIALYTIKA AND PERISPOMENI" #x1FC1)
-    ("GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI" #x1FC2)
-    ("GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI" #x1FC3)
-    ("GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI" #x1FC4)
-    ("GREEK SMALL LETTER ETA WITH PERISPOMENI" #x1FC6)
-    ("GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FC7)
-    ("GREEK CAPITAL LETTER EPSILON WITH VARIA" #x1FC8)
-    ("GREEK CAPITAL LETTER EPSILON WITH OXIA" #x1FC9)
-    ("GREEK CAPITAL LETTER ETA WITH VARIA" #x1FCA)
-    ("GREEK CAPITAL LETTER ETA WITH OXIA" #x1FCB)
-    ("GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI" #x1FCC)
-    ("GREEK PSILI AND VARIA" #x1FCD)
-    ("GREEK PSILI AND OXIA" #x1FCE)
-    ("GREEK PSILI AND PERISPOMENI" #x1FCF)
-    ("GREEK SMALL LETTER IOTA WITH VRACHY" #x1FD0)
-    ("GREEK SMALL LETTER IOTA WITH MACRON" #x1FD1)
-    ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA" #x1FD2)
-    ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA" #x1FD3)
-    ("GREEK SMALL LETTER IOTA WITH PERISPOMENI" #x1FD6)
-    ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI" #x1FD7)
-    ("GREEK CAPITAL LETTER IOTA WITH VRACHY" #x1FD8)
-    ("GREEK CAPITAL LETTER IOTA WITH MACRON" #x1FD9)
-    ("GREEK CAPITAL LETTER IOTA WITH VARIA" #x1FDA)
-    ("GREEK CAPITAL LETTER IOTA WITH OXIA" #x1FDB)
-    ("GREEK DASIA AND VARIA" #x1FDD)
-    ("GREEK DASIA AND OXIA" #x1FDE)
-    ("GREEK DASIA AND PERISPOMENI" #x1FDF)
-    ("GREEK SMALL LETTER UPSILON WITH VRACHY" #x1FE0)
-    ("GREEK SMALL LETTER UPSILON WITH MACRON" #x1FE1)
-    ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA" #x1FE2)
-    ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA" #x1FE3)
-    ("GREEK SMALL LETTER RHO WITH PSILI" #x1FE4)
-    ("GREEK SMALL LETTER RHO WITH DASIA" #x1FE5)
-    ("GREEK SMALL LETTER UPSILON WITH PERISPOMENI" #x1FE6)
-    ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI" #x1FE7)
-    ("GREEK CAPITAL LETTER UPSILON WITH VRACHY" #x1FE8)
-    ("GREEK CAPITAL LETTER UPSILON WITH MACRON" #x1FE9)
-    ("GREEK CAPITAL LETTER UPSILON WITH VARIA" #x1FEA)
-    ("GREEK CAPITAL LETTER UPSILON WITH OXIA" #x1FEB)
-    ("GREEK CAPITAL LETTER RHO WITH DASIA" #x1FEC)
-    ("GREEK DIALYTIKA AND VARIA" #x1FED)
-    ("GREEK DIALYTIKA AND OXIA" #x1FEE)
-    ("GREEK VARIA" #x1FEF)
-    ("GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI" #x1FF2)
-    ("GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI" #x1FF3)
-    ("GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI" #x1FF4)
-    ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI" #x1FF6)
-    ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FF7)
-    ("GREEK CAPITAL LETTER OMICRON WITH VARIA" #x1FF8)
-    ("GREEK CAPITAL LETTER OMICRON WITH OXIA" #x1FF9)
-    ("GREEK CAPITAL LETTER OMEGA WITH VARIA" #x1FFA)
-    ("GREEK CAPITAL LETTER OMEGA WITH OXIA" #x1FFB)
-    ("GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI" #x1FFC)
-    ("GREEK OXIA" #x1FFD)
-    ("GREEK DASIA" #x1FFE)
-    ))
-
diff --git a/etc/nxml/02000-0206F.el b/etc/nxml/02000-0206F.el
deleted file mode 100644 (file)
index 36dedde..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-(nxml-define-char-name-set 'general-punctuation
-  '(("EN QUAD" #x2000)
-    ("EM QUAD" #x2001)
-    ("EN SPACE" #x2002)
-    ("EM SPACE" #x2003)
-    ("THREE-PER-EM SPACE" #x2004)
-    ("FOUR-PER-EM SPACE" #x2005)
-    ("SIX-PER-EM SPACE" #x2006)
-    ("FIGURE SPACE" #x2007)
-    ("PUNCTUATION SPACE" #x2008)
-    ("THIN SPACE" #x2009)
-    ("HAIR SPACE" #x200A)
-    ("ZERO WIDTH SPACE" #x200B)
-    ("ZERO WIDTH NON-JOINER" #x200C)
-    ("ZERO WIDTH JOINER" #x200D)
-    ("LEFT-TO-RIGHT MARK" #x200E)
-    ("RIGHT-TO-LEFT MARK" #x200F)
-    ("HYPHEN" #x2010)
-    ("NON-BREAKING HYPHEN" #x2011)
-    ("FIGURE DASH" #x2012)
-    ("EN DASH" #x2013)
-    ("EM DASH" #x2014)
-    ("HORIZONTAL BAR" #x2015)
-    ("DOUBLE VERTICAL LINE" #x2016)
-    ("DOUBLE LOW LINE" #x2017)
-    ("LEFT SINGLE QUOTATION MARK" #x2018)
-    ("RIGHT SINGLE QUOTATION MARK" #x2019)
-    ("SINGLE LOW-9 QUOTATION MARK" #x201A)
-    ("SINGLE HIGH-REVERSED-9 QUOTATION MARK" #x201B)
-    ("LEFT DOUBLE QUOTATION MARK" #x201C)
-    ("RIGHT DOUBLE QUOTATION MARK" #x201D)
-    ("DOUBLE LOW-9 QUOTATION MARK" #x201E)
-    ("DOUBLE HIGH-REVERSED-9 QUOTATION MARK" #x201F)
-    ("DAGGER" #x2020)
-    ("DOUBLE DAGGER" #x2021)
-    ("BULLET" #x2022)
-    ("TRIANGULAR BULLET" #x2023)
-    ("ONE DOT LEADER" #x2024)
-    ("TWO DOT LEADER" #x2025)
-    ("HORIZONTAL ELLIPSIS" #x2026)
-    ("HYPHENATION POINT" #x2027)
-    ("LINE SEPARATOR" #x2028)
-    ("PARAGRAPH SEPARATOR" #x2029)
-    ("LEFT-TO-RIGHT EMBEDDING" #x202A)
-    ("RIGHT-TO-LEFT EMBEDDING" #x202B)
-    ("POP DIRECTIONAL FORMATTING" #x202C)
-    ("LEFT-TO-RIGHT OVERRIDE" #x202D)
-    ("RIGHT-TO-LEFT OVERRIDE" #x202E)
-    ("NARROW NO-BREAK SPACE" #x202F)
-    ("PER MILLE SIGN" #x2030)
-    ("PER TEN THOUSAND SIGN" #x2031)
-    ("PRIME" #x2032)
-    ("DOUBLE PRIME" #x2033)
-    ("TRIPLE PRIME" #x2034)
-    ("REVERSED PRIME" #x2035)
-    ("REVERSED DOUBLE PRIME" #x2036)
-    ("REVERSED TRIPLE PRIME" #x2037)
-    ("CARET" #x2038)
-    ("SINGLE LEFT-POINTING ANGLE QUOTATION MARK" #x2039)
-    ("SINGLE RIGHT-POINTING ANGLE QUOTATION MARK" #x203A)
-    ("REFERENCE MARK" #x203B)
-    ("DOUBLE EXCLAMATION MARK" #x203C)
-    ("INTERROBANG" #x203D)
-    ("OVERLINE" #x203E)
-    ("UNDERTIE" #x203F)
-    ("CHARACTER TIE" #x2040)
-    ("CARET INSERTION POINT" #x2041)
-    ("ASTERISM" #x2042)
-    ("HYPHEN BULLET" #x2043)
-    ("FRACTION SLASH" #x2044)
-    ("LEFT SQUARE BRACKET WITH QUILL" #x2045)
-    ("RIGHT SQUARE BRACKET WITH QUILL" #x2046)
-    ("DOUBLE QUESTION MARK" #x2047)
-    ("QUESTION EXCLAMATION MARK" #x2048)
-    ("EXCLAMATION QUESTION MARK" #x2049)
-    ("TIRONIAN SIGN ET" #x204A)
-    ("REVERSED PILCROW SIGN" #x204B)
-    ("BLACK LEFTWARDS BULLET" #x204C)
-    ("BLACK RIGHTWARDS BULLET" #x204D)
-    ("LOW ASTERISK" #x204E)
-    ("REVERSED SEMICOLON" #x204F)
-    ("CLOSE UP" #x2050)
-    ("TWO ASTERISKS ALIGNED VERTICALLY" #x2051)
-    ("COMMERCIAL MINUS SIGN" #x2052)
-    ("QUADRUPLE PRIME" #x2057)
-    ("MEDIUM MATHEMATICAL SPACE" #x205F)
-    ("WORD JOINER" #x2060)
-    ("FUNCTION APPLICATION" #x2061)
-    ("INVISIBLE TIMES" #x2062)
-    ("INVISIBLE SEPARATOR" #x2063)
-    ("INHIBIT SYMMETRIC SWAPPING" #x206A)
-    ("ACTIVATE SYMMETRIC SWAPPING" #x206B)
-    ("INHIBIT ARABIC FORM SHAPING" #x206C)
-    ("ACTIVATE ARABIC FORM SHAPING" #x206D)
-    ("NATIONAL DIGIT SHAPES" #x206E)
-    ("NOMINAL DIGIT SHAPES" #x206F)
-    ))
-
diff --git a/etc/nxml/02070-0209F.el b/etc/nxml/02070-0209F.el
deleted file mode 100644 (file)
index e7c3f21..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-(nxml-define-char-name-set 'superscripts-and-subscripts
-  '(("SUPERSCRIPT ZERO" #x2070)
-    ("SUPERSCRIPT LATIN SMALL LETTER I" #x2071)
-    ("SUPERSCRIPT FOUR" #x2074)
-    ("SUPERSCRIPT FIVE" #x2075)
-    ("SUPERSCRIPT SIX" #x2076)
-    ("SUPERSCRIPT SEVEN" #x2077)
-    ("SUPERSCRIPT EIGHT" #x2078)
-    ("SUPERSCRIPT NINE" #x2079)
-    ("SUPERSCRIPT PLUS SIGN" #x207A)
-    ("SUPERSCRIPT MINUS" #x207B)
-    ("SUPERSCRIPT EQUALS SIGN" #x207C)
-    ("SUPERSCRIPT LEFT PARENTHESIS" #x207D)
-    ("SUPERSCRIPT RIGHT PARENTHESIS" #x207E)
-    ("SUPERSCRIPT LATIN SMALL LETTER N" #x207F)
-    ("SUBSCRIPT ZERO" #x2080)
-    ("SUBSCRIPT ONE" #x2081)
-    ("SUBSCRIPT TWO" #x2082)
-    ("SUBSCRIPT THREE" #x2083)
-    ("SUBSCRIPT FOUR" #x2084)
-    ("SUBSCRIPT FIVE" #x2085)
-    ("SUBSCRIPT SIX" #x2086)
-    ("SUBSCRIPT SEVEN" #x2087)
-    ("SUBSCRIPT EIGHT" #x2088)
-    ("SUBSCRIPT NINE" #x2089)
-    ("SUBSCRIPT PLUS SIGN" #x208A)
-    ("SUBSCRIPT MINUS" #x208B)
-    ("SUBSCRIPT EQUALS SIGN" #x208C)
-    ("SUBSCRIPT LEFT PARENTHESIS" #x208D)
-    ("SUBSCRIPT RIGHT PARENTHESIS" #x208E)
-    ))
-
diff --git a/etc/nxml/020A0-020CF.el b/etc/nxml/020A0-020CF.el
deleted file mode 100644 (file)
index a1df8bc..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(nxml-define-char-name-set 'currency-symbols
-  '(("EURO-CURRENCY SIGN" #x20A0)
-    ("COLON SIGN" #x20A1)
-    ("CRUZEIRO SIGN" #x20A2)
-    ("FRENCH FRANC SIGN" #x20A3)
-    ("LIRA SIGN" #x20A4)
-    ("MILL SIGN" #x20A5)
-    ("NAIRA SIGN" #x20A6)
-    ("PESETA SIGN" #x20A7)
-    ("RUPEE SIGN" #x20A8)
-    ("WON SIGN" #x20A9)
-    ("NEW SHEQEL SIGN" #x20AA)
-    ("DONG SIGN" #x20AB)
-    ("EURO SIGN" #x20AC)
-    ("KIP SIGN" #x20AD)
-    ("TUGRIK SIGN" #x20AE)
-    ("DRACHMA SIGN" #x20AF)
-    ("GERMAN PENNY SIGN" #x20B0)
-    ("PESO SIGN" #x20B1)
-    ))
-
diff --git a/etc/nxml/020D0-020FF.el b/etc/nxml/020D0-020FF.el
deleted file mode 100644 (file)
index 7dcc145..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-(nxml-define-char-name-set 'combining-diacritical-marks-for-symbols
-  '(("COMBINING LEFT HARPOON ABOVE" #x20D0)
-    ("COMBINING RIGHT HARPOON ABOVE" #x20D1)
-    ("COMBINING LONG VERTICAL LINE OVERLAY" #x20D2)
-    ("COMBINING SHORT VERTICAL LINE OVERLAY" #x20D3)
-    ("COMBINING ANTICLOCKWISE ARROW ABOVE" #x20D4)
-    ("COMBINING CLOCKWISE ARROW ABOVE" #x20D5)
-    ("COMBINING LEFT ARROW ABOVE" #x20D6)
-    ("COMBINING RIGHT ARROW ABOVE" #x20D7)
-    ("COMBINING RING OVERLAY" #x20D8)
-    ("COMBINING CLOCKWISE RING OVERLAY" #x20D9)
-    ("COMBINING ANTICLOCKWISE RING OVERLAY" #x20DA)
-    ("COMBINING THREE DOTS ABOVE" #x20DB)
-    ("COMBINING FOUR DOTS ABOVE" #x20DC)
-    ("COMBINING ENCLOSING CIRCLE" #x20DD)
-    ("COMBINING ENCLOSING SQUARE" #x20DE)
-    ("COMBINING ENCLOSING DIAMOND" #x20DF)
-    ("COMBINING ENCLOSING CIRCLE BACKSLASH" #x20E0)
-    ("COMBINING LEFT RIGHT ARROW ABOVE" #x20E1)
-    ("COMBINING ENCLOSING SCREEN" #x20E2)
-    ("COMBINING ENCLOSING KEYCAP" #x20E3)
-    ("COMBINING ENCLOSING UPWARD POINTING TRIANGLE" #x20E4)
-    ("COMBINING REVERSE SOLIDUS OVERLAY" #x20E5)
-    ("COMBINING DOUBLE VERTICAL STROKE OVERLAY" #x20E6)
-    ("COMBINING ANNUITY SYMBOL" #x20E7)
-    ("COMBINING TRIPLE UNDERDOT" #x20E8)
-    ("COMBINING WIDE BRIDGE ABOVE" #x20E9)
-    ("COMBINING LEFTWARDS ARROW OVERLAY" #x20EA)
-    ))
-
diff --git a/etc/nxml/02100-0214F.el b/etc/nxml/02100-0214F.el
deleted file mode 100644 (file)
index df92477..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-(nxml-define-char-name-set 'letterlike-symbols
-  '(("ACCOUNT OF" #x2100)
-    ("ADDRESSED TO THE SUBJECT" #x2101)
-    ("DOUBLE-STRUCK CAPITAL C" #x2102)
-    ("DEGREE CELSIUS" #x2103)
-    ("CENTRE LINE SYMBOL" #x2104)
-    ("CARE OF" #x2105)
-    ("CADA UNA" #x2106)
-    ("EULER CONSTANT" #x2107)
-    ("SCRUPLE" #x2108)
-    ("DEGREE FAHRENHEIT" #x2109)
-    ("SCRIPT SMALL G" #x210A)
-    ("SCRIPT CAPITAL H" #x210B)
-    ("BLACK-LETTER CAPITAL H" #x210C)
-    ("DOUBLE-STRUCK CAPITAL H" #x210D)
-    ("PLANCK CONSTANT" #x210E)
-    ("PLANCK CONSTANT OVER TWO PI" #x210F)
-    ("SCRIPT CAPITAL I" #x2110)
-    ("BLACK-LETTER CAPITAL I" #x2111)
-    ("SCRIPT CAPITAL L" #x2112)
-    ("SCRIPT SMALL L" #x2113)
-    ("L B BAR SYMBOL" #x2114)
-    ("DOUBLE-STRUCK CAPITAL N" #x2115)
-    ("NUMERO SIGN" #x2116)
-    ("SOUND RECORDING COPYRIGHT" #x2117)
-    ("SCRIPT CAPITAL P" #x2118)
-    ("DOUBLE-STRUCK CAPITAL P" #x2119)
-    ("DOUBLE-STRUCK CAPITAL Q" #x211A)
-    ("SCRIPT CAPITAL R" #x211B)
-    ("BLACK-LETTER CAPITAL R" #x211C)
-    ("DOUBLE-STRUCK CAPITAL R" #x211D)
-    ("PRESCRIPTION TAKE" #x211E)
-    ("RESPONSE" #x211F)
-    ("SERVICE MARK" #x2120)
-    ("TELEPHONE SIGN" #x2121)
-    ("TRADE MARK SIGN" #x2122)
-    ("VERSICLE" #x2123)
-    ("DOUBLE-STRUCK CAPITAL Z" #x2124)
-    ("OUNCE SIGN" #x2125)
-    ("OHM SIGN" #x2126)
-    ("INVERTED OHM SIGN" #x2127)
-    ("BLACK-LETTER CAPITAL Z" #x2128)
-    ("TURNED GREEK SMALL LETTER IOTA" #x2129)
-    ("KELVIN SIGN" #x212A)
-    ("ANGSTROM SIGN" #x212B)
-    ("SCRIPT CAPITAL B" #x212C)
-    ("BLACK-LETTER CAPITAL C" #x212D)
-    ("ESTIMATED SYMBOL" #x212E)
-    ("SCRIPT SMALL E" #x212F)
-    ("SCRIPT CAPITAL E" #x2130)
-    ("SCRIPT CAPITAL F" #x2131)
-    ("TURNED CAPITAL F" #x2132)
-    ("SCRIPT CAPITAL M" #x2133)
-    ("SCRIPT SMALL O" #x2134)
-    ("ALEF SYMBOL" #x2135)
-    ("BET SYMBOL" #x2136)
-    ("GIMEL SYMBOL" #x2137)
-    ("DALET SYMBOL" #x2138)
-    ("INFORMATION SOURCE" #x2139)
-    ("ROTATED CAPITAL Q" #x213A)
-    ("DOUBLE-STRUCK SMALL GAMMA" #x213D)
-    ("DOUBLE-STRUCK CAPITAL GAMMA" #x213E)
-    ("DOUBLE-STRUCK CAPITAL PI" #x213F)
-    ("DOUBLE-STRUCK N-ARY SUMMATION" #x2140)
-    ("TURNED SANS-SERIF CAPITAL G" #x2141)
-    ("TURNED SANS-SERIF CAPITAL L" #x2142)
-    ("REVERSED SANS-SERIF CAPITAL L" #x2143)
-    ("TURNED SANS-SERIF CAPITAL Y" #x2144)
-    ("DOUBLE-STRUCK ITALIC CAPITAL D" #x2145)
-    ("DOUBLE-STRUCK ITALIC SMALL D" #x2146)
-    ("DOUBLE-STRUCK ITALIC SMALL E" #x2147)
-    ("DOUBLE-STRUCK ITALIC SMALL I" #x2148)
-    ("DOUBLE-STRUCK ITALIC SMALL J" #x2149)
-    ("PROPERTY LINE" #x214A)
-    ("TURNED AMPERSAND" #x214B)
-    ))
-
diff --git a/etc/nxml/02150-0218F.el b/etc/nxml/02150-0218F.el
deleted file mode 100644 (file)
index e4b7bcb..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-(nxml-define-char-name-set 'number-forms
-  '(("VULGAR FRACTION ONE THIRD" #x2153)
-    ("VULGAR FRACTION TWO THIRDS" #x2154)
-    ("VULGAR FRACTION ONE FIFTH" #x2155)
-    ("VULGAR FRACTION TWO FIFTHS" #x2156)
-    ("VULGAR FRACTION THREE FIFTHS" #x2157)
-    ("VULGAR FRACTION FOUR FIFTHS" #x2158)
-    ("VULGAR FRACTION ONE SIXTH" #x2159)
-    ("VULGAR FRACTION FIVE SIXTHS" #x215A)
-    ("VULGAR FRACTION ONE EIGHTH" #x215B)
-    ("VULGAR FRACTION THREE EIGHTHS" #x215C)
-    ("VULGAR FRACTION FIVE EIGHTHS" #x215D)
-    ("VULGAR FRACTION SEVEN EIGHTHS" #x215E)
-    ("FRACTION NUMERATOR ONE" #x215F)
-    ("ROMAN NUMERAL ONE" #x2160)
-    ("ROMAN NUMERAL TWO" #x2161)
-    ("ROMAN NUMERAL THREE" #x2162)
-    ("ROMAN NUMERAL FOUR" #x2163)
-    ("ROMAN NUMERAL FIVE" #x2164)
-    ("ROMAN NUMERAL SIX" #x2165)
-    ("ROMAN NUMERAL SEVEN" #x2166)
-    ("ROMAN NUMERAL EIGHT" #x2167)
-    ("ROMAN NUMERAL NINE" #x2168)
-    ("ROMAN NUMERAL TEN" #x2169)
-    ("ROMAN NUMERAL ELEVEN" #x216A)
-    ("ROMAN NUMERAL TWELVE" #x216B)
-    ("ROMAN NUMERAL FIFTY" #x216C)
-    ("ROMAN NUMERAL ONE HUNDRED" #x216D)
-    ("ROMAN NUMERAL FIVE HUNDRED" #x216E)
-    ("ROMAN NUMERAL ONE THOUSAND" #x216F)
-    ("SMALL ROMAN NUMERAL ONE" #x2170)
-    ("SMALL ROMAN NUMERAL TWO" #x2171)
-    ("SMALL ROMAN NUMERAL THREE" #x2172)
-    ("SMALL ROMAN NUMERAL FOUR" #x2173)
-    ("SMALL ROMAN NUMERAL FIVE" #x2174)
-    ("SMALL ROMAN NUMERAL SIX" #x2175)
-    ("SMALL ROMAN NUMERAL SEVEN" #x2176)
-    ("SMALL ROMAN NUMERAL EIGHT" #x2177)
-    ("SMALL ROMAN NUMERAL NINE" #x2178)
-    ("SMALL ROMAN NUMERAL TEN" #x2179)
-    ("SMALL ROMAN NUMERAL ELEVEN" #x217A)
-    ("SMALL ROMAN NUMERAL TWELVE" #x217B)
-    ("SMALL ROMAN NUMERAL FIFTY" #x217C)
-    ("SMALL ROMAN NUMERAL ONE HUNDRED" #x217D)
-    ("SMALL ROMAN NUMERAL FIVE HUNDRED" #x217E)
-    ("SMALL ROMAN NUMERAL ONE THOUSAND" #x217F)
-    ("ROMAN NUMERAL ONE THOUSAND C D" #x2180)
-    ("ROMAN NUMERAL FIVE THOUSAND" #x2181)
-    ("ROMAN NUMERAL TEN THOUSAND" #x2182)
-    ("ROMAN NUMERAL REVERSED ONE HUNDRED" #x2183)
-    ))
-
diff --git a/etc/nxml/02190-021FF.el b/etc/nxml/02190-021FF.el
deleted file mode 100644 (file)
index e8b6861..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-(nxml-define-char-name-set 'arrows
-  '(("LEFTWARDS ARROW" #x2190)
-    ("UPWARDS ARROW" #x2191)
-    ("RIGHTWARDS ARROW" #x2192)
-    ("DOWNWARDS ARROW" #x2193)
-    ("LEFT RIGHT ARROW" #x2194)
-    ("UP DOWN ARROW" #x2195)
-    ("NORTH WEST ARROW" #x2196)
-    ("NORTH EAST ARROW" #x2197)
-    ("SOUTH EAST ARROW" #x2198)
-    ("SOUTH WEST ARROW" #x2199)
-    ("LEFTWARDS ARROW WITH STROKE" #x219A)
-    ("RIGHTWARDS ARROW WITH STROKE" #x219B)
-    ("LEFTWARDS WAVE ARROW" #x219C)
-    ("RIGHTWARDS WAVE ARROW" #x219D)
-    ("LEFTWARDS TWO HEADED ARROW" #x219E)
-    ("UPWARDS TWO HEADED ARROW" #x219F)
-    ("RIGHTWARDS TWO HEADED ARROW" #x21A0)
-    ("DOWNWARDS TWO HEADED ARROW" #x21A1)
-    ("LEFTWARDS ARROW WITH TAIL" #x21A2)
-    ("RIGHTWARDS ARROW WITH TAIL" #x21A3)
-    ("LEFTWARDS ARROW FROM BAR" #x21A4)
-    ("UPWARDS ARROW FROM BAR" #x21A5)
-    ("RIGHTWARDS ARROW FROM BAR" #x21A6)
-    ("DOWNWARDS ARROW FROM BAR" #x21A7)
-    ("UP DOWN ARROW WITH BASE" #x21A8)
-    ("LEFTWARDS ARROW WITH HOOK" #x21A9)
-    ("RIGHTWARDS ARROW WITH HOOK" #x21AA)
-    ("LEFTWARDS ARROW WITH LOOP" #x21AB)
-    ("RIGHTWARDS ARROW WITH LOOP" #x21AC)
-    ("LEFT RIGHT WAVE ARROW" #x21AD)
-    ("LEFT RIGHT ARROW WITH STROKE" #x21AE)
-    ("DOWNWARDS ZIGZAG ARROW" #x21AF)
-    ("UPWARDS ARROW WITH TIP LEFTWARDS" #x21B0)
-    ("UPWARDS ARROW WITH TIP RIGHTWARDS" #x21B1)
-    ("DOWNWARDS ARROW WITH TIP LEFTWARDS" #x21B2)
-    ("DOWNWARDS ARROW WITH TIP RIGHTWARDS" #x21B3)
-    ("RIGHTWARDS ARROW WITH CORNER DOWNWARDS" #x21B4)
-    ("DOWNWARDS ARROW WITH CORNER LEFTWARDS" #x21B5)
-    ("ANTICLOCKWISE TOP SEMICIRCLE ARROW" #x21B6)
-    ("CLOCKWISE TOP SEMICIRCLE ARROW" #x21B7)
-    ("NORTH WEST ARROW TO LONG BAR" #x21B8)
-    ("LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR" #x21B9)
-    ("ANTICLOCKWISE OPEN CIRCLE ARROW" #x21BA)
-    ("CLOCKWISE OPEN CIRCLE ARROW" #x21BB)
-    ("LEFTWARDS HARPOON WITH BARB UPWARDS" #x21BC)
-    ("LEFTWARDS HARPOON WITH BARB DOWNWARDS" #x21BD)
-    ("UPWARDS HARPOON WITH BARB RIGHTWARDS" #x21BE)
-    ("UPWARDS HARPOON WITH BARB LEFTWARDS" #x21BF)
-    ("RIGHTWARDS HARPOON WITH BARB UPWARDS" #x21C0)
-    ("RIGHTWARDS HARPOON WITH BARB DOWNWARDS" #x21C1)
-    ("DOWNWARDS HARPOON WITH BARB RIGHTWARDS" #x21C2)
-    ("DOWNWARDS HARPOON WITH BARB LEFTWARDS" #x21C3)
-    ("RIGHTWARDS ARROW OVER LEFTWARDS ARROW" #x21C4)
-    ("UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW" #x21C5)
-    ("LEFTWARDS ARROW OVER RIGHTWARDS ARROW" #x21C6)
-    ("LEFTWARDS PAIRED ARROWS" #x21C7)
-    ("UPWARDS PAIRED ARROWS" #x21C8)
-    ("RIGHTWARDS PAIRED ARROWS" #x21C9)
-    ("DOWNWARDS PAIRED ARROWS" #x21CA)
-    ("LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON" #x21CB)
-    ("RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON" #x21CC)
-    ("LEFTWARDS DOUBLE ARROW WITH STROKE" #x21CD)
-    ("LEFT RIGHT DOUBLE ARROW WITH STROKE" #x21CE)
-    ("RIGHTWARDS DOUBLE ARROW WITH STROKE" #x21CF)
-    ("LEFTWARDS DOUBLE ARROW" #x21D0)
-    ("UPWARDS DOUBLE ARROW" #x21D1)
-    ("RIGHTWARDS DOUBLE ARROW" #x21D2)
-    ("DOWNWARDS DOUBLE ARROW" #x21D3)
-    ("LEFT RIGHT DOUBLE ARROW" #x21D4)
-    ("UP DOWN DOUBLE ARROW" #x21D5)
-    ("NORTH WEST DOUBLE ARROW" #x21D6)
-    ("NORTH EAST DOUBLE ARROW" #x21D7)
-    ("SOUTH EAST DOUBLE ARROW" #x21D8)
-    ("SOUTH WEST DOUBLE ARROW" #x21D9)
-    ("LEFTWARDS TRIPLE ARROW" #x21DA)
-    ("RIGHTWARDS TRIPLE ARROW" #x21DB)
-    ("LEFTWARDS SQUIGGLE ARROW" #x21DC)
-    ("RIGHTWARDS SQUIGGLE ARROW" #x21DD)
-    ("UPWARDS ARROW WITH DOUBLE STROKE" #x21DE)
-    ("DOWNWARDS ARROW WITH DOUBLE STROKE" #x21DF)
-    ("LEFTWARDS DASHED ARROW" #x21E0)
-    ("UPWARDS DASHED ARROW" #x21E1)
-    ("RIGHTWARDS DASHED ARROW" #x21E2)
-    ("DOWNWARDS DASHED ARROW" #x21E3)
-    ("LEFTWARDS ARROW TO BAR" #x21E4)
-    ("RIGHTWARDS ARROW TO BAR" #x21E5)
-    ("LEFTWARDS WHITE ARROW" #x21E6)
-    ("UPWARDS WHITE ARROW" #x21E7)
-    ("RIGHTWARDS WHITE ARROW" #x21E8)
-    ("DOWNWARDS WHITE ARROW" #x21E9)
-    ("UPWARDS WHITE ARROW FROM BAR" #x21EA)
-    ("UPWARDS WHITE ARROW ON PEDESTAL" #x21EB)
-    ("UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR" #x21EC)
-    ("UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR" #x21ED)
-    ("UPWARDS WHITE DOUBLE ARROW" #x21EE)
-    ("UPWARDS WHITE DOUBLE ARROW ON PEDESTAL" #x21EF)
-    ("RIGHTWARDS WHITE ARROW FROM WALL" #x21F0)
-    ("NORTH WEST ARROW TO CORNER" #x21F1)
-    ("SOUTH EAST ARROW TO CORNER" #x21F2)
-    ("UP DOWN WHITE ARROW" #x21F3)
-    ("RIGHT ARROW WITH SMALL CIRCLE" #x21F4)
-    ("DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW" #x21F5)
-    ("THREE RIGHTWARDS ARROWS" #x21F6)
-    ("LEFTWARDS ARROW WITH VERTICAL STROKE" #x21F7)
-    ("RIGHTWARDS ARROW WITH VERTICAL STROKE" #x21F8)
-    ("LEFT RIGHT ARROW WITH VERTICAL STROKE" #x21F9)
-    ("LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FA)
-    ("RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FB)
-    ("LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE" #x21FC)
-    ("LEFTWARDS OPEN-HEADED ARROW" #x21FD)
-    ("RIGHTWARDS OPEN-HEADED ARROW" #x21FE)
-    ("LEFT RIGHT OPEN-HEADED ARROW" #x21FF)
-    ))
-
diff --git a/etc/nxml/02200-022FF.el b/etc/nxml/02200-022FF.el
deleted file mode 100644 (file)
index 2889a1c..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-(nxml-define-char-name-set 'mathematical-operators
-  '(("FOR ALL" #x2200)
-    ("COMPLEMENT" #x2201)
-    ("PARTIAL DIFFERENTIAL" #x2202)
-    ("THERE EXISTS" #x2203)
-    ("THERE DOES NOT EXIST" #x2204)
-    ("EMPTY SET" #x2205)
-    ("INCREMENT" #x2206)
-    ("NABLA" #x2207)
-    ("ELEMENT OF" #x2208)
-    ("NOT AN ELEMENT OF" #x2209)
-    ("SMALL ELEMENT OF" #x220A)
-    ("CONTAINS AS MEMBER" #x220B)
-    ("DOES NOT CONTAIN AS MEMBER" #x220C)
-    ("SMALL CONTAINS AS MEMBER" #x220D)
-    ("END OF PROOF" #x220E)
-    ("N-ARY PRODUCT" #x220F)
-    ("N-ARY COPRODUCT" #x2210)
-    ("N-ARY SUMMATION" #x2211)
-    ("MINUS SIGN" #x2212)
-    ("MINUS-OR-PLUS SIGN" #x2213)
-    ("DOT PLUS" #x2214)
-    ("DIVISION SLASH" #x2215)
-    ("SET MINUS" #x2216)
-    ("ASTERISK OPERATOR" #x2217)
-    ("RING OPERATOR" #x2218)
-    ("BULLET OPERATOR" #x2219)
-    ("SQUARE ROOT" #x221A)
-    ("CUBE ROOT" #x221B)
-    ("FOURTH ROOT" #x221C)
-    ("PROPORTIONAL TO" #x221D)
-    ("INFINITY" #x221E)
-    ("RIGHT ANGLE" #x221F)
-    ("ANGLE" #x2220)
-    ("MEASURED ANGLE" #x2221)
-    ("SPHERICAL ANGLE" #x2222)
-    ("DIVIDES" #x2223)
-    ("DOES NOT DIVIDE" #x2224)
-    ("PARALLEL TO" #x2225)
-    ("NOT PARALLEL TO" #x2226)
-    ("LOGICAL AND" #x2227)
-    ("LOGICAL OR" #x2228)
-    ("INTERSECTION" #x2229)
-    ("UNION" #x222A)
-    ("INTEGRAL" #x222B)
-    ("DOUBLE INTEGRAL" #x222C)
-    ("TRIPLE INTEGRAL" #x222D)
-    ("CONTOUR INTEGRAL" #x222E)
-    ("SURFACE INTEGRAL" #x222F)
-    ("VOLUME INTEGRAL" #x2230)
-    ("CLOCKWISE INTEGRAL" #x2231)
-    ("CLOCKWISE CONTOUR INTEGRAL" #x2232)
-    ("ANTICLOCKWISE CONTOUR INTEGRAL" #x2233)
-    ("THEREFORE" #x2234)
-    ("BECAUSE" #x2235)
-    ("RATIO" #x2236)
-    ("PROPORTION" #x2237)
-    ("DOT MINUS" #x2238)
-    ("EXCESS" #x2239)
-    ("GEOMETRIC PROPORTION" #x223A)
-    ("HOMOTHETIC" #x223B)
-    ("TILDE OPERATOR" #x223C)
-    ("REVERSED TILDE" #x223D)
-    ("INVERTED LAZY S" #x223E)
-    ("SINE WAVE" #x223F)
-    ("WREATH PRODUCT" #x2240)
-    ("NOT TILDE" #x2241)
-    ("MINUS TILDE" #x2242)
-    ("ASYMPTOTICALLY EQUAL TO" #x2243)
-    ("NOT ASYMPTOTICALLY EQUAL TO" #x2244)
-    ("APPROXIMATELY EQUAL TO" #x2245)
-    ("APPROXIMATELY BUT NOT ACTUALLY EQUAL TO" #x2246)
-    ("NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO" #x2247)
-    ("ALMOST EQUAL TO" #x2248)
-    ("NOT ALMOST EQUAL TO" #x2249)
-    ("ALMOST EQUAL OR EQUAL TO" #x224A)
-    ("TRIPLE TILDE" #x224B)
-    ("ALL EQUAL TO" #x224C)
-    ("EQUIVALENT TO" #x224D)
-    ("GEOMETRICALLY EQUIVALENT TO" #x224E)
-    ("DIFFERENCE BETWEEN" #x224F)
-    ("APPROACHES THE LIMIT" #x2250)
-    ("GEOMETRICALLY EQUAL TO" #x2251)
-    ("APPROXIMATELY EQUAL TO OR THE IMAGE OF" #x2252)
-    ("IMAGE OF OR APPROXIMATELY EQUAL TO" #x2253)
-    ("COLON EQUALS" #x2254)
-    ("EQUALS COLON" #x2255)
-    ("RING IN EQUAL TO" #x2256)
-    ("RING EQUAL TO" #x2257)
-    ("CORRESPONDS TO" #x2258)
-    ("ESTIMATES" #x2259)
-    ("EQUIANGULAR TO" #x225A)
-    ("STAR EQUALS" #x225B)
-    ("DELTA EQUAL TO" #x225C)
-    ("EQUAL TO BY DEFINITION" #x225D)
-    ("MEASURED BY" #x225E)
-    ("QUESTIONED EQUAL TO" #x225F)
-    ("NOT EQUAL TO" #x2260)
-    ("IDENTICAL TO" #x2261)
-    ("NOT IDENTICAL TO" #x2262)
-    ("STRICTLY EQUIVALENT TO" #x2263)
-    ("LESS-THAN OR EQUAL TO" #x2264)
-    ("GREATER-THAN OR EQUAL TO" #x2265)
-    ("LESS-THAN OVER EQUAL TO" #x2266)
-    ("GREATER-THAN OVER EQUAL TO" #x2267)
-    ("LESS-THAN BUT NOT EQUAL TO" #x2268)
-    ("GREATER-THAN BUT NOT EQUAL TO" #x2269)
-    ("MUCH LESS-THAN" #x226A)
-    ("MUCH GREATER-THAN" #x226B)
-    ("BETWEEN" #x226C)
-    ("NOT EQUIVALENT TO" #x226D)
-    ("NOT LESS-THAN" #x226E)
-    ("NOT GREATER-THAN" #x226F)
-    ("NEITHER LESS-THAN NOR EQUAL TO" #x2270)
-    ("NEITHER GREATER-THAN NOR EQUAL TO" #x2271)
-    ("LESS-THAN OR EQUIVALENT TO" #x2272)
-    ("GREATER-THAN OR EQUIVALENT TO" #x2273)
-    ("NEITHER LESS-THAN NOR EQUIVALENT TO" #x2274)
-    ("NEITHER GREATER-THAN NOR EQUIVALENT TO" #x2275)
-    ("LESS-THAN OR GREATER-THAN" #x2276)
-    ("GREATER-THAN OR LESS-THAN" #x2277)
-    ("NEITHER LESS-THAN NOR GREATER-THAN" #x2278)
-    ("NEITHER GREATER-THAN NOR LESS-THAN" #x2279)
-    ("PRECEDES" #x227A)
-    ("SUCCEEDS" #x227B)
-    ("PRECEDES OR EQUAL TO" #x227C)
-    ("SUCCEEDS OR EQUAL TO" #x227D)
-    ("PRECEDES OR EQUIVALENT TO" #x227E)
-    ("SUCCEEDS OR EQUIVALENT TO" #x227F)
-    ("DOES NOT PRECEDE" #x2280)
-    ("DOES NOT SUCCEED" #x2281)
-    ("SUBSET OF" #x2282)
-    ("SUPERSET OF" #x2283)
-    ("NOT A SUBSET OF" #x2284)
-    ("NOT A SUPERSET OF" #x2285)
-    ("SUBSET OF OR EQUAL TO" #x2286)
-    ("SUPERSET OF OR EQUAL TO" #x2287)
-    ("NEITHER A SUBSET OF NOR EQUAL TO" #x2288)
-    ("NEITHER A SUPERSET OF NOR EQUAL TO" #x2289)
-    ("SUBSET OF WITH NOT EQUAL TO" #x228A)
-    ("SUPERSET OF WITH NOT EQUAL TO" #x228B)
-    ("MULTISET" #x228C)
-    ("MULTISET MULTIPLICATION" #x228D)
-    ("MULTISET UNION" #x228E)
-    ("SQUARE IMAGE OF" #x228F)
-    ("SQUARE ORIGINAL OF" #x2290)
-    ("SQUARE IMAGE OF OR EQUAL TO" #x2291)
-    ("SQUARE ORIGINAL OF OR EQUAL TO" #x2292)
-    ("SQUARE CAP" #x2293)
-    ("SQUARE CUP" #x2294)
-    ("CIRCLED PLUS" #x2295)
-    ("CIRCLED MINUS" #x2296)
-    ("CIRCLED TIMES" #x2297)
-    ("CIRCLED DIVISION SLASH" #x2298)
-    ("CIRCLED DOT OPERATOR" #x2299)
-    ("CIRCLED RING OPERATOR" #x229A)
-    ("CIRCLED ASTERISK OPERATOR" #x229B)
-    ("CIRCLED EQUALS" #x229C)
-    ("CIRCLED DASH" #x229D)
-    ("SQUARED PLUS" #x229E)
-    ("SQUARED MINUS" #x229F)
-    ("SQUARED TIMES" #x22A0)
-    ("SQUARED DOT OPERATOR" #x22A1)
-    ("RIGHT TACK" #x22A2)
-    ("LEFT TACK" #x22A3)
-    ("DOWN TACK" #x22A4)
-    ("UP TACK" #x22A5)
-    ("ASSERTION" #x22A6)
-    ("MODELS" #x22A7)
-    ("TRUE" #x22A8)
-    ("FORCES" #x22A9)
-    ("TRIPLE VERTICAL BAR RIGHT TURNSTILE" #x22AA)
-    ("DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AB)
-    ("DOES NOT PROVE" #x22AC)
-    ("NOT TRUE" #x22AD)
-    ("DOES NOT FORCE" #x22AE)
-    ("NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AF)
-    ("PRECEDES UNDER RELATION" #x22B0)
-    ("SUCCEEDS UNDER RELATION" #x22B1)
-    ("NORMAL SUBGROUP OF" #x22B2)
-    ("CONTAINS AS NORMAL SUBGROUP" #x22B3)
-    ("NORMAL SUBGROUP OF OR EQUAL TO" #x22B4)
-    ("CONTAINS AS NORMAL SUBGROUP OR EQUAL TO" #x22B5)
-    ("ORIGINAL OF" #x22B6)
-    ("IMAGE OF" #x22B7)
-    ("MULTIMAP" #x22B8)
-    ("HERMITIAN CONJUGATE MATRIX" #x22B9)
-    ("INTERCALATE" #x22BA)
-    ("XOR" #x22BB)
-    ("NAND" #x22BC)
-    ("NOR" #x22BD)
-    ("RIGHT ANGLE WITH ARC" #x22BE)
-    ("RIGHT TRIANGLE" #x22BF)
-    ("N-ARY LOGICAL AND" #x22C0)
-    ("N-ARY LOGICAL OR" #x22C1)
-    ("N-ARY INTERSECTION" #x22C2)
-    ("N-ARY UNION" #x22C3)
-    ("DIAMOND OPERATOR" #x22C4)
-    ("DOT OPERATOR" #x22C5)
-    ("STAR OPERATOR" #x22C6)
-    ("DIVISION TIMES" #x22C7)
-    ("BOWTIE" #x22C8)
-    ("LEFT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22C9)
-    ("RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22CA)
-    ("LEFT SEMIDIRECT PRODUCT" #x22CB)
-    ("RIGHT SEMIDIRECT PRODUCT" #x22CC)
-    ("REVERSED TILDE EQUALS" #x22CD)
-    ("CURLY LOGICAL OR" #x22CE)
-    ("CURLY LOGICAL AND" #x22CF)
-    ("DOUBLE SUBSET" #x22D0)
-    ("DOUBLE SUPERSET" #x22D1)
-    ("DOUBLE INTERSECTION" #x22D2)
-    ("DOUBLE UNION" #x22D3)
-    ("PITCHFORK" #x22D4)
-    ("EQUAL AND PARALLEL TO" #x22D5)
-    ("LESS-THAN WITH DOT" #x22D6)
-    ("GREATER-THAN WITH DOT" #x22D7)
-    ("VERY MUCH LESS-THAN" #x22D8)
-    ("VERY MUCH GREATER-THAN" #x22D9)
-    ("LESS-THAN EQUAL TO OR GREATER-THAN" #x22DA)
-    ("GREATER-THAN EQUAL TO OR LESS-THAN" #x22DB)
-    ("EQUAL TO OR LESS-THAN" #x22DC)
-    ("EQUAL TO OR GREATER-THAN" #x22DD)
-    ("EQUAL TO OR PRECEDES" #x22DE)
-    ("EQUAL TO OR SUCCEEDS" #x22DF)
-    ("DOES NOT PRECEDE OR EQUAL" #x22E0)
-    ("DOES NOT SUCCEED OR EQUAL" #x22E1)
-    ("NOT SQUARE IMAGE OF OR EQUAL TO" #x22E2)
-    ("NOT SQUARE ORIGINAL OF OR EQUAL TO" #x22E3)
-    ("SQUARE IMAGE OF OR NOT EQUAL TO" #x22E4)
-    ("SQUARE ORIGINAL OF OR NOT EQUAL TO" #x22E5)
-    ("LESS-THAN BUT NOT EQUIVALENT TO" #x22E6)
-    ("GREATER-THAN BUT NOT EQUIVALENT TO" #x22E7)
-    ("PRECEDES BUT NOT EQUIVALENT TO" #x22E8)
-    ("SUCCEEDS BUT NOT EQUIVALENT TO" #x22E9)
-    ("NOT NORMAL SUBGROUP OF" #x22EA)
-    ("DOES NOT CONTAIN AS NORMAL SUBGROUP" #x22EB)
-    ("NOT NORMAL SUBGROUP OF OR EQUAL TO" #x22EC)
-    ("DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL" #x22ED)
-    ("VERTICAL ELLIPSIS" #x22EE)
-    ("MIDLINE HORIZONTAL ELLIPSIS" #x22EF)
-    ("UP RIGHT DIAGONAL ELLIPSIS" #x22F0)
-    ("DOWN RIGHT DIAGONAL ELLIPSIS" #x22F1)
-    ("ELEMENT OF WITH LONG HORIZONTAL STROKE" #x22F2)
-    ("ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F3)
-    ("SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F4)
-    ("ELEMENT OF WITH DOT ABOVE" #x22F5)
-    ("ELEMENT OF WITH OVERBAR" #x22F6)
-    ("SMALL ELEMENT OF WITH OVERBAR" #x22F7)
-    ("ELEMENT OF WITH UNDERBAR" #x22F8)
-    ("ELEMENT OF WITH TWO HORIZONTAL STROKES" #x22F9)
-    ("CONTAINS WITH LONG HORIZONTAL STROKE" #x22FA)
-    ("CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FB)
-    ("SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FC)
-    ("CONTAINS WITH OVERBAR" #x22FD)
-    ("SMALL CONTAINS WITH OVERBAR" #x22FE)
-    ("Z NOTATION BAG MEMBERSHIP" #x22FF)
-    ))
-
diff --git a/etc/nxml/02300-023FF.el b/etc/nxml/02300-023FF.el
deleted file mode 100644 (file)
index 2e7cd88..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-(nxml-define-char-name-set 'miscellaneous-technical
-  '(("DIAMETER SIGN" #x2300)
-    ("ELECTRIC ARROW" #x2301)
-    ("HOUSE" #x2302)
-    ("UP ARROWHEAD" #x2303)
-    ("DOWN ARROWHEAD" #x2304)
-    ("PROJECTIVE" #x2305)
-    ("PERSPECTIVE" #x2306)
-    ("WAVY LINE" #x2307)
-    ("LEFT CEILING" #x2308)
-    ("RIGHT CEILING" #x2309)
-    ("LEFT FLOOR" #x230A)
-    ("RIGHT FLOOR" #x230B)
-    ("BOTTOM RIGHT CROP" #x230C)
-    ("BOTTOM LEFT CROP" #x230D)
-    ("TOP RIGHT CROP" #x230E)
-    ("TOP LEFT CROP" #x230F)
-    ("REVERSED NOT SIGN" #x2310)
-    ("SQUARE LOZENGE" #x2311)
-    ("ARC" #x2312)
-    ("SEGMENT" #x2313)
-    ("SECTOR" #x2314)
-    ("TELEPHONE RECORDER" #x2315)
-    ("POSITION INDICATOR" #x2316)
-    ("VIEWDATA SQUARE" #x2317)
-    ("PLACE OF INTEREST SIGN" #x2318)
-    ("TURNED NOT SIGN" #x2319)
-    ("WATCH" #x231A)
-    ("HOURGLASS" #x231B)
-    ("TOP LEFT CORNER" #x231C)
-    ("TOP RIGHT CORNER" #x231D)
-    ("BOTTOM LEFT CORNER" #x231E)
-    ("BOTTOM RIGHT CORNER" #x231F)
-    ("TOP HALF INTEGRAL" #x2320)
-    ("BOTTOM HALF INTEGRAL" #x2321)
-    ("FROWN" #x2322)
-    ("SMILE" #x2323)
-    ("UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS" #x2324)
-    ("OPTION KEY" #x2325)
-    ("ERASE TO THE RIGHT" #x2326)
-    ("X IN A RECTANGLE BOX" #x2327)
-    ("KEYBOARD" #x2328)
-    ("LEFT-POINTING ANGLE BRACKET" #x2329)
-    ("RIGHT-POINTING ANGLE BRACKET" #x232A)
-    ("ERASE TO THE LEFT" #x232B)
-    ("BENZENE RING" #x232C)
-    ("CYLINDRICITY" #x232D)
-    ("ALL AROUND-PROFILE" #x232E)
-    ("SYMMETRY" #x232F)
-    ("TOTAL RUNOUT" #x2330)
-    ("DIMENSION ORIGIN" #x2331)
-    ("CONICAL TAPER" #x2332)
-    ("SLOPE" #x2333)
-    ("COUNTERBORE" #x2334)
-    ("COUNTERSINK" #x2335)
-    ("APL FUNCTIONAL SYMBOL I-BEAM" #x2336)
-    ("APL FUNCTIONAL SYMBOL SQUISH QUAD" #x2337)
-    ("APL FUNCTIONAL SYMBOL QUAD EQUAL" #x2338)
-    ("APL FUNCTIONAL SYMBOL QUAD DIVIDE" #x2339)
-    ("APL FUNCTIONAL SYMBOL QUAD DIAMOND" #x233A)
-    ("APL FUNCTIONAL SYMBOL QUAD JOT" #x233B)
-    ("APL FUNCTIONAL SYMBOL QUAD CIRCLE" #x233C)
-    ("APL FUNCTIONAL SYMBOL CIRCLE STILE" #x233D)
-    ("APL FUNCTIONAL SYMBOL CIRCLE JOT" #x233E)
-    ("APL FUNCTIONAL SYMBOL SLASH BAR" #x233F)
-    ("APL FUNCTIONAL SYMBOL BACKSLASH BAR" #x2340)
-    ("APL FUNCTIONAL SYMBOL QUAD SLASH" #x2341)
-    ("APL FUNCTIONAL SYMBOL QUAD BACKSLASH" #x2342)
-    ("APL FUNCTIONAL SYMBOL QUAD LESS-THAN" #x2343)
-    ("APL FUNCTIONAL SYMBOL QUAD GREATER-THAN" #x2344)
-    ("APL FUNCTIONAL SYMBOL LEFTWARDS VANE" #x2345)
-    ("APL FUNCTIONAL SYMBOL RIGHTWARDS VANE" #x2346)
-    ("APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW" #x2347)
-    ("APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW" #x2348)
-    ("APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH" #x2349)
-    ("APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR" #x234A)
-    ("APL FUNCTIONAL SYMBOL DELTA STILE" #x234B)
-    ("APL FUNCTIONAL SYMBOL QUAD DOWN CARET" #x234C)
-    ("APL FUNCTIONAL SYMBOL QUAD DELTA" #x234D)
-    ("APL FUNCTIONAL SYMBOL DOWN TACK JOT" #x234E)
-    ("APL FUNCTIONAL SYMBOL UPWARDS VANE" #x234F)
-    ("APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW" #x2350)
-    ("APL FUNCTIONAL SYMBOL UP TACK OVERBAR" #x2351)
-    ("APL FUNCTIONAL SYMBOL DEL STILE" #x2352)
-    ("APL FUNCTIONAL SYMBOL QUAD UP CARET" #x2353)
-    ("APL FUNCTIONAL SYMBOL QUAD DEL" #x2354)
-    ("APL FUNCTIONAL SYMBOL UP TACK JOT" #x2355)
-    ("APL FUNCTIONAL SYMBOL DOWNWARDS VANE" #x2356)
-    ("APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW" #x2357)
-    ("APL FUNCTIONAL SYMBOL QUOTE UNDERBAR" #x2358)
-    ("APL FUNCTIONAL SYMBOL DELTA UNDERBAR" #x2359)
-    ("APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR" #x235A)
-    ("APL FUNCTIONAL SYMBOL JOT UNDERBAR" #x235B)
-    ("APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR" #x235C)
-    ("APL FUNCTIONAL SYMBOL UP SHOE JOT" #x235D)
-    ("APL FUNCTIONAL SYMBOL QUOTE QUAD" #x235E)
-    ("APL FUNCTIONAL SYMBOL CIRCLE STAR" #x235F)
-    ("APL FUNCTIONAL SYMBOL QUAD COLON" #x2360)
-    ("APL FUNCTIONAL SYMBOL UP TACK DIAERESIS" #x2361)
-    ("APL FUNCTIONAL SYMBOL DEL DIAERESIS" #x2362)
-    ("APL FUNCTIONAL SYMBOL STAR DIAERESIS" #x2363)
-    ("APL FUNCTIONAL SYMBOL JOT DIAERESIS" #x2364)
-    ("APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS" #x2365)
-    ("APL FUNCTIONAL SYMBOL DOWN SHOE STILE" #x2366)
-    ("APL FUNCTIONAL SYMBOL LEFT SHOE STILE" #x2367)
-    ("APL FUNCTIONAL SYMBOL TILDE DIAERESIS" #x2368)
-    ("APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS" #x2369)
-    ("APL FUNCTIONAL SYMBOL COMMA BAR" #x236A)
-    ("APL FUNCTIONAL SYMBOL DEL TILDE" #x236B)
-    ("APL FUNCTIONAL SYMBOL ZILDE" #x236C)
-    ("APL FUNCTIONAL SYMBOL STILE TILDE" #x236D)
-    ("APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR" #x236E)
-    ("APL FUNCTIONAL SYMBOL QUAD NOT EQUAL" #x236F)
-    ("APL FUNCTIONAL SYMBOL QUAD QUESTION" #x2370)
-    ("APL FUNCTIONAL SYMBOL DOWN CARET TILDE" #x2371)
-    ("APL FUNCTIONAL SYMBOL UP CARET TILDE" #x2372)
-    ("APL FUNCTIONAL SYMBOL IOTA" #x2373)
-    ("APL FUNCTIONAL SYMBOL RHO" #x2374)
-    ("APL FUNCTIONAL SYMBOL OMEGA" #x2375)
-    ("APL FUNCTIONAL SYMBOL ALPHA UNDERBAR" #x2376)
-    ("APL FUNCTIONAL SYMBOL EPSILON UNDERBAR" #x2377)
-    ("APL FUNCTIONAL SYMBOL IOTA UNDERBAR" #x2378)
-    ("APL FUNCTIONAL SYMBOL OMEGA UNDERBAR" #x2379)
-    ("APL FUNCTIONAL SYMBOL ALPHA" #x237A)
-    ("NOT CHECK MARK" #x237B)
-    ("RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW" #x237C)
-    ("SHOULDERED OPEN BOX" #x237D)
-    ("BELL SYMBOL" #x237E)
-    ("VERTICAL LINE WITH MIDDLE DOT" #x237F)
-    ("INSERTION SYMBOL" #x2380)
-    ("CONTINUOUS UNDERLINE SYMBOL" #x2381)
-    ("DISCONTINUOUS UNDERLINE SYMBOL" #x2382)
-    ("EMPHASIS SYMBOL" #x2383)
-    ("COMPOSITION SYMBOL" #x2384)
-    ("WHITE SQUARE WITH CENTRE VERTICAL LINE" #x2385)
-    ("ENTER SYMBOL" #x2386)
-    ("ALTERNATIVE KEY SYMBOL" #x2387)
-    ("HELM SYMBOL" #x2388)
-    ("CIRCLED HORIZONTAL BAR WITH NOTCH" #x2389)
-    ("CIRCLED TRIANGLE DOWN" #x238A)
-    ("BROKEN CIRCLE WITH NORTHWEST ARROW" #x238B)
-    ("UNDO SYMBOL" #x238C)
-    ("MONOSTABLE SYMBOL" #x238D)
-    ("HYSTERESIS SYMBOL" #x238E)
-    ("OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL" #x238F)
-    ("OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL" #x2390)
-    ("PASSIVE-PULL-DOWN-OUTPUT SYMBOL" #x2391)
-    ("PASSIVE-PULL-UP-OUTPUT SYMBOL" #x2392)
-    ("DIRECT CURRENT SYMBOL FORM TWO" #x2393)
-    ("SOFTWARE-FUNCTION SYMBOL" #x2394)
-    ("APL FUNCTIONAL SYMBOL QUAD" #x2395)
-    ("DECIMAL SEPARATOR KEY SYMBOL" #x2396)
-    ("PREVIOUS PAGE" #x2397)
-    ("NEXT PAGE" #x2398)
-    ("PRINT SCREEN SYMBOL" #x2399)
-    ("CLEAR SCREEN SYMBOL" #x239A)
-    ("LEFT PARENTHESIS UPPER HOOK" #x239B)
-    ("LEFT PARENTHESIS EXTENSION" #x239C)
-    ("LEFT PARENTHESIS LOWER HOOK" #x239D)
-    ("RIGHT PARENTHESIS UPPER HOOK" #x239E)
-    ("RIGHT PARENTHESIS EXTENSION" #x239F)
-    ("RIGHT PARENTHESIS LOWER HOOK" #x23A0)
-    ("LEFT SQUARE BRACKET UPPER CORNER" #x23A1)
-    ("LEFT SQUARE BRACKET EXTENSION" #x23A2)
-    ("LEFT SQUARE BRACKET LOWER CORNER" #x23A3)
-    ("RIGHT SQUARE BRACKET UPPER CORNER" #x23A4)
-    ("RIGHT SQUARE BRACKET EXTENSION" #x23A5)
-    ("RIGHT SQUARE BRACKET LOWER CORNER" #x23A6)
-    ("LEFT CURLY BRACKET UPPER HOOK" #x23A7)
-    ("LEFT CURLY BRACKET MIDDLE PIECE" #x23A8)
-    ("LEFT CURLY BRACKET LOWER HOOK" #x23A9)
-    ("CURLY BRACKET EXTENSION" #x23AA)
-    ("RIGHT CURLY BRACKET UPPER HOOK" #x23AB)
-    ("RIGHT CURLY BRACKET MIDDLE PIECE" #x23AC)
-    ("RIGHT CURLY BRACKET LOWER HOOK" #x23AD)
-    ("INTEGRAL EXTENSION" #x23AE)
-    ("HORIZONTAL LINE EXTENSION" #x23AF)
-    ("UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION" #x23B0)
-    ("UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION" #x23B1)
-    ("SUMMATION TOP" #x23B2)
-    ("SUMMATION BOTTOM" #x23B3)
-    ("TOP SQUARE BRACKET" #x23B4)
-    ("BOTTOM SQUARE BRACKET" #x23B5)
-    ("BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET" #x23B6)
-    ("RADICAL SYMBOL BOTTOM" #x23B7)
-    ("LEFT VERTICAL BOX LINE" #x23B8)
-    ("RIGHT VERTICAL BOX LINE" #x23B9)
-    ("HORIZONTAL SCAN LINE-1" #x23BA)
-    ("HORIZONTAL SCAN LINE-3" #x23BB)
-    ("HORIZONTAL SCAN LINE-7" #x23BC)
-    ("HORIZONTAL SCAN LINE-9" #x23BD)
-    ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT" #x23BE)
-    ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT" #x23BF)
-    ("DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE" #x23C0)
-    ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE" #x23C1)
-    ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE" #x23C2)
-    ("DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE" #x23C3)
-    ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE" #x23C4)
-    ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE" #x23C5)
-    ("DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE" #x23C6)
-    ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE" #x23C7)
-    ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE" #x23C8)
-    ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL" #x23C9)
-    ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL" #x23CA)
-    ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT" #x23CB)
-    ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT" #x23CC)
-    ("SQUARE FOOT" #x23CD)
-    ("RETURN SYMBOL" #x23CE)
-    ))
-
diff --git a/etc/nxml/02400-0243F.el b/etc/nxml/02400-0243F.el
deleted file mode 100644 (file)
index 798a795..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-(nxml-define-char-name-set 'control-pictures
-  '(("SYMBOL FOR NULL" #x2400)
-    ("SYMBOL FOR START OF HEADING" #x2401)
-    ("SYMBOL FOR START OF TEXT" #x2402)
-    ("SYMBOL FOR END OF TEXT" #x2403)
-    ("SYMBOL FOR END OF TRANSMISSION" #x2404)
-    ("SYMBOL FOR ENQUIRY" #x2405)
-    ("SYMBOL FOR ACKNOWLEDGE" #x2406)
-    ("SYMBOL FOR BELL" #x2407)
-    ("SYMBOL FOR BACKSPACE" #x2408)
-    ("SYMBOL FOR HORIZONTAL TABULATION" #x2409)
-    ("SYMBOL FOR LINE FEED" #x240A)
-    ("SYMBOL FOR VERTICAL TABULATION" #x240B)
-    ("SYMBOL FOR FORM FEED" #x240C)
-    ("SYMBOL FOR CARRIAGE RETURN" #x240D)
-    ("SYMBOL FOR SHIFT OUT" #x240E)
-    ("SYMBOL FOR SHIFT IN" #x240F)
-    ("SYMBOL FOR DATA LINK ESCAPE" #x2410)
-    ("SYMBOL FOR DEVICE CONTROL ONE" #x2411)
-    ("SYMBOL FOR DEVICE CONTROL TWO" #x2412)
-    ("SYMBOL FOR DEVICE CONTROL THREE" #x2413)
-    ("SYMBOL FOR DEVICE CONTROL FOUR" #x2414)
-    ("SYMBOL FOR NEGATIVE ACKNOWLEDGE" #x2415)
-    ("SYMBOL FOR SYNCHRONOUS IDLE" #x2416)
-    ("SYMBOL FOR END OF TRANSMISSION BLOCK" #x2417)
-    ("SYMBOL FOR CANCEL" #x2418)
-    ("SYMBOL FOR END OF MEDIUM" #x2419)
-    ("SYMBOL FOR SUBSTITUTE" #x241A)
-    ("SYMBOL FOR ESCAPE" #x241B)
-    ("SYMBOL FOR FILE SEPARATOR" #x241C)
-    ("SYMBOL FOR GROUP SEPARATOR" #x241D)
-    ("SYMBOL FOR RECORD SEPARATOR" #x241E)
-    ("SYMBOL FOR UNIT SEPARATOR" #x241F)
-    ("SYMBOL FOR SPACE" #x2420)
-    ("SYMBOL FOR DELETE" #x2421)
-    ("BLANK SYMBOL" #x2422)
-    ("OPEN BOX" #x2423)
-    ("SYMBOL FOR NEWLINE" #x2424)
-    ("SYMBOL FOR DELETE FORM TWO" #x2425)
-    ("SYMBOL FOR SUBSTITUTE FORM TWO" #x2426)
-    ))
-
diff --git a/etc/nxml/02440-0245F.el b/etc/nxml/02440-0245F.el
deleted file mode 100644 (file)
index 019d6ba..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-(nxml-define-char-name-set 'optical-character-recognition
-  '(("OCR HOOK" #x2440)
-    ("OCR CHAIR" #x2441)
-    ("OCR FORK" #x2442)
-    ("OCR INVERTED FORK" #x2443)
-    ("OCR BELT BUCKLE" #x2444)
-    ("OCR BOW TIE" #x2445)
-    ("OCR BRANCH BANK IDENTIFICATION" #x2446)
-    ("OCR AMOUNT OF CHECK" #x2447)
-    ("OCR DASH" #x2448)
-    ("OCR CUSTOMER ACCOUNT NUMBER" #x2449)
-    ("OCR DOUBLE BACKSLASH" #x244A)
-    ))
-
diff --git a/etc/nxml/02460-024FF.el b/etc/nxml/02460-024FF.el
deleted file mode 100644 (file)
index 736ff0b..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-(nxml-define-char-name-set 'enclosed-alphanumerics
-  '(("CIRCLED DIGIT ONE" #x2460)
-    ("CIRCLED DIGIT TWO" #x2461)
-    ("CIRCLED DIGIT THREE" #x2462)
-    ("CIRCLED DIGIT FOUR" #x2463)
-    ("CIRCLED DIGIT FIVE" #x2464)
-    ("CIRCLED DIGIT SIX" #x2465)
-    ("CIRCLED DIGIT SEVEN" #x2466)
-    ("CIRCLED DIGIT EIGHT" #x2467)
-    ("CIRCLED DIGIT NINE" #x2468)
-    ("CIRCLED NUMBER TEN" #x2469)
-    ("CIRCLED NUMBER ELEVEN" #x246A)
-    ("CIRCLED NUMBER TWELVE" #x246B)
-    ("CIRCLED NUMBER THIRTEEN" #x246C)
-    ("CIRCLED NUMBER FOURTEEN" #x246D)
-    ("CIRCLED NUMBER FIFTEEN" #x246E)
-    ("CIRCLED NUMBER SIXTEEN" #x246F)
-    ("CIRCLED NUMBER SEVENTEEN" #x2470)
-    ("CIRCLED NUMBER EIGHTEEN" #x2471)
-    ("CIRCLED NUMBER NINETEEN" #x2472)
-    ("CIRCLED NUMBER TWENTY" #x2473)
-    ("PARENTHESIZED DIGIT ONE" #x2474)
-    ("PARENTHESIZED DIGIT TWO" #x2475)
-    ("PARENTHESIZED DIGIT THREE" #x2476)
-    ("PARENTHESIZED DIGIT FOUR" #x2477)
-    ("PARENTHESIZED DIGIT FIVE" #x2478)
-    ("PARENTHESIZED DIGIT SIX" #x2479)
-    ("PARENTHESIZED DIGIT SEVEN" #x247A)
-    ("PARENTHESIZED DIGIT EIGHT" #x247B)
-    ("PARENTHESIZED DIGIT NINE" #x247C)
-    ("PARENTHESIZED NUMBER TEN" #x247D)
-    ("PARENTHESIZED NUMBER ELEVEN" #x247E)
-    ("PARENTHESIZED NUMBER TWELVE" #x247F)
-    ("PARENTHESIZED NUMBER THIRTEEN" #x2480)
-    ("PARENTHESIZED NUMBER FOURTEEN" #x2481)
-    ("PARENTHESIZED NUMBER FIFTEEN" #x2482)
-    ("PARENTHESIZED NUMBER SIXTEEN" #x2483)
-    ("PARENTHESIZED NUMBER SEVENTEEN" #x2484)
-    ("PARENTHESIZED NUMBER EIGHTEEN" #x2485)
-    ("PARENTHESIZED NUMBER NINETEEN" #x2486)
-    ("PARENTHESIZED NUMBER TWENTY" #x2487)
-    ("DIGIT ONE FULL STOP" #x2488)
-    ("DIGIT TWO FULL STOP" #x2489)
-    ("DIGIT THREE FULL STOP" #x248A)
-    ("DIGIT FOUR FULL STOP" #x248B)
-    ("DIGIT FIVE FULL STOP" #x248C)
-    ("DIGIT SIX FULL STOP" #x248D)
-    ("DIGIT SEVEN FULL STOP" #x248E)
-    ("DIGIT EIGHT FULL STOP" #x248F)
-    ("DIGIT NINE FULL STOP" #x2490)
-    ("NUMBER TEN FULL STOP" #x2491)
-    ("NUMBER ELEVEN FULL STOP" #x2492)
-    ("NUMBER TWELVE FULL STOP" #x2493)
-    ("NUMBER THIRTEEN FULL STOP" #x2494)
-    ("NUMBER FOURTEEN FULL STOP" #x2495)
-    ("NUMBER FIFTEEN FULL STOP" #x2496)
-    ("NUMBER SIXTEEN FULL STOP" #x2497)
-    ("NUMBER SEVENTEEN FULL STOP" #x2498)
-    ("NUMBER EIGHTEEN FULL STOP" #x2499)
-    ("NUMBER NINETEEN FULL STOP" #x249A)
-    ("NUMBER TWENTY FULL STOP" #x249B)
-    ("PARENTHESIZED LATIN SMALL LETTER A" #x249C)
-    ("PARENTHESIZED LATIN SMALL LETTER B" #x249D)
-    ("PARENTHESIZED LATIN SMALL LETTER C" #x249E)
-    ("PARENTHESIZED LATIN SMALL LETTER D" #x249F)
-    ("PARENTHESIZED LATIN SMALL LETTER E" #x24A0)
-    ("PARENTHESIZED LATIN SMALL LETTER F" #x24A1)
-    ("PARENTHESIZED LATIN SMALL LETTER G" #x24A2)
-    ("PARENTHESIZED LATIN SMALL LETTER H" #x24A3)
-    ("PARENTHESIZED LATIN SMALL LETTER I" #x24A4)
-    ("PARENTHESIZED LATIN SMALL LETTER J" #x24A5)
-    ("PARENTHESIZED LATIN SMALL LETTER K" #x24A6)
-    ("PARENTHESIZED LATIN SMALL LETTER L" #x24A7)
-    ("PARENTHESIZED LATIN SMALL LETTER M" #x24A8)
-    ("PARENTHESIZED LATIN SMALL LETTER N" #x24A9)
-    ("PARENTHESIZED LATIN SMALL LETTER O" #x24AA)
-    ("PARENTHESIZED LATIN SMALL LETTER P" #x24AB)
-    ("PARENTHESIZED LATIN SMALL LETTER Q" #x24AC)
-    ("PARENTHESIZED LATIN SMALL LETTER R" #x24AD)
-    ("PARENTHESIZED LATIN SMALL LETTER S" #x24AE)
-    ("PARENTHESIZED LATIN SMALL LETTER T" #x24AF)
-    ("PARENTHESIZED LATIN SMALL LETTER U" #x24B0)
-    ("PARENTHESIZED LATIN SMALL LETTER V" #x24B1)
-    ("PARENTHESIZED LATIN SMALL LETTER W" #x24B2)
-    ("PARENTHESIZED LATIN SMALL LETTER X" #x24B3)
-    ("PARENTHESIZED LATIN SMALL LETTER Y" #x24B4)
-    ("PARENTHESIZED LATIN SMALL LETTER Z" #x24B5)
-    ("CIRCLED LATIN CAPITAL LETTER A" #x24B6)
-    ("CIRCLED LATIN CAPITAL LETTER B" #x24B7)
-    ("CIRCLED LATIN CAPITAL LETTER C" #x24B8)
-    ("CIRCLED LATIN CAPITAL LETTER D" #x24B9)
-    ("CIRCLED LATIN CAPITAL LETTER E" #x24BA)
-    ("CIRCLED LATIN CAPITAL LETTER F" #x24BB)
-    ("CIRCLED LATIN CAPITAL LETTER G" #x24BC)
-    ("CIRCLED LATIN CAPITAL LETTER H" #x24BD)
-    ("CIRCLED LATIN CAPITAL LETTER I" #x24BE)
-    ("CIRCLED LATIN CAPITAL LETTER J" #x24BF)
-    ("CIRCLED LATIN CAPITAL LETTER K" #x24C0)
-    ("CIRCLED LATIN CAPITAL LETTER L" #x24C1)
-    ("CIRCLED LATIN CAPITAL LETTER M" #x24C2)
-    ("CIRCLED LATIN CAPITAL LETTER N" #x24C3)
-    ("CIRCLED LATIN CAPITAL LETTER O" #x24C4)
-    ("CIRCLED LATIN CAPITAL LETTER P" #x24C5)
-    ("CIRCLED LATIN CAPITAL LETTER Q" #x24C6)
-    ("CIRCLED LATIN CAPITAL LETTER R" #x24C7)
-    ("CIRCLED LATIN CAPITAL LETTER S" #x24C8)
-    ("CIRCLED LATIN CAPITAL LETTER T" #x24C9)
-    ("CIRCLED LATIN CAPITAL LETTER U" #x24CA)
-    ("CIRCLED LATIN CAPITAL LETTER V" #x24CB)
-    ("CIRCLED LATIN CAPITAL LETTER W" #x24CC)
-    ("CIRCLED LATIN CAPITAL LETTER X" #x24CD)
-    ("CIRCLED LATIN CAPITAL LETTER Y" #x24CE)
-    ("CIRCLED LATIN CAPITAL LETTER Z" #x24CF)
-    ("CIRCLED LATIN SMALL LETTER A" #x24D0)
-    ("CIRCLED LATIN SMALL LETTER B" #x24D1)
-    ("CIRCLED LATIN SMALL LETTER C" #x24D2)
-    ("CIRCLED LATIN SMALL LETTER D" #x24D3)
-    ("CIRCLED LATIN SMALL LETTER E" #x24D4)
-    ("CIRCLED LATIN SMALL LETTER F" #x24D5)
-    ("CIRCLED LATIN SMALL LETTER G" #x24D6)
-    ("CIRCLED LATIN SMALL LETTER H" #x24D7)
-    ("CIRCLED LATIN SMALL LETTER I" #x24D8)
-    ("CIRCLED LATIN SMALL LETTER J" #x24D9)
-    ("CIRCLED LATIN SMALL LETTER K" #x24DA)
-    ("CIRCLED LATIN SMALL LETTER L" #x24DB)
-    ("CIRCLED LATIN SMALL LETTER M" #x24DC)
-    ("CIRCLED LATIN SMALL LETTER N" #x24DD)
-    ("CIRCLED LATIN SMALL LETTER O" #x24DE)
-    ("CIRCLED LATIN SMALL LETTER P" #x24DF)
-    ("CIRCLED LATIN SMALL LETTER Q" #x24E0)
-    ("CIRCLED LATIN SMALL LETTER R" #x24E1)
-    ("CIRCLED LATIN SMALL LETTER S" #x24E2)
-    ("CIRCLED LATIN SMALL LETTER T" #x24E3)
-    ("CIRCLED LATIN SMALL LETTER U" #x24E4)
-    ("CIRCLED LATIN SMALL LETTER V" #x24E5)
-    ("CIRCLED LATIN SMALL LETTER W" #x24E6)
-    ("CIRCLED LATIN SMALL LETTER X" #x24E7)
-    ("CIRCLED LATIN SMALL LETTER Y" #x24E8)
-    ("CIRCLED LATIN SMALL LETTER Z" #x24E9)
-    ("CIRCLED DIGIT ZERO" #x24EA)
-    ("NEGATIVE CIRCLED NUMBER ELEVEN" #x24EB)
-    ("NEGATIVE CIRCLED NUMBER TWELVE" #x24EC)
-    ("NEGATIVE CIRCLED NUMBER THIRTEEN" #x24ED)
-    ("NEGATIVE CIRCLED NUMBER FOURTEEN" #x24EE)
-    ("NEGATIVE CIRCLED NUMBER FIFTEEN" #x24EF)
-    ("NEGATIVE CIRCLED NUMBER SIXTEEN" #x24F0)
-    ("NEGATIVE CIRCLED NUMBER SEVENTEEN" #x24F1)
-    ("NEGATIVE CIRCLED NUMBER EIGHTEEN" #x24F2)
-    ("NEGATIVE CIRCLED NUMBER NINETEEN" #x24F3)
-    ("NEGATIVE CIRCLED NUMBER TWENTY" #x24F4)
-    ("DOUBLE CIRCLED DIGIT ONE" #x24F5)
-    ("DOUBLE CIRCLED DIGIT TWO" #x24F6)
-    ("DOUBLE CIRCLED DIGIT THREE" #x24F7)
-    ("DOUBLE CIRCLED DIGIT FOUR" #x24F8)
-    ("DOUBLE CIRCLED DIGIT FIVE" #x24F9)
-    ("DOUBLE CIRCLED DIGIT SIX" #x24FA)
-    ("DOUBLE CIRCLED DIGIT SEVEN" #x24FB)
-    ("DOUBLE CIRCLED DIGIT EIGHT" #x24FC)
-    ("DOUBLE CIRCLED DIGIT NINE" #x24FD)
-    ("DOUBLE CIRCLED NUMBER TEN" #x24FE)
-    ))
-
diff --git a/etc/nxml/02500-0257F.el b/etc/nxml/02500-0257F.el
deleted file mode 100644 (file)
index a8cc739..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-(nxml-define-char-name-set 'box-drawing
-  '(("BOX DRAWINGS LIGHT HORIZONTAL" #x2500)
-    ("BOX DRAWINGS HEAVY HORIZONTAL" #x2501)
-    ("BOX DRAWINGS LIGHT VERTICAL" #x2502)
-    ("BOX DRAWINGS HEAVY VERTICAL" #x2503)
-    ("BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL" #x2504)
-    ("BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL" #x2505)
-    ("BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL" #x2506)
-    ("BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL" #x2507)
-    ("BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL" #x2508)
-    ("BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL" #x2509)
-    ("BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL" #x250A)
-    ("BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL" #x250B)
-    ("BOX DRAWINGS LIGHT DOWN AND RIGHT" #x250C)
-    ("BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY" #x250D)
-    ("BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT" #x250E)
-    ("BOX DRAWINGS HEAVY DOWN AND RIGHT" #x250F)
-    ("BOX DRAWINGS LIGHT DOWN AND LEFT" #x2510)
-    ("BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY" #x2511)
-    ("BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT" #x2512)
-    ("BOX DRAWINGS HEAVY DOWN AND LEFT" #x2513)
-    ("BOX DRAWINGS LIGHT UP AND RIGHT" #x2514)
-    ("BOX DRAWINGS UP LIGHT AND RIGHT HEAVY" #x2515)
-    ("BOX DRAWINGS UP HEAVY AND RIGHT LIGHT" #x2516)
-    ("BOX DRAWINGS HEAVY UP AND RIGHT" #x2517)
-    ("BOX DRAWINGS LIGHT UP AND LEFT" #x2518)
-    ("BOX DRAWINGS UP LIGHT AND LEFT HEAVY" #x2519)
-    ("BOX DRAWINGS UP HEAVY AND LEFT LIGHT" #x251A)
-    ("BOX DRAWINGS HEAVY UP AND LEFT" #x251B)
-    ("BOX DRAWINGS LIGHT VERTICAL AND RIGHT" #x251C)
-    ("BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY" #x251D)
-    ("BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT" #x251E)
-    ("BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT" #x251F)
-    ("BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT" #x2520)
-    ("BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY" #x2521)
-    ("BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY" #x2522)
-    ("BOX DRAWINGS HEAVY VERTICAL AND RIGHT" #x2523)
-    ("BOX DRAWINGS LIGHT VERTICAL AND LEFT" #x2524)
-    ("BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY" #x2525)
-    ("BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT" #x2526)
-    ("BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT" #x2527)
-    ("BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT" #x2528)
-    ("BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY" #x2529)
-    ("BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY" #x252A)
-    ("BOX DRAWINGS HEAVY VERTICAL AND LEFT" #x252B)
-    ("BOX DRAWINGS LIGHT DOWN AND HORIZONTAL" #x252C)
-    ("BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT" #x252D)
-    ("BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT" #x252E)
-    ("BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY" #x252F)
-    ("BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT" #x2530)
-    ("BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY" #x2531)
-    ("BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY" #x2532)
-    ("BOX DRAWINGS HEAVY DOWN AND HORIZONTAL" #x2533)
-    ("BOX DRAWINGS LIGHT UP AND HORIZONTAL" #x2534)
-    ("BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT" #x2535)
-    ("BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT" #x2536)
-    ("BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY" #x2537)
-    ("BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT" #x2538)
-    ("BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY" #x2539)
-    ("BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY" #x253A)
-    ("BOX DRAWINGS HEAVY UP AND HORIZONTAL" #x253B)
-    ("BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL" #x253C)
-    ("BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT" #x253D)
-    ("BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT" #x253E)
-    ("BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY" #x253F)
-    ("BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT" #x2540)
-    ("BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT" #x2541)
-    ("BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT" #x2542)
-    ("BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT" #x2543)
-    ("BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT" #x2544)
-    ("BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT" #x2545)
-    ("BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT" #x2546)
-    ("BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY" #x2547)
-    ("BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY" #x2548)
-    ("BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY" #x2549)
-    ("BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY" #x254A)
-    ("BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL" #x254B)
-    ("BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL" #x254C)
-    ("BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL" #x254D)
-    ("BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL" #x254E)
-    ("BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL" #x254F)
-    ("BOX DRAWINGS DOUBLE HORIZONTAL" #x2550)
-    ("BOX DRAWINGS DOUBLE VERTICAL" #x2551)
-    ("BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE" #x2552)
-    ("BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE" #x2553)
-    ("BOX DRAWINGS DOUBLE DOWN AND RIGHT" #x2554)
-    ("BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE" #x2555)
-    ("BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE" #x2556)
-    ("BOX DRAWINGS DOUBLE DOWN AND LEFT" #x2557)
-    ("BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE" #x2558)
-    ("BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE" #x2559)
-    ("BOX DRAWINGS DOUBLE UP AND RIGHT" #x255A)
-    ("BOX DRAWINGS UP SINGLE AND LEFT DOUBLE" #x255B)
-    ("BOX DRAWINGS UP DOUBLE AND LEFT SINGLE" #x255C)
-    ("BOX DRAWINGS DOUBLE UP AND LEFT" #x255D)
-    ("BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE" #x255E)
-    ("BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE" #x255F)
-    ("BOX DRAWINGS DOUBLE VERTICAL AND RIGHT" #x2560)
-    ("BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE" #x2561)
-    ("BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE" #x2562)
-    ("BOX DRAWINGS DOUBLE VERTICAL AND LEFT" #x2563)
-    ("BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE" #x2564)
-    ("BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE" #x2565)
-    ("BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL" #x2566)
-    ("BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE" #x2567)
-    ("BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE" #x2568)
-    ("BOX DRAWINGS DOUBLE UP AND HORIZONTAL" #x2569)
-    ("BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE" #x256A)
-    ("BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE" #x256B)
-    ("BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL" #x256C)
-    ("BOX DRAWINGS LIGHT ARC DOWN AND RIGHT" #x256D)
-    ("BOX DRAWINGS LIGHT ARC DOWN AND LEFT" #x256E)
-    ("BOX DRAWINGS LIGHT ARC UP AND LEFT" #x256F)
-    ("BOX DRAWINGS LIGHT ARC UP AND RIGHT" #x2570)
-    ("BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT" #x2571)
-    ("BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT" #x2572)
-    ("BOX DRAWINGS LIGHT DIAGONAL CROSS" #x2573)
-    ("BOX DRAWINGS LIGHT LEFT" #x2574)
-    ("BOX DRAWINGS LIGHT UP" #x2575)
-    ("BOX DRAWINGS LIGHT RIGHT" #x2576)
-    ("BOX DRAWINGS LIGHT DOWN" #x2577)
-    ("BOX DRAWINGS HEAVY LEFT" #x2578)
-    ("BOX DRAWINGS HEAVY UP" #x2579)
-    ("BOX DRAWINGS HEAVY RIGHT" #x257A)
-    ("BOX DRAWINGS HEAVY DOWN" #x257B)
-    ("BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT" #x257C)
-    ("BOX DRAWINGS LIGHT UP AND HEAVY DOWN" #x257D)
-    ("BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT" #x257E)
-    ("BOX DRAWINGS HEAVY UP AND LIGHT DOWN" #x257F)
-    ))
-
diff --git a/etc/nxml/02580-0259F.el b/etc/nxml/02580-0259F.el
deleted file mode 100644 (file)
index 0c72209..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-(nxml-define-char-name-set 'block-elements
-  '(("UPPER HALF BLOCK" #x2580)
-    ("LOWER ONE EIGHTH BLOCK" #x2581)
-    ("LOWER ONE QUARTER BLOCK" #x2582)
-    ("LOWER THREE EIGHTHS BLOCK" #x2583)
-    ("LOWER HALF BLOCK" #x2584)
-    ("LOWER FIVE EIGHTHS BLOCK" #x2585)
-    ("LOWER THREE QUARTERS BLOCK" #x2586)
-    ("LOWER SEVEN EIGHTHS BLOCK" #x2587)
-    ("FULL BLOCK" #x2588)
-    ("LEFT SEVEN EIGHTHS BLOCK" #x2589)
-    ("LEFT THREE QUARTERS BLOCK" #x258A)
-    ("LEFT FIVE EIGHTHS BLOCK" #x258B)
-    ("LEFT HALF BLOCK" #x258C)
-    ("LEFT THREE EIGHTHS BLOCK" #x258D)
-    ("LEFT ONE QUARTER BLOCK" #x258E)
-    ("LEFT ONE EIGHTH BLOCK" #x258F)
-    ("RIGHT HALF BLOCK" #x2590)
-    ("LIGHT SHADE" #x2591)
-    ("MEDIUM SHADE" #x2592)
-    ("DARK SHADE" #x2593)
-    ("UPPER ONE EIGHTH BLOCK" #x2594)
-    ("RIGHT ONE EIGHTH BLOCK" #x2595)
-    ("QUADRANT LOWER LEFT" #x2596)
-    ("QUADRANT LOWER RIGHT" #x2597)
-    ("QUADRANT UPPER LEFT" #x2598)
-    ("QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT" #x2599)
-    ("QUADRANT UPPER LEFT AND LOWER RIGHT" #x259A)
-    ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT" #x259B)
-    ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT" #x259C)
-    ("QUADRANT UPPER RIGHT" #x259D)
-    ("QUADRANT UPPER RIGHT AND LOWER LEFT" #x259E)
-    ("QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT" #x259F)
-    ))
-
diff --git a/etc/nxml/025A0-025FF.el b/etc/nxml/025A0-025FF.el
deleted file mode 100644 (file)
index b9fbe6f..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-(nxml-define-char-name-set 'geometric-shapes
-  '(("BLACK SQUARE" #x25A0)
-    ("WHITE SQUARE" #x25A1)
-    ("WHITE SQUARE WITH ROUNDED CORNERS" #x25A2)
-    ("WHITE SQUARE CONTAINING BLACK SMALL SQUARE" #x25A3)
-    ("SQUARE WITH HORIZONTAL FILL" #x25A4)
-    ("SQUARE WITH VERTICAL FILL" #x25A5)
-    ("SQUARE WITH ORTHOGONAL CROSSHATCH FILL" #x25A6)
-    ("SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL" #x25A7)
-    ("SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL" #x25A8)
-    ("SQUARE WITH DIAGONAL CROSSHATCH FILL" #x25A9)
-    ("BLACK SMALL SQUARE" #x25AA)
-    ("WHITE SMALL SQUARE" #x25AB)
-    ("BLACK RECTANGLE" #x25AC)
-    ("WHITE RECTANGLE" #x25AD)
-    ("BLACK VERTICAL RECTANGLE" #x25AE)
-    ("WHITE VERTICAL RECTANGLE" #x25AF)
-    ("BLACK PARALLELOGRAM" #x25B0)
-    ("WHITE PARALLELOGRAM" #x25B1)
-    ("BLACK UP-POINTING TRIANGLE" #x25B2)
-    ("WHITE UP-POINTING TRIANGLE" #x25B3)
-    ("BLACK UP-POINTING SMALL TRIANGLE" #x25B4)
-    ("WHITE UP-POINTING SMALL TRIANGLE" #x25B5)
-    ("BLACK RIGHT-POINTING TRIANGLE" #x25B6)
-    ("WHITE RIGHT-POINTING TRIANGLE" #x25B7)
-    ("BLACK RIGHT-POINTING SMALL TRIANGLE" #x25B8)
-    ("WHITE RIGHT-POINTING SMALL TRIANGLE" #x25B9)
-    ("BLACK RIGHT-POINTING POINTER" #x25BA)
-    ("WHITE RIGHT-POINTING POINTER" #x25BB)
-    ("BLACK DOWN-POINTING TRIANGLE" #x25BC)
-    ("WHITE DOWN-POINTING TRIANGLE" #x25BD)
-    ("BLACK DOWN-POINTING SMALL TRIANGLE" #x25BE)
-    ("WHITE DOWN-POINTING SMALL TRIANGLE" #x25BF)
-    ("BLACK LEFT-POINTING TRIANGLE" #x25C0)
-    ("WHITE LEFT-POINTING TRIANGLE" #x25C1)
-    ("BLACK LEFT-POINTING SMALL TRIANGLE" #x25C2)
-    ("WHITE LEFT-POINTING SMALL TRIANGLE" #x25C3)
-    ("BLACK LEFT-POINTING POINTER" #x25C4)
-    ("WHITE LEFT-POINTING POINTER" #x25C5)
-    ("BLACK DIAMOND" #x25C6)
-    ("WHITE DIAMOND" #x25C7)
-    ("WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND" #x25C8)
-    ("FISHEYE" #x25C9)
-    ("LOZENGE" #x25CA)
-    ("WHITE CIRCLE" #x25CB)
-    ("DOTTED CIRCLE" #x25CC)
-    ("CIRCLE WITH VERTICAL FILL" #x25CD)
-    ("BULLSEYE" #x25CE)
-    ("BLACK CIRCLE" #x25CF)
-    ("CIRCLE WITH LEFT HALF BLACK" #x25D0)
-    ("CIRCLE WITH RIGHT HALF BLACK" #x25D1)
-    ("CIRCLE WITH LOWER HALF BLACK" #x25D2)
-    ("CIRCLE WITH UPPER HALF BLACK" #x25D3)
-    ("CIRCLE WITH UPPER RIGHT QUADRANT BLACK" #x25D4)
-    ("CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK" #x25D5)
-    ("LEFT HALF BLACK CIRCLE" #x25D6)
-    ("RIGHT HALF BLACK CIRCLE" #x25D7)
-    ("INVERSE BULLET" #x25D8)
-    ("INVERSE WHITE CIRCLE" #x25D9)
-    ("UPPER HALF INVERSE WHITE CIRCLE" #x25DA)
-    ("LOWER HALF INVERSE WHITE CIRCLE" #x25DB)
-    ("UPPER LEFT QUADRANT CIRCULAR ARC" #x25DC)
-    ("UPPER RIGHT QUADRANT CIRCULAR ARC" #x25DD)
-    ("LOWER RIGHT QUADRANT CIRCULAR ARC" #x25DE)
-    ("LOWER LEFT QUADRANT CIRCULAR ARC" #x25DF)
-    ("UPPER HALF CIRCLE" #x25E0)
-    ("LOWER HALF CIRCLE" #x25E1)
-    ("BLACK LOWER RIGHT TRIANGLE" #x25E2)
-    ("BLACK LOWER LEFT TRIANGLE" #x25E3)
-    ("BLACK UPPER LEFT TRIANGLE" #x25E4)
-    ("BLACK UPPER RIGHT TRIANGLE" #x25E5)
-    ("WHITE BULLET" #x25E6)
-    ("SQUARE WITH LEFT HALF BLACK" #x25E7)
-    ("SQUARE WITH RIGHT HALF BLACK" #x25E8)
-    ("SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK" #x25E9)
-    ("SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK" #x25EA)
-    ("WHITE SQUARE WITH VERTICAL BISECTING LINE" #x25EB)
-    ("WHITE UP-POINTING TRIANGLE WITH DOT" #x25EC)
-    ("UP-POINTING TRIANGLE WITH LEFT HALF BLACK" #x25ED)
-    ("UP-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x25EE)
-    ("LARGE CIRCLE" #x25EF)
-    ("WHITE SQUARE WITH UPPER LEFT QUADRANT" #x25F0)
-    ("WHITE SQUARE WITH LOWER LEFT QUADRANT" #x25F1)
-    ("WHITE SQUARE WITH LOWER RIGHT QUADRANT" #x25F2)
-    ("WHITE SQUARE WITH UPPER RIGHT QUADRANT" #x25F3)
-    ("WHITE CIRCLE WITH UPPER LEFT QUADRANT" #x25F4)
-    ("WHITE CIRCLE WITH LOWER LEFT QUADRANT" #x25F5)
-    ("WHITE CIRCLE WITH LOWER RIGHT QUADRANT" #x25F6)
-    ("WHITE CIRCLE WITH UPPER RIGHT QUADRANT" #x25F7)
-    ("UPPER LEFT TRIANGLE" #x25F8)
-    ("UPPER RIGHT TRIANGLE" #x25F9)
-    ("LOWER LEFT TRIANGLE" #x25FA)
-    ("WHITE MEDIUM SQUARE" #x25FB)
-    ("BLACK MEDIUM SQUARE" #x25FC)
-    ("WHITE MEDIUM SMALL SQUARE" #x25FD)
-    ("BLACK MEDIUM SMALL SQUARE" #x25FE)
-    ("LOWER RIGHT TRIANGLE" #x25FF)
-    ))
-
diff --git a/etc/nxml/02600-026FF.el b/etc/nxml/02600-026FF.el
deleted file mode 100644 (file)
index 72ae5c3..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-(nxml-define-char-name-set 'miscellaneous-symbols
-  '(("BLACK SUN WITH RAYS" #x2600)
-    ("CLOUD" #x2601)
-    ("UMBRELLA" #x2602)
-    ("SNOWMAN" #x2603)
-    ("COMET" #x2604)
-    ("BLACK STAR" #x2605)
-    ("WHITE STAR" #x2606)
-    ("LIGHTNING" #x2607)
-    ("THUNDERSTORM" #x2608)
-    ("SUN" #x2609)
-    ("ASCENDING NODE" #x260A)
-    ("DESCENDING NODE" #x260B)
-    ("CONJUNCTION" #x260C)
-    ("OPPOSITION" #x260D)
-    ("BLACK TELEPHONE" #x260E)
-    ("WHITE TELEPHONE" #x260F)
-    ("BALLOT BOX" #x2610)
-    ("BALLOT BOX WITH CHECK" #x2611)
-    ("BALLOT BOX WITH X" #x2612)
-    ("SALTIRE" #x2613)
-    ("WHITE SHOGI PIECE" #x2616)
-    ("BLACK SHOGI PIECE" #x2617)
-    ("REVERSED ROTATED FLORAL HEART BULLET" #x2619)
-    ("BLACK LEFT POINTING INDEX" #x261A)
-    ("BLACK RIGHT POINTING INDEX" #x261B)
-    ("WHITE LEFT POINTING INDEX" #x261C)
-    ("WHITE UP POINTING INDEX" #x261D)
-    ("WHITE RIGHT POINTING INDEX" #x261E)
-    ("WHITE DOWN POINTING INDEX" #x261F)
-    ("SKULL AND CROSSBONES" #x2620)
-    ("CAUTION SIGN" #x2621)
-    ("RADIOACTIVE SIGN" #x2622)
-    ("BIOHAZARD SIGN" #x2623)
-    ("CADUCEUS" #x2624)
-    ("ANKH" #x2625)
-    ("ORTHODOX CROSS" #x2626)
-    ("CHI RHO" #x2627)
-    ("CROSS OF LORRAINE" #x2628)
-    ("CROSS OF JERUSALEM" #x2629)
-    ("STAR AND CRESCENT" #x262A)
-    ("FARSI SYMBOL" #x262B)
-    ("ADI SHAKTI" #x262C)
-    ("HAMMER AND SICKLE" #x262D)
-    ("PEACE SYMBOL" #x262E)
-    ("YIN YANG" #x262F)
-    ("TRIGRAM FOR HEAVEN" #x2630)
-    ("TRIGRAM FOR LAKE" #x2631)
-    ("TRIGRAM FOR FIRE" #x2632)
-    ("TRIGRAM FOR THUNDER" #x2633)
-    ("TRIGRAM FOR WIND" #x2634)
-    ("TRIGRAM FOR WATER" #x2635)
-    ("TRIGRAM FOR MOUNTAIN" #x2636)
-    ("TRIGRAM FOR EARTH" #x2637)
-    ("WHEEL OF DHARMA" #x2638)
-    ("WHITE FROWNING FACE" #x2639)
-    ("WHITE SMILING FACE" #x263A)
-    ("BLACK SMILING FACE" #x263B)
-    ("WHITE SUN WITH RAYS" #x263C)
-    ("FIRST QUARTER MOON" #x263D)
-    ("LAST QUARTER MOON" #x263E)
-    ("MERCURY" #x263F)
-    ("FEMALE SIGN" #x2640)
-    ("EARTH" #x2641)
-    ("MALE SIGN" #x2642)
-    ("JUPITER" #x2643)
-    ("SATURN" #x2644)
-    ("URANUS" #x2645)
-    ("NEPTUNE" #x2646)
-    ("PLUTO" #x2647)
-    ("ARIES" #x2648)
-    ("TAURUS" #x2649)
-    ("GEMINI" #x264A)
-    ("CANCER" #x264B)
-    ("LEO" #x264C)
-    ("VIRGO" #x264D)
-    ("LIBRA" #x264E)
-    ("SCORPIUS" #x264F)
-    ("SAGITTARIUS" #x2650)
-    ("CAPRICORN" #x2651)
-    ("AQUARIUS" #x2652)
-    ("PISCES" #x2653)
-    ("WHITE CHESS KING" #x2654)
-    ("WHITE CHESS QUEEN" #x2655)
-    ("WHITE CHESS ROOK" #x2656)
-    ("WHITE CHESS BISHOP" #x2657)
-    ("WHITE CHESS KNIGHT" #x2658)
-    ("WHITE CHESS PAWN" #x2659)
-    ("BLACK CHESS KING" #x265A)
-    ("BLACK CHESS QUEEN" #x265B)
-    ("BLACK CHESS ROOK" #x265C)
-    ("BLACK CHESS BISHOP" #x265D)
-    ("BLACK CHESS KNIGHT" #x265E)
-    ("BLACK CHESS PAWN" #x265F)
-    ("BLACK SPADE SUIT" #x2660)
-    ("WHITE HEART SUIT" #x2661)
-    ("WHITE DIAMOND SUIT" #x2662)
-    ("BLACK CLUB SUIT" #x2663)
-    ("WHITE SPADE SUIT" #x2664)
-    ("BLACK HEART SUIT" #x2665)
-    ("BLACK DIAMOND SUIT" #x2666)
-    ("WHITE CLUB SUIT" #x2667)
-    ("HOT SPRINGS" #x2668)
-    ("QUARTER NOTE" #x2669)
-    ("EIGHTH NOTE" #x266A)
-    ("BEAMED EIGHTH NOTES" #x266B)
-    ("BEAMED SIXTEENTH NOTES" #x266C)
-    ("MUSIC FLAT SIGN" #x266D)
-    ("MUSIC NATURAL SIGN" #x266E)
-    ("MUSIC SHARP SIGN" #x266F)
-    ("WEST SYRIAC CROSS" #x2670)
-    ("EAST SYRIAC CROSS" #x2671)
-    ("UNIVERSAL RECYCLING SYMBOL" #x2672)
-    ("RECYCLING SYMBOL FOR TYPE-1 PLASTICS" #x2673)
-    ("RECYCLING SYMBOL FOR TYPE-2 PLASTICS" #x2674)
-    ("RECYCLING SYMBOL FOR TYPE-3 PLASTICS" #x2675)
-    ("RECYCLING SYMBOL FOR TYPE-4 PLASTICS" #x2676)
-    ("RECYCLING SYMBOL FOR TYPE-5 PLASTICS" #x2677)
-    ("RECYCLING SYMBOL FOR TYPE-6 PLASTICS" #x2678)
-    ("RECYCLING SYMBOL FOR TYPE-7 PLASTICS" #x2679)
-    ("RECYCLING SYMBOL FOR GENERIC MATERIALS" #x267A)
-    ("BLACK UNIVERSAL RECYCLING SYMBOL" #x267B)
-    ("RECYCLED PAPER SYMBOL" #x267C)
-    ("PARTIALLY-RECYCLED PAPER SYMBOL" #x267D)
-    ("DIE FACE-1" #x2680)
-    ("DIE FACE-2" #x2681)
-    ("DIE FACE-3" #x2682)
-    ("DIE FACE-4" #x2683)
-    ("DIE FACE-5" #x2684)
-    ("DIE FACE-6" #x2685)
-    ("WHITE CIRCLE WITH DOT RIGHT" #x2686)
-    ("WHITE CIRCLE WITH TWO DOTS" #x2687)
-    ("BLACK CIRCLE WITH WHITE DOT RIGHT" #x2688)
-    ("BLACK CIRCLE WITH TWO WHITE DOTS" #x2689)
-    ))
-
diff --git a/etc/nxml/02700-027BF.el b/etc/nxml/02700-027BF.el
deleted file mode 100644 (file)
index 5ca5d8f..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-(nxml-define-char-name-set 'dingbats
-  '(("UPPER BLADE SCISSORS" #x2701)
-    ("BLACK SCISSORS" #x2702)
-    ("LOWER BLADE SCISSORS" #x2703)
-    ("WHITE SCISSORS" #x2704)
-    ("TELEPHONE LOCATION SIGN" #x2706)
-    ("TAPE DRIVE" #x2707)
-    ("AIRPLANE" #x2708)
-    ("ENVELOPE" #x2709)
-    ("VICTORY HAND" #x270C)
-    ("WRITING HAND" #x270D)
-    ("LOWER RIGHT PENCIL" #x270E)
-    ("PENCIL" #x270F)
-    ("UPPER RIGHT PENCIL" #x2710)
-    ("WHITE NIB" #x2711)
-    ("BLACK NIB" #x2712)
-    ("CHECK MARK" #x2713)
-    ("HEAVY CHECK MARK" #x2714)
-    ("MULTIPLICATION X" #x2715)
-    ("HEAVY MULTIPLICATION X" #x2716)
-    ("BALLOT X" #x2717)
-    ("HEAVY BALLOT X" #x2718)
-    ("OUTLINED GREEK CROSS" #x2719)
-    ("HEAVY GREEK CROSS" #x271A)
-    ("OPEN CENTRE CROSS" #x271B)
-    ("HEAVY OPEN CENTRE CROSS" #x271C)
-    ("LATIN CROSS" #x271D)
-    ("SHADOWED WHITE LATIN CROSS" #x271E)
-    ("OUTLINED LATIN CROSS" #x271F)
-    ("MALTESE CROSS" #x2720)
-    ("STAR OF DAVID" #x2721)
-    ("FOUR TEARDROP-SPOKED ASTERISK" #x2722)
-    ("FOUR BALLOON-SPOKED ASTERISK" #x2723)
-    ("HEAVY FOUR BALLOON-SPOKED ASTERISK" #x2724)
-    ("FOUR CLUB-SPOKED ASTERISK" #x2725)
-    ("BLACK FOUR POINTED STAR" #x2726)
-    ("WHITE FOUR POINTED STAR" #x2727)
-    ("STRESS OUTLINED WHITE STAR" #x2729)
-    ("CIRCLED WHITE STAR" #x272A)
-    ("OPEN CENTRE BLACK STAR" #x272B)
-    ("BLACK CENTRE WHITE STAR" #x272C)
-    ("OUTLINED BLACK STAR" #x272D)
-    ("HEAVY OUTLINED BLACK STAR" #x272E)
-    ("PINWHEEL STAR" #x272F)
-    ("SHADOWED WHITE STAR" #x2730)
-    ("HEAVY ASTERISK" #x2731)
-    ("OPEN CENTRE ASTERISK" #x2732)
-    ("EIGHT SPOKED ASTERISK" #x2733)
-    ("EIGHT POINTED BLACK STAR" #x2734)
-    ("EIGHT POINTED PINWHEEL STAR" #x2735)
-    ("SIX POINTED BLACK STAR" #x2736)
-    ("EIGHT POINTED RECTILINEAR BLACK STAR" #x2737)
-    ("HEAVY EIGHT POINTED RECTILINEAR BLACK STAR" #x2738)
-    ("TWELVE POINTED BLACK STAR" #x2739)
-    ("SIXTEEN POINTED ASTERISK" #x273A)
-    ("TEARDROP-SPOKED ASTERISK" #x273B)
-    ("OPEN CENTRE TEARDROP-SPOKED ASTERISK" #x273C)
-    ("HEAVY TEARDROP-SPOKED ASTERISK" #x273D)
-    ("SIX PETALLED BLACK AND WHITE FLORETTE" #x273E)
-    ("BLACK FLORETTE" #x273F)
-    ("WHITE FLORETTE" #x2740)
-    ("EIGHT PETALLED OUTLINED BLACK FLORETTE" #x2741)
-    ("CIRCLED OPEN CENTRE EIGHT POINTED STAR" #x2742)
-    ("HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK" #x2743)
-    ("SNOWFLAKE" #x2744)
-    ("TIGHT TRIFOLIATE SNOWFLAKE" #x2745)
-    ("HEAVY CHEVRON SNOWFLAKE" #x2746)
-    ("SPARKLE" #x2747)
-    ("HEAVY SPARKLE" #x2748)
-    ("BALLOON-SPOKED ASTERISK" #x2749)
-    ("EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274A)
-    ("HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274B)
-    ("SHADOWED WHITE CIRCLE" #x274D)
-    ("LOWER RIGHT DROP-SHADOWED WHITE SQUARE" #x274F)
-    ("UPPER RIGHT DROP-SHADOWED WHITE SQUARE" #x2750)
-    ("LOWER RIGHT SHADOWED WHITE SQUARE" #x2751)
-    ("UPPER RIGHT SHADOWED WHITE SQUARE" #x2752)
-    ("BLACK DIAMOND MINUS WHITE X" #x2756)
-    ("LIGHT VERTICAL BAR" #x2758)
-    ("MEDIUM VERTICAL BAR" #x2759)
-    ("HEAVY VERTICAL BAR" #x275A)
-    ("HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275B)
-    ("HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT" #x275C)
-    ("HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275D)
-    ("HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT" #x275E)
-    ("CURVED STEM PARAGRAPH SIGN ORNAMENT" #x2761)
-    ("HEAVY EXCLAMATION MARK ORNAMENT" #x2762)
-    ("HEAVY HEART EXCLAMATION MARK ORNAMENT" #x2763)
-    ("HEAVY BLACK HEART" #x2764)
-    ("ROTATED HEAVY BLACK HEART BULLET" #x2765)
-    ("FLORAL HEART" #x2766)
-    ("ROTATED FLORAL HEART BULLET" #x2767)
-    ("MEDIUM LEFT PARENTHESIS ORNAMENT" #x2768)
-    ("MEDIUM RIGHT PARENTHESIS ORNAMENT" #x2769)
-    ("MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT" #x276A)
-    ("MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT" #x276B)
-    ("MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT" #x276C)
-    ("MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x276D)
-    ("HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276E)
-    ("HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276F)
-    ("HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT" #x2770)
-    ("HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x2771)
-    ("LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT" #x2772)
-    ("LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT" #x2773)
-    ("MEDIUM LEFT CURLY BRACKET ORNAMENT" #x2774)
-    ("MEDIUM RIGHT CURLY BRACKET ORNAMENT" #x2775)
-    ("DINGBAT NEGATIVE CIRCLED DIGIT ONE" #x2776)
-    ("DINGBAT NEGATIVE CIRCLED DIGIT TWO" #x2777)
-    ("DINGBAT NEGATIVE CIRCLED DIGIT THREE" #x2778)
-    ("DINGBAT NEGATIVE CIRCLED DIGIT FOUR" #x2779)
-    ("DINGBAT NEGATIVE CIRCLED DIGIT FIVE" #x277A)
-    ("DINGBAT NEGATIVE CIRCLED DIGIT SIX" #x277B)
-    ("DINGBAT NEGATIVE CIRCLED DIGIT SEVEN" #x277C)
-    ("DINGBAT NEGATIVE CIRCLED DIGIT EIGHT" #x277D)
-    ("DINGBAT NEGATIVE CIRCLED DIGIT NINE" #x277E)
-    ("DINGBAT NEGATIVE CIRCLED NUMBER TEN" #x277F)
-    ("DINGBAT CIRCLED SANS-SERIF DIGIT ONE" #x2780)
-    ("DINGBAT CIRCLED SANS-SERIF DIGIT TWO" #x2781)
-    ("DINGBAT CIRCLED SANS-SERIF DIGIT THREE" #x2782)
-    ("DINGBAT CIRCLED SANS-SERIF DIGIT FOUR" #x2783)
-    ("DINGBAT CIRCLED SANS-SERIF DIGIT FIVE" #x2784)
-    ("DINGBAT CIRCLED SANS-SERIF DIGIT SIX" #x2785)
-    ("DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN" #x2786)
-    ("DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT" #x2787)
-    ("DINGBAT CIRCLED SANS-SERIF DIGIT NINE" #x2788)
-    ("DINGBAT CIRCLED SANS-SERIF NUMBER TEN" #x2789)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE" #x278A)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO" #x278B)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE" #x278C)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR" #x278D)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE" #x278E)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX" #x278F)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN" #x2790)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT" #x2791)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE" #x2792)
-    ("DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN" #x2793)
-    ("HEAVY WIDE-HEADED RIGHTWARDS ARROW" #x2794)
-    ("HEAVY SOUTH EAST ARROW" #x2798)
-    ("HEAVY RIGHTWARDS ARROW" #x2799)
-    ("HEAVY NORTH EAST ARROW" #x279A)
-    ("DRAFTING POINT RIGHTWARDS ARROW" #x279B)
-    ("HEAVY ROUND-TIPPED RIGHTWARDS ARROW" #x279C)
-    ("TRIANGLE-HEADED RIGHTWARDS ARROW" #x279D)
-    ("HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW" #x279E)
-    ("DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x279F)
-    ("HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x27A0)
-    ("BLACK RIGHTWARDS ARROW" #x27A1)
-    ("THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD" #x27A2)
-    ("THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD" #x27A3)
-    ("BLACK RIGHTWARDS ARROWHEAD" #x27A4)
-    ("HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW" #x27A5)
-    ("HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW" #x27A6)
-    ("SQUAT BLACK RIGHTWARDS ARROW" #x27A7)
-    ("HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW" #x27A8)
-    ("RIGHT-SHADED WHITE RIGHTWARDS ARROW" #x27A9)
-    ("LEFT-SHADED WHITE RIGHTWARDS ARROW" #x27AA)
-    ("BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AB)
-    ("FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AC)
-    ("HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AD)
-    ("HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AE)
-    ("NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AF)
-    ("NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27B1)
-    ("CIRCLED HEAVY WHITE RIGHTWARDS ARROW" #x27B2)
-    ("WHITE-FEATHERED RIGHTWARDS ARROW" #x27B3)
-    ("BLACK-FEATHERED SOUTH EAST ARROW" #x27B4)
-    ("BLACK-FEATHERED RIGHTWARDS ARROW" #x27B5)
-    ("BLACK-FEATHERED NORTH EAST ARROW" #x27B6)
-    ("HEAVY BLACK-FEATHERED SOUTH EAST ARROW" #x27B7)
-    ("HEAVY BLACK-FEATHERED RIGHTWARDS ARROW" #x27B8)
-    ("HEAVY BLACK-FEATHERED NORTH EAST ARROW" #x27B9)
-    ("TEARDROP-BARBED RIGHTWARDS ARROW" #x27BA)
-    ("HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW" #x27BB)
-    ("WEDGE-TAILED RIGHTWARDS ARROW" #x27BC)
-    ("HEAVY WEDGE-TAILED RIGHTWARDS ARROW" #x27BD)
-    ("OPEN-OUTLINED RIGHTWARDS ARROW" #x27BE)
-    ))
-
diff --git a/etc/nxml/027C0-027EF.el b/etc/nxml/027C0-027EF.el
deleted file mode 100644 (file)
index 04e9d5c..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-a
-  '(("WHITE DIAMOND WITH CENTRED DOT" #x27D0)
-    ("AND WITH DOT" #x27D1)
-    ("ELEMENT OF OPENING UPWARDS" #x27D2)
-    ("LOWER RIGHT CORNER WITH DOT" #x27D3)
-    ("UPPER LEFT CORNER WITH DOT" #x27D4)
-    ("LEFT OUTER JOIN" #x27D5)
-    ("RIGHT OUTER JOIN" #x27D6)
-    ("FULL OUTER JOIN" #x27D7)
-    ("LARGE UP TACK" #x27D8)
-    ("LARGE DOWN TACK" #x27D9)
-    ("LEFT AND RIGHT DOUBLE TURNSTILE" #x27DA)
-    ("LEFT AND RIGHT TACK" #x27DB)
-    ("LEFT MULTIMAP" #x27DC)
-    ("LONG RIGHT TACK" #x27DD)
-    ("LONG LEFT TACK" #x27DE)
-    ("UP TACK WITH CIRCLE ABOVE" #x27DF)
-    ("LOZENGE DIVIDED BY HORIZONTAL RULE" #x27E0)
-    ("WHITE CONCAVE-SIDED DIAMOND" #x27E1)
-    ("WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK" #x27E2)
-    ("WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK" #x27E3)
-    ("WHITE SQUARE WITH LEFTWARDS TICK" #x27E4)
-    ("WHITE SQUARE WITH RIGHTWARDS TICK" #x27E5)
-    ("MATHEMATICAL LEFT WHITE SQUARE BRACKET" #x27E6)
-    ("MATHEMATICAL RIGHT WHITE SQUARE BRACKET" #x27E7)
-    ("MATHEMATICAL LEFT ANGLE BRACKET" #x27E8)
-    ("MATHEMATICAL RIGHT ANGLE BRACKET" #x27E9)
-    ("MATHEMATICAL LEFT DOUBLE ANGLE BRACKET" #x27EA)
-    ("MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET" #x27EB)
-    ))
-
diff --git a/etc/nxml/027F0-027FF.el b/etc/nxml/027F0-027FF.el
deleted file mode 100644 (file)
index dce4f7f..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(nxml-define-char-name-set 'supplemental-arrows-a
-  '(("UPWARDS QUADRUPLE ARROW" #x27F0)
-    ("DOWNWARDS QUADRUPLE ARROW" #x27F1)
-    ("ANTICLOCKWISE GAPPED CIRCLE ARROW" #x27F2)
-    ("CLOCKWISE GAPPED CIRCLE ARROW" #x27F3)
-    ("RIGHT ARROW WITH CIRCLED PLUS" #x27F4)
-    ("LONG LEFTWARDS ARROW" #x27F5)
-    ("LONG RIGHTWARDS ARROW" #x27F6)
-    ("LONG LEFT RIGHT ARROW" #x27F7)
-    ("LONG LEFTWARDS DOUBLE ARROW" #x27F8)
-    ("LONG RIGHTWARDS DOUBLE ARROW" #x27F9)
-    ("LONG LEFT RIGHT DOUBLE ARROW" #x27FA)
-    ("LONG LEFTWARDS ARROW FROM BAR" #x27FB)
-    ("LONG RIGHTWARDS ARROW FROM BAR" #x27FC)
-    ("LONG LEFTWARDS DOUBLE ARROW FROM BAR" #x27FD)
-    ("LONG RIGHTWARDS DOUBLE ARROW FROM BAR" #x27FE)
-    ("LONG RIGHTWARDS SQUIGGLE ARROW" #x27FF)
-    ))
-
diff --git a/etc/nxml/02800-028FF.el b/etc/nxml/02800-028FF.el
deleted file mode 100644 (file)
index efcf879..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-(nxml-define-char-name-set 'braille-patterns
-  '(("BRAILLE PATTERN BLANK" #x2800)
-    ("BRAILLE PATTERN DOTS-1" #x2801)
-    ("BRAILLE PATTERN DOTS-2" #x2802)
-    ("BRAILLE PATTERN DOTS-12" #x2803)
-    ("BRAILLE PATTERN DOTS-3" #x2804)
-    ("BRAILLE PATTERN DOTS-13" #x2805)
-    ("BRAILLE PATTERN DOTS-23" #x2806)
-    ("BRAILLE PATTERN DOTS-123" #x2807)
-    ("BRAILLE PATTERN DOTS-4" #x2808)
-    ("BRAILLE PATTERN DOTS-14" #x2809)
-    ("BRAILLE PATTERN DOTS-24" #x280A)
-    ("BRAILLE PATTERN DOTS-124" #x280B)
-    ("BRAILLE PATTERN DOTS-34" #x280C)
-    ("BRAILLE PATTERN DOTS-134" #x280D)
-    ("BRAILLE PATTERN DOTS-234" #x280E)
-    ("BRAILLE PATTERN DOTS-1234" #x280F)
-    ("BRAILLE PATTERN DOTS-5" #x2810)
-    ("BRAILLE PATTERN DOTS-15" #x2811)
-    ("BRAILLE PATTERN DOTS-25" #x2812)
-    ("BRAILLE PATTERN DOTS-125" #x2813)
-    ("BRAILLE PATTERN DOTS-35" #x2814)
-    ("BRAILLE PATTERN DOTS-135" #x2815)
-    ("BRAILLE PATTERN DOTS-235" #x2816)
-    ("BRAILLE PATTERN DOTS-1235" #x2817)
-    ("BRAILLE PATTERN DOTS-45" #x2818)
-    ("BRAILLE PATTERN DOTS-145" #x2819)
-    ("BRAILLE PATTERN DOTS-245" #x281A)
-    ("BRAILLE PATTERN DOTS-1245" #x281B)
-    ("BRAILLE PATTERN DOTS-345" #x281C)
-    ("BRAILLE PATTERN DOTS-1345" #x281D)
-    ("BRAILLE PATTERN DOTS-2345" #x281E)
-    ("BRAILLE PATTERN DOTS-12345" #x281F)
-    ("BRAILLE PATTERN DOTS-6" #x2820)
-    ("BRAILLE PATTERN DOTS-16" #x2821)
-    ("BRAILLE PATTERN DOTS-26" #x2822)
-    ("BRAILLE PATTERN DOTS-126" #x2823)
-    ("BRAILLE PATTERN DOTS-36" #x2824)
-    ("BRAILLE PATTERN DOTS-136" #x2825)
-    ("BRAILLE PATTERN DOTS-236" #x2826)
-    ("BRAILLE PATTERN DOTS-1236" #x2827)
-    ("BRAILLE PATTERN DOTS-46" #x2828)
-    ("BRAILLE PATTERN DOTS-146" #x2829)
-    ("BRAILLE PATTERN DOTS-246" #x282A)
-    ("BRAILLE PATTERN DOTS-1246" #x282B)
-    ("BRAILLE PATTERN DOTS-346" #x282C)
-    ("BRAILLE PATTERN DOTS-1346" #x282D)
-    ("BRAILLE PATTERN DOTS-2346" #x282E)
-    ("BRAILLE PATTERN DOTS-12346" #x282F)
-    ("BRAILLE PATTERN DOTS-56" #x2830)
-    ("BRAILLE PATTERN DOTS-156" #x2831)
-    ("BRAILLE PATTERN DOTS-256" #x2832)
-    ("BRAILLE PATTERN DOTS-1256" #x2833)
-    ("BRAILLE PATTERN DOTS-356" #x2834)
-    ("BRAILLE PATTERN DOTS-1356" #x2835)
-    ("BRAILLE PATTERN DOTS-2356" #x2836)
-    ("BRAILLE PATTERN DOTS-12356" #x2837)
-    ("BRAILLE PATTERN DOTS-456" #x2838)
-    ("BRAILLE PATTERN DOTS-1456" #x2839)
-    ("BRAILLE PATTERN DOTS-2456" #x283A)
-    ("BRAILLE PATTERN DOTS-12456" #x283B)
-    ("BRAILLE PATTERN DOTS-3456" #x283C)
-    ("BRAILLE PATTERN DOTS-13456" #x283D)
-    ("BRAILLE PATTERN DOTS-23456" #x283E)
-    ("BRAILLE PATTERN DOTS-123456" #x283F)
-    ("BRAILLE PATTERN DOTS-7" #x2840)
-    ("BRAILLE PATTERN DOTS-17" #x2841)
-    ("BRAILLE PATTERN DOTS-27" #x2842)
-    ("BRAILLE PATTERN DOTS-127" #x2843)
-    ("BRAILLE PATTERN DOTS-37" #x2844)
-    ("BRAILLE PATTERN DOTS-137" #x2845)
-    ("BRAILLE PATTERN DOTS-237" #x2846)
-    ("BRAILLE PATTERN DOTS-1237" #x2847)
-    ("BRAILLE PATTERN DOTS-47" #x2848)
-    ("BRAILLE PATTERN DOTS-147" #x2849)
-    ("BRAILLE PATTERN DOTS-247" #x284A)
-    ("BRAILLE PATTERN DOTS-1247" #x284B)
-    ("BRAILLE PATTERN DOTS-347" #x284C)
-    ("BRAILLE PATTERN DOTS-1347" #x284D)
-    ("BRAILLE PATTERN DOTS-2347" #x284E)
-    ("BRAILLE PATTERN DOTS-12347" #x284F)
-    ("BRAILLE PATTERN DOTS-57" #x2850)
-    ("BRAILLE PATTERN DOTS-157" #x2851)
-    ("BRAILLE PATTERN DOTS-257" #x2852)
-    ("BRAILLE PATTERN DOTS-1257" #x2853)
-    ("BRAILLE PATTERN DOTS-357" #x2854)
-    ("BRAILLE PATTERN DOTS-1357" #x2855)
-    ("BRAILLE PATTERN DOTS-2357" #x2856)
-    ("BRAILLE PATTERN DOTS-12357" #x2857)
-    ("BRAILLE PATTERN DOTS-457" #x2858)
-    ("BRAILLE PATTERN DOTS-1457" #x2859)
-    ("BRAILLE PATTERN DOTS-2457" #x285A)
-    ("BRAILLE PATTERN DOTS-12457" #x285B)
-    ("BRAILLE PATTERN DOTS-3457" #x285C)
-    ("BRAILLE PATTERN DOTS-13457" #x285D)
-    ("BRAILLE PATTERN DOTS-23457" #x285E)
-    ("BRAILLE PATTERN DOTS-123457" #x285F)
-    ("BRAILLE PATTERN DOTS-67" #x2860)
-    ("BRAILLE PATTERN DOTS-167" #x2861)
-    ("BRAILLE PATTERN DOTS-267" #x2862)
-    ("BRAILLE PATTERN DOTS-1267" #x2863)
-    ("BRAILLE PATTERN DOTS-367" #x2864)
-    ("BRAILLE PATTERN DOTS-1367" #x2865)
-    ("BRAILLE PATTERN DOTS-2367" #x2866)
-    ("BRAILLE PATTERN DOTS-12367" #x2867)
-    ("BRAILLE PATTERN DOTS-467" #x2868)
-    ("BRAILLE PATTERN DOTS-1467" #x2869)
-    ("BRAILLE PATTERN DOTS-2467" #x286A)
-    ("BRAILLE PATTERN DOTS-12467" #x286B)
-    ("BRAILLE PATTERN DOTS-3467" #x286C)
-    ("BRAILLE PATTERN DOTS-13467" #x286D)
-    ("BRAILLE PATTERN DOTS-23467" #x286E)
-    ("BRAILLE PATTERN DOTS-123467" #x286F)
-    ("BRAILLE PATTERN DOTS-567" #x2870)
-    ("BRAILLE PATTERN DOTS-1567" #x2871)
-    ("BRAILLE PATTERN DOTS-2567" #x2872)
-    ("BRAILLE PATTERN DOTS-12567" #x2873)
-    ("BRAILLE PATTERN DOTS-3567" #x2874)
-    ("BRAILLE PATTERN DOTS-13567" #x2875)
-    ("BRAILLE PATTERN DOTS-23567" #x2876)
-    ("BRAILLE PATTERN DOTS-123567" #x2877)
-    ("BRAILLE PATTERN DOTS-4567" #x2878)
-    ("BRAILLE PATTERN DOTS-14567" #x2879)
-    ("BRAILLE PATTERN DOTS-24567" #x287A)
-    ("BRAILLE PATTERN DOTS-124567" #x287B)
-    ("BRAILLE PATTERN DOTS-34567" #x287C)
-    ("BRAILLE PATTERN DOTS-134567" #x287D)
-    ("BRAILLE PATTERN DOTS-234567" #x287E)
-    ("BRAILLE PATTERN DOTS-1234567" #x287F)
-    ("BRAILLE PATTERN DOTS-8" #x2880)
-    ("BRAILLE PATTERN DOTS-18" #x2881)
-    ("BRAILLE PATTERN DOTS-28" #x2882)
-    ("BRAILLE PATTERN DOTS-128" #x2883)
-    ("BRAILLE PATTERN DOTS-38" #x2884)
-    ("BRAILLE PATTERN DOTS-138" #x2885)
-    ("BRAILLE PATTERN DOTS-238" #x2886)
-    ("BRAILLE PATTERN DOTS-1238" #x2887)
-    ("BRAILLE PATTERN DOTS-48" #x2888)
-    ("BRAILLE PATTERN DOTS-148" #x2889)
-    ("BRAILLE PATTERN DOTS-248" #x288A)
-    ("BRAILLE PATTERN DOTS-1248" #x288B)
-    ("BRAILLE PATTERN DOTS-348" #x288C)
-    ("BRAILLE PATTERN DOTS-1348" #x288D)
-    ("BRAILLE PATTERN DOTS-2348" #x288E)
-    ("BRAILLE PATTERN DOTS-12348" #x288F)
-    ("BRAILLE PATTERN DOTS-58" #x2890)
-    ("BRAILLE PATTERN DOTS-158" #x2891)
-    ("BRAILLE PATTERN DOTS-258" #x2892)
-    ("BRAILLE PATTERN DOTS-1258" #x2893)
-    ("BRAILLE PATTERN DOTS-358" #x2894)
-    ("BRAILLE PATTERN DOTS-1358" #x2895)
-    ("BRAILLE PATTERN DOTS-2358" #x2896)
-    ("BRAILLE PATTERN DOTS-12358" #x2897)
-    ("BRAILLE PATTERN DOTS-458" #x2898)
-    ("BRAILLE PATTERN DOTS-1458" #x2899)
-    ("BRAILLE PATTERN DOTS-2458" #x289A)
-    ("BRAILLE PATTERN DOTS-12458" #x289B)
-    ("BRAILLE PATTERN DOTS-3458" #x289C)
-    ("BRAILLE PATTERN DOTS-13458" #x289D)
-    ("BRAILLE PATTERN DOTS-23458" #x289E)
-    ("BRAILLE PATTERN DOTS-123458" #x289F)
-    ("BRAILLE PATTERN DOTS-68" #x28A0)
-    ("BRAILLE PATTERN DOTS-168" #x28A1)
-    ("BRAILLE PATTERN DOTS-268" #x28A2)
-    ("BRAILLE PATTERN DOTS-1268" #x28A3)
-    ("BRAILLE PATTERN DOTS-368" #x28A4)
-    ("BRAILLE PATTERN DOTS-1368" #x28A5)
-    ("BRAILLE PATTERN DOTS-2368" #x28A6)
-    ("BRAILLE PATTERN DOTS-12368" #x28A7)
-    ("BRAILLE PATTERN DOTS-468" #x28A8)
-    ("BRAILLE PATTERN DOTS-1468" #x28A9)
-    ("BRAILLE PATTERN DOTS-2468" #x28AA)
-    ("BRAILLE PATTERN DOTS-12468" #x28AB)
-    ("BRAILLE PATTERN DOTS-3468" #x28AC)
-    ("BRAILLE PATTERN DOTS-13468" #x28AD)
-    ("BRAILLE PATTERN DOTS-23468" #x28AE)
-    ("BRAILLE PATTERN DOTS-123468" #x28AF)
-    ("BRAILLE PATTERN DOTS-568" #x28B0)
-    ("BRAILLE PATTERN DOTS-1568" #x28B1)
-    ("BRAILLE PATTERN DOTS-2568" #x28B2)
-    ("BRAILLE PATTERN DOTS-12568" #x28B3)
-    ("BRAILLE PATTERN DOTS-3568" #x28B4)
-    ("BRAILLE PATTERN DOTS-13568" #x28B5)
-    ("BRAILLE PATTERN DOTS-23568" #x28B6)
-    ("BRAILLE PATTERN DOTS-123568" #x28B7)
-    ("BRAILLE PATTERN DOTS-4568" #x28B8)
-    ("BRAILLE PATTERN DOTS-14568" #x28B9)
-    ("BRAILLE PATTERN DOTS-24568" #x28BA)
-    ("BRAILLE PATTERN DOTS-124568" #x28BB)
-    ("BRAILLE PATTERN DOTS-34568" #x28BC)
-    ("BRAILLE PATTERN DOTS-134568" #x28BD)
-    ("BRAILLE PATTERN DOTS-234568" #x28BE)
-    ("BRAILLE PATTERN DOTS-1234568" #x28BF)
-    ("BRAILLE PATTERN DOTS-78" #x28C0)
-    ("BRAILLE PATTERN DOTS-178" #x28C1)
-    ("BRAILLE PATTERN DOTS-278" #x28C2)
-    ("BRAILLE PATTERN DOTS-1278" #x28C3)
-    ("BRAILLE PATTERN DOTS-378" #x28C4)
-    ("BRAILLE PATTERN DOTS-1378" #x28C5)
-    ("BRAILLE PATTERN DOTS-2378" #x28C6)
-    ("BRAILLE PATTERN DOTS-12378" #x28C7)
-    ("BRAILLE PATTERN DOTS-478" #x28C8)
-    ("BRAILLE PATTERN DOTS-1478" #x28C9)
-    ("BRAILLE PATTERN DOTS-2478" #x28CA)
-    ("BRAILLE PATTERN DOTS-12478" #x28CB)
-    ("BRAILLE PATTERN DOTS-3478" #x28CC)
-    ("BRAILLE PATTERN DOTS-13478" #x28CD)
-    ("BRAILLE PATTERN DOTS-23478" #x28CE)
-    ("BRAILLE PATTERN DOTS-123478" #x28CF)
-    ("BRAILLE PATTERN DOTS-578" #x28D0)
-    ("BRAILLE PATTERN DOTS-1578" #x28D1)
-    ("BRAILLE PATTERN DOTS-2578" #x28D2)
-    ("BRAILLE PATTERN DOTS-12578" #x28D3)
-    ("BRAILLE PATTERN DOTS-3578" #x28D4)
-    ("BRAILLE PATTERN DOTS-13578" #x28D5)
-    ("BRAILLE PATTERN DOTS-23578" #x28D6)
-    ("BRAILLE PATTERN DOTS-123578" #x28D7)
-    ("BRAILLE PATTERN DOTS-4578" #x28D8)
-    ("BRAILLE PATTERN DOTS-14578" #x28D9)
-    ("BRAILLE PATTERN DOTS-24578" #x28DA)
-    ("BRAILLE PATTERN DOTS-124578" #x28DB)
-    ("BRAILLE PATTERN DOTS-34578" #x28DC)
-    ("BRAILLE PATTERN DOTS-134578" #x28DD)
-    ("BRAILLE PATTERN DOTS-234578" #x28DE)
-    ("BRAILLE PATTERN DOTS-1234578" #x28DF)
-    ("BRAILLE PATTERN DOTS-678" #x28E0)
-    ("BRAILLE PATTERN DOTS-1678" #x28E1)
-    ("BRAILLE PATTERN DOTS-2678" #x28E2)
-    ("BRAILLE PATTERN DOTS-12678" #x28E3)
-    ("BRAILLE PATTERN DOTS-3678" #x28E4)
-    ("BRAILLE PATTERN DOTS-13678" #x28E5)
-    ("BRAILLE PATTERN DOTS-23678" #x28E6)
-    ("BRAILLE PATTERN DOTS-123678" #x28E7)
-    ("BRAILLE PATTERN DOTS-4678" #x28E8)
-    ("BRAILLE PATTERN DOTS-14678" #x28E9)
-    ("BRAILLE PATTERN DOTS-24678" #x28EA)
-    ("BRAILLE PATTERN DOTS-124678" #x28EB)
-    ("BRAILLE PATTERN DOTS-34678" #x28EC)
-    ("BRAILLE PATTERN DOTS-134678" #x28ED)
-    ("BRAILLE PATTERN DOTS-234678" #x28EE)
-    ("BRAILLE PATTERN DOTS-1234678" #x28EF)
-    ("BRAILLE PATTERN DOTS-5678" #x28F0)
-    ("BRAILLE PATTERN DOTS-15678" #x28F1)
-    ("BRAILLE PATTERN DOTS-25678" #x28F2)
-    ("BRAILLE PATTERN DOTS-125678" #x28F3)
-    ("BRAILLE PATTERN DOTS-35678" #x28F4)
-    ("BRAILLE PATTERN DOTS-135678" #x28F5)
-    ("BRAILLE PATTERN DOTS-235678" #x28F6)
-    ("BRAILLE PATTERN DOTS-1235678" #x28F7)
-    ("BRAILLE PATTERN DOTS-45678" #x28F8)
-    ("BRAILLE PATTERN DOTS-145678" #x28F9)
-    ("BRAILLE PATTERN DOTS-245678" #x28FA)
-    ("BRAILLE PATTERN DOTS-1245678" #x28FB)
-    ("BRAILLE PATTERN DOTS-345678" #x28FC)
-    ("BRAILLE PATTERN DOTS-1345678" #x28FD)
-    ("BRAILLE PATTERN DOTS-2345678" #x28FE)
-    ("BRAILLE PATTERN DOTS-12345678" #x28FF)
-    ))
-
diff --git a/etc/nxml/02900-0297F.el b/etc/nxml/02900-0297F.el
deleted file mode 100644 (file)
index bf8c200..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-(nxml-define-char-name-set 'supplemental-arrows-b
-  '(("RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE" #x2900)
-    ("RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE" #x2901)
-    ("LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2902)
-    ("RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2903)
-    ("LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE" #x2904)
-    ("RIGHTWARDS TWO-HEADED ARROW FROM BAR" #x2905)
-    ("LEFTWARDS DOUBLE ARROW FROM BAR" #x2906)
-    ("RIGHTWARDS DOUBLE ARROW FROM BAR" #x2907)
-    ("DOWNWARDS ARROW WITH HORIZONTAL STROKE" #x2908)
-    ("UPWARDS ARROW WITH HORIZONTAL STROKE" #x2909)
-    ("UPWARDS TRIPLE ARROW" #x290A)
-    ("DOWNWARDS TRIPLE ARROW" #x290B)
-    ("LEFTWARDS DOUBLE DASH ARROW" #x290C)
-    ("RIGHTWARDS DOUBLE DASH ARROW" #x290D)
-    ("LEFTWARDS TRIPLE DASH ARROW" #x290E)
-    ("RIGHTWARDS TRIPLE DASH ARROW" #x290F)
-    ("RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW" #x2910)
-    ("RIGHTWARDS ARROW WITH DOTTED STEM" #x2911)
-    ("UPWARDS ARROW TO BAR" #x2912)
-    ("DOWNWARDS ARROW TO BAR" #x2913)
-    ("RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE" #x2914)
-    ("RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2915)
-    ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL" #x2916)
-    ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE" #x2917)
-    ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2918)
-    ("LEFTWARDS ARROW-TAIL" #x2919)
-    ("RIGHTWARDS ARROW-TAIL" #x291A)
-    ("LEFTWARDS DOUBLE ARROW-TAIL" #x291B)
-    ("RIGHTWARDS DOUBLE ARROW-TAIL" #x291C)
-    ("LEFTWARDS ARROW TO BLACK DIAMOND" #x291D)
-    ("RIGHTWARDS ARROW TO BLACK DIAMOND" #x291E)
-    ("LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x291F)
-    ("RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x2920)
-    ("NORTH WEST AND SOUTH EAST ARROW" #x2921)
-    ("NORTH EAST AND SOUTH WEST ARROW" #x2922)
-    ("NORTH WEST ARROW WITH HOOK" #x2923)
-    ("NORTH EAST ARROW WITH HOOK" #x2924)
-    ("SOUTH EAST ARROW WITH HOOK" #x2925)
-    ("SOUTH WEST ARROW WITH HOOK" #x2926)
-    ("NORTH WEST ARROW AND NORTH EAST ARROW" #x2927)
-    ("NORTH EAST ARROW AND SOUTH EAST ARROW" #x2928)
-    ("SOUTH EAST ARROW AND SOUTH WEST ARROW" #x2929)
-    ("SOUTH WEST ARROW AND NORTH WEST ARROW" #x292A)
-    ("RISING DIAGONAL CROSSING FALLING DIAGONAL" #x292B)
-    ("FALLING DIAGONAL CROSSING RISING DIAGONAL" #x292C)
-    ("SOUTH EAST ARROW CROSSING NORTH EAST ARROW" #x292D)
-    ("NORTH EAST ARROW CROSSING SOUTH EAST ARROW" #x292E)
-    ("FALLING DIAGONAL CROSSING NORTH EAST ARROW" #x292F)
-    ("RISING DIAGONAL CROSSING SOUTH EAST ARROW" #x2930)
-    ("NORTH EAST ARROW CROSSING NORTH WEST ARROW" #x2931)
-    ("NORTH WEST ARROW CROSSING NORTH EAST ARROW" #x2932)
-    ("WAVE ARROW POINTING DIRECTLY RIGHT" #x2933)
-    ("ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS" #x2934)
-    ("ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS" #x2935)
-    ("ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS" #x2936)
-    ("ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS" #x2937)
-    ("RIGHT-SIDE ARC CLOCKWISE ARROW" #x2938)
-    ("LEFT-SIDE ARC ANTICLOCKWISE ARROW" #x2939)
-    ("TOP ARC ANTICLOCKWISE ARROW" #x293A)
-    ("BOTTOM ARC ANTICLOCKWISE ARROW" #x293B)
-    ("TOP ARC CLOCKWISE ARROW WITH MINUS" #x293C)
-    ("TOP ARC ANTICLOCKWISE ARROW WITH PLUS" #x293D)
-    ("LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW" #x293E)
-    ("LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW" #x293F)
-    ("ANTICLOCKWISE CLOSED CIRCLE ARROW" #x2940)
-    ("CLOCKWISE CLOSED CIRCLE ARROW" #x2941)
-    ("RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW" #x2942)
-    ("LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW" #x2943)
-    ("SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW" #x2944)
-    ("RIGHTWARDS ARROW WITH PLUS BELOW" #x2945)
-    ("LEFTWARDS ARROW WITH PLUS BELOW" #x2946)
-    ("RIGHTWARDS ARROW THROUGH X" #x2947)
-    ("LEFT RIGHT ARROW THROUGH SMALL CIRCLE" #x2948)
-    ("UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE" #x2949)
-    ("LEFT BARB UP RIGHT BARB DOWN HARPOON" #x294A)
-    ("LEFT BARB DOWN RIGHT BARB UP HARPOON" #x294B)
-    ("UP BARB RIGHT DOWN BARB LEFT HARPOON" #x294C)
-    ("UP BARB LEFT DOWN BARB RIGHT HARPOON" #x294D)
-    ("LEFT BARB UP RIGHT BARB UP HARPOON" #x294E)
-    ("UP BARB RIGHT DOWN BARB RIGHT HARPOON" #x294F)
-    ("LEFT BARB DOWN RIGHT BARB DOWN HARPOON" #x2950)
-    ("UP BARB LEFT DOWN BARB LEFT HARPOON" #x2951)
-    ("LEFTWARDS HARPOON WITH BARB UP TO BAR" #x2952)
-    ("RIGHTWARDS HARPOON WITH BARB UP TO BAR" #x2953)
-    ("UPWARDS HARPOON WITH BARB RIGHT TO BAR" #x2954)
-    ("DOWNWARDS HARPOON WITH BARB RIGHT TO BAR" #x2955)
-    ("LEFTWARDS HARPOON WITH BARB DOWN TO BAR" #x2956)
-    ("RIGHTWARDS HARPOON WITH BARB DOWN TO BAR" #x2957)
-    ("UPWARDS HARPOON WITH BARB LEFT TO BAR" #x2958)
-    ("DOWNWARDS HARPOON WITH BARB LEFT TO BAR" #x2959)
-    ("LEFTWARDS HARPOON WITH BARB UP FROM BAR" #x295A)
-    ("RIGHTWARDS HARPOON WITH BARB UP FROM BAR" #x295B)
-    ("UPWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295C)
-    ("DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295D)
-    ("LEFTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295E)
-    ("RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295F)
-    ("UPWARDS HARPOON WITH BARB LEFT FROM BAR" #x2960)
-    ("DOWNWARDS HARPOON WITH BARB LEFT FROM BAR" #x2961)
-    ("LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2962)
-    ("UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x2963)
-    ("RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2964)
-    ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x2965)
-    ("LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP" #x2966)
-    ("LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2967)
-    ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP" #x2968)
-    ("RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2969)
-    ("LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296A)
-    ("LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296B)
-    ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296C)
-    ("RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296D)
-    ("UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x296E)
-    ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x296F)
-    ("RIGHT DOUBLE ARROW WITH ROUNDED HEAD" #x2970)
-    ("EQUALS SIGN ABOVE RIGHTWARDS ARROW" #x2971)
-    ("TILDE OPERATOR ABOVE RIGHTWARDS ARROW" #x2972)
-    ("LEFTWARDS ARROW ABOVE TILDE OPERATOR" #x2973)
-    ("RIGHTWARDS ARROW ABOVE TILDE OPERATOR" #x2974)
-    ("RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO" #x2975)
-    ("LESS-THAN ABOVE LEFTWARDS ARROW" #x2976)
-    ("LEFTWARDS ARROW THROUGH LESS-THAN" #x2977)
-    ("GREATER-THAN ABOVE RIGHTWARDS ARROW" #x2978)
-    ("SUBSET ABOVE RIGHTWARDS ARROW" #x2979)
-    ("LEFTWARDS ARROW THROUGH SUBSET" #x297A)
-    ("SUPERSET ABOVE LEFTWARDS ARROW" #x297B)
-    ("LEFT FISH TAIL" #x297C)
-    ("RIGHT FISH TAIL" #x297D)
-    ("UP FISH TAIL" #x297E)
-    ("DOWN FISH TAIL" #x297F)
-    ))
-
diff --git a/etc/nxml/02980-029FF.el b/etc/nxml/02980-029FF.el
deleted file mode 100644 (file)
index 9751a03..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-b
-  '(("TRIPLE VERTICAL BAR DELIMITER" #x2980)
-    ("Z NOTATION SPOT" #x2981)
-    ("Z NOTATION TYPE COLON" #x2982)
-    ("LEFT WHITE CURLY BRACKET" #x2983)
-    ("RIGHT WHITE CURLY BRACKET" #x2984)
-    ("LEFT WHITE PARENTHESIS" #x2985)
-    ("RIGHT WHITE PARENTHESIS" #x2986)
-    ("Z NOTATION LEFT IMAGE BRACKET" #x2987)
-    ("Z NOTATION RIGHT IMAGE BRACKET" #x2988)
-    ("Z NOTATION LEFT BINDING BRACKET" #x2989)
-    ("Z NOTATION RIGHT BINDING BRACKET" #x298A)
-    ("LEFT SQUARE BRACKET WITH UNDERBAR" #x298B)
-    ("RIGHT SQUARE BRACKET WITH UNDERBAR" #x298C)
-    ("LEFT SQUARE BRACKET WITH TICK IN TOP CORNER" #x298D)
-    ("RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298E)
-    ("LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298F)
-    ("RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER" #x2990)
-    ("LEFT ANGLE BRACKET WITH DOT" #x2991)
-    ("RIGHT ANGLE BRACKET WITH DOT" #x2992)
-    ("LEFT ARC LESS-THAN BRACKET" #x2993)
-    ("RIGHT ARC GREATER-THAN BRACKET" #x2994)
-    ("DOUBLE LEFT ARC GREATER-THAN BRACKET" #x2995)
-    ("DOUBLE RIGHT ARC LESS-THAN BRACKET" #x2996)
-    ("LEFT BLACK TORTOISE SHELL BRACKET" #x2997)
-    ("RIGHT BLACK TORTOISE SHELL BRACKET" #x2998)
-    ("DOTTED FENCE" #x2999)
-    ("VERTICAL ZIGZAG LINE" #x299A)
-    ("MEASURED ANGLE OPENING LEFT" #x299B)
-    ("RIGHT ANGLE VARIANT WITH SQUARE" #x299C)
-    ("MEASURED RIGHT ANGLE WITH DOT" #x299D)
-    ("ANGLE WITH S INSIDE" #x299E)
-    ("ACUTE ANGLE" #x299F)
-    ("SPHERICAL ANGLE OPENING LEFT" #x29A0)
-    ("SPHERICAL ANGLE OPENING UP" #x29A1)
-    ("TURNED ANGLE" #x29A2)
-    ("REVERSED ANGLE" #x29A3)
-    ("ANGLE WITH UNDERBAR" #x29A4)
-    ("REVERSED ANGLE WITH UNDERBAR" #x29A5)
-    ("OBLIQUE ANGLE OPENING UP" #x29A6)
-    ("OBLIQUE ANGLE OPENING DOWN" #x29A7)
-    ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT" #x29A8)
-    ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT" #x29A9)
-    ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT" #x29AA)
-    ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT" #x29AB)
-    ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP" #x29AC)
-    ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP" #x29AD)
-    ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN" #x29AE)
-    ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN" #x29AF)
-    ("REVERSED EMPTY SET" #x29B0)
-    ("EMPTY SET WITH OVERBAR" #x29B1)
-    ("EMPTY SET WITH SMALL CIRCLE ABOVE" #x29B2)
-    ("EMPTY SET WITH RIGHT ARROW ABOVE" #x29B3)
-    ("EMPTY SET WITH LEFT ARROW ABOVE" #x29B4)
-    ("CIRCLE WITH HORIZONTAL BAR" #x29B5)
-    ("CIRCLED VERTICAL BAR" #x29B6)
-    ("CIRCLED PARALLEL" #x29B7)
-    ("CIRCLED REVERSE SOLIDUS" #x29B8)
-    ("CIRCLED PERPENDICULAR" #x29B9)
-    ("CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR" #x29BA)
-    ("CIRCLE WITH SUPERIMPOSED X" #x29BB)
-    ("CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN" #x29BC)
-    ("UP ARROW THROUGH CIRCLE" #x29BD)
-    ("CIRCLED WHITE BULLET" #x29BE)
-    ("CIRCLED BULLET" #x29BF)
-    ("CIRCLED LESS-THAN" #x29C0)
-    ("CIRCLED GREATER-THAN" #x29C1)
-    ("CIRCLE WITH SMALL CIRCLE TO THE RIGHT" #x29C2)
-    ("CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT" #x29C3)
-    ("SQUARED RISING DIAGONAL SLASH" #x29C4)
-    ("SQUARED FALLING DIAGONAL SLASH" #x29C5)
-    ("SQUARED ASTERISK" #x29C6)
-    ("SQUARED SMALL CIRCLE" #x29C7)
-    ("SQUARED SQUARE" #x29C8)
-    ("TWO JOINED SQUARES" #x29C9)
-    ("TRIANGLE WITH DOT ABOVE" #x29CA)
-    ("TRIANGLE WITH UNDERBAR" #x29CB)
-    ("S IN TRIANGLE" #x29CC)
-    ("TRIANGLE WITH SERIFS AT BOTTOM" #x29CD)
-    ("RIGHT TRIANGLE ABOVE LEFT TRIANGLE" #x29CE)
-    ("LEFT TRIANGLE BESIDE VERTICAL BAR" #x29CF)
-    ("VERTICAL BAR BESIDE RIGHT TRIANGLE" #x29D0)
-    ("BOWTIE WITH LEFT HALF BLACK" #x29D1)
-    ("BOWTIE WITH RIGHT HALF BLACK" #x29D2)
-    ("BLACK BOWTIE" #x29D3)
-    ("TIMES WITH LEFT HALF BLACK" #x29D4)
-    ("TIMES WITH RIGHT HALF BLACK" #x29D5)
-    ("WHITE HOURGLASS" #x29D6)
-    ("BLACK HOURGLASS" #x29D7)
-    ("LEFT WIGGLY FENCE" #x29D8)
-    ("RIGHT WIGGLY FENCE" #x29D9)
-    ("LEFT DOUBLE WIGGLY FENCE" #x29DA)
-    ("RIGHT DOUBLE WIGGLY FENCE" #x29DB)
-    ("INCOMPLETE INFINITY" #x29DC)
-    ("TIE OVER INFINITY" #x29DD)
-    ("INFINITY NEGATED WITH VERTICAL BAR" #x29DE)
-    ("DOUBLE-ENDED MULTIMAP" #x29DF)
-    ("SQUARE WITH CONTOURED OUTLINE" #x29E0)
-    ("INCREASES AS" #x29E1)
-    ("SHUFFLE PRODUCT" #x29E2)
-    ("EQUALS SIGN AND SLANTED PARALLEL" #x29E3)
-    ("EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE" #x29E4)
-    ("IDENTICAL TO AND SLANTED PARALLEL" #x29E5)
-    ("GLEICH STARK" #x29E6)
-    ("THERMODYNAMIC" #x29E7)
-    ("DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK" #x29E8)
-    ("DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x29E9)
-    ("BLACK DIAMOND WITH DOWN ARROW" #x29EA)
-    ("BLACK LOZENGE" #x29EB)
-    ("WHITE CIRCLE WITH DOWN ARROW" #x29EC)
-    ("BLACK CIRCLE WITH DOWN ARROW" #x29ED)
-    ("ERROR-BARRED WHITE SQUARE" #x29EE)
-    ("ERROR-BARRED BLACK SQUARE" #x29EF)
-    ("ERROR-BARRED WHITE DIAMOND" #x29F0)
-    ("ERROR-BARRED BLACK DIAMOND" #x29F1)
-    ("ERROR-BARRED WHITE CIRCLE" #x29F2)
-    ("ERROR-BARRED BLACK CIRCLE" #x29F3)
-    ("RULE-DELAYED" #x29F4)
-    ("REVERSE SOLIDUS OPERATOR" #x29F5)
-    ("SOLIDUS WITH OVERBAR" #x29F6)
-    ("REVERSE SOLIDUS WITH HORIZONTAL STROKE" #x29F7)
-    ("BIG SOLIDUS" #x29F8)
-    ("BIG REVERSE SOLIDUS" #x29F9)
-    ("DOUBLE PLUS" #x29FA)
-    ("TRIPLE PLUS" #x29FB)
-    ("LEFT-POINTING CURVED ANGLE BRACKET" #x29FC)
-    ("RIGHT-POINTING CURVED ANGLE BRACKET" #x29FD)
-    ("TINY" #x29FE)
-    ("MINY" #x29FF)
-    ))
-
diff --git a/etc/nxml/02A00-02AFF.el b/etc/nxml/02A00-02AFF.el
deleted file mode 100644 (file)
index 6e7cdf2..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-(nxml-define-char-name-set 'supplemental-mathematical-operators
-  '(("N-ARY CIRCLED DOT OPERATOR" #x2A00)
-    ("N-ARY CIRCLED PLUS OPERATOR" #x2A01)
-    ("N-ARY CIRCLED TIMES OPERATOR" #x2A02)
-    ("N-ARY UNION OPERATOR WITH DOT" #x2A03)
-    ("N-ARY UNION OPERATOR WITH PLUS" #x2A04)
-    ("N-ARY SQUARE INTERSECTION OPERATOR" #x2A05)
-    ("N-ARY SQUARE UNION OPERATOR" #x2A06)
-    ("TWO LOGICAL AND OPERATOR" #x2A07)
-    ("TWO LOGICAL OR OPERATOR" #x2A08)
-    ("N-ARY TIMES OPERATOR" #x2A09)
-    ("MODULO TWO SUM" #x2A0A)
-    ("SUMMATION WITH INTEGRAL" #x2A0B)
-    ("QUADRUPLE INTEGRAL OPERATOR" #x2A0C)
-    ("FINITE PART INTEGRAL" #x2A0D)
-    ("INTEGRAL WITH DOUBLE STROKE" #x2A0E)
-    ("INTEGRAL AVERAGE WITH SLASH" #x2A0F)
-    ("CIRCULATION FUNCTION" #x2A10)
-    ("ANTICLOCKWISE INTEGRATION" #x2A11)
-    ("LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE" #x2A12)
-    ("LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE" #x2A13)
-    ("LINE INTEGRATION NOT INCLUDING THE POLE" #x2A14)
-    ("INTEGRAL AROUND A POINT OPERATOR" #x2A15)
-    ("QUATERNION INTEGRAL OPERATOR" #x2A16)
-    ("INTEGRAL WITH LEFTWARDS ARROW WITH HOOK" #x2A17)
-    ("INTEGRAL WITH TIMES SIGN" #x2A18)
-    ("INTEGRAL WITH INTERSECTION" #x2A19)
-    ("INTEGRAL WITH UNION" #x2A1A)
-    ("INTEGRAL WITH OVERBAR" #x2A1B)
-    ("INTEGRAL WITH UNDERBAR" #x2A1C)
-    ("JOIN" #x2A1D)
-    ("LARGE LEFT TRIANGLE OPERATOR" #x2A1E)
-    ("Z NOTATION SCHEMA COMPOSITION" #x2A1F)
-    ("Z NOTATION SCHEMA PIPING" #x2A20)
-    ("Z NOTATION SCHEMA PROJECTION" #x2A21)
-    ("PLUS SIGN WITH SMALL CIRCLE ABOVE" #x2A22)
-    ("PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE" #x2A23)
-    ("PLUS SIGN WITH TILDE ABOVE" #x2A24)
-    ("PLUS SIGN WITH DOT BELOW" #x2A25)
-    ("PLUS SIGN WITH TILDE BELOW" #x2A26)
-    ("PLUS SIGN WITH SUBSCRIPT TWO" #x2A27)
-    ("PLUS SIGN WITH BLACK TRIANGLE" #x2A28)
-    ("MINUS SIGN WITH COMMA ABOVE" #x2A29)
-    ("MINUS SIGN WITH DOT BELOW" #x2A2A)
-    ("MINUS SIGN WITH FALLING DOTS" #x2A2B)
-    ("MINUS SIGN WITH RISING DOTS" #x2A2C)
-    ("PLUS SIGN IN LEFT HALF CIRCLE" #x2A2D)
-    ("PLUS SIGN IN RIGHT HALF CIRCLE" #x2A2E)
-    ("VECTOR OR CROSS PRODUCT" #x2A2F)
-    ("MULTIPLICATION SIGN WITH DOT ABOVE" #x2A30)
-    ("MULTIPLICATION SIGN WITH UNDERBAR" #x2A31)
-    ("SEMIDIRECT PRODUCT WITH BOTTOM CLOSED" #x2A32)
-    ("SMASH PRODUCT" #x2A33)
-    ("MULTIPLICATION SIGN IN LEFT HALF CIRCLE" #x2A34)
-    ("MULTIPLICATION SIGN IN RIGHT HALF CIRCLE" #x2A35)
-    ("CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT" #x2A36)
-    ("MULTIPLICATION SIGN IN DOUBLE CIRCLE" #x2A37)
-    ("CIRCLED DIVISION SIGN" #x2A38)
-    ("PLUS SIGN IN TRIANGLE" #x2A39)
-    ("MINUS SIGN IN TRIANGLE" #x2A3A)
-    ("MULTIPLICATION SIGN IN TRIANGLE" #x2A3B)
-    ("INTERIOR PRODUCT" #x2A3C)
-    ("RIGHTHAND INTERIOR PRODUCT" #x2A3D)
-    ("Z NOTATION RELATIONAL COMPOSITION" #x2A3E)
-    ("AMALGAMATION OR COPRODUCT" #x2A3F)
-    ("INTERSECTION WITH DOT" #x2A40)
-    ("UNION WITH MINUS SIGN" #x2A41)
-    ("UNION WITH OVERBAR" #x2A42)
-    ("INTERSECTION WITH OVERBAR" #x2A43)
-    ("INTERSECTION WITH LOGICAL AND" #x2A44)
-    ("UNION WITH LOGICAL OR" #x2A45)
-    ("UNION ABOVE INTERSECTION" #x2A46)
-    ("INTERSECTION ABOVE UNION" #x2A47)
-    ("UNION ABOVE BAR ABOVE INTERSECTION" #x2A48)
-    ("INTERSECTION ABOVE BAR ABOVE UNION" #x2A49)
-    ("UNION BESIDE AND JOINED WITH UNION" #x2A4A)
-    ("INTERSECTION BESIDE AND JOINED WITH INTERSECTION" #x2A4B)
-    ("CLOSED UNION WITH SERIFS" #x2A4C)
-    ("CLOSED INTERSECTION WITH SERIFS" #x2A4D)
-    ("DOUBLE SQUARE INTERSECTION" #x2A4E)
-    ("DOUBLE SQUARE UNION" #x2A4F)
-    ("CLOSED UNION WITH SERIFS AND SMASH PRODUCT" #x2A50)
-    ("LOGICAL AND WITH DOT ABOVE" #x2A51)
-    ("LOGICAL OR WITH DOT ABOVE" #x2A52)
-    ("DOUBLE LOGICAL AND" #x2A53)
-    ("DOUBLE LOGICAL OR" #x2A54)
-    ("TWO INTERSECTING LOGICAL AND" #x2A55)
-    ("TWO INTERSECTING LOGICAL OR" #x2A56)
-    ("SLOPING LARGE OR" #x2A57)
-    ("SLOPING LARGE AND" #x2A58)
-    ("LOGICAL OR OVERLAPPING LOGICAL AND" #x2A59)
-    ("LOGICAL AND WITH MIDDLE STEM" #x2A5A)
-    ("LOGICAL OR WITH MIDDLE STEM" #x2A5B)
-    ("LOGICAL AND WITH HORIZONTAL DASH" #x2A5C)
-    ("LOGICAL OR WITH HORIZONTAL DASH" #x2A5D)
-    ("LOGICAL AND WITH DOUBLE OVERBAR" #x2A5E)
-    ("LOGICAL AND WITH UNDERBAR" #x2A5F)
-    ("LOGICAL AND WITH DOUBLE UNDERBAR" #x2A60)
-    ("SMALL VEE WITH UNDERBAR" #x2A61)
-    ("LOGICAL OR WITH DOUBLE OVERBAR" #x2A62)
-    ("LOGICAL OR WITH DOUBLE UNDERBAR" #x2A63)
-    ("Z NOTATION DOMAIN ANTIRESTRICTION" #x2A64)
-    ("Z NOTATION RANGE ANTIRESTRICTION" #x2A65)
-    ("EQUALS SIGN WITH DOT BELOW" #x2A66)
-    ("IDENTICAL WITH DOT ABOVE" #x2A67)
-    ("TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE" #x2A68)
-    ("TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE" #x2A69)
-    ("TILDE OPERATOR WITH DOT ABOVE" #x2A6A)
-    ("TILDE OPERATOR WITH RISING DOTS" #x2A6B)
-    ("SIMILAR MINUS SIMILAR" #x2A6C)
-    ("CONGRUENT WITH DOT ABOVE" #x2A6D)
-    ("EQUALS WITH ASTERISK" #x2A6E)
-    ("ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT" #x2A6F)
-    ("APPROXIMATELY EQUAL OR EQUAL TO" #x2A70)
-    ("EQUALS SIGN ABOVE PLUS SIGN" #x2A71)
-    ("PLUS SIGN ABOVE EQUALS SIGN" #x2A72)
-    ("EQUALS SIGN ABOVE TILDE OPERATOR" #x2A73)
-    ("DOUBLE COLON EQUAL" #x2A74)
-    ("TWO CONSECUTIVE EQUALS SIGNS" #x2A75)
-    ("THREE CONSECUTIVE EQUALS SIGNS" #x2A76)
-    ("EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW" #x2A77)
-    ("EQUIVALENT WITH FOUR DOTS ABOVE" #x2A78)
-    ("LESS-THAN WITH CIRCLE INSIDE" #x2A79)
-    ("GREATER-THAN WITH CIRCLE INSIDE" #x2A7A)
-    ("LESS-THAN WITH QUESTION MARK ABOVE" #x2A7B)
-    ("GREATER-THAN WITH QUESTION MARK ABOVE" #x2A7C)
-    ("LESS-THAN OR SLANTED EQUAL TO" #x2A7D)
-    ("GREATER-THAN OR SLANTED EQUAL TO" #x2A7E)
-    ("LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A7F)
-    ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A80)
-    ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A81)
-    ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A82)
-    ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT" #x2A83)
-    ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT" #x2A84)
-    ("LESS-THAN OR APPROXIMATE" #x2A85)
-    ("GREATER-THAN OR APPROXIMATE" #x2A86)
-    ("LESS-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A87)
-    ("GREATER-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A88)
-    ("LESS-THAN AND NOT APPROXIMATE" #x2A89)
-    ("GREATER-THAN AND NOT APPROXIMATE" #x2A8A)
-    ("LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN" #x2A8B)
-    ("GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN" #x2A8C)
-    ("LESS-THAN ABOVE SIMILAR OR EQUAL" #x2A8D)
-    ("GREATER-THAN ABOVE SIMILAR OR EQUAL" #x2A8E)
-    ("LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN" #x2A8F)
-    ("GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN" #x2A90)
-    ("LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL" #x2A91)
-    ("GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL" #x2A92)
-    ("LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL" #x2A93)
-    ("GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL" #x2A94)
-    ("SLANTED EQUAL TO OR LESS-THAN" #x2A95)
-    ("SLANTED EQUAL TO OR GREATER-THAN" #x2A96)
-    ("SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE" #x2A97)
-    ("SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE" #x2A98)
-    ("DOUBLE-LINE EQUAL TO OR LESS-THAN" #x2A99)
-    ("DOUBLE-LINE EQUAL TO OR GREATER-THAN" #x2A9A)
-    ("DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN" #x2A9B)
-    ("DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN" #x2A9C)
-    ("SIMILAR OR LESS-THAN" #x2A9D)
-    ("SIMILAR OR GREATER-THAN" #x2A9E)
-    ("SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN" #x2A9F)
-    ("SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN" #x2AA0)
-    ("DOUBLE NESTED LESS-THAN" #x2AA1)
-    ("DOUBLE NESTED GREATER-THAN" #x2AA2)
-    ("DOUBLE NESTED LESS-THAN WITH UNDERBAR" #x2AA3)
-    ("GREATER-THAN OVERLAPPING LESS-THAN" #x2AA4)
-    ("GREATER-THAN BESIDE LESS-THAN" #x2AA5)
-    ("LESS-THAN CLOSED BY CURVE" #x2AA6)
-    ("GREATER-THAN CLOSED BY CURVE" #x2AA7)
-    ("LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA8)
-    ("GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA9)
-    ("SMALLER THAN" #x2AAA)
-    ("LARGER THAN" #x2AAB)
-    ("SMALLER THAN OR EQUAL TO" #x2AAC)
-    ("LARGER THAN OR EQUAL TO" #x2AAD)
-    ("EQUALS SIGN WITH BUMPY ABOVE" #x2AAE)
-    ("PRECEDES ABOVE SINGLE-LINE EQUALS SIGN" #x2AAF)
-    ("SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN" #x2AB0)
-    ("PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB1)
-    ("SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB2)
-    ("PRECEDES ABOVE EQUALS SIGN" #x2AB3)
-    ("SUCCEEDS ABOVE EQUALS SIGN" #x2AB4)
-    ("PRECEDES ABOVE NOT EQUAL TO" #x2AB5)
-    ("SUCCEEDS ABOVE NOT EQUAL TO" #x2AB6)
-    ("PRECEDES ABOVE ALMOST EQUAL TO" #x2AB7)
-    ("SUCCEEDS ABOVE ALMOST EQUAL TO" #x2AB8)
-    ("PRECEDES ABOVE NOT ALMOST EQUAL TO" #x2AB9)
-    ("SUCCEEDS ABOVE NOT ALMOST EQUAL TO" #x2ABA)
-    ("DOUBLE PRECEDES" #x2ABB)
-    ("DOUBLE SUCCEEDS" #x2ABC)
-    ("SUBSET WITH DOT" #x2ABD)
-    ("SUPERSET WITH DOT" #x2ABE)
-    ("SUBSET WITH PLUS SIGN BELOW" #x2ABF)
-    ("SUPERSET WITH PLUS SIGN BELOW" #x2AC0)
-    ("SUBSET WITH MULTIPLICATION SIGN BELOW" #x2AC1)
-    ("SUPERSET WITH MULTIPLICATION SIGN BELOW" #x2AC2)
-    ("SUBSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC3)
-    ("SUPERSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC4)
-    ("SUBSET OF ABOVE EQUALS SIGN" #x2AC5)
-    ("SUPERSET OF ABOVE EQUALS SIGN" #x2AC6)
-    ("SUBSET OF ABOVE TILDE OPERATOR" #x2AC7)
-    ("SUPERSET OF ABOVE TILDE OPERATOR" #x2AC8)
-    ("SUBSET OF ABOVE ALMOST EQUAL TO" #x2AC9)
-    ("SUPERSET OF ABOVE ALMOST EQUAL TO" #x2ACA)
-    ("SUBSET OF ABOVE NOT EQUAL TO" #x2ACB)
-    ("SUPERSET OF ABOVE NOT EQUAL TO" #x2ACC)
-    ("SQUARE LEFT OPEN BOX OPERATOR" #x2ACD)
-    ("SQUARE RIGHT OPEN BOX OPERATOR" #x2ACE)
-    ("CLOSED SUBSET" #x2ACF)
-    ("CLOSED SUPERSET" #x2AD0)
-    ("CLOSED SUBSET OR EQUAL TO" #x2AD1)
-    ("CLOSED SUPERSET OR EQUAL TO" #x2AD2)
-    ("SUBSET ABOVE SUPERSET" #x2AD3)
-    ("SUPERSET ABOVE SUBSET" #x2AD4)
-    ("SUBSET ABOVE SUBSET" #x2AD5)
-    ("SUPERSET ABOVE SUPERSET" #x2AD6)
-    ("SUPERSET BESIDE SUBSET" #x2AD7)
-    ("SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET" #x2AD8)
-    ("ELEMENT OF OPENING DOWNWARDS" #x2AD9)
-    ("PITCHFORK WITH TEE TOP" #x2ADA)
-    ("TRANSVERSAL INTERSECTION" #x2ADB)
-    ("FORKING" #x2ADC)
-    ("NONFORKING" #x2ADD)
-    ("SHORT LEFT TACK" #x2ADE)
-    ("SHORT DOWN TACK" #x2ADF)
-    ("SHORT UP TACK" #x2AE0)
-    ("PERPENDICULAR WITH S" #x2AE1)
-    ("VERTICAL BAR TRIPLE RIGHT TURNSTILE" #x2AE2)
-    ("DOUBLE VERTICAL BAR LEFT TURNSTILE" #x2AE3)
-    ("VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE4)
-    ("DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE5)
-    ("LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL" #x2AE6)
-    ("SHORT DOWN TACK WITH OVERBAR" #x2AE7)
-    ("SHORT UP TACK WITH UNDERBAR" #x2AE8)
-    ("SHORT UP TACK ABOVE SHORT DOWN TACK" #x2AE9)
-    ("DOUBLE DOWN TACK" #x2AEA)
-    ("DOUBLE UP TACK" #x2AEB)
-    ("DOUBLE STROKE NOT SIGN" #x2AEC)
-    ("REVERSED DOUBLE STROKE NOT SIGN" #x2AED)
-    ("DOES NOT DIVIDE WITH REVERSED NEGATION SLASH" #x2AEE)
-    ("VERTICAL LINE WITH CIRCLE ABOVE" #x2AEF)
-    ("VERTICAL LINE WITH CIRCLE BELOW" #x2AF0)
-    ("DOWN TACK WITH CIRCLE BELOW" #x2AF1)
-    ("PARALLEL WITH HORIZONTAL STROKE" #x2AF2)
-    ("PARALLEL WITH TILDE OPERATOR" #x2AF3)
-    ("TRIPLE VERTICAL BAR BINARY RELATION" #x2AF4)
-    ("TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE" #x2AF5)
-    ("TRIPLE COLON OPERATOR" #x2AF6)
-    ("TRIPLE NESTED LESS-THAN" #x2AF7)
-    ("TRIPLE NESTED GREATER-THAN" #x2AF8)
-    ("DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO" #x2AF9)
-    ("DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO" #x2AFA)
-    ("TRIPLE SOLIDUS BINARY RELATION" #x2AFB)
-    ("LARGE TRIPLE VERTICAL BAR OPERATOR" #x2AFC)
-    ("DOUBLE SOLIDUS OPERATOR" #x2AFD)
-    ("WHITE VERTICAL BAR" #x2AFE)
-    ("N-ARY WHITE VERTICAL BAR" #x2AFF)
-    ))
-
diff --git a/etc/nxml/02E80-02EFF.el b/etc/nxml/02E80-02EFF.el
deleted file mode 100644 (file)
index aca68f2..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-(nxml-define-char-name-set 'cjk-radicals-supplement
-  '(("CJK RADICAL REPEAT" #x2E80)
-    ("CJK RADICAL CLIFF" #x2E81)
-    ("CJK RADICAL SECOND ONE" #x2E82)
-    ("CJK RADICAL SECOND TWO" #x2E83)
-    ("CJK RADICAL SECOND THREE" #x2E84)
-    ("CJK RADICAL PERSON" #x2E85)
-    ("CJK RADICAL BOX" #x2E86)
-    ("CJK RADICAL TABLE" #x2E87)
-    ("CJK RADICAL KNIFE ONE" #x2E88)
-    ("CJK RADICAL KNIFE TWO" #x2E89)
-    ("CJK RADICAL DIVINATION" #x2E8A)
-    ("CJK RADICAL SEAL" #x2E8B)
-    ("CJK RADICAL SMALL ONE" #x2E8C)
-    ("CJK RADICAL SMALL TWO" #x2E8D)
-    ("CJK RADICAL LAME ONE" #x2E8E)
-    ("CJK RADICAL LAME TWO" #x2E8F)
-    ("CJK RADICAL LAME THREE" #x2E90)
-    ("CJK RADICAL LAME FOUR" #x2E91)
-    ("CJK RADICAL SNAKE" #x2E92)
-    ("CJK RADICAL THREAD" #x2E93)
-    ("CJK RADICAL SNOUT ONE" #x2E94)
-    ("CJK RADICAL SNOUT TWO" #x2E95)
-    ("CJK RADICAL HEART ONE" #x2E96)
-    ("CJK RADICAL HEART TWO" #x2E97)
-    ("CJK RADICAL HAND" #x2E98)
-    ("CJK RADICAL RAP" #x2E99)
-    ("CJK RADICAL CHOKE" #x2E9B)
-    ("CJK RADICAL SUN" #x2E9C)
-    ("CJK RADICAL MOON" #x2E9D)
-    ("CJK RADICAL DEATH" #x2E9E)
-    ("CJK RADICAL MOTHER" #x2E9F)
-    ("CJK RADICAL CIVILIAN" #x2EA0)
-    ("CJK RADICAL WATER ONE" #x2EA1)
-    ("CJK RADICAL WATER TWO" #x2EA2)
-    ("CJK RADICAL FIRE" #x2EA3)
-    ("CJK RADICAL PAW ONE" #x2EA4)
-    ("CJK RADICAL PAW TWO" #x2EA5)
-    ("CJK RADICAL SIMPLIFIED HALF TREE TRUNK" #x2EA6)
-    ("CJK RADICAL COW" #x2EA7)
-    ("CJK RADICAL DOG" #x2EA8)
-    ("CJK RADICAL JADE" #x2EA9)
-    ("CJK RADICAL BOLT OF CLOTH" #x2EAA)
-    ("CJK RADICAL EYE" #x2EAB)
-    ("CJK RADICAL SPIRIT ONE" #x2EAC)
-    ("CJK RADICAL SPIRIT TWO" #x2EAD)
-    ("CJK RADICAL BAMBOO" #x2EAE)
-    ("CJK RADICAL SILK" #x2EAF)
-    ("CJK RADICAL C-SIMPLIFIED SILK" #x2EB0)
-    ("CJK RADICAL NET ONE" #x2EB1)
-    ("CJK RADICAL NET TWO" #x2EB2)
-    ("CJK RADICAL NET THREE" #x2EB3)
-    ("CJK RADICAL NET FOUR" #x2EB4)
-    ("CJK RADICAL MESH" #x2EB5)
-    ("CJK RADICAL SHEEP" #x2EB6)
-    ("CJK RADICAL RAM" #x2EB7)
-    ("CJK RADICAL EWE" #x2EB8)
-    ("CJK RADICAL OLD" #x2EB9)
-    ("CJK RADICAL BRUSH ONE" #x2EBA)
-    ("CJK RADICAL BRUSH TWO" #x2EBB)
-    ("CJK RADICAL MEAT" #x2EBC)
-    ("CJK RADICAL MORTAR" #x2EBD)
-    ("CJK RADICAL GRASS ONE" #x2EBE)
-    ("CJK RADICAL GRASS TWO" #x2EBF)
-    ("CJK RADICAL GRASS THREE" #x2EC0)
-    ("CJK RADICAL TIGER" #x2EC1)
-    ("CJK RADICAL CLOTHES" #x2EC2)
-    ("CJK RADICAL WEST ONE" #x2EC3)
-    ("CJK RADICAL WEST TWO" #x2EC4)
-    ("CJK RADICAL C-SIMPLIFIED SEE" #x2EC5)
-    ("CJK RADICAL SIMPLIFIED HORN" #x2EC6)
-    ("CJK RADICAL HORN" #x2EC7)
-    ("CJK RADICAL C-SIMPLIFIED SPEECH" #x2EC8)
-    ("CJK RADICAL C-SIMPLIFIED SHELL" #x2EC9)
-    ("CJK RADICAL FOOT" #x2ECA)
-    ("CJK RADICAL C-SIMPLIFIED CART" #x2ECB)
-    ("CJK RADICAL SIMPLIFIED WALK" #x2ECC)
-    ("CJK RADICAL WALK ONE" #x2ECD)
-    ("CJK RADICAL WALK TWO" #x2ECE)
-    ("CJK RADICAL CITY" #x2ECF)
-    ("CJK RADICAL C-SIMPLIFIED GOLD" #x2ED0)
-    ("CJK RADICAL LONG ONE" #x2ED1)
-    ("CJK RADICAL LONG TWO" #x2ED2)
-    ("CJK RADICAL C-SIMPLIFIED LONG" #x2ED3)
-    ("CJK RADICAL C-SIMPLIFIED GATE" #x2ED4)
-    ("CJK RADICAL MOUND ONE" #x2ED5)
-    ("CJK RADICAL MOUND TWO" #x2ED6)
-    ("CJK RADICAL RAIN" #x2ED7)
-    ("CJK RADICAL BLUE" #x2ED8)
-    ("CJK RADICAL C-SIMPLIFIED TANNED LEATHER" #x2ED9)
-    ("CJK RADICAL C-SIMPLIFIED LEAF" #x2EDA)
-    ("CJK RADICAL C-SIMPLIFIED WIND" #x2EDB)
-    ("CJK RADICAL C-SIMPLIFIED FLY" #x2EDC)
-    ("CJK RADICAL EAT ONE" #x2EDD)
-    ("CJK RADICAL EAT TWO" #x2EDE)
-    ("CJK RADICAL EAT THREE" #x2EDF)
-    ("CJK RADICAL C-SIMPLIFIED EAT" #x2EE0)
-    ("CJK RADICAL HEAD" #x2EE1)
-    ("CJK RADICAL C-SIMPLIFIED HORSE" #x2EE2)
-    ("CJK RADICAL BONE" #x2EE3)
-    ("CJK RADICAL GHOST" #x2EE4)
-    ("CJK RADICAL C-SIMPLIFIED FISH" #x2EE5)
-    ("CJK RADICAL C-SIMPLIFIED BIRD" #x2EE6)
-    ("CJK RADICAL C-SIMPLIFIED SALT" #x2EE7)
-    ("CJK RADICAL SIMPLIFIED WHEAT" #x2EE8)
-    ("CJK RADICAL SIMPLIFIED YELLOW" #x2EE9)
-    ("CJK RADICAL C-SIMPLIFIED FROG" #x2EEA)
-    ("CJK RADICAL J-SIMPLIFIED EVEN" #x2EEB)
-    ("CJK RADICAL C-SIMPLIFIED EVEN" #x2EEC)
-    ("CJK RADICAL J-SIMPLIFIED TOOTH" #x2EED)
-    ("CJK RADICAL C-SIMPLIFIED TOOTH" #x2EEE)
-    ("CJK RADICAL J-SIMPLIFIED DRAGON" #x2EEF)
-    ("CJK RADICAL C-SIMPLIFIED DRAGON" #x2EF0)
-    ("CJK RADICAL TURTLE" #x2EF1)
-    ("CJK RADICAL J-SIMPLIFIED TURTLE" #x2EF2)
-    ("CJK RADICAL C-SIMPLIFIED TURTLE" #x2EF3)
-    ))
-
diff --git a/etc/nxml/02F00-02FDF.el b/etc/nxml/02F00-02FDF.el
deleted file mode 100644 (file)
index 63ad5b7..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-(nxml-define-char-name-set 'kangxi-radicals
-  '(("KANGXI RADICAL ONE" #x2F00)
-    ("KANGXI RADICAL LINE" #x2F01)
-    ("KANGXI RADICAL DOT" #x2F02)
-    ("KANGXI RADICAL SLASH" #x2F03)
-    ("KANGXI RADICAL SECOND" #x2F04)
-    ("KANGXI RADICAL HOOK" #x2F05)
-    ("KANGXI RADICAL TWO" #x2F06)
-    ("KANGXI RADICAL LID" #x2F07)
-    ("KANGXI RADICAL MAN" #x2F08)
-    ("KANGXI RADICAL LEGS" #x2F09)
-    ("KANGXI RADICAL ENTER" #x2F0A)
-    ("KANGXI RADICAL EIGHT" #x2F0B)
-    ("KANGXI RADICAL DOWN BOX" #x2F0C)
-    ("KANGXI RADICAL COVER" #x2F0D)
-    ("KANGXI RADICAL ICE" #x2F0E)
-    ("KANGXI RADICAL TABLE" #x2F0F)
-    ("KANGXI RADICAL OPEN BOX" #x2F10)
-    ("KANGXI RADICAL KNIFE" #x2F11)
-    ("KANGXI RADICAL POWER" #x2F12)
-    ("KANGXI RADICAL WRAP" #x2F13)
-    ("KANGXI RADICAL SPOON" #x2F14)
-    ("KANGXI RADICAL RIGHT OPEN BOX" #x2F15)
-    ("KANGXI RADICAL HIDING ENCLOSURE" #x2F16)
-    ("KANGXI RADICAL TEN" #x2F17)
-    ("KANGXI RADICAL DIVINATION" #x2F18)
-    ("KANGXI RADICAL SEAL" #x2F19)
-    ("KANGXI RADICAL CLIFF" #x2F1A)
-    ("KANGXI RADICAL PRIVATE" #x2F1B)
-    ("KANGXI RADICAL AGAIN" #x2F1C)
-    ("KANGXI RADICAL MOUTH" #x2F1D)
-    ("KANGXI RADICAL ENCLOSURE" #x2F1E)
-    ("KANGXI RADICAL EARTH" #x2F1F)
-    ("KANGXI RADICAL SCHOLAR" #x2F20)
-    ("KANGXI RADICAL GO" #x2F21)
-    ("KANGXI RADICAL GO SLOWLY" #x2F22)
-    ("KANGXI RADICAL EVENING" #x2F23)
-    ("KANGXI RADICAL BIG" #x2F24)
-    ("KANGXI RADICAL WOMAN" #x2F25)
-    ("KANGXI RADICAL CHILD" #x2F26)
-    ("KANGXI RADICAL ROOF" #x2F27)
-    ("KANGXI RADICAL INCH" #x2F28)
-    ("KANGXI RADICAL SMALL" #x2F29)
-    ("KANGXI RADICAL LAME" #x2F2A)
-    ("KANGXI RADICAL CORPSE" #x2F2B)
-    ("KANGXI RADICAL SPROUT" #x2F2C)
-    ("KANGXI RADICAL MOUNTAIN" #x2F2D)
-    ("KANGXI RADICAL RIVER" #x2F2E)
-    ("KANGXI RADICAL WORK" #x2F2F)
-    ("KANGXI RADICAL ONESELF" #x2F30)
-    ("KANGXI RADICAL TURBAN" #x2F31)
-    ("KANGXI RADICAL DRY" #x2F32)
-    ("KANGXI RADICAL SHORT THREAD" #x2F33)
-    ("KANGXI RADICAL DOTTED CLIFF" #x2F34)
-    ("KANGXI RADICAL LONG STRIDE" #x2F35)
-    ("KANGXI RADICAL TWO HANDS" #x2F36)
-    ("KANGXI RADICAL SHOOT" #x2F37)
-    ("KANGXI RADICAL BOW" #x2F38)
-    ("KANGXI RADICAL SNOUT" #x2F39)
-    ("KANGXI RADICAL BRISTLE" #x2F3A)
-    ("KANGXI RADICAL STEP" #x2F3B)
-    ("KANGXI RADICAL HEART" #x2F3C)
-    ("KANGXI RADICAL HALBERD" #x2F3D)
-    ("KANGXI RADICAL DOOR" #x2F3E)
-    ("KANGXI RADICAL HAND" #x2F3F)
-    ("KANGXI RADICAL BRANCH" #x2F40)
-    ("KANGXI RADICAL RAP" #x2F41)
-    ("KANGXI RADICAL SCRIPT" #x2F42)
-    ("KANGXI RADICAL DIPPER" #x2F43)
-    ("KANGXI RADICAL AXE" #x2F44)
-    ("KANGXI RADICAL SQUARE" #x2F45)
-    ("KANGXI RADICAL NOT" #x2F46)
-    ("KANGXI RADICAL SUN" #x2F47)
-    ("KANGXI RADICAL SAY" #x2F48)
-    ("KANGXI RADICAL MOON" #x2F49)
-    ("KANGXI RADICAL TREE" #x2F4A)
-    ("KANGXI RADICAL LACK" #x2F4B)
-    ("KANGXI RADICAL STOP" #x2F4C)
-    ("KANGXI RADICAL DEATH" #x2F4D)
-    ("KANGXI RADICAL WEAPON" #x2F4E)
-    ("KANGXI RADICAL DO NOT" #x2F4F)
-    ("KANGXI RADICAL COMPARE" #x2F50)
-    ("KANGXI RADICAL FUR" #x2F51)
-    ("KANGXI RADICAL CLAN" #x2F52)
-    ("KANGXI RADICAL STEAM" #x2F53)
-    ("KANGXI RADICAL WATER" #x2F54)
-    ("KANGXI RADICAL FIRE" #x2F55)
-    ("KANGXI RADICAL CLAW" #x2F56)
-    ("KANGXI RADICAL FATHER" #x2F57)
-    ("KANGXI RADICAL DOUBLE X" #x2F58)
-    ("KANGXI RADICAL HALF TREE TRUNK" #x2F59)
-    ("KANGXI RADICAL SLICE" #x2F5A)
-    ("KANGXI RADICAL FANG" #x2F5B)
-    ("KANGXI RADICAL COW" #x2F5C)
-    ("KANGXI RADICAL DOG" #x2F5D)
-    ("KANGXI RADICAL PROFOUND" #x2F5E)
-    ("KANGXI RADICAL JADE" #x2F5F)
-    ("KANGXI RADICAL MELON" #x2F60)
-    ("KANGXI RADICAL TILE" #x2F61)
-    ("KANGXI RADICAL SWEET" #x2F62)
-    ("KANGXI RADICAL LIFE" #x2F63)
-    ("KANGXI RADICAL USE" #x2F64)
-    ("KANGXI RADICAL FIELD" #x2F65)
-    ("KANGXI RADICAL BOLT OF CLOTH" #x2F66)
-    ("KANGXI RADICAL SICKNESS" #x2F67)
-    ("KANGXI RADICAL DOTTED TENT" #x2F68)
-    ("KANGXI RADICAL WHITE" #x2F69)
-    ("KANGXI RADICAL SKIN" #x2F6A)
-    ("KANGXI RADICAL DISH" #x2F6B)
-    ("KANGXI RADICAL EYE" #x2F6C)
-    ("KANGXI RADICAL SPEAR" #x2F6D)
-    ("KANGXI RADICAL ARROW" #x2F6E)
-    ("KANGXI RADICAL STONE" #x2F6F)
-    ("KANGXI RADICAL SPIRIT" #x2F70)
-    ("KANGXI RADICAL TRACK" #x2F71)
-    ("KANGXI RADICAL GRAIN" #x2F72)
-    ("KANGXI RADICAL CAVE" #x2F73)
-    ("KANGXI RADICAL STAND" #x2F74)
-    ("KANGXI RADICAL BAMBOO" #x2F75)
-    ("KANGXI RADICAL RICE" #x2F76)
-    ("KANGXI RADICAL SILK" #x2F77)
-    ("KANGXI RADICAL JAR" #x2F78)
-    ("KANGXI RADICAL NET" #x2F79)
-    ("KANGXI RADICAL SHEEP" #x2F7A)
-    ("KANGXI RADICAL FEATHER" #x2F7B)
-    ("KANGXI RADICAL OLD" #x2F7C)
-    ("KANGXI RADICAL AND" #x2F7D)
-    ("KANGXI RADICAL PLOW" #x2F7E)
-    ("KANGXI RADICAL EAR" #x2F7F)
-    ("KANGXI RADICAL BRUSH" #x2F80)
-    ("KANGXI RADICAL MEAT" #x2F81)
-    ("KANGXI RADICAL MINISTER" #x2F82)
-    ("KANGXI RADICAL SELF" #x2F83)
-    ("KANGXI RADICAL ARRIVE" #x2F84)
-    ("KANGXI RADICAL MORTAR" #x2F85)
-    ("KANGXI RADICAL TONGUE" #x2F86)
-    ("KANGXI RADICAL OPPOSE" #x2F87)
-    ("KANGXI RADICAL BOAT" #x2F88)
-    ("KANGXI RADICAL STOPPING" #x2F89)
-    ("KANGXI RADICAL COLOR" #x2F8A)
-    ("KANGXI RADICAL GRASS" #x2F8B)
-    ("KANGXI RADICAL TIGER" #x2F8C)
-    ("KANGXI RADICAL INSECT" #x2F8D)
-    ("KANGXI RADICAL BLOOD" #x2F8E)
-    ("KANGXI RADICAL WALK ENCLOSURE" #x2F8F)
-    ("KANGXI RADICAL CLOTHES" #x2F90)
-    ("KANGXI RADICAL WEST" #x2F91)
-    ("KANGXI RADICAL SEE" #x2F92)
-    ("KANGXI RADICAL HORN" #x2F93)
-    ("KANGXI RADICAL SPEECH" #x2F94)
-    ("KANGXI RADICAL VALLEY" #x2F95)
-    ("KANGXI RADICAL BEAN" #x2F96)
-    ("KANGXI RADICAL PIG" #x2F97)
-    ("KANGXI RADICAL BADGER" #x2F98)
-    ("KANGXI RADICAL SHELL" #x2F99)
-    ("KANGXI RADICAL RED" #x2F9A)
-    ("KANGXI RADICAL RUN" #x2F9B)
-    ("KANGXI RADICAL FOOT" #x2F9C)
-    ("KANGXI RADICAL BODY" #x2F9D)
-    ("KANGXI RADICAL CART" #x2F9E)
-    ("KANGXI RADICAL BITTER" #x2F9F)
-    ("KANGXI RADICAL MORNING" #x2FA0)
-    ("KANGXI RADICAL WALK" #x2FA1)
-    ("KANGXI RADICAL CITY" #x2FA2)
-    ("KANGXI RADICAL WINE" #x2FA3)
-    ("KANGXI RADICAL DISTINGUISH" #x2FA4)
-    ("KANGXI RADICAL VILLAGE" #x2FA5)
-    ("KANGXI RADICAL GOLD" #x2FA6)
-    ("KANGXI RADICAL LONG" #x2FA7)
-    ("KANGXI RADICAL GATE" #x2FA8)
-    ("KANGXI RADICAL MOUND" #x2FA9)
-    ("KANGXI RADICAL SLAVE" #x2FAA)
-    ("KANGXI RADICAL SHORT TAILED BIRD" #x2FAB)
-    ("KANGXI RADICAL RAIN" #x2FAC)
-    ("KANGXI RADICAL BLUE" #x2FAD)
-    ("KANGXI RADICAL WRONG" #x2FAE)
-    ("KANGXI RADICAL FACE" #x2FAF)
-    ("KANGXI RADICAL LEATHER" #x2FB0)
-    ("KANGXI RADICAL TANNED LEATHER" #x2FB1)
-    ("KANGXI RADICAL LEEK" #x2FB2)
-    ("KANGXI RADICAL SOUND" #x2FB3)
-    ("KANGXI RADICAL LEAF" #x2FB4)
-    ("KANGXI RADICAL WIND" #x2FB5)
-    ("KANGXI RADICAL FLY" #x2FB6)
-    ("KANGXI RADICAL EAT" #x2FB7)
-    ("KANGXI RADICAL HEAD" #x2FB8)
-    ("KANGXI RADICAL FRAGRANT" #x2FB9)
-    ("KANGXI RADICAL HORSE" #x2FBA)
-    ("KANGXI RADICAL BONE" #x2FBB)
-    ("KANGXI RADICAL TALL" #x2FBC)
-    ("KANGXI RADICAL HAIR" #x2FBD)
-    ("KANGXI RADICAL FIGHT" #x2FBE)
-    ("KANGXI RADICAL SACRIFICIAL WINE" #x2FBF)
-    ("KANGXI RADICAL CAULDRON" #x2FC0)
-    ("KANGXI RADICAL GHOST" #x2FC1)
-    ("KANGXI RADICAL FISH" #x2FC2)
-    ("KANGXI RADICAL BIRD" #x2FC3)
-    ("KANGXI RADICAL SALT" #x2FC4)
-    ("KANGXI RADICAL DEER" #x2FC5)
-    ("KANGXI RADICAL WHEAT" #x2FC6)
-    ("KANGXI RADICAL HEMP" #x2FC7)
-    ("KANGXI RADICAL YELLOW" #x2FC8)
-    ("KANGXI RADICAL MILLET" #x2FC9)
-    ("KANGXI RADICAL BLACK" #x2FCA)
-    ("KANGXI RADICAL EMBROIDERY" #x2FCB)
-    ("KANGXI RADICAL FROG" #x2FCC)
-    ("KANGXI RADICAL TRIPOD" #x2FCD)
-    ("KANGXI RADICAL DRUM" #x2FCE)
-    ("KANGXI RADICAL RAT" #x2FCF)
-    ("KANGXI RADICAL NOSE" #x2FD0)
-    ("KANGXI RADICAL EVEN" #x2FD1)
-    ("KANGXI RADICAL TOOTH" #x2FD2)
-    ("KANGXI RADICAL DRAGON" #x2FD3)
-    ("KANGXI RADICAL TURTLE" #x2FD4)
-    ("KANGXI RADICAL FLUTE" #x2FD5)
-    ))
-
diff --git a/etc/nxml/02FF0-02FFF.el b/etc/nxml/02FF0-02FFF.el
deleted file mode 100644 (file)
index fc1eafb..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-(nxml-define-char-name-set 'ideographic-description-characters
-  '(("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT" #x2FF0)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW" #x2FF1)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT" #x2FF2)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW" #x2FF3)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND" #x2FF4)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE" #x2FF5)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW" #x2FF6)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT" #x2FF7)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT" #x2FF8)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT" #x2FF9)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT" #x2FFA)
-    ("IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID" #x2FFB)
-    ))
-
diff --git a/etc/nxml/03000-0303F.el b/etc/nxml/03000-0303F.el
deleted file mode 100644 (file)
index a2f6435..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-(nxml-define-char-name-set 'cjk-symbols-and-punctuation
-  '(("IDEOGRAPHIC SPACE" #x3000)
-    ("IDEOGRAPHIC COMMA" #x3001)
-    ("IDEOGRAPHIC FULL STOP" #x3002)
-    ("DITTO MARK" #x3003)
-    ("JAPANESE INDUSTRIAL STANDARD SYMBOL" #x3004)
-    ("IDEOGRAPHIC ITERATION MARK" #x3005)
-    ("IDEOGRAPHIC CLOSING MARK" #x3006)
-    ("IDEOGRAPHIC NUMBER ZERO" #x3007)
-    ("LEFT ANGLE BRACKET" #x3008)
-    ("RIGHT ANGLE BRACKET" #x3009)
-    ("LEFT DOUBLE ANGLE BRACKET" #x300A)
-    ("RIGHT DOUBLE ANGLE BRACKET" #x300B)
-    ("LEFT CORNER BRACKET" #x300C)
-    ("RIGHT CORNER BRACKET" #x300D)
-    ("LEFT WHITE CORNER BRACKET" #x300E)
-    ("RIGHT WHITE CORNER BRACKET" #x300F)
-    ("LEFT BLACK LENTICULAR BRACKET" #x3010)
-    ("RIGHT BLACK LENTICULAR BRACKET" #x3011)
-    ("POSTAL MARK" #x3012)
-    ("GETA MARK" #x3013)
-    ("LEFT TORTOISE SHELL BRACKET" #x3014)
-    ("RIGHT TORTOISE SHELL BRACKET" #x3015)
-    ("LEFT WHITE LENTICULAR BRACKET" #x3016)
-    ("RIGHT WHITE LENTICULAR BRACKET" #x3017)
-    ("LEFT WHITE TORTOISE SHELL BRACKET" #x3018)
-    ("RIGHT WHITE TORTOISE SHELL BRACKET" #x3019)
-    ("LEFT WHITE SQUARE BRACKET" #x301A)
-    ("RIGHT WHITE SQUARE BRACKET" #x301B)
-    ("WAVE DASH" #x301C)
-    ("REVERSED DOUBLE PRIME QUOTATION MARK" #x301D)
-    ("DOUBLE PRIME QUOTATION MARK" #x301E)
-    ("LOW DOUBLE PRIME QUOTATION MARK" #x301F)
-    ("POSTAL MARK FACE" #x3020)
-    ("HANGZHOU NUMERAL ONE" #x3021)
-    ("HANGZHOU NUMERAL TWO" #x3022)
-    ("HANGZHOU NUMERAL THREE" #x3023)
-    ("HANGZHOU NUMERAL FOUR" #x3024)
-    ("HANGZHOU NUMERAL FIVE" #x3025)
-    ("HANGZHOU NUMERAL SIX" #x3026)
-    ("HANGZHOU NUMERAL SEVEN" #x3027)
-    ("HANGZHOU NUMERAL EIGHT" #x3028)
-    ("HANGZHOU NUMERAL NINE" #x3029)
-    ("IDEOGRAPHIC LEVEL TONE MARK" #x302A)
-    ("IDEOGRAPHIC RISING TONE MARK" #x302B)
-    ("IDEOGRAPHIC DEPARTING TONE MARK" #x302C)
-    ("IDEOGRAPHIC ENTERING TONE MARK" #x302D)
-    ("HANGUL SINGLE DOT TONE MARK" #x302E)
-    ("HANGUL DOUBLE DOT TONE MARK" #x302F)
-    ("WAVY DASH" #x3030)
-    ("VERTICAL KANA REPEAT MARK" #x3031)
-    ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK" #x3032)
-    ("VERTICAL KANA REPEAT MARK UPPER HALF" #x3033)
-    ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF" #x3034)
-    ("VERTICAL KANA REPEAT MARK LOWER HALF" #x3035)
-    ("CIRCLED POSTAL MARK" #x3036)
-    ("IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL" #x3037)
-    ("HANGZHOU NUMERAL TEN" #x3038)
-    ("HANGZHOU NUMERAL TWENTY" #x3039)
-    ("HANGZHOU NUMERAL THIRTY" #x303A)
-    ("VERTICAL IDEOGRAPHIC ITERATION MARK" #x303B)
-    ("MASU MARK" #x303C)
-    ("PART ALTERNATION MARK" #x303D)
-    ("IDEOGRAPHIC VARIATION INDICATOR" #x303E)
-    ("IDEOGRAPHIC HALF FILL SPACE" #x303F)
-    ))
-
diff --git a/etc/nxml/03040-0309F.el b/etc/nxml/03040-0309F.el
deleted file mode 100644 (file)
index 2484d11..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(nxml-define-char-name-set 'hiragana
-  '(("HIRAGANA LETTER SMALL A" #x3041)
-    ("HIRAGANA LETTER A" #x3042)
-    ("HIRAGANA LETTER SMALL I" #x3043)
-    ("HIRAGANA LETTER I" #x3044)
-    ("HIRAGANA LETTER SMALL U" #x3045)
-    ("HIRAGANA LETTER U" #x3046)
-    ("HIRAGANA LETTER SMALL E" #x3047)
-    ("HIRAGANA LETTER E" #x3048)
-    ("HIRAGANA LETTER SMALL O" #x3049)
-    ("HIRAGANA LETTER O" #x304A)
-    ("HIRAGANA LETTER KA" #x304B)
-    ("HIRAGANA LETTER GA" #x304C)
-    ("HIRAGANA LETTER KI" #x304D)
-    ("HIRAGANA LETTER GI" #x304E)
-    ("HIRAGANA LETTER KU" #x304F)
-    ("HIRAGANA LETTER GU" #x3050)
-    ("HIRAGANA LETTER KE" #x3051)
-    ("HIRAGANA LETTER GE" #x3052)
-    ("HIRAGANA LETTER KO" #x3053)
-    ("HIRAGANA LETTER GO" #x3054)
-    ("HIRAGANA LETTER SA" #x3055)
-    ("HIRAGANA LETTER ZA" #x3056)
-    ("HIRAGANA LETTER SI" #x3057)
-    ("HIRAGANA LETTER ZI" #x3058)
-    ("HIRAGANA LETTER SU" #x3059)
-    ("HIRAGANA LETTER ZU" #x305A)
-    ("HIRAGANA LETTER SE" #x305B)
-    ("HIRAGANA LETTER ZE" #x305C)
-    ("HIRAGANA LETTER SO" #x305D)
-    ("HIRAGANA LETTER ZO" #x305E)
-    ("HIRAGANA LETTER TA" #x305F)
-    ("HIRAGANA LETTER DA" #x3060)
-    ("HIRAGANA LETTER TI" #x3061)
-    ("HIRAGANA LETTER DI" #x3062)
-    ("HIRAGANA LETTER SMALL TU" #x3063)
-    ("HIRAGANA LETTER TU" #x3064)
-    ("HIRAGANA LETTER DU" #x3065)
-    ("HIRAGANA LETTER TE" #x3066)
-    ("HIRAGANA LETTER DE" #x3067)
-    ("HIRAGANA LETTER TO" #x3068)
-    ("HIRAGANA LETTER DO" #x3069)
-    ("HIRAGANA LETTER NA" #x306A)
-    ("HIRAGANA LETTER NI" #x306B)
-    ("HIRAGANA LETTER NU" #x306C)
-    ("HIRAGANA LETTER NE" #x306D)
-    ("HIRAGANA LETTER NO" #x306E)
-    ("HIRAGANA LETTER HA" #x306F)
-    ("HIRAGANA LETTER BA" #x3070)
-    ("HIRAGANA LETTER PA" #x3071)
-    ("HIRAGANA LETTER HI" #x3072)
-    ("HIRAGANA LETTER BI" #x3073)
-    ("HIRAGANA LETTER PI" #x3074)
-    ("HIRAGANA LETTER HU" #x3075)
-    ("HIRAGANA LETTER BU" #x3076)
-    ("HIRAGANA LETTER PU" #x3077)
-    ("HIRAGANA LETTER HE" #x3078)
-    ("HIRAGANA LETTER BE" #x3079)
-    ("HIRAGANA LETTER PE" #x307A)
-    ("HIRAGANA LETTER HO" #x307B)
-    ("HIRAGANA LETTER BO" #x307C)
-    ("HIRAGANA LETTER PO" #x307D)
-    ("HIRAGANA LETTER MA" #x307E)
-    ("HIRAGANA LETTER MI" #x307F)
-    ("HIRAGANA LETTER MU" #x3080)
-    ("HIRAGANA LETTER ME" #x3081)
-    ("HIRAGANA LETTER MO" #x3082)
-    ("HIRAGANA LETTER SMALL YA" #x3083)
-    ("HIRAGANA LETTER YA" #x3084)
-    ("HIRAGANA LETTER SMALL YU" #x3085)
-    ("HIRAGANA LETTER YU" #x3086)
-    ("HIRAGANA LETTER SMALL YO" #x3087)
-    ("HIRAGANA LETTER YO" #x3088)
-    ("HIRAGANA LETTER RA" #x3089)
-    ("HIRAGANA LETTER RI" #x308A)
-    ("HIRAGANA LETTER RU" #x308B)
-    ("HIRAGANA LETTER RE" #x308C)
-    ("HIRAGANA LETTER RO" #x308D)
-    ("HIRAGANA LETTER SMALL WA" #x308E)
-    ("HIRAGANA LETTER WA" #x308F)
-    ("HIRAGANA LETTER WI" #x3090)
-    ("HIRAGANA LETTER WE" #x3091)
-    ("HIRAGANA LETTER WO" #x3092)
-    ("HIRAGANA LETTER N" #x3093)
-    ("HIRAGANA LETTER VU" #x3094)
-    ("HIRAGANA LETTER SMALL KA" #x3095)
-    ("HIRAGANA LETTER SMALL KE" #x3096)
-    ("COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK" #x3099)
-    ("COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309A)
-    ("KATAKANA-HIRAGANA VOICED SOUND MARK" #x309B)
-    ("KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309C)
-    ("HIRAGANA ITERATION MARK" #x309D)
-    ("HIRAGANA VOICED ITERATION MARK" #x309E)
-    ("HIRAGANA DIGRAPH YORI" #x309F)
-    ))
-
diff --git a/etc/nxml/030A0-030FF.el b/etc/nxml/030A0-030FF.el
deleted file mode 100644 (file)
index 4507ed4..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-(nxml-define-char-name-set 'katakana
-  '(("KATAKANA-HIRAGANA DOUBLE HYPHEN" #x30A0)
-    ("KATAKANA LETTER SMALL A" #x30A1)
-    ("KATAKANA LETTER A" #x30A2)
-    ("KATAKANA LETTER SMALL I" #x30A3)
-    ("KATAKANA LETTER I" #x30A4)
-    ("KATAKANA LETTER SMALL U" #x30A5)
-    ("KATAKANA LETTER U" #x30A6)
-    ("KATAKANA LETTER SMALL E" #x30A7)
-    ("KATAKANA LETTER E" #x30A8)
-    ("KATAKANA LETTER SMALL O" #x30A9)
-    ("KATAKANA LETTER O" #x30AA)
-    ("KATAKANA LETTER KA" #x30AB)
-    ("KATAKANA LETTER GA" #x30AC)
-    ("KATAKANA LETTER KI" #x30AD)
-    ("KATAKANA LETTER GI" #x30AE)
-    ("KATAKANA LETTER KU" #x30AF)
-    ("KATAKANA LETTER GU" #x30B0)
-    ("KATAKANA LETTER KE" #x30B1)
-    ("KATAKANA LETTER GE" #x30B2)
-    ("KATAKANA LETTER KO" #x30B3)
-    ("KATAKANA LETTER GO" #x30B4)
-    ("KATAKANA LETTER SA" #x30B5)
-    ("KATAKANA LETTER ZA" #x30B6)
-    ("KATAKANA LETTER SI" #x30B7)
-    ("KATAKANA LETTER ZI" #x30B8)
-    ("KATAKANA LETTER SU" #x30B9)
-    ("KATAKANA LETTER ZU" #x30BA)
-    ("KATAKANA LETTER SE" #x30BB)
-    ("KATAKANA LETTER ZE" #x30BC)
-    ("KATAKANA LETTER SO" #x30BD)
-    ("KATAKANA LETTER ZO" #x30BE)
-    ("KATAKANA LETTER TA" #x30BF)
-    ("KATAKANA LETTER DA" #x30C0)
-    ("KATAKANA LETTER TI" #x30C1)
-    ("KATAKANA LETTER DI" #x30C2)
-    ("KATAKANA LETTER SMALL TU" #x30C3)
-    ("KATAKANA LETTER TU" #x30C4)
-    ("KATAKANA LETTER DU" #x30C5)
-    ("KATAKANA LETTER TE" #x30C6)
-    ("KATAKANA LETTER DE" #x30C7)
-    ("KATAKANA LETTER TO" #x30C8)
-    ("KATAKANA LETTER DO" #x30C9)
-    ("KATAKANA LETTER NA" #x30CA)
-    ("KATAKANA LETTER NI" #x30CB)
-    ("KATAKANA LETTER NU" #x30CC)
-    ("KATAKANA LETTER NE" #x30CD)
-    ("KATAKANA LETTER NO" #x30CE)
-    ("KATAKANA LETTER HA" #x30CF)
-    ("KATAKANA LETTER BA" #x30D0)
-    ("KATAKANA LETTER PA" #x30D1)
-    ("KATAKANA LETTER HI" #x30D2)
-    ("KATAKANA LETTER BI" #x30D3)
-    ("KATAKANA LETTER PI" #x30D4)
-    ("KATAKANA LETTER HU" #x30D5)
-    ("KATAKANA LETTER BU" #x30D6)
-    ("KATAKANA LETTER PU" #x30D7)
-    ("KATAKANA LETTER HE" #x30D8)
-    ("KATAKANA LETTER BE" #x30D9)
-    ("KATAKANA LETTER PE" #x30DA)
-    ("KATAKANA LETTER HO" #x30DB)
-    ("KATAKANA LETTER BO" #x30DC)
-    ("KATAKANA LETTER PO" #x30DD)
-    ("KATAKANA LETTER MA" #x30DE)
-    ("KATAKANA LETTER MI" #x30DF)
-    ("KATAKANA LETTER MU" #x30E0)
-    ("KATAKANA LETTER ME" #x30E1)
-    ("KATAKANA LETTER MO" #x30E2)
-    ("KATAKANA LETTER SMALL YA" #x30E3)
-    ("KATAKANA LETTER YA" #x30E4)
-    ("KATAKANA LETTER SMALL YU" #x30E5)
-    ("KATAKANA LETTER YU" #x30E6)
-    ("KATAKANA LETTER SMALL YO" #x30E7)
-    ("KATAKANA LETTER YO" #x30E8)
-    ("KATAKANA LETTER RA" #x30E9)
-    ("KATAKANA LETTER RI" #x30EA)
-    ("KATAKANA LETTER RU" #x30EB)
-    ("KATAKANA LETTER RE" #x30EC)
-    ("KATAKANA LETTER RO" #x30ED)
-    ("KATAKANA LETTER SMALL WA" #x30EE)
-    ("KATAKANA LETTER WA" #x30EF)
-    ("KATAKANA LETTER WI" #x30F0)
-    ("KATAKANA LETTER WE" #x30F1)
-    ("KATAKANA LETTER WO" #x30F2)
-    ("KATAKANA LETTER N" #x30F3)
-    ("KATAKANA LETTER VU" #x30F4)
-    ("KATAKANA LETTER SMALL KA" #x30F5)
-    ("KATAKANA LETTER SMALL KE" #x30F6)
-    ("KATAKANA LETTER VA" #x30F7)
-    ("KATAKANA LETTER VI" #x30F8)
-    ("KATAKANA LETTER VE" #x30F9)
-    ("KATAKANA LETTER VO" #x30FA)
-    ("KATAKANA MIDDLE DOT" #x30FB)
-    ("KATAKANA-HIRAGANA PROLONGED SOUND MARK" #x30FC)
-    ("KATAKANA ITERATION MARK" #x30FD)
-    ("KATAKANA VOICED ITERATION MARK" #x30FE)
-    ("KATAKANA DIGRAPH KOTO" #x30FF)
-    ))
-
diff --git a/etc/nxml/03100-0312F.el b/etc/nxml/03100-0312F.el
deleted file mode 100644 (file)
index 6ab50b1..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-(nxml-define-char-name-set 'bopomofo
-  '(("BOPOMOFO LETTER B" #x3105)
-    ("BOPOMOFO LETTER P" #x3106)
-    ("BOPOMOFO LETTER M" #x3107)
-    ("BOPOMOFO LETTER F" #x3108)
-    ("BOPOMOFO LETTER D" #x3109)
-    ("BOPOMOFO LETTER T" #x310A)
-    ("BOPOMOFO LETTER N" #x310B)
-    ("BOPOMOFO LETTER L" #x310C)
-    ("BOPOMOFO LETTER G" #x310D)
-    ("BOPOMOFO LETTER K" #x310E)
-    ("BOPOMOFO LETTER H" #x310F)
-    ("BOPOMOFO LETTER J" #x3110)
-    ("BOPOMOFO LETTER Q" #x3111)
-    ("BOPOMOFO LETTER X" #x3112)
-    ("BOPOMOFO LETTER ZH" #x3113)
-    ("BOPOMOFO LETTER CH" #x3114)
-    ("BOPOMOFO LETTER SH" #x3115)
-    ("BOPOMOFO LETTER R" #x3116)
-    ("BOPOMOFO LETTER Z" #x3117)
-    ("BOPOMOFO LETTER C" #x3118)
-    ("BOPOMOFO LETTER S" #x3119)
-    ("BOPOMOFO LETTER A" #x311A)
-    ("BOPOMOFO LETTER O" #x311B)
-    ("BOPOMOFO LETTER E" #x311C)
-    ("BOPOMOFO LETTER EH" #x311D)
-    ("BOPOMOFO LETTER AI" #x311E)
-    ("BOPOMOFO LETTER EI" #x311F)
-    ("BOPOMOFO LETTER AU" #x3120)
-    ("BOPOMOFO LETTER OU" #x3121)
-    ("BOPOMOFO LETTER AN" #x3122)
-    ("BOPOMOFO LETTER EN" #x3123)
-    ("BOPOMOFO LETTER ANG" #x3124)
-    ("BOPOMOFO LETTER ENG" #x3125)
-    ("BOPOMOFO LETTER ER" #x3126)
-    ("BOPOMOFO LETTER I" #x3127)
-    ("BOPOMOFO LETTER U" #x3128)
-    ("BOPOMOFO LETTER IU" #x3129)
-    ("BOPOMOFO LETTER V" #x312A)
-    ("BOPOMOFO LETTER NG" #x312B)
-    ("BOPOMOFO LETTER GN" #x312C)
-    ))
-
diff --git a/etc/nxml/03130-0318F.el b/etc/nxml/03130-0318F.el
deleted file mode 100644 (file)
index 3aabfb7..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-(nxml-define-char-name-set 'hangul-compatibility-jamo
-  '(("HANGUL LETTER KIYEOK" #x3131)
-    ("HANGUL LETTER SSANGKIYEOK" #x3132)
-    ("HANGUL LETTER KIYEOK-SIOS" #x3133)
-    ("HANGUL LETTER NIEUN" #x3134)
-    ("HANGUL LETTER NIEUN-CIEUC" #x3135)
-    ("HANGUL LETTER NIEUN-HIEUH" #x3136)
-    ("HANGUL LETTER TIKEUT" #x3137)
-    ("HANGUL LETTER SSANGTIKEUT" #x3138)
-    ("HANGUL LETTER RIEUL" #x3139)
-    ("HANGUL LETTER RIEUL-KIYEOK" #x313A)
-    ("HANGUL LETTER RIEUL-MIEUM" #x313B)
-    ("HANGUL LETTER RIEUL-PIEUP" #x313C)
-    ("HANGUL LETTER RIEUL-SIOS" #x313D)
-    ("HANGUL LETTER RIEUL-THIEUTH" #x313E)
-    ("HANGUL LETTER RIEUL-PHIEUPH" #x313F)
-    ("HANGUL LETTER RIEUL-HIEUH" #x3140)
-    ("HANGUL LETTER MIEUM" #x3141)
-    ("HANGUL LETTER PIEUP" #x3142)
-    ("HANGUL LETTER SSANGPIEUP" #x3143)
-    ("HANGUL LETTER PIEUP-SIOS" #x3144)
-    ("HANGUL LETTER SIOS" #x3145)
-    ("HANGUL LETTER SSANGSIOS" #x3146)
-    ("HANGUL LETTER IEUNG" #x3147)
-    ("HANGUL LETTER CIEUC" #x3148)
-    ("HANGUL LETTER SSANGCIEUC" #x3149)
-    ("HANGUL LETTER CHIEUCH" #x314A)
-    ("HANGUL LETTER KHIEUKH" #x314B)
-    ("HANGUL LETTER THIEUTH" #x314C)
-    ("HANGUL LETTER PHIEUPH" #x314D)
-    ("HANGUL LETTER HIEUH" #x314E)
-    ("HANGUL LETTER A" #x314F)
-    ("HANGUL LETTER AE" #x3150)
-    ("HANGUL LETTER YA" #x3151)
-    ("HANGUL LETTER YAE" #x3152)
-    ("HANGUL LETTER EO" #x3153)
-    ("HANGUL LETTER E" #x3154)
-    ("HANGUL LETTER YEO" #x3155)
-    ("HANGUL LETTER YE" #x3156)
-    ("HANGUL LETTER O" #x3157)
-    ("HANGUL LETTER WA" #x3158)
-    ("HANGUL LETTER WAE" #x3159)
-    ("HANGUL LETTER OE" #x315A)
-    ("HANGUL LETTER YO" #x315B)
-    ("HANGUL LETTER U" #x315C)
-    ("HANGUL LETTER WEO" #x315D)
-    ("HANGUL LETTER WE" #x315E)
-    ("HANGUL LETTER WI" #x315F)
-    ("HANGUL LETTER YU" #x3160)
-    ("HANGUL LETTER EU" #x3161)
-    ("HANGUL LETTER YI" #x3162)
-    ("HANGUL LETTER I" #x3163)
-    ("HANGUL FILLER" #x3164)
-    ("HANGUL LETTER SSANGNIEUN" #x3165)
-    ("HANGUL LETTER NIEUN-TIKEUT" #x3166)
-    ("HANGUL LETTER NIEUN-SIOS" #x3167)
-    ("HANGUL LETTER NIEUN-PANSIOS" #x3168)
-    ("HANGUL LETTER RIEUL-KIYEOK-SIOS" #x3169)
-    ("HANGUL LETTER RIEUL-TIKEUT" #x316A)
-    ("HANGUL LETTER RIEUL-PIEUP-SIOS" #x316B)
-    ("HANGUL LETTER RIEUL-PANSIOS" #x316C)
-    ("HANGUL LETTER RIEUL-YEORINHIEUH" #x316D)
-    ("HANGUL LETTER MIEUM-PIEUP" #x316E)
-    ("HANGUL LETTER MIEUM-SIOS" #x316F)
-    ("HANGUL LETTER MIEUM-PANSIOS" #x3170)
-    ("HANGUL LETTER KAPYEOUNMIEUM" #x3171)
-    ("HANGUL LETTER PIEUP-KIYEOK" #x3172)
-    ("HANGUL LETTER PIEUP-TIKEUT" #x3173)
-    ("HANGUL LETTER PIEUP-SIOS-KIYEOK" #x3174)
-    ("HANGUL LETTER PIEUP-SIOS-TIKEUT" #x3175)
-    ("HANGUL LETTER PIEUP-CIEUC" #x3176)
-    ("HANGUL LETTER PIEUP-THIEUTH" #x3177)
-    ("HANGUL LETTER KAPYEOUNPIEUP" #x3178)
-    ("HANGUL LETTER KAPYEOUNSSANGPIEUP" #x3179)
-    ("HANGUL LETTER SIOS-KIYEOK" #x317A)
-    ("HANGUL LETTER SIOS-NIEUN" #x317B)
-    ("HANGUL LETTER SIOS-TIKEUT" #x317C)
-    ("HANGUL LETTER SIOS-PIEUP" #x317D)
-    ("HANGUL LETTER SIOS-CIEUC" #x317E)
-    ("HANGUL LETTER PANSIOS" #x317F)
-    ("HANGUL LETTER SSANGIEUNG" #x3180)
-    ("HANGUL LETTER YESIEUNG" #x3181)
-    ("HANGUL LETTER YESIEUNG-SIOS" #x3182)
-    ("HANGUL LETTER YESIEUNG-PANSIOS" #x3183)
-    ("HANGUL LETTER KAPYEOUNPHIEUPH" #x3184)
-    ("HANGUL LETTER SSANGHIEUH" #x3185)
-    ("HANGUL LETTER YEORINHIEUH" #x3186)
-    ("HANGUL LETTER YO-YA" #x3187)
-    ("HANGUL LETTER YO-YAE" #x3188)
-    ("HANGUL LETTER YO-I" #x3189)
-    ("HANGUL LETTER YU-YEO" #x318A)
-    ("HANGUL LETTER YU-YE" #x318B)
-    ("HANGUL LETTER YU-I" #x318C)
-    ("HANGUL LETTER ARAEA" #x318D)
-    ("HANGUL LETTER ARAEAE" #x318E)
-    ))
-
diff --git a/etc/nxml/03190-0319F.el b/etc/nxml/03190-0319F.el
deleted file mode 100644 (file)
index 6dce50e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(nxml-define-char-name-set 'kanbun
-  '(("IDEOGRAPHIC ANNOTATION LINKING MARK" #x3190)
-    ("IDEOGRAPHIC ANNOTATION REVERSE MARK" #x3191)
-    ("IDEOGRAPHIC ANNOTATION ONE MARK" #x3192)
-    ("IDEOGRAPHIC ANNOTATION TWO MARK" #x3193)
-    ("IDEOGRAPHIC ANNOTATION THREE MARK" #x3194)
-    ("IDEOGRAPHIC ANNOTATION FOUR MARK" #x3195)
-    ("IDEOGRAPHIC ANNOTATION TOP MARK" #x3196)
-    ("IDEOGRAPHIC ANNOTATION MIDDLE MARK" #x3197)
-    ("IDEOGRAPHIC ANNOTATION BOTTOM MARK" #x3198)
-    ("IDEOGRAPHIC ANNOTATION FIRST MARK" #x3199)
-    ("IDEOGRAPHIC ANNOTATION SECOND MARK" #x319A)
-    ("IDEOGRAPHIC ANNOTATION THIRD MARK" #x319B)
-    ("IDEOGRAPHIC ANNOTATION FOURTH MARK" #x319C)
-    ("IDEOGRAPHIC ANNOTATION HEAVEN MARK" #x319D)
-    ("IDEOGRAPHIC ANNOTATION EARTH MARK" #x319E)
-    ("IDEOGRAPHIC ANNOTATION MAN MARK" #x319F)
-    ))
-
diff --git a/etc/nxml/031A0-031BF.el b/etc/nxml/031A0-031BF.el
deleted file mode 100644 (file)
index 54d2f54..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-(nxml-define-char-name-set 'bopomofo-extended
-  '(("BOPOMOFO LETTER BU" #x31A0)
-    ("BOPOMOFO LETTER ZI" #x31A1)
-    ("BOPOMOFO LETTER JI" #x31A2)
-    ("BOPOMOFO LETTER GU" #x31A3)
-    ("BOPOMOFO LETTER EE" #x31A4)
-    ("BOPOMOFO LETTER ENN" #x31A5)
-    ("BOPOMOFO LETTER OO" #x31A6)
-    ("BOPOMOFO LETTER ONN" #x31A7)
-    ("BOPOMOFO LETTER IR" #x31A8)
-    ("BOPOMOFO LETTER ANN" #x31A9)
-    ("BOPOMOFO LETTER INN" #x31AA)
-    ("BOPOMOFO LETTER UNN" #x31AB)
-    ("BOPOMOFO LETTER IM" #x31AC)
-    ("BOPOMOFO LETTER NGG" #x31AD)
-    ("BOPOMOFO LETTER AINN" #x31AE)
-    ("BOPOMOFO LETTER AUNN" #x31AF)
-    ("BOPOMOFO LETTER AM" #x31B0)
-    ("BOPOMOFO LETTER OM" #x31B1)
-    ("BOPOMOFO LETTER ONG" #x31B2)
-    ("BOPOMOFO LETTER INNN" #x31B3)
-    ("BOPOMOFO FINAL LETTER P" #x31B4)
-    ("BOPOMOFO FINAL LETTER T" #x31B5)
-    ("BOPOMOFO FINAL LETTER K" #x31B6)
-    ("BOPOMOFO FINAL LETTER H" #x31B7)
-    ))
-
diff --git a/etc/nxml/031F0-031FF.el b/etc/nxml/031F0-031FF.el
deleted file mode 100644 (file)
index d447c3b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(nxml-define-char-name-set 'katakana-phonetic-extensions
-  '(("KATAKANA LETTER SMALL KU" #x31F0)
-    ("KATAKANA LETTER SMALL SI" #x31F1)
-    ("KATAKANA LETTER SMALL SU" #x31F2)
-    ("KATAKANA LETTER SMALL TO" #x31F3)
-    ("KATAKANA LETTER SMALL NU" #x31F4)
-    ("KATAKANA LETTER SMALL HA" #x31F5)
-    ("KATAKANA LETTER SMALL HI" #x31F6)
-    ("KATAKANA LETTER SMALL HU" #x31F7)
-    ("KATAKANA LETTER SMALL HE" #x31F8)
-    ("KATAKANA LETTER SMALL HO" #x31F9)
-    ("KATAKANA LETTER SMALL MU" #x31FA)
-    ("KATAKANA LETTER SMALL RA" #x31FB)
-    ("KATAKANA LETTER SMALL RI" #x31FC)
-    ("KATAKANA LETTER SMALL RU" #x31FD)
-    ("KATAKANA LETTER SMALL RE" #x31FE)
-    ("KATAKANA LETTER SMALL RO" #x31FF)
-    ))
-
diff --git a/etc/nxml/03200-032FF.el b/etc/nxml/03200-032FF.el
deleted file mode 100644 (file)
index eb05e9d..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-(nxml-define-char-name-set 'enclosed-cjk-letters-and-months
-  '(("PARENTHESIZED HANGUL KIYEOK" #x3200)
-    ("PARENTHESIZED HANGUL NIEUN" #x3201)
-    ("PARENTHESIZED HANGUL TIKEUT" #x3202)
-    ("PARENTHESIZED HANGUL RIEUL" #x3203)
-    ("PARENTHESIZED HANGUL MIEUM" #x3204)
-    ("PARENTHESIZED HANGUL PIEUP" #x3205)
-    ("PARENTHESIZED HANGUL SIOS" #x3206)
-    ("PARENTHESIZED HANGUL IEUNG" #x3207)
-    ("PARENTHESIZED HANGUL CIEUC" #x3208)
-    ("PARENTHESIZED HANGUL CHIEUCH" #x3209)
-    ("PARENTHESIZED HANGUL KHIEUKH" #x320A)
-    ("PARENTHESIZED HANGUL THIEUTH" #x320B)
-    ("PARENTHESIZED HANGUL PHIEUPH" #x320C)
-    ("PARENTHESIZED HANGUL HIEUH" #x320D)
-    ("PARENTHESIZED HANGUL KIYEOK A" #x320E)
-    ("PARENTHESIZED HANGUL NIEUN A" #x320F)
-    ("PARENTHESIZED HANGUL TIKEUT A" #x3210)
-    ("PARENTHESIZED HANGUL RIEUL A" #x3211)
-    ("PARENTHESIZED HANGUL MIEUM A" #x3212)
-    ("PARENTHESIZED HANGUL PIEUP A" #x3213)
-    ("PARENTHESIZED HANGUL SIOS A" #x3214)
-    ("PARENTHESIZED HANGUL IEUNG A" #x3215)
-    ("PARENTHESIZED HANGUL CIEUC A" #x3216)
-    ("PARENTHESIZED HANGUL CHIEUCH A" #x3217)
-    ("PARENTHESIZED HANGUL KHIEUKH A" #x3218)
-    ("PARENTHESIZED HANGUL THIEUTH A" #x3219)
-    ("PARENTHESIZED HANGUL PHIEUPH A" #x321A)
-    ("PARENTHESIZED HANGUL HIEUH A" #x321B)
-    ("PARENTHESIZED HANGUL CIEUC U" #x321C)
-    ("PARENTHESIZED IDEOGRAPH ONE" #x3220)
-    ("PARENTHESIZED IDEOGRAPH TWO" #x3221)
-    ("PARENTHESIZED IDEOGRAPH THREE" #x3222)
-    ("PARENTHESIZED IDEOGRAPH FOUR" #x3223)
-    ("PARENTHESIZED IDEOGRAPH FIVE" #x3224)
-    ("PARENTHESIZED IDEOGRAPH SIX" #x3225)
-    ("PARENTHESIZED IDEOGRAPH SEVEN" #x3226)
-    ("PARENTHESIZED IDEOGRAPH EIGHT" #x3227)
-    ("PARENTHESIZED IDEOGRAPH NINE" #x3228)
-    ("PARENTHESIZED IDEOGRAPH TEN" #x3229)
-    ("PARENTHESIZED IDEOGRAPH MOON" #x322A)
-    ("PARENTHESIZED IDEOGRAPH FIRE" #x322B)
-    ("PARENTHESIZED IDEOGRAPH WATER" #x322C)
-    ("PARENTHESIZED IDEOGRAPH WOOD" #x322D)
-    ("PARENTHESIZED IDEOGRAPH METAL" #x322E)
-    ("PARENTHESIZED IDEOGRAPH EARTH" #x322F)
-    ("PARENTHESIZED IDEOGRAPH SUN" #x3230)
-    ("PARENTHESIZED IDEOGRAPH STOCK" #x3231)
-    ("PARENTHESIZED IDEOGRAPH HAVE" #x3232)
-    ("PARENTHESIZED IDEOGRAPH SOCIETY" #x3233)
-    ("PARENTHESIZED IDEOGRAPH NAME" #x3234)
-    ("PARENTHESIZED IDEOGRAPH SPECIAL" #x3235)
-    ("PARENTHESIZED IDEOGRAPH FINANCIAL" #x3236)
-    ("PARENTHESIZED IDEOGRAPH CONGRATULATION" #x3237)
-    ("PARENTHESIZED IDEOGRAPH LABOR" #x3238)
-    ("PARENTHESIZED IDEOGRAPH REPRESENT" #x3239)
-    ("PARENTHESIZED IDEOGRAPH CALL" #x323A)
-    ("PARENTHESIZED IDEOGRAPH STUDY" #x323B)
-    ("PARENTHESIZED IDEOGRAPH SUPERVISE" #x323C)
-    ("PARENTHESIZED IDEOGRAPH ENTERPRISE" #x323D)
-    ("PARENTHESIZED IDEOGRAPH RESOURCE" #x323E)
-    ("PARENTHESIZED IDEOGRAPH ALLIANCE" #x323F)
-    ("PARENTHESIZED IDEOGRAPH FESTIVAL" #x3240)
-    ("PARENTHESIZED IDEOGRAPH REST" #x3241)
-    ("PARENTHESIZED IDEOGRAPH SELF" #x3242)
-    ("PARENTHESIZED IDEOGRAPH REACH" #x3243)
-    ("CIRCLED NUMBER TWENTY ONE" #x3251)
-    ("CIRCLED NUMBER TWENTY TWO" #x3252)
-    ("CIRCLED NUMBER TWENTY THREE" #x3253)
-    ("CIRCLED NUMBER TWENTY FOUR" #x3254)
-    ("CIRCLED NUMBER TWENTY FIVE" #x3255)
-    ("CIRCLED NUMBER TWENTY SIX" #x3256)
-    ("CIRCLED NUMBER TWENTY SEVEN" #x3257)
-    ("CIRCLED NUMBER TWENTY EIGHT" #x3258)
-    ("CIRCLED NUMBER TWENTY NINE" #x3259)
-    ("CIRCLED NUMBER THIRTY" #x325A)
-    ("CIRCLED NUMBER THIRTY ONE" #x325B)
-    ("CIRCLED NUMBER THIRTY TWO" #x325C)
-    ("CIRCLED NUMBER THIRTY THREE" #x325D)
-    ("CIRCLED NUMBER THIRTY FOUR" #x325E)
-    ("CIRCLED NUMBER THIRTY FIVE" #x325F)
-    ("CIRCLED HANGUL KIYEOK" #x3260)
-    ("CIRCLED HANGUL NIEUN" #x3261)
-    ("CIRCLED HANGUL TIKEUT" #x3262)
-    ("CIRCLED HANGUL RIEUL" #x3263)
-    ("CIRCLED HANGUL MIEUM" #x3264)
-    ("CIRCLED HANGUL PIEUP" #x3265)
-    ("CIRCLED HANGUL SIOS" #x3266)
-    ("CIRCLED HANGUL IEUNG" #x3267)
-    ("CIRCLED HANGUL CIEUC" #x3268)
-    ("CIRCLED HANGUL CHIEUCH" #x3269)
-    ("CIRCLED HANGUL KHIEUKH" #x326A)
-    ("CIRCLED HANGUL THIEUTH" #x326B)
-    ("CIRCLED HANGUL PHIEUPH" #x326C)
-    ("CIRCLED HANGUL HIEUH" #x326D)
-    ("CIRCLED HANGUL KIYEOK A" #x326E)
-    ("CIRCLED HANGUL NIEUN A" #x326F)
-    ("CIRCLED HANGUL TIKEUT A" #x3270)
-    ("CIRCLED HANGUL RIEUL A" #x3271)
-    ("CIRCLED HANGUL MIEUM A" #x3272)
-    ("CIRCLED HANGUL PIEUP A" #x3273)
-    ("CIRCLED HANGUL SIOS A" #x3274)
-    ("CIRCLED HANGUL IEUNG A" #x3275)
-    ("CIRCLED HANGUL CIEUC A" #x3276)
-    ("CIRCLED HANGUL CHIEUCH A" #x3277)
-    ("CIRCLED HANGUL KHIEUKH A" #x3278)
-    ("CIRCLED HANGUL THIEUTH A" #x3279)
-    ("CIRCLED HANGUL PHIEUPH A" #x327A)
-    ("CIRCLED HANGUL HIEUH A" #x327B)
-    ("KOREAN STANDARD SYMBOL" #x327F)
-    ("CIRCLED IDEOGRAPH ONE" #x3280)
-    ("CIRCLED IDEOGRAPH TWO" #x3281)
-    ("CIRCLED IDEOGRAPH THREE" #x3282)
-    ("CIRCLED IDEOGRAPH FOUR" #x3283)
-    ("CIRCLED IDEOGRAPH FIVE" #x3284)
-    ("CIRCLED IDEOGRAPH SIX" #x3285)
-    ("CIRCLED IDEOGRAPH SEVEN" #x3286)
-    ("CIRCLED IDEOGRAPH EIGHT" #x3287)
-    ("CIRCLED IDEOGRAPH NINE" #x3288)
-    ("CIRCLED IDEOGRAPH TEN" #x3289)
-    ("CIRCLED IDEOGRAPH MOON" #x328A)
-    ("CIRCLED IDEOGRAPH FIRE" #x328B)
-    ("CIRCLED IDEOGRAPH WATER" #x328C)
-    ("CIRCLED IDEOGRAPH WOOD" #x328D)
-    ("CIRCLED IDEOGRAPH METAL" #x328E)
-    ("CIRCLED IDEOGRAPH EARTH" #x328F)
-    ("CIRCLED IDEOGRAPH SUN" #x3290)
-    ("CIRCLED IDEOGRAPH STOCK" #x3291)
-    ("CIRCLED IDEOGRAPH HAVE" #x3292)
-    ("CIRCLED IDEOGRAPH SOCIETY" #x3293)
-    ("CIRCLED IDEOGRAPH NAME" #x3294)
-    ("CIRCLED IDEOGRAPH SPECIAL" #x3295)
-    ("CIRCLED IDEOGRAPH FINANCIAL" #x3296)
-    ("CIRCLED IDEOGRAPH CONGRATULATION" #x3297)
-    ("CIRCLED IDEOGRAPH LABOR" #x3298)
-    ("CIRCLED IDEOGRAPH SECRET" #x3299)
-    ("CIRCLED IDEOGRAPH MALE" #x329A)
-    ("CIRCLED IDEOGRAPH FEMALE" #x329B)
-    ("CIRCLED IDEOGRAPH SUITABLE" #x329C)
-    ("CIRCLED IDEOGRAPH EXCELLENT" #x329D)
-    ("CIRCLED IDEOGRAPH PRINT" #x329E)
-    ("CIRCLED IDEOGRAPH ATTENTION" #x329F)
-    ("CIRCLED IDEOGRAPH ITEM" #x32A0)
-    ("CIRCLED IDEOGRAPH REST" #x32A1)
-    ("CIRCLED IDEOGRAPH COPY" #x32A2)
-    ("CIRCLED IDEOGRAPH CORRECT" #x32A3)
-    ("CIRCLED IDEOGRAPH HIGH" #x32A4)
-    ("CIRCLED IDEOGRAPH CENTRE" #x32A5)
-    ("CIRCLED IDEOGRAPH LOW" #x32A6)
-    ("CIRCLED IDEOGRAPH LEFT" #x32A7)
-    ("CIRCLED IDEOGRAPH RIGHT" #x32A8)
-    ("CIRCLED IDEOGRAPH MEDICINE" #x32A9)
-    ("CIRCLED IDEOGRAPH RELIGION" #x32AA)
-    ("CIRCLED IDEOGRAPH STUDY" #x32AB)
-    ("CIRCLED IDEOGRAPH SUPERVISE" #x32AC)
-    ("CIRCLED IDEOGRAPH ENTERPRISE" #x32AD)
-    ("CIRCLED IDEOGRAPH RESOURCE" #x32AE)
-    ("CIRCLED IDEOGRAPH ALLIANCE" #x32AF)
-    ("CIRCLED IDEOGRAPH NIGHT" #x32B0)
-    ("CIRCLED NUMBER THIRTY SIX" #x32B1)
-    ("CIRCLED NUMBER THIRTY SEVEN" #x32B2)
-    ("CIRCLED NUMBER THIRTY EIGHT" #x32B3)
-    ("CIRCLED NUMBER THIRTY NINE" #x32B4)
-    ("CIRCLED NUMBER FORTY" #x32B5)
-    ("CIRCLED NUMBER FORTY ONE" #x32B6)
-    ("CIRCLED NUMBER FORTY TWO" #x32B7)
-    ("CIRCLED NUMBER FORTY THREE" #x32B8)
-    ("CIRCLED NUMBER FORTY FOUR" #x32B9)
-    ("CIRCLED NUMBER FORTY FIVE" #x32BA)
-    ("CIRCLED NUMBER FORTY SIX" #x32BB)
-    ("CIRCLED NUMBER FORTY SEVEN" #x32BC)
-    ("CIRCLED NUMBER FORTY EIGHT" #x32BD)
-    ("CIRCLED NUMBER FORTY NINE" #x32BE)
-    ("CIRCLED NUMBER FIFTY" #x32BF)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY" #x32C0)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY" #x32C1)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH" #x32C2)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL" #x32C3)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY" #x32C4)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE" #x32C5)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY" #x32C6)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST" #x32C7)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER" #x32C8)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER" #x32C9)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER" #x32CA)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER" #x32CB)
-    ("CIRCLED KATAKANA A" #x32D0)
-    ("CIRCLED KATAKANA I" #x32D1)
-    ("CIRCLED KATAKANA U" #x32D2)
-    ("CIRCLED KATAKANA E" #x32D3)
-    ("CIRCLED KATAKANA O" #x32D4)
-    ("CIRCLED KATAKANA KA" #x32D5)
-    ("CIRCLED KATAKANA KI" #x32D6)
-    ("CIRCLED KATAKANA KU" #x32D7)
-    ("CIRCLED KATAKANA KE" #x32D8)
-    ("CIRCLED KATAKANA KO" #x32D9)
-    ("CIRCLED KATAKANA SA" #x32DA)
-    ("CIRCLED KATAKANA SI" #x32DB)
-    ("CIRCLED KATAKANA SU" #x32DC)
-    ("CIRCLED KATAKANA SE" #x32DD)
-    ("CIRCLED KATAKANA SO" #x32DE)
-    ("CIRCLED KATAKANA TA" #x32DF)
-    ("CIRCLED KATAKANA TI" #x32E0)
-    ("CIRCLED KATAKANA TU" #x32E1)
-    ("CIRCLED KATAKANA TE" #x32E2)
-    ("CIRCLED KATAKANA TO" #x32E3)
-    ("CIRCLED KATAKANA NA" #x32E4)
-    ("CIRCLED KATAKANA NI" #x32E5)
-    ("CIRCLED KATAKANA NU" #x32E6)
-    ("CIRCLED KATAKANA NE" #x32E7)
-    ("CIRCLED KATAKANA NO" #x32E8)
-    ("CIRCLED KATAKANA HA" #x32E9)
-    ("CIRCLED KATAKANA HI" #x32EA)
-    ("CIRCLED KATAKANA HU" #x32EB)
-    ("CIRCLED KATAKANA HE" #x32EC)
-    ("CIRCLED KATAKANA HO" #x32ED)
-    ("CIRCLED KATAKANA MA" #x32EE)
-    ("CIRCLED KATAKANA MI" #x32EF)
-    ("CIRCLED KATAKANA MU" #x32F0)
-    ("CIRCLED KATAKANA ME" #x32F1)
-    ("CIRCLED KATAKANA MO" #x32F2)
-    ("CIRCLED KATAKANA YA" #x32F3)
-    ("CIRCLED KATAKANA YU" #x32F4)
-    ("CIRCLED KATAKANA YO" #x32F5)
-    ("CIRCLED KATAKANA RA" #x32F6)
-    ("CIRCLED KATAKANA RI" #x32F7)
-    ("CIRCLED KATAKANA RU" #x32F8)
-    ("CIRCLED KATAKANA RE" #x32F9)
-    ("CIRCLED KATAKANA RO" #x32FA)
-    ("CIRCLED KATAKANA WA" #x32FB)
-    ("CIRCLED KATAKANA WI" #x32FC)
-    ("CIRCLED KATAKANA WE" #x32FD)
-    ("CIRCLED KATAKANA WO" #x32FE)
-    ))
-
diff --git a/etc/nxml/03300-033FF.el b/etc/nxml/03300-033FF.el
deleted file mode 100644 (file)
index 7d5820e..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-(nxml-define-char-name-set 'cjk-compatibility
-  '(("SQUARE APAATO" #x3300)
-    ("SQUARE ARUHUA" #x3301)
-    ("SQUARE ANPEA" #x3302)
-    ("SQUARE AARU" #x3303)
-    ("SQUARE ININGU" #x3304)
-    ("SQUARE INTI" #x3305)
-    ("SQUARE UON" #x3306)
-    ("SQUARE ESUKUUDO" #x3307)
-    ("SQUARE EEKAA" #x3308)
-    ("SQUARE ONSU" #x3309)
-    ("SQUARE OOMU" #x330A)
-    ("SQUARE KAIRI" #x330B)
-    ("SQUARE KARATTO" #x330C)
-    ("SQUARE KARORII" #x330D)
-    ("SQUARE GARON" #x330E)
-    ("SQUARE GANMA" #x330F)
-    ("SQUARE GIGA" #x3310)
-    ("SQUARE GINII" #x3311)
-    ("SQUARE KYURII" #x3312)
-    ("SQUARE GIRUDAA" #x3313)
-    ("SQUARE KIRO" #x3314)
-    ("SQUARE KIROGURAMU" #x3315)
-    ("SQUARE KIROMEETORU" #x3316)
-    ("SQUARE KIROWATTO" #x3317)
-    ("SQUARE GURAMU" #x3318)
-    ("SQUARE GURAMUTON" #x3319)
-    ("SQUARE KURUZEIRO" #x331A)
-    ("SQUARE KUROONE" #x331B)
-    ("SQUARE KEESU" #x331C)
-    ("SQUARE KORUNA" #x331D)
-    ("SQUARE KOOPO" #x331E)
-    ("SQUARE SAIKURU" #x331F)
-    ("SQUARE SANTIIMU" #x3320)
-    ("SQUARE SIRINGU" #x3321)
-    ("SQUARE SENTI" #x3322)
-    ("SQUARE SENTO" #x3323)
-    ("SQUARE DAASU" #x3324)
-    ("SQUARE DESI" #x3325)
-    ("SQUARE DORU" #x3326)
-    ("SQUARE TON" #x3327)
-    ("SQUARE NANO" #x3328)
-    ("SQUARE NOTTO" #x3329)
-    ("SQUARE HAITU" #x332A)
-    ("SQUARE PAASENTO" #x332B)
-    ("SQUARE PAATU" #x332C)
-    ("SQUARE BAARERU" #x332D)
-    ("SQUARE PIASUTORU" #x332E)
-    ("SQUARE PIKURU" #x332F)
-    ("SQUARE PIKO" #x3330)
-    ("SQUARE BIRU" #x3331)
-    ("SQUARE HUARADDO" #x3332)
-    ("SQUARE HUIITO" #x3333)
-    ("SQUARE BUSSYERU" #x3334)
-    ("SQUARE HURAN" #x3335)
-    ("SQUARE HEKUTAARU" #x3336)
-    ("SQUARE PESO" #x3337)
-    ("SQUARE PENIHI" #x3338)
-    ("SQUARE HERUTU" #x3339)
-    ("SQUARE PENSU" #x333A)
-    ("SQUARE PEEZI" #x333B)
-    ("SQUARE BEETA" #x333C)
-    ("SQUARE POINTO" #x333D)
-    ("SQUARE BORUTO" #x333E)
-    ("SQUARE HON" #x333F)
-    ("SQUARE PONDO" #x3340)
-    ("SQUARE HOORU" #x3341)
-    ("SQUARE HOON" #x3342)
-    ("SQUARE MAIKURO" #x3343)
-    ("SQUARE MAIRU" #x3344)
-    ("SQUARE MAHHA" #x3345)
-    ("SQUARE MARUKU" #x3346)
-    ("SQUARE MANSYON" #x3347)
-    ("SQUARE MIKURON" #x3348)
-    ("SQUARE MIRI" #x3349)
-    ("SQUARE MIRIBAARU" #x334A)
-    ("SQUARE MEGA" #x334B)
-    ("SQUARE MEGATON" #x334C)
-    ("SQUARE MEETORU" #x334D)
-    ("SQUARE YAADO" #x334E)
-    ("SQUARE YAARU" #x334F)
-    ("SQUARE YUAN" #x3350)
-    ("SQUARE RITTORU" #x3351)
-    ("SQUARE RIRA" #x3352)
-    ("SQUARE RUPII" #x3353)
-    ("SQUARE RUUBURU" #x3354)
-    ("SQUARE REMU" #x3355)
-    ("SQUARE RENTOGEN" #x3356)
-    ("SQUARE WATTO" #x3357)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO" #x3358)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE" #x3359)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO" #x335A)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE" #x335B)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR" #x335C)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE" #x335D)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX" #x335E)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN" #x335F)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT" #x3360)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE" #x3361)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN" #x3362)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN" #x3363)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE" #x3364)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN" #x3365)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN" #x3366)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN" #x3367)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN" #x3368)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN" #x3369)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN" #x336A)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN" #x336B)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY" #x336C)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE" #x336D)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO" #x336E)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE" #x336F)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR" #x3370)
-    ("SQUARE HPA" #x3371)
-    ("SQUARE DA" #x3372)
-    ("SQUARE AU" #x3373)
-    ("SQUARE BAR" #x3374)
-    ("SQUARE OV" #x3375)
-    ("SQUARE PC" #x3376)
-    ("SQUARE ERA NAME HEISEI" #x337B)
-    ("SQUARE ERA NAME SYOUWA" #x337C)
-    ("SQUARE ERA NAME TAISYOU" #x337D)
-    ("SQUARE ERA NAME MEIZI" #x337E)
-    ("SQUARE CORPORATION" #x337F)
-    ("SQUARE PA AMPS" #x3380)
-    ("SQUARE NA" #x3381)
-    ("SQUARE MU A" #x3382)
-    ("SQUARE MA" #x3383)
-    ("SQUARE KA" #x3384)
-    ("SQUARE KB" #x3385)
-    ("SQUARE MB" #x3386)
-    ("SQUARE GB" #x3387)
-    ("SQUARE CAL" #x3388)
-    ("SQUARE KCAL" #x3389)
-    ("SQUARE PF" #x338A)
-    ("SQUARE NF" #x338B)
-    ("SQUARE MU F" #x338C)
-    ("SQUARE MU G" #x338D)
-    ("SQUARE MG" #x338E)
-    ("SQUARE KG" #x338F)
-    ("SQUARE HZ" #x3390)
-    ("SQUARE KHZ" #x3391)
-    ("SQUARE MHZ" #x3392)
-    ("SQUARE GHZ" #x3393)
-    ("SQUARE THZ" #x3394)
-    ("SQUARE MU L" #x3395)
-    ("SQUARE ML" #x3396)
-    ("SQUARE DL" #x3397)
-    ("SQUARE KL" #x3398)
-    ("SQUARE FM" #x3399)
-    ("SQUARE NM" #x339A)
-    ("SQUARE MU M" #x339B)
-    ("SQUARE MM" #x339C)
-    ("SQUARE CM" #x339D)
-    ("SQUARE KM" #x339E)
-    ("SQUARE MM SQUARED" #x339F)
-    ("SQUARE CM SQUARED" #x33A0)
-    ("SQUARE M SQUARED" #x33A1)
-    ("SQUARE KM SQUARED" #x33A2)
-    ("SQUARE MM CUBED" #x33A3)
-    ("SQUARE CM CUBED" #x33A4)
-    ("SQUARE M CUBED" #x33A5)
-    ("SQUARE KM CUBED" #x33A6)
-    ("SQUARE M OVER S" #x33A7)
-    ("SQUARE M OVER S SQUARED" #x33A8)
-    ("SQUARE PA" #x33A9)
-    ("SQUARE KPA" #x33AA)
-    ("SQUARE MPA" #x33AB)
-    ("SQUARE GPA" #x33AC)
-    ("SQUARE RAD" #x33AD)
-    ("SQUARE RAD OVER S" #x33AE)
-    ("SQUARE RAD OVER S SQUARED" #x33AF)
-    ("SQUARE PS" #x33B0)
-    ("SQUARE NS" #x33B1)
-    ("SQUARE MU S" #x33B2)
-    ("SQUARE MS" #x33B3)
-    ("SQUARE PV" #x33B4)
-    ("SQUARE NV" #x33B5)
-    ("SQUARE MU V" #x33B6)
-    ("SQUARE MV" #x33B7)
-    ("SQUARE KV" #x33B8)
-    ("SQUARE MV MEGA" #x33B9)
-    ("SQUARE PW" #x33BA)
-    ("SQUARE NW" #x33BB)
-    ("SQUARE MU W" #x33BC)
-    ("SQUARE MW" #x33BD)
-    ("SQUARE KW" #x33BE)
-    ("SQUARE MW MEGA" #x33BF)
-    ("SQUARE K OHM" #x33C0)
-    ("SQUARE M OHM" #x33C1)
-    ("SQUARE AM" #x33C2)
-    ("SQUARE BQ" #x33C3)
-    ("SQUARE CC" #x33C4)
-    ("SQUARE CD" #x33C5)
-    ("SQUARE C OVER KG" #x33C6)
-    ("SQUARE CO" #x33C7)
-    ("SQUARE DB" #x33C8)
-    ("SQUARE GY" #x33C9)
-    ("SQUARE HA" #x33CA)
-    ("SQUARE HP" #x33CB)
-    ("SQUARE IN" #x33CC)
-    ("SQUARE KK" #x33CD)
-    ("SQUARE KM CAPITAL" #x33CE)
-    ("SQUARE KT" #x33CF)
-    ("SQUARE LM" #x33D0)
-    ("SQUARE LN" #x33D1)
-    ("SQUARE LOG" #x33D2)
-    ("SQUARE LX" #x33D3)
-    ("SQUARE MB SMALL" #x33D4)
-    ("SQUARE MIL" #x33D5)
-    ("SQUARE MOL" #x33D6)
-    ("SQUARE PH" #x33D7)
-    ("SQUARE PM" #x33D8)
-    ("SQUARE PPM" #x33D9)
-    ("SQUARE PR" #x33DA)
-    ("SQUARE SR" #x33DB)
-    ("SQUARE SV" #x33DC)
-    ("SQUARE WB" #x33DD)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE" #x33E0)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO" #x33E1)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE" #x33E2)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR" #x33E3)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE" #x33E4)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX" #x33E5)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN" #x33E6)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT" #x33E7)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE" #x33E8)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN" #x33E9)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN" #x33EA)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE" #x33EB)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN" #x33EC)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN" #x33ED)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN" #x33EE)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN" #x33EF)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN" #x33F0)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN" #x33F1)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN" #x33F2)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY" #x33F3)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE" #x33F4)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO" #x33F5)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE" #x33F6)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR" #x33F7)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE" #x33F8)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX" #x33F9)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN" #x33FA)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT" #x33FB)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE" #x33FC)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY" #x33FD)
-    ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE" #x33FE)
-    ))
-
diff --git a/etc/nxml/03400-04DBF.el b/etc/nxml/03400-04DBF.el
deleted file mode 100644 (file)
index 6bae106..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-(nxml-define-char-name-set 'cjk-unified-ideographs-extension-a
-  '())
-
diff --git a/etc/nxml/0A000-0A48F.el b/etc/nxml/0A000-0A48F.el
deleted file mode 100644 (file)
index e797cf1..0000000
+++ /dev/null
@@ -1,1168 +0,0 @@
-(nxml-define-char-name-set 'yi-syllables
-  '(("YI SYLLABLE IT" #xA000)
-    ("YI SYLLABLE IX" #xA001)
-    ("YI SYLLABLE I" #xA002)
-    ("YI SYLLABLE IP" #xA003)
-    ("YI SYLLABLE IET" #xA004)
-    ("YI SYLLABLE IEX" #xA005)
-    ("YI SYLLABLE IE" #xA006)
-    ("YI SYLLABLE IEP" #xA007)
-    ("YI SYLLABLE AT" #xA008)
-    ("YI SYLLABLE AX" #xA009)
-    ("YI SYLLABLE A" #xA00A)
-    ("YI SYLLABLE AP" #xA00B)
-    ("YI SYLLABLE UOX" #xA00C)
-    ("YI SYLLABLE UO" #xA00D)
-    ("YI SYLLABLE UOP" #xA00E)
-    ("YI SYLLABLE OT" #xA00F)
-    ("YI SYLLABLE OX" #xA010)
-    ("YI SYLLABLE O" #xA011)
-    ("YI SYLLABLE OP" #xA012)
-    ("YI SYLLABLE EX" #xA013)
-    ("YI SYLLABLE E" #xA014)
-    ("YI SYLLABLE WU" #xA015)
-    ("YI SYLLABLE BIT" #xA016)
-    ("YI SYLLABLE BIX" #xA017)
-    ("YI SYLLABLE BI" #xA018)
-    ("YI SYLLABLE BIP" #xA019)
-    ("YI SYLLABLE BIET" #xA01A)
-    ("YI SYLLABLE BIEX" #xA01B)
-    ("YI SYLLABLE BIE" #xA01C)
-    ("YI SYLLABLE BIEP" #xA01D)
-    ("YI SYLLABLE BAT" #xA01E)
-    ("YI SYLLABLE BAX" #xA01F)
-    ("YI SYLLABLE BA" #xA020)
-    ("YI SYLLABLE BAP" #xA021)
-    ("YI SYLLABLE BUOX" #xA022)
-    ("YI SYLLABLE BUO" #xA023)
-    ("YI SYLLABLE BUOP" #xA024)
-    ("YI SYLLABLE BOT" #xA025)
-    ("YI SYLLABLE BOX" #xA026)
-    ("YI SYLLABLE BO" #xA027)
-    ("YI SYLLABLE BOP" #xA028)
-    ("YI SYLLABLE BEX" #xA029)
-    ("YI SYLLABLE BE" #xA02A)
-    ("YI SYLLABLE BEP" #xA02B)
-    ("YI SYLLABLE BUT" #xA02C)
-    ("YI SYLLABLE BUX" #xA02D)
-    ("YI SYLLABLE BU" #xA02E)
-    ("YI SYLLABLE BUP" #xA02F)
-    ("YI SYLLABLE BURX" #xA030)
-    ("YI SYLLABLE BUR" #xA031)
-    ("YI SYLLABLE BYT" #xA032)
-    ("YI SYLLABLE BYX" #xA033)
-    ("YI SYLLABLE BY" #xA034)
-    ("YI SYLLABLE BYP" #xA035)
-    ("YI SYLLABLE BYRX" #xA036)
-    ("YI SYLLABLE BYR" #xA037)
-    ("YI SYLLABLE PIT" #xA038)
-    ("YI SYLLABLE PIX" #xA039)
-    ("YI SYLLABLE PI" #xA03A)
-    ("YI SYLLABLE PIP" #xA03B)
-    ("YI SYLLABLE PIEX" #xA03C)
-    ("YI SYLLABLE PIE" #xA03D)
-    ("YI SYLLABLE PIEP" #xA03E)
-    ("YI SYLLABLE PAT" #xA03F)
-    ("YI SYLLABLE PAX" #xA040)
-    ("YI SYLLABLE PA" #xA041)
-    ("YI SYLLABLE PAP" #xA042)
-    ("YI SYLLABLE PUOX" #xA043)
-    ("YI SYLLABLE PUO" #xA044)
-    ("YI SYLLABLE PUOP" #xA045)
-    ("YI SYLLABLE POT" #xA046)
-    ("YI SYLLABLE POX" #xA047)
-    ("YI SYLLABLE PO" #xA048)
-    ("YI SYLLABLE POP" #xA049)
-    ("YI SYLLABLE PUT" #xA04A)
-    ("YI SYLLABLE PUX" #xA04B)
-    ("YI SYLLABLE PU" #xA04C)
-    ("YI SYLLABLE PUP" #xA04D)
-    ("YI SYLLABLE PURX" #xA04E)
-    ("YI SYLLABLE PUR" #xA04F)
-    ("YI SYLLABLE PYT" #xA050)
-    ("YI SYLLABLE PYX" #xA051)
-    ("YI SYLLABLE PY" #xA052)
-    ("YI SYLLABLE PYP" #xA053)
-    ("YI SYLLABLE PYRX" #xA054)
-    ("YI SYLLABLE PYR" #xA055)
-    ("YI SYLLABLE BBIT" #xA056)
-    ("YI SYLLABLE BBIX" #xA057)
-    ("YI SYLLABLE BBI" #xA058)
-    ("YI SYLLABLE BBIP" #xA059)
-    ("YI SYLLABLE BBIET" #xA05A)
-    ("YI SYLLABLE BBIEX" #xA05B)
-    ("YI SYLLABLE BBIE" #xA05C)
-    ("YI SYLLABLE BBIEP" #xA05D)
-    ("YI SYLLABLE BBAT" #xA05E)
-    ("YI SYLLABLE BBAX" #xA05F)
-    ("YI SYLLABLE BBA" #xA060)
-    ("YI SYLLABLE BBAP" #xA061)
-    ("YI SYLLABLE BBUOX" #xA062)
-    ("YI SYLLABLE BBUO" #xA063)
-    ("YI SYLLABLE BBUOP" #xA064)
-    ("YI SYLLABLE BBOT" #xA065)
-    ("YI SYLLABLE BBOX" #xA066)
-    ("YI SYLLABLE BBO" #xA067)
-    ("YI SYLLABLE BBOP" #xA068)
-    ("YI SYLLABLE BBEX" #xA069)
-    ("YI SYLLABLE BBE" #xA06A)
-    ("YI SYLLABLE BBEP" #xA06B)
-    ("YI SYLLABLE BBUT" #xA06C)
-    ("YI SYLLABLE BBUX" #xA06D)
-    ("YI SYLLABLE BBU" #xA06E)
-    ("YI SYLLABLE BBUP" #xA06F)
-    ("YI SYLLABLE BBURX" #xA070)
-    ("YI SYLLABLE BBUR" #xA071)
-    ("YI SYLLABLE BBYT" #xA072)
-    ("YI SYLLABLE BBYX" #xA073)
-    ("YI SYLLABLE BBY" #xA074)
-    ("YI SYLLABLE BBYP" #xA075)
-    ("YI SYLLABLE NBIT" #xA076)
-    ("YI SYLLABLE NBIX" #xA077)
-    ("YI SYLLABLE NBI" #xA078)
-    ("YI SYLLABLE NBIP" #xA079)
-    ("YI SYLLABLE NBIEX" #xA07A)
-    ("YI SYLLABLE NBIE" #xA07B)
-    ("YI SYLLABLE NBIEP" #xA07C)
-    ("YI SYLLABLE NBAT" #xA07D)
-    ("YI SYLLABLE NBAX" #xA07E)
-    ("YI SYLLABLE NBA" #xA07F)
-    ("YI SYLLABLE NBAP" #xA080)
-    ("YI SYLLABLE NBOT" #xA081)
-    ("YI SYLLABLE NBOX" #xA082)
-    ("YI SYLLABLE NBO" #xA083)
-    ("YI SYLLABLE NBOP" #xA084)
-    ("YI SYLLABLE NBUT" #xA085)
-    ("YI SYLLABLE NBUX" #xA086)
-    ("YI SYLLABLE NBU" #xA087)
-    ("YI SYLLABLE NBUP" #xA088)
-    ("YI SYLLABLE NBURX" #xA089)
-    ("YI SYLLABLE NBUR" #xA08A)
-    ("YI SYLLABLE NBYT" #xA08B)
-    ("YI SYLLABLE NBYX" #xA08C)
-    ("YI SYLLABLE NBY" #xA08D)
-    ("YI SYLLABLE NBYP" #xA08E)
-    ("YI SYLLABLE NBYRX" #xA08F)
-    ("YI SYLLABLE NBYR" #xA090)
-    ("YI SYLLABLE HMIT" #xA091)
-    ("YI SYLLABLE HMIX" #xA092)
-    ("YI SYLLABLE HMI" #xA093)
-    ("YI SYLLABLE HMIP" #xA094)
-    ("YI SYLLABLE HMIEX" #xA095)
-    ("YI SYLLABLE HMIE" #xA096)
-    ("YI SYLLABLE HMIEP" #xA097)
-    ("YI SYLLABLE HMAT" #xA098)
-    ("YI SYLLABLE HMAX" #xA099)
-    ("YI SYLLABLE HMA" #xA09A)
-    ("YI SYLLABLE HMAP" #xA09B)
-    ("YI SYLLABLE HMUOX" #xA09C)
-    ("YI SYLLABLE HMUO" #xA09D)
-    ("YI SYLLABLE HMUOP" #xA09E)
-    ("YI SYLLABLE HMOT" #xA09F)
-    ("YI SYLLABLE HMOX" #xA0A0)
-    ("YI SYLLABLE HMO" #xA0A1)
-    ("YI SYLLABLE HMOP" #xA0A2)
-    ("YI SYLLABLE HMUT" #xA0A3)
-    ("YI SYLLABLE HMUX" #xA0A4)
-    ("YI SYLLABLE HMU" #xA0A5)
-    ("YI SYLLABLE HMUP" #xA0A6)
-    ("YI SYLLABLE HMURX" #xA0A7)
-    ("YI SYLLABLE HMUR" #xA0A8)
-    ("YI SYLLABLE HMYX" #xA0A9)
-    ("YI SYLLABLE HMY" #xA0AA)
-    ("YI SYLLABLE HMYP" #xA0AB)
-    ("YI SYLLABLE HMYRX" #xA0AC)
-    ("YI SYLLABLE HMYR" #xA0AD)
-    ("YI SYLLABLE MIT" #xA0AE)
-    ("YI SYLLABLE MIX" #xA0AF)
-    ("YI SYLLABLE MI" #xA0B0)
-    ("YI SYLLABLE MIP" #xA0B1)
-    ("YI SYLLABLE MIEX" #xA0B2)
-    ("YI SYLLABLE MIE" #xA0B3)
-    ("YI SYLLABLE MIEP" #xA0B4)
-    ("YI SYLLABLE MAT" #xA0B5)
-    ("YI SYLLABLE MAX" #xA0B6)
-    ("YI SYLLABLE MA" #xA0B7)
-    ("YI SYLLABLE MAP" #xA0B8)
-    ("YI SYLLABLE MUOT" #xA0B9)
-    ("YI SYLLABLE MUOX" #xA0BA)
-    ("YI SYLLABLE MUO" #xA0BB)
-    ("YI SYLLABLE MUOP" #xA0BC)
-    ("YI SYLLABLE MOT" #xA0BD)
-    ("YI SYLLABLE MOX" #xA0BE)
-    ("YI SYLLABLE MO" #xA0BF)
-    ("YI SYLLABLE MOP" #xA0C0)
-    ("YI SYLLABLE MEX" #xA0C1)
-    ("YI SYLLABLE ME" #xA0C2)
-    ("YI SYLLABLE MUT" #xA0C3)
-    ("YI SYLLABLE MUX" #xA0C4)
-    ("YI SYLLABLE MU" #xA0C5)
-    ("YI SYLLABLE MUP" #xA0C6)
-    ("YI SYLLABLE MURX" #xA0C7)
-    ("YI SYLLABLE MUR" #xA0C8)
-    ("YI SYLLABLE MYT" #xA0C9)
-    ("YI SYLLABLE MYX" #xA0CA)
-    ("YI SYLLABLE MY" #xA0CB)
-    ("YI SYLLABLE MYP" #xA0CC)
-    ("YI SYLLABLE FIT" #xA0CD)
-    ("YI SYLLABLE FIX" #xA0CE)
-    ("YI SYLLABLE FI" #xA0CF)
-    ("YI SYLLABLE FIP" #xA0D0)
-    ("YI SYLLABLE FAT" #xA0D1)
-    ("YI SYLLABLE FAX" #xA0D2)
-    ("YI SYLLABLE FA" #xA0D3)
-    ("YI SYLLABLE FAP" #xA0D4)
-    ("YI SYLLABLE FOX" #xA0D5)
-    ("YI SYLLABLE FO" #xA0D6)
-    ("YI SYLLABLE FOP" #xA0D7)
-    ("YI SYLLABLE FUT" #xA0D8)
-    ("YI SYLLABLE FUX" #xA0D9)
-    ("YI SYLLABLE FU" #xA0DA)
-    ("YI SYLLABLE FUP" #xA0DB)
-    ("YI SYLLABLE FURX" #xA0DC)
-    ("YI SYLLABLE FUR" #xA0DD)
-    ("YI SYLLABLE FYT" #xA0DE)
-    ("YI SYLLABLE FYX" #xA0DF)
-    ("YI SYLLABLE FY" #xA0E0)
-    ("YI SYLLABLE FYP" #xA0E1)
-    ("YI SYLLABLE VIT" #xA0E2)
-    ("YI SYLLABLE VIX" #xA0E3)
-    ("YI SYLLABLE VI" #xA0E4)
-    ("YI SYLLABLE VIP" #xA0E5)
-    ("YI SYLLABLE VIET" #xA0E6)
-    ("YI SYLLABLE VIEX" #xA0E7)
-    ("YI SYLLABLE VIE" #xA0E8)
-    ("YI SYLLABLE VIEP" #xA0E9)
-    ("YI SYLLABLE VAT" #xA0EA)
-    ("YI SYLLABLE VAX" #xA0EB)
-    ("YI SYLLABLE VA" #xA0EC)
-    ("YI SYLLABLE VAP" #xA0ED)
-    ("YI SYLLABLE VOT" #xA0EE)
-    ("YI SYLLABLE VOX" #xA0EF)
-    ("YI SYLLABLE VO" #xA0F0)
-    ("YI SYLLABLE VOP" #xA0F1)
-    ("YI SYLLABLE VEX" #xA0F2)
-    ("YI SYLLABLE VEP" #xA0F3)
-    ("YI SYLLABLE VUT" #xA0F4)
-    ("YI SYLLABLE VUX" #xA0F5)
-    ("YI SYLLABLE VU" #xA0F6)
-    ("YI SYLLABLE VUP" #xA0F7)
-    ("YI SYLLABLE VURX" #xA0F8)
-    ("YI SYLLABLE VUR" #xA0F9)
-    ("YI SYLLABLE VYT" #xA0FA)
-    ("YI SYLLABLE VYX" #xA0FB)
-    ("YI SYLLABLE VY" #xA0FC)
-    ("YI SYLLABLE VYP" #xA0FD)
-    ("YI SYLLABLE VYRX" #xA0FE)
-    ("YI SYLLABLE VYR" #xA0FF)
-    ("YI SYLLABLE DIT" #xA100)
-    ("YI SYLLABLE DIX" #xA101)
-    ("YI SYLLABLE DI" #xA102)
-    ("YI SYLLABLE DIP" #xA103)
-    ("YI SYLLABLE DIEX" #xA104)
-    ("YI SYLLABLE DIE" #xA105)
-    ("YI SYLLABLE DIEP" #xA106)
-    ("YI SYLLABLE DAT" #xA107)
-    ("YI SYLLABLE DAX" #xA108)
-    ("YI SYLLABLE DA" #xA109)
-    ("YI SYLLABLE DAP" #xA10A)
-    ("YI SYLLABLE DUOX" #xA10B)
-    ("YI SYLLABLE DUO" #xA10C)
-    ("YI SYLLABLE DOT" #xA10D)
-    ("YI SYLLABLE DOX" #xA10E)
-    ("YI SYLLABLE DO" #xA10F)
-    ("YI SYLLABLE DOP" #xA110)
-    ("YI SYLLABLE DEX" #xA111)
-    ("YI SYLLABLE DE" #xA112)
-    ("YI SYLLABLE DEP" #xA113)
-    ("YI SYLLABLE DUT" #xA114)
-    ("YI SYLLABLE DUX" #xA115)
-    ("YI SYLLABLE DU" #xA116)
-    ("YI SYLLABLE DUP" #xA117)
-    ("YI SYLLABLE DURX" #xA118)
-    ("YI SYLLABLE DUR" #xA119)
-    ("YI SYLLABLE TIT" #xA11A)
-    ("YI SYLLABLE TIX" #xA11B)
-    ("YI SYLLABLE TI" #xA11C)
-    ("YI SYLLABLE TIP" #xA11D)
-    ("YI SYLLABLE TIEX" #xA11E)
-    ("YI SYLLABLE TIE" #xA11F)
-    ("YI SYLLABLE TIEP" #xA120)
-    ("YI SYLLABLE TAT" #xA121)
-    ("YI SYLLABLE TAX" #xA122)
-    ("YI SYLLABLE TA" #xA123)
-    ("YI SYLLABLE TAP" #xA124)
-    ("YI SYLLABLE TUOT" #xA125)
-    ("YI SYLLABLE TUOX" #xA126)
-    ("YI SYLLABLE TUO" #xA127)
-    ("YI SYLLABLE TUOP" #xA128)
-    ("YI SYLLABLE TOT" #xA129)
-    ("YI SYLLABLE TOX" #xA12A)
-    ("YI SYLLABLE TO" #xA12B)
-    ("YI SYLLABLE TOP" #xA12C)
-    ("YI SYLLABLE TEX" #xA12D)
-    ("YI SYLLABLE TE" #xA12E)
-    ("YI SYLLABLE TEP" #xA12F)
-    ("YI SYLLABLE TUT" #xA130)
-    ("YI SYLLABLE TUX" #xA131)
-    ("YI SYLLABLE TU" #xA132)
-    ("YI SYLLABLE TUP" #xA133)
-    ("YI SYLLABLE TURX" #xA134)
-    ("YI SYLLABLE TUR" #xA135)
-    ("YI SYLLABLE DDIT" #xA136)
-    ("YI SYLLABLE DDIX" #xA137)
-    ("YI SYLLABLE DDI" #xA138)
-    ("YI SYLLABLE DDIP" #xA139)
-    ("YI SYLLABLE DDIEX" #xA13A)
-    ("YI SYLLABLE DDIE" #xA13B)
-    ("YI SYLLABLE DDIEP" #xA13C)
-    ("YI SYLLABLE DDAT" #xA13D)
-    ("YI SYLLABLE DDAX" #xA13E)
-    ("YI SYLLABLE DDA" #xA13F)
-    ("YI SYLLABLE DDAP" #xA140)
-    ("YI SYLLABLE DDUOX" #xA141)
-    ("YI SYLLABLE DDUO" #xA142)
-    ("YI SYLLABLE DDUOP" #xA143)
-    ("YI SYLLABLE DDOT" #xA144)
-    ("YI SYLLABLE DDOX" #xA145)
-    ("YI SYLLABLE DDO" #xA146)
-    ("YI SYLLABLE DDOP" #xA147)
-    ("YI SYLLABLE DDEX" #xA148)
-    ("YI SYLLABLE DDE" #xA149)
-    ("YI SYLLABLE DDEP" #xA14A)
-    ("YI SYLLABLE DDUT" #xA14B)
-    ("YI SYLLABLE DDUX" #xA14C)
-    ("YI SYLLABLE DDU" #xA14D)
-    ("YI SYLLABLE DDUP" #xA14E)
-    ("YI SYLLABLE DDURX" #xA14F)
-    ("YI SYLLABLE DDUR" #xA150)
-    ("YI SYLLABLE NDIT" #xA151)
-    ("YI SYLLABLE NDIX" #xA152)
-    ("YI SYLLABLE NDI" #xA153)
-    ("YI SYLLABLE NDIP" #xA154)
-    ("YI SYLLABLE NDIEX" #xA155)
-    ("YI SYLLABLE NDIE" #xA156)
-    ("YI SYLLABLE NDAT" #xA157)
-    ("YI SYLLABLE NDAX" #xA158)
-    ("YI SYLLABLE NDA" #xA159)
-    ("YI SYLLABLE NDAP" #xA15A)
-    ("YI SYLLABLE NDOT" #xA15B)
-    ("YI SYLLABLE NDOX" #xA15C)
-    ("YI SYLLABLE NDO" #xA15D)
-    ("YI SYLLABLE NDOP" #xA15E)
-    ("YI SYLLABLE NDEX" #xA15F)
-    ("YI SYLLABLE NDE" #xA160)
-    ("YI SYLLABLE NDEP" #xA161)
-    ("YI SYLLABLE NDUT" #xA162)
-    ("YI SYLLABLE NDUX" #xA163)
-    ("YI SYLLABLE NDU" #xA164)
-    ("YI SYLLABLE NDUP" #xA165)
-    ("YI SYLLABLE NDURX" #xA166)
-    ("YI SYLLABLE NDUR" #xA167)
-    ("YI SYLLABLE HNIT" #xA168)
-    ("YI SYLLABLE HNIX" #xA169)
-    ("YI SYLLABLE HNI" #xA16A)
-    ("YI SYLLABLE HNIP" #xA16B)
-    ("YI SYLLABLE HNIET" #xA16C)
-    ("YI SYLLABLE HNIEX" #xA16D)
-    ("YI SYLLABLE HNIE" #xA16E)
-    ("YI SYLLABLE HNIEP" #xA16F)
-    ("YI SYLLABLE HNAT" #xA170)
-    ("YI SYLLABLE HNAX" #xA171)
-    ("YI SYLLABLE HNA" #xA172)
-    ("YI SYLLABLE HNAP" #xA173)
-    ("YI SYLLABLE HNUOX" #xA174)
-    ("YI SYLLABLE HNUO" #xA175)
-    ("YI SYLLABLE HNOT" #xA176)
-    ("YI SYLLABLE HNOX" #xA177)
-    ("YI SYLLABLE HNOP" #xA178)
-    ("YI SYLLABLE HNEX" #xA179)
-    ("YI SYLLABLE HNE" #xA17A)
-    ("YI SYLLABLE HNEP" #xA17B)
-    ("YI SYLLABLE HNUT" #xA17C)
-    ("YI SYLLABLE NIT" #xA17D)
-    ("YI SYLLABLE NIX" #xA17E)
-    ("YI SYLLABLE NI" #xA17F)
-    ("YI SYLLABLE NIP" #xA180)
-    ("YI SYLLABLE NIEX" #xA181)
-    ("YI SYLLABLE NIE" #xA182)
-    ("YI SYLLABLE NIEP" #xA183)
-    ("YI SYLLABLE NAX" #xA184)
-    ("YI SYLLABLE NA" #xA185)
-    ("YI SYLLABLE NAP" #xA186)
-    ("YI SYLLABLE NUOX" #xA187)
-    ("YI SYLLABLE NUO" #xA188)
-    ("YI SYLLABLE NUOP" #xA189)
-    ("YI SYLLABLE NOT" #xA18A)
-    ("YI SYLLABLE NOX" #xA18B)
-    ("YI SYLLABLE NO" #xA18C)
-    ("YI SYLLABLE NOP" #xA18D)
-    ("YI SYLLABLE NEX" #xA18E)
-    ("YI SYLLABLE NE" #xA18F)
-    ("YI SYLLABLE NEP" #xA190)
-    ("YI SYLLABLE NUT" #xA191)
-    ("YI SYLLABLE NUX" #xA192)
-    ("YI SYLLABLE NU" #xA193)
-    ("YI SYLLABLE NUP" #xA194)
-    ("YI SYLLABLE NURX" #xA195)
-    ("YI SYLLABLE NUR" #xA196)
-    ("YI SYLLABLE HLIT" #xA197)
-    ("YI SYLLABLE HLIX" #xA198)
-    ("YI SYLLABLE HLI" #xA199)
-    ("YI SYLLABLE HLIP" #xA19A)
-    ("YI SYLLABLE HLIEX" #xA19B)
-    ("YI SYLLABLE HLIE" #xA19C)
-    ("YI SYLLABLE HLIEP" #xA19D)
-    ("YI SYLLABLE HLAT" #xA19E)
-    ("YI SYLLABLE HLAX" #xA19F)
-    ("YI SYLLABLE HLA" #xA1A0)
-    ("YI SYLLABLE HLAP" #xA1A1)
-    ("YI SYLLABLE HLUOX" #xA1A2)
-    ("YI SYLLABLE HLUO" #xA1A3)
-    ("YI SYLLABLE HLUOP" #xA1A4)
-    ("YI SYLLABLE HLOX" #xA1A5)
-    ("YI SYLLABLE HLO" #xA1A6)
-    ("YI SYLLABLE HLOP" #xA1A7)
-    ("YI SYLLABLE HLEX" #xA1A8)
-    ("YI SYLLABLE HLE" #xA1A9)
-    ("YI SYLLABLE HLEP" #xA1AA)
-    ("YI SYLLABLE HLUT" #xA1AB)
-    ("YI SYLLABLE HLUX" #xA1AC)
-    ("YI SYLLABLE HLU" #xA1AD)
-    ("YI SYLLABLE HLUP" #xA1AE)
-    ("YI SYLLABLE HLURX" #xA1AF)
-    ("YI SYLLABLE HLUR" #xA1B0)
-    ("YI SYLLABLE HLYT" #xA1B1)
-    ("YI SYLLABLE HLYX" #xA1B2)
-    ("YI SYLLABLE HLY" #xA1B3)
-    ("YI SYLLABLE HLYP" #xA1B4)
-    ("YI SYLLABLE HLYRX" #xA1B5)
-    ("YI SYLLABLE HLYR" #xA1B6)
-    ("YI SYLLABLE LIT" #xA1B7)
-    ("YI SYLLABLE LIX" #xA1B8)
-    ("YI SYLLABLE LI" #xA1B9)
-    ("YI SYLLABLE LIP" #xA1BA)
-    ("YI SYLLABLE LIET" #xA1BB)
-    ("YI SYLLABLE LIEX" #xA1BC)
-    ("YI SYLLABLE LIE" #xA1BD)
-    ("YI SYLLABLE LIEP" #xA1BE)
-    ("YI SYLLABLE LAT" #xA1BF)
-    ("YI SYLLABLE LAX" #xA1C0)
-    ("YI SYLLABLE LA" #xA1C1)
-    ("YI SYLLABLE LAP" #xA1C2)
-    ("YI SYLLABLE LUOT" #xA1C3)
-    ("YI SYLLABLE LUOX" #xA1C4)
-    ("YI SYLLABLE LUO" #xA1C5)
-    ("YI SYLLABLE LUOP" #xA1C6)
-    ("YI SYLLABLE LOT" #xA1C7)
-    ("YI SYLLABLE LOX" #xA1C8)
-    ("YI SYLLABLE LO" #xA1C9)
-    ("YI SYLLABLE LOP" #xA1CA)
-    ("YI SYLLABLE LEX" #xA1CB)
-    ("YI SYLLABLE LE" #xA1CC)
-    ("YI SYLLABLE LEP" #xA1CD)
-    ("YI SYLLABLE LUT" #xA1CE)
-    ("YI SYLLABLE LUX" #xA1CF)
-    ("YI SYLLABLE LU" #xA1D0)
-    ("YI SYLLABLE LUP" #xA1D1)
-    ("YI SYLLABLE LURX" #xA1D2)
-    ("YI SYLLABLE LUR" #xA1D3)
-    ("YI SYLLABLE LYT" #xA1D4)
-    ("YI SYLLABLE LYX" #xA1D5)
-    ("YI SYLLABLE LY" #xA1D6)
-    ("YI SYLLABLE LYP" #xA1D7)
-    ("YI SYLLABLE LYRX" #xA1D8)
-    ("YI SYLLABLE LYR" #xA1D9)
-    ("YI SYLLABLE GIT" #xA1DA)
-    ("YI SYLLABLE GIX" #xA1DB)
-    ("YI SYLLABLE GI" #xA1DC)
-    ("YI SYLLABLE GIP" #xA1DD)
-    ("YI SYLLABLE GIET" #xA1DE)
-    ("YI SYLLABLE GIEX" #xA1DF)
-    ("YI SYLLABLE GIE" #xA1E0)
-    ("YI SYLLABLE GIEP" #xA1E1)
-    ("YI SYLLABLE GAT" #xA1E2)
-    ("YI SYLLABLE GAX" #xA1E3)
-    ("YI SYLLABLE GA" #xA1E4)
-    ("YI SYLLABLE GAP" #xA1E5)
-    ("YI SYLLABLE GUOT" #xA1E6)
-    ("YI SYLLABLE GUOX" #xA1E7)
-    ("YI SYLLABLE GUO" #xA1E8)
-    ("YI SYLLABLE GUOP" #xA1E9)
-    ("YI SYLLABLE GOT" #xA1EA)
-    ("YI SYLLABLE GOX" #xA1EB)
-    ("YI SYLLABLE GO" #xA1EC)
-    ("YI SYLLABLE GOP" #xA1ED)
-    ("YI SYLLABLE GET" #xA1EE)
-    ("YI SYLLABLE GEX" #xA1EF)
-    ("YI SYLLABLE GE" #xA1F0)
-    ("YI SYLLABLE GEP" #xA1F1)
-    ("YI SYLLABLE GUT" #xA1F2)
-    ("YI SYLLABLE GUX" #xA1F3)
-    ("YI SYLLABLE GU" #xA1F4)
-    ("YI SYLLABLE GUP" #xA1F5)
-    ("YI SYLLABLE GURX" #xA1F6)
-    ("YI SYLLABLE GUR" #xA1F7)
-    ("YI SYLLABLE KIT" #xA1F8)
-    ("YI SYLLABLE KIX" #xA1F9)
-    ("YI SYLLABLE KI" #xA1FA)
-    ("YI SYLLABLE KIP" #xA1FB)
-    ("YI SYLLABLE KIEX" #xA1FC)
-    ("YI SYLLABLE KIE" #xA1FD)
-    ("YI SYLLABLE KIEP" #xA1FE)
-    ("YI SYLLABLE KAT" #xA1FF)
-    ("YI SYLLABLE KAX" #xA200)
-    ("YI SYLLABLE KA" #xA201)
-    ("YI SYLLABLE KAP" #xA202)
-    ("YI SYLLABLE KUOX" #xA203)
-    ("YI SYLLABLE KUO" #xA204)
-    ("YI SYLLABLE KUOP" #xA205)
-    ("YI SYLLABLE KOT" #xA206)
-    ("YI SYLLABLE KOX" #xA207)
-    ("YI SYLLABLE KO" #xA208)
-    ("YI SYLLABLE KOP" #xA209)
-    ("YI SYLLABLE KET" #xA20A)
-    ("YI SYLLABLE KEX" #xA20B)
-    ("YI SYLLABLE KE" #xA20C)
-    ("YI SYLLABLE KEP" #xA20D)
-    ("YI SYLLABLE KUT" #xA20E)
-    ("YI SYLLABLE KUX" #xA20F)
-    ("YI SYLLABLE KU" #xA210)
-    ("YI SYLLABLE KUP" #xA211)
-    ("YI SYLLABLE KURX" #xA212)
-    ("YI SYLLABLE KUR" #xA213)
-    ("YI SYLLABLE GGIT" #xA214)
-    ("YI SYLLABLE GGIX" #xA215)
-    ("YI SYLLABLE GGI" #xA216)
-    ("YI SYLLABLE GGIEX" #xA217)
-    ("YI SYLLABLE GGIE" #xA218)
-    ("YI SYLLABLE GGIEP" #xA219)
-    ("YI SYLLABLE GGAT" #xA21A)
-    ("YI SYLLABLE GGAX" #xA21B)
-    ("YI SYLLABLE GGA" #xA21C)
-    ("YI SYLLABLE GGAP" #xA21D)
-    ("YI SYLLABLE GGUOT" #xA21E)
-    ("YI SYLLABLE GGUOX" #xA21F)
-    ("YI SYLLABLE GGUO" #xA220)
-    ("YI SYLLABLE GGUOP" #xA221)
-    ("YI SYLLABLE GGOT" #xA222)
-    ("YI SYLLABLE GGOX" #xA223)
-    ("YI SYLLABLE GGO" #xA224)
-    ("YI SYLLABLE GGOP" #xA225)
-    ("YI SYLLABLE GGET" #xA226)
-    ("YI SYLLABLE GGEX" #xA227)
-    ("YI SYLLABLE GGE" #xA228)
-    ("YI SYLLABLE GGEP" #xA229)
-    ("YI SYLLABLE GGUT" #xA22A)
-    ("YI SYLLABLE GGUX" #xA22B)
-    ("YI SYLLABLE GGU" #xA22C)
-    ("YI SYLLABLE GGUP" #xA22D)
-    ("YI SYLLABLE GGURX" #xA22E)
-    ("YI SYLLABLE GGUR" #xA22F)
-    ("YI SYLLABLE MGIEX" #xA230)
-    ("YI SYLLABLE MGIE" #xA231)
-    ("YI SYLLABLE MGAT" #xA232)
-    ("YI SYLLABLE MGAX" #xA233)
-    ("YI SYLLABLE MGA" #xA234)
-    ("YI SYLLABLE MGAP" #xA235)
-    ("YI SYLLABLE MGUOX" #xA236)
-    ("YI SYLLABLE MGUO" #xA237)
-    ("YI SYLLABLE MGUOP" #xA238)
-    ("YI SYLLABLE MGOT" #xA239)
-    ("YI SYLLABLE MGOX" #xA23A)
-    ("YI SYLLABLE MGO" #xA23B)
-    ("YI SYLLABLE MGOP" #xA23C)
-    ("YI SYLLABLE MGEX" #xA23D)
-    ("YI SYLLABLE MGE" #xA23E)
-    ("YI SYLLABLE MGEP" #xA23F)
-    ("YI SYLLABLE MGUT" #xA240)
-    ("YI SYLLABLE MGUX" #xA241)
-    ("YI SYLLABLE MGU" #xA242)
-    ("YI SYLLABLE MGUP" #xA243)
-    ("YI SYLLABLE MGURX" #xA244)
-    ("YI SYLLABLE MGUR" #xA245)
-    ("YI SYLLABLE HXIT" #xA246)
-    ("YI SYLLABLE HXIX" #xA247)
-    ("YI SYLLABLE HXI" #xA248)
-    ("YI SYLLABLE HXIP" #xA249)
-    ("YI SYLLABLE HXIET" #xA24A)
-    ("YI SYLLABLE HXIEX" #xA24B)
-    ("YI SYLLABLE HXIE" #xA24C)
-    ("YI SYLLABLE HXIEP" #xA24D)
-    ("YI SYLLABLE HXAT" #xA24E)
-    ("YI SYLLABLE HXAX" #xA24F)
-    ("YI SYLLABLE HXA" #xA250)
-    ("YI SYLLABLE HXAP" #xA251)
-    ("YI SYLLABLE HXUOT" #xA252)
-    ("YI SYLLABLE HXUOX" #xA253)
-    ("YI SYLLABLE HXUO" #xA254)
-    ("YI SYLLABLE HXUOP" #xA255)
-    ("YI SYLLABLE HXOT" #xA256)
-    ("YI SYLLABLE HXOX" #xA257)
-    ("YI SYLLABLE HXO" #xA258)
-    ("YI SYLLABLE HXOP" #xA259)
-    ("YI SYLLABLE HXEX" #xA25A)
-    ("YI SYLLABLE HXE" #xA25B)
-    ("YI SYLLABLE HXEP" #xA25C)
-    ("YI SYLLABLE NGIEX" #xA25D)
-    ("YI SYLLABLE NGIE" #xA25E)
-    ("YI SYLLABLE NGIEP" #xA25F)
-    ("YI SYLLABLE NGAT" #xA260)
-    ("YI SYLLABLE NGAX" #xA261)
-    ("YI SYLLABLE NGA" #xA262)
-    ("YI SYLLABLE NGAP" #xA263)
-    ("YI SYLLABLE NGUOT" #xA264)
-    ("YI SYLLABLE NGUOX" #xA265)
-    ("YI SYLLABLE NGUO" #xA266)
-    ("YI SYLLABLE NGOT" #xA267)
-    ("YI SYLLABLE NGOX" #xA268)
-    ("YI SYLLABLE NGO" #xA269)
-    ("YI SYLLABLE NGOP" #xA26A)
-    ("YI SYLLABLE NGEX" #xA26B)
-    ("YI SYLLABLE NGE" #xA26C)
-    ("YI SYLLABLE NGEP" #xA26D)
-    ("YI SYLLABLE HIT" #xA26E)
-    ("YI SYLLABLE HIEX" #xA26F)
-    ("YI SYLLABLE HIE" #xA270)
-    ("YI SYLLABLE HAT" #xA271)
-    ("YI SYLLABLE HAX" #xA272)
-    ("YI SYLLABLE HA" #xA273)
-    ("YI SYLLABLE HAP" #xA274)
-    ("YI SYLLABLE HUOT" #xA275)
-    ("YI SYLLABLE HUOX" #xA276)
-    ("YI SYLLABLE HUO" #xA277)
-    ("YI SYLLABLE HUOP" #xA278)
-    ("YI SYLLABLE HOT" #xA279)
-    ("YI SYLLABLE HOX" #xA27A)
-    ("YI SYLLABLE HO" #xA27B)
-    ("YI SYLLABLE HOP" #xA27C)
-    ("YI SYLLABLE HEX" #xA27D)
-    ("YI SYLLABLE HE" #xA27E)
-    ("YI SYLLABLE HEP" #xA27F)
-    ("YI SYLLABLE WAT" #xA280)
-    ("YI SYLLABLE WAX" #xA281)
-    ("YI SYLLABLE WA" #xA282)
-    ("YI SYLLABLE WAP" #xA283)
-    ("YI SYLLABLE WUOX" #xA284)
-    ("YI SYLLABLE WUO" #xA285)
-    ("YI SYLLABLE WUOP" #xA286)
-    ("YI SYLLABLE WOX" #xA287)
-    ("YI SYLLABLE WO" #xA288)
-    ("YI SYLLABLE WOP" #xA289)
-    ("YI SYLLABLE WEX" #xA28A)
-    ("YI SYLLABLE WE" #xA28B)
-    ("YI SYLLABLE WEP" #xA28C)
-    ("YI SYLLABLE ZIT" #xA28D)
-    ("YI SYLLABLE ZIX" #xA28E)
-    ("YI SYLLABLE ZI" #xA28F)
-    ("YI SYLLABLE ZIP" #xA290)
-    ("YI SYLLABLE ZIEX" #xA291)
-    ("YI SYLLABLE ZIE" #xA292)
-    ("YI SYLLABLE ZIEP" #xA293)
-    ("YI SYLLABLE ZAT" #xA294)
-    ("YI SYLLABLE ZAX" #xA295)
-    ("YI SYLLABLE ZA" #xA296)
-    ("YI SYLLABLE ZAP" #xA297)
-    ("YI SYLLABLE ZUOX" #xA298)
-    ("YI SYLLABLE ZUO" #xA299)
-    ("YI SYLLABLE ZUOP" #xA29A)
-    ("YI SYLLABLE ZOT" #xA29B)
-    ("YI SYLLABLE ZOX" #xA29C)
-    ("YI SYLLABLE ZO" #xA29D)
-    ("YI SYLLABLE ZOP" #xA29E)
-    ("YI SYLLABLE ZEX" #xA29F)
-    ("YI SYLLABLE ZE" #xA2A0)
-    ("YI SYLLABLE ZEP" #xA2A1)
-    ("YI SYLLABLE ZUT" #xA2A2)
-    ("YI SYLLABLE ZUX" #xA2A3)
-    ("YI SYLLABLE ZU" #xA2A4)
-    ("YI SYLLABLE ZUP" #xA2A5)
-    ("YI SYLLABLE ZURX" #xA2A6)
-    ("YI SYLLABLE ZUR" #xA2A7)
-    ("YI SYLLABLE ZYT" #xA2A8)
-    ("YI SYLLABLE ZYX" #xA2A9)
-    ("YI SYLLABLE ZY" #xA2AA)
-    ("YI SYLLABLE ZYP" #xA2AB)
-    ("YI SYLLABLE ZYRX" #xA2AC)
-    ("YI SYLLABLE ZYR" #xA2AD)
-    ("YI SYLLABLE CIT" #xA2AE)
-    ("YI SYLLABLE CIX" #xA2AF)
-    ("YI SYLLABLE CI" #xA2B0)
-    ("YI SYLLABLE CIP" #xA2B1)
-    ("YI SYLLABLE CIET" #xA2B2)
-    ("YI SYLLABLE CIEX" #xA2B3)
-    ("YI SYLLABLE CIE" #xA2B4)
-    ("YI SYLLABLE CIEP" #xA2B5)
-    ("YI SYLLABLE CAT" #xA2B6)
-    ("YI SYLLABLE CAX" #xA2B7)
-    ("YI SYLLABLE CA" #xA2B8)
-    ("YI SYLLABLE CAP" #xA2B9)
-    ("YI SYLLABLE CUOX" #xA2BA)
-    ("YI SYLLABLE CUO" #xA2BB)
-    ("YI SYLLABLE CUOP" #xA2BC)
-    ("YI SYLLABLE COT" #xA2BD)
-    ("YI SYLLABLE COX" #xA2BE)
-    ("YI SYLLABLE CO" #xA2BF)
-    ("YI SYLLABLE COP" #xA2C0)
-    ("YI SYLLABLE CEX" #xA2C1)
-    ("YI SYLLABLE CE" #xA2C2)
-    ("YI SYLLABLE CEP" #xA2C3)
-    ("YI SYLLABLE CUT" #xA2C4)
-    ("YI SYLLABLE CUX" #xA2C5)
-    ("YI SYLLABLE CU" #xA2C6)
-    ("YI SYLLABLE CUP" #xA2C7)
-    ("YI SYLLABLE CURX" #xA2C8)
-    ("YI SYLLABLE CUR" #xA2C9)
-    ("YI SYLLABLE CYT" #xA2CA)
-    ("YI SYLLABLE CYX" #xA2CB)
-    ("YI SYLLABLE CY" #xA2CC)
-    ("YI SYLLABLE CYP" #xA2CD)
-    ("YI SYLLABLE CYRX" #xA2CE)
-    ("YI SYLLABLE CYR" #xA2CF)
-    ("YI SYLLABLE ZZIT" #xA2D0)
-    ("YI SYLLABLE ZZIX" #xA2D1)
-    ("YI SYLLABLE ZZI" #xA2D2)
-    ("YI SYLLABLE ZZIP" #xA2D3)
-    ("YI SYLLABLE ZZIET" #xA2D4)
-    ("YI SYLLABLE ZZIEX" #xA2D5)
-    ("YI SYLLABLE ZZIE" #xA2D6)
-    ("YI SYLLABLE ZZIEP" #xA2D7)
-    ("YI SYLLABLE ZZAT" #xA2D8)
-    ("YI SYLLABLE ZZAX" #xA2D9)
-    ("YI SYLLABLE ZZA" #xA2DA)
-    ("YI SYLLABLE ZZAP" #xA2DB)
-    ("YI SYLLABLE ZZOX" #xA2DC)
-    ("YI SYLLABLE ZZO" #xA2DD)
-    ("YI SYLLABLE ZZOP" #xA2DE)
-    ("YI SYLLABLE ZZEX" #xA2DF)
-    ("YI SYLLABLE ZZE" #xA2E0)
-    ("YI SYLLABLE ZZEP" #xA2E1)
-    ("YI SYLLABLE ZZUX" #xA2E2)
-    ("YI SYLLABLE ZZU" #xA2E3)
-    ("YI SYLLABLE ZZUP" #xA2E4)
-    ("YI SYLLABLE ZZURX" #xA2E5)
-    ("YI SYLLABLE ZZUR" #xA2E6)
-    ("YI SYLLABLE ZZYT" #xA2E7)
-    ("YI SYLLABLE ZZYX" #xA2E8)
-    ("YI SYLLABLE ZZY" #xA2E9)
-    ("YI SYLLABLE ZZYP" #xA2EA)
-    ("YI SYLLABLE ZZYRX" #xA2EB)
-    ("YI SYLLABLE ZZYR" #xA2EC)
-    ("YI SYLLABLE NZIT" #xA2ED)
-    ("YI SYLLABLE NZIX" #xA2EE)
-    ("YI SYLLABLE NZI" #xA2EF)
-    ("YI SYLLABLE NZIP" #xA2F0)
-    ("YI SYLLABLE NZIEX" #xA2F1)
-    ("YI SYLLABLE NZIE" #xA2F2)
-    ("YI SYLLABLE NZIEP" #xA2F3)
-    ("YI SYLLABLE NZAT" #xA2F4)
-    ("YI SYLLABLE NZAX" #xA2F5)
-    ("YI SYLLABLE NZA" #xA2F6)
-    ("YI SYLLABLE NZAP" #xA2F7)
-    ("YI SYLLABLE NZUOX" #xA2F8)
-    ("YI SYLLABLE NZUO" #xA2F9)
-    ("YI SYLLABLE NZOX" #xA2FA)
-    ("YI SYLLABLE NZOP" #xA2FB)
-    ("YI SYLLABLE NZEX" #xA2FC)
-    ("YI SYLLABLE NZE" #xA2FD)
-    ("YI SYLLABLE NZUX" #xA2FE)
-    ("YI SYLLABLE NZU" #xA2FF)
-    ("YI SYLLABLE NZUP" #xA300)
-    ("YI SYLLABLE NZURX" #xA301)
-    ("YI SYLLABLE NZUR" #xA302)
-    ("YI SYLLABLE NZYT" #xA303)
-    ("YI SYLLABLE NZYX" #xA304)
-    ("YI SYLLABLE NZY" #xA305)
-    ("YI SYLLABLE NZYP" #xA306)
-    ("YI SYLLABLE NZYRX" #xA307)
-    ("YI SYLLABLE NZYR" #xA308)
-    ("YI SYLLABLE SIT" #xA309)
-    ("YI SYLLABLE SIX" #xA30A)
-    ("YI SYLLABLE SI" #xA30B)
-    ("YI SYLLABLE SIP" #xA30C)
-    ("YI SYLLABLE SIEX" #xA30D)
-    ("YI SYLLABLE SIE" #xA30E)
-    ("YI SYLLABLE SIEP" #xA30F)
-    ("YI SYLLABLE SAT" #xA310)
-    ("YI SYLLABLE SAX" #xA311)
-    ("YI SYLLABLE SA" #xA312)
-    ("YI SYLLABLE SAP" #xA313)
-    ("YI SYLLABLE SUOX" #xA314)
-    ("YI SYLLABLE SUO" #xA315)
-    ("YI SYLLABLE SUOP" #xA316)
-    ("YI SYLLABLE SOT" #xA317)
-    ("YI SYLLABLE SOX" #xA318)
-    ("YI SYLLABLE SO" #xA319)
-    ("YI SYLLABLE SOP" #xA31A)
-    ("YI SYLLABLE SEX" #xA31B)
-    ("YI SYLLABLE SE" #xA31C)
-    ("YI SYLLABLE SEP" #xA31D)
-    ("YI SYLLABLE SUT" #xA31E)
-    ("YI SYLLABLE SUX" #xA31F)
-    ("YI SYLLABLE SU" #xA320)
-    ("YI SYLLABLE SUP" #xA321)
-    ("YI SYLLABLE SURX" #xA322)
-    ("YI SYLLABLE SUR" #xA323)
-    ("YI SYLLABLE SYT" #xA324)
-    ("YI SYLLABLE SYX" #xA325)
-    ("YI SYLLABLE SY" #xA326)
-    ("YI SYLLABLE SYP" #xA327)
-    ("YI SYLLABLE SYRX" #xA328)
-    ("YI SYLLABLE SYR" #xA329)
-    ("YI SYLLABLE SSIT" #xA32A)
-    ("YI SYLLABLE SSIX" #xA32B)
-    ("YI SYLLABLE SSI" #xA32C)
-    ("YI SYLLABLE SSIP" #xA32D)
-    ("YI SYLLABLE SSIEX" #xA32E)
-    ("YI SYLLABLE SSIE" #xA32F)
-    ("YI SYLLABLE SSIEP" #xA330)
-    ("YI SYLLABLE SSAT" #xA331)
-    ("YI SYLLABLE SSAX" #xA332)
-    ("YI SYLLABLE SSA" #xA333)
-    ("YI SYLLABLE SSAP" #xA334)
-    ("YI SYLLABLE SSOT" #xA335)
-    ("YI SYLLABLE SSOX" #xA336)
-    ("YI SYLLABLE SSO" #xA337)
-    ("YI SYLLABLE SSOP" #xA338)
-    ("YI SYLLABLE SSEX" #xA339)
-    ("YI SYLLABLE SSE" #xA33A)
-    ("YI SYLLABLE SSEP" #xA33B)
-    ("YI SYLLABLE SSUT" #xA33C)
-    ("YI SYLLABLE SSUX" #xA33D)
-    ("YI SYLLABLE SSU" #xA33E)
-    ("YI SYLLABLE SSUP" #xA33F)
-    ("YI SYLLABLE SSYT" #xA340)
-    ("YI SYLLABLE SSYX" #xA341)
-    ("YI SYLLABLE SSY" #xA342)
-    ("YI SYLLABLE SSYP" #xA343)
-    ("YI SYLLABLE SSYRX" #xA344)
-    ("YI SYLLABLE SSYR" #xA345)
-    ("YI SYLLABLE ZHAT" #xA346)
-    ("YI SYLLABLE ZHAX" #xA347)
-    ("YI SYLLABLE ZHA" #xA348)
-    ("YI SYLLABLE ZHAP" #xA349)
-    ("YI SYLLABLE ZHUOX" #xA34A)
-    ("YI SYLLABLE ZHUO" #xA34B)
-    ("YI SYLLABLE ZHUOP" #xA34C)
-    ("YI SYLLABLE ZHOT" #xA34D)
-    ("YI SYLLABLE ZHOX" #xA34E)
-    ("YI SYLLABLE ZHO" #xA34F)
-    ("YI SYLLABLE ZHOP" #xA350)
-    ("YI SYLLABLE ZHET" #xA351)
-    ("YI SYLLABLE ZHEX" #xA352)
-    ("YI SYLLABLE ZHE" #xA353)
-    ("YI SYLLABLE ZHEP" #xA354)
-    ("YI SYLLABLE ZHUT" #xA355)
-    ("YI SYLLABLE ZHUX" #xA356)
-    ("YI SYLLABLE ZHU" #xA357)
-    ("YI SYLLABLE ZHUP" #xA358)
-    ("YI SYLLABLE ZHURX" #xA359)
-    ("YI SYLLABLE ZHUR" #xA35A)
-    ("YI SYLLABLE ZHYT" #xA35B)
-    ("YI SYLLABLE ZHYX" #xA35C)
-    ("YI SYLLABLE ZHY" #xA35D)
-    ("YI SYLLABLE ZHYP" #xA35E)
-    ("YI SYLLABLE ZHYRX" #xA35F)
-    ("YI SYLLABLE ZHYR" #xA360)
-    ("YI SYLLABLE CHAT" #xA361)
-    ("YI SYLLABLE CHAX" #xA362)
-    ("YI SYLLABLE CHA" #xA363)
-    ("YI SYLLABLE CHAP" #xA364)
-    ("YI SYLLABLE CHUOT" #xA365)
-    ("YI SYLLABLE CHUOX" #xA366)
-    ("YI SYLLABLE CHUO" #xA367)
-    ("YI SYLLABLE CHUOP" #xA368)
-    ("YI SYLLABLE CHOT" #xA369)
-    ("YI SYLLABLE CHOX" #xA36A)
-    ("YI SYLLABLE CHO" #xA36B)
-    ("YI SYLLABLE CHOP" #xA36C)
-    ("YI SYLLABLE CHET" #xA36D)
-    ("YI SYLLABLE CHEX" #xA36E)
-    ("YI SYLLABLE CHE" #xA36F)
-    ("YI SYLLABLE CHEP" #xA370)
-    ("YI SYLLABLE CHUX" #xA371)
-    ("YI SYLLABLE CHU" #xA372)
-    ("YI SYLLABLE CHUP" #xA373)
-    ("YI SYLLABLE CHURX" #xA374)
-    ("YI SYLLABLE CHUR" #xA375)
-    ("YI SYLLABLE CHYT" #xA376)
-    ("YI SYLLABLE CHYX" #xA377)
-    ("YI SYLLABLE CHY" #xA378)
-    ("YI SYLLABLE CHYP" #xA379)
-    ("YI SYLLABLE CHYRX" #xA37A)
-    ("YI SYLLABLE CHYR" #xA37B)
-    ("YI SYLLABLE RRAX" #xA37C)
-    ("YI SYLLABLE RRA" #xA37D)
-    ("YI SYLLABLE RRUOX" #xA37E)
-    ("YI SYLLABLE RRUO" #xA37F)
-    ("YI SYLLABLE RROT" #xA380)
-    ("YI SYLLABLE RROX" #xA381)
-    ("YI SYLLABLE RRO" #xA382)
-    ("YI SYLLABLE RROP" #xA383)
-    ("YI SYLLABLE RRET" #xA384)
-    ("YI SYLLABLE RREX" #xA385)
-    ("YI SYLLABLE RRE" #xA386)
-    ("YI SYLLABLE RREP" #xA387)
-    ("YI SYLLABLE RRUT" #xA388)
-    ("YI SYLLABLE RRUX" #xA389)
-    ("YI SYLLABLE RRU" #xA38A)
-    ("YI SYLLABLE RRUP" #xA38B)
-    ("YI SYLLABLE RRURX" #xA38C)
-    ("YI SYLLABLE RRUR" #xA38D)
-    ("YI SYLLABLE RRYT" #xA38E)
-    ("YI SYLLABLE RRYX" #xA38F)
-    ("YI SYLLABLE RRY" #xA390)
-    ("YI SYLLABLE RRYP" #xA391)
-    ("YI SYLLABLE RRYRX" #xA392)
-    ("YI SYLLABLE RRYR" #xA393)
-    ("YI SYLLABLE NRAT" #xA394)
-    ("YI SYLLABLE NRAX" #xA395)
-    ("YI SYLLABLE NRA" #xA396)
-    ("YI SYLLABLE NRAP" #xA397)
-    ("YI SYLLABLE NROX" #xA398)
-    ("YI SYLLABLE NRO" #xA399)
-    ("YI SYLLABLE NROP" #xA39A)
-    ("YI SYLLABLE NRET" #xA39B)
-    ("YI SYLLABLE NREX" #xA39C)
-    ("YI SYLLABLE NRE" #xA39D)
-    ("YI SYLLABLE NREP" #xA39E)
-    ("YI SYLLABLE NRUT" #xA39F)
-    ("YI SYLLABLE NRUX" #xA3A0)
-    ("YI SYLLABLE NRU" #xA3A1)
-    ("YI SYLLABLE NRUP" #xA3A2)
-    ("YI SYLLABLE NRURX" #xA3A3)
-    ("YI SYLLABLE NRUR" #xA3A4)
-    ("YI SYLLABLE NRYT" #xA3A5)
-    ("YI SYLLABLE NRYX" #xA3A6)
-    ("YI SYLLABLE NRY" #xA3A7)
-    ("YI SYLLABLE NRYP" #xA3A8)
-    ("YI SYLLABLE NRYRX" #xA3A9)
-    ("YI SYLLABLE NRYR" #xA3AA)
-    ("YI SYLLABLE SHAT" #xA3AB)
-    ("YI SYLLABLE SHAX" #xA3AC)
-    ("YI SYLLABLE SHA" #xA3AD)
-    ("YI SYLLABLE SHAP" #xA3AE)
-    ("YI SYLLABLE SHUOX" #xA3AF)
-    ("YI SYLLABLE SHUO" #xA3B0)
-    ("YI SYLLABLE SHUOP" #xA3B1)
-    ("YI SYLLABLE SHOT" #xA3B2)
-    ("YI SYLLABLE SHOX" #xA3B3)
-    ("YI SYLLABLE SHO" #xA3B4)
-    ("YI SYLLABLE SHOP" #xA3B5)
-    ("YI SYLLABLE SHET" #xA3B6)
-    ("YI SYLLABLE SHEX" #xA3B7)
-    ("YI SYLLABLE SHE" #xA3B8)
-    ("YI SYLLABLE SHEP" #xA3B9)
-    ("YI SYLLABLE SHUT" #xA3BA)
-    ("YI SYLLABLE SHUX" #xA3BB)
-    ("YI SYLLABLE SHU" #xA3BC)
-    ("YI SYLLABLE SHUP" #xA3BD)
-    ("YI SYLLABLE SHURX" #xA3BE)
-    ("YI SYLLABLE SHUR" #xA3BF)
-    ("YI SYLLABLE SHYT" #xA3C0)
-    ("YI SYLLABLE SHYX" #xA3C1)
-    ("YI SYLLABLE SHY" #xA3C2)
-    ("YI SYLLABLE SHYP" #xA3C3)
-    ("YI SYLLABLE SHYRX" #xA3C4)
-    ("YI SYLLABLE SHYR" #xA3C5)
-    ("YI SYLLABLE RAT" #xA3C6)
-    ("YI SYLLABLE RAX" #xA3C7)
-    ("YI SYLLABLE RA" #xA3C8)
-    ("YI SYLLABLE RAP" #xA3C9)
-    ("YI SYLLABLE RUOX" #xA3CA)
-    ("YI SYLLABLE RUO" #xA3CB)
-    ("YI SYLLABLE RUOP" #xA3CC)
-    ("YI SYLLABLE ROT" #xA3CD)
-    ("YI SYLLABLE ROX" #xA3CE)
-    ("YI SYLLABLE RO" #xA3CF)
-    ("YI SYLLABLE ROP" #xA3D0)
-    ("YI SYLLABLE REX" #xA3D1)
-    ("YI SYLLABLE RE" #xA3D2)
-    ("YI SYLLABLE REP" #xA3D3)
-    ("YI SYLLABLE RUT" #xA3D4)
-    ("YI SYLLABLE RUX" #xA3D5)
-    ("YI SYLLABLE RU" #xA3D6)
-    ("YI SYLLABLE RUP" #xA3D7)
-    ("YI SYLLABLE RURX" #xA3D8)
-    ("YI SYLLABLE RUR" #xA3D9)
-    ("YI SYLLABLE RYT" #xA3DA)
-    ("YI SYLLABLE RYX" #xA3DB)
-    ("YI SYLLABLE RY" #xA3DC)
-    ("YI SYLLABLE RYP" #xA3DD)
-    ("YI SYLLABLE RYRX" #xA3DE)
-    ("YI SYLLABLE RYR" #xA3DF)
-    ("YI SYLLABLE JIT" #xA3E0)
-    ("YI SYLLABLE JIX" #xA3E1)
-    ("YI SYLLABLE JI" #xA3E2)
-    ("YI SYLLABLE JIP" #xA3E3)
-    ("YI SYLLABLE JIET" #xA3E4)
-    ("YI SYLLABLE JIEX" #xA3E5)
-    ("YI SYLLABLE JIE" #xA3E6)
-    ("YI SYLLABLE JIEP" #xA3E7)
-    ("YI SYLLABLE JUOT" #xA3E8)
-    ("YI SYLLABLE JUOX" #xA3E9)
-    ("YI SYLLABLE JUO" #xA3EA)
-    ("YI SYLLABLE JUOP" #xA3EB)
-    ("YI SYLLABLE JOT" #xA3EC)
-    ("YI SYLLABLE JOX" #xA3ED)
-    ("YI SYLLABLE JO" #xA3EE)
-    ("YI SYLLABLE JOP" #xA3EF)
-    ("YI SYLLABLE JUT" #xA3F0)
-    ("YI SYLLABLE JUX" #xA3F1)
-    ("YI SYLLABLE JU" #xA3F2)
-    ("YI SYLLABLE JUP" #xA3F3)
-    ("YI SYLLABLE JURX" #xA3F4)
-    ("YI SYLLABLE JUR" #xA3F5)
-    ("YI SYLLABLE JYT" #xA3F6)
-    ("YI SYLLABLE JYX" #xA3F7)
-    ("YI SYLLABLE JY" #xA3F8)
-    ("YI SYLLABLE JYP" #xA3F9)
-    ("YI SYLLABLE JYRX" #xA3FA)
-    ("YI SYLLABLE JYR" #xA3FB)
-    ("YI SYLLABLE QIT" #xA3FC)
-    ("YI SYLLABLE QIX" #xA3FD)
-    ("YI SYLLABLE QI" #xA3FE)
-    ("YI SYLLABLE QIP" #xA3FF)
-    ("YI SYLLABLE QIET" #xA400)
-    ("YI SYLLABLE QIEX" #xA401)
-    ("YI SYLLABLE QIE" #xA402)
-    ("YI SYLLABLE QIEP" #xA403)
-    ("YI SYLLABLE QUOT" #xA404)
-    ("YI SYLLABLE QUOX" #xA405)
-    ("YI SYLLABLE QUO" #xA406)
-    ("YI SYLLABLE QUOP" #xA407)
-    ("YI SYLLABLE QOT" #xA408)
-    ("YI SYLLABLE QOX" #xA409)
-    ("YI SYLLABLE QO" #xA40A)
-    ("YI SYLLABLE QOP" #xA40B)
-    ("YI SYLLABLE QUT" #xA40C)
-    ("YI SYLLABLE QUX" #xA40D)
-    ("YI SYLLABLE QU" #xA40E)
-    ("YI SYLLABLE QUP" #xA40F)
-    ("YI SYLLABLE QURX" #xA410)
-    ("YI SYLLABLE QUR" #xA411)
-    ("YI SYLLABLE QYT" #xA412)
-    ("YI SYLLABLE QYX" #xA413)
-    ("YI SYLLABLE QY" #xA414)
-    ("YI SYLLABLE QYP" #xA415)
-    ("YI SYLLABLE QYRX" #xA416)
-    ("YI SYLLABLE QYR" #xA417)
-    ("YI SYLLABLE JJIT" #xA418)
-    ("YI SYLLABLE JJIX" #xA419)
-    ("YI SYLLABLE JJI" #xA41A)
-    ("YI SYLLABLE JJIP" #xA41B)
-    ("YI SYLLABLE JJIET" #xA41C)
-    ("YI SYLLABLE JJIEX" #xA41D)
-    ("YI SYLLABLE JJIE" #xA41E)
-    ("YI SYLLABLE JJIEP" #xA41F)
-    ("YI SYLLABLE JJUOX" #xA420)
-    ("YI SYLLABLE JJUO" #xA421)
-    ("YI SYLLABLE JJUOP" #xA422)
-    ("YI SYLLABLE JJOT" #xA423)
-    ("YI SYLLABLE JJOX" #xA424)
-    ("YI SYLLABLE JJO" #xA425)
-    ("YI SYLLABLE JJOP" #xA426)
-    ("YI SYLLABLE JJUT" #xA427)
-    ("YI SYLLABLE JJUX" #xA428)
-    ("YI SYLLABLE JJU" #xA429)
-    ("YI SYLLABLE JJUP" #xA42A)
-    ("YI SYLLABLE JJURX" #xA42B)
-    ("YI SYLLABLE JJUR" #xA42C)
-    ("YI SYLLABLE JJYT" #xA42D)
-    ("YI SYLLABLE JJYX" #xA42E)
-    ("YI SYLLABLE JJY" #xA42F)
-    ("YI SYLLABLE JJYP" #xA430)
-    ("YI SYLLABLE NJIT" #xA431)
-    ("YI SYLLABLE NJIX" #xA432)
-    ("YI SYLLABLE NJI" #xA433)
-    ("YI SYLLABLE NJIP" #xA434)
-    ("YI SYLLABLE NJIET" #xA435)
-    ("YI SYLLABLE NJIEX" #xA436)
-    ("YI SYLLABLE NJIE" #xA437)
-    ("YI SYLLABLE NJIEP" #xA438)
-    ("YI SYLLABLE NJUOX" #xA439)
-    ("YI SYLLABLE NJUO" #xA43A)
-    ("YI SYLLABLE NJOT" #xA43B)
-    ("YI SYLLABLE NJOX" #xA43C)
-    ("YI SYLLABLE NJO" #xA43D)
-    ("YI SYLLABLE NJOP" #xA43E)
-    ("YI SYLLABLE NJUX" #xA43F)
-    ("YI SYLLABLE NJU" #xA440)
-    ("YI SYLLABLE NJUP" #xA441)
-    ("YI SYLLABLE NJURX" #xA442)
-    ("YI SYLLABLE NJUR" #xA443)
-    ("YI SYLLABLE NJYT" #xA444)
-    ("YI SYLLABLE NJYX" #xA445)
-    ("YI SYLLABLE NJY" #xA446)
-    ("YI SYLLABLE NJYP" #xA447)
-    ("YI SYLLABLE NJYRX" #xA448)
-    ("YI SYLLABLE NJYR" #xA449)
-    ("YI SYLLABLE NYIT" #xA44A)
-    ("YI SYLLABLE NYIX" #xA44B)
-    ("YI SYLLABLE NYI" #xA44C)
-    ("YI SYLLABLE NYIP" #xA44D)
-    ("YI SYLLABLE NYIET" #xA44E)
-    ("YI SYLLABLE NYIEX" #xA44F)
-    ("YI SYLLABLE NYIE" #xA450)
-    ("YI SYLLABLE NYIEP" #xA451)
-    ("YI SYLLABLE NYUOX" #xA452)
-    ("YI SYLLABLE NYUO" #xA453)
-    ("YI SYLLABLE NYUOP" #xA454)
-    ("YI SYLLABLE NYOT" #xA455)
-    ("YI SYLLABLE NYOX" #xA456)
-    ("YI SYLLABLE NYO" #xA457)
-    ("YI SYLLABLE NYOP" #xA458)
-    ("YI SYLLABLE NYUT" #xA459)
-    ("YI SYLLABLE NYUX" #xA45A)
-    ("YI SYLLABLE NYU" #xA45B)
-    ("YI SYLLABLE NYUP" #xA45C)
-    ("YI SYLLABLE XIT" #xA45D)
-    ("YI SYLLABLE XIX" #xA45E)
-    ("YI SYLLABLE XI" #xA45F)
-    ("YI SYLLABLE XIP" #xA460)
-    ("YI SYLLABLE XIET" #xA461)
-    ("YI SYLLABLE XIEX" #xA462)
-    ("YI SYLLABLE XIE" #xA463)
-    ("YI SYLLABLE XIEP" #xA464)
-    ("YI SYLLABLE XUOX" #xA465)
-    ("YI SYLLABLE XUO" #xA466)
-    ("YI SYLLABLE XOT" #xA467)
-    ("YI SYLLABLE XOX" #xA468)
-    ("YI SYLLABLE XO" #xA469)
-    ("YI SYLLABLE XOP" #xA46A)
-    ("YI SYLLABLE XYT" #xA46B)
-    ("YI SYLLABLE XYX" #xA46C)
-    ("YI SYLLABLE XY" #xA46D)
-    ("YI SYLLABLE XYP" #xA46E)
-    ("YI SYLLABLE XYRX" #xA46F)
-    ("YI SYLLABLE XYR" #xA470)
-    ("YI SYLLABLE YIT" #xA471)
-    ("YI SYLLABLE YIX" #xA472)
-    ("YI SYLLABLE YI" #xA473)
-    ("YI SYLLABLE YIP" #xA474)
-    ("YI SYLLABLE YIET" #xA475)
-    ("YI SYLLABLE YIEX" #xA476)
-    ("YI SYLLABLE YIE" #xA477)
-    ("YI SYLLABLE YIEP" #xA478)
-    ("YI SYLLABLE YUOT" #xA479)
-    ("YI SYLLABLE YUOX" #xA47A)
-    ("YI SYLLABLE YUO" #xA47B)
-    ("YI SYLLABLE YUOP" #xA47C)
-    ("YI SYLLABLE YOT" #xA47D)
-    ("YI SYLLABLE YOX" #xA47E)
-    ("YI SYLLABLE YO" #xA47F)
-    ("YI SYLLABLE YOP" #xA480)
-    ("YI SYLLABLE YUT" #xA481)
-    ("YI SYLLABLE YUX" #xA482)
-    ("YI SYLLABLE YU" #xA483)
-    ("YI SYLLABLE YUP" #xA484)
-    ("YI SYLLABLE YURX" #xA485)
-    ("YI SYLLABLE YUR" #xA486)
-    ("YI SYLLABLE YYT" #xA487)
-    ("YI SYLLABLE YYX" #xA488)
-    ("YI SYLLABLE YY" #xA489)
-    ("YI SYLLABLE YYP" #xA48A)
-    ("YI SYLLABLE YYRX" #xA48B)
-    ("YI SYLLABLE YYR" #xA48C)
-    ))
-
diff --git a/etc/nxml/0A490-0A4CF.el b/etc/nxml/0A490-0A4CF.el
deleted file mode 100644 (file)
index 3052371..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-(nxml-define-char-name-set 'yi-radicals
-  '(("YI RADICAL QOT" #xA490)
-    ("YI RADICAL LI" #xA491)
-    ("YI RADICAL KIT" #xA492)
-    ("YI RADICAL NYIP" #xA493)
-    ("YI RADICAL CYP" #xA494)
-    ("YI RADICAL SSI" #xA495)
-    ("YI RADICAL GGOP" #xA496)
-    ("YI RADICAL GEP" #xA497)
-    ("YI RADICAL MI" #xA498)
-    ("YI RADICAL HXIT" #xA499)
-    ("YI RADICAL LYR" #xA49A)
-    ("YI RADICAL BBUT" #xA49B)
-    ("YI RADICAL MOP" #xA49C)
-    ("YI RADICAL YO" #xA49D)
-    ("YI RADICAL PUT" #xA49E)
-    ("YI RADICAL HXUO" #xA49F)
-    ("YI RADICAL TAT" #xA4A0)
-    ("YI RADICAL GA" #xA4A1)
-    ("YI RADICAL ZUP" #xA4A2)
-    ("YI RADICAL CYT" #xA4A3)
-    ("YI RADICAL DDUR" #xA4A4)
-    ("YI RADICAL BUR" #xA4A5)
-    ("YI RADICAL GGUO" #xA4A6)
-    ("YI RADICAL NYOP" #xA4A7)
-    ("YI RADICAL TU" #xA4A8)
-    ("YI RADICAL OP" #xA4A9)
-    ("YI RADICAL JJUT" #xA4AA)
-    ("YI RADICAL ZOT" #xA4AB)
-    ("YI RADICAL PYT" #xA4AC)
-    ("YI RADICAL HMO" #xA4AD)
-    ("YI RADICAL YIT" #xA4AE)
-    ("YI RADICAL VUR" #xA4AF)
-    ("YI RADICAL SHY" #xA4B0)
-    ("YI RADICAL VEP" #xA4B1)
-    ("YI RADICAL ZA" #xA4B2)
-    ("YI RADICAL JO" #xA4B3)
-    ("YI RADICAL NZUP" #xA4B4)
-    ("YI RADICAL JJY" #xA4B5)
-    ("YI RADICAL GOT" #xA4B6)
-    ("YI RADICAL JJIE" #xA4B7)
-    ("YI RADICAL WO" #xA4B8)
-    ("YI RADICAL DU" #xA4B9)
-    ("YI RADICAL SHUR" #xA4BA)
-    ("YI RADICAL LIE" #xA4BB)
-    ("YI RADICAL CY" #xA4BC)
-    ("YI RADICAL CUOP" #xA4BD)
-    ("YI RADICAL CIP" #xA4BE)
-    ("YI RADICAL HXOP" #xA4BF)
-    ("YI RADICAL SHAT" #xA4C0)
-    ("YI RADICAL ZUR" #xA4C1)
-    ("YI RADICAL SHOP" #xA4C2)
-    ("YI RADICAL CHE" #xA4C3)
-    ("YI RADICAL ZZIET" #xA4C4)
-    ("YI RADICAL NBIE" #xA4C5)
-    ("YI RADICAL KE" #xA4C6)
-    ))
-
diff --git a/etc/nxml/0FB00-0FB4F.el b/etc/nxml/0FB00-0FB4F.el
deleted file mode 100644 (file)
index 20b19e1..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-(nxml-define-char-name-set 'alphabetic-presentation-forms
-  '(("LATIN SMALL LIGATURE FF" #xFB00)
-    ("LATIN SMALL LIGATURE FI" #xFB01)
-    ("LATIN SMALL LIGATURE FL" #xFB02)
-    ("LATIN SMALL LIGATURE FFI" #xFB03)
-    ("LATIN SMALL LIGATURE FFL" #xFB04)
-    ("LATIN SMALL LIGATURE LONG S T" #xFB05)
-    ("LATIN SMALL LIGATURE ST" #xFB06)
-    ("ARMENIAN SMALL LIGATURE MEN NOW" #xFB13)
-    ("ARMENIAN SMALL LIGATURE MEN ECH" #xFB14)
-    ("ARMENIAN SMALL LIGATURE MEN INI" #xFB15)
-    ("ARMENIAN SMALL LIGATURE VEW NOW" #xFB16)
-    ("ARMENIAN SMALL LIGATURE MEN XEH" #xFB17)
-    ("HEBREW LETTER YOD WITH HIRIQ" #xFB1D)
-    ("HEBREW POINT JUDEO-SPANISH VARIKA" #xFB1E)
-    ("HEBREW LIGATURE YIDDISH YOD YOD PATAH" #xFB1F)
-    ("HEBREW LETTER ALTERNATIVE AYIN" #xFB20)
-    ("HEBREW LETTER WIDE ALEF" #xFB21)
-    ("HEBREW LETTER WIDE DALET" #xFB22)
-    ("HEBREW LETTER WIDE HE" #xFB23)
-    ("HEBREW LETTER WIDE KAF" #xFB24)
-    ("HEBREW LETTER WIDE LAMED" #xFB25)
-    ("HEBREW LETTER WIDE FINAL MEM" #xFB26)
-    ("HEBREW LETTER WIDE RESH" #xFB27)
-    ("HEBREW LETTER WIDE TAV" #xFB28)
-    ("HEBREW LETTER ALTERNATIVE PLUS SIGN" #xFB29)
-    ("HEBREW LETTER SHIN WITH SHIN DOT" #xFB2A)
-    ("HEBREW LETTER SHIN WITH SIN DOT" #xFB2B)
-    ("HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT" #xFB2C)
-    ("HEBREW LETTER SHIN WITH DAGESH AND SIN DOT" #xFB2D)
-    ("HEBREW LETTER ALEF WITH PATAH" #xFB2E)
-    ("HEBREW LETTER ALEF WITH QAMATS" #xFB2F)
-    ("HEBREW LETTER ALEF WITH MAPIQ" #xFB30)
-    ("HEBREW LETTER BET WITH DAGESH" #xFB31)
-    ("HEBREW LETTER GIMEL WITH DAGESH" #xFB32)
-    ("HEBREW LETTER DALET WITH DAGESH" #xFB33)
-    ("HEBREW LETTER HE WITH MAPIQ" #xFB34)
-    ("HEBREW LETTER VAV WITH DAGESH" #xFB35)
-    ("HEBREW LETTER ZAYIN WITH DAGESH" #xFB36)
-    ("HEBREW LETTER TET WITH DAGESH" #xFB38)
-    ("HEBREW LETTER YOD WITH DAGESH" #xFB39)
-    ("HEBREW LETTER FINAL KAF WITH DAGESH" #xFB3A)
-    ("HEBREW LETTER KAF WITH DAGESH" #xFB3B)
-    ("HEBREW LETTER LAMED WITH DAGESH" #xFB3C)
-    ("HEBREW LETTER MEM WITH DAGESH" #xFB3E)
-    ("HEBREW LETTER NUN WITH DAGESH" #xFB40)
-    ("HEBREW LETTER SAMEKH WITH DAGESH" #xFB41)
-    ("HEBREW LETTER FINAL PE WITH DAGESH" #xFB43)
-    ("HEBREW LETTER PE WITH DAGESH" #xFB44)
-    ("HEBREW LETTER TSADI WITH DAGESH" #xFB46)
-    ("HEBREW LETTER QOF WITH DAGESH" #xFB47)
-    ("HEBREW LETTER RESH WITH DAGESH" #xFB48)
-    ("HEBREW LETTER SHIN WITH DAGESH" #xFB49)
-    ("HEBREW LETTER TAV WITH DAGESH" #xFB4A)
-    ("HEBREW LETTER VAV WITH HOLAM" #xFB4B)
-    ("HEBREW LETTER BET WITH RAFE" #xFB4C)
-    ("HEBREW LETTER KAF WITH RAFE" #xFB4D)
-    ("HEBREW LETTER PE WITH RAFE" #xFB4E)
-    ("HEBREW LIGATURE ALEF LAMED" #xFB4F)
-    ))
-
diff --git a/etc/nxml/0FB50-0FDFF.el b/etc/nxml/0FB50-0FDFF.el
deleted file mode 100644 (file)
index 9feea5e..0000000
+++ /dev/null
@@ -1,597 +0,0 @@
-(nxml-define-char-name-set 'arabic-presentation-forms-a
-  '(("ARABIC LETTER ALEF WASLA ISOLATED FORM" #xFB50)
-    ("ARABIC LETTER ALEF WASLA FINAL FORM" #xFB51)
-    ("ARABIC LETTER BEEH ISOLATED FORM" #xFB52)
-    ("ARABIC LETTER BEEH FINAL FORM" #xFB53)
-    ("ARABIC LETTER BEEH INITIAL FORM" #xFB54)
-    ("ARABIC LETTER BEEH MEDIAL FORM" #xFB55)
-    ("ARABIC LETTER PEH ISOLATED FORM" #xFB56)
-    ("ARABIC LETTER PEH FINAL FORM" #xFB57)
-    ("ARABIC LETTER PEH INITIAL FORM" #xFB58)
-    ("ARABIC LETTER PEH MEDIAL FORM" #xFB59)
-    ("ARABIC LETTER BEHEH ISOLATED FORM" #xFB5A)
-    ("ARABIC LETTER BEHEH FINAL FORM" #xFB5B)
-    ("ARABIC LETTER BEHEH INITIAL FORM" #xFB5C)
-    ("ARABIC LETTER BEHEH MEDIAL FORM" #xFB5D)
-    ("ARABIC LETTER TTEHEH ISOLATED FORM" #xFB5E)
-    ("ARABIC LETTER TTEHEH FINAL FORM" #xFB5F)
-    ("ARABIC LETTER TTEHEH INITIAL FORM" #xFB60)
-    ("ARABIC LETTER TTEHEH MEDIAL FORM" #xFB61)
-    ("ARABIC LETTER TEHEH ISOLATED FORM" #xFB62)
-    ("ARABIC LETTER TEHEH FINAL FORM" #xFB63)
-    ("ARABIC LETTER TEHEH INITIAL FORM" #xFB64)
-    ("ARABIC LETTER TEHEH MEDIAL FORM" #xFB65)
-    ("ARABIC LETTER TTEH ISOLATED FORM" #xFB66)
-    ("ARABIC LETTER TTEH FINAL FORM" #xFB67)
-    ("ARABIC LETTER TTEH INITIAL FORM" #xFB68)
-    ("ARABIC LETTER TTEH MEDIAL FORM" #xFB69)
-    ("ARABIC LETTER VEH ISOLATED FORM" #xFB6A)
-    ("ARABIC LETTER VEH FINAL FORM" #xFB6B)
-    ("ARABIC LETTER VEH INITIAL FORM" #xFB6C)
-    ("ARABIC LETTER VEH MEDIAL FORM" #xFB6D)
-    ("ARABIC LETTER PEHEH ISOLATED FORM" #xFB6E)
-    ("ARABIC LETTER PEHEH FINAL FORM" #xFB6F)
-    ("ARABIC LETTER PEHEH INITIAL FORM" #xFB70)
-    ("ARABIC LETTER PEHEH MEDIAL FORM" #xFB71)
-    ("ARABIC LETTER DYEH ISOLATED FORM" #xFB72)
-    ("ARABIC LETTER DYEH FINAL FORM" #xFB73)
-    ("ARABIC LETTER DYEH INITIAL FORM" #xFB74)
-    ("ARABIC LETTER DYEH MEDIAL FORM" #xFB75)
-    ("ARABIC LETTER NYEH ISOLATED FORM" #xFB76)
-    ("ARABIC LETTER NYEH FINAL FORM" #xFB77)
-    ("ARABIC LETTER NYEH INITIAL FORM" #xFB78)
-    ("ARABIC LETTER NYEH MEDIAL FORM" #xFB79)
-    ("ARABIC LETTER TCHEH ISOLATED FORM" #xFB7A)
-    ("ARABIC LETTER TCHEH FINAL FORM" #xFB7B)
-    ("ARABIC LETTER TCHEH INITIAL FORM" #xFB7C)
-    ("ARABIC LETTER TCHEH MEDIAL FORM" #xFB7D)
-    ("ARABIC LETTER TCHEHEH ISOLATED FORM" #xFB7E)
-    ("ARABIC LETTER TCHEHEH FINAL FORM" #xFB7F)
-    ("ARABIC LETTER TCHEHEH INITIAL FORM" #xFB80)
-    ("ARABIC LETTER TCHEHEH MEDIAL FORM" #xFB81)
-    ("ARABIC LETTER DDAHAL ISOLATED FORM" #xFB82)
-    ("ARABIC LETTER DDAHAL FINAL FORM" #xFB83)
-    ("ARABIC LETTER DAHAL ISOLATED FORM" #xFB84)
-    ("ARABIC LETTER DAHAL FINAL FORM" #xFB85)
-    ("ARABIC LETTER DUL ISOLATED FORM" #xFB86)
-    ("ARABIC LETTER DUL FINAL FORM" #xFB87)
-    ("ARABIC LETTER DDAL ISOLATED FORM" #xFB88)
-    ("ARABIC LETTER DDAL FINAL FORM" #xFB89)
-    ("ARABIC LETTER JEH ISOLATED FORM" #xFB8A)
-    ("ARABIC LETTER JEH FINAL FORM" #xFB8B)
-    ("ARABIC LETTER RREH ISOLATED FORM" #xFB8C)
-    ("ARABIC LETTER RREH FINAL FORM" #xFB8D)
-    ("ARABIC LETTER KEHEH ISOLATED FORM" #xFB8E)
-    ("ARABIC LETTER KEHEH FINAL FORM" #xFB8F)
-    ("ARABIC LETTER KEHEH INITIAL FORM" #xFB90)
-    ("ARABIC LETTER KEHEH MEDIAL FORM" #xFB91)
-    ("ARABIC LETTER GAF ISOLATED FORM" #xFB92)
-    ("ARABIC LETTER GAF FINAL FORM" #xFB93)
-    ("ARABIC LETTER GAF INITIAL FORM" #xFB94)
-    ("ARABIC LETTER GAF MEDIAL FORM" #xFB95)
-    ("ARABIC LETTER GUEH ISOLATED FORM" #xFB96)
-    ("ARABIC LETTER GUEH FINAL FORM" #xFB97)
-    ("ARABIC LETTER GUEH INITIAL FORM" #xFB98)
-    ("ARABIC LETTER GUEH MEDIAL FORM" #xFB99)
-    ("ARABIC LETTER NGOEH ISOLATED FORM" #xFB9A)
-    ("ARABIC LETTER NGOEH FINAL FORM" #xFB9B)
-    ("ARABIC LETTER NGOEH INITIAL FORM" #xFB9C)
-    ("ARABIC LETTER NGOEH MEDIAL FORM" #xFB9D)
-    ("ARABIC LETTER NOON GHUNNA ISOLATED FORM" #xFB9E)
-    ("ARABIC LETTER NOON GHUNNA FINAL FORM" #xFB9F)
-    ("ARABIC LETTER RNOON ISOLATED FORM" #xFBA0)
-    ("ARABIC LETTER RNOON FINAL FORM" #xFBA1)
-    ("ARABIC LETTER RNOON INITIAL FORM" #xFBA2)
-    ("ARABIC LETTER RNOON MEDIAL FORM" #xFBA3)
-    ("ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM" #xFBA4)
-    ("ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM" #xFBA5)
-    ("ARABIC LETTER HEH GOAL ISOLATED FORM" #xFBA6)
-    ("ARABIC LETTER HEH GOAL FINAL FORM" #xFBA7)
-    ("ARABIC LETTER HEH GOAL INITIAL FORM" #xFBA8)
-    ("ARABIC LETTER HEH GOAL MEDIAL FORM" #xFBA9)
-    ("ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM" #xFBAA)
-    ("ARABIC LETTER HEH DOACHASHMEE FINAL FORM" #xFBAB)
-    ("ARABIC LETTER HEH DOACHASHMEE INITIAL FORM" #xFBAC)
-    ("ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM" #xFBAD)
-    ("ARABIC LETTER YEH BARREE ISOLATED FORM" #xFBAE)
-    ("ARABIC LETTER YEH BARREE FINAL FORM" #xFBAF)
-    ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM" #xFBB0)
-    ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM" #xFBB1)
-    ("ARABIC LETTER NG ISOLATED FORM" #xFBD3)
-    ("ARABIC LETTER NG FINAL FORM" #xFBD4)
-    ("ARABIC LETTER NG INITIAL FORM" #xFBD5)
-    ("ARABIC LETTER NG MEDIAL FORM" #xFBD6)
-    ("ARABIC LETTER U ISOLATED FORM" #xFBD7)
-    ("ARABIC LETTER U FINAL FORM" #xFBD8)
-    ("ARABIC LETTER OE ISOLATED FORM" #xFBD9)
-    ("ARABIC LETTER OE FINAL FORM" #xFBDA)
-    ("ARABIC LETTER YU ISOLATED FORM" #xFBDB)
-    ("ARABIC LETTER YU FINAL FORM" #xFBDC)
-    ("ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM" #xFBDD)
-    ("ARABIC LETTER VE ISOLATED FORM" #xFBDE)
-    ("ARABIC LETTER VE FINAL FORM" #xFBDF)
-    ("ARABIC LETTER KIRGHIZ OE ISOLATED FORM" #xFBE0)
-    ("ARABIC LETTER KIRGHIZ OE FINAL FORM" #xFBE1)
-    ("ARABIC LETTER KIRGHIZ YU ISOLATED FORM" #xFBE2)
-    ("ARABIC LETTER KIRGHIZ YU FINAL FORM" #xFBE3)
-    ("ARABIC LETTER E ISOLATED FORM" #xFBE4)
-    ("ARABIC LETTER E FINAL FORM" #xFBE5)
-    ("ARABIC LETTER E INITIAL FORM" #xFBE6)
-    ("ARABIC LETTER E MEDIAL FORM" #xFBE7)
-    ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM" #xFBE8)
-    ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM" #xFBE9)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM" #xFBEA)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM" #xFBEB)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM" #xFBEC)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM" #xFBED)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM" #xFBEE)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM" #xFBEF)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM" #xFBF0)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM" #xFBF1)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM" #xFBF2)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM" #xFBF3)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM" #xFBF4)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM" #xFBF5)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM" #xFBF6)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM" #xFBF7)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM" #xFBF8)
-    ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFBF9)
-    ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFBFA)
-    ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM" #xFBFB)
-    ("ARABIC LETTER FARSI YEH ISOLATED FORM" #xFBFC)
-    ("ARABIC LETTER FARSI YEH FINAL FORM" #xFBFD)
-    ("ARABIC LETTER FARSI YEH INITIAL FORM" #xFBFE)
-    ("ARABIC LETTER FARSI YEH MEDIAL FORM" #xFBFF)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM" #xFC00)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM" #xFC01)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM" #xFC02)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFC03)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM" #xFC04)
-    ("ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM" #xFC05)
-    ("ARABIC LIGATURE BEH WITH HAH ISOLATED FORM" #xFC06)
-    ("ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM" #xFC07)
-    ("ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM" #xFC08)
-    ("ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM" #xFC09)
-    ("ARABIC LIGATURE BEH WITH YEH ISOLATED FORM" #xFC0A)
-    ("ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM" #xFC0B)
-    ("ARABIC LIGATURE TEH WITH HAH ISOLATED FORM" #xFC0C)
-    ("ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM" #xFC0D)
-    ("ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM" #xFC0E)
-    ("ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM" #xFC0F)
-    ("ARABIC LIGATURE TEH WITH YEH ISOLATED FORM" #xFC10)
-    ("ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM" #xFC11)
-    ("ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM" #xFC12)
-    ("ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM" #xFC13)
-    ("ARABIC LIGATURE THEH WITH YEH ISOLATED FORM" #xFC14)
-    ("ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM" #xFC15)
-    ("ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM" #xFC16)
-    ("ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM" #xFC17)
-    ("ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM" #xFC18)
-    ("ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM" #xFC19)
-    ("ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM" #xFC1A)
-    ("ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM" #xFC1B)
-    ("ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM" #xFC1C)
-    ("ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM" #xFC1D)
-    ("ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM" #xFC1E)
-    ("ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM" #xFC1F)
-    ("ARABIC LIGATURE SAD WITH HAH ISOLATED FORM" #xFC20)
-    ("ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM" #xFC21)
-    ("ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM" #xFC22)
-    ("ARABIC LIGATURE DAD WITH HAH ISOLATED FORM" #xFC23)
-    ("ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM" #xFC24)
-    ("ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM" #xFC25)
-    ("ARABIC LIGATURE TAH WITH HAH ISOLATED FORM" #xFC26)
-    ("ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM" #xFC27)
-    ("ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM" #xFC28)
-    ("ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM" #xFC29)
-    ("ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM" #xFC2A)
-    ("ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM" #xFC2B)
-    ("ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM" #xFC2C)
-    ("ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM" #xFC2D)
-    ("ARABIC LIGATURE FEH WITH HAH ISOLATED FORM" #xFC2E)
-    ("ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM" #xFC2F)
-    ("ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM" #xFC30)
-    ("ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM" #xFC31)
-    ("ARABIC LIGATURE FEH WITH YEH ISOLATED FORM" #xFC32)
-    ("ARABIC LIGATURE QAF WITH HAH ISOLATED FORM" #xFC33)
-    ("ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM" #xFC34)
-    ("ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM" #xFC35)
-    ("ARABIC LIGATURE QAF WITH YEH ISOLATED FORM" #xFC36)
-    ("ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM" #xFC37)
-    ("ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM" #xFC38)
-    ("ARABIC LIGATURE KAF WITH HAH ISOLATED FORM" #xFC39)
-    ("ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM" #xFC3A)
-    ("ARABIC LIGATURE KAF WITH LAM ISOLATED FORM" #xFC3B)
-    ("ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM" #xFC3C)
-    ("ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM" #xFC3D)
-    ("ARABIC LIGATURE KAF WITH YEH ISOLATED FORM" #xFC3E)
-    ("ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM" #xFC3F)
-    ("ARABIC LIGATURE LAM WITH HAH ISOLATED FORM" #xFC40)
-    ("ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM" #xFC41)
-    ("ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM" #xFC42)
-    ("ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM" #xFC43)
-    ("ARABIC LIGATURE LAM WITH YEH ISOLATED FORM" #xFC44)
-    ("ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM" #xFC45)
-    ("ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM" #xFC46)
-    ("ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM" #xFC47)
-    ("ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM" #xFC48)
-    ("ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM" #xFC49)
-    ("ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM" #xFC4A)
-    ("ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM" #xFC4B)
-    ("ARABIC LIGATURE NOON WITH HAH ISOLATED FORM" #xFC4C)
-    ("ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM" #xFC4D)
-    ("ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM" #xFC4E)
-    ("ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM" #xFC4F)
-    ("ARABIC LIGATURE NOON WITH YEH ISOLATED FORM" #xFC50)
-    ("ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM" #xFC51)
-    ("ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM" #xFC52)
-    ("ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM" #xFC53)
-    ("ARABIC LIGATURE HEH WITH YEH ISOLATED FORM" #xFC54)
-    ("ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM" #xFC55)
-    ("ARABIC LIGATURE YEH WITH HAH ISOLATED FORM" #xFC56)
-    ("ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM" #xFC57)
-    ("ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM" #xFC58)
-    ("ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM" #xFC59)
-    ("ARABIC LIGATURE YEH WITH YEH ISOLATED FORM" #xFC5A)
-    ("ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5B)
-    ("ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5C)
-    ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5D)
-    ("ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM" #xFC5E)
-    ("ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM" #xFC5F)
-    ("ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM" #xFC60)
-    ("ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM" #xFC61)
-    ("ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM" #xFC62)
-    ("ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC63)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM" #xFC64)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM" #xFC65)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM" #xFC66)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM" #xFC67)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFC68)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM" #xFC69)
-    ("ARABIC LIGATURE BEH WITH REH FINAL FORM" #xFC6A)
-    ("ARABIC LIGATURE BEH WITH ZAIN FINAL FORM" #xFC6B)
-    ("ARABIC LIGATURE BEH WITH MEEM FINAL FORM" #xFC6C)
-    ("ARABIC LIGATURE BEH WITH NOON FINAL FORM" #xFC6D)
-    ("ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM" #xFC6E)
-    ("ARABIC LIGATURE BEH WITH YEH FINAL FORM" #xFC6F)
-    ("ARABIC LIGATURE TEH WITH REH FINAL FORM" #xFC70)
-    ("ARABIC LIGATURE TEH WITH ZAIN FINAL FORM" #xFC71)
-    ("ARABIC LIGATURE TEH WITH MEEM FINAL FORM" #xFC72)
-    ("ARABIC LIGATURE TEH WITH NOON FINAL FORM" #xFC73)
-    ("ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM" #xFC74)
-    ("ARABIC LIGATURE TEH WITH YEH FINAL FORM" #xFC75)
-    ("ARABIC LIGATURE THEH WITH REH FINAL FORM" #xFC76)
-    ("ARABIC LIGATURE THEH WITH ZAIN FINAL FORM" #xFC77)
-    ("ARABIC LIGATURE THEH WITH MEEM FINAL FORM" #xFC78)
-    ("ARABIC LIGATURE THEH WITH NOON FINAL FORM" #xFC79)
-    ("ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM" #xFC7A)
-    ("ARABIC LIGATURE THEH WITH YEH FINAL FORM" #xFC7B)
-    ("ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM" #xFC7C)
-    ("ARABIC LIGATURE FEH WITH YEH FINAL FORM" #xFC7D)
-    ("ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM" #xFC7E)
-    ("ARABIC LIGATURE QAF WITH YEH FINAL FORM" #xFC7F)
-    ("ARABIC LIGATURE KAF WITH ALEF FINAL FORM" #xFC80)
-    ("ARABIC LIGATURE KAF WITH LAM FINAL FORM" #xFC81)
-    ("ARABIC LIGATURE KAF WITH MEEM FINAL FORM" #xFC82)
-    ("ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM" #xFC83)
-    ("ARABIC LIGATURE KAF WITH YEH FINAL FORM" #xFC84)
-    ("ARABIC LIGATURE LAM WITH MEEM FINAL FORM" #xFC85)
-    ("ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM" #xFC86)
-    ("ARABIC LIGATURE LAM WITH YEH FINAL FORM" #xFC87)
-    ("ARABIC LIGATURE MEEM WITH ALEF FINAL FORM" #xFC88)
-    ("ARABIC LIGATURE MEEM WITH MEEM FINAL FORM" #xFC89)
-    ("ARABIC LIGATURE NOON WITH REH FINAL FORM" #xFC8A)
-    ("ARABIC LIGATURE NOON WITH ZAIN FINAL FORM" #xFC8B)
-    ("ARABIC LIGATURE NOON WITH MEEM FINAL FORM" #xFC8C)
-    ("ARABIC LIGATURE NOON WITH NOON FINAL FORM" #xFC8D)
-    ("ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM" #xFC8E)
-    ("ARABIC LIGATURE NOON WITH YEH FINAL FORM" #xFC8F)
-    ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM" #xFC90)
-    ("ARABIC LIGATURE YEH WITH REH FINAL FORM" #xFC91)
-    ("ARABIC LIGATURE YEH WITH ZAIN FINAL FORM" #xFC92)
-    ("ARABIC LIGATURE YEH WITH MEEM FINAL FORM" #xFC93)
-    ("ARABIC LIGATURE YEH WITH NOON FINAL FORM" #xFC94)
-    ("ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM" #xFC95)
-    ("ARABIC LIGATURE YEH WITH YEH FINAL FORM" #xFC96)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM" #xFC97)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM" #xFC98)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM" #xFC99)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM" #xFC9A)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM" #xFC9B)
-    ("ARABIC LIGATURE BEH WITH JEEM INITIAL FORM" #xFC9C)
-    ("ARABIC LIGATURE BEH WITH HAH INITIAL FORM" #xFC9D)
-    ("ARABIC LIGATURE BEH WITH KHAH INITIAL FORM" #xFC9E)
-    ("ARABIC LIGATURE BEH WITH MEEM INITIAL FORM" #xFC9F)
-    ("ARABIC LIGATURE BEH WITH HEH INITIAL FORM" #xFCA0)
-    ("ARABIC LIGATURE TEH WITH JEEM INITIAL FORM" #xFCA1)
-    ("ARABIC LIGATURE TEH WITH HAH INITIAL FORM" #xFCA2)
-    ("ARABIC LIGATURE TEH WITH KHAH INITIAL FORM" #xFCA3)
-    ("ARABIC LIGATURE TEH WITH MEEM INITIAL FORM" #xFCA4)
-    ("ARABIC LIGATURE TEH WITH HEH INITIAL FORM" #xFCA5)
-    ("ARABIC LIGATURE THEH WITH MEEM INITIAL FORM" #xFCA6)
-    ("ARABIC LIGATURE JEEM WITH HAH INITIAL FORM" #xFCA7)
-    ("ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM" #xFCA8)
-    ("ARABIC LIGATURE HAH WITH JEEM INITIAL FORM" #xFCA9)
-    ("ARABIC LIGATURE HAH WITH MEEM INITIAL FORM" #xFCAA)
-    ("ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM" #xFCAB)
-    ("ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM" #xFCAC)
-    ("ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM" #xFCAD)
-    ("ARABIC LIGATURE SEEN WITH HAH INITIAL FORM" #xFCAE)
-    ("ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM" #xFCAF)
-    ("ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM" #xFCB0)
-    ("ARABIC LIGATURE SAD WITH HAH INITIAL FORM" #xFCB1)
-    ("ARABIC LIGATURE SAD WITH KHAH INITIAL FORM" #xFCB2)
-    ("ARABIC LIGATURE SAD WITH MEEM INITIAL FORM" #xFCB3)
-    ("ARABIC LIGATURE DAD WITH JEEM INITIAL FORM" #xFCB4)
-    ("ARABIC LIGATURE DAD WITH HAH INITIAL FORM" #xFCB5)
-    ("ARABIC LIGATURE DAD WITH KHAH INITIAL FORM" #xFCB6)
-    ("ARABIC LIGATURE DAD WITH MEEM INITIAL FORM" #xFCB7)
-    ("ARABIC LIGATURE TAH WITH HAH INITIAL FORM" #xFCB8)
-    ("ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM" #xFCB9)
-    ("ARABIC LIGATURE AIN WITH JEEM INITIAL FORM" #xFCBA)
-    ("ARABIC LIGATURE AIN WITH MEEM INITIAL FORM" #xFCBB)
-    ("ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM" #xFCBC)
-    ("ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM" #xFCBD)
-    ("ARABIC LIGATURE FEH WITH JEEM INITIAL FORM" #xFCBE)
-    ("ARABIC LIGATURE FEH WITH HAH INITIAL FORM" #xFCBF)
-    ("ARABIC LIGATURE FEH WITH KHAH INITIAL FORM" #xFCC0)
-    ("ARABIC LIGATURE FEH WITH MEEM INITIAL FORM" #xFCC1)
-    ("ARABIC LIGATURE QAF WITH HAH INITIAL FORM" #xFCC2)
-    ("ARABIC LIGATURE QAF WITH MEEM INITIAL FORM" #xFCC3)
-    ("ARABIC LIGATURE KAF WITH JEEM INITIAL FORM" #xFCC4)
-    ("ARABIC LIGATURE KAF WITH HAH INITIAL FORM" #xFCC5)
-    ("ARABIC LIGATURE KAF WITH KHAH INITIAL FORM" #xFCC6)
-    ("ARABIC LIGATURE KAF WITH LAM INITIAL FORM" #xFCC7)
-    ("ARABIC LIGATURE KAF WITH MEEM INITIAL FORM" #xFCC8)
-    ("ARABIC LIGATURE LAM WITH JEEM INITIAL FORM" #xFCC9)
-    ("ARABIC LIGATURE LAM WITH HAH INITIAL FORM" #xFCCA)
-    ("ARABIC LIGATURE LAM WITH KHAH INITIAL FORM" #xFCCB)
-    ("ARABIC LIGATURE LAM WITH MEEM INITIAL FORM" #xFCCC)
-    ("ARABIC LIGATURE LAM WITH HEH INITIAL FORM" #xFCCD)
-    ("ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM" #xFCCE)
-    ("ARABIC LIGATURE MEEM WITH HAH INITIAL FORM" #xFCCF)
-    ("ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM" #xFCD0)
-    ("ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM" #xFCD1)
-    ("ARABIC LIGATURE NOON WITH JEEM INITIAL FORM" #xFCD2)
-    ("ARABIC LIGATURE NOON WITH HAH INITIAL FORM" #xFCD3)
-    ("ARABIC LIGATURE NOON WITH KHAH INITIAL FORM" #xFCD4)
-    ("ARABIC LIGATURE NOON WITH MEEM INITIAL FORM" #xFCD5)
-    ("ARABIC LIGATURE NOON WITH HEH INITIAL FORM" #xFCD6)
-    ("ARABIC LIGATURE HEH WITH JEEM INITIAL FORM" #xFCD7)
-    ("ARABIC LIGATURE HEH WITH MEEM INITIAL FORM" #xFCD8)
-    ("ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM" #xFCD9)
-    ("ARABIC LIGATURE YEH WITH JEEM INITIAL FORM" #xFCDA)
-    ("ARABIC LIGATURE YEH WITH HAH INITIAL FORM" #xFCDB)
-    ("ARABIC LIGATURE YEH WITH KHAH INITIAL FORM" #xFCDC)
-    ("ARABIC LIGATURE YEH WITH MEEM INITIAL FORM" #xFCDD)
-    ("ARABIC LIGATURE YEH WITH HEH INITIAL FORM" #xFCDE)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM" #xFCDF)
-    ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM" #xFCE0)
-    ("ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM" #xFCE1)
-    ("ARABIC LIGATURE BEH WITH HEH MEDIAL FORM" #xFCE2)
-    ("ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM" #xFCE3)
-    ("ARABIC LIGATURE TEH WITH HEH MEDIAL FORM" #xFCE4)
-    ("ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM" #xFCE5)
-    ("ARABIC LIGATURE THEH WITH HEH MEDIAL FORM" #xFCE6)
-    ("ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM" #xFCE7)
-    ("ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM" #xFCE8)
-    ("ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM" #xFCE9)
-    ("ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM" #xFCEA)
-    ("ARABIC LIGATURE KAF WITH LAM MEDIAL FORM" #xFCEB)
-    ("ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM" #xFCEC)
-    ("ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM" #xFCED)
-    ("ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM" #xFCEE)
-    ("ARABIC LIGATURE NOON WITH HEH MEDIAL FORM" #xFCEF)
-    ("ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM" #xFCF0)
-    ("ARABIC LIGATURE YEH WITH HEH MEDIAL FORM" #xFCF1)
-    ("ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM" #xFCF2)
-    ("ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM" #xFCF3)
-    ("ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM" #xFCF4)
-    ("ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM" #xFCF5)
-    ("ARABIC LIGATURE TAH WITH YEH ISOLATED FORM" #xFCF6)
-    ("ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF7)
-    ("ARABIC LIGATURE AIN WITH YEH ISOLATED FORM" #xFCF8)
-    ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF9)
-    ("ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM" #xFCFA)
-    ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFB)
-    ("ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM" #xFCFC)
-    ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFD)
-    ("ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM" #xFCFE)
-    ("ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM" #xFCFF)
-    ("ARABIC LIGATURE HAH WITH YEH ISOLATED FORM" #xFD00)
-    ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM" #xFD01)
-    ("ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM" #xFD02)
-    ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM" #xFD03)
-    ("ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM" #xFD04)
-    ("ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM" #xFD05)
-    ("ARABIC LIGATURE SAD WITH YEH ISOLATED FORM" #xFD06)
-    ("ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM" #xFD07)
-    ("ARABIC LIGATURE DAD WITH YEH ISOLATED FORM" #xFD08)
-    ("ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM" #xFD09)
-    ("ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM" #xFD0A)
-    ("ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM" #xFD0B)
-    ("ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM" #xFD0C)
-    ("ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM" #xFD0D)
-    ("ARABIC LIGATURE SEEN WITH REH ISOLATED FORM" #xFD0E)
-    ("ARABIC LIGATURE SAD WITH REH ISOLATED FORM" #xFD0F)
-    ("ARABIC LIGATURE DAD WITH REH ISOLATED FORM" #xFD10)
-    ("ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM" #xFD11)
-    ("ARABIC LIGATURE TAH WITH YEH FINAL FORM" #xFD12)
-    ("ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM" #xFD13)
-    ("ARABIC LIGATURE AIN WITH YEH FINAL FORM" #xFD14)
-    ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM" #xFD15)
-    ("ARABIC LIGATURE GHAIN WITH YEH FINAL FORM" #xFD16)
-    ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM" #xFD17)
-    ("ARABIC LIGATURE SEEN WITH YEH FINAL FORM" #xFD18)
-    ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM" #xFD19)
-    ("ARABIC LIGATURE SHEEN WITH YEH FINAL FORM" #xFD1A)
-    ("ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM" #xFD1B)
-    ("ARABIC LIGATURE HAH WITH YEH FINAL FORM" #xFD1C)
-    ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM" #xFD1D)
-    ("ARABIC LIGATURE JEEM WITH YEH FINAL FORM" #xFD1E)
-    ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM" #xFD1F)
-    ("ARABIC LIGATURE KHAH WITH YEH FINAL FORM" #xFD20)
-    ("ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM" #xFD21)
-    ("ARABIC LIGATURE SAD WITH YEH FINAL FORM" #xFD22)
-    ("ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM" #xFD23)
-    ("ARABIC LIGATURE DAD WITH YEH FINAL FORM" #xFD24)
-    ("ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM" #xFD25)
-    ("ARABIC LIGATURE SHEEN WITH HAH FINAL FORM" #xFD26)
-    ("ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM" #xFD27)
-    ("ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM" #xFD28)
-    ("ARABIC LIGATURE SHEEN WITH REH FINAL FORM" #xFD29)
-    ("ARABIC LIGATURE SEEN WITH REH FINAL FORM" #xFD2A)
-    ("ARABIC LIGATURE SAD WITH REH FINAL FORM" #xFD2B)
-    ("ARABIC LIGATURE DAD WITH REH FINAL FORM" #xFD2C)
-    ("ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM" #xFD2D)
-    ("ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM" #xFD2E)
-    ("ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM" #xFD2F)
-    ("ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM" #xFD30)
-    ("ARABIC LIGATURE SEEN WITH HEH INITIAL FORM" #xFD31)
-    ("ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM" #xFD32)
-    ("ARABIC LIGATURE TAH WITH MEEM INITIAL FORM" #xFD33)
-    ("ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM" #xFD34)
-    ("ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM" #xFD35)
-    ("ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM" #xFD36)
-    ("ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM" #xFD37)
-    ("ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM" #xFD38)
-    ("ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM" #xFD39)
-    ("ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM" #xFD3A)
-    ("ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM" #xFD3B)
-    ("ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM" #xFD3C)
-    ("ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM" #xFD3D)
-    ("ORNATE LEFT PARENTHESIS" #xFD3E)
-    ("ORNATE RIGHT PARENTHESIS" #xFD3F)
-    ("ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM" #xFD50)
-    ("ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM" #xFD51)
-    ("ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM" #xFD52)
-    ("ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM" #xFD53)
-    ("ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM" #xFD54)
-    ("ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM" #xFD55)
-    ("ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM" #xFD56)
-    ("ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM" #xFD57)
-    ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM" #xFD58)
-    ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM" #xFD59)
-    ("ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM" #xFD5A)
-    ("ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD5B)
-    ("ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM" #xFD5C)
-    ("ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM" #xFD5D)
-    ("ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD5E)
-    ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM" #xFD5F)
-    ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM" #xFD60)
-    ("ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM" #xFD61)
-    ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM" #xFD62)
-    ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD63)
-    ("ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM" #xFD64)
-    ("ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM" #xFD65)
-    ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM" #xFD66)
-    ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM" #xFD67)
-    ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM" #xFD68)
-    ("ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM" #xFD69)
-    ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM" #xFD6A)
-    ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM" #xFD6B)
-    ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM" #xFD6C)
-    ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD6D)
-    ("ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD6E)
-    ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM" #xFD6F)
-    ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM" #xFD70)
-    ("ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM" #xFD71)
-    ("ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM" #xFD72)
-    ("ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM" #xFD73)
-    ("ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM" #xFD74)
-    ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM" #xFD75)
-    ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM" #xFD76)
-    ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM" #xFD77)
-    ("ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD78)
-    ("ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM" #xFD79)
-    ("ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM" #xFD7A)
-    ("ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD7B)
-    ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM" #xFD7C)
-    ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM" #xFD7D)
-    ("ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM" #xFD7E)
-    ("ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM" #xFD7F)
-    ("ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM" #xFD80)
-    ("ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM" #xFD81)
-    ("ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD82)
-    ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM" #xFD83)
-    ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM" #xFD84)
-    ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM" #xFD85)
-    ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM" #xFD86)
-    ("ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM" #xFD87)
-    ("ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM" #xFD88)
-    ("ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM" #xFD89)
-    ("ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM" #xFD8A)
-    ("ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM" #xFD8B)
-    ("ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM" #xFD8C)
-    ("ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM" #xFD8D)
-    ("ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM" #xFD8E)
-    ("ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM" #xFD8F)
-    ("ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM" #xFD92)
-    ("ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM" #xFD93)
-    ("ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM" #xFD94)
-    ("ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM" #xFD95)
-    ("ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD96)
-    ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM" #xFD97)
-    ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM" #xFD98)
-    ("ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD99)
-    ("ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM" #xFD9A)
-    ("ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD9B)
-    ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM" #xFD9C)
-    ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM" #xFD9D)
-    ("ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM" #xFD9E)
-    ("ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM" #xFD9F)
-    ("ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFDA0)
-    ("ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM" #xFDA1)
-    ("ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA2)
-    ("ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM" #xFDA3)
-    ("ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA4)
-    ("ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM" #xFDA5)
-    ("ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFDA6)
-    ("ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA7)
-    ("ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA8)
-    ("ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM" #xFDA9)
-    ("ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM" #xFDAA)
-    ("ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM" #xFDAB)
-    ("ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM" #xFDAC)
-    ("ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM" #xFDAD)
-    ("ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM" #xFDAE)
-    ("ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM" #xFDAF)
-    ("ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM" #xFDB0)
-    ("ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM" #xFDB1)
-    ("ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM" #xFDB2)
-    ("ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM" #xFDB3)
-    ("ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM" #xFDB4)
-    ("ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM" #xFDB5)
-    ("ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM" #xFDB6)
-    ("ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM" #xFDB7)
-    ("ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM" #xFDB8)
-    ("ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM" #xFDB9)
-    ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM" #xFDBA)
-    ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM" #xFDBB)
-    ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM" #xFDBC)
-    ("ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM" #xFDBD)
-    ("ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM" #xFDBE)
-    ("ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM" #xFDBF)
-    ("ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM" #xFDC0)
-    ("ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM" #xFDC1)
-    ("ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM" #xFDC2)
-    ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM" #xFDC3)
-    ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM" #xFDC4)
-    ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM" #xFDC5)
-    ("ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM" #xFDC6)
-    ("ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM" #xFDC7)
-    ("ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF0)
-    ("ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF1)
-    ("ARABIC LIGATURE ALLAH ISOLATED FORM" #xFDF2)
-    ("ARABIC LIGATURE AKBAR ISOLATED FORM" #xFDF3)
-    ("ARABIC LIGATURE MOHAMMAD ISOLATED FORM" #xFDF4)
-    ("ARABIC LIGATURE SALAM ISOLATED FORM" #xFDF5)
-    ("ARABIC LIGATURE RASOUL ISOLATED FORM" #xFDF6)
-    ("ARABIC LIGATURE ALAYHE ISOLATED FORM" #xFDF7)
-    ("ARABIC LIGATURE WASALLAM ISOLATED FORM" #xFDF8)
-    ("ARABIC LIGATURE SALLA ISOLATED FORM" #xFDF9)
-    ("ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM" #xFDFA)
-    ("ARABIC LIGATURE JALLAJALALOUHOU" #xFDFB)
-    ("RIAL SIGN" #xFDFC)
-    ))
-
diff --git a/etc/nxml/0FE00-0FE0F.el b/etc/nxml/0FE00-0FE0F.el
deleted file mode 100644 (file)
index 04d855e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(nxml-define-char-name-set 'variation-selectors
-  '(("VARIATION SELECTOR-1" #xFE00)
-    ("VARIATION SELECTOR-2" #xFE01)
-    ("VARIATION SELECTOR-3" #xFE02)
-    ("VARIATION SELECTOR-4" #xFE03)
-    ("VARIATION SELECTOR-5" #xFE04)
-    ("VARIATION SELECTOR-6" #xFE05)
-    ("VARIATION SELECTOR-7" #xFE06)
-    ("VARIATION SELECTOR-8" #xFE07)
-    ("VARIATION SELECTOR-9" #xFE08)
-    ("VARIATION SELECTOR-10" #xFE09)
-    ("VARIATION SELECTOR-11" #xFE0A)
-    ("VARIATION SELECTOR-12" #xFE0B)
-    ("VARIATION SELECTOR-13" #xFE0C)
-    ("VARIATION SELECTOR-14" #xFE0D)
-    ("VARIATION SELECTOR-15" #xFE0E)
-    ("VARIATION SELECTOR-16" #xFE0F)
-    ))
-
diff --git a/etc/nxml/0FE20-0FE2F.el b/etc/nxml/0FE20-0FE2F.el
deleted file mode 100644 (file)
index f2c9ae8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-(nxml-define-char-name-set 'combining-half-marks
-  '(("COMBINING LIGATURE LEFT HALF" #xFE20)
-    ("COMBINING LIGATURE RIGHT HALF" #xFE21)
-    ("COMBINING DOUBLE TILDE LEFT HALF" #xFE22)
-    ("COMBINING DOUBLE TILDE RIGHT HALF" #xFE23)
-    ))
-
diff --git a/etc/nxml/0FE30-0FE4F.el b/etc/nxml/0FE30-0FE4F.el
deleted file mode 100644 (file)
index cef6a39..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(nxml-define-char-name-set 'cjk-compatibility-forms
-  '(("PRESENTATION FORM FOR VERTICAL TWO DOT LEADER" #xFE30)
-    ("PRESENTATION FORM FOR VERTICAL EM DASH" #xFE31)
-    ("PRESENTATION FORM FOR VERTICAL EN DASH" #xFE32)
-    ("PRESENTATION FORM FOR VERTICAL LOW LINE" #xFE33)
-    ("PRESENTATION FORM FOR VERTICAL WAVY LOW LINE" #xFE34)
-    ("PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS" #xFE35)
-    ("PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS" #xFE36)
-    ("PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET" #xFE37)
-    ("PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET" #xFE38)
-    ("PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET" #xFE39)
-    ("PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET" #xFE3A)
-    ("PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET" #xFE3B)
-    ("PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET" #xFE3C)
-    ("PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET" #xFE3D)
-    ("PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET" #xFE3E)
-    ("PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET" #xFE3F)
-    ("PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET" #xFE40)
-    ("PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET" #xFE41)
-    ("PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET" #xFE42)
-    ("PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET" #xFE43)
-    ("PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET" #xFE44)
-    ("SESAME DOT" #xFE45)
-    ("WHITE SESAME DOT" #xFE46)
-    ("DASHED OVERLINE" #xFE49)
-    ("CENTRELINE OVERLINE" #xFE4A)
-    ("WAVY OVERLINE" #xFE4B)
-    ("DOUBLE WAVY OVERLINE" #xFE4C)
-    ("DASHED LOW LINE" #xFE4D)
-    ("CENTRELINE LOW LINE" #xFE4E)
-    ("WAVY LOW LINE" #xFE4F)
-    ))
-
diff --git a/etc/nxml/0FE50-0FE6F.el b/etc/nxml/0FE50-0FE6F.el
deleted file mode 100644 (file)
index eda9e89..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-(nxml-define-char-name-set 'small-form-variants
-  '(("SMALL COMMA" #xFE50)
-    ("SMALL IDEOGRAPHIC COMMA" #xFE51)
-    ("SMALL FULL STOP" #xFE52)
-    ("SMALL SEMICOLON" #xFE54)
-    ("SMALL COLON" #xFE55)
-    ("SMALL QUESTION MARK" #xFE56)
-    ("SMALL EXCLAMATION MARK" #xFE57)
-    ("SMALL EM DASH" #xFE58)
-    ("SMALL LEFT PARENTHESIS" #xFE59)
-    ("SMALL RIGHT PARENTHESIS" #xFE5A)
-    ("SMALL LEFT CURLY BRACKET" #xFE5B)
-    ("SMALL RIGHT CURLY BRACKET" #xFE5C)
-    ("SMALL LEFT TORTOISE SHELL BRACKET" #xFE5D)
-    ("SMALL RIGHT TORTOISE SHELL BRACKET" #xFE5E)
-    ("SMALL NUMBER SIGN" #xFE5F)
-    ("SMALL AMPERSAND" #xFE60)
-    ("SMALL ASTERISK" #xFE61)
-    ("SMALL PLUS SIGN" #xFE62)
-    ("SMALL HYPHEN-MINUS" #xFE63)
-    ("SMALL LESS-THAN SIGN" #xFE64)
-    ("SMALL GREATER-THAN SIGN" #xFE65)
-    ("SMALL EQUALS SIGN" #xFE66)
-    ("SMALL REVERSE SOLIDUS" #xFE68)
-    ("SMALL DOLLAR SIGN" #xFE69)
-    ("SMALL PERCENT SIGN" #xFE6A)
-    ("SMALL COMMERCIAL AT" #xFE6B)
-    ))
-
diff --git a/etc/nxml/0FE70-0FEFF.el b/etc/nxml/0FE70-0FEFF.el
deleted file mode 100644 (file)
index 4de14be..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-(nxml-define-char-name-set 'arabic-presentation-forms-b
-  '(("ARABIC FATHATAN ISOLATED FORM" #xFE70)
-    ("ARABIC TATWEEL WITH FATHATAN ABOVE" #xFE71)
-    ("ARABIC DAMMATAN ISOLATED FORM" #xFE72)
-    ("ARABIC TAIL FRAGMENT" #xFE73)
-    ("ARABIC KASRATAN ISOLATED FORM" #xFE74)
-    ("ARABIC FATHA ISOLATED FORM" #xFE76)
-    ("ARABIC FATHA MEDIAL FORM" #xFE77)
-    ("ARABIC DAMMA ISOLATED FORM" #xFE78)
-    ("ARABIC DAMMA MEDIAL FORM" #xFE79)
-    ("ARABIC KASRA ISOLATED FORM" #xFE7A)
-    ("ARABIC KASRA MEDIAL FORM" #xFE7B)
-    ("ARABIC SHADDA ISOLATED FORM" #xFE7C)
-    ("ARABIC SHADDA MEDIAL FORM" #xFE7D)
-    ("ARABIC SUKUN ISOLATED FORM" #xFE7E)
-    ("ARABIC SUKUN MEDIAL FORM" #xFE7F)
-    ("ARABIC LETTER HAMZA ISOLATED FORM" #xFE80)
-    ("ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM" #xFE81)
-    ("ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM" #xFE82)
-    ("ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFE83)
-    ("ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM" #xFE84)
-    ("ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM" #xFE85)
-    ("ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM" #xFE86)
-    ("ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM" #xFE87)
-    ("ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM" #xFE88)
-    ("ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM" #xFE89)
-    ("ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM" #xFE8A)
-    ("ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM" #xFE8B)
-    ("ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM" #xFE8C)
-    ("ARABIC LETTER ALEF ISOLATED FORM" #xFE8D)
-    ("ARABIC LETTER ALEF FINAL FORM" #xFE8E)
-    ("ARABIC LETTER BEH ISOLATED FORM" #xFE8F)
-    ("ARABIC LETTER BEH FINAL FORM" #xFE90)
-    ("ARABIC LETTER BEH INITIAL FORM" #xFE91)
-    ("ARABIC LETTER BEH MEDIAL FORM" #xFE92)
-    ("ARABIC LETTER TEH MARBUTA ISOLATED FORM" #xFE93)
-    ("ARABIC LETTER TEH MARBUTA FINAL FORM" #xFE94)
-    ("ARABIC LETTER TEH ISOLATED FORM" #xFE95)
-    ("ARABIC LETTER TEH FINAL FORM" #xFE96)
-    ("ARABIC LETTER TEH INITIAL FORM" #xFE97)
-    ("ARABIC LETTER TEH MEDIAL FORM" #xFE98)
-    ("ARABIC LETTER THEH ISOLATED FORM" #xFE99)
-    ("ARABIC LETTER THEH FINAL FORM" #xFE9A)
-    ("ARABIC LETTER THEH INITIAL FORM" #xFE9B)
-    ("ARABIC LETTER THEH MEDIAL FORM" #xFE9C)
-    ("ARABIC LETTER JEEM ISOLATED FORM" #xFE9D)
-    ("ARABIC LETTER JEEM FINAL FORM" #xFE9E)
-    ("ARABIC LETTER JEEM INITIAL FORM" #xFE9F)
-    ("ARABIC LETTER JEEM MEDIAL FORM" #xFEA0)
-    ("ARABIC LETTER HAH ISOLATED FORM" #xFEA1)
-    ("ARABIC LETTER HAH FINAL FORM" #xFEA2)
-    ("ARABIC LETTER HAH INITIAL FORM" #xFEA3)
-    ("ARABIC LETTER HAH MEDIAL FORM" #xFEA4)
-    ("ARABIC LETTER KHAH ISOLATED FORM" #xFEA5)
-    ("ARABIC LETTER KHAH FINAL FORM" #xFEA6)
-    ("ARABIC LETTER KHAH INITIAL FORM" #xFEA7)
-    ("ARABIC LETTER KHAH MEDIAL FORM" #xFEA8)
-    ("ARABIC LETTER DAL ISOLATED FORM" #xFEA9)
-    ("ARABIC LETTER DAL FINAL FORM" #xFEAA)
-    ("ARABIC LETTER THAL ISOLATED FORM" #xFEAB)
-    ("ARABIC LETTER THAL FINAL FORM" #xFEAC)
-    ("ARABIC LETTER REH ISOLATED FORM" #xFEAD)
-    ("ARABIC LETTER REH FINAL FORM" #xFEAE)
-    ("ARABIC LETTER ZAIN ISOLATED FORM" #xFEAF)
-    ("ARABIC LETTER ZAIN FINAL FORM" #xFEB0)
-    ("ARABIC LETTER SEEN ISOLATED FORM" #xFEB1)
-    ("ARABIC LETTER SEEN FINAL FORM" #xFEB2)
-    ("ARABIC LETTER SEEN INITIAL FORM" #xFEB3)
-    ("ARABIC LETTER SEEN MEDIAL FORM" #xFEB4)
-    ("ARABIC LETTER SHEEN ISOLATED FORM" #xFEB5)
-    ("ARABIC LETTER SHEEN FINAL FORM" #xFEB6)
-    ("ARABIC LETTER SHEEN INITIAL FORM" #xFEB7)
-    ("ARABIC LETTER SHEEN MEDIAL FORM" #xFEB8)
-    ("ARABIC LETTER SAD ISOLATED FORM" #xFEB9)
-    ("ARABIC LETTER SAD FINAL FORM" #xFEBA)
-    ("ARABIC LETTER SAD INITIAL FORM" #xFEBB)
-    ("ARABIC LETTER SAD MEDIAL FORM" #xFEBC)
-    ("ARABIC LETTER DAD ISOLATED FORM" #xFEBD)
-    ("ARABIC LETTER DAD FINAL FORM" #xFEBE)
-    ("ARABIC LETTER DAD INITIAL FORM" #xFEBF)
-    ("ARABIC LETTER DAD MEDIAL FORM" #xFEC0)
-    ("ARABIC LETTER TAH ISOLATED FORM" #xFEC1)
-    ("ARABIC LETTER TAH FINAL FORM" #xFEC2)
-    ("ARABIC LETTER TAH INITIAL FORM" #xFEC3)
-    ("ARABIC LETTER TAH MEDIAL FORM" #xFEC4)
-    ("ARABIC LETTER ZAH ISOLATED FORM" #xFEC5)
-    ("ARABIC LETTER ZAH FINAL FORM" #xFEC6)
-    ("ARABIC LETTER ZAH INITIAL FORM" #xFEC7)
-    ("ARABIC LETTER ZAH MEDIAL FORM" #xFEC8)
-    ("ARABIC LETTER AIN ISOLATED FORM" #xFEC9)
-    ("ARABIC LETTER AIN FINAL FORM" #xFECA)
-    ("ARABIC LETTER AIN INITIAL FORM" #xFECB)
-    ("ARABIC LETTER AIN MEDIAL FORM" #xFECC)
-    ("ARABIC LETTER GHAIN ISOLATED FORM" #xFECD)
-    ("ARABIC LETTER GHAIN FINAL FORM" #xFECE)
-    ("ARABIC LETTER GHAIN INITIAL FORM" #xFECF)
-    ("ARABIC LETTER GHAIN MEDIAL FORM" #xFED0)
-    ("ARABIC LETTER FEH ISOLATED FORM" #xFED1)
-    ("ARABIC LETTER FEH FINAL FORM" #xFED2)
-    ("ARABIC LETTER FEH INITIAL FORM" #xFED3)
-    ("ARABIC LETTER FEH MEDIAL FORM" #xFED4)
-    ("ARABIC LETTER QAF ISOLATED FORM" #xFED5)
-    ("ARABIC LETTER QAF FINAL FORM" #xFED6)
-    ("ARABIC LETTER QAF INITIAL FORM" #xFED7)
-    ("ARABIC LETTER QAF MEDIAL FORM" #xFED8)
-    ("ARABIC LETTER KAF ISOLATED FORM" #xFED9)
-    ("ARABIC LETTER KAF FINAL FORM" #xFEDA)
-    ("ARABIC LETTER KAF INITIAL FORM" #xFEDB)
-    ("ARABIC LETTER KAF MEDIAL FORM" #xFEDC)
-    ("ARABIC LETTER LAM ISOLATED FORM" #xFEDD)
-    ("ARABIC LETTER LAM FINAL FORM" #xFEDE)
-    ("ARABIC LETTER LAM INITIAL FORM" #xFEDF)
-    ("ARABIC LETTER LAM MEDIAL FORM" #xFEE0)
-    ("ARABIC LETTER MEEM ISOLATED FORM" #xFEE1)
-    ("ARABIC LETTER MEEM FINAL FORM" #xFEE2)
-    ("ARABIC LETTER MEEM INITIAL FORM" #xFEE3)
-    ("ARABIC LETTER MEEM MEDIAL FORM" #xFEE4)
-    ("ARABIC LETTER NOON ISOLATED FORM" #xFEE5)
-    ("ARABIC LETTER NOON FINAL FORM" #xFEE6)
-    ("ARABIC LETTER NOON INITIAL FORM" #xFEE7)
-    ("ARABIC LETTER NOON MEDIAL FORM" #xFEE8)
-    ("ARABIC LETTER HEH ISOLATED FORM" #xFEE9)
-    ("ARABIC LETTER HEH FINAL FORM" #xFEEA)
-    ("ARABIC LETTER HEH INITIAL FORM" #xFEEB)
-    ("ARABIC LETTER HEH MEDIAL FORM" #xFEEC)
-    ("ARABIC LETTER WAW ISOLATED FORM" #xFEED)
-    ("ARABIC LETTER WAW FINAL FORM" #xFEEE)
-    ("ARABIC LETTER ALEF MAKSURA ISOLATED FORM" #xFEEF)
-    ("ARABIC LETTER ALEF MAKSURA FINAL FORM" #xFEF0)
-    ("ARABIC LETTER YEH ISOLATED FORM" #xFEF1)
-    ("ARABIC LETTER YEH FINAL FORM" #xFEF2)
-    ("ARABIC LETTER YEH INITIAL FORM" #xFEF3)
-    ("ARABIC LETTER YEH MEDIAL FORM" #xFEF4)
-    ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM" #xFEF5)
-    ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM" #xFEF6)
-    ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFEF7)
-    ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM" #xFEF8)
-    ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM" #xFEF9)
-    ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM" #xFEFA)
-    ("ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM" #xFEFB)
-    ("ARABIC LIGATURE LAM WITH ALEF FINAL FORM" #xFEFC)
-    ("ZERO WIDTH NO-BREAK SPACE" #xFEFF)
-    ))
-
diff --git a/etc/nxml/0FF00-0FFEF.el b/etc/nxml/0FF00-0FFEF.el
deleted file mode 100644 (file)
index a2134af..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-(nxml-define-char-name-set 'halfwidth-and-fullwidth-forms
-  '(("FULLWIDTH EXCLAMATION MARK" #xFF01)
-    ("FULLWIDTH QUOTATION MARK" #xFF02)
-    ("FULLWIDTH NUMBER SIGN" #xFF03)
-    ("FULLWIDTH DOLLAR SIGN" #xFF04)
-    ("FULLWIDTH PERCENT SIGN" #xFF05)
-    ("FULLWIDTH AMPERSAND" #xFF06)
-    ("FULLWIDTH APOSTROPHE" #xFF07)
-    ("FULLWIDTH LEFT PARENTHESIS" #xFF08)
-    ("FULLWIDTH RIGHT PARENTHESIS" #xFF09)
-    ("FULLWIDTH ASTERISK" #xFF0A)
-    ("FULLWIDTH PLUS SIGN" #xFF0B)
-    ("FULLWIDTH COMMA" #xFF0C)
-    ("FULLWIDTH HYPHEN-MINUS" #xFF0D)
-    ("FULLWIDTH FULL STOP" #xFF0E)
-    ("FULLWIDTH SOLIDUS" #xFF0F)
-    ("FULLWIDTH DIGIT ZERO" #xFF10)
-    ("FULLWIDTH DIGIT ONE" #xFF11)
-    ("FULLWIDTH DIGIT TWO" #xFF12)
-    ("FULLWIDTH DIGIT THREE" #xFF13)
-    ("FULLWIDTH DIGIT FOUR" #xFF14)
-    ("FULLWIDTH DIGIT FIVE" #xFF15)
-    ("FULLWIDTH DIGIT SIX" #xFF16)
-    ("FULLWIDTH DIGIT SEVEN" #xFF17)
-    ("FULLWIDTH DIGIT EIGHT" #xFF18)
-    ("FULLWIDTH DIGIT NINE" #xFF19)
-    ("FULLWIDTH COLON" #xFF1A)
-    ("FULLWIDTH SEMICOLON" #xFF1B)
-    ("FULLWIDTH LESS-THAN SIGN" #xFF1C)
-    ("FULLWIDTH EQUALS SIGN" #xFF1D)
-    ("FULLWIDTH GREATER-THAN SIGN" #xFF1E)
-    ("FULLWIDTH QUESTION MARK" #xFF1F)
-    ("FULLWIDTH COMMERCIAL AT" #xFF20)
-    ("FULLWIDTH LATIN CAPITAL LETTER A" #xFF21)
-    ("FULLWIDTH LATIN CAPITAL LETTER B" #xFF22)
-    ("FULLWIDTH LATIN CAPITAL LETTER C" #xFF23)
-    ("FULLWIDTH LATIN CAPITAL LETTER D" #xFF24)
-    ("FULLWIDTH LATIN CAPITAL LETTER E" #xFF25)
-    ("FULLWIDTH LATIN CAPITAL LETTER F" #xFF26)
-    ("FULLWIDTH LATIN CAPITAL LETTER G" #xFF27)
-    ("FULLWIDTH LATIN CAPITAL LETTER H" #xFF28)
-    ("FULLWIDTH LATIN CAPITAL LETTER I" #xFF29)
-    ("FULLWIDTH LATIN CAPITAL LETTER J" #xFF2A)
-    ("FULLWIDTH LATIN CAPITAL LETTER K" #xFF2B)
-    ("FULLWIDTH LATIN CAPITAL LETTER L" #xFF2C)
-    ("FULLWIDTH LATIN CAPITAL LETTER M" #xFF2D)
-    ("FULLWIDTH LATIN CAPITAL LETTER N" #xFF2E)
-    ("FULLWIDTH LATIN CAPITAL LETTER O" #xFF2F)
-    ("FULLWIDTH LATIN CAPITAL LETTER P" #xFF30)
-    ("FULLWIDTH LATIN CAPITAL LETTER Q" #xFF31)
-    ("FULLWIDTH LATIN CAPITAL LETTER R" #xFF32)
-    ("FULLWIDTH LATIN CAPITAL LETTER S" #xFF33)
-    ("FULLWIDTH LATIN CAPITAL LETTER T" #xFF34)
-    ("FULLWIDTH LATIN CAPITAL LETTER U" #xFF35)
-    ("FULLWIDTH LATIN CAPITAL LETTER V" #xFF36)
-    ("FULLWIDTH LATIN CAPITAL LETTER W" #xFF37)
-    ("FULLWIDTH LATIN CAPITAL LETTER X" #xFF38)
-    ("FULLWIDTH LATIN CAPITAL LETTER Y" #xFF39)
-    ("FULLWIDTH LATIN CAPITAL LETTER Z" #xFF3A)
-    ("FULLWIDTH LEFT SQUARE BRACKET" #xFF3B)
-    ("FULLWIDTH REVERSE SOLIDUS" #xFF3C)
-    ("FULLWIDTH RIGHT SQUARE BRACKET" #xFF3D)
-    ("FULLWIDTH CIRCUMFLEX ACCENT" #xFF3E)
-    ("FULLWIDTH LOW LINE" #xFF3F)
-    ("FULLWIDTH GRAVE ACCENT" #xFF40)
-    ("FULLWIDTH LATIN SMALL LETTER A" #xFF41)
-    ("FULLWIDTH LATIN SMALL LETTER B" #xFF42)
-    ("FULLWIDTH LATIN SMALL LETTER C" #xFF43)
-    ("FULLWIDTH LATIN SMALL LETTER D" #xFF44)
-    ("FULLWIDTH LATIN SMALL LETTER E" #xFF45)
-    ("FULLWIDTH LATIN SMALL LETTER F" #xFF46)
-    ("FULLWIDTH LATIN SMALL LETTER G" #xFF47)
-    ("FULLWIDTH LATIN SMALL LETTER H" #xFF48)
-    ("FULLWIDTH LATIN SMALL LETTER I" #xFF49)
-    ("FULLWIDTH LATIN SMALL LETTER J" #xFF4A)
-    ("FULLWIDTH LATIN SMALL LETTER K" #xFF4B)
-    ("FULLWIDTH LATIN SMALL LETTER L" #xFF4C)
-    ("FULLWIDTH LATIN SMALL LETTER M" #xFF4D)
-    ("FULLWIDTH LATIN SMALL LETTER N" #xFF4E)
-    ("FULLWIDTH LATIN SMALL LETTER O" #xFF4F)
-    ("FULLWIDTH LATIN SMALL LETTER P" #xFF50)
-    ("FULLWIDTH LATIN SMALL LETTER Q" #xFF51)
-    ("FULLWIDTH LATIN SMALL LETTER R" #xFF52)
-    ("FULLWIDTH LATIN SMALL LETTER S" #xFF53)
-    ("FULLWIDTH LATIN SMALL LETTER T" #xFF54)
-    ("FULLWIDTH LATIN SMALL LETTER U" #xFF55)
-    ("FULLWIDTH LATIN SMALL LETTER V" #xFF56)
-    ("FULLWIDTH LATIN SMALL LETTER W" #xFF57)
-    ("FULLWIDTH LATIN SMALL LETTER X" #xFF58)
-    ("FULLWIDTH LATIN SMALL LETTER Y" #xFF59)
-    ("FULLWIDTH LATIN SMALL LETTER Z" #xFF5A)
-    ("FULLWIDTH LEFT CURLY BRACKET" #xFF5B)
-    ("FULLWIDTH VERTICAL LINE" #xFF5C)
-    ("FULLWIDTH RIGHT CURLY BRACKET" #xFF5D)
-    ("FULLWIDTH TILDE" #xFF5E)
-    ("FULLWIDTH LEFT WHITE PARENTHESIS" #xFF5F)
-    ("FULLWIDTH RIGHT WHITE PARENTHESIS" #xFF60)
-    ("HALFWIDTH IDEOGRAPHIC FULL STOP" #xFF61)
-    ("HALFWIDTH LEFT CORNER BRACKET" #xFF62)
-    ("HALFWIDTH RIGHT CORNER BRACKET" #xFF63)
-    ("HALFWIDTH IDEOGRAPHIC COMMA" #xFF64)
-    ("HALFWIDTH KATAKANA MIDDLE DOT" #xFF65)
-    ("HALFWIDTH KATAKANA LETTER WO" #xFF66)
-    ("HALFWIDTH KATAKANA LETTER SMALL A" #xFF67)
-    ("HALFWIDTH KATAKANA LETTER SMALL I" #xFF68)
-    ("HALFWIDTH KATAKANA LETTER SMALL U" #xFF69)
-    ("HALFWIDTH KATAKANA LETTER SMALL E" #xFF6A)
-    ("HALFWIDTH KATAKANA LETTER SMALL O" #xFF6B)
-    ("HALFWIDTH KATAKANA LETTER SMALL YA" #xFF6C)
-    ("HALFWIDTH KATAKANA LETTER SMALL YU" #xFF6D)
-    ("HALFWIDTH KATAKANA LETTER SMALL YO" #xFF6E)
-    ("HALFWIDTH KATAKANA LETTER SMALL TU" #xFF6F)
-    ("HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK" #xFF70)
-    ("HALFWIDTH KATAKANA LETTER A" #xFF71)
-    ("HALFWIDTH KATAKANA LETTER I" #xFF72)
-    ("HALFWIDTH KATAKANA LETTER U" #xFF73)
-    ("HALFWIDTH KATAKANA LETTER E" #xFF74)
-    ("HALFWIDTH KATAKANA LETTER O" #xFF75)
-    ("HALFWIDTH KATAKANA LETTER KA" #xFF76)
-    ("HALFWIDTH KATAKANA LETTER KI" #xFF77)
-    ("HALFWIDTH KATAKANA LETTER KU" #xFF78)
-    ("HALFWIDTH KATAKANA LETTER KE" #xFF79)
-    ("HALFWIDTH KATAKANA LETTER KO" #xFF7A)
-    ("HALFWIDTH KATAKANA LETTER SA" #xFF7B)
-    ("HALFWIDTH KATAKANA LETTER SI" #xFF7C)
-    ("HALFWIDTH KATAKANA LETTER SU" #xFF7D)
-    ("HALFWIDTH KATAKANA LETTER SE" #xFF7E)
-    ("HALFWIDTH KATAKANA LETTER SO" #xFF7F)
-    ("HALFWIDTH KATAKANA LETTER TA" #xFF80)
-    ("HALFWIDTH KATAKANA LETTER TI" #xFF81)
-    ("HALFWIDTH KATAKANA LETTER TU" #xFF82)
-    ("HALFWIDTH KATAKANA LETTER TE" #xFF83)
-    ("HALFWIDTH KATAKANA LETTER TO" #xFF84)
-    ("HALFWIDTH KATAKANA LETTER NA" #xFF85)
-    ("HALFWIDTH KATAKANA LETTER NI" #xFF86)
-    ("HALFWIDTH KATAKANA LETTER NU" #xFF87)
-    ("HALFWIDTH KATAKANA LETTER NE" #xFF88)
-    ("HALFWIDTH KATAKANA LETTER NO" #xFF89)
-    ("HALFWIDTH KATAKANA LETTER HA" #xFF8A)
-    ("HALFWIDTH KATAKANA LETTER HI" #xFF8B)
-    ("HALFWIDTH KATAKANA LETTER HU" #xFF8C)
-    ("HALFWIDTH KATAKANA LETTER HE" #xFF8D)
-    ("HALFWIDTH KATAKANA LETTER HO" #xFF8E)
-    ("HALFWIDTH KATAKANA LETTER MA" #xFF8F)
-    ("HALFWIDTH KATAKANA LETTER MI" #xFF90)
-    ("HALFWIDTH KATAKANA LETTER MU" #xFF91)
-    ("HALFWIDTH KATAKANA LETTER ME" #xFF92)
-    ("HALFWIDTH KATAKANA LETTER MO" #xFF93)
-    ("HALFWIDTH KATAKANA LETTER YA" #xFF94)
-    ("HALFWIDTH KATAKANA LETTER YU" #xFF95)
-    ("HALFWIDTH KATAKANA LETTER YO" #xFF96)
-    ("HALFWIDTH KATAKANA LETTER RA" #xFF97)
-    ("HALFWIDTH KATAKANA LETTER RI" #xFF98)
-    ("HALFWIDTH KATAKANA LETTER RU" #xFF99)
-    ("HALFWIDTH KATAKANA LETTER RE" #xFF9A)
-    ("HALFWIDTH KATAKANA LETTER RO" #xFF9B)
-    ("HALFWIDTH KATAKANA LETTER WA" #xFF9C)
-    ("HALFWIDTH KATAKANA LETTER N" #xFF9D)
-    ("HALFWIDTH KATAKANA VOICED SOUND MARK" #xFF9E)
-    ("HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK" #xFF9F)
-    ("HALFWIDTH HANGUL FILLER" #xFFA0)
-    ("HALFWIDTH HANGUL LETTER KIYEOK" #xFFA1)
-    ("HALFWIDTH HANGUL LETTER SSANGKIYEOK" #xFFA2)
-    ("HALFWIDTH HANGUL LETTER KIYEOK-SIOS" #xFFA3)
-    ("HALFWIDTH HANGUL LETTER NIEUN" #xFFA4)
-    ("HALFWIDTH HANGUL LETTER NIEUN-CIEUC" #xFFA5)
-    ("HALFWIDTH HANGUL LETTER NIEUN-HIEUH" #xFFA6)
-    ("HALFWIDTH HANGUL LETTER TIKEUT" #xFFA7)
-    ("HALFWIDTH HANGUL LETTER SSANGTIKEUT" #xFFA8)
-    ("HALFWIDTH HANGUL LETTER RIEUL" #xFFA9)
-    ("HALFWIDTH HANGUL LETTER RIEUL-KIYEOK" #xFFAA)
-    ("HALFWIDTH HANGUL LETTER RIEUL-MIEUM" #xFFAB)
-    ("HALFWIDTH HANGUL LETTER RIEUL-PIEUP" #xFFAC)
-    ("HALFWIDTH HANGUL LETTER RIEUL-SIOS" #xFFAD)
-    ("HALFWIDTH HANGUL LETTER RIEUL-THIEUTH" #xFFAE)
-    ("HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH" #xFFAF)
-    ("HALFWIDTH HANGUL LETTER RIEUL-HIEUH" #xFFB0)
-    ("HALFWIDTH HANGUL LETTER MIEUM" #xFFB1)
-    ("HALFWIDTH HANGUL LETTER PIEUP" #xFFB2)
-    ("HALFWIDTH HANGUL LETTER SSANGPIEUP" #xFFB3)
-    ("HALFWIDTH HANGUL LETTER PIEUP-SIOS" #xFFB4)
-    ("HALFWIDTH HANGUL LETTER SIOS" #xFFB5)
-    ("HALFWIDTH HANGUL LETTER SSANGSIOS" #xFFB6)
-    ("HALFWIDTH HANGUL LETTER IEUNG" #xFFB7)
-    ("HALFWIDTH HANGUL LETTER CIEUC" #xFFB8)
-    ("HALFWIDTH HANGUL LETTER SSANGCIEUC" #xFFB9)
-    ("HALFWIDTH HANGUL LETTER CHIEUCH" #xFFBA)
-    ("HALFWIDTH HANGUL LETTER KHIEUKH" #xFFBB)
-    ("HALFWIDTH HANGUL LETTER THIEUTH" #xFFBC)
-    ("HALFWIDTH HANGUL LETTER PHIEUPH" #xFFBD)
-    ("HALFWIDTH HANGUL LETTER HIEUH" #xFFBE)
-    ("HALFWIDTH HANGUL LETTER A" #xFFC2)
-    ("HALFWIDTH HANGUL LETTER AE" #xFFC3)
-    ("HALFWIDTH HANGUL LETTER YA" #xFFC4)
-    ("HALFWIDTH HANGUL LETTER YAE" #xFFC5)
-    ("HALFWIDTH HANGUL LETTER EO" #xFFC6)
-    ("HALFWIDTH HANGUL LETTER E" #xFFC7)
-    ("HALFWIDTH HANGUL LETTER YEO" #xFFCA)
-    ("HALFWIDTH HANGUL LETTER YE" #xFFCB)
-    ("HALFWIDTH HANGUL LETTER O" #xFFCC)
-    ("HALFWIDTH HANGUL LETTER WA" #xFFCD)
-    ("HALFWIDTH HANGUL LETTER WAE" #xFFCE)
-    ("HALFWIDTH HANGUL LETTER OE" #xFFCF)
-    ("HALFWIDTH HANGUL LETTER YO" #xFFD2)
-    ("HALFWIDTH HANGUL LETTER U" #xFFD3)
-    ("HALFWIDTH HANGUL LETTER WEO" #xFFD4)
-    ("HALFWIDTH HANGUL LETTER WE" #xFFD5)
-    ("HALFWIDTH HANGUL LETTER WI" #xFFD6)
-    ("HALFWIDTH HANGUL LETTER YU" #xFFD7)
-    ("HALFWIDTH HANGUL LETTER EU" #xFFDA)
-    ("HALFWIDTH HANGUL LETTER YI" #xFFDB)
-    ("HALFWIDTH HANGUL LETTER I" #xFFDC)
-    ("FULLWIDTH CENT SIGN" #xFFE0)
-    ("FULLWIDTH POUND SIGN" #xFFE1)
-    ("FULLWIDTH NOT SIGN" #xFFE2)
-    ("FULLWIDTH MACRON" #xFFE3)
-    ("FULLWIDTH BROKEN BAR" #xFFE4)
-    ("FULLWIDTH YEN SIGN" #xFFE5)
-    ("FULLWIDTH WON SIGN" #xFFE6)
-    ("HALFWIDTH FORMS LIGHT VERTICAL" #xFFE8)
-    ("HALFWIDTH LEFTWARDS ARROW" #xFFE9)
-    ("HALFWIDTH UPWARDS ARROW" #xFFEA)
-    ("HALFWIDTH RIGHTWARDS ARROW" #xFFEB)
-    ("HALFWIDTH DOWNWARDS ARROW" #xFFEC)
-    ("HALFWIDTH BLACK SQUARE" #xFFED)
-    ("HALFWIDTH WHITE CIRCLE" #xFFEE)
-    ))
-
diff --git a/etc/nxml/0FFF0-0FFFF.el b/etc/nxml/0FFF0-0FFFF.el
deleted file mode 100644 (file)
index e736654..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-(nxml-define-char-name-set 'specials
-  '(("INTERLINEAR ANNOTATION ANCHOR" #xFFF9)
-    ("INTERLINEAR ANNOTATION SEPARATOR" #xFFFA)
-    ("INTERLINEAR ANNOTATION TERMINATOR" #xFFFB)
-    ("OBJECT REPLACEMENT CHARACTER" #xFFFC)
-    ("REPLACEMENT CHARACTER" #xFFFD)
-    ))
-
diff --git a/etc/nxml/10300-1032F.el b/etc/nxml/10300-1032F.el
deleted file mode 100644 (file)
index cf394b5..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-(nxml-define-char-name-set 'old-italic
-  '(("OLD ITALIC LETTER A" #x10300)
-    ("OLD ITALIC LETTER BE" #x10301)
-    ("OLD ITALIC LETTER KE" #x10302)
-    ("OLD ITALIC LETTER DE" #x10303)
-    ("OLD ITALIC LETTER E" #x10304)
-    ("OLD ITALIC LETTER VE" #x10305)
-    ("OLD ITALIC LETTER ZE" #x10306)
-    ("OLD ITALIC LETTER HE" #x10307)
-    ("OLD ITALIC LETTER THE" #x10308)
-    ("OLD ITALIC LETTER I" #x10309)
-    ("OLD ITALIC LETTER KA" #x1030A)
-    ("OLD ITALIC LETTER EL" #x1030B)
-    ("OLD ITALIC LETTER EM" #x1030C)
-    ("OLD ITALIC LETTER EN" #x1030D)
-    ("OLD ITALIC LETTER ESH" #x1030E)
-    ("OLD ITALIC LETTER O" #x1030F)
-    ("OLD ITALIC LETTER PE" #x10310)
-    ("OLD ITALIC LETTER SHE" #x10311)
-    ("OLD ITALIC LETTER KU" #x10312)
-    ("OLD ITALIC LETTER ER" #x10313)
-    ("OLD ITALIC LETTER ES" #x10314)
-    ("OLD ITALIC LETTER TE" #x10315)
-    ("OLD ITALIC LETTER U" #x10316)
-    ("OLD ITALIC LETTER EKS" #x10317)
-    ("OLD ITALIC LETTER PHE" #x10318)
-    ("OLD ITALIC LETTER KHE" #x10319)
-    ("OLD ITALIC LETTER EF" #x1031A)
-    ("OLD ITALIC LETTER ERS" #x1031B)
-    ("OLD ITALIC LETTER CHE" #x1031C)
-    ("OLD ITALIC LETTER II" #x1031D)
-    ("OLD ITALIC LETTER UU" #x1031E)
-    ("OLD ITALIC NUMERAL ONE" #x10320)
-    ("OLD ITALIC NUMERAL FIVE" #x10321)
-    ("OLD ITALIC NUMERAL TEN" #x10322)
-    ("OLD ITALIC NUMERAL FIFTY" #x10323)
-    ))
-
diff --git a/etc/nxml/10330-1034F.el b/etc/nxml/10330-1034F.el
deleted file mode 100644 (file)
index 9c6dfb6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-(nxml-define-char-name-set 'gothic
-  '(("GOTHIC LETTER AHSA" #x10330)
-    ("GOTHIC LETTER BAIRKAN" #x10331)
-    ("GOTHIC LETTER GIBA" #x10332)
-    ("GOTHIC LETTER DAGS" #x10333)
-    ("GOTHIC LETTER AIHVUS" #x10334)
-    ("GOTHIC LETTER QAIRTHRA" #x10335)
-    ("GOTHIC LETTER IUJA" #x10336)
-    ("GOTHIC LETTER HAGL" #x10337)
-    ("GOTHIC LETTER THIUTH" #x10338)
-    ("GOTHIC LETTER EIS" #x10339)
-    ("GOTHIC LETTER KUSMA" #x1033A)
-    ("GOTHIC LETTER LAGUS" #x1033B)
-    ("GOTHIC LETTER MANNA" #x1033C)
-    ("GOTHIC LETTER NAUTHS" #x1033D)
-    ("GOTHIC LETTER JER" #x1033E)
-    ("GOTHIC LETTER URUS" #x1033F)
-    ("GOTHIC LETTER PAIRTHRA" #x10340)
-    ("GOTHIC LETTER NINETY" #x10341)
-    ("GOTHIC LETTER RAIDA" #x10342)
-    ("GOTHIC LETTER SAUIL" #x10343)
-    ("GOTHIC LETTER TEIWS" #x10344)
-    ("GOTHIC LETTER WINJA" #x10345)
-    ("GOTHIC LETTER FAIHU" #x10346)
-    ("GOTHIC LETTER IGGWS" #x10347)
-    ("GOTHIC LETTER HWAIR" #x10348)
-    ("GOTHIC LETTER OTHAL" #x10349)
-    ("GOTHIC LETTER NINE HUNDRED" #x1034A)
-    ))
-
diff --git a/etc/nxml/10400-1044F.el b/etc/nxml/10400-1044F.el
deleted file mode 100644 (file)
index 8aea9e3..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-(nxml-define-char-name-set 'deseret
-  '(("DESERET CAPITAL LETTER LONG I" #x10400)
-    ("DESERET CAPITAL LETTER LONG E" #x10401)
-    ("DESERET CAPITAL LETTER LONG A" #x10402)
-    ("DESERET CAPITAL LETTER LONG AH" #x10403)
-    ("DESERET CAPITAL LETTER LONG O" #x10404)
-    ("DESERET CAPITAL LETTER LONG OO" #x10405)
-    ("DESERET CAPITAL LETTER SHORT I" #x10406)
-    ("DESERET CAPITAL LETTER SHORT E" #x10407)
-    ("DESERET CAPITAL LETTER SHORT A" #x10408)
-    ("DESERET CAPITAL LETTER SHORT AH" #x10409)
-    ("DESERET CAPITAL LETTER SHORT O" #x1040A)
-    ("DESERET CAPITAL LETTER SHORT OO" #x1040B)
-    ("DESERET CAPITAL LETTER AY" #x1040C)
-    ("DESERET CAPITAL LETTER OW" #x1040D)
-    ("DESERET CAPITAL LETTER WU" #x1040E)
-    ("DESERET CAPITAL LETTER YEE" #x1040F)
-    ("DESERET CAPITAL LETTER H" #x10410)
-    ("DESERET CAPITAL LETTER PEE" #x10411)
-    ("DESERET CAPITAL LETTER BEE" #x10412)
-    ("DESERET CAPITAL LETTER TEE" #x10413)
-    ("DESERET CAPITAL LETTER DEE" #x10414)
-    ("DESERET CAPITAL LETTER CHEE" #x10415)
-    ("DESERET CAPITAL LETTER JEE" #x10416)
-    ("DESERET CAPITAL LETTER KAY" #x10417)
-    ("DESERET CAPITAL LETTER GAY" #x10418)
-    ("DESERET CAPITAL LETTER EF" #x10419)
-    ("DESERET CAPITAL LETTER VEE" #x1041A)
-    ("DESERET CAPITAL LETTER ETH" #x1041B)
-    ("DESERET CAPITAL LETTER THEE" #x1041C)
-    ("DESERET CAPITAL LETTER ES" #x1041D)
-    ("DESERET CAPITAL LETTER ZEE" #x1041E)
-    ("DESERET CAPITAL LETTER ESH" #x1041F)
-    ("DESERET CAPITAL LETTER ZHEE" #x10420)
-    ("DESERET CAPITAL LETTER ER" #x10421)
-    ("DESERET CAPITAL LETTER EL" #x10422)
-    ("DESERET CAPITAL LETTER EM" #x10423)
-    ("DESERET CAPITAL LETTER EN" #x10424)
-    ("DESERET CAPITAL LETTER ENG" #x10425)
-    ("DESERET SMALL LETTER LONG I" #x10428)
-    ("DESERET SMALL LETTER LONG E" #x10429)
-    ("DESERET SMALL LETTER LONG A" #x1042A)
-    ("DESERET SMALL LETTER LONG AH" #x1042B)
-    ("DESERET SMALL LETTER LONG O" #x1042C)
-    ("DESERET SMALL LETTER LONG OO" #x1042D)
-    ("DESERET SMALL LETTER SHORT I" #x1042E)
-    ("DESERET SMALL LETTER SHORT E" #x1042F)
-    ("DESERET SMALL LETTER SHORT A" #x10430)
-    ("DESERET SMALL LETTER SHORT AH" #x10431)
-    ("DESERET SMALL LETTER SHORT O" #x10432)
-    ("DESERET SMALL LETTER SHORT OO" #x10433)
-    ("DESERET SMALL LETTER AY" #x10434)
-    ("DESERET SMALL LETTER OW" #x10435)
-    ("DESERET SMALL LETTER WU" #x10436)
-    ("DESERET SMALL LETTER YEE" #x10437)
-    ("DESERET SMALL LETTER H" #x10438)
-    ("DESERET SMALL LETTER PEE" #x10439)
-    ("DESERET SMALL LETTER BEE" #x1043A)
-    ("DESERET SMALL LETTER TEE" #x1043B)
-    ("DESERET SMALL LETTER DEE" #x1043C)
-    ("DESERET SMALL LETTER CHEE" #x1043D)
-    ("DESERET SMALL LETTER JEE" #x1043E)
-    ("DESERET SMALL LETTER KAY" #x1043F)
-    ("DESERET SMALL LETTER GAY" #x10440)
-    ("DESERET SMALL LETTER EF" #x10441)
-    ("DESERET SMALL LETTER VEE" #x10442)
-    ("DESERET SMALL LETTER ETH" #x10443)
-    ("DESERET SMALL LETTER THEE" #x10444)
-    ("DESERET SMALL LETTER ES" #x10445)
-    ("DESERET SMALL LETTER ZEE" #x10446)
-    ("DESERET SMALL LETTER ESH" #x10447)
-    ("DESERET SMALL LETTER ZHEE" #x10448)
-    ("DESERET SMALL LETTER ER" #x10449)
-    ("DESERET SMALL LETTER EL" #x1044A)
-    ("DESERET SMALL LETTER EM" #x1044B)
-    ("DESERET SMALL LETTER EN" #x1044C)
-    ("DESERET SMALL LETTER ENG" #x1044D)
-    ))
-
diff --git a/etc/nxml/1D000-1D0FF.el b/etc/nxml/1D000-1D0FF.el
deleted file mode 100644 (file)
index 5d2eb23..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-(nxml-define-char-name-set 'byzantine-musical-symbols
-  '(("BYZANTINE MUSICAL SYMBOL PSILI" #x1D000)
-    ("BYZANTINE MUSICAL SYMBOL DASEIA" #x1D001)
-    ("BYZANTINE MUSICAL SYMBOL PERISPOMENI" #x1D002)
-    ("BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON" #x1D003)
-    ("BYZANTINE MUSICAL SYMBOL OXEIA DIPLI" #x1D004)
-    ("BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON" #x1D005)
-    ("BYZANTINE MUSICAL SYMBOL VAREIA DIPLI" #x1D006)
-    ("BYZANTINE MUSICAL SYMBOL KATHISTI" #x1D007)
-    ("BYZANTINE MUSICAL SYMBOL SYRMATIKI" #x1D008)
-    ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI" #x1D009)
-    ("BYZANTINE MUSICAL SYMBOL YPOKRISIS" #x1D00A)
-    ("BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI" #x1D00B)
-    ("BYZANTINE MUSICAL SYMBOL KREMASTI" #x1D00C)
-    ("BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON" #x1D00D)
-    ("BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON" #x1D00E)
-    ("BYZANTINE MUSICAL SYMBOL TELEIA" #x1D00F)
-    ("BYZANTINE MUSICAL SYMBOL KENTIMATA" #x1D010)
-    ("BYZANTINE MUSICAL SYMBOL APOSTROFOS" #x1D011)
-    ("BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI" #x1D012)
-    ("BYZANTINE MUSICAL SYMBOL SYNEVMA" #x1D013)
-    ("BYZANTINE MUSICAL SYMBOL THITA" #x1D014)
-    ("BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION" #x1D015)
-    ("BYZANTINE MUSICAL SYMBOL GORGON ARCHAION" #x1D016)
-    ("BYZANTINE MUSICAL SYMBOL PSILON" #x1D017)
-    ("BYZANTINE MUSICAL SYMBOL CHAMILON" #x1D018)
-    ("BYZANTINE MUSICAL SYMBOL VATHY" #x1D019)
-    ("BYZANTINE MUSICAL SYMBOL ISON ARCHAION" #x1D01A)
-    ("BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION" #x1D01B)
-    ("BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION" #x1D01C)
-    ("BYZANTINE MUSICAL SYMBOL SAXIMATA" #x1D01D)
-    ("BYZANTINE MUSICAL SYMBOL PARICHON" #x1D01E)
-    ("BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA" #x1D01F)
-    ("BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION" #x1D020)
-    ("BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION" #x1D021)
-    ("BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION" #x1D022)
-    ("BYZANTINE MUSICAL SYMBOL APOTHEMA" #x1D023)
-    ("BYZANTINE MUSICAL SYMBOL KLASMA" #x1D024)
-    ("BYZANTINE MUSICAL SYMBOL REVMA" #x1D025)
-    ("BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION" #x1D026)
-    ("BYZANTINE MUSICAL SYMBOL TINAGMA" #x1D027)
-    ("BYZANTINE MUSICAL SYMBOL ANATRICHISMA" #x1D028)
-    ("BYZANTINE MUSICAL SYMBOL SEISMA" #x1D029)
-    ("BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION" #x1D02A)
-    ("BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU" #x1D02B)
-    ("BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION" #x1D02C)
-    ("BYZANTINE MUSICAL SYMBOL THEMA" #x1D02D)
-    ("BYZANTINE MUSICAL SYMBOL LEMOI" #x1D02E)
-    ("BYZANTINE MUSICAL SYMBOL DYO" #x1D02F)
-    ("BYZANTINE MUSICAL SYMBOL TRIA" #x1D030)
-    ("BYZANTINE MUSICAL SYMBOL TESSERA" #x1D031)
-    ("BYZANTINE MUSICAL SYMBOL KRATIMATA" #x1D032)
-    ("BYZANTINE MUSICAL SYMBOL APESO EXO NEO" #x1D033)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION" #x1D034)
-    ("BYZANTINE MUSICAL SYMBOL IMIFTHORA" #x1D035)
-    ("BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION" #x1D036)
-    ("BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON" #x1D037)
-    ("BYZANTINE MUSICAL SYMBOL PELASTON" #x1D038)
-    ("BYZANTINE MUSICAL SYMBOL PSIFISTON" #x1D039)
-    ("BYZANTINE MUSICAL SYMBOL KONTEVMA" #x1D03A)
-    ("BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION" #x1D03B)
-    ("BYZANTINE MUSICAL SYMBOL RAPISMA" #x1D03C)
-    ("BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION" #x1D03D)
-    ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION" #x1D03E)
-    ("BYZANTINE MUSICAL SYMBOL ICHADIN" #x1D03F)
-    ("BYZANTINE MUSICAL SYMBOL NANA" #x1D040)
-    ("BYZANTINE MUSICAL SYMBOL PETASMA" #x1D041)
-    ("BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO" #x1D042)
-    ("BYZANTINE MUSICAL SYMBOL TROMIKON ALLO" #x1D043)
-    ("BYZANTINE MUSICAL SYMBOL STRAGGISMATA" #x1D044)
-    ("BYZANTINE MUSICAL SYMBOL GRONTHISMATA" #x1D045)
-    ("BYZANTINE MUSICAL SYMBOL ISON NEO" #x1D046)
-    ("BYZANTINE MUSICAL SYMBOL OLIGON NEO" #x1D047)
-    ("BYZANTINE MUSICAL SYMBOL OXEIA NEO" #x1D048)
-    ("BYZANTINE MUSICAL SYMBOL PETASTI" #x1D049)
-    ("BYZANTINE MUSICAL SYMBOL KOUFISMA" #x1D04A)
-    ("BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA" #x1D04B)
-    ("BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA" #x1D04C)
-    ("BYZANTINE MUSICAL SYMBOL PELASTON NEO" #x1D04D)
-    ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO" #x1D04E)
-    ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO" #x1D04F)
-    ("BYZANTINE MUSICAL SYMBOL YPSILI" #x1D050)
-    ("BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO" #x1D051)
-    ("BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO" #x1D052)
-    ("BYZANTINE MUSICAL SYMBOL YPORROI" #x1D053)
-    ("BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON" #x1D054)
-    ("BYZANTINE MUSICAL SYMBOL ELAFRON" #x1D055)
-    ("BYZANTINE MUSICAL SYMBOL CHAMILI" #x1D056)
-    ("BYZANTINE MUSICAL SYMBOL MIKRON ISON" #x1D057)
-    ("BYZANTINE MUSICAL SYMBOL VAREIA NEO" #x1D058)
-    ("BYZANTINE MUSICAL SYMBOL PIASMA NEO" #x1D059)
-    ("BYZANTINE MUSICAL SYMBOL PSIFISTON NEO" #x1D05A)
-    ("BYZANTINE MUSICAL SYMBOL OMALON" #x1D05B)
-    ("BYZANTINE MUSICAL SYMBOL ANTIKENOMA" #x1D05C)
-    ("BYZANTINE MUSICAL SYMBOL LYGISMA" #x1D05D)
-    ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO" #x1D05E)
-    ("BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO" #x1D05F)
-    ("BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA" #x1D060)
-    ("BYZANTINE MUSICAL SYMBOL KYLISMA" #x1D061)
-    ("BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA" #x1D062)
-    ("BYZANTINE MUSICAL SYMBOL TROMIKON NEO" #x1D063)
-    ("BYZANTINE MUSICAL SYMBOL EKSTREPTON" #x1D064)
-    ("BYZANTINE MUSICAL SYMBOL SYNAGMA NEO" #x1D065)
-    ("BYZANTINE MUSICAL SYMBOL SYRMA" #x1D066)
-    ("BYZANTINE MUSICAL SYMBOL CHOREVMA NEO" #x1D067)
-    ("BYZANTINE MUSICAL SYMBOL EPEGERMA" #x1D068)
-    ("BYZANTINE MUSICAL SYMBOL SEISMA NEO" #x1D069)
-    ("BYZANTINE MUSICAL SYMBOL XIRON KLASMA" #x1D06A)
-    ("BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON" #x1D06B)
-    ("BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA" #x1D06C)
-    ("BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA" #x1D06D)
-    ("BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA" #x1D06E)
-    ("BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA" #x1D06F)
-    ("BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA" #x1D070)
-    ("BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA" #x1D071)
-    ("BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON" #x1D072)
-    ("BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON" #x1D073)
-    ("BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON" #x1D074)
-    ("BYZANTINE MUSICAL SYMBOL OYRANISMA NEO" #x1D075)
-    ("BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO" #x1D076)
-    ("BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO" #x1D077)
-    ("BYZANTINE MUSICAL SYMBOL THEMA APLOUN" #x1D078)
-    ("BYZANTINE MUSICAL SYMBOL THES KAI APOTHES" #x1D079)
-    ("BYZANTINE MUSICAL SYMBOL KATAVASMA" #x1D07A)
-    ("BYZANTINE MUSICAL SYMBOL ENDOFONON" #x1D07B)
-    ("BYZANTINE MUSICAL SYMBOL YFEN KATO" #x1D07C)
-    ("BYZANTINE MUSICAL SYMBOL YFEN ANO" #x1D07D)
-    ("BYZANTINE MUSICAL SYMBOL STAVROS" #x1D07E)
-    ("BYZANTINE MUSICAL SYMBOL KLASMA ANO" #x1D07F)
-    ("BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION" #x1D080)
-    ("BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION" #x1D081)
-    ("BYZANTINE MUSICAL SYMBOL KRATIMA ALLO" #x1D082)
-    ("BYZANTINE MUSICAL SYMBOL KRATIMA NEO" #x1D083)
-    ("BYZANTINE MUSICAL SYMBOL APODERMA NEO" #x1D084)
-    ("BYZANTINE MUSICAL SYMBOL APLI" #x1D085)
-    ("BYZANTINE MUSICAL SYMBOL DIPLI" #x1D086)
-    ("BYZANTINE MUSICAL SYMBOL TRIPLI" #x1D087)
-    ("BYZANTINE MUSICAL SYMBOL TETRAPLI" #x1D088)
-    ("BYZANTINE MUSICAL SYMBOL KORONIS" #x1D089)
-    ("BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU" #x1D08A)
-    ("BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON" #x1D08B)
-    ("BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON" #x1D08C)
-    ("BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON" #x1D08D)
-    ("BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU" #x1D08E)
-    ("BYZANTINE MUSICAL SYMBOL GORGON NEO ANO" #x1D08F)
-    ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA" #x1D090)
-    ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA" #x1D091)
-    ("BYZANTINE MUSICAL SYMBOL DIGORGON" #x1D092)
-    ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO" #x1D093)
-    ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO" #x1D094)
-    ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA" #x1D095)
-    ("BYZANTINE MUSICAL SYMBOL TRIGORGON" #x1D096)
-    ("BYZANTINE MUSICAL SYMBOL ARGON" #x1D097)
-    ("BYZANTINE MUSICAL SYMBOL IMIDIARGON" #x1D098)
-    ("BYZANTINE MUSICAL SYMBOL DIARGON" #x1D099)
-    ("BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI" #x1D09A)
-    ("BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI" #x1D09B)
-    ("BYZANTINE MUSICAL SYMBOL AGOGI ARGI" #x1D09C)
-    ("BYZANTINE MUSICAL SYMBOL AGOGI METRIA" #x1D09D)
-    ("BYZANTINE MUSICAL SYMBOL AGOGI MESI" #x1D09E)
-    ("BYZANTINE MUSICAL SYMBOL AGOGI GORGI" #x1D09F)
-    ("BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI" #x1D0A0)
-    ("BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI" #x1D0A1)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS" #x1D0A2)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS" #x1D0A3)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS" #x1D0A4)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS" #x1D0A5)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS" #x1D0A6)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS" #x1D0A7)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS" #x1D0A8)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS" #x1D0A9)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS" #x1D0AA)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS" #x1D0AB)
-    ("BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS" #x1D0AC)
-    ("BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS" #x1D0AD)
-    ("BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS" #x1D0AE)
-    ("BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS" #x1D0AF)
-    ("BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS" #x1D0B0)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS" #x1D0B1)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS" #x1D0B2)
-    ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS" #x1D0B3)
-    ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN" #x1D0B4)
-    ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN" #x1D0B5)
-    ("BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU" #x1D0B6)
-    ("BYZANTINE MUSICAL SYMBOL IMIFONON" #x1D0B7)
-    ("BYZANTINE MUSICAL SYMBOL IMIFTHORON" #x1D0B8)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU" #x1D0B9)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA" #x1D0BA)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA" #x1D0BB)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS" #x1D0BC)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI" #x1D0BD)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI" #x1D0BE)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE" #x1D0BF)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO" #x1D0C0)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO" #x1D0C1)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO" #x1D0C2)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS" #x1D0C3)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS" #x1D0C4)
-    ("BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS" #x1D0C5)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI" #x1D0C6)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA NENANO" #x1D0C7)
-    ("BYZANTINE MUSICAL SYMBOL CHROA ZYGOS" #x1D0C8)
-    ("BYZANTINE MUSICAL SYMBOL CHROA KLITON" #x1D0C9)
-    ("BYZANTINE MUSICAL SYMBOL CHROA SPATHI" #x1D0CA)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION" #x1D0CB)
-    ("BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA" #x1D0CC)
-    ("BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION" #x1D0CD)
-    ("BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION" #x1D0CE)
-    ("BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION" #x1D0CF)
-    ("BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA" #x1D0D0)
-    ("BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D1)
-    ("BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA" #x1D0D2)
-    ("BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D3)
-    ("BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA" #x1D0D4)
-    ("BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D5)
-    ("BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA" #x1D0D6)
-    ("BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D7)
-    ("BYZANTINE MUSICAL SYMBOL GENIKI DIESIS" #x1D0D8)
-    ("BYZANTINE MUSICAL SYMBOL GENIKI YFESIS" #x1D0D9)
-    ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI" #x1D0DA)
-    ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI" #x1D0DB)
-    ("BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI" #x1D0DC)
-    ("BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS" #x1D0DD)
-    ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS" #x1D0DE)
-    ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU" #x1D0DF)
-    ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU" #x1D0E0)
-    ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU" #x1D0E1)
-    ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS" #x1D0E2)
-    ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU" #x1D0E3)
-    ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU" #x1D0E4)
-    ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU" #x1D0E5)
-    ("BYZANTINE MUSICAL SYMBOL DIGRAMMA GG" #x1D0E6)
-    ("BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU" #x1D0E7)
-    ("BYZANTINE MUSICAL SYMBOL STIGMA" #x1D0E8)
-    ("BYZANTINE MUSICAL SYMBOL ARKTIKO PA" #x1D0E9)
-    ("BYZANTINE MUSICAL SYMBOL ARKTIKO VOU" #x1D0EA)
-    ("BYZANTINE MUSICAL SYMBOL ARKTIKO GA" #x1D0EB)
-    ("BYZANTINE MUSICAL SYMBOL ARKTIKO DI" #x1D0EC)
-    ("BYZANTINE MUSICAL SYMBOL ARKTIKO KE" #x1D0ED)
-    ("BYZANTINE MUSICAL SYMBOL ARKTIKO ZO" #x1D0EE)
-    ("BYZANTINE MUSICAL SYMBOL ARKTIKO NI" #x1D0EF)
-    ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO" #x1D0F0)
-    ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO" #x1D0F1)
-    ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO" #x1D0F2)
-    ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO" #x1D0F3)
-    ("BYZANTINE MUSICAL SYMBOL KLASMA KATO" #x1D0F4)
-    ("BYZANTINE MUSICAL SYMBOL GORGON NEO KATO" #x1D0F5)
-    ))
-
diff --git a/etc/nxml/1D100-1D1FF.el b/etc/nxml/1D100-1D1FF.el
deleted file mode 100644 (file)
index 9c71f5c..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-(nxml-define-char-name-set 'musical-symbols
-  '(("MUSICAL SYMBOL SINGLE BARLINE" #x1D100)
-    ("MUSICAL SYMBOL DOUBLE BARLINE" #x1D101)
-    ("MUSICAL SYMBOL FINAL BARLINE" #x1D102)
-    ("MUSICAL SYMBOL REVERSE FINAL BARLINE" #x1D103)
-    ("MUSICAL SYMBOL DASHED BARLINE" #x1D104)
-    ("MUSICAL SYMBOL SHORT BARLINE" #x1D105)
-    ("MUSICAL SYMBOL LEFT REPEAT SIGN" #x1D106)
-    ("MUSICAL SYMBOL RIGHT REPEAT SIGN" #x1D107)
-    ("MUSICAL SYMBOL REPEAT DOTS" #x1D108)
-    ("MUSICAL SYMBOL DAL SEGNO" #x1D109)
-    ("MUSICAL SYMBOL DA CAPO" #x1D10A)
-    ("MUSICAL SYMBOL SEGNO" #x1D10B)
-    ("MUSICAL SYMBOL CODA" #x1D10C)
-    ("MUSICAL SYMBOL REPEATED FIGURE-1" #x1D10D)
-    ("MUSICAL SYMBOL REPEATED FIGURE-2" #x1D10E)
-    ("MUSICAL SYMBOL REPEATED FIGURE-3" #x1D10F)
-    ("MUSICAL SYMBOL FERMATA" #x1D110)
-    ("MUSICAL SYMBOL FERMATA BELOW" #x1D111)
-    ("MUSICAL SYMBOL BREATH MARK" #x1D112)
-    ("MUSICAL SYMBOL CAESURA" #x1D113)
-    ("MUSICAL SYMBOL BRACE" #x1D114)
-    ("MUSICAL SYMBOL BRACKET" #x1D115)
-    ("MUSICAL SYMBOL ONE-LINE STAFF" #x1D116)
-    ("MUSICAL SYMBOL TWO-LINE STAFF" #x1D117)
-    ("MUSICAL SYMBOL THREE-LINE STAFF" #x1D118)
-    ("MUSICAL SYMBOL FOUR-LINE STAFF" #x1D119)
-    ("MUSICAL SYMBOL FIVE-LINE STAFF" #x1D11A)
-    ("MUSICAL SYMBOL SIX-LINE STAFF" #x1D11B)
-    ("MUSICAL SYMBOL SIX-STRING FRETBOARD" #x1D11C)
-    ("MUSICAL SYMBOL FOUR-STRING FRETBOARD" #x1D11D)
-    ("MUSICAL SYMBOL G CLEF" #x1D11E)
-    ("MUSICAL SYMBOL G CLEF OTTAVA ALTA" #x1D11F)
-    ("MUSICAL SYMBOL G CLEF OTTAVA BASSA" #x1D120)
-    ("MUSICAL SYMBOL C CLEF" #x1D121)
-    ("MUSICAL SYMBOL F CLEF" #x1D122)
-    ("MUSICAL SYMBOL F CLEF OTTAVA ALTA" #x1D123)
-    ("MUSICAL SYMBOL F CLEF OTTAVA BASSA" #x1D124)
-    ("MUSICAL SYMBOL DRUM CLEF-1" #x1D125)
-    ("MUSICAL SYMBOL DRUM CLEF-2" #x1D126)
-    ("MUSICAL SYMBOL DOUBLE SHARP" #x1D12A)
-    ("MUSICAL SYMBOL DOUBLE FLAT" #x1D12B)
-    ("MUSICAL SYMBOL FLAT UP" #x1D12C)
-    ("MUSICAL SYMBOL FLAT DOWN" #x1D12D)
-    ("MUSICAL SYMBOL NATURAL UP" #x1D12E)
-    ("MUSICAL SYMBOL NATURAL DOWN" #x1D12F)
-    ("MUSICAL SYMBOL SHARP UP" #x1D130)
-    ("MUSICAL SYMBOL SHARP DOWN" #x1D131)
-    ("MUSICAL SYMBOL QUARTER TONE SHARP" #x1D132)
-    ("MUSICAL SYMBOL QUARTER TONE FLAT" #x1D133)
-    ("MUSICAL SYMBOL COMMON TIME" #x1D134)
-    ("MUSICAL SYMBOL CUT TIME" #x1D135)
-    ("MUSICAL SYMBOL OTTAVA ALTA" #x1D136)
-    ("MUSICAL SYMBOL OTTAVA BASSA" #x1D137)
-    ("MUSICAL SYMBOL QUINDICESIMA ALTA" #x1D138)
-    ("MUSICAL SYMBOL QUINDICESIMA BASSA" #x1D139)
-    ("MUSICAL SYMBOL MULTI REST" #x1D13A)
-    ("MUSICAL SYMBOL WHOLE REST" #x1D13B)
-    ("MUSICAL SYMBOL HALF REST" #x1D13C)
-    ("MUSICAL SYMBOL QUARTER REST" #x1D13D)
-    ("MUSICAL SYMBOL EIGHTH REST" #x1D13E)
-    ("MUSICAL SYMBOL SIXTEENTH REST" #x1D13F)
-    ("MUSICAL SYMBOL THIRTY-SECOND REST" #x1D140)
-    ("MUSICAL SYMBOL SIXTY-FOURTH REST" #x1D141)
-    ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST" #x1D142)
-    ("MUSICAL SYMBOL X NOTEHEAD" #x1D143)
-    ("MUSICAL SYMBOL PLUS NOTEHEAD" #x1D144)
-    ("MUSICAL SYMBOL CIRCLE X NOTEHEAD" #x1D145)
-    ("MUSICAL SYMBOL SQUARE NOTEHEAD WHITE" #x1D146)
-    ("MUSICAL SYMBOL SQUARE NOTEHEAD BLACK" #x1D147)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE" #x1D148)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK" #x1D149)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE" #x1D14A)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK" #x1D14B)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE" #x1D14C)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK" #x1D14D)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE" #x1D14E)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK" #x1D14F)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE" #x1D150)
-    ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK" #x1D151)
-    ("MUSICAL SYMBOL MOON NOTEHEAD WHITE" #x1D152)
-    ("MUSICAL SYMBOL MOON NOTEHEAD BLACK" #x1D153)
-    ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE" #x1D154)
-    ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK" #x1D155)
-    ("MUSICAL SYMBOL PARENTHESIS NOTEHEAD" #x1D156)
-    ("MUSICAL SYMBOL VOID NOTEHEAD" #x1D157)
-    ("MUSICAL SYMBOL NOTEHEAD BLACK" #x1D158)
-    ("MUSICAL SYMBOL NULL NOTEHEAD" #x1D159)
-    ("MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE" #x1D15A)
-    ("MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK" #x1D15B)
-    ("MUSICAL SYMBOL BREVE" #x1D15C)
-    ("MUSICAL SYMBOL WHOLE NOTE" #x1D15D)
-    ("MUSICAL SYMBOL HALF NOTE" #x1D15E)
-    ("MUSICAL SYMBOL QUARTER NOTE" #x1D15F)
-    ("MUSICAL SYMBOL EIGHTH NOTE" #x1D160)
-    ("MUSICAL SYMBOL SIXTEENTH NOTE" #x1D161)
-    ("MUSICAL SYMBOL THIRTY-SECOND NOTE" #x1D162)
-    ("MUSICAL SYMBOL SIXTY-FOURTH NOTE" #x1D163)
-    ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE" #x1D164)
-    ("MUSICAL SYMBOL COMBINING STEM" #x1D165)
-    ("MUSICAL SYMBOL COMBINING SPRECHGESANG STEM" #x1D166)
-    ("MUSICAL SYMBOL COMBINING TREMOLO-1" #x1D167)
-    ("MUSICAL SYMBOL COMBINING TREMOLO-2" #x1D168)
-    ("MUSICAL SYMBOL COMBINING TREMOLO-3" #x1D169)
-    ("MUSICAL SYMBOL FINGERED TREMOLO-1" #x1D16A)
-    ("MUSICAL SYMBOL FINGERED TREMOLO-2" #x1D16B)
-    ("MUSICAL SYMBOL FINGERED TREMOLO-3" #x1D16C)
-    ("MUSICAL SYMBOL COMBINING AUGMENTATION DOT" #x1D16D)
-    ("MUSICAL SYMBOL COMBINING FLAG-1" #x1D16E)
-    ("MUSICAL SYMBOL COMBINING FLAG-2" #x1D16F)
-    ("MUSICAL SYMBOL COMBINING FLAG-3" #x1D170)
-    ("MUSICAL SYMBOL COMBINING FLAG-4" #x1D171)
-    ("MUSICAL SYMBOL COMBINING FLAG-5" #x1D172)
-    ("MUSICAL SYMBOL BEGIN BEAM" #x1D173)
-    ("MUSICAL SYMBOL END BEAM" #x1D174)
-    ("MUSICAL SYMBOL BEGIN TIE" #x1D175)
-    ("MUSICAL SYMBOL END TIE" #x1D176)
-    ("MUSICAL SYMBOL BEGIN SLUR" #x1D177)
-    ("MUSICAL SYMBOL END SLUR" #x1D178)
-    ("MUSICAL SYMBOL BEGIN PHRASE" #x1D179)
-    ("MUSICAL SYMBOL END PHRASE" #x1D17A)
-    ("MUSICAL SYMBOL COMBINING ACCENT" #x1D17B)
-    ("MUSICAL SYMBOL COMBINING STACCATO" #x1D17C)
-    ("MUSICAL SYMBOL COMBINING TENUTO" #x1D17D)
-    ("MUSICAL SYMBOL COMBINING STACCATISSIMO" #x1D17E)
-    ("MUSICAL SYMBOL COMBINING MARCATO" #x1D17F)
-    ("MUSICAL SYMBOL COMBINING MARCATO-STACCATO" #x1D180)
-    ("MUSICAL SYMBOL COMBINING ACCENT-STACCATO" #x1D181)
-    ("MUSICAL SYMBOL COMBINING LOURE" #x1D182)
-    ("MUSICAL SYMBOL ARPEGGIATO UP" #x1D183)
-    ("MUSICAL SYMBOL ARPEGGIATO DOWN" #x1D184)
-    ("MUSICAL SYMBOL COMBINING DOIT" #x1D185)
-    ("MUSICAL SYMBOL COMBINING RIP" #x1D186)
-    ("MUSICAL SYMBOL COMBINING FLIP" #x1D187)
-    ("MUSICAL SYMBOL COMBINING SMEAR" #x1D188)
-    ("MUSICAL SYMBOL COMBINING BEND" #x1D189)
-    ("MUSICAL SYMBOL COMBINING DOUBLE TONGUE" #x1D18A)
-    ("MUSICAL SYMBOL COMBINING TRIPLE TONGUE" #x1D18B)
-    ("MUSICAL SYMBOL RINFORZANDO" #x1D18C)
-    ("MUSICAL SYMBOL SUBITO" #x1D18D)
-    ("MUSICAL SYMBOL Z" #x1D18E)
-    ("MUSICAL SYMBOL PIANO" #x1D18F)
-    ("MUSICAL SYMBOL MEZZO" #x1D190)
-    ("MUSICAL SYMBOL FORTE" #x1D191)
-    ("MUSICAL SYMBOL CRESCENDO" #x1D192)
-    ("MUSICAL SYMBOL DECRESCENDO" #x1D193)
-    ("MUSICAL SYMBOL GRACE NOTE SLASH" #x1D194)
-    ("MUSICAL SYMBOL GRACE NOTE NO SLASH" #x1D195)
-    ("MUSICAL SYMBOL TR" #x1D196)
-    ("MUSICAL SYMBOL TURN" #x1D197)
-    ("MUSICAL SYMBOL INVERTED TURN" #x1D198)
-    ("MUSICAL SYMBOL TURN SLASH" #x1D199)
-    ("MUSICAL SYMBOL TURN UP" #x1D19A)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-1" #x1D19B)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-2" #x1D19C)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-3" #x1D19D)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-4" #x1D19E)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-5" #x1D19F)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-6" #x1D1A0)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-7" #x1D1A1)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-8" #x1D1A2)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-9" #x1D1A3)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-10" #x1D1A4)
-    ("MUSICAL SYMBOL ORNAMENT STROKE-11" #x1D1A5)
-    ("MUSICAL SYMBOL HAUPTSTIMME" #x1D1A6)
-    ("MUSICAL SYMBOL NEBENSTIMME" #x1D1A7)
-    ("MUSICAL SYMBOL END OF STIMME" #x1D1A8)
-    ("MUSICAL SYMBOL DEGREE SLASH" #x1D1A9)
-    ("MUSICAL SYMBOL COMBINING DOWN BOW" #x1D1AA)
-    ("MUSICAL SYMBOL COMBINING UP BOW" #x1D1AB)
-    ("MUSICAL SYMBOL COMBINING HARMONIC" #x1D1AC)
-    ("MUSICAL SYMBOL COMBINING SNAP PIZZICATO" #x1D1AD)
-    ("MUSICAL SYMBOL PEDAL MARK" #x1D1AE)
-    ("MUSICAL SYMBOL PEDAL UP MARK" #x1D1AF)
-    ("MUSICAL SYMBOL HALF PEDAL MARK" #x1D1B0)
-    ("MUSICAL SYMBOL GLISSANDO UP" #x1D1B1)
-    ("MUSICAL SYMBOL GLISSANDO DOWN" #x1D1B2)
-    ("MUSICAL SYMBOL WITH FINGERNAILS" #x1D1B3)
-    ("MUSICAL SYMBOL DAMP" #x1D1B4)
-    ("MUSICAL SYMBOL DAMP ALL" #x1D1B5)
-    ("MUSICAL SYMBOL MAXIMA" #x1D1B6)
-    ("MUSICAL SYMBOL LONGA" #x1D1B7)
-    ("MUSICAL SYMBOL BREVIS" #x1D1B8)
-    ("MUSICAL SYMBOL SEMIBREVIS WHITE" #x1D1B9)
-    ("MUSICAL SYMBOL SEMIBREVIS BLACK" #x1D1BA)
-    ("MUSICAL SYMBOL MINIMA" #x1D1BB)
-    ("MUSICAL SYMBOL MINIMA BLACK" #x1D1BC)
-    ("MUSICAL SYMBOL SEMIMINIMA WHITE" #x1D1BD)
-    ("MUSICAL SYMBOL SEMIMINIMA BLACK" #x1D1BE)
-    ("MUSICAL SYMBOL FUSA WHITE" #x1D1BF)
-    ("MUSICAL SYMBOL FUSA BLACK" #x1D1C0)
-    ("MUSICAL SYMBOL LONGA PERFECTA REST" #x1D1C1)
-    ("MUSICAL SYMBOL LONGA IMPERFECTA REST" #x1D1C2)
-    ("MUSICAL SYMBOL BREVIS REST" #x1D1C3)
-    ("MUSICAL SYMBOL SEMIBREVIS REST" #x1D1C4)
-    ("MUSICAL SYMBOL MINIMA REST" #x1D1C5)
-    ("MUSICAL SYMBOL SEMIMINIMA REST" #x1D1C6)
-    ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA" #x1D1C7)
-    ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1C8)
-    ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1" #x1D1C9)
-    ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA" #x1D1CA)
-    ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1CB)
-    ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1" #x1D1CC)
-    ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2" #x1D1CD)
-    ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3" #x1D1CE)
-    ("MUSICAL SYMBOL CROIX" #x1D1CF)
-    ("MUSICAL SYMBOL GREGORIAN C CLEF" #x1D1D0)
-    ("MUSICAL SYMBOL GREGORIAN F CLEF" #x1D1D1)
-    ("MUSICAL SYMBOL SQUARE B" #x1D1D2)
-    ("MUSICAL SYMBOL VIRGA" #x1D1D3)
-    ("MUSICAL SYMBOL PODATUS" #x1D1D4)
-    ("MUSICAL SYMBOL CLIVIS" #x1D1D5)
-    ("MUSICAL SYMBOL SCANDICUS" #x1D1D6)
-    ("MUSICAL SYMBOL CLIMACUS" #x1D1D7)
-    ("MUSICAL SYMBOL TORCULUS" #x1D1D8)
-    ("MUSICAL SYMBOL PORRECTUS" #x1D1D9)
-    ("MUSICAL SYMBOL PORRECTUS FLEXUS" #x1D1DA)
-    ("MUSICAL SYMBOL SCANDICUS FLEXUS" #x1D1DB)
-    ("MUSICAL SYMBOL TORCULUS RESUPINUS" #x1D1DC)
-    ("MUSICAL SYMBOL PES SUBPUNCTIS" #x1D1DD)
-    ))
-
diff --git a/etc/nxml/1D400-1D7FF.el b/etc/nxml/1D400-1D7FF.el
deleted file mode 100644 (file)
index 5d4f159..0000000
+++ /dev/null
@@ -1,994 +0,0 @@
-(nxml-define-char-name-set 'mathematical-alphanumeric-symbols
-  '(("MATHEMATICAL BOLD CAPITAL A" #x1D400)
-    ("MATHEMATICAL BOLD CAPITAL B" #x1D401)
-    ("MATHEMATICAL BOLD CAPITAL C" #x1D402)
-    ("MATHEMATICAL BOLD CAPITAL D" #x1D403)
-    ("MATHEMATICAL BOLD CAPITAL E" #x1D404)
-    ("MATHEMATICAL BOLD CAPITAL F" #x1D405)
-    ("MATHEMATICAL BOLD CAPITAL G" #x1D406)
-    ("MATHEMATICAL BOLD CAPITAL H" #x1D407)
-    ("MATHEMATICAL BOLD CAPITAL I" #x1D408)
-    ("MATHEMATICAL BOLD CAPITAL J" #x1D409)
-    ("MATHEMATICAL BOLD CAPITAL K" #x1D40A)
-    ("MATHEMATICAL BOLD CAPITAL L" #x1D40B)
-    ("MATHEMATICAL BOLD CAPITAL M" #x1D40C)
-    ("MATHEMATICAL BOLD CAPITAL N" #x1D40D)
-    ("MATHEMATICAL BOLD CAPITAL O" #x1D40E)
-    ("MATHEMATICAL BOLD CAPITAL P" #x1D40F)
-    ("MATHEMATICAL BOLD CAPITAL Q" #x1D410)
-    ("MATHEMATICAL BOLD CAPITAL R" #x1D411)
-    ("MATHEMATICAL BOLD CAPITAL S" #x1D412)
-    ("MATHEMATICAL BOLD CAPITAL T" #x1D413)
-    ("MATHEMATICAL BOLD CAPITAL U" #x1D414)
-    ("MATHEMATICAL BOLD CAPITAL V" #x1D415)
-    ("MATHEMATICAL BOLD CAPITAL W" #x1D416)
-    ("MATHEMATICAL BOLD CAPITAL X" #x1D417)
-    ("MATHEMATICAL BOLD CAPITAL Y" #x1D418)
-    ("MATHEMATICAL BOLD CAPITAL Z" #x1D419)
-    ("MATHEMATICAL BOLD SMALL A" #x1D41A)
-    ("MATHEMATICAL BOLD SMALL B" #x1D41B)
-    ("MATHEMATICAL BOLD SMALL C" #x1D41C)
-    ("MATHEMATICAL BOLD SMALL D" #x1D41D)
-    ("MATHEMATICAL BOLD SMALL E" #x1D41E)
-    ("MATHEMATICAL BOLD SMALL F" #x1D41F)
-    ("MATHEMATICAL BOLD SMALL G" #x1D420)
-    ("MATHEMATICAL BOLD SMALL H" #x1D421)
-    ("MATHEMATICAL BOLD SMALL I" #x1D422)
-    ("MATHEMATICAL BOLD SMALL J" #x1D423)
-    ("MATHEMATICAL BOLD SMALL K" #x1D424)
-    ("MATHEMATICAL BOLD SMALL L" #x1D425)
-    ("MATHEMATICAL BOLD SMALL M" #x1D426)
-    ("MATHEMATICAL BOLD SMALL N" #x1D427)
-    ("MATHEMATICAL BOLD SMALL O" #x1D428)
-    ("MATHEMATICAL BOLD SMALL P" #x1D429)
-    ("MATHEMATICAL BOLD SMALL Q" #x1D42A)
-    ("MATHEMATICAL BOLD SMALL R" #x1D42B)
-    ("MATHEMATICAL BOLD SMALL S" #x1D42C)
-    ("MATHEMATICAL BOLD SMALL T" #x1D42D)
-    ("MATHEMATICAL BOLD SMALL U" #x1D42E)
-    ("MATHEMATICAL BOLD SMALL V" #x1D42F)
-    ("MATHEMATICAL BOLD SMALL W" #x1D430)
-    ("MATHEMATICAL BOLD SMALL X" #x1D431)
-    ("MATHEMATICAL BOLD SMALL Y" #x1D432)
-    ("MATHEMATICAL BOLD SMALL Z" #x1D433)
-    ("MATHEMATICAL ITALIC CAPITAL A" #x1D434)
-    ("MATHEMATICAL ITALIC CAPITAL B" #x1D435)
-    ("MATHEMATICAL ITALIC CAPITAL C" #x1D436)
-    ("MATHEMATICAL ITALIC CAPITAL D" #x1D437)
-    ("MATHEMATICAL ITALIC CAPITAL E" #x1D438)
-    ("MATHEMATICAL ITALIC CAPITAL F" #x1D439)
-    ("MATHEMATICAL ITALIC CAPITAL G" #x1D43A)
-    ("MATHEMATICAL ITALIC CAPITAL H" #x1D43B)
-    ("MATHEMATICAL ITALIC CAPITAL I" #x1D43C)
-    ("MATHEMATICAL ITALIC CAPITAL J" #x1D43D)
-    ("MATHEMATICAL ITALIC CAPITAL K" #x1D43E)
-    ("MATHEMATICAL ITALIC CAPITAL L" #x1D43F)
-    ("MATHEMATICAL ITALIC CAPITAL M" #x1D440)
-    ("MATHEMATICAL ITALIC CAPITAL N" #x1D441)
-    ("MATHEMATICAL ITALIC CAPITAL O" #x1D442)
-    ("MATHEMATICAL ITALIC CAPITAL P" #x1D443)
-    ("MATHEMATICAL ITALIC CAPITAL Q" #x1D444)
-    ("MATHEMATICAL ITALIC CAPITAL R" #x1D445)
-    ("MATHEMATICAL ITALIC CAPITAL S" #x1D446)
-    ("MATHEMATICAL ITALIC CAPITAL T" #x1D447)
-    ("MATHEMATICAL ITALIC CAPITAL U" #x1D448)
-    ("MATHEMATICAL ITALIC CAPITAL V" #x1D449)
-    ("MATHEMATICAL ITALIC CAPITAL W" #x1D44A)
-    ("MATHEMATICAL ITALIC CAPITAL X" #x1D44B)
-    ("MATHEMATICAL ITALIC CAPITAL Y" #x1D44C)
-    ("MATHEMATICAL ITALIC CAPITAL Z" #x1D44D)
-    ("MATHEMATICAL ITALIC SMALL A" #x1D44E)
-    ("MATHEMATICAL ITALIC SMALL B" #x1D44F)
-    ("MATHEMATICAL ITALIC SMALL C" #x1D450)
-    ("MATHEMATICAL ITALIC SMALL D" #x1D451)
-    ("MATHEMATICAL ITALIC SMALL E" #x1D452)
-    ("MATHEMATICAL ITALIC SMALL F" #x1D453)
-    ("MATHEMATICAL ITALIC SMALL G" #x1D454)
-    ("MATHEMATICAL ITALIC SMALL I" #x1D456)
-    ("MATHEMATICAL ITALIC SMALL J" #x1D457)
-    ("MATHEMATICAL ITALIC SMALL K" #x1D458)
-    ("MATHEMATICAL ITALIC SMALL L" #x1D459)
-    ("MATHEMATICAL ITALIC SMALL M" #x1D45A)
-    ("MATHEMATICAL ITALIC SMALL N" #x1D45B)
-    ("MATHEMATICAL ITALIC SMALL O" #x1D45C)
-    ("MATHEMATICAL ITALIC SMALL P" #x1D45D)
-    ("MATHEMATICAL ITALIC SMALL Q" #x1D45E)
-    ("MATHEMATICAL ITALIC SMALL R" #x1D45F)
-    ("MATHEMATICAL ITALIC SMALL S" #x1D460)
-    ("MATHEMATICAL ITALIC SMALL T" #x1D461)
-    ("MATHEMATICAL ITALIC SMALL U" #x1D462)
-    ("MATHEMATICAL ITALIC SMALL V" #x1D463)
-    ("MATHEMATICAL ITALIC SMALL W" #x1D464)
-    ("MATHEMATICAL ITALIC SMALL X" #x1D465)
-    ("MATHEMATICAL ITALIC SMALL Y" #x1D466)
-    ("MATHEMATICAL ITALIC SMALL Z" #x1D467)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL A" #x1D468)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL B" #x1D469)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL C" #x1D46A)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL D" #x1D46B)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL E" #x1D46C)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL F" #x1D46D)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL G" #x1D46E)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL H" #x1D46F)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL I" #x1D470)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL J" #x1D471)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL K" #x1D472)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL L" #x1D473)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL M" #x1D474)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL N" #x1D475)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL O" #x1D476)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL P" #x1D477)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL Q" #x1D478)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL R" #x1D479)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL S" #x1D47A)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL T" #x1D47B)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL U" #x1D47C)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL V" #x1D47D)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL W" #x1D47E)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL X" #x1D47F)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL Y" #x1D480)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL Z" #x1D481)
-    ("MATHEMATICAL BOLD ITALIC SMALL A" #x1D482)
-    ("MATHEMATICAL BOLD ITALIC SMALL B" #x1D483)
-    ("MATHEMATICAL BOLD ITALIC SMALL C" #x1D484)
-    ("MATHEMATICAL BOLD ITALIC SMALL D" #x1D485)
-    ("MATHEMATICAL BOLD ITALIC SMALL E" #x1D486)
-    ("MATHEMATICAL BOLD ITALIC SMALL F" #x1D487)
-    ("MATHEMATICAL BOLD ITALIC SMALL G" #x1D488)
-    ("MATHEMATICAL BOLD ITALIC SMALL H" #x1D489)
-    ("MATHEMATICAL BOLD ITALIC SMALL I" #x1D48A)
-    ("MATHEMATICAL BOLD ITALIC SMALL J" #x1D48B)
-    ("MATHEMATICAL BOLD ITALIC SMALL K" #x1D48C)
-    ("MATHEMATICAL BOLD ITALIC SMALL L" #x1D48D)
-    ("MATHEMATICAL BOLD ITALIC SMALL M" #x1D48E)
-    ("MATHEMATICAL BOLD ITALIC SMALL N" #x1D48F)
-    ("MATHEMATICAL BOLD ITALIC SMALL O" #x1D490)
-    ("MATHEMATICAL BOLD ITALIC SMALL P" #x1D491)
-    ("MATHEMATICAL BOLD ITALIC SMALL Q" #x1D492)
-    ("MATHEMATICAL BOLD ITALIC SMALL R" #x1D493)
-    ("MATHEMATICAL BOLD ITALIC SMALL S" #x1D494)
-    ("MATHEMATICAL BOLD ITALIC SMALL T" #x1D495)
-    ("MATHEMATICAL BOLD ITALIC SMALL U" #x1D496)
-    ("MATHEMATICAL BOLD ITALIC SMALL V" #x1D497)
-    ("MATHEMATICAL BOLD ITALIC SMALL W" #x1D498)
-    ("MATHEMATICAL BOLD ITALIC SMALL X" #x1D499)
-    ("MATHEMATICAL BOLD ITALIC SMALL Y" #x1D49A)
-    ("MATHEMATICAL BOLD ITALIC SMALL Z" #x1D49B)
-    ("MATHEMATICAL SCRIPT CAPITAL A" #x1D49C)
-    ("MATHEMATICAL SCRIPT CAPITAL C" #x1D49E)
-    ("MATHEMATICAL SCRIPT CAPITAL D" #x1D49F)
-    ("MATHEMATICAL SCRIPT CAPITAL G" #x1D4A2)
-    ("MATHEMATICAL SCRIPT CAPITAL J" #x1D4A5)
-    ("MATHEMATICAL SCRIPT CAPITAL K" #x1D4A6)
-    ("MATHEMATICAL SCRIPT CAPITAL N" #x1D4A9)
-    ("MATHEMATICAL SCRIPT CAPITAL O" #x1D4AA)
-    ("MATHEMATICAL SCRIPT CAPITAL P" #x1D4AB)
-    ("MATHEMATICAL SCRIPT CAPITAL Q" #x1D4AC)
-    ("MATHEMATICAL SCRIPT CAPITAL S" #x1D4AE)
-    ("MATHEMATICAL SCRIPT CAPITAL T" #x1D4AF)
-    ("MATHEMATICAL SCRIPT CAPITAL U" #x1D4B0)
-    ("MATHEMATICAL SCRIPT CAPITAL V" #x1D4B1)
-    ("MATHEMATICAL SCRIPT CAPITAL W" #x1D4B2)
-    ("MATHEMATICAL SCRIPT CAPITAL X" #x1D4B3)
-    ("MATHEMATICAL SCRIPT CAPITAL Y" #x1D4B4)
-    ("MATHEMATICAL SCRIPT CAPITAL Z" #x1D4B5)
-    ("MATHEMATICAL SCRIPT SMALL A" #x1D4B6)
-    ("MATHEMATICAL SCRIPT SMALL B" #x1D4B7)
-    ("MATHEMATICAL SCRIPT SMALL C" #x1D4B8)
-    ("MATHEMATICAL SCRIPT SMALL D" #x1D4B9)
-    ("MATHEMATICAL SCRIPT SMALL F" #x1D4BB)
-    ("MATHEMATICAL SCRIPT SMALL H" #x1D4BD)
-    ("MATHEMATICAL SCRIPT SMALL I" #x1D4BE)
-    ("MATHEMATICAL SCRIPT SMALL J" #x1D4BF)
-    ("MATHEMATICAL SCRIPT SMALL K" #x1D4C0)
-    ("MATHEMATICAL SCRIPT SMALL M" #x1D4C2)
-    ("MATHEMATICAL SCRIPT SMALL N" #x1D4C3)
-    ("MATHEMATICAL SCRIPT SMALL P" #x1D4C5)
-    ("MATHEMATICAL SCRIPT SMALL Q" #x1D4C6)
-    ("MATHEMATICAL SCRIPT SMALL R" #x1D4C7)
-    ("MATHEMATICAL SCRIPT SMALL S" #x1D4C8)
-    ("MATHEMATICAL SCRIPT SMALL T" #x1D4C9)
-    ("MATHEMATICAL SCRIPT SMALL U" #x1D4CA)
-    ("MATHEMATICAL SCRIPT SMALL V" #x1D4CB)
-    ("MATHEMATICAL SCRIPT SMALL W" #x1D4CC)
-    ("MATHEMATICAL SCRIPT SMALL X" #x1D4CD)
-    ("MATHEMATICAL SCRIPT SMALL Y" #x1D4CE)
-    ("MATHEMATICAL SCRIPT SMALL Z" #x1D4CF)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL A" #x1D4D0)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL B" #x1D4D1)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL C" #x1D4D2)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL D" #x1D4D3)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL E" #x1D4D4)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL F" #x1D4D5)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL G" #x1D4D6)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL H" #x1D4D7)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL I" #x1D4D8)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL J" #x1D4D9)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL K" #x1D4DA)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL L" #x1D4DB)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL M" #x1D4DC)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL N" #x1D4DD)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL O" #x1D4DE)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL P" #x1D4DF)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL Q" #x1D4E0)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL R" #x1D4E1)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL S" #x1D4E2)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL T" #x1D4E3)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL U" #x1D4E4)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL V" #x1D4E5)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL W" #x1D4E6)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL X" #x1D4E7)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL Y" #x1D4E8)
-    ("MATHEMATICAL BOLD SCRIPT CAPITAL Z" #x1D4E9)
-    ("MATHEMATICAL BOLD SCRIPT SMALL A" #x1D4EA)
-    ("MATHEMATICAL BOLD SCRIPT SMALL B" #x1D4EB)
-    ("MATHEMATICAL BOLD SCRIPT SMALL C" #x1D4EC)
-    ("MATHEMATICAL BOLD SCRIPT SMALL D" #x1D4ED)
-    ("MATHEMATICAL BOLD SCRIPT SMALL E" #x1D4EE)
-    ("MATHEMATICAL BOLD SCRIPT SMALL F" #x1D4EF)
-    ("MATHEMATICAL BOLD SCRIPT SMALL G" #x1D4F0)
-    ("MATHEMATICAL BOLD SCRIPT SMALL H" #x1D4F1)
-    ("MATHEMATICAL BOLD SCRIPT SMALL I" #x1D4F2)
-    ("MATHEMATICAL BOLD SCRIPT SMALL J" #x1D4F3)
-    ("MATHEMATICAL BOLD SCRIPT SMALL K" #x1D4F4)
-    ("MATHEMATICAL BOLD SCRIPT SMALL L" #x1D4F5)
-    ("MATHEMATICAL BOLD SCRIPT SMALL M" #x1D4F6)
-    ("MATHEMATICAL BOLD SCRIPT SMALL N" #x1D4F7)
-    ("MATHEMATICAL BOLD SCRIPT SMALL O" #x1D4F8)
-    ("MATHEMATICAL BOLD SCRIPT SMALL P" #x1D4F9)
-    ("MATHEMATICAL BOLD SCRIPT SMALL Q" #x1D4FA)
-    ("MATHEMATICAL BOLD SCRIPT SMALL R" #x1D4FB)
-    ("MATHEMATICAL BOLD SCRIPT SMALL S" #x1D4FC)
-    ("MATHEMATICAL BOLD SCRIPT SMALL T" #x1D4FD)
-    ("MATHEMATICAL BOLD SCRIPT SMALL U" #x1D4FE)
-    ("MATHEMATICAL BOLD SCRIPT SMALL V" #x1D4FF)
-    ("MATHEMATICAL BOLD SCRIPT SMALL W" #x1D500)
-    ("MATHEMATICAL BOLD SCRIPT SMALL X" #x1D501)
-    ("MATHEMATICAL BOLD SCRIPT SMALL Y" #x1D502)
-    ("MATHEMATICAL BOLD SCRIPT SMALL Z" #x1D503)
-    ("MATHEMATICAL FRAKTUR CAPITAL A" #x1D504)
-    ("MATHEMATICAL FRAKTUR CAPITAL B" #x1D505)
-    ("MATHEMATICAL FRAKTUR CAPITAL D" #x1D507)
-    ("MATHEMATICAL FRAKTUR CAPITAL E" #x1D508)
-    ("MATHEMATICAL FRAKTUR CAPITAL F" #x1D509)
-    ("MATHEMATICAL FRAKTUR CAPITAL G" #x1D50A)
-    ("MATHEMATICAL FRAKTUR CAPITAL J" #x1D50D)
-    ("MATHEMATICAL FRAKTUR CAPITAL K" #x1D50E)
-    ("MATHEMATICAL FRAKTUR CAPITAL L" #x1D50F)
-    ("MATHEMATICAL FRAKTUR CAPITAL M" #x1D510)
-    ("MATHEMATICAL FRAKTUR CAPITAL N" #x1D511)
-    ("MATHEMATICAL FRAKTUR CAPITAL O" #x1D512)
-    ("MATHEMATICAL FRAKTUR CAPITAL P" #x1D513)
-    ("MATHEMATICAL FRAKTUR CAPITAL Q" #x1D514)
-    ("MATHEMATICAL FRAKTUR CAPITAL S" #x1D516)
-    ("MATHEMATICAL FRAKTUR CAPITAL T" #x1D517)
-    ("MATHEMATICAL FRAKTUR CAPITAL U" #x1D518)
-    ("MATHEMATICAL FRAKTUR CAPITAL V" #x1D519)
-    ("MATHEMATICAL FRAKTUR CAPITAL W" #x1D51A)
-    ("MATHEMATICAL FRAKTUR CAPITAL X" #x1D51B)
-    ("MATHEMATICAL FRAKTUR CAPITAL Y" #x1D51C)
-    ("MATHEMATICAL FRAKTUR SMALL A" #x1D51E)
-    ("MATHEMATICAL FRAKTUR SMALL B" #x1D51F)
-    ("MATHEMATICAL FRAKTUR SMALL C" #x1D520)
-    ("MATHEMATICAL FRAKTUR SMALL D" #x1D521)
-    ("MATHEMATICAL FRAKTUR SMALL E" #x1D522)
-    ("MATHEMATICAL FRAKTUR SMALL F" #x1D523)
-    ("MATHEMATICAL FRAKTUR SMALL G" #x1D524)
-    ("MATHEMATICAL FRAKTUR SMALL H" #x1D525)
-    ("MATHEMATICAL FRAKTUR SMALL I" #x1D526)
-    ("MATHEMATICAL FRAKTUR SMALL J" #x1D527)
-    ("MATHEMATICAL FRAKTUR SMALL K" #x1D528)
-    ("MATHEMATICAL FRAKTUR SMALL L" #x1D529)
-    ("MATHEMATICAL FRAKTUR SMALL M" #x1D52A)
-    ("MATHEMATICAL FRAKTUR SMALL N" #x1D52B)
-    ("MATHEMATICAL FRAKTUR SMALL O" #x1D52C)
-    ("MATHEMATICAL FRAKTUR SMALL P" #x1D52D)
-    ("MATHEMATICAL FRAKTUR SMALL Q" #x1D52E)
-    ("MATHEMATICAL FRAKTUR SMALL R" #x1D52F)
-    ("MATHEMATICAL FRAKTUR SMALL S" #x1D530)
-    ("MATHEMATICAL FRAKTUR SMALL T" #x1D531)
-    ("MATHEMATICAL FRAKTUR SMALL U" #x1D532)
-    ("MATHEMATICAL FRAKTUR SMALL V" #x1D533)
-    ("MATHEMATICAL FRAKTUR SMALL W" #x1D534)
-    ("MATHEMATICAL FRAKTUR SMALL X" #x1D535)
-    ("MATHEMATICAL FRAKTUR SMALL Y" #x1D536)
-    ("MATHEMATICAL FRAKTUR SMALL Z" #x1D537)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL A" #x1D538)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL B" #x1D539)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL D" #x1D53B)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL E" #x1D53C)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL F" #x1D53D)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL G" #x1D53E)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL I" #x1D540)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL J" #x1D541)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL K" #x1D542)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL L" #x1D543)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL M" #x1D544)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL O" #x1D546)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL S" #x1D54A)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL T" #x1D54B)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL U" #x1D54C)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL V" #x1D54D)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL W" #x1D54E)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL X" #x1D54F)
-    ("MATHEMATICAL DOUBLE-STRUCK CAPITAL Y" #x1D550)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL A" #x1D552)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL B" #x1D553)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL C" #x1D554)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL D" #x1D555)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL E" #x1D556)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL F" #x1D557)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL G" #x1D558)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL H" #x1D559)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL I" #x1D55A)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL J" #x1D55B)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL K" #x1D55C)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL L" #x1D55D)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL M" #x1D55E)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL N" #x1D55F)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL O" #x1D560)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL P" #x1D561)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL Q" #x1D562)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL R" #x1D563)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL S" #x1D564)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL T" #x1D565)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL U" #x1D566)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL V" #x1D567)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL W" #x1D568)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL X" #x1D569)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL Y" #x1D56A)
-    ("MATHEMATICAL DOUBLE-STRUCK SMALL Z" #x1D56B)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL A" #x1D56C)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL B" #x1D56D)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL C" #x1D56E)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL D" #x1D56F)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL E" #x1D570)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL F" #x1D571)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL G" #x1D572)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL H" #x1D573)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL I" #x1D574)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL J" #x1D575)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL K" #x1D576)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL L" #x1D577)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL M" #x1D578)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL N" #x1D579)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL O" #x1D57A)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL P" #x1D57B)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL Q" #x1D57C)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL R" #x1D57D)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL S" #x1D57E)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL T" #x1D57F)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL U" #x1D580)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL V" #x1D581)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL W" #x1D582)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL X" #x1D583)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL Y" #x1D584)
-    ("MATHEMATICAL BOLD FRAKTUR CAPITAL Z" #x1D585)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL A" #x1D586)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL B" #x1D587)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL C" #x1D588)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL D" #x1D589)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL E" #x1D58A)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL F" #x1D58B)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL G" #x1D58C)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL H" #x1D58D)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL I" #x1D58E)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL J" #x1D58F)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL K" #x1D590)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL L" #x1D591)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL M" #x1D592)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL N" #x1D593)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL O" #x1D594)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL P" #x1D595)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL Q" #x1D596)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL R" #x1D597)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL S" #x1D598)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL T" #x1D599)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL U" #x1D59A)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL V" #x1D59B)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL W" #x1D59C)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL X" #x1D59D)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL Y" #x1D59E)
-    ("MATHEMATICAL BOLD FRAKTUR SMALL Z" #x1D59F)
-    ("MATHEMATICAL SANS-SERIF CAPITAL A" #x1D5A0)
-    ("MATHEMATICAL SANS-SERIF CAPITAL B" #x1D5A1)
-    ("MATHEMATICAL SANS-SERIF CAPITAL C" #x1D5A2)
-    ("MATHEMATICAL SANS-SERIF CAPITAL D" #x1D5A3)
-    ("MATHEMATICAL SANS-SERIF CAPITAL E" #x1D5A4)
-    ("MATHEMATICAL SANS-SERIF CAPITAL F" #x1D5A5)
-    ("MATHEMATICAL SANS-SERIF CAPITAL G" #x1D5A6)
-    ("MATHEMATICAL SANS-SERIF CAPITAL H" #x1D5A7)
-    ("MATHEMATICAL SANS-SERIF CAPITAL I" #x1D5A8)
-    ("MATHEMATICAL SANS-SERIF CAPITAL J" #x1D5A9)
-    ("MATHEMATICAL SANS-SERIF CAPITAL K" #x1D5AA)
-    ("MATHEMATICAL SANS-SERIF CAPITAL L" #x1D5AB)
-    ("MATHEMATICAL SANS-SERIF CAPITAL M" #x1D5AC)
-    ("MATHEMATICAL SANS-SERIF CAPITAL N" #x1D5AD)
-    ("MATHEMATICAL SANS-SERIF CAPITAL O" #x1D5AE)
-    ("MATHEMATICAL SANS-SERIF CAPITAL P" #x1D5AF)
-    ("MATHEMATICAL SANS-SERIF CAPITAL Q" #x1D5B0)
-    ("MATHEMATICAL SANS-SERIF CAPITAL R" #x1D5B1)
-    ("MATHEMATICAL SANS-SERIF CAPITAL S" #x1D5B2)
-    ("MATHEMATICAL SANS-SERIF CAPITAL T" #x1D5B3)
-    ("MATHEMATICAL SANS-SERIF CAPITAL U" #x1D5B4)
-    ("MATHEMATICAL SANS-SERIF CAPITAL V" #x1D5B5)
-    ("MATHEMATICAL SANS-SERIF CAPITAL W" #x1D5B6)
-    ("MATHEMATICAL SANS-SERIF CAPITAL X" #x1D5B7)
-    ("MATHEMATICAL SANS-SERIF CAPITAL Y" #x1D5B8)
-    ("MATHEMATICAL SANS-SERIF CAPITAL Z" #x1D5B9)
-    ("MATHEMATICAL SANS-SERIF SMALL A" #x1D5BA)
-    ("MATHEMATICAL SANS-SERIF SMALL B" #x1D5BB)
-    ("MATHEMATICAL SANS-SERIF SMALL C" #x1D5BC)
-    ("MATHEMATICAL SANS-SERIF SMALL D" #x1D5BD)
-    ("MATHEMATICAL SANS-SERIF SMALL E" #x1D5BE)
-    ("MATHEMATICAL SANS-SERIF SMALL F" #x1D5BF)
-    ("MATHEMATICAL SANS-SERIF SMALL G" #x1D5C0)
-    ("MATHEMATICAL SANS-SERIF SMALL H" #x1D5C1)
-    ("MATHEMATICAL SANS-SERIF SMALL I" #x1D5C2)
-    ("MATHEMATICAL SANS-SERIF SMALL J" #x1D5C3)
-    ("MATHEMATICAL SANS-SERIF SMALL K" #x1D5C4)
-    ("MATHEMATICAL SANS-SERIF SMALL L" #x1D5C5)
-    ("MATHEMATICAL SANS-SERIF SMALL M" #x1D5C6)
-    ("MATHEMATICAL SANS-SERIF SMALL N" #x1D5C7)
-    ("MATHEMATICAL SANS-SERIF SMALL O" #x1D5C8)
-    ("MATHEMATICAL SANS-SERIF SMALL P" #x1D5C9)
-    ("MATHEMATICAL SANS-SERIF SMALL Q" #x1D5CA)
-    ("MATHEMATICAL SANS-SERIF SMALL R" #x1D5CB)
-    ("MATHEMATICAL SANS-SERIF SMALL S" #x1D5CC)
-    ("MATHEMATICAL SANS-SERIF SMALL T" #x1D5CD)
-    ("MATHEMATICAL SANS-SERIF SMALL U" #x1D5CE)
-    ("MATHEMATICAL SANS-SERIF SMALL V" #x1D5CF)
-    ("MATHEMATICAL SANS-SERIF SMALL W" #x1D5D0)
-    ("MATHEMATICAL SANS-SERIF SMALL X" #x1D5D1)
-    ("MATHEMATICAL SANS-SERIF SMALL Y" #x1D5D2)
-    ("MATHEMATICAL SANS-SERIF SMALL Z" #x1D5D3)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL A" #x1D5D4)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL B" #x1D5D5)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL C" #x1D5D6)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL D" #x1D5D7)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL E" #x1D5D8)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL F" #x1D5D9)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL G" #x1D5DA)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL H" #x1D5DB)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL I" #x1D5DC)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL J" #x1D5DD)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL K" #x1D5DE)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL L" #x1D5DF)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL M" #x1D5E0)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL N" #x1D5E1)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL O" #x1D5E2)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL P" #x1D5E3)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Q" #x1D5E4)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL R" #x1D5E5)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL S" #x1D5E6)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL T" #x1D5E7)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL U" #x1D5E8)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL V" #x1D5E9)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL W" #x1D5EA)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL X" #x1D5EB)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Y" #x1D5EC)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Z" #x1D5ED)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL A" #x1D5EE)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL B" #x1D5EF)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL C" #x1D5F0)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL D" #x1D5F1)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL E" #x1D5F2)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL F" #x1D5F3)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL G" #x1D5F4)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL H" #x1D5F5)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL I" #x1D5F6)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL J" #x1D5F7)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL K" #x1D5F8)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL L" #x1D5F9)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL M" #x1D5FA)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL N" #x1D5FB)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL O" #x1D5FC)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL P" #x1D5FD)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL Q" #x1D5FE)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL R" #x1D5FF)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL S" #x1D600)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL T" #x1D601)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL U" #x1D602)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL V" #x1D603)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL W" #x1D604)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL X" #x1D605)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL Y" #x1D606)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL Z" #x1D607)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL A" #x1D608)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL B" #x1D609)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL C" #x1D60A)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL D" #x1D60B)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL E" #x1D60C)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL F" #x1D60D)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL G" #x1D60E)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL H" #x1D60F)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL I" #x1D610)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL J" #x1D611)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL K" #x1D612)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL L" #x1D613)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL M" #x1D614)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL N" #x1D615)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL O" #x1D616)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL P" #x1D617)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q" #x1D618)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL R" #x1D619)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL S" #x1D61A)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL T" #x1D61B)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL U" #x1D61C)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL V" #x1D61D)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL W" #x1D61E)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL X" #x1D61F)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y" #x1D620)
-    ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z" #x1D621)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL A" #x1D622)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL B" #x1D623)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL C" #x1D624)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL D" #x1D625)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL E" #x1D626)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL F" #x1D627)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL G" #x1D628)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL H" #x1D629)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL I" #x1D62A)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL J" #x1D62B)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL K" #x1D62C)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL L" #x1D62D)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL M" #x1D62E)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL N" #x1D62F)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL O" #x1D630)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL P" #x1D631)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL Q" #x1D632)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL R" #x1D633)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL S" #x1D634)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL T" #x1D635)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL U" #x1D636)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL V" #x1D637)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL W" #x1D638)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL X" #x1D639)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL Y" #x1D63A)
-    ("MATHEMATICAL SANS-SERIF ITALIC SMALL Z" #x1D63B)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A" #x1D63C)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B" #x1D63D)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C" #x1D63E)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D" #x1D63F)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E" #x1D640)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F" #x1D641)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G" #x1D642)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H" #x1D643)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I" #x1D644)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J" #x1D645)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K" #x1D646)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L" #x1D647)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M" #x1D648)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N" #x1D649)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O" #x1D64A)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P" #x1D64B)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q" #x1D64C)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R" #x1D64D)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S" #x1D64E)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T" #x1D64F)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U" #x1D650)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V" #x1D651)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W" #x1D652)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X" #x1D653)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y" #x1D654)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z" #x1D655)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A" #x1D656)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B" #x1D657)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C" #x1D658)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D" #x1D659)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E" #x1D65A)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F" #x1D65B)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G" #x1D65C)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H" #x1D65D)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I" #x1D65E)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J" #x1D65F)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K" #x1D660)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L" #x1D661)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M" #x1D662)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N" #x1D663)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O" #x1D664)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P" #x1D665)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q" #x1D666)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R" #x1D667)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S" #x1D668)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T" #x1D669)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U" #x1D66A)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V" #x1D66B)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W" #x1D66C)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X" #x1D66D)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y" #x1D66E)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z" #x1D66F)
-    ("MATHEMATICAL MONOSPACE CAPITAL A" #x1D670)
-    ("MATHEMATICAL MONOSPACE CAPITAL B" #x1D671)
-    ("MATHEMATICAL MONOSPACE CAPITAL C" #x1D672)
-    ("MATHEMATICAL MONOSPACE CAPITAL D" #x1D673)
-    ("MATHEMATICAL MONOSPACE CAPITAL E" #x1D674)
-    ("MATHEMATICAL MONOSPACE CAPITAL F" #x1D675)
-    ("MATHEMATICAL MONOSPACE CAPITAL G" #x1D676)
-    ("MATHEMATICAL MONOSPACE CAPITAL H" #x1D677)
-    ("MATHEMATICAL MONOSPACE CAPITAL I" #x1D678)
-    ("MATHEMATICAL MONOSPACE CAPITAL J" #x1D679)
-    ("MATHEMATICAL MONOSPACE CAPITAL K" #x1D67A)
-    ("MATHEMATICAL MONOSPACE CAPITAL L" #x1D67B)
-    ("MATHEMATICAL MONOSPACE CAPITAL M" #x1D67C)
-    ("MATHEMATICAL MONOSPACE CAPITAL N" #x1D67D)
-    ("MATHEMATICAL MONOSPACE CAPITAL O" #x1D67E)
-    ("MATHEMATICAL MONOSPACE CAPITAL P" #x1D67F)
-    ("MATHEMATICAL MONOSPACE CAPITAL Q" #x1D680)
-    ("MATHEMATICAL MONOSPACE CAPITAL R" #x1D681)
-    ("MATHEMATICAL MONOSPACE CAPITAL S" #x1D682)
-    ("MATHEMATICAL MONOSPACE CAPITAL T" #x1D683)
-    ("MATHEMATICAL MONOSPACE CAPITAL U" #x1D684)
-    ("MATHEMATICAL MONOSPACE CAPITAL V" #x1D685)
-    ("MATHEMATICAL MONOSPACE CAPITAL W" #x1D686)
-    ("MATHEMATICAL MONOSPACE CAPITAL X" #x1D687)
-    ("MATHEMATICAL MONOSPACE CAPITAL Y" #x1D688)
-    ("MATHEMATICAL MONOSPACE CAPITAL Z" #x1D689)
-    ("MATHEMATICAL MONOSPACE SMALL A" #x1D68A)
-    ("MATHEMATICAL MONOSPACE SMALL B" #x1D68B)
-    ("MATHEMATICAL MONOSPACE SMALL C" #x1D68C)
-    ("MATHEMATICAL MONOSPACE SMALL D" #x1D68D)
-    ("MATHEMATICAL MONOSPACE SMALL E" #x1D68E)
-    ("MATHEMATICAL MONOSPACE SMALL F" #x1D68F)
-    ("MATHEMATICAL MONOSPACE SMALL G" #x1D690)
-    ("MATHEMATICAL MONOSPACE SMALL H" #x1D691)
-    ("MATHEMATICAL MONOSPACE SMALL I" #x1D692)
-    ("MATHEMATICAL MONOSPACE SMALL J" #x1D693)
-    ("MATHEMATICAL MONOSPACE SMALL K" #x1D694)
-    ("MATHEMATICAL MONOSPACE SMALL L" #x1D695)
-    ("MATHEMATICAL MONOSPACE SMALL M" #x1D696)
-    ("MATHEMATICAL MONOSPACE SMALL N" #x1D697)
-    ("MATHEMATICAL MONOSPACE SMALL O" #x1D698)
-    ("MATHEMATICAL MONOSPACE SMALL P" #x1D699)
-    ("MATHEMATICAL MONOSPACE SMALL Q" #x1D69A)
-    ("MATHEMATICAL MONOSPACE SMALL R" #x1D69B)
-    ("MATHEMATICAL MONOSPACE SMALL S" #x1D69C)
-    ("MATHEMATICAL MONOSPACE SMALL T" #x1D69D)
-    ("MATHEMATICAL MONOSPACE SMALL U" #x1D69E)
-    ("MATHEMATICAL MONOSPACE SMALL V" #x1D69F)
-    ("MATHEMATICAL MONOSPACE SMALL W" #x1D6A0)
-    ("MATHEMATICAL MONOSPACE SMALL X" #x1D6A1)
-    ("MATHEMATICAL MONOSPACE SMALL Y" #x1D6A2)
-    ("MATHEMATICAL MONOSPACE SMALL Z" #x1D6A3)
-    ("MATHEMATICAL BOLD CAPITAL ALPHA" #x1D6A8)
-    ("MATHEMATICAL BOLD CAPITAL BETA" #x1D6A9)
-    ("MATHEMATICAL BOLD CAPITAL GAMMA" #x1D6AA)
-    ("MATHEMATICAL BOLD CAPITAL DELTA" #x1D6AB)
-    ("MATHEMATICAL BOLD CAPITAL EPSILON" #x1D6AC)
-    ("MATHEMATICAL BOLD CAPITAL ZETA" #x1D6AD)
-    ("MATHEMATICAL BOLD CAPITAL ETA" #x1D6AE)
-    ("MATHEMATICAL BOLD CAPITAL THETA" #x1D6AF)
-    ("MATHEMATICAL BOLD CAPITAL IOTA" #x1D6B0)
-    ("MATHEMATICAL BOLD CAPITAL KAPPA" #x1D6B1)
-    ("MATHEMATICAL BOLD CAPITAL LAMDA" #x1D6B2)
-    ("MATHEMATICAL BOLD CAPITAL MU" #x1D6B3)
-    ("MATHEMATICAL BOLD CAPITAL NU" #x1D6B4)
-    ("MATHEMATICAL BOLD CAPITAL XI" #x1D6B5)
-    ("MATHEMATICAL BOLD CAPITAL OMICRON" #x1D6B6)
-    ("MATHEMATICAL BOLD CAPITAL PI" #x1D6B7)
-    ("MATHEMATICAL BOLD CAPITAL RHO" #x1D6B8)
-    ("MATHEMATICAL BOLD CAPITAL THETA SYMBOL" #x1D6B9)
-    ("MATHEMATICAL BOLD CAPITAL SIGMA" #x1D6BA)
-    ("MATHEMATICAL BOLD CAPITAL TAU" #x1D6BB)
-    ("MATHEMATICAL BOLD CAPITAL UPSILON" #x1D6BC)
-    ("MATHEMATICAL BOLD CAPITAL PHI" #x1D6BD)
-    ("MATHEMATICAL BOLD CAPITAL CHI" #x1D6BE)
-    ("MATHEMATICAL BOLD CAPITAL PSI" #x1D6BF)
-    ("MATHEMATICAL BOLD CAPITAL OMEGA" #x1D6C0)
-    ("MATHEMATICAL BOLD NABLA" #x1D6C1)
-    ("MATHEMATICAL BOLD SMALL ALPHA" #x1D6C2)
-    ("MATHEMATICAL BOLD SMALL BETA" #x1D6C3)
-    ("MATHEMATICAL BOLD SMALL GAMMA" #x1D6C4)
-    ("MATHEMATICAL BOLD SMALL DELTA" #x1D6C5)
-    ("MATHEMATICAL BOLD SMALL EPSILON" #x1D6C6)
-    ("MATHEMATICAL BOLD SMALL ZETA" #x1D6C7)
-    ("MATHEMATICAL BOLD SMALL ETA" #x1D6C8)
-    ("MATHEMATICAL BOLD SMALL THETA" #x1D6C9)
-    ("MATHEMATICAL BOLD SMALL IOTA" #x1D6CA)
-    ("MATHEMATICAL BOLD SMALL KAPPA" #x1D6CB)
-    ("MATHEMATICAL BOLD SMALL LAMDA" #x1D6CC)
-    ("MATHEMATICAL BOLD SMALL MU" #x1D6CD)
-    ("MATHEMATICAL BOLD SMALL NU" #x1D6CE)
-    ("MATHEMATICAL BOLD SMALL XI" #x1D6CF)
-    ("MATHEMATICAL BOLD SMALL OMICRON" #x1D6D0)
-    ("MATHEMATICAL BOLD SMALL PI" #x1D6D1)
-    ("MATHEMATICAL BOLD SMALL RHO" #x1D6D2)
-    ("MATHEMATICAL BOLD SMALL FINAL SIGMA" #x1D6D3)
-    ("MATHEMATICAL BOLD SMALL SIGMA" #x1D6D4)
-    ("MATHEMATICAL BOLD SMALL TAU" #x1D6D5)
-    ("MATHEMATICAL BOLD SMALL UPSILON" #x1D6D6)
-    ("MATHEMATICAL BOLD SMALL PHI" #x1D6D7)
-    ("MATHEMATICAL BOLD SMALL CHI" #x1D6D8)
-    ("MATHEMATICAL BOLD SMALL PSI" #x1D6D9)
-    ("MATHEMATICAL BOLD SMALL OMEGA" #x1D6DA)
-    ("MATHEMATICAL BOLD PARTIAL DIFFERENTIAL" #x1D6DB)
-    ("MATHEMATICAL BOLD EPSILON SYMBOL" #x1D6DC)
-    ("MATHEMATICAL BOLD THETA SYMBOL" #x1D6DD)
-    ("MATHEMATICAL BOLD KAPPA SYMBOL" #x1D6DE)
-    ("MATHEMATICAL BOLD PHI SYMBOL" #x1D6DF)
-    ("MATHEMATICAL BOLD RHO SYMBOL" #x1D6E0)
-    ("MATHEMATICAL BOLD PI SYMBOL" #x1D6E1)
-    ("MATHEMATICAL ITALIC CAPITAL ALPHA" #x1D6E2)
-    ("MATHEMATICAL ITALIC CAPITAL BETA" #x1D6E3)
-    ("MATHEMATICAL ITALIC CAPITAL GAMMA" #x1D6E4)
-    ("MATHEMATICAL ITALIC CAPITAL DELTA" #x1D6E5)
-    ("MATHEMATICAL ITALIC CAPITAL EPSILON" #x1D6E6)
-    ("MATHEMATICAL ITALIC CAPITAL ZETA" #x1D6E7)
-    ("MATHEMATICAL ITALIC CAPITAL ETA" #x1D6E8)
-    ("MATHEMATICAL ITALIC CAPITAL THETA" #x1D6E9)
-    ("MATHEMATICAL ITALIC CAPITAL IOTA" #x1D6EA)
-    ("MATHEMATICAL ITALIC CAPITAL KAPPA" #x1D6EB)
-    ("MATHEMATICAL ITALIC CAPITAL LAMDA" #x1D6EC)
-    ("MATHEMATICAL ITALIC CAPITAL MU" #x1D6ED)
-    ("MATHEMATICAL ITALIC CAPITAL NU" #x1D6EE)
-    ("MATHEMATICAL ITALIC CAPITAL XI" #x1D6EF)
-    ("MATHEMATICAL ITALIC CAPITAL OMICRON" #x1D6F0)
-    ("MATHEMATICAL ITALIC CAPITAL PI" #x1D6F1)
-    ("MATHEMATICAL ITALIC CAPITAL RHO" #x1D6F2)
-    ("MATHEMATICAL ITALIC CAPITAL THETA SYMBOL" #x1D6F3)
-    ("MATHEMATICAL ITALIC CAPITAL SIGMA" #x1D6F4)
-    ("MATHEMATICAL ITALIC CAPITAL TAU" #x1D6F5)
-    ("MATHEMATICAL ITALIC CAPITAL UPSILON" #x1D6F6)
-    ("MATHEMATICAL ITALIC CAPITAL PHI" #x1D6F7)
-    ("MATHEMATICAL ITALIC CAPITAL CHI" #x1D6F8)
-    ("MATHEMATICAL ITALIC CAPITAL PSI" #x1D6F9)
-    ("MATHEMATICAL ITALIC CAPITAL OMEGA" #x1D6FA)
-    ("MATHEMATICAL ITALIC NABLA" #x1D6FB)
-    ("MATHEMATICAL ITALIC SMALL ALPHA" #x1D6FC)
-    ("MATHEMATICAL ITALIC SMALL BETA" #x1D6FD)
-    ("MATHEMATICAL ITALIC SMALL GAMMA" #x1D6FE)
-    ("MATHEMATICAL ITALIC SMALL DELTA" #x1D6FF)
-    ("MATHEMATICAL ITALIC SMALL EPSILON" #x1D700)
-    ("MATHEMATICAL ITALIC SMALL ZETA" #x1D701)
-    ("MATHEMATICAL ITALIC SMALL ETA" #x1D702)
-    ("MATHEMATICAL ITALIC SMALL THETA" #x1D703)
-    ("MATHEMATICAL ITALIC SMALL IOTA" #x1D704)
-    ("MATHEMATICAL ITALIC SMALL KAPPA" #x1D705)
-    ("MATHEMATICAL ITALIC SMALL LAMDA" #x1D706)
-    ("MATHEMATICAL ITALIC SMALL MU" #x1D707)
-    ("MATHEMATICAL ITALIC SMALL NU" #x1D708)
-    ("MATHEMATICAL ITALIC SMALL XI" #x1D709)
-    ("MATHEMATICAL ITALIC SMALL OMICRON" #x1D70A)
-    ("MATHEMATICAL ITALIC SMALL PI" #x1D70B)
-    ("MATHEMATICAL ITALIC SMALL RHO" #x1D70C)
-    ("MATHEMATICAL ITALIC SMALL FINAL SIGMA" #x1D70D)
-    ("MATHEMATICAL ITALIC SMALL SIGMA" #x1D70E)
-    ("MATHEMATICAL ITALIC SMALL TAU" #x1D70F)
-    ("MATHEMATICAL ITALIC SMALL UPSILON" #x1D710)
-    ("MATHEMATICAL ITALIC SMALL PHI" #x1D711)
-    ("MATHEMATICAL ITALIC SMALL CHI" #x1D712)
-    ("MATHEMATICAL ITALIC SMALL PSI" #x1D713)
-    ("MATHEMATICAL ITALIC SMALL OMEGA" #x1D714)
-    ("MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL" #x1D715)
-    ("MATHEMATICAL ITALIC EPSILON SYMBOL" #x1D716)
-    ("MATHEMATICAL ITALIC THETA SYMBOL" #x1D717)
-    ("MATHEMATICAL ITALIC KAPPA SYMBOL" #x1D718)
-    ("MATHEMATICAL ITALIC PHI SYMBOL" #x1D719)
-    ("MATHEMATICAL ITALIC RHO SYMBOL" #x1D71A)
-    ("MATHEMATICAL ITALIC PI SYMBOL" #x1D71B)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL ALPHA" #x1D71C)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL BETA" #x1D71D)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL GAMMA" #x1D71E)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL DELTA" #x1D71F)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL EPSILON" #x1D720)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL ZETA" #x1D721)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL ETA" #x1D722)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL THETA" #x1D723)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL IOTA" #x1D724)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL KAPPA" #x1D725)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL LAMDA" #x1D726)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL MU" #x1D727)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL NU" #x1D728)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL XI" #x1D729)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL OMICRON" #x1D72A)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL PI" #x1D72B)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL RHO" #x1D72C)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL" #x1D72D)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL SIGMA" #x1D72E)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL TAU" #x1D72F)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL UPSILON" #x1D730)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL PHI" #x1D731)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL CHI" #x1D732)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL PSI" #x1D733)
-    ("MATHEMATICAL BOLD ITALIC CAPITAL OMEGA" #x1D734)
-    ("MATHEMATICAL BOLD ITALIC NABLA" #x1D735)
-    ("MATHEMATICAL BOLD ITALIC SMALL ALPHA" #x1D736)
-    ("MATHEMATICAL BOLD ITALIC SMALL BETA" #x1D737)
-    ("MATHEMATICAL BOLD ITALIC SMALL GAMMA" #x1D738)
-    ("MATHEMATICAL BOLD ITALIC SMALL DELTA" #x1D739)
-    ("MATHEMATICAL BOLD ITALIC SMALL EPSILON" #x1D73A)
-    ("MATHEMATICAL BOLD ITALIC SMALL ZETA" #x1D73B)
-    ("MATHEMATICAL BOLD ITALIC SMALL ETA" #x1D73C)
-    ("MATHEMATICAL BOLD ITALIC SMALL THETA" #x1D73D)
-    ("MATHEMATICAL BOLD ITALIC SMALL IOTA" #x1D73E)
-    ("MATHEMATICAL BOLD ITALIC SMALL KAPPA" #x1D73F)
-    ("MATHEMATICAL BOLD ITALIC SMALL LAMDA" #x1D740)
-    ("MATHEMATICAL BOLD ITALIC SMALL MU" #x1D741)
-    ("MATHEMATICAL BOLD ITALIC SMALL NU" #x1D742)
-    ("MATHEMATICAL BOLD ITALIC SMALL XI" #x1D743)
-    ("MATHEMATICAL BOLD ITALIC SMALL OMICRON" #x1D744)
-    ("MATHEMATICAL BOLD ITALIC SMALL PI" #x1D745)
-    ("MATHEMATICAL BOLD ITALIC SMALL RHO" #x1D746)
-    ("MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA" #x1D747)
-    ("MATHEMATICAL BOLD ITALIC SMALL SIGMA" #x1D748)
-    ("MATHEMATICAL BOLD ITALIC SMALL TAU" #x1D749)
-    ("MATHEMATICAL BOLD ITALIC SMALL UPSILON" #x1D74A)
-    ("MATHEMATICAL BOLD ITALIC SMALL PHI" #x1D74B)
-    ("MATHEMATICAL BOLD ITALIC SMALL CHI" #x1D74C)
-    ("MATHEMATICAL BOLD ITALIC SMALL PSI" #x1D74D)
-    ("MATHEMATICAL BOLD ITALIC SMALL OMEGA" #x1D74E)
-    ("MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D74F)
-    ("MATHEMATICAL BOLD ITALIC EPSILON SYMBOL" #x1D750)
-    ("MATHEMATICAL BOLD ITALIC THETA SYMBOL" #x1D751)
-    ("MATHEMATICAL BOLD ITALIC KAPPA SYMBOL" #x1D752)
-    ("MATHEMATICAL BOLD ITALIC PHI SYMBOL" #x1D753)
-    ("MATHEMATICAL BOLD ITALIC RHO SYMBOL" #x1D754)
-    ("MATHEMATICAL BOLD ITALIC PI SYMBOL" #x1D755)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA" #x1D756)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA" #x1D757)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA" #x1D758)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA" #x1D759)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON" #x1D75A)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA" #x1D75B)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA" #x1D75C)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA" #x1D75D)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA" #x1D75E)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA" #x1D75F)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA" #x1D760)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL MU" #x1D761)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL NU" #x1D762)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL XI" #x1D763)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON" #x1D764)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PI" #x1D765)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO" #x1D766)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL" #x1D767)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA" #x1D768)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU" #x1D769)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON" #x1D76A)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI" #x1D76B)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI" #x1D76C)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI" #x1D76D)
-    ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA" #x1D76E)
-    ("MATHEMATICAL SANS-SERIF BOLD NABLA" #x1D76F)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA" #x1D770)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL BETA" #x1D771)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA" #x1D772)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL DELTA" #x1D773)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON" #x1D774)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL ZETA" #x1D775)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL ETA" #x1D776)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL THETA" #x1D777)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL IOTA" #x1D778)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA" #x1D779)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA" #x1D77A)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL MU" #x1D77B)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL NU" #x1D77C)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL XI" #x1D77D)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON" #x1D77E)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL PI" #x1D77F)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL RHO" #x1D780)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA" #x1D781)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA" #x1D782)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL TAU" #x1D783)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON" #x1D784)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL PHI" #x1D785)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL CHI" #x1D786)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL PSI" #x1D787)
-    ("MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA" #x1D788)
-    ("MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL" #x1D789)
-    ("MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL" #x1D78A)
-    ("MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL" #x1D78B)
-    ("MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL" #x1D78C)
-    ("MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL" #x1D78D)
-    ("MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL" #x1D78E)
-    ("MATHEMATICAL SANS-SERIF BOLD PI SYMBOL" #x1D78F)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA" #x1D790)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA" #x1D791)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA" #x1D792)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA" #x1D793)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON" #x1D794)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA" #x1D795)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA" #x1D796)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA" #x1D797)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA" #x1D798)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA" #x1D799)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA" #x1D79A)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU" #x1D79B)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU" #x1D79C)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI" #x1D79D)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON" #x1D79E)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI" #x1D79F)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO" #x1D7A0)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL" #x1D7A1)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA" #x1D7A2)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU" #x1D7A3)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON" #x1D7A4)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI" #x1D7A5)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI" #x1D7A6)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI" #x1D7A7)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA" #x1D7A8)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA" #x1D7A9)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA" #x1D7AA)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA" #x1D7AB)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA" #x1D7AC)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA" #x1D7AD)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON" #x1D7AE)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA" #x1D7AF)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA" #x1D7B0)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA" #x1D7B1)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA" #x1D7B2)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA" #x1D7B3)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA" #x1D7B4)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU" #x1D7B5)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU" #x1D7B6)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI" #x1D7B7)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON" #x1D7B8)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI" #x1D7B9)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO" #x1D7BA)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA" #x1D7BB)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA" #x1D7BC)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU" #x1D7BD)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON" #x1D7BE)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI" #x1D7BF)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI" #x1D7C0)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI" #x1D7C1)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA" #x1D7C2)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D7C3)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL" #x1D7C4)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL" #x1D7C5)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL" #x1D7C6)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL" #x1D7C7)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL" #x1D7C8)
-    ("MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL" #x1D7C9)
-    ("MATHEMATICAL BOLD DIGIT ZERO" #x1D7CE)
-    ("MATHEMATICAL BOLD DIGIT ONE" #x1D7CF)
-    ("MATHEMATICAL BOLD DIGIT TWO" #x1D7D0)
-    ("MATHEMATICAL BOLD DIGIT THREE" #x1D7D1)
-    ("MATHEMATICAL BOLD DIGIT FOUR" #x1D7D2)
-    ("MATHEMATICAL BOLD DIGIT FIVE" #x1D7D3)
-    ("MATHEMATICAL BOLD DIGIT SIX" #x1D7D4)
-    ("MATHEMATICAL BOLD DIGIT SEVEN" #x1D7D5)
-    ("MATHEMATICAL BOLD DIGIT EIGHT" #x1D7D6)
-    ("MATHEMATICAL BOLD DIGIT NINE" #x1D7D7)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO" #x1D7D8)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT ONE" #x1D7D9)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT TWO" #x1D7DA)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT THREE" #x1D7DB)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR" #x1D7DC)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE" #x1D7DD)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT SIX" #x1D7DE)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN" #x1D7DF)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT" #x1D7E0)
-    ("MATHEMATICAL DOUBLE-STRUCK DIGIT NINE" #x1D7E1)
-    ("MATHEMATICAL SANS-SERIF DIGIT ZERO" #x1D7E2)
-    ("MATHEMATICAL SANS-SERIF DIGIT ONE" #x1D7E3)
-    ("MATHEMATICAL SANS-SERIF DIGIT TWO" #x1D7E4)
-    ("MATHEMATICAL SANS-SERIF DIGIT THREE" #x1D7E5)
-    ("MATHEMATICAL SANS-SERIF DIGIT FOUR" #x1D7E6)
-    ("MATHEMATICAL SANS-SERIF DIGIT FIVE" #x1D7E7)
-    ("MATHEMATICAL SANS-SERIF DIGIT SIX" #x1D7E8)
-    ("MATHEMATICAL SANS-SERIF DIGIT SEVEN" #x1D7E9)
-    ("MATHEMATICAL SANS-SERIF DIGIT EIGHT" #x1D7EA)
-    ("MATHEMATICAL SANS-SERIF DIGIT NINE" #x1D7EB)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO" #x1D7EC)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT ONE" #x1D7ED)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT TWO" #x1D7EE)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT THREE" #x1D7EF)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR" #x1D7F0)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE" #x1D7F1)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT SIX" #x1D7F2)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN" #x1D7F3)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT" #x1D7F4)
-    ("MATHEMATICAL SANS-SERIF BOLD DIGIT NINE" #x1D7F5)
-    ("MATHEMATICAL MONOSPACE DIGIT ZERO" #x1D7F6)
-    ("MATHEMATICAL MONOSPACE DIGIT ONE" #x1D7F7)
-    ("MATHEMATICAL MONOSPACE DIGIT TWO" #x1D7F8)
-    ("MATHEMATICAL MONOSPACE DIGIT THREE" #x1D7F9)
-    ("MATHEMATICAL MONOSPACE DIGIT FOUR" #x1D7FA)
-    ("MATHEMATICAL MONOSPACE DIGIT FIVE" #x1D7FB)
-    ("MATHEMATICAL MONOSPACE DIGIT SIX" #x1D7FC)
-    ("MATHEMATICAL MONOSPACE DIGIT SEVEN" #x1D7FD)
-    ("MATHEMATICAL MONOSPACE DIGIT EIGHT" #x1D7FE)
-    ("MATHEMATICAL MONOSPACE DIGIT NINE" #x1D7FF)
-    ))
-
diff --git a/etc/nxml/E0000-E007F.el b/etc/nxml/E0000-E007F.el
deleted file mode 100644 (file)
index db1d8ad..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-(nxml-define-char-name-set 'tags
-  '(("LANGUAGE TAG" #xE0001)
-    ("TAG SPACE" #xE0020)
-    ("TAG EXCLAMATION MARK" #xE0021)
-    ("TAG QUOTATION MARK" #xE0022)
-    ("TAG NUMBER SIGN" #xE0023)
-    ("TAG DOLLAR SIGN" #xE0024)
-    ("TAG PERCENT SIGN" #xE0025)
-    ("TAG AMPERSAND" #xE0026)
-    ("TAG APOSTROPHE" #xE0027)
-    ("TAG LEFT PARENTHESIS" #xE0028)
-    ("TAG RIGHT PARENTHESIS" #xE0029)
-    ("TAG ASTERISK" #xE002A)
-    ("TAG PLUS SIGN" #xE002B)
-    ("TAG COMMA" #xE002C)
-    ("TAG HYPHEN-MINUS" #xE002D)
-    ("TAG FULL STOP" #xE002E)
-    ("TAG SOLIDUS" #xE002F)
-    ("TAG DIGIT ZERO" #xE0030)
-    ("TAG DIGIT ONE" #xE0031)
-    ("TAG DIGIT TWO" #xE0032)
-    ("TAG DIGIT THREE" #xE0033)
-    ("TAG DIGIT FOUR" #xE0034)
-    ("TAG DIGIT FIVE" #xE0035)
-    ("TAG DIGIT SIX" #xE0036)
-    ("TAG DIGIT SEVEN" #xE0037)
-    ("TAG DIGIT EIGHT" #xE0038)
-    ("TAG DIGIT NINE" #xE0039)
-    ("TAG COLON" #xE003A)
-    ("TAG SEMICOLON" #xE003B)
-    ("TAG LESS-THAN SIGN" #xE003C)
-    ("TAG EQUALS SIGN" #xE003D)
-    ("TAG GREATER-THAN SIGN" #xE003E)
-    ("TAG QUESTION MARK" #xE003F)
-    ("TAG COMMERCIAL AT" #xE0040)
-    ("TAG LATIN CAPITAL LETTER A" #xE0041)
-    ("TAG LATIN CAPITAL LETTER B" #xE0042)
-    ("TAG LATIN CAPITAL LETTER C" #xE0043)
-    ("TAG LATIN CAPITAL LETTER D" #xE0044)
-    ("TAG LATIN CAPITAL LETTER E" #xE0045)
-    ("TAG LATIN CAPITAL LETTER F" #xE0046)
-    ("TAG LATIN CAPITAL LETTER G" #xE0047)
-    ("TAG LATIN CAPITAL LETTER H" #xE0048)
-    ("TAG LATIN CAPITAL LETTER I" #xE0049)
-    ("TAG LATIN CAPITAL LETTER J" #xE004A)
-    ("TAG LATIN CAPITAL LETTER K" #xE004B)
-    ("TAG LATIN CAPITAL LETTER L" #xE004C)
-    ("TAG LATIN CAPITAL LETTER M" #xE004D)
-    ("TAG LATIN CAPITAL LETTER N" #xE004E)
-    ("TAG LATIN CAPITAL LETTER O" #xE004F)
-    ("TAG LATIN CAPITAL LETTER P" #xE0050)
-    ("TAG LATIN CAPITAL LETTER Q" #xE0051)
-    ("TAG LATIN CAPITAL LETTER R" #xE0052)
-    ("TAG LATIN CAPITAL LETTER S" #xE0053)
-    ("TAG LATIN CAPITAL LETTER T" #xE0054)
-    ("TAG LATIN CAPITAL LETTER U" #xE0055)
-    ("TAG LATIN CAPITAL LETTER V" #xE0056)
-    ("TAG LATIN CAPITAL LETTER W" #xE0057)
-    ("TAG LATIN CAPITAL LETTER X" #xE0058)
-    ("TAG LATIN CAPITAL LETTER Y" #xE0059)
-    ("TAG LATIN CAPITAL LETTER Z" #xE005A)
-    ("TAG LEFT SQUARE BRACKET" #xE005B)
-    ("TAG REVERSE SOLIDUS" #xE005C)
-    ("TAG RIGHT SQUARE BRACKET" #xE005D)
-    ("TAG CIRCUMFLEX ACCENT" #xE005E)
-    ("TAG LOW LINE" #xE005F)
-    ("TAG GRAVE ACCENT" #xE0060)
-    ("TAG LATIN SMALL LETTER A" #xE0061)
-    ("TAG LATIN SMALL LETTER B" #xE0062)
-    ("TAG LATIN SMALL LETTER C" #xE0063)
-    ("TAG LATIN SMALL LETTER D" #xE0064)
-    ("TAG LATIN SMALL LETTER E" #xE0065)
-    ("TAG LATIN SMALL LETTER F" #xE0066)
-    ("TAG LATIN SMALL LETTER G" #xE0067)
-    ("TAG LATIN SMALL LETTER H" #xE0068)
-    ("TAG LATIN SMALL LETTER I" #xE0069)
-    ("TAG LATIN SMALL LETTER J" #xE006A)
-    ("TAG LATIN SMALL LETTER K" #xE006B)
-    ("TAG LATIN SMALL LETTER L" #xE006C)
-    ("TAG LATIN SMALL LETTER M" #xE006D)
-    ("TAG LATIN SMALL LETTER N" #xE006E)
-    ("TAG LATIN SMALL LETTER O" #xE006F)
-    ("TAG LATIN SMALL LETTER P" #xE0070)
-    ("TAG LATIN SMALL LETTER Q" #xE0071)
-    ("TAG LATIN SMALL LETTER R" #xE0072)
-    ("TAG LATIN SMALL LETTER S" #xE0073)
-    ("TAG LATIN SMALL LETTER T" #xE0074)
-    ("TAG LATIN SMALL LETTER U" #xE0075)
-    ("TAG LATIN SMALL LETTER V" #xE0076)
-    ("TAG LATIN SMALL LETTER W" #xE0077)
-    ("TAG LATIN SMALL LETTER X" #xE0078)
-    ("TAG LATIN SMALL LETTER Y" #xE0079)
-    ("TAG LATIN SMALL LETTER Z" #xE007A)
-    ("TAG LEFT CURLY BRACKET" #xE007B)
-    ("TAG VERTICAL LINE" #xE007C)
-    ("TAG RIGHT CURLY BRACKET" #xE007D)
-    ("TAG TILDE" #xE007E)
-    ("CANCEL TAG" #xE007F)
-    ))
-
index 5fa152ae5bfbc7d7186d9c2a2d3be10974fc710e..150d943b7e215f27a3a9e7466524bdb6d153487d 100644 (file)
@@ -345,9 +345,12 @@ extraclean: maintainer-clean
 check:
        @echo "We don't have any tests for the lib-src/ directory yet."
 
+tagsfiles = $(wildcard ${srcdir}/*.[ch])
+
+.PHONY: tags
 tags: TAGS
-TAGS: etags${EXEEXT}
-       etags *.[ch]
+TAGS: etags${EXEEXT} ${tagsfiles}
+       ./etags ${tagsfiles}
 
 ../lib/libgnu.a: $(config_h)
        $(MAKE) -C ../lib all
index 6e3b6a9a7735591147e417600e6b00f77b8ffd25..74a6fc151aa0d1e040ec2ddb636036aaeed6610f 100644 (file)
@@ -28,7 +28,17 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <sys/types.h>
 #ifdef WINDOWSNT
 #include "ntlib.h"
-#include <winsock.h>
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0501    /* for getaddrinfo stuff */
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#undef getaddrinfo
+#define getaddrinfo  sys_getaddrinfo
+#undef freeaddrinfo
+#define freeaddrinfo sys_freeaddrinfo
+int sys_getaddrinfo (const char * node, const char * service,
+                    const struct addrinfo * hints, struct addrinfo ** res);
+void sys_freeaddrinfo (struct addrinfo * ai);
 #undef SOCKET_ERROR
 #define RECV(s,buf,len,flags) recv (s,buf,len,flags)
 #define SEND(s,buf,len,flags) send (s,buf,len,flags)
@@ -92,12 +102,6 @@ extern char *krb_realmofhost (/* char * */);
 #endif /* ! KERBEROS5 */
 #endif /* KERBEROS */
 
-#ifndef WINDOWSNT
-#ifndef HAVE_H_ERRNO
-extern int h_errno;
-#endif
-#endif
-
 static int socket_connection (char *, int);
 static int pop_getline (popserver, char **);
 static int sendline (popserver, const char *);
@@ -962,13 +966,9 @@ static int have_winsock = 0;
 static int
 socket_connection (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;
@@ -1055,7 +1055,6 @@ socket_connection (char *host, int flags)
 
     }
 
-#ifdef HAVE_GETADDRINFO
   memset (&hints, 0, sizeof (hints));
   hints.ai_socktype = SOCK_STREAM;
   hints.ai_flags = AI_CANONNAME;
@@ -1087,34 +1086,6 @@ socket_connection (char *host, int flags)
     }
   freeaddrinfo (res);
 
-#else /* !HAVE_GETADDRINFO */
-  do
-    {
-      hostent = gethostbyname (host);
-      try_count++;
-      if ((! hostent) && ((h_errno != TRY_AGAIN) || (try_count == 5)))
-       {
-         strcpy (pop_error, "Could not determine POP server's address");
-         return (-1);
-       }
-    } while (! hostent);
-
-  while (*hostent->h_addr_list)
-    {
-      memcpy (&addr.sin_addr, *hostent->h_addr_list, hostent->h_length);
-      if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
-       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 (! connect_ok)
@@ -1581,4 +1552,143 @@ find_crlf (char *in_string, int len)
   return (0);
 }
 
+#ifdef WINDOWSNT
+/* The following 2 functions are only available since XP, so we load
+   them dynamically and provide fallbacks.  */
+
+int (WINAPI *pfn_getaddrinfo) (const char *, const char *,
+                              const struct addrinfo *, struct addrinfo **);
+void (WINAPI *pfn_freeaddrinfo) (struct addrinfo *);
+
+static int
+load_ws2 (void)
+{
+  static int ws2_loaded = 0;
+
+  if (!ws2_loaded)
+    {
+      HANDLE ws2_lib = LoadLibrary ("Ws2_32.dll");
+
+      if (ws2_lib != NULL)
+       {
+         ws2_loaded = 1;
+         pfn_getaddrinfo = (void *) GetProcAddress (ws2_lib, "getaddrinfo");
+         pfn_freeaddrinfo = (void *) GetProcAddress (ws2_lib, "freeaddrinfo");
+         /* Paranoia: these two functions should go together, so if
+            one is absent, we cannot use the other.  */
+         if (pfn_getaddrinfo == NULL)
+           pfn_freeaddrinfo = NULL;
+         else if (pfn_freeaddrinfo == NULL)
+           pfn_getaddrinfo = NULL;
+       }
+    }
+  if (!ws2_loaded)
+    {
+      errno = ENETDOWN;
+      return -1;
+    }
+  return 0;
+}
+
+
+int
+sys_getaddrinfo (const char *node, const char *service,
+                const struct addrinfo *hints, struct addrinfo **res)
+{
+  int rc;
+
+  if (load_ws2 () != 0)
+    {
+      errno = ENETDOWN;
+      return WSANO_RECOVERY;
+    }
+
+  if (pfn_getaddrinfo)
+    rc = pfn_getaddrinfo (node, service, hints, res);
+  else
+    {
+      int port = 0;
+      struct hostent *host_info;
+      struct gai_storage {
+       struct addrinfo addrinfo;
+       struct sockaddr_in sockaddr_in;
+      } *gai_storage;
+
+      /* We don't support any flags besides AI_CANONNAME.  */
+      if (hints && (hints->ai_flags & ~(AI_CANONNAME)) != 0)
+       return WSAEINVAL;
+      /* NODE cannot be NULL, since pop.c has fallbacks for that.  */
+      if (!node)
+       return WSAHOST_NOT_FOUND;
+
+      if (service)
+       {
+         const char *protocol =
+           (hints && hints->ai_socktype == SOCK_DGRAM) ? "udp" : "tcp";
+         struct servent *srv = getservbyname (service, protocol);
+
+         if (srv)
+           port = srv->s_port;
+         else
+           return WSAHOST_NOT_FOUND;
+       }
+
+      gai_storage = calloc (1, sizeof *gai_storage);
+      gai_storage->sockaddr_in.sin_port = port;
+      host_info = gethostbyname (node);
+      if (host_info)
+       {
+         memcpy (&gai_storage->sockaddr_in.sin_addr,
+                 host_info->h_addr, host_info->h_length);
+         gai_storage->sockaddr_in.sin_family = host_info->h_addrtype;
+       }
+      else
+       {
+         free (gai_storage);
+         return WSAHOST_NOT_FOUND;
+       }
+
+      gai_storage->addrinfo.ai_addr =
+       (struct sockaddr *)&gai_storage->sockaddr_in;
+      gai_storage->addrinfo.ai_addrlen = sizeof (gai_storage->sockaddr_in);
+      if (hints && (hints->ai_flags & AI_CANONNAME) != 0)
+       {
+         gai_storage->addrinfo.ai_canonname = strdup (host_info->h_name);
+         if (!gai_storage->addrinfo.ai_canonname)
+           {
+             free (gai_storage);
+             return WSA_NOT_ENOUGH_MEMORY;
+           }
+       }
+      gai_storage->addrinfo.ai_protocol = (hints) ? hints->ai_protocol : 0;
+      gai_storage->addrinfo.ai_socktype = (hints) ? hints->ai_socktype : 0;
+      gai_storage->addrinfo.ai_family = gai_storage->sockaddr_in.sin_family;
+      gai_storage->addrinfo.ai_next = NULL;
+
+      *res = &gai_storage->addrinfo;
+      rc = 0;
+    }
+
+  return rc;
+}
+
+void
+sys_freeaddrinfo (struct addrinfo *ai)
+{
+  if (load_ws2 () != 0)
+    {
+      errno = ENETDOWN;
+      return;
+    }
+
+  if (pfn_freeaddrinfo)
+    pfn_freeaddrinfo (ai);
+  else
+    {
+      if (ai->ai_canonname)
+       free (ai->ai_canonname);
+      free (ai);
+    }
+}
+#endif /* WINDOWSNT */
 #endif /* MAIL_USE_POP */
index cda96811ebc587f95c10ab9fa7e388785a51dcfd..316c63725a760018ec6da54a17078ad9ee57a6ef 100644 (file)
@@ -1,3 +1,23 @@
+# Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+# GNU Emacs assumes GNU Make.
+AUTOMAKE_OPTIONS = -Wno-portability
+
 BUILT_SOURCES =
 CLEANFILES =
 EXTRA_DIST =
@@ -17,6 +37,17 @@ include gnulib.mk
 libgnu_a_SOURCES += openat-die.c save-cwd.c
 endif
 
+if HYBRID_MALLOC_LIB
+noinst_LIBRARIES += libegnu.a
+endif
+
+libegnu_a_SOURCES = $(libgnu_a_SOURCES)
+libegnu_a_LIBADD = $(patsubst %.o,e-%.o,$(libgnu_a_LIBADD))
+EXTRA_libegnu_a_SOURCES = $(EXTRA_libgnu_a_SOURCES)
+libegnu_a_SHORTNAME = e
+libegnu_a_CPPFLAGS = -Demacs
+MOSTLYCLEANFILES += libegnu.a
+
 .PHONY: bootstrap-clean
 
 bootstrap-clean: maintainer-clean
diff --git a/lib/filevercmp.c b/lib/filevercmp.c
new file mode 100644 (file)
index 0000000..a75c946
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+   Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
+   Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
+   Copyright (C) 2008-2016 Free Software Foundation, Inc.
+
+   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 <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+#include "filevercmp.h"
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+#include <c-ctype.h>
+#include <limits.h>
+
+/* Match a file suffix defined by this regular expression:
+   /(\.[A-Za-z~][A-Za-z0-9~]*)*$/
+   Scan the string *STR and return a pointer to the matching suffix, or
+   NULL if not found.  Upon return, *STR points to terminating NUL.  */
+static const char *
+match_suffix (const char **str)
+{
+  const char *match = NULL;
+  bool read_alpha = false;
+  while (**str)
+    {
+      if (read_alpha)
+        {
+          read_alpha = false;
+          if (!c_isalpha (**str) && '~' != **str)
+            match = NULL;
+        }
+      else if ('.' == **str)
+        {
+          read_alpha = true;
+          if (!match)
+            match = *str;
+        }
+      else if (!c_isalnum (**str) && '~' != **str)
+        match = NULL;
+      (*str)++;
+    }
+  return match;
+}
+
+/* verrevcmp helper function */
+static int
+order (unsigned char c)
+{
+  if (c_isdigit (c))
+    return 0;
+  else if (c_isalpha (c))
+    return c;
+  else if (c == '~')
+    return -1;
+  else
+    return (int) c + UCHAR_MAX + 1;
+}
+
+/* slightly modified verrevcmp function from dpkg
+   S1, S2 - compared string
+   S1_LEN, S2_LEN - length of strings to be scanned
+
+   This implements the algorithm for comparison of version strings
+   specified by Debian and now widely adopted.  The detailed
+   specification can be found in the Debian Policy Manual in the
+   section on the 'Version' control field.  This version of the code
+   implements that from s5.6.12 of Debian Policy v3.8.0.1
+   http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version */
+static int _GL_ATTRIBUTE_PURE
+verrevcmp (const char *s1, size_t s1_len, const char *s2, size_t s2_len)
+{
+  size_t s1_pos = 0;
+  size_t s2_pos = 0;
+  while (s1_pos < s1_len || s2_pos < s2_len)
+    {
+      int first_diff = 0;
+      while ((s1_pos < s1_len && !c_isdigit (s1[s1_pos]))
+             || (s2_pos < s2_len && !c_isdigit (s2[s2_pos])))
+        {
+          int s1_c = (s1_pos == s1_len) ? 0 : order (s1[s1_pos]);
+          int s2_c = (s2_pos == s2_len) ? 0 : order (s2[s2_pos]);
+          if (s1_c != s2_c)
+            return s1_c - s2_c;
+          s1_pos++;
+          s2_pos++;
+        }
+      while (s1[s1_pos] == '0')
+        s1_pos++;
+      while (s2[s2_pos] == '0')
+        s2_pos++;
+      while (c_isdigit (s1[s1_pos]) && c_isdigit (s2[s2_pos]))
+        {
+          if (!first_diff)
+            first_diff = s1[s1_pos] - s2[s2_pos];
+          s1_pos++;
+          s2_pos++;
+        }
+      if (c_isdigit (s1[s1_pos]))
+        return 1;
+      if (c_isdigit (s2[s2_pos]))
+        return -1;
+      if (first_diff)
+        return first_diff;
+    }
+  return 0;
+}
+
+/* Compare version strings S1 and S2.
+   See filevercmp.h for function description.  */
+int
+filevercmp (const char *s1, const char *s2)
+{
+  const char *s1_pos;
+  const char *s2_pos;
+  const char *s1_suffix, *s2_suffix;
+  size_t s1_len, s2_len;
+  int result;
+
+  /* easy comparison to see if strings are identical */
+  int simple_cmp = strcmp (s1, s2);
+  if (simple_cmp == 0)
+    return 0;
+
+  /* special handle for "", "." and ".." */
+  if (!*s1)
+    return -1;
+  if (!*s2)
+    return 1;
+  if (0 == strcmp (".", s1))
+    return -1;
+  if (0 == strcmp (".", s2))
+    return 1;
+  if (0 == strcmp ("..", s1))
+    return -1;
+  if (0 == strcmp ("..", s2))
+    return 1;
+
+  /* special handle for other hidden files */
+  if (*s1 == '.' && *s2 != '.')
+    return -1;
+  if (*s1 != '.' && *s2 == '.')
+    return 1;
+  if (*s1 == '.' && *s2 == '.')
+    {
+      s1++;
+      s2++;
+    }
+
+  /* "cut" file suffixes */
+  s1_pos = s1;
+  s2_pos = s2;
+  s1_suffix = match_suffix (&s1_pos);
+  s2_suffix = match_suffix (&s2_pos);
+  s1_len = (s1_suffix ? s1_suffix : s1_pos) - s1;
+  s2_len = (s2_suffix ? s2_suffix : s2_pos) - s2;
+
+  /* restore file suffixes if strings are identical after "cut" */
+  if ((s1_suffix || s2_suffix) && (s1_len == s2_len)
+      && 0 == strncmp (s1, s2, s1_len))
+    {
+      s1_len = s1_pos - s1;
+      s2_len = s2_pos - s2;
+    }
+
+  result = verrevcmp (s1, s1_len, s2, s2_len);
+  return result == 0 ? simple_cmp : result;
+}
diff --git a/lib/filevercmp.h b/lib/filevercmp.h
new file mode 100644 (file)
index 0000000..220b71b
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+   Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
+   Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
+   Copyright (C) 2008-2016 Free Software Foundation, Inc.
+
+   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 <http://www.gnu.org/licenses/>. */
+
+#ifndef FILEVERCMP_H
+#define FILEVERCMP_H
+
+/* Compare version strings:
+
+   This function compares strings S1 and S2:
+   1) By PREFIX in the same way as strcmp.
+   2) Then by VERSION (most similarly to version compare of Debian's dpkg).
+      Leading zeros in version numbers are ignored.
+   3) If both (PREFIX and  VERSION) are equal, strcmp function is used for
+      comparison. So this function can return 0 if (and only if) strings S1
+      and S2 are identical.
+
+   It returns number >0 for S1 > S2, 0 for S1 == S2 and number <0 for S1 < S2.
+
+   This function compares strings, in a way that if VER1 and VER2 are version
+   numbers and PREFIX and SUFFIX (SUFFIX defined as (\.[A-Za-z~][A-Za-z0-9~]*)*)
+   are strings then VER1 < VER2 implies filevercmp (PREFIX VER1 SUFFIX,
+   PREFIX VER2 SUFFIX) < 0.
+
+   This function is intended to be a replacement for strverscmp. */
+int filevercmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE;
+
+#endif /* FILEVERCMP_H */
index b920cbbc9bbacb6082174054ba8d4acbc84cd1ec..cc8429658e1f5bf2adbb3ff73d3d13fbf55cba33 100644 (file)
@@ -21,7 +21,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings
+# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode filevercmp fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time std-gnu11 stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings
 
 
 MOSTLYCLEANFILES += core *.stackdump
@@ -441,6 +441,14 @@ EXTRA_DIST += filemode.h
 
 ## end   gnulib module filemode
 
+## begin gnulib module filevercmp
+
+libgnu_a_SOURCES += filevercmp.c
+
+EXTRA_DIST += filevercmp.h
+
+## end   gnulib module filevercmp
+
 ## begin gnulib module fpending
 
 
index f33dd011eda570176bfa01f1cce0efbafd15855d..12bb9c7a3ceccaf930798f808defb3dc72dd1d9b 100644 (file)
@@ -81,23 +81,23 @@ AUTOGENEL = loaddefs.el \
        cus-load.el \
        finder-inf.el \
        subdirs.el \
+       ps-print-loaddefs.el \
        emacs-lisp/cl-loaddefs.el \
        calc/calc-loaddefs.el \
        eshell/esh-groups.el \
        cedet/semantic/loaddefs.el \
        cedet/ede/loaddefs.el \
        cedet/srecode/loaddefs.el \
-       org/org-loaddefs.el
-
-# Value of max-lisp-eval-depth when compiling initially.
-# During bootstrapping the byte-compiler is run interpreted when compiling
-# itself, and uses more stack than usual.
-#
-BIG_STACK_DEPTH = 2200
-BIG_STACK_OPTS = --eval "(setq max-lisp-eval-depth $(BIG_STACK_DEPTH))"
+       org/org-loaddefs.el \
+       textmodes/reftex-loaddefs.el \
+       mail/rmail-loaddefs.el \
+       ibuffer-loaddefs.el \
+       htmlfontify-loaddefs \
+       emacs-lisp/eieio-loaddefs.el \
+       dired-loaddefs.el
 
 # Set load-prefer-newer for the benefit of the non-bootstrappers.
-BYTE_COMPILE_FLAGS = $(BIG_STACK_OPTS) \
+BYTE_COMPILE_FLAGS = \
   --eval '(setq load-prefer-newer t)' $(BYTE_COMPILE_EXTRA_FLAGS)
 
 # Files to compile before others during a bootstrap.  This is done to
@@ -185,6 +185,13 @@ $(lisp)/loaddefs.el: $(LOADDEFS)
            --eval '(setq generated-autoload-file (expand-file-name (unmsys--file-name "$@")))' \
            -f batch-update-autoloads ${SUBDIRS_ALMOST}
 
+# autoloads only runs when loaddefs.el is nonexistent, although it
+# generates a number of different files. Provide a force option to enable
+# regeneration of all these files.
+autoloads-force .PHONY:
+       rm loaddefs.el
+       $(MAKE) autoloads
+
 # This is required by the bootstrap-emacs target in ../src/Makefile, so
 # we know that if we have an emacs executable, we also have a subdirs.el.
 $(lisp)/subdirs.el:
@@ -218,25 +225,28 @@ update-gnus-news:
          "$(top_srcdir)/doc/misc/gnus-news.texi" \
          "$(top_srcdir)/etc/GNUS-NEWS"
 
-ETAGS = ../lib-src/etags
+FORCE:
+.PHONY: FORCE
+
+tagsfiles = $(shell find ${srcdir} -name '*.el')
+tagsfiles := $(filter-out ${srcdir}/%loaddefs.el,${tagsfiles})
+tagsfiles := $(filter-out ${srcdir}/ldefs-boot.el,${tagsfiles})
+tagsfiles := $(filter-out ${srcdir}/eshell/esh-groups.el,${tagsfiles})
+
+ETAGS = ../lib-src/etags${EXEEXT}
 
-lisptagsfiles1 = $(srcdir)/*.el
-lisptagsfiles2 = $(srcdir)/*/*.el
-lisptagsfiles3 = $(srcdir)/*/*/*.el
-lisptagsfiles4 = $(srcdir)/*/*/*/*.el
+${ETAGS}: FORCE
+       ${MAKE} -C ../lib-src $(notdir $@)
 
-## The ls | sed | xargs is to stop the command line getting too long
+## The use of xargs is to stop the command line getting too long
 ## on MS Windows, when the MSYS Bash passes it to a MinGW compiled
 ## etags.  It might be better to use find in a similar way to
 ## compile-main.  But maybe this is not even necessary any more now
 ## that this uses relative filenames.
-TAGS: $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4)
+TAGS: ${ETAGS} ${tagsfiles}
        rm -f $@
        touch $@
-       ls $(lisptagsfiles1) $(lisptagsfiles2) \
-          $(lisptagsfiles3) $(lisptagsfiles4) | \
-           sed -e '/loaddefs/d; /\/ldefs-boot/d; /esh-groups\.el/d' | \
-           xargs $(XARGS_LIMIT) "$(ETAGS)" -a -o $@
+       ls ${tagsfiles} | xargs $(XARGS_LIMIT) "${ETAGS}" -a -o $@
 
 
 # The src/Makefile.in has its own set of dependencies and when they decide
@@ -399,7 +409,7 @@ $(TRAMP_DIR)/tramp-loaddefs.el: $(TRAMP_SRC)
 CAL_DIR = $(lisp)/calendar
 ## Those files that may contain internal calendar autoload cookies.
 CAL_SRC = $(addprefix ${CAL_DIR}/,diary-lib.el holidays.el lunar.el solar.el)
-CAL_SRC := $(sort ${CAL_SRC} $(wildcard ${CAL_DIR}/cal*.el))
+CAL_SRC := $(sort ${CAL_SRC} $(wildcard ${CAL_DIR}/cal-*.el))
 CAL_SRC := $(filter-out ${CAL_DIR}/cal-loaddefs.el,${CAL_SRC})
 
 $(CAL_DIR)/cal-loaddefs.el: $(CAL_SRC)
index d181d97703ec722558b75fdc8d2902cb91b898f1..7814ea24b4a44daa4465d9ab26b610c9917f3696 100644 (file)
@@ -33,6 +33,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl-lib))
+(require 'obarray)
 
 (defgroup abbrev-mode nil
   "Word abbreviations mode."
@@ -87,7 +88,7 @@ be replaced by its expansion."
   "Make a new abbrev-table with the same abbrevs as TABLE.
 Does not copy property lists."
   (let ((new-table (make-abbrev-table)))
-    (mapatoms
+    (obarray-map
      (lambda (symbol)
        (define-abbrev new-table
         (symbol-name symbol)
@@ -406,12 +407,12 @@ A prefix argument means don't query; expand all abbrevs."
 
 (defun abbrev-table-get (table prop)
   "Get the PROP property of abbrev table TABLE."
-  (let ((sym (intern-soft "" table)))
+  (let ((sym (obarray-get 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)))
+  (let ((sym (obarray-put table "")))
     (set sym nil)           ; Make sure it won't be confused for an abbrev.
     (put sym prop val)))
 
@@ -435,8 +436,7 @@ See `define-abbrev' for the effect of some special properties.
 (defun make-abbrev-table (&optional props)
   "Create a new, empty abbrev table object.
 PROPS is a list of properties."
-  ;; The value 59 is an arbitrary prime number.
-  (let ((table (make-vector 59 0)))
+  (let ((table (obarray-make)))
     ;; 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
@@ -451,7 +451,7 @@ PROPS is a list of properties."
 
 (defun abbrev-table-p (object)
   "Return non-nil if OBJECT is an abbrev table."
-  (and (vectorp object)
+  (and (obarrayp object)
        (numberp (abbrev-table-get object :abbrev-table-modiff))))
 
 (defun abbrev-table-empty-p (object &optional ignore-system)
@@ -460,12 +460,12 @@ If IGNORE-SYSTEM is non-nil, system definitions are ignored."
   (unless (abbrev-table-p object)
     (error "Non abbrev table object"))
   (not (catch 'some
-        (mapatoms (lambda (abbrev)
-                    (unless (or (zerop (length (symbol-name abbrev)))
-                                (and ignore-system
-                                     (abbrev-get abbrev :system)))
-                      (throw 'some t)))
-                  object))))
+        (obarray-map (lambda (abbrev)
+                        (unless (or (zerop (length (symbol-name abbrev)))
+                                    (and ignore-system
+                                         (abbrev-get abbrev :system)))
+                          (throw 'some t)))
+                      object))))
 
 (defvar global-abbrev-table (make-abbrev-table)
   "The abbrev table whose abbrevs affect all buffers.
@@ -529,12 +529,12 @@ the current abbrev table before abbrev lookup happens."
 (defun clear-abbrev-table (table)
   "Undefine all abbrevs in abbrev table TABLE, leaving it empty."
   (setq abbrevs-changed t)
-  (let* ((sym (intern-soft "" table)))
+  (let* ((sym (obarray-get table "")))
     (dotimes (i (length table))
       (aset table i 0))
     ;; Preserve the table's properties.
     (cl-assert sym)
-    (let ((newsym (intern "" table)))
+    (let ((newsym (obarray-put table "")))
       (set newsym nil)      ; Make sure it won't be confused for an abbrev.
       (setplist newsym (symbol-plist sym)))
     (abbrev-table-put table :abbrev-table-modiff
@@ -583,7 +583,7 @@ An obsolete but still supported calling form is:
   (setq props (plist-put props :abbrev-table-modiff
                          (abbrev-table-get table :abbrev-table-modiff)))
   (let ((system-flag (plist-get props :system))
-        (sym (intern name table)))
+        (sym (obarray-put table name)))
     ;; 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)))
@@ -673,10 +673,10 @@ The value is nil if that abbrev is not defined."
          ;; abbrevs do, we have to be careful.
          (sym
           ;; First try without case-folding.
-          (or (intern-soft abbrev table)
+          (or (obarray-get table abbrev)
               (when case-fold
                 ;; We didn't find any abbrev, try case-folding.
-                (let ((sym (intern-soft (downcase abbrev) table)))
+                (let ((sym (obarray-get table (downcase abbrev))))
                   ;; Only use it if it doesn't require :case-fixed.
                   (and sym (not (abbrev-get sym :case-fixed))
                        sym))))))
@@ -1005,17 +1005,17 @@ PROMPT is the prompt to use for the keymap.
 SORTFUN is passed to `sort' to change the default ordering."
   (unless sortfun (setq sortfun 'string-lessp))
   (let ((entries ()))
-    (mapatoms (lambda (abbrev)
-                (when (symbol-value abbrev)
-                  (let ((name (symbol-name abbrev)))
-                    (push `(,(intern name) menu-item ,name
-                            (lambda () (interactive)
-                              (abbrev-insert ',abbrev)))
-                          entries))))
-              table)
+    (obarray-map (lambda (abbrev)
+                   (when (symbol-value abbrev)
+                     (let ((name (symbol-name abbrev)))
+                       (push `(,(intern name) menu-item ,name
+                               (lambda () (interactive)
+                                 (abbrev-insert ',abbrev)))
+                             entries))))
+                 table)
     (nconc (make-sparse-keymap prompt)
            (sort entries (lambda (x y)
-                (funcall sortfun (nth 2 x) (nth 2 y)))))))
+                           (funcall sortfun (nth 2 x) (nth 2 y)))))))
 
 ;; Keep it after define-abbrev-table, since define-derived-mode uses
 ;; define-abbrev-table.
index 7e439f3e073a3440dd1ab30230deceef2f87cac4..866aaadaf4dd380ff2662595d043182373d219dd 100644 (file)
@@ -577,7 +577,7 @@ The possible settings for `align-region-separate' are:
                     (eq '- current-prefix-arg)))))
 
     (css-declaration
-     (regexp . "^\\s-*\\w+:\\(\\s-*\\).*;")
+     (regexp . "^\\s-*\\(?:\\w-?\\)+:\\(\\s-*\\).*;")
      (group . (1))
      (modes . '(css-mode html-mode))))
   "A list describing all of the available alignment rules.
@@ -802,6 +802,9 @@ See the variable `align-exclude-rules-list' for more details.")
 (defvar align-highlight-overlays nil
   "The current overlays highlighting the text matched by a rule.")
 
+(defvar align-regexp-history nil
+  "Input history for the full user-entered regex in `align-regexp'")
+
 ;; Sample extension rule set, for vhdl-mode.  This should properly be
 ;; in vhdl-mode.el itself.
 
@@ -946,7 +949,7 @@ construct a rule to pass to `align-region', which does the real work."
     (list (region-beginning) (region-end))
     (if current-prefix-arg
        (list (read-string "Complex align using regexp: "
-                          "\\(\\s-*\\)")
+                          "\\(\\s-*\\)" 'align-regexp-history)
              (string-to-number
               (read-string
                "Parenthesis group to modify (justify if negative): " "1"))
@@ -1051,7 +1054,9 @@ to be colored."
 
 ;;;###autoload
 (defun align-newline-and-indent ()
-  "A replacement function for `newline-and-indent', aligning as it goes."
+  "A replacement function for `newline-and-indent', aligning as it goes.
+The alignment is done by calling `align' on the region that was
+indented."
   (interactive)
   (let ((separate (or (if (and (symbolp align-region-separate)
                               (boundp align-region-separate))
index eb145bdc5719a181079136d2276ad317db8061c1..caeb7cafd124866680617fa71f15e7008ecb2e51 100644 (file)
@@ -867,19 +867,23 @@ Returns list of symbols and documentation found."
              symbol)))))
 
 (defun apropos-documentation-internal (doc)
-  (if (consp doc)
-      (apropos-documentation-check-elc-file (car doc))
-    (if (and doc
-            (string-match apropos-all-words-regexp doc)
-            (apropos-true-hit-doc doc))
-       (when apropos-match-face
-         (setq doc (substitute-command-keys (copy-sequence doc)))
-         (if (or (string-match apropos-pattern-quoted doc)
-                 (string-match apropos-all-words-regexp doc))
-             (put-text-property (match-beginning 0)
-                                (match-end 0)
-                                'face apropos-match-face doc))
-         doc))))
+  (cond
+   ((consp doc)
+    (apropos-documentation-check-elc-file (car doc)))
+   ((and doc
+         ;; Sanity check in case bad data has snuck into the
+         ;; documentation slot.
+         (stringp doc)
+         (string-match apropos-all-words-regexp doc)
+         (apropos-true-hit-doc doc))
+    (when apropos-match-face
+      (setq doc (substitute-command-keys (copy-sequence doc)))
+      (if (or (string-match apropos-pattern-quoted doc)
+              (string-match apropos-all-words-regexp doc))
+          (put-text-property (match-beginning 0)
+                             (match-end 0)
+                             'face apropos-match-face doc))
+      doc))))
 
 (defun apropos-format-plist (pl sep &optional compare)
   (setq pl (symbol-plist pl))
@@ -1040,9 +1044,12 @@ Each element should have the format
 The return value is the list that was in `apropos-accumulator', sorted
 alphabetically by symbol name; but this function also sets
 `apropos-accumulator' to nil before returning.
-
-If SPACING is non-nil, it should be a string; separate items with that string.
-If non-nil, TEXT is a string that will be printed as a heading."
+If DO-KEYS is non-nil, output the key bindings.  If NOSUBST is
+nil, substitute \"ASCII quotes\" (i.e., grace accent and
+apostrophe) with curly quotes), and if non-nil, leave them alone.
+If SPACING is non-nil, it should be a string; separate items with
+that string.  If non-nil, TEXT is a string that will be printed
+as a heading."
   (if (null apropos-accumulator)
       (message "No apropos matches for `%s'" apropos-pattern)
     (setq apropos-accumulator
similarity index 96%
rename from lisp/gnus/auth-source.el
rename to lisp/auth-source.el
index 52765ce6b314d466e94d145db443b512b57e2e30..fe28a02c20050262db45ca29a086a7fd3055bf3c 100644 (file)
@@ -40,8 +40,6 @@
 ;;; Code:
 
 (require 'password-cache)
-(require 'mm-util)
-(require 'gnus-util)
 
 (eval-when-compile (require 'cl))
 (require 'eieio)
@@ -372,11 +370,7 @@ with \"[a/b/c] \" if CHOICES is \(?a ?b ?c)."
            k)
 
       (while (not (memq k choices))
-        (setq k (cond
-                 ((fboundp 'read-char-choice)
-                  (read-char-choice full-prompt choices))
-                 (t (message "%s" full-prompt)
-                    (setq k (read-char))))))
+        (setq k (read-char-choice full-prompt choices)))
       k)))
 
 ;; (auth-source-pick nil :host "any" :port 'imap :user "joe")
@@ -1092,12 +1086,10 @@ Note that the MAX parameter is used so we can exit the parse early."
         (when (setq item2 (auth-source-netrc-parse-one))
           ;; Did we get a "machine" value?
           (if (equal item2 "machine")
-              (progn
-                (gnus-error 1
-                 "%s: Unexpected `machine' token at line %d"
-                 "auth-source-netrc-parse-entries"
-                 (auth-source-current-line))
-                (forward-line 1))
+             (error
+              "%s: Unexpected `machine' token at line %d"
+              "auth-source-netrc-parse-entries"
+              (auth-source-current-line))
             (push (cons item item2) alist)))))
 
     ;; Clean up: if there's an entry left over, use it.
@@ -1601,9 +1593,9 @@ authentication tokens:
                                           (list k (plist-get spec k))))
                                       search-keys))))
          ;; needed keys (always including host, login, port, and secret)
-         (returned-keys (mm-delete-duplicates (append
-                                               '(:host :login :port :secret)
-                                               search-keys)))
+         (returned-keys (delete-dups (append
+                                     '(:host :login :port :secret)
+                                     search-keys)))
          (items
           (loop for search-spec in search-specs
                nconc
@@ -1715,12 +1707,13 @@ entries for git.gnus.org:
 
   (let* ((coll (oref backend source))
          (max (or max 5000))     ; sanity check: default to stop at 5K
-         (ignored-keys '(:create :delete :max :backend :label))
+         ;; Filter out ignored keys from the spec
+         (ignored-keys '(:create :delete :max :backend :label :host :port))
+         ;; Build a search spec without the ignored keys
          (search-keys (loop for i below (length spec) by 2
                             unless (memq (nth i spec) ignored-keys)
                             collect (nth i spec)))
-         ;; build a search spec without the ignored keys
-         ;; if a search key is nil or t (match anything), we skip it
+         ;; If a search key value is nil or t (match anything), we skip it
          (search-spec (apply #'append (mapcar
                                       (lambda (k)
                                         (if (or (null (plist-get spec k))
@@ -1729,14 +1722,28 @@ entries for git.gnus.org:
                                           (list k (plist-get spec k))))
                                       search-keys)))
          ;; needed keys (always including host, login, port, and secret)
-         (returned-keys (mm-delete-duplicates (append
-                                               '(:host :login :port :secret)
-                                               search-keys)))
-         (items (apply #'auth-source-macos-keychain-search-items
-                       coll
-                       type
-                       max
-                       search-spec))
+         (returned-keys (delete-dups (append
+                                     '(:host :login :port :secret)
+                                     search-keys)))
+         ;; Extract host and port from spec
+         (hosts (plist-get spec :host))
+         (hosts (if (and hosts (listp hosts)) hosts `(,hosts)))
+         (ports (plist-get spec :port))
+         (ports (if (and ports (listp ports)) ports `(,ports)))
+         ;; Loop through all combinations of host/port and pass each of these to
+         ;; auth-source-macos-keychain-search-items
+         (items (catch 'match
+                  (dolist (host hosts)
+                    (dolist (port ports)
+                      (let* ((port (if port (format "%S" port)))
+                             (items (apply #'auth-source-macos-keychain-search-items
+                                           coll
+                                           type
+                                           max
+                                           host port
+                                           search-spec)))
+                        (when items
+                          (throw 'match items)))))))
 
          ;; ensure each item has each key in `returned-keys'
          (items (mapcar (lambda (plist)
@@ -1751,11 +1758,28 @@ entries for git.gnus.org:
                         items)))
     items))
 
+
+(defun auth-source--decode-octal-string (string)
+  "Convert octal string to utf-8 string. E.g: 'a\134b' to 'a\b'"
+  (let ((list (string-to-list string))
+        (size (length string)))
+    (decode-coding-string
+     (apply #'unibyte-string
+            (loop for i = 0 then (+ i (if (eq (nth i list) ?\\) 4 1))
+                  for var = (nth i list)
+                  while (< i size)
+                  if (eq var ?\\)
+                  collect (string-to-number
+                           (concat (cl-subseq list (+ i 1) (+ i 4))) 8)
+                  else
+                  collect var))
+     'utf-8)))
+
 (defun* auth-source-macos-keychain-search-items (coll _type _max
+                                                      host port
                                                       &key label type
-                                                      host user port
+                                                      user
                                                       &allow-other-keys)
-
   (let* ((keychain-generic (eq type 'macos-keychain-generic))
          (args `(,(if keychain-generic
                       "find-generic-password"
@@ -1784,29 +1808,32 @@ entries for git.gnus.org:
         (goto-char (point-min))
         (while (not (eobp))
           (cond
-           ((looking-at "^password: \"\\(.+\\)\"$")
+           ((looking-at "^password: \\(?:0x[0-9A-F]+\\)? *\"\\(.+\\)\"")
             (setq ret (auth-source-macos-keychain-result-append
                        ret
                        keychain-generic
                        "secret"
-                       (lexical-let ((v (match-string 1)))
+                       (lexical-let ((v (auth-source--decode-octal-string
+                                         (match-string 1))))
                          (lambda () v)))))
            ;; TODO: check if this is really the label
            ;; match 0x00000007 <blob>="AppleID"
-           ((looking-at "^[ ]+0x00000007 <blob>=\"\\(.+\\)\"")
+           ((looking-at
+             "^[ ]+0x00000007 <blob>=\\(?:0x[0-9A-F]+\\)? *\"\\(.+\\)\"")
             (setq ret (auth-source-macos-keychain-result-append
                        ret
                        keychain-generic
                        "label"
-                       (match-string 1))))
+                       (auth-source--decode-octal-string (match-string 1)))))
            ;; match "crtr"<uint32>="aapl"
            ;; match "svce"<blob>="AppleID"
-           ((looking-at "^[ ]+\"\\([a-z]+\\)\"[^=]+=\"\\(.+\\)\"")
+           ((looking-at
+             "^[ ]+\"\\([a-z]+\\)\"[^=]+=\\(?:0x[0-9A-F]+\\)? *\"\\(.+\\)\"")
             (setq ret (auth-source-macos-keychain-result-append
                        ret
                        keychain-generic
-                       (match-string 1)
-                       (match-string 2)))))
+                       (auth-source--decode-octal-string (match-string 1))
+                       (auth-source--decode-octal-string (match-string 2))))))
           (forward-line)))
       ;; return `ret' iff it has the :secret key
       (and (plist-get ret :secret) (list ret))))
@@ -1856,9 +1883,9 @@ entries for git.gnus.org:
                                             (list k v))))
                                       search-keys)))
          ;; needed keys (always including host, login, port, and secret)
-         (returned-keys (mm-delete-duplicates (append
-                                               '(:host :login :port :secret)
-                                               search-keys)))
+         (returned-keys (delete-dups (append
+                                     '(:host :login :port :secret)
+                                     search-keys)))
          (items (plstore-find store search-spec))
          (item-names (mapcar #'car items))
          (items (butlast items (- (length items) max)))
index b8693dfb2106864b3b0d01e5154c72f3e6df60c2..1129af8a2fa06a81f7e48952d9da829998025d5a 100644 (file)
 ;; Emacs.  You should never even notice that this package is active
 ;; (except that your buffers will be reverted, of course).
 ;;
+;; If the file exists, Auto-Revert Mode updates the buffer based on
+;; its (possibly empty) contents.  If the file no longer exists, then
+;; there is nothing to revert, so it does not modify the buffer.  Once
+;; a deleted file corresponding to a buffer in Auto-Revert Mode
+;; reappears, Auto-Revert Mode continues to work.
+;;
 ;; If Emacs is compiled with file notification support, notifications
 ;; are used instead of checking the time stamp of the files.  You can
 ;; disable this by setting the user option `auto-revert-use-notify' to
 ;; excluded from file notifications can be specified by
 ;; `auto-revert-notify-exclude-dir-regexp'.
 ;;
-;; After reverting a file buffer, Auto Revert Mode normally puts point
+;; After reverting a file buffer, Auto-Revert Mode normally puts point
 ;; at the same position that a regular manual revert would.  However,
 ;; there is one exception to this rule.  If point is at the end of the
 ;; buffer before reverting, it stays at the end.  Similarly if point
 ;; is displayed at the end of a file buffer in any window, it will stay
 ;; at the end of the buffer in that window, even if the window is not
-;; selected.  This way, you can use Auto Revert Mode to `tail' a file.
+;; selected.  This way, you can use Auto-Revert Mode to `tail' a file.
 ;; Just put point at the end of the buffer and it will stay there.
 ;; These rules apply to file buffers. For non-file buffers, the
 ;; behavior may be mode dependent.
 ;;
-;; While you can use Auto Revert Mode to tail a file, this package
-;; contains a third minor mode, Auto Revert Tail Mode, which does so
+;; While you can use Auto-Revert Mode to tail a file, this package
+;; contains a third minor mode, Auto-Revert Tail Mode, which does so
 ;; more efficiently, as long as you are sure that the file will only
 ;; change by growing at the end.  It only appends the new output,
 ;; instead of reverting the entire buffer.  It does so even if the
 
 (defgroup auto-revert nil
   "Revert individual buffers when files on disk change.
-Auto-Revert mode enables auto-revert in individual buffers.
-Global Auto-Revert mode does so in all buffers."
+Auto-Revert Mode enables auto-revert in individual buffers.
+Global Auto-Revert Mode does so in all buffers."
   :group 'files
   :group 'convenience)
 
@@ -144,7 +150,7 @@ If a timer is already active, there are two ways to make sure
 that the new value will take effect immediately.  You can set
 this variable through Custom or you can call the command
 `auto-revert-set-timer' after setting the variable.  Otherwise,
-the new value will take effect the first time Auto Revert Mode
+the new value will take effect the first time Auto-Revert Mode
 calls `auto-revert-set-timer' for internal reasons or in your
 next editing session."
   :group 'auto-revert
@@ -176,7 +182,7 @@ When non-nil, a message is generated whenever a file is reverted."
   "String to display in the mode line when Auto-Revert Mode is active.
 
 \(When the string is not empty, make sure that it has a leading space.)"
-  :tag "Auto Revert Mode Text"         ; To separate it from `global-...'
+  :tag "Auto-Revert Mode Text"         ; To separate it from `global-...'
   :group 'auto-revert
   :type 'string)
 
@@ -190,7 +196,7 @@ When non-nil, a message is generated whenever a file is reverted."
 
 (defcustom auto-revert-mode-hook nil
   "Functions to run when Auto-Revert Mode is activated."
-  :tag "Auto Revert Mode Hook"         ; To separate it from `global-...'
+  :tag "Auto-Revert Mode Hook"         ; To separate it from `global-...'
   :group 'auto-revert
   :type 'hook)
 
@@ -209,11 +215,11 @@ would only waste precious space."
   :type 'hook)
 
 (defcustom global-auto-revert-non-file-buffers nil
-  "When nil, Global Auto-Revert mode operates only on file-visiting buffers.
+  "When nil, Global Auto-Revert Mode operates only on file-visiting buffers.
 
 When non-nil, both file buffers and buffers with a custom
 `revert-buffer-function' and a `buffer-stale-function' are
-reverted by Global Auto-Revert mode.  These include the Buffer
+reverted by Global Auto-Revert Mode.  These include the Buffer
 List buffer displayed by `buffer-menu', and Dired buffers showing
 complete local directories.  The Buffer List buffer reverts every
 `auto-revert-interval' seconds; Dired buffers when the file list of
@@ -240,8 +246,8 @@ For more information, see Info node `(emacs)Autorevert'."
   :type 'hook)
 
 (defcustom auto-revert-check-vc-info nil
-  "If non-nil Auto Revert Mode reliably updates version control info.
-Auto Revert Mode updates version control info whenever the buffer
+  "If non-nil Auto-Revert Mode reliably updates version control info.
+Auto-Revert Mode updates version control info whenever the buffer
 needs reverting, regardless of the value of this variable.
 However, the version control state can change without changes to
 the work file.  If the change is made from the current Emacs
@@ -271,7 +277,7 @@ This variable becomes buffer local when set in any fashion.")
   :version "24.4")
 
 (defcustom auto-revert-use-notify t
-  "If non-nil Auto Revert Mode uses file notification functions.
+  "If non-nil Auto-Revert Mode uses file notification functions.
 You should set this variable through Custom."
   :group 'auto-revert
   :type 'boolean
@@ -337,12 +343,12 @@ This has been reported by a file notification event.")
 
 ;;;###autoload
 (define-minor-mode auto-revert-mode
-  "Toggle reverting buffer when the file changes (Auto Revert mode).
-With a prefix argument ARG, enable Auto Revert mode if ARG is
+  "Toggle reverting buffer when the file changes (Auto-Revert Mode).
+With a prefix argument ARG, enable Auto-Revert Mode if ARG is
 positive, and disable it otherwise.  If called from Lisp, enable
 the mode if ARG is omitted or nil.
 
-Auto Revert mode is a minor mode that affects only the current
+Auto-Revert Mode is a minor mode that affects only the current
 buffer.  When enabled, it reverts the buffer when the file on
 disk changes.
 
@@ -351,8 +357,14 @@ Use `auto-revert-tail-mode' if you know that the file will only grow
 without being changed in the part that is already in the buffer."
   :group 'auto-revert :lighter auto-revert-mode-text
   (if auto-revert-mode
-      (if (not (memq (current-buffer) auto-revert-buffer-list))
-         (push (current-buffer) auto-revert-buffer-list))
+      (when (not (memq (current-buffer) auto-revert-buffer-list))
+        (push (current-buffer) auto-revert-buffer-list)
+        (add-hook
+         'kill-buffer-hook
+         (lambda ()
+           (setq auto-revert-buffer-list
+                 (delq (current-buffer) auto-revert-buffer-list)))
+         nil t))
     (when auto-revert-use-notify (auto-revert-notify-rm-watch))
     (setq auto-revert-buffer-list
          (delq (current-buffer) auto-revert-buffer-list)))
@@ -374,11 +386,11 @@ This function is designed to be added to hooks, for example:
 ;;;###autoload
 (define-minor-mode auto-revert-tail-mode
   "Toggle reverting tail of buffer when the file grows.
-With a prefix argument ARG, enable Auto-Revert Tail mode if ARG
+With a prefix argument ARG, enable Auto-Revert Tail Mode if ARG
 is positive, and disable it otherwise.  If called from Lisp,
 enable the mode if ARG is omitted or nil.
 
-When Auto Revert Tail mode is enabled, the tail of the file is
+When Auto-Revert Tail Mode is enabled, the tail of the file is
 constantly followed, as with the shell command `tail -f'.  This
 means that whenever the file grows on disk (presumably because
 some background process is appending to it from time to time),
@@ -428,7 +440,7 @@ Perform a full revert? ")
 
 ;;;###autoload
 (defun turn-on-auto-revert-tail-mode ()
-  "Turn on Auto-Revert Tail mode.
+  "Turn on Auto-Revert Tail Mode.
 
 This function is designed to be added to hooks, for example:
   (add-hook \\='my-logfile-mode-hook #\\='turn-on-auto-revert-tail-mode)"
@@ -437,12 +449,12 @@ This function is designed to be added to hooks, for example:
 
 ;;;###autoload
 (define-minor-mode global-auto-revert-mode
-  "Toggle Global Auto Revert mode.
-With a prefix argument ARG, enable Global Auto Revert mode if ARG
+  "Toggle Global Auto-Revert Mode.
+With a prefix argument ARG, enable Global Auto-Revert Mode if ARG
 is positive, and disable it otherwise.  If called from Lisp,
 enable the mode if ARG is omitted or nil.
 
-Global Auto Revert mode is a global minor mode that reverts any
+Global Auto-Revert Mode is a global minor mode that reverts any
 buffer associated with a file when the file changes on disk.  Use
 `auto-revert-mode' to revert a particular buffer.
 
@@ -458,11 +470,7 @@ specifies in the mode line."
   :global t :group 'auto-revert :lighter global-auto-revert-mode-text
   (auto-revert-set-timer)
   (if global-auto-revert-mode
-      (progn
-        ;; Disable file notification because it could use too many resources.
-        ;; See Bug#22814.
-        (setq auto-revert-use-notify nil)
-        (auto-revert-buffers))
+      (auto-revert-buffers)
     (dolist (buf (buffer-list))
       (with-current-buffer buf
        (when auto-revert-use-notify
@@ -577,16 +585,19 @@ no more reverts are possible until the next call of
 
       (if (eq action 'stopped)
           ;; File notification has stopped.  Continue with polling.
-          (cl-dolist (buffer buffers)
+          (cl-dolist (buffer
+                      (if global-auto-revert-mode
+                          (buffer-list) auto-revert-buffer-list))
             (with-current-buffer buffer
-              (when (or
-                     ;; A buffer associated with a file.
-                     (and (stringp buffer-file-name)
-                          (string-equal
-                           (file-name-nondirectory file)
-                           (file-name-nondirectory buffer-file-name)))
-                     ;; A buffer w/o a file, like dired.
-                     (null buffer-file-name))
+              (when (and (equal descriptor auto-revert-notify-watch-descriptor)
+                         (or
+                          ;; A buffer associated with a file.
+                          (and (stringp buffer-file-name)
+                               (string-equal
+                                (file-name-nondirectory file)
+                                (file-name-nondirectory buffer-file-name)))
+                          ;; A buffer w/o a file, like dired.
+                          (null buffer-file-name)))
                 (auto-revert-notify-rm-watch)
                 (setq-local auto-revert-use-notify nil))))
 
@@ -740,7 +751,7 @@ To avoid starvation, the buffers in `auto-revert-remaining-buffers'
 are checked first the next time this function is called.
 
 This function is also responsible for removing buffers no longer in
-Auto-Revert mode from `auto-revert-buffer-list', and for canceling
+Auto-Revert Mode from `auto-revert-buffer-list', and for canceling
 the timer when no buffers need to be checked."
 
   (setq auto-revert-buffers-counter
index b5e312f6c3e2913c4a7cf9dd606da4351e15c7fa..1b58489161e9dd995940aad5535748b8794cf543 100644 (file)
   :prefix "battery-"
   :group 'hardware)
 
-;; Either BATn or yeeloong-bat, basically.
-(defconst battery--linux-sysfs-regexp "[bB][aA][tT][0-9]?$")
+(defcustom battery-linux-sysfs-regexp "[bB][aA][tT][0-9]?$"
+  "Regexp for folder names to be searched under
+  /sys/class/power_supply/ that contain battery information."
+  :version "25.2"
+  :type 'regexp
+  :group 'battery)
 
 (defcustom battery-status-function
   (cond ((and (eq system-type 'gnu/linux)
@@ -51,7 +55,7 @@
        ((and (eq system-type 'gnu/linux)
              (file-directory-p "/sys/class/power_supply/")
              (directory-files "/sys/class/power_supply/" nil
-                               battery--linux-sysfs-regexp))
+                               battery-linux-sysfs-regexp))
         #'battery-linux-sysfs)
        ((and (eq system-type 'berkeley-unix)
              (file-executable-p "/usr/sbin/apm"))
@@ -445,7 +449,7 @@ The following %-sequences are provided:
       (dolist (dir (ignore-errors
                    (directory-files
                     "/sys/class/power_supply/" t
-                     battery--linux-sysfs-regexp)))
+                     battery-linux-sysfs-regexp)))
        (erase-buffer)
        (ignore-errors (insert-file-contents
                        (expand-file-name "uevent" dir)))
index 9e8e745ec63c6611de03f9694e0f9c6d10e60065..c13f4b156a17cc14190669fb96bc3d024a289c60 100644 (file)
@@ -338,6 +338,10 @@ mouse-3: Toggle minor modes"
 (defvar mode-line-column-line-number-mode-map
   (let ((map (make-sparse-keymap))
        (menu-map (make-sparse-keymap "Toggle Line and Column Number Display")))
+    (bindings--define-key menu-map [size-indication-mode]
+      '(menu-item "Display Size Indication" size-indication-mode
+                 :help "Toggle displaying a size indication in the mode-line"
+                 :button (:toggle . size-indication-mode)))
     (bindings--define-key menu-map [line-number-mode]
       '(menu-item "Display Line Numbers" line-number-mode
                  :help "Toggle displaying line numbers in the mode-line"
@@ -430,11 +434,9 @@ Major modes that edit things other than ordinary files may change this
 (make-variable-buffer-local 'mode-line-buffer-identification)
 
 (defvar mode-line-misc-info
-  '((which-func-mode ("" which-func-format " "))
-    (global-mode-string ("" global-mode-string " ")))
+  '((global-mode-string ("" global-mode-string " ")))
   "Mode line construct for miscellaneous information.
-By default, this shows the information specified by
-`which-func-mode' and `global-mode-string'.")
+By default, this shows the information specified by `global-mode-string'.")
 (put 'mode-line-misc-info 'risky-local-variable t)
 
 (defvar mode-line-end-spaces '(:eval (unless (display-graphic-p) "-%-"))
index bba52e225440b658a32586533631acd719d414cd..523bf98180ab6e46847a7cedbaf709f22a00b763 100644 (file)
@@ -161,6 +161,8 @@ This makes it possible to paste big integers since they will be read as
 floats, otherwise the Emacs reader will fail on them."
   :type  'boolean
   :group 'calculator)
+(make-obsolete-variable 'calculator-paste-decimals
+                        "it is no longer used." nil)
 
 (defcustom calculator-copy-displayer nil
   "If non-nil, this is any value that can be used for
@@ -195,9 +197,9 @@ For example, use this to define the golden ratio number:
 before you load calculator."
   :type  '(repeat (cons character number))
   :set   (lambda (_ val)
-           (and (boundp 'calculator-registers)
-                (setq calculator-registers
-                      (append val calculator-registers)))
+           (when (boundp 'calculator-registers)
+             (setq calculator-registers
+                   (append val calculator-registers)))
            (setq calculator-user-registers val))
   :group 'calculator)
 
@@ -221,10 +223,10 @@ Examples:
           (\"tF\" mt-to-ft (/ X 0.3048)         1)
           (\"tM\" ft-to-mt (* X 0.3048)         1)))
 
-* Using a function-like form is very simple: use `X' for the argument
-  (`Y' for the second in case of a binary operator), `TX' is a truncated
+* Using a function-like form is simple: use `X' for the argument (`Y'
+  for a second one in case of a binary operator), `TX' is a truncated
   version of `X' and `F' for a recursive call.  Here is a [very
-  inefficient] Fibonacci number calculation:
+  inefficient] Fibonacci number operator:
 
   (add-to-list \\='calculator-user-operators
                \\='(\"F\" fib
@@ -290,7 +292,8 @@ user-defined operators, use `calculator-user-operators' instead.")
 (defvar calculator-operators nil
   "The calculator operators, each a list with:
 
-1. The key that is bound to for this operation (usually a string);
+1. The key(s) that is bound to for this operation, a string that is
+   used with `kbd';
 
 2. The displayed symbol for this function;
 
@@ -312,8 +315,8 @@ user-defined operators, use `calculator-user-operators' instead.")
 
 It it possible have a unary prefix version of a binary operator if it
 comes later in this list.  If the list begins with the symbol `nobind',
-then no key binding will take place -- this is only useful for
-predefined keys.
+then no key binding will take place -- this is only used for predefined
+keys.
 
 Use `calculator-user-operators' to add operators to this list, see its
 documentation for an example.")
@@ -370,73 +373,96 @@ Used for repeating operations in calculator-repR/L.")
           (list (cons ?e float-e) (cons ?p float-pi)))
   "The association list of calculator register values.")
 
-(defvar calculator-saved-global-map nil
-  "Saved global key map.")
-
 (defvar calculator-restart-other-mode nil
   "Used to hack restarting with the electric mode changed.")
 
 ;;;---------------------------------------------------------------------
 ;;; Key bindings
 
+(defun calculator-define-key (key cmd map)
+  ;; Arranges for unbound alphabetic keys to be used as their un/shifted
+  ;; versions if those are bound (mimics the usual Emacs global bindings).
+  ;; FIXME: We should adjust Emacs's native "fallback to unshifted binding"
+  ;; such that it can also be used here, rather than having to use a hack like
+  ;; this one.
+  (let* ((key  (if (stringp key) (kbd key) key))
+         (omap (keymap-parent map)))
+    (define-key map key cmd)
+    ;; "other" map, used for case-flipped bindings
+    (unless omap
+      (setq omap (make-sparse-keymap))
+      (suppress-keymap omap t)
+      (set-keymap-parent map omap))
+    (let ((m omap))
+      ;; Bind all case-flipped versions.
+      (dotimes (i (length key))
+        (let* ((c (aref key i))
+               (k (vector c))
+               (b (lookup-key m k))
+               (defkey (lambda (x)
+                         (define-key m k x)
+                         (when (and (characterp c)
+                                    (or (<= ?A c ?Z) (<= ?a c ?z)))
+                           (define-key m (vector (logxor 32 c)) x)))))
+          (cond ((= i (1- (length key)))
+                 ;; Prefer longer sequences.
+                 (unless (keymapp b) (funcall defkey cmd)))
+                ((keymapp b) (setq m b))
+                (t (let ((sub (make-sparse-keymap)))
+                     (funcall defkey sub)
+                     (setq m sub)))))))))
+
 (defvar calculator-mode-map
   (let ((map (make-sparse-keymap)))
     (suppress-keymap map t)
-    (define-key map "i" nil)
-    (define-key map "o" nil)
-    (let ((p
-           '((calculator-open-paren  "[")
-             (calculator-close-paren "]")
-             (calculator-op-or-exp   "+" "-" [kp-add] [kp-subtract])
-             (calculator-digit       "0" "1" "2" "3" "4" "5" "6" "7" "8"
-                                     "9" "a" "b" "c" "d" "f"
-                                     [kp-0] [kp-1] [kp-2] [kp-3] [kp-4]
-                                     [kp-5] [kp-6] [kp-7] [kp-8] [kp-9])
-             (calculator-op          [kp-divide] [kp-multiply])
-             (calculator-decimal     "." [kp-decimal])
-             (calculator-exp         "e" "E")
-             (calculator-dec/deg-mode "D")
-             (calculator-set-register "s")
-             (calculator-get-register "g")
-             (calculator-radix-mode        "H" "X" "O" "B")
-             (calculator-radix-input-mode  "id" "ih" "ix" "io" "ib"
-                                           "iD" "iH" "iX" "iO" "iB")
-             (calculator-radix-output-mode "od" "oh" "ox" "oo" "ob"
-                                           "oD" "oH" "oX" "oO" "oB")
-             (calculator-rotate-displayer      "'")
-             (calculator-rotate-displayer-back "\"")
-             (calculator-displayer-prev        "{")
-             (calculator-displayer-next        "}")
-             (calculator-saved-up      [up] [?\C-p])
-             (calculator-saved-down    [down] [?\C-n])
-             (calculator-quit          "q" [?\C-g])
-             (calculator-enter         [enter] [linefeed] [kp-enter]
-                                       [return] [?\r] [?\n])
-             (calculator-save-on-list  " " [space])
-             (calculator-clear-saved   [?\C-c] [(control delete)])
-             (calculator-save-and-quit [(control return)]
-                                       [(control kp-enter)])
-             (calculator-paste         [insert] [(shift insert)]
-                                       [paste] [mouse-2] [?\C-y])
-             (calculator-clear         [delete] [?\C-?] [?\C-d])
-             (calculator-help          [?h] [??] [f1] [help])
-             (calculator-copy          [(control insert)] [copy])
-             (calculator-backspace     [backspace])
-             )))
-      (while p
-        ;; reverse the keys so earlier definitions come last -- makes
-        ;; the more sensible bindings visible in the menu
-        (let ((func (caar p)) (keys (reverse (cdar p))))
-          (while keys
-            (define-key map (car keys) func)
-            (setq keys (cdr keys))))
-        (setq p (cdr p))))
+    (dolist (x '((calculator-digit
+                  "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c"
+                  "d" "f" "<kp-0>" "<kp-1>" "<kp-2>" "<kp-3>" "<kp-4>"
+                  "<kp-5>" "<kp-6>" "<kp-7>" "<kp-8>" "<kp-9>")
+                 (calculator-open-paren  "[")
+                 (calculator-close-paren "]")
+                 (calculator-op-or-exp   "+" "-"
+                                         "<kp-add>" "<kp-subtract>")
+                 (calculator-op          "<kp-divide>" "<kp-multiply>")
+                 (calculator-decimal     "." "<kp-decimal>")
+                 (calculator-exp         "e")
+                 (calculator-dec/deg-mode "D")
+                 (calculator-set-register "s")
+                 (calculator-get-register "g")
+                 (calculator-radix-mode        "H" "X" "O" "B")
+                 (calculator-radix-input-mode  "iD" "iH" "iX" "iO" "iB")
+                 (calculator-radix-output-mode "oD" "oH" "oX" "oO" "oB")
+                 (calculator-rotate-displayer      "'")
+                 (calculator-rotate-displayer-back "\"")
+                 (calculator-displayer-prev        "{")
+                 (calculator-displayer-next        "}")
+                 (calculator-saved-up     "<up>" "C-p")
+                 (calculator-saved-down   "<down>" "C-n")
+                 (calculator-quit         "q" "C-g")
+                 (calculator-enter        "<enter>" "<linefeed>"
+                                          "<kp-enter>" "<return>"
+                                          "RET" "LFD")
+                 (calculator-save-on-list "SPC" "<space>")
+                 (calculator-clear-saved  "C-c" "<C-delete>")
+                 (calculator-save-and-quit "<C-return>" "<C-kp-enter>")
+                 (calculator-paste        "<insert>" "<S-insert>"
+                                          "<paste>" "<mouse-2>" "C-y")
+                 (calculator-clear        "<delete>" "DEL" "C-d")
+                 (calculator-help         "h" "?" "<f1>" "<help>")
+                 (calculator-copy         "<C-insert>" "<copy>")
+                 (calculator-backspace    "<backspace>")
+                 ))
+      ;; reverse the keys so earlier definitions come last -- makes the
+      ;; more sensible bindings visible in the menu
+      (dolist (k (reverse (cdr x)))
+        (calculator-define-key k (car x) map)))
     (if calculator-bind-escape
-      (progn (define-key map [?\e] 'calculator-quit)
-             (define-key map [escape] 'calculator-quit))
-      (define-key map [?\e ?\e ?\e] 'calculator-quit))
+      (progn (calculator-define-key "ESC" 'calculator-quit map)
+             (calculator-define-key "<escape>" 'calculator-quit map))
+      (calculator-define-key "ESC ESC ESC" 'calculator-quit map))
     ;; make C-h work in text-mode
-    (or window-system (define-key map [?\C-h] 'calculator-backspace))
+    (unless window-system
+      (calculator-define-key "C-h" 'calculator-backspace map))
     ;; set up a menu
     (when (and calculator-use-menu (not (boundp 'calculator-menu)))
       (let ((radix-selectors
@@ -530,9 +556,9 @@ Used for repeating operations in calculator-repR/L.")
             ("Modes"
              ["Radians"
               (progn
-                (and (or calculator-input-radix calculator-output-radix)
-                     (calculator-radix-mode "D"))
-                (and calculator-deg (calculator-dec/deg-mode)))
+                (when (or calculator-input-radix calculator-output-radix)
+                  (calculator-radix-mode "D"))
+                (when calculator-deg (calculator-dec/deg-mode)))
               :keys "D"
               :style radio
               :selected (not (or calculator-input-radix
@@ -540,9 +566,9 @@ Used for repeating operations in calculator-repR/L.")
                                  calculator-deg))]
              ["Degrees"
               (progn
-                (and (or calculator-input-radix calculator-output-radix)
-                     (calculator-radix-mode "D"))
-                (or calculator-deg (calculator-dec/deg-mode)))
+                (when (or calculator-input-radix calculator-output-radix)
+                  (calculator-radix-mode "D"))
+                (unless calculator-deg (calculator-dec/deg-mode)))
               :keys "D"
               :style radio
               :selected (and calculator-deg
@@ -619,16 +645,17 @@ argument.
 hex/oct/bin modes can be set for input and for display separately.
 Another toggle-able mode is for using degrees instead of radians for
 trigonometric functions.
-The keys to switch modes are (`X' is shortcut for `H'):
+The keys to switch modes are (both `H' and `X' are for hex):
 * `D'             switch to all-decimal mode, or toggle degrees/radians
 * `B' `O' `H' `X' binary/octal/hexadecimal modes for input & display
 * `i' `o'         followed by one of `D' `B' `O' `H' `X' (case
                   insensitive) sets only the input or display radix mode
 The prompt indicates the current modes:
-* \"D=\": degrees mode;
-* \"?=\": (? is B/O/H) this is the radix for both input and output;
-* \"=?\": (? is B/O/H) the display radix (when input is decimal);
-* \"??\": (? is D/B/O/H) 1st char for input radix, 2nd for display.
+* \"==\": decimal mode (using radians);
+* \"D=\": decimal mode using degrees;
+* \"?=\": ? is B/O/H, the radix for both input and output;
+* \"=?\": ? is B/O/H, the display radix (with decimal input);
+* \"??\": ? is D/B/O/H, 1st char for input radix, 2nd for display.
 
 Also, the quote key can be used to switch display modes for decimal
 numbers (double-quote rotates back), and the two brace characters
@@ -688,19 +715,14 @@ See the documentation for `calculator-mode' for more information."
   (if calculator-electric-mode
     (save-window-excursion
       (require 'electric) (message nil) ; hide load message
-      (let (old-g-map old-l-map
-            (old-buf (window-buffer (minibuffer-window)))
+      (let ((old-buf (window-buffer (minibuffer-window)))
             (echo-keystrokes 0)
             (garbage-collection-messages nil)) ; no gc msg when electric
         (set-window-buffer (minibuffer-window) calculator-buffer)
         (select-window (minibuffer-window))
         (calculator-reset)
         (calculator-update-display)
-        (setq old-l-map (current-local-map))
-        (setq old-g-map (current-global-map))
-        (setq calculator-saved-global-map (current-global-map))
-        (use-local-map nil)
-        (use-global-map calculator-mode-map)
+        (use-local-map calculator-mode-map)
         (run-hooks 'calculator-mode-hook)
         (unwind-protect
             (catch 'calculator-done
@@ -711,9 +733,7 @@ See the documentation for `calculator-mode' for more information."
                nil
                (lambda (_x _y) (calculator-update-display))))
           (set-window-buffer (minibuffer-window) old-buf)
-          (kill-buffer calculator-buffer)
-          (use-local-map old-l-map)
-          (use-global-map old-g-map))))
+          (kill-buffer calculator-buffer))))
     (progn
       (cond
         ((not (get-buffer-window calculator-buffer))
@@ -780,25 +800,11 @@ Defaults to 1."
 Adds MORE-OPS to `calculator-operator', called initially to handle
 `calculator-initial-operators' and `calculator-user-operators'."
   (let ((added-ops nil))
-    (while more-ops
-      (or (eq (caar more-ops) 'nobind)
-          (let ((i -1) (key (caar more-ops)))
-            ;; make sure the key is undefined, so it's easy to define
-            ;; prefix keys
-            (while (< (setq i (1+ i)) (length key))
-              (or (keymapp
-                   (lookup-key calculator-mode-map
-                               (substring key 0 (1+ i))))
-                  (progn
-                    (define-key
-                      calculator-mode-map (substring key 0 (1+ i)) nil)
-                    (setq i (length key)))))
-            (define-key calculator-mode-map key 'calculator-op)))
-      (setq added-ops (cons (if (eq (caar more-ops) 'nobind)
-                              (cdar more-ops)
-                              (car more-ops))
-                            added-ops))
-      (setq more-ops (cdr more-ops)))
+    (dolist (op more-ops)
+      (unless (eq (car op) 'nobind)
+        (calculator-define-key (car op) 'calculator-op calculator-mode-map))
+      (push (if (eq (car op) 'nobind) (cdr op) op)
+            added-ops))
     ;; added-ops come first, but in correct order
     (setq calculator-operators
           (append (nreverse added-ops) calculator-operators))))
@@ -808,11 +814,11 @@ Adds MORE-OPS to `calculator-operator', called initially to handle
 
 (defun calculator-reset ()
   "Reset calculator variables."
-  (or calculator-restart-other-mode
-      (setq calculator-stack           nil
-            calculator-curnum          nil
-            calculator-stack-display   nil
-            calculator-display-fragile nil))
+  (unless calculator-restart-other-mode
+    (setq calculator-stack           nil
+          calculator-curnum          nil
+          calculator-stack-display   nil
+          calculator-display-fragile nil))
   (setq calculator-restart-other-mode nil)
   (calculator-update-display))
 
@@ -831,7 +837,7 @@ The result should not exceed the screen width."
                          (cond ((or in-r out-r)
                                 (concat (or in-r "=")
                                         (if (equal in-r out-r) "="
-                                            (or out-r "="))))
+                                            (or out-r "D"))))
                                (calculator-deg "D=")
                                (t "=="))))
          (expr
@@ -852,39 +858,13 @@ The result should not exceed the screen width."
   "Convert the given STR to a number, according to the value of
 `calculator-input-radix'."
   (if calculator-input-radix
-    (let ((radix
-           (cdr (assq calculator-input-radix
-                      '((bin . 2) (oct . 8) (hex . 16)))))
-          (i -1) (value 0) (new-value 0))
-      ;; assume mostly valid input (e.g., characters in range)
-      (while (< (setq i (1+ i)) (length str))
-        (setq new-value
-              (let* ((ch (upcase (aref str i)))
-                     (n (cond ((< ch ?0)  nil)
-                              ((<= ch ?9) (- ch ?0))
-                              ((< ch ?A)  nil)
-                              ((<= ch ?Z) (- ch (- ?A 10)))
-                              (t          nil))))
-                (if (and n (<= 0 n) (< n radix))
-                  (+ n (* radix value))
-                  (progn
-                    (calculator-message
-                     "Warning: Ignoring bad input character `%c'." ch)
-                    (sit-for 1)
-                    value))))
-        (when (if (< new-value 0) (> value 0) (< value 0))
-          (calculator-message "Warning: Overflow in input."))
-        (setq value new-value))
-      value)
-    (car (read-from-string
-          (cond ((equal "." str) "0.0")
-                ((string-match-p "[eE][+-]?$" str) (concat str "0"))
-                ((string-match-p "\\.[0-9]\\|[eE]" str) str)
-                ((string-match-p "\\." str)
-                 ;; do this because Emacs reads "23." as an integer
-                 (concat str "0"))
-                ((stringp str) (concat str ".0"))
-                (t "0.0"))))))
+    (string-to-number str (cadr (assq calculator-input-radix
+                                      '((bin 2) (oct 8) (hex 16)))))
+    (let* ((str (replace-regexp-in-string
+                 "\\.\\([^0-9].*\\)?$" ".0\\1" str))
+           (str (replace-regexp-in-string
+                 "[eE][+-]?\\([^0-9].*\\)?$" "e0\\1" str)))
+      (string-to-number str))))
 
 (defun calculator-push-curnum ()
   "Push the numeric value of the displayed number to the stack."
@@ -911,9 +891,7 @@ If radix output mode is active, toggle digit grouping."
            (if (and new-disp (memq new-disp calculator-displayers))
              (let ((tmp nil))
                (while (not (eq (car calculator-displayers) new-disp))
-                 (setq tmp (cons (car calculator-displayers) tmp))
-                 (setq calculator-displayers
-                       (cdr calculator-displayers)))
+                 (push (pop calculator-displayers) tmp))
                (setq calculator-displayers
                      (nconc calculator-displayers (nreverse tmp))))
              (nconc (cdr calculator-displayers)
@@ -938,11 +916,11 @@ If radix output mode is active, increase the grouping size."
     (progn (setq calculator-radix-grouping-digits
                  (1+ calculator-radix-grouping-digits))
            (calculator-enter))
-    (and (car calculator-displayers)
-         (let ((disp (caar calculator-displayers)))
-           (cond ((symbolp disp) (funcall disp 'left))
-                 ((and (consp disp) (eq 'std (car disp)))
-                  (calculator-standard-displayer 'left)))))))
+    (when (car calculator-displayers)
+      (let ((disp (caar calculator-displayers)))
+        (cond ((symbolp disp) (funcall disp 'left))
+              ((and (consp disp) (eq 'std (car disp)))
+               (calculator-standard-displayer 'left)))))))
 
 (defun calculator-displayer-next ()
   "Send the current displayer function a `right' argument.
@@ -954,11 +932,11 @@ If radix output mode is active, decrease the grouping size."
     (progn (setq calculator-radix-grouping-digits
                  (max 2 (1- calculator-radix-grouping-digits)))
            (calculator-enter))
-    (and (car calculator-displayers)
-         (let ((disp (caar calculator-displayers)))
-           (cond ((symbolp disp) (funcall disp 'right))
-                 ((and (consp disp) (eq 'std (car disp)))
-                  (calculator-standard-displayer 'right)))))))
+    (when (car calculator-displayers)
+      (let ((disp (caar calculator-displayers)))
+        (cond ((symbolp disp) (funcall disp 'right))
+              ((and (consp disp) (eq 'std (car disp)))
+               (calculator-standard-displayer 'right)))))))
 
 (defun calculator-remove-zeros (numstr)
   "Get a number string NUMSTR and remove unnecessary zeros.
@@ -1003,10 +981,10 @@ The special `left' and `right' symbols will make it change the current
 number of digits displayed (`calculator-number-digits')."
   (if (symbolp num)
     (cond ((eq num 'left)
-           (and (> calculator-number-digits 0)
-                (setq calculator-number-digits
-                      (1- calculator-number-digits))
-                (calculator-enter)))
+           (when (> calculator-number-digits 0)
+             (setq calculator-number-digits
+                   (1- calculator-number-digits))
+             (calculator-enter)))
           ((eq num 'right)
            (setq calculator-number-digits
                  (1+ calculator-number-digits))
@@ -1054,7 +1032,7 @@ the `left' or `right' when one of the standard modes is used."
             (while (< i 0)
               (setq num (/ num 1000.0)) (setq exp (+ exp 3))
               (setq i (1+ i))))))
-      (or calculator-eng-tmp-show (setq calculator-eng-extra nil))
+      (unless calculator-eng-tmp-show (setq calculator-eng-extra nil))
       (let ((str (format (format "%%.%sf" calculator-number-digits)
                          num)))
         (concat (let ((calculator-remove-zeros
@@ -1206,7 +1184,7 @@ arguments."
           (DX (if (and X calculator-deg) (degrees-to-radians X) X))
           (L  calculator-saved-list)
           (fF `(calculator-funcall ',f x y))
-          (fD `(if calculator-deg (radians-to-degrees x) x)))
+          (fD `(if calculator-deg (radians-to-degrees x) x)))
       (eval `(cl-flet ((F (&optional x y) ,fF) (D (x) ,fD))
                (let ((X ,X) (Y ,Y) (DX ,DX) (TX ,TX) (TY ,TY) (L ',L))
                  ,f))
@@ -1216,19 +1194,20 @@ arguments."
 ;;; Input interaction
 
 (defun calculator-last-input (&optional keys)
-  "Last char (or event or event sequence) that was read.
-Use KEYS if given, otherwise use `this-command-keys'."
-  (let ((inp (or keys (this-command-keys))))
-    (if (or (stringp inp) (not (arrayp inp)) (member inp '([f1] [help])))
+  "Return the last key sequence that was used to invoke this command, or
+the input KEYS.  Uses the `function-key-map' translate keypad numbers to
+plain ones."
+  (let* ((inp (or keys (this-command-keys)))
+         (inp (or (and (arrayp inp) (not (stringp inp))
+                       (lookup-key function-key-map inp))
+                  inp)))
+    (if (or (not inp) (stringp inp) (not (arrayp inp))
+            (catch 'done ; any non-chars?
+              (dotimes (i (length inp))
+                (unless (characterp (aref inp i)) (throw 'done t)))
+              nil))
       inp
-      ;; Translates kp-x to x and [tries to] create a string to lookup
-      ;; operators; assume all symbols are translatable via
-      ;; `function-key-map'.  This is needed because we have key
-      ;; bindings for kp-* (which might be the wrong thing to do) so
-      ;; they don't get translated in `this-command-keys'.
-      (concat (mapcar (lambda (k)
-                        (if (numberp k) k (error "??bad key?? (%S)" k)))
-                      (or (lookup-key function-key-map inp) inp))))))
+      (concat inp))))
 
 (defun calculator-clear-fragile (&optional op)
   "Clear the fragile flag if it was set, then maybe reset all.
@@ -1270,7 +1249,7 @@ OP is the operator (if any) that caused this call."
     (calculator-update-display)))
 
 (defun calculator-exp ()
-  "Enter an `E' exponent character, or a digit in hex input mode."
+  "Enter an exponent, or an \"E\" digit in hex input mode."
   (interactive)
   (cond
     (calculator-input-radix (calculator-digit))
@@ -1312,18 +1291,13 @@ Optional string argument KEYS will force using it as the keys entered."
         (throw 'op-error nil))
       (push op calculator-stack)
       (calculator-reduce-stack (calculator-op-prec op))
-      (and (= (length calculator-stack) 1)
-           (numberp (car calculator-stack))
-           ;; the display is fragile if it contains only one number
-           (setq calculator-display-fragile t)
-           ;; add number to the saved-list
-           calculator-add-saved
-           (if (= 0 calculator-saved-ptr)
-             (setq calculator-saved-list
-                   (cons (car calculator-stack) calculator-saved-list))
-             (let ((p (nthcdr (1- calculator-saved-ptr)
-                              calculator-saved-list)))
-               (setcdr p (cons (car calculator-stack) (cdr p))))))
+      (when (and (= (length calculator-stack) 1)
+                 (numberp (car calculator-stack)))
+        ;; the display is fragile if it contains only one number
+        (setq calculator-display-fragile t)
+        (when calculator-add-saved ; add number to the saved-list
+          (push (car calculator-stack)
+                (nthcdr calculator-saved-ptr calculator-saved-list))))
       (calculator-update-display))))
 
 (defun calculator-op-or-exp ()
@@ -1332,7 +1306,8 @@ Used with +/- for entering them as digits in numbers like 1e-3 (there is
 no need for negative numbers since these are handled by unary
 operators)."
   (interactive)
-  (if (and (not calculator-display-fragile)
+  (if (and (not calculator-input-radix)
+           (not calculator-display-fragile)
            calculator-curnum
            (string-match-p "[eE]$" calculator-curnum))
     (calculator-digit)
@@ -1346,8 +1321,8 @@ operators)."
   (interactive)
   (calculator-push-curnum)
   (if (or calculator-input-radix calculator-output-radix)
-    (progn (setq calculator-input-radix nil)
-           (setq calculator-output-radix nil))
+    (setq calculator-input-radix nil
+          calculator-output-radix nil)
     ;; already decimal -- toggle degrees mode
     (setq calculator-deg (not calculator-deg)))
   (calculator-update-display t))
@@ -1393,8 +1368,8 @@ Optional string argument KEYS will force using it as the keys entered."
 (defun calculator-clear-saved ()
   "Clear the list of saved values in `calculator-saved-list'."
   (interactive)
-  (setq calculator-saved-list nil)
-  (setq calculator-saved-ptr 0)
+  (setq calculator-saved-list nil
+        calculator-saved-ptr 0)
   (calculator-update-display t))
 
 (defun calculator-saved-move (n)
@@ -1492,21 +1467,6 @@ Optional string argument KEYS will force using it as the keys entered."
         (kill-new (replace-regexp-in-string
                    "^\\([^ ]+\\) *\\(\\[[0-9/]+\\]\\)? *$" "\\1" s))))))
 
-(defun calculator-set-register (reg)
-  "Set a register value for REG."
-  ;; FIXME: this should use `register-read-with-preview', but it uses
-  ;; calculator-registers rather than `register-alist'.  (Maybe
-  ;; dynamically rebinding it will get blessed?)  Also in to
-  ;; `calculator-get-register'.
-  (interactive "cRegister to store into: ")
-  (let* ((as  (assq reg calculator-registers))
-         (val (progn (calculator-enter) (car calculator-stack))))
-    (if as
-      (setcdr as val)
-      (setq calculator-registers
-            (cons (cons reg val) calculator-registers)))
-    (calculator-message "[%c] := %S" reg val)))
-
 (defun calculator-put-value (val)
   "Paste VAL as if entered.
 Used by `calculator-paste' and `get-register'."
@@ -1515,31 +1475,55 @@ Used by `calculator-paste' and `get-register'."
              (or calculator-display-fragile
                  (not (numberp (car calculator-stack)))))
     (calculator-clear-fragile)
-    (setq calculator-curnum (let ((calculator-displayer "%S"))
-                              (calculator-number-to-string val)))
+    (setq calculator-curnum
+          (let ((calculator-displayer "%S")
+                (calculator-radix-grouping-mode nil)
+                (calculator-output-radix calculator-input-radix))
+            (calculator-number-to-string val)))
     (calculator-update-display)))
 
-(defun calculator-paste ()
-  "Paste a value from the `kill-ring'."
-  (interactive)
-  (calculator-put-value
-   (let ((str (replace-regexp-in-string
-               "^ *\\(.+[^ ]\\) *$" "\\1" (current-kill 0))))
-     (and (not calculator-input-radix)
-          calculator-paste-decimals
-          (string-match "\\([0-9]+\\)\\(\\.[0-9]+\\)?\\(e[0-9]+\\)?"
-                        str)
-          (or (match-string 1 str)
-              (match-string 2 str)
-              (match-string 3 str))
-          (setq str (concat (or (match-string 1 str) "0")
-                            (or (match-string 2 str) ".0")
-                            (or (match-string 3 str) ""))))
-     (ignore-errors (calculator-string-to-number str)))))
+(defun calculator-paste (arg)
+  "Paste a value from the `kill-ring'.
+
+With a prefix argument, paste the raw string as a sequence of key
+presses, which can be used to paste expressions.  Note that this
+is literal; examples: spaces will store values, pasting \"1+2\"
+will not produce 3 if it's done you're entering a number or after
+a multiplication."
+  (interactive "P")
+  (let ((str (current-kill 0)))
+    (if arg
+      (setq unread-command-events
+            `(,@(listify-key-sequence str) ,@unread-command-events))
+      (calculator-put-value (calculator-string-to-number str)))))
+
+(defun calculator-register-read-with-preview (prompt)
+  "Similar to `register-read-with-preview' but for calculator
+registers."
+  (let ((register-alist calculator-registers)
+        (register-preview-delay 1)
+        (register-preview-function
+         (lambda (r)
+           (format "%s: %s\n"
+                   (single-key-description (car r))
+                   (calculator-number-to-string (cdr r))))))
+    (register-read-with-preview prompt)))
+
+(defun calculator-set-register (reg)
+  "Set a register value for REG."
+  (interactive (list (calculator-register-read-with-preview
+                      "Register to store value into: ")))
+  (let* ((as  (assq reg calculator-registers))
+         (val (progn (calculator-enter) (car calculator-stack))))
+    (if as
+      (setcdr as val)
+      (push (cons reg val) calculator-registers))
+    (calculator-message "[%c] := %S" reg val)))
 
 (defun calculator-get-register (reg)
   "Get a value from a register REG."
-  (interactive "cRegister to get value from: ")
+  (interactive (list (calculator-register-read-with-preview
+                      "Register to get value from: ")))
   (calculator-put-value (cdr (assq reg calculator-registers))))
 
 (declare-function electric-describe-mode "ehelp" ())
@@ -1551,10 +1535,11 @@ Used by `calculator-paste' and `get-register'."
   + - * / \\(div) %(rem) _(-X,postfix) ;(1/X,postfix) ^(exp) L(og)
   Q(sqrt) !(fact) S(in) C(os) T(an) |(or) #(xor) &(and) ~(not)
 * >/< repeats last binary operation with its 2nd (1st) arg as postfix op
-* I inverses next trig function        * \\='/\"/{} - display/display args
+* I inverse the next trig function     \
+* \\='/\"/{/}  - display/display args
 * D         - switch to all-decimal, or toggle deg/rad mode
-* B/O/H/X   - binary/octal/hex mode for i/o (X is a shortcut for H)
-* i/o       - prefix for d/b/o/x - set only input/output modes
+* B/O/H/X   - binary/octal/hex mode for i/o (both H and X are for hex)
+* i/o       - prefix for D/B/O/X - set only input/output modes
 * enter/=   - evaluate current expr.   * s/g      - set/get a register
 * space     - evaluate & save on list  * l/v      - list total/average
 * up/down/C-p/C-n - browse saved       * C-delete - clear all saved
@@ -1566,15 +1551,11 @@ Used by `calculator-paste' and `get-register'."
   (if (eq last-command 'calculator-help)
     (let ((mode-name "Calculator")
           (major-mode 'calculator-mode)
-          (g-map (current-global-map))
           (win (selected-window)))
       (require 'ehelp)
-      (when calculator-electric-mode
-        (use-global-map calculator-saved-global-map))
-      (if calculator-electric-mode
-        (electric-describe-mode)
-        (describe-mode))
-      (when calculator-electric-mode (use-global-map g-map))
+      (if (not calculator-electric-mode)
+        (describe-mode)
+        (electric-describe-mode))
       (select-window win)
       (message nil))
     (let ((one (one-window-p t))
index fff63d3b15cf82b8369242c84e9534bd92ce59c2..36ebd2d88129f08ebd6d03bf66fa0c82d07fe7f4 100644 (file)
@@ -482,7 +482,9 @@ Usually just deletes the appointment buffer."
     (and window
          (or (eq window (frame-root-window (window-frame window)))
              (delete-window window))))
-  (kill-buffer appt-buffer-name)
+  (let ((buffer (get-buffer appt-buffer-name)))
+    (when buffer
+      (kill-buffer buffer)))
   (if appt-audible
       (beep 1)))
 
index acb6368becab33f498b63aa87e6eeb3ca3a2a7a3..48221439e11b160e71a090706c88cf84489605e6 100644 (file)
@@ -595,7 +595,7 @@ Hebrew date diary entries must be prefaced by `diary-hebrew-entry-symbol'
 of the Hebrew calendar entries, except that the Hebrew month
 names cannot be abbreviated.  The Hebrew months are numbered
 from 1 to 13 with Nisan being 1, 12 being Adar I and 13 being
-Adar II; you must use `Adar I' if you want Adar of a common
+Adar II; you must use \"Adar I\" if you want Adar of a common
 Hebrew year.  If a Hebrew date diary entry begins with
 `diary-nonmarking-symbol', the entry will appear in the diary
 listing, but will not be marked in the calendar.  This function
index d2680828fe57c837200e337eb5e41c5a53b40792..d7c9a6d9e95739a2511f57e05de62aa6881afc81 100644 (file)
@@ -33,7 +33,7 @@
 
 (defun calendar-iso-to-absolute (date)
   "The number of days elapsed between the Gregorian date 12/31/1 BC and DATE.
-The `ISO year' corresponds approximately to the Gregorian year, but
+The \"ISO year\" corresponds approximately to the Gregorian year, but
 weeks start on Monday and end on Sunday.  The first week of the ISO year is
 the first such week in which at least 4 days are in a year.  The ISO
 commercial DATE has the form (week day year) in which week is in the range
@@ -49,7 +49,7 @@ Sunday).  The Gregorian date Sunday, December 31, 1 BC is imaginary."
 
 ;;;###cal-autoload
 (defun calendar-iso-from-absolute (date)
-  "Compute the `ISO commercial date' corresponding to the absolute DATE.
+  "Compute the \"ISO commercial date\" corresponding to the absolute DATE.
 The ISO year corresponds approximately to the Gregorian year, but weeks
 start on Monday and end on Sunday.  The first week of the ISO year is the
 first such week in which at least 4 days are in a year.  The ISO commercial
index 4f2eb9890105b83a142c62db5307d65cbc446569..c7729dc94296429179cf8ad4a169633e1386f72e 100644 (file)
@@ -1710,8 +1710,8 @@ non-nil, means add to end of buffer without erasing current contents."
   (cal-tex-cmd "\\hspace*" space))
 
 (defun cal-tex-comment (&optional comment)
-  "Insert `% ', followed by optional string COMMENT, followed by newline.
-COMMENT may contain newlines, which are prefixed by `% ' in the output."
+  "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)
index 6ba26a4a00d0d1029b4ddc44d88937b0e3f56357..b62f9fa79418c942dc257cca2c656477143931d8 100644 (file)
@@ -48,7 +48,9 @@
         ((eq char ?:) ?d)))
 
 (defun parse-time-tokenize (string)
-  "Tokenize STRING into substrings."
+  "Tokenize STRING into substrings.
+Each substring is a run of \"valid\" characters, i.e., lowercase
+letters, digits, plus or minus signs or colons."
   (let ((start nil)
        (end (length string))
        (all-digits nil)
@@ -59,7 +61,8 @@
       (while (and (< index end)                ;Skip invalid characters.
                  (not (setq c (parse-time-string-chars (aref string index)))))
        (cl-incf index))
-      (setq start index all-digits (eq c ?0))
+      (setq start index
+            all-digits (eq c ?0))
       (while (and (< (cl-incf index) end)      ;Scan valid characters.
                  (setq c (parse-time-string-chars (aref string index))))
        (setq all-digits (and all-digits (eq c ?0))))
 ;;;###autoload
 (defun parse-time-string (string)
   "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."
+STRING should be on something resembling an RFC2822 string, a la
+\"Fri, 25 Mar 2016 16:24:56 +0100\", but this function is
+somewhat liberal in what format it accepts, and will attempt to
+return a \"likely\" value even for somewhat malformed strings.
+The values returned are identical to those of `decode-time', but
+any values that are unknown are returned as nil."
   (let ((time (list nil nil nil nil nil nil nil nil nil))
        (temp (parse-time-tokenize (downcase string))))
     (while temp
index c78d2bbf51977dcf61f19e354b3dadd81f3dacf6..6fec8055319d87496a416279e8fbcd92cbb479f5 100644 (file)
@@ -65,10 +65,10 @@ and `am-pm' and `time-zone', both alphabetic strings.
 
 For example, the form
 
-  '(24-hours \":\" minutes
+   (24-hours \":\" minutes
     (if time-zone \" (\") time-zone (if time-zone \")\"))
 
-would give military-style times like `21:07 (UTC)'."
+would give military-style times like \"21:07 (UTC)\"."
   :type 'sexp
   :risky t
   :group 'calendar)
index dcd4a5ae4cfeae0c583472ef1b65567d9488ac43..88fc0b2d197e737536ab458e6eb769d6c74e01bd 100644 (file)
@@ -345,14 +345,15 @@ This variable is buffer-local."
    (regexp-opt
     '("Enter" "enter" "Enter same" "enter same" "Enter the" "enter the"
       "Old" "old" "New" "new" "'s" "login"
-      "Kerberos" "CVS" "UNIX" " SMB" "LDAP" "[sudo]" "Repeat" "Bad") t)
+      "Kerberos" "CVS" "UNIX" " SMB" "LDAP" "[sudo]" "Repeat" "Bad" "Retype")
+    t)
    " +\\)"
    "\\(?:" (regexp-opt password-word-equivalents) "\\|Response\\)"
    "\\(?:\\(?:, try\\)? *again\\| (empty for no passphrase)\\| (again)\\)?\
 \\(?: for [^::៖]+\\)?[::៖]\\s *\\'")
   "Regexp matching prompts for passwords in the inferior process.
 This is used by `comint-watch-for-password-prompt'."
-  :version "24.4"
+  :version "25.2"
   :type 'regexp
   :group 'comint)
 
index 9609a034c9711f590bda7de04eb85a8be8f26c3f..a1eb1d200164759febc4c2f993f6854db18f82e5 100644 (file)
@@ -1164,7 +1164,7 @@ Show the buffer in another window, but don't select it."
     (unless (eq symbol basevar)
       (message "`%s' is an alias for `%s'" symbol basevar))))
 
-(defvar customize-changed-options-previous-release "24.1"
+(defvar customize-changed-options-previous-release "24.5"
   "Version for `customize-changed-options' to refer back to by default.")
 
 ;; Packages will update this variable, so make it available.
@@ -1499,11 +1499,12 @@ Return non-nil if user chooses to customize, for use in
 (defcustom custom-buffer-style 'links
   "Control the presentation style for customization buffers.
 The value should be a symbol, one of:
-
-brackets: groups nest within each other with big horizontal brackets.
-links: groups have links to subgroups."
+`brackets': groups nest within each other with big horizontal brackets.
+`links': groups have links to subgroups.
+`tree': display groups as trees."
   :type '(radio (const brackets)
-               (const links))
+               (const links)
+                (const tree))
   :group 'custom-buffer)
 
 (defcustom custom-buffer-done-kill nil
@@ -1543,27 +1544,29 @@ not for everybody."
        buf))))
 
 ;;;###autoload
-(defun custom-buffer-create (options &optional name description)
+(defun custom-buffer-create (options &optional name _description)
   "Create a buffer containing OPTIONS.
 Optional NAME is the name of the buffer.
 OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
 SYMBOL is a customization option, and WIDGET is a widget for editing
 that option.
 DESCRIPTION is unused."
-  (pop-to-buffer-same-window (custom-get-fresh-buffer (or name "*Customization*")))
-  (custom-buffer-create-internal options description))
+  (pop-to-buffer-same-window
+   (custom-get-fresh-buffer (or name "*Customization*")))
+  (custom-buffer-create-internal options))
 
 ;;;###autoload
-(defun custom-buffer-create-other-window (options &optional name description)
+(defun custom-buffer-create-other-window (options &optional name _description)
   "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.
 OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
 SYMBOL is a customization option, and WIDGET is a widget for editing
-that option."
+that option.
+DESCRIPTION is unused."
   (unless name (setq name "*Customization*"))
   (switch-to-buffer-other-window (custom-get-fresh-buffer name))
-  (custom-buffer-create-internal options description))
+  (custom-buffer-create-internal options))
 
 (defcustom custom-reset-button-menu t
   "If non-nil, only show a single reset button in customize buffers.
index 5be61ce537c697d76e5b1f8a287a0f74e5c9feb1..c830ed83d1da4b278c4ba40fba4322730647ad68 100644 (file)
@@ -54,7 +54,8 @@
 ;; :risky - risky-local-variable property
 ;; :safe - safe-local-variable property
 ;; :tag - custom-tag property
-(let (standard native-p prop propval
+(let (standard
+      native-p prop propval
       ;; This function turns a value
       ;; into an expression which produces that value.
       (quoter (lambda (sexp)
                        (stringp sexp)
                        (numberp sexp))
                    sexp
-                 (list 'quote sexp)))))
+                 (list 'quote sexp))))
+      (cursor-type-types
+       '(choice
+         (const :tag "Frame default" t)
+         (const :tag "Filled box" box)
+         (const :tag "Hollow cursor" hollow)
+         (const :tag "Vertical bar" bar)
+         (cons  :tag "Vertical bar with specified width"
+                (const bar) integer)
+         (const :tag "Horizontal bar" hbar)
+         (cons  :tag "Horizontal bar with specified width"
+                (const hbar) integer)
+         (const :tag "None "nil))))
   (pcase-dolist
       (`(,symbol ,group ,type ,version . ,rest)
-           '(;; alloc.c
+           `(;; alloc.c
             (gc-cons-threshold alloc integer)
             (gc-cons-percentage alloc float)
             (garbage-collection-messages alloc boolean)
             ;; buffer.c
-            (cursor-type
-             display
-             (choice
-              (const :tag "Frame default" t)
-              (const :tag "Filled box" box)
-              (const :tag "Hollow cursor" hollow)
-              (const :tag "Vertical bar" bar)
-              (cons  :tag "Vertical bar with specified width"
-                     (const bar) integer)
-              (const :tag "Horizontal bar" hbar)
-              (cons  :tag "Horizontal bar with specified width"
-                     (const hbar) integer)
-              (const :tag "None "nil)))
+            (cursor-type display ,cursor-type-types)
             (mode-line-format mode-line sexp) ;Hard to do right.
             (major-mode internal function)
             (case-fold-search matching boolean)
@@ -147,7 +148,7 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
             (line-spacing display (choice (const :tag "none" nil) number)
                           "22.1")
             (cursor-in-non-selected-windows
-             cursor boolean nil
+             cursor ,cursor-type-types nil
              :tag "Cursor In Non-selected Windows"
              :set (lambda (symbol value)
                     (set-default symbol value)
@@ -311,6 +312,7 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
                                            (const :tag "Always" t)
                                            (repeat (symbol :tag "Parameter")))
                                           "25.1")
+            (tooltip-reuse-hidden-frame tooltip boolean "26.1")
             ;; fringe.c
             (overflow-newline-into-fringe fringe boolean)
             ;; image.c
index 6a819ebbf67b8466b1b0cef561ee7c503822bfb0..da4223f49fe8901b07cb00be10ad3f94a4bc92bb 100644 (file)
@@ -171,16 +171,17 @@ With ARG, repeat that many times.  `C-u' means until end of buffer."
      active region.
  `kill'
      `kill-region' is used on the selection, rather than
-     `delete-region'.  (Text selected with the mouse will typically
-     be yankable anyhow.)
- t
-     The normal case: delete the active region prior to executing
-     the command which will insert replacement text.
+     `delete-region'.  (Text selected with the mouse will
+     typically be yankable anyhow.)
  FUNCTION
-     For commands which need to dynamically determine this behavior.
-     FUNCTION should take no argument and return one of the above
-     values, or nil.  In the latter case, FUNCTION should itself
-     do with the active region whatever is appropriate."
+     For commands which need to dynamically determine this
+     behavior.  FUNCTION should take no argument and return a
+     value acceptable as TYPE, or nil.  In the latter case,
+     FUNCTION should itself do with the active region whatever is
+     appropriate.
+ Other non-nil values
+     The normal case: delete the active region prior to executing
+     the command which will insert replacement text."
   (condition-case data
       (cond ((eq type 'kill)            ;Deprecated, backward compatibility.
             (delete-active-region t)
index 08db1877f1ac4645dab5b97214607a8b83459ea8..b23b04a45fa0597911b8c939dfd905ee3838710a 100644 (file)
@@ -39,6 +39,7 @@
 ;; We need macros in dired.el to compile properly,
 ;; and we call subroutines in it too.
 (require 'dired)
+(require 'cl-lib)  ; for cl-mapcan
 
 (defvar dired-create-files-failures nil
   "Variable where `dired-create-files' records failing file names.
@@ -729,26 +730,52 @@ can be produced by `dired-get-marked-files', for example."
         (command (if sequentially
                      (substring command 0 (match-beginning 0))
                    command))
+         (parallel-in-background
+          (and in-background (not sequentially) (not (eq system-type 'ms-dos))))
+         (w32-shell (and (fboundp 'w32-shell-dos-semantics)
+                         (w32-shell-dos-semantics)))
+         ;; The way to run a command in background in Windows shells
+         ;; is to use the START command.  The /B switch means not to
+         ;; create a new window for the command.
+         (cmd-prefix (if w32-shell "start /b " ""))
+         ;; Windows shells don't support chaining with ";", they use
+         ;; "&" instead.
+         (cmd-sep (if (and (not w32-shell) (not parallel-in-background))
+                      ";"
+                    "&"))
         (stuff-it
          (if (or (string-match-p dired-star-subst-regexp command)
                  (string-match-p dired-quark-subst-regexp command))
              (lambda (x)
-               (let ((retval command))
+               (let ((retval (concat cmd-prefix command)))
                  (while (string-match
                          "\\(^\\|[ \t]\\)\\([*?]\\)\\([ \t]\\|$\\)" retval)
                    (setq retval (replace-match x t t retval 2)))
                  retval))
-           (lambda (x) (concat command dired-mark-separator x)))))
+           (lambda (x) (concat cmd-prefix command dired-mark-separator x)))))
     (concat
-     (if on-each
-        (mapconcat stuff-it (mapcar 'shell-quote-argument file-list)
-                   (if (and in-background (not sequentially)) "&" ";"))
-       (let ((files (mapconcat 'shell-quote-argument
-                              file-list dired-mark-separator)))
-        (if (> (length file-list) 1)
-            (setq files (concat dired-mark-prefix files dired-mark-postfix)))
-        (funcall stuff-it files)))
-     (if in-background "&" ""))))
+     (cond (on-each
+            (format "%s%s"
+                    (mapconcat stuff-it (mapcar 'shell-quote-argument file-list)
+                               cmd-sep)
+                    ;; POSIX shells running a list of commands in the background
+                    ;; (LIST = cmd_1 & [cmd_2 & ... cmd_i & ... cmd_N &])
+                    ;; return once cmd_N ends, i.e., the shell does not
+                    ;; wait for cmd_i to finish before executing cmd_i+1.
+                    ;; That means, running (shell-command LIST) may not show
+                    ;; the output of all the commands (Bug#23206).
+                    ;; Add 'wait' to force those POSIX shells to wait until
+                    ;; all commands finish.
+                    (or (and parallel-in-background (not w32-shell)
+                             "&wait")
+                        "")))
+           (t
+            (let ((files (mapconcat 'shell-quote-argument
+                                    file-list dired-mark-separator)))
+              (when (cdr file-list)
+                (setq files (concat dired-mark-prefix files dired-mark-postfix)))
+              (funcall stuff-it files))))
+     (or (and in-background "&") ""))))
 
 ;; This is an extra function so that it can be redefined by ange-ftp.
 ;;;###autoload
@@ -901,6 +928,7 @@ command with a prefix argument (the value does not matter)."
     ("\\.bz2\\'" "" "bunzip2")
     ("\\.xz\\'" "" "unxz")
     ("\\.zip\\'" "" "unzip -o -d %o %i")
+    ("\\.7z\\'" "" "7z x -aoa -o%o %i")
     ;; This item controls naming for compression.
     ("\\.tar\\'" ".tgz" nil)
     ;; This item controls the compression of directories
@@ -2772,7 +2800,7 @@ instead."
 
 ;; Local Variables:
 ;; byte-compile-dynamic: t
-;; generated-autoload-file: "dired.el"
+;; generated-autoload-file: "dired-loaddefs.el"
 ;; End:
 
 ;;; dired-aux.el ends here
index 088ca81ed8d6c8f2c0a6c22f8685ee3625abad5f..be762e6e306976f7a8e1de3a998d9e53c4cb1748 100644 (file)
@@ -1666,7 +1666,7 @@ If `current-prefix-arg' is non-nil, uses name at point as guess."
 
 ;; Local Variables:
 ;; byte-compile-dynamic: t
-;; generated-autoload-file: "dired.el"
+;; generated-autoload-file: "dired-loaddefs.el"
 ;; End:
 
 ;;; dired-x.el ends here
index ab111bed1b19a91c31e191b4924768b1ce49598b..38979b5244d07afc469b43df07f3644127cac599 100644 (file)
@@ -34,6 +34,9 @@
 
 ;;; Code:
 
+;; When bootstrapping dired-loaddefs has not been generated.
+(require 'dired-loaddefs nil t)
+
 (declare-function dired-buffer-more-recently-used-p
                  "dired-x" (buffer1 buffer2))
 
@@ -1535,6 +1538,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
     (define-key map "u" 'dired-unmark)
     (define-key map "v" 'dired-view-file)
     (define-key map "w" 'dired-copy-filename-as-kill)
+    (define-key map "W" 'browse-url-of-dired-file)
     (define-key map "x" 'dired-do-flagged-delete)
     (define-key map "y" 'dired-show-file-type)
     (define-key map "+" 'dired-create-directory)
@@ -3916,571 +3920,6 @@ Ask means pop up a menu for the user to select one of copy, move or link."
 (add-to-list 'desktop-buffer-mode-handlers
             '(dired-mode . dired-restore-desktop-buffer))
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "dired-aux" "dired-aux.el" "6b3eb2080834b976621adc041c42f5cc")
-;;; Generated autoloads from dired-aux.el
-
-(autoload 'dired-diff "dired-aux" "\
-Compare file at point with file FILE using `diff'.
-If called interactively, prompt for FILE.  If the file at point
-has a backup file, use that as the default.  If the file at point
-is a backup file, use its original.  If the mark is active
-in Transient Mark mode, use the file at the mark as the default.
-\(That's the mark set by \\[set-mark-command], not by Dired's
-\\[dired-mark] command.)
-
-FILE is the first file given to `diff'.  The file at point
-is the second file given to `diff'.
-
-With prefix arg, prompt for second argument SWITCHES, which is
-the string of command switches for the third argument of `diff'.
-
-\(fn FILE &optional SWITCHES)" t nil)
-
-(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.
-The backup file is the first file given to `diff'.
-With prefix arg, prompt for argument SWITCHES which is options for `diff'.
-
-\(fn &optional SWITCHES)" t nil)
-
-(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
-with the same name.  Mark files for which PREDICATE returns non-nil.
-Mark files with different names if PREDICATE is nil (or interactively
-with empty input at the predicate prompt).
-
-PREDICATE is a Lisp expression that can refer to the following variables:
-
-    size1, size2   - file size in bytes
-    mtime1, mtime2 - last modification time in seconds, as a float
-    fa1, fa2       - list of file attributes
-                     returned by function `file-attributes'
-
-    where 1 refers to attribute of file in the current dired buffer
-    and 2 to attribute of file in second dired buffer.
-
-Examples of PREDICATE:
-
-    (> mtime1 mtime2) - mark newer files
-    (not (= size1 size2)) - mark files with different sizes
-    (not (string= (nth 8 fa1) (nth 8 fa2))) - mark files with different modes
-    (not (and (= (nth 2 fa1) (nth 2 fa2))   - mark files with different UID
-              (= (nth 3 fa1) (nth 3 fa2))))   and GID.
-
-\(fn DIR2 PREDICATE)" t nil)
-
-(autoload 'dired-do-chmod "dired-aux" "\
-Change the mode of the marked (or next ARG) files.
-Symbolic modes like `g+w' are allowed.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-chgrp "dired-aux" "\
-Change the group of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-chown "dired-aux" "\
-Change the owner of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-touch "dired-aux" "\
-Change the timestamp of the marked (or next ARG) files.
-This calls touch.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(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 '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';
-Negative prefix arg KEEP overrides `kept-old-versions' with KEEP made positive.
-
-To clear the flags on these files, you can use \\[dired-flag-backup-files]
-with a prefix argument.
-
-\(fn KEEP)" t nil)
-
-(autoload 'dired-do-async-shell-command "dired-aux" "\
-Run a shell command COMMAND on the marked files asynchronously.
-
-Like `dired-do-shell-command', but adds `&' at the end of COMMAND
-to execute it asynchronously.
-
-When operating on multiple files, asynchronous commands
-are executed in the background on each file in parallel.
-In shell syntax this means separating the individual commands
-with `&'.  However, when COMMAND ends in `;' or `;&' then commands
-are executed in the background on each file sequentially waiting
-for each command to terminate before running the next command.
-In shell syntax this means separating the individual commands with `;'.
-
-The output appears in the buffer `*Async Shell Command*'.
-
-\(fn COMMAND &optional ARG FILE-LIST)" t nil)
-
-(autoload 'dired-do-shell-command "dired-aux" "\
-Run a shell command COMMAND on the marked files.
-If no files are marked or a numeric prefix arg is given,
-the next ARG files are used.  Just \\[universal-argument] means the current file.
-The prompt mentions the file(s) or the marker, as appropriate.
-
-If there is a `*' in COMMAND, surrounded by whitespace, this runs
-COMMAND just once with the entire file list substituted there.
-
-If there is no `*', but there is a `?' in COMMAND, surrounded by
-whitespace, this runs COMMAND on each file individually with the
-file name substituted for `?'.
-
-Otherwise, this runs COMMAND on each file individually with the
-file name added at the end of COMMAND (separated by a space).
-
-`*' and `?' when not surrounded by whitespace have no special
-significance for `dired-do-shell-command', and are passed through
-normally to the shell, but you must confirm first.
-
-If you want to use `*' as a shell wildcard with whitespace around
-it, write `*\"\"' in place of just `*'.  This is equivalent to just
-`*' in the shell, but avoids Dired's special handling.
-
-If COMMAND ends in `&', `;', or `;&', it is executed in the
-background asynchronously, and the output appears in the buffer
-`*Async Shell Command*'.  When operating on multiple files and COMMAND
-ends in `&', the shell command is executed on each file in parallel.
-However, when COMMAND ends in `;' or `;&' then commands are executed
-in the background on each file sequentially waiting for each command
-to terminate before running the next command.  You can also use
-`dired-do-async-shell-command' that automatically adds `&'.
-
-Otherwise, COMMAND is executed synchronously, and the output
-appears in the buffer `*Shell Command Output*'.
-
-This feature does not try to redisplay Dired buffers afterward, as
-there's no telling what files COMMAND may have changed.
-Type \\[dired-do-redisplay] to redisplay the marked files.
-
-When COMMAND runs, its working directory is the top-level directory
-of the Dired buffer, so output files usually are created there
-instead of in a subdir.
-
-In a noninteractive call (from Lisp code), you must specify
-the list of file names explicitly with the FILE-LIST argument, which
-can be produced by `dired-get-marked-files', for example.
-
-\(fn COMMAND &optional ARG FILE-LIST)" t nil)
-
-(autoload 'dired-run-shell-command "dired-aux" "\
-
-
-\(fn COMMAND)" nil nil)
-
-(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.)
-If you use this command with a prefix argument to kill the line
-for a file that is a directory, which you have inserted in the
-Dired buffer as a subdirectory, then it deletes that subdirectory
-from the buffer as well.
-To kill an entire subdirectory (without killing its line in the
-parent directory), go to its directory header line and use this
-command with a prefix argument (the value does not matter).
-
-\(fn &optional ARG FMT)" t nil)
-
-(autoload 'dired-do-compress-to "dired-aux" "\
-Compress selected files and directories to an archive.
-You are prompted for the archive name.
-The archiving command is chosen based on the archive name extension and
-`dired-compress-files-alist'.
-
-\(fn)" t nil)
-
-(autoload 'dired-compress-file "dired-aux" "\
-Compress or uncompress FILE.
-Return the name of the compressed or uncompressed file.
-Return nil if no change in files.
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-query "dired-aux" "\
-Format PROMPT with ARGS, query user, and store the result in SYM.
-The return value is either nil or t.
-
-The user may type y or SPC to accept once; n or DEL to skip once;
-! to accept this and subsequent queries; or q or ESC to decline
-this and subsequent queries.
-
-If SYM is already bound to a non-nil value, this function may
-return automatically without querying the user.  If SYM is !,
-return t; if SYM is q or ESC, return nil.
-
-\(fn SYM PROMPT &rest ARGS)" nil nil)
-
-(autoload 'dired-do-compress "dired-aux" "\
-Compress or uncompress marked (or next ARG) files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-byte-compile "dired-aux" "\
-Byte compile marked (or next ARG) Emacs Lisp files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-load "dired-aux" "\
-Load the marked (or next ARG) Emacs Lisp files.
-
-\(fn &optional ARG)" t nil)
-
-(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.
-
-Dired remembers switches specified with a prefix arg, so that reverting
-the buffer will not reset them.  However, using `dired-undo' to re-insert
-or delete subdirectories can bypass this machinery.  Hence, you sometimes
-may have to reset some subdirectory switches after a `dired-undo'.
-You can reset all subdirectory switches to the default using
-\\<dired-mode-map>\\[dired-reset-subdir-switches].
-See Info node `(emacs)Subdir switches' for more details.
-
-\(fn &optional ARG TEST-FOR-SUBDIR)" t nil)
-
-(autoload 'dired-add-file "dired-aux" "\
-
-
-\(fn FILENAME &optional MARKER-CHAR)" nil nil)
-
-(autoload 'dired-remove-file "dired-aux" "\
-
-
-\(fn FILE)" nil nil)
-
-(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 'dired-copy-file "dired-aux" "\
-
-
-\(fn FROM TO OK-FLAG)" nil nil)
-
-(autoload 'dired-rename-file "dired-aux" "\
-
-
-\(fn FILE NEWNAME OK-IF-ALREADY-EXISTS)" nil nil)
-
-(autoload 'dired-create-directory "dired-aux" "\
-Create a directory called DIRECTORY.
-If DIRECTORY already exists, signal an error.
-
-\(fn DIRECTORY)" t nil)
-
-(autoload 'dired-do-copy "dired-aux" "\
-Copy all marked (or next ARG) files, or copy the current file.
-When operating on just the current file, prompt for the new name.
-
-When operating on multiple or marked files, prompt for a target
-directory, and make the new copies in that directory, with the
-same names as the original files.  The initial suggestion for the
-target directory is the Dired buffer's current directory (or, if
-`dired-dwim-target' is non-nil, the current directory of a
-neighboring Dired window).
-
-If `dired-copy-preserve-time' is non-nil, this command preserves
-the modification time of each old file in the copy, similar to
-the \"-p\" option for the \"cp\" shell command.
-
-This command copies symbolic links by creating new ones, similar
-to the \"-d\" option for the \"cp\" shell command.
-
-\(fn &optional ARG)" t nil)
-
-(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
-and new symbolic links are made in that directory
-with the same names that the files currently have.  The default
-suggested for the target directory depends on the value of
-`dired-dwim-target', which see.
-
-For relative symlinks, use \\[dired-do-relsymlink].
-
-\(fn &optional ARG)" t nil)
-
-(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
-and new hard links are made in that directory
-with the same names that the files currently have.  The default
-suggested for the target directory depends on the value of
-`dired-dwim-target', which see.
-
-\(fn &optional ARG)" t nil)
-
-(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.
-This command also renames any buffers that are visiting the files.
-The default suggested for the target directory depends on the value
-of `dired-dwim-target', which see.
-
-\(fn &optional ARG)" t nil)
-
-(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
-files.  Otherwise, it operates on all the marked files, or the current
-file if none are marked.
-
-As each match is found, the user must type a character saying
-  what to do with it.  For directions, type \\[help-command] at that time.
-NEWNAME may contain \\=\\<n> or \\& as in `query-replace-regexp'.
-REGEXP defaults to the last regexp used.
-
-With a zero prefix arg, renaming by regexp affects the absolute file name.
-Normally, only the non-directory part of the file name is used and changed.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(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 '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 '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 'dired-upcase "dired-aux" "\
-Rename all marked (or next ARG) files to upper case.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-downcase "dired-aux" "\
-Rename all marked (or next ARG) files to lower case.
-
-\(fn &optional ARG)" t nil)
-
-(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).
-With a prefix arg, you may edit the ls switches used for this listing.
-  You can add `R' to the switches to expand the whole tree starting at
-  this subdirectory.
-This function takes some pains to conform to `ls -lR' output.
-
-Dired remembers switches specified with a prefix arg, so that reverting
-the buffer will not reset them.  However, using `dired-undo' to re-insert
-or delete subdirectories can bypass this machinery.  Hence, you sometimes
-may have to reset some subdirectory switches after a `dired-undo'.
-You can reset all subdirectory switches to the default using
-\\<dired-mode-map>\\[dired-reset-subdir-switches].
-See Info node `(emacs)Subdir switches' for more details.
-
-\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-
-(autoload 'dired-insert-subdir "dired-aux" "\
-Insert this subdirectory into the same Dired buffer.
-If it is already present, overwrite the previous entry;
-  otherwise, insert it at its natural place (as `ls -lR' would
-  have done).
-With a prefix arg, you may edit the `ls' switches used for this listing.
-  You can add `R' to the switches to expand the whole tree starting at
-  this subdirectory.
-This function takes some pains to conform to `ls -lR' output.
-
-\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-
-(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 '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 '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 'dired-kill-subdir "dired-aux" "\
-Remove all lines of current subdirectory.
-Lower levels are unaffected.
-
-\(fn &optional REMEMBER-MARKS)" t nil)
-
-(autoload 'dired-tree-up "dired-aux" "\
-Go up ARG levels in the dired tree.
-
-\(fn ARG)" t nil)
-
-(autoload 'dired-tree-down "dired-aux" "\
-Go down in the dired tree.
-
-\(fn)" t nil)
-
-(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 '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 &optional IGNORED)" t nil)
-
-(autoload 'dired-isearch-filenames-setup "dired-aux" "\
-Set up isearch to search in Dired file names.
-Intended to be added to `isearch-mode-hook'.
-
-\(fn)" nil nil)
-
-(autoload 'dired-isearch-filenames "dired-aux" "\
-Search for a string using Isearch only in file names in the Dired buffer.
-
-\(fn)" t nil)
-
-(autoload 'dired-isearch-filenames-regexp "dired-aux" "\
-Search for a regexp using Isearch only in file names in the Dired buffer.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-isearch "dired-aux" "\
-Search for a string through all marked files using Isearch.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-isearch-regexp "dired-aux" "\
-Search for a regexp through all marked files using Isearch.
-
-\(fn)" t nil)
-
-(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 '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
-with the command \\[tags-loop-continue].
-
-\(fn FROM TO &optional DELIMITED)" t nil)
-
-(autoload 'dired-do-find-regexp "dired-aux" "\
-Find all matches for REGEXP in all marked files, recursively.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'dired-do-find-regexp-and-replace "dired-aux" "\
-Replace matches of FROM with TO, in all marked files, recursively.
-
-\(fn FROM TO)" t nil)
-
-(autoload 'dired-show-file-type "dired-aux" "\
-Print the type of FILE, according to the `file' command.
-If you give a prefix to this command, and FILE is a symbolic
-link, then the type of the file linked to by FILE is printed
-instead.
-
-\(fn FILE &optional DEREF-SYMLINKS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "dired-x" "dired-x.el" "f00ad5ec7383d017263855ad8add60a3")
-;;; Generated autoloads from dired-x.el
-
-(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.
-In case the proper Dired file line cannot be found, refresh the dired
-buffer and try again.
-When OTHER-WINDOW is non-nil, jump to Dired buffer in other window.
-Interactively with prefix argument, read FILE-NAME and
-move to its line in dired.
-
-\(fn &optional OTHER-WINDOW FILE-NAME)" t nil)
-
-(autoload 'dired-jump-other-window "dired-x" "\
-Like \\[dired-jump] (`dired-jump') but in other window.
-
-\(fn &optional FILE-NAME)" t nil)
-
-(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
-
-    foo -> ../bar/foo
-
-not absolute ones like
-
-    foo -> /ugly/file/name/that/may/change/any/day/bar/foo
-
-For absolute symlinks, use \\[dired-do-symlink].
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
 (provide 'dired)
 
 (run-hooks 'dired-load-hook)           ; for your customizations
similarity index 94%
rename from lisp/gnus/ecomplete.el
rename to lisp/ecomplete.el
index 084895c32a581dd5834fff1aa38b225779ac656b..cb50cce605683bccf7b9993a14514dfe01a54d6e 100644 (file)
 (eval-when-compile
   (require 'cl))
 
-(eval-when-compile
-  (when (featurep 'xemacs)
-    ;; The `kbd' macro requires that the `read-kbd-macro' macro is available.
-    (require 'edmacro)))
-
 (defgroup ecomplete nil
   "Electric completion of email addresses and the like."
   :group 'mail)
 
 (defun ecomplete-add-item (type key text)
   (let ((elems (assq type ecomplete-database))
-       (now (string-to-number
-             (format "%.0f" (if (featurep 'emacs)
-                                (float-time)
-                              (require 'gnus-util)
-                              (gnus-float-time)))))
+       (now (string-to-number (format "%.0f" (float-time))))
        entry)
     (unless elems
       (push (setq elems (list type)) ecomplete-database))
index eb6b746bd8022cf6455881977d55f14953bcbf37..1ab3de5f2fda4718a1317c5ce353370de40e5fc3 100644 (file)
@@ -87,6 +87,29 @@ 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.")
 
+;; In some ways it would be nicer to use a value that is recognisably
+;; not a time-value, eg t, but that can cause issues if an older Emacs
+;; that does not expect non-time-values loads the file.
+(defconst autoload--non-timestamp '(0 0 0 0)
+  "Value to insert when `autoload-timestamps' is nil.")
+
+(defvar autoload-timestamps nil                ; experimental, see bug#22213
+  "Non-nil means insert a timestamp for each input file into the output.
+We use these in incremental updates of the output file to decide
+if we need to rescan an input file.  If you set this to nil,
+then we use the timestamp of the output file instead.  As a result:
+ - for fixed inputs, the output will be the same every time
+ - incremental updates of the output file might not be correct if:
+   i) the timestamp of the output file cannot be trusted (at least
+     relative to that of the input files)
+   ii) any of the input files can be modified during the time it takes
+      to create the output
+   iii) only a subset of the input files are scanned
+   These issues are unlikely to happen in practice, and would arguably
+   represent bugs in the build system.  Item iii) will happen if you
+   use a command like `update-file-autoloads', though, since it only
+   checks a single input file.")
+
 (defvar autoload-modified-buffers)      ;Dynamically scoped var.
 
 (defun make-autoload (form file &optional expansion)
@@ -234,9 +257,22 @@ If a buffer is visiting the desired autoload file, return it."
        (enable-local-eval nil))
     ;; We used to use `raw-text' to read this file, but this causes
     ;; problems when the file contains non-ASCII characters.
-    (let ((delay-mode-hooks t))
-      (find-file-noselect
-       (autoload-ensure-default-file (autoload-generated-file))))))
+    (let* ((delay-mode-hooks t)
+           (file (autoload-generated-file))
+           (file-missing (not (file-exists-p file))))
+      (when file-missing
+        (autoload-ensure-default-file file))
+      (with-current-buffer
+          (find-file-noselect
+           (autoload-ensure-file-writeable
+            file))
+        ;; block backups when the file has just been created, since
+        ;; the backups will just be the auto-generated headers.
+        ;; bug#23203
+        (when file-missing
+          (setq buffer-backed-up t)
+          (save-buffer))
+        (current-buffer)))))
 
 (defun autoload-generated-file ()
   (expand-file-name generated-autoload-file
@@ -357,21 +393,22 @@ not be relied upon."
 ;;;###autoload
 (put 'autoload-ensure-writable 'risky-local-variable t)
 
+(defun autoload-ensure-file-writeable (file)
+  ;; Probably pointless, but replaces the old AUTOGEN_VCS in lisp/Makefile,
+  ;; which was designed to handle CVSREAD=1 and equivalent.
+  (and autoload-ensure-writable
+       (let ((modes (file-modes file)))
+         (if (zerop (logand modes #o0200))
+             ;; Ignore any errors here, and let subsequent attempts
+             ;; to write the file raise any real error.
+             (ignore-errors (set-file-modes file (logior modes #o0200))))))
+  file)
+
 (defun autoload-ensure-default-file (file)
   "Make sure that the autoload file FILE exists, creating it if needed.
 If the file already exists and `autoload-ensure-writable' is non-nil,
 make it writable."
-  (if (file-exists-p file)
-      ;; Probably pointless, but replaces the old AUTOGEN_VCS in lisp/Makefile,
-      ;; which was designed to handle CVSREAD=1 and equivalent.
-      (and autoload-ensure-writable
-          (let ((modes (file-modes file)))
-            (if (zerop (logand modes #o0200))
-                ;; Ignore any errors here, and let subsequent attempts
-                ;; to write the file raise any real error.
-                (ignore-errors (set-file-modes file (logior modes #o0200))))))
-    (write-region (autoload-rubric file) nil file))
-  file)
+  (write-region (autoload-rubric file) nil file))
 
 (defun autoload-insert-section-header (outbuf autoloads load-name file time)
   "Insert the section-header line,
@@ -624,7 +661,9 @@ FILE's modification time."
                                       ;; We'd really want to just use
                                       ;; `emacs-internal' instead.
                                       nil nil 'emacs-mule-unix)
-                               (nth 5 (file-attributes relfile))))
+                               (if autoload-timestamps
+                                   (nth 5 (file-attributes relfile))
+                                 autoload--non-timestamp)))
                             (insert ";;; Generated autoloads from " relfile "\n")))
                         (insert generate-autoload-section-trailer))))
                   (or noninteractive
@@ -655,6 +694,8 @@ FILE's modification time."
       (let ((version-control 'never))
        (save-buffer)))))
 
+;; FIXME This command should be deprecated.
+;; See http://debbugs.gnu.org/22213#41
 ;;;###autoload
 (defun update-file-autoloads (file &optional save-after outfile)
   "Update the autoloads for FILE.
@@ -672,6 +713,9 @@ Return FILE if there was no autoload cookie in it, else nil."
                     (read-file-name "Write autoload definitions to file: ")))
   (let* ((generated-autoload-file (or outfile generated-autoload-file))
         (autoload-modified-buffers nil)
+        ;; We need this only if the output file handles more than one input.
+        ;; See http://debbugs.gnu.org/22213#38 and subsequent.
+        (autoload-timestamps t)
          (no-autoloads (autoload-generate-file-autoloads file)))
     (if autoload-modified-buffers
         (if save-after (autoload-save-buffers))
@@ -689,6 +733,9 @@ removes any prior now out-of-date autoload entries."
   (catch 'up-to-date
     (let* ((buf (current-buffer))
            (existing-buffer (if buffer-file-name buf))
+           (output-file (autoload-generated-file))
+           (output-time (if (file-exists-p output-file)
+                            (nth 5 (file-attributes output-file))))
            (found nil))
       (with-current-buffer (autoload-find-generated-file)
         ;; This is to make generated-autoload-file have Unix EOLs, so
@@ -713,16 +760,28 @@ removes any prior now out-of-date autoload entries."
                          (file-time (nth 5 (file-attributes file))))
                      (if (and (or (null existing-buffer)
                                   (not (buffer-modified-p existing-buffer)))
-                              (or
+                              (cond
+                               ;; FIXME? Arguably we should throw a
+                               ;; user error, or some kind of warning,
+                               ;; if we were called from update-file-autoloads,
+                               ;; which can update only a single input file.
+                               ;; It's not appropriate to use the output
+                               ;; file modtime in such a case,
+                               ;; if there are multiple input files
+                               ;; contributing to the output.
+                               ((and output-time
+                                    (member last-time
+                                            (list t autoload--non-timestamp)))
+                                (not (time-less-p output-time file-time)))
                                ;; 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)
-                                    (not (time-less-p last-time file-time)))
+                               ((listp last-time)
+                                (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)))))
+                               ((stringp last-time)
+                                (equal last-time
+                                      (md5 buf nil nil 'emacs-mule)))))
                          (throw 'up-to-date nil)
                        (autoload-remove-section begin)
                        (setq found t))))
@@ -782,7 +841,10 @@ write its autoloads into the specified file instead."
         (generated-autoload-file
          (if (called-interactively-p 'interactive)
              (read-file-name "Write autoload definitions to file: ")
-           generated-autoload-file)))
+           generated-autoload-file))
+        (output-time
+         (if (file-exists-p generated-autoload-file)
+             (nth 5 (file-attributes generated-autoload-file)))))
 
     (with-current-buffer (autoload-find-generated-file)
       (save-excursion
@@ -800,14 +862,15 @@ write its autoloads into the specified file instead."
                   ;; Remove the obsolete section.
                   (autoload-remove-section (match-beginning 0))
                   (setq last-time (nth 4 form))
-                  (when (listp last-time)
-                    (dolist (file file)
-                      (let ((file-time (nth 5 (file-attributes file))))
-                        (when (and file-time
-                                   (not (time-less-p last-time file-time)))
-                          ;; file unchanged
-                          (push file no-autoloads)
-                          (setq files (delete file files)))))))
+                  (if (member last-time (list t autoload--non-timestamp))
+                      (setq last-time output-time))
+                  (dolist (file file)
+                    (let ((file-time (nth 5 (file-attributes file))))
+                      (when (and file-time
+                                 (not (time-less-p last-time file-time)))
+                        ;; file unchanged
+                        (push file no-autoloads)
+                        (setq files (delete file files))))))
                  ((not (stringp file)))
                  ((or (not (file-exists-p file))
                        ;; Remove duplicates as well, just in case.
@@ -816,9 +879,13 @@ write its autoloads into the specified file instead."
                        (member (expand-file-name file) autoload-excludes))
                    ;; Remove the obsolete section.
                   (autoload-remove-section (match-beginning 0)))
-                 ((and (listp (nth 4 form))
-                       (not (time-less-p (nth 4 form)
-                                         (nth 5 (file-attributes file)))))
+                 ((not (time-less-p (let ((oldtime (nth 4 form)))
+                                      (if (member oldtime
+                                                  (list
+                                                   t autoload--non-timestamp))
+                                          output-time
+                                        oldtime))
+                                     (nth 5 (file-attributes file))))
                   ;; File hasn't changed.
                   nil)
                  (t
@@ -850,7 +917,9 @@ write its autoloads into the specified file instead."
          (goto-char (point-max))
          (search-backward "\f" nil t)
          (autoload-insert-section-header
-          (current-buffer) nil nil no-autoloads no-autoloads-time)
+          (current-buffer) nil nil no-autoloads (if autoload-timestamps
+                                                    no-autoloads-time
+                                                  autoload--non-timestamp))
          (insert generate-autoload-section-trailer)))
 
       (let ((version-control 'never))
index b3bf4a588499b91b0c4b42ad57ca71ec7fe2ddf3..dbaf2bc6f6ab181d5e9f3b46af510ecdf49b2d00 100644 (file)
         radians-to-degrees rassq rassoc read-from-string regexp-quote
         region-beginning region-end reverse round
         sin sqrt string string< string= string-equal string-lessp string-to-char
-        string-to-int string-to-number substring sxhash symbol-function
-        symbol-name symbol-plist symbol-value string-make-unibyte
+        string-to-int string-to-number substring
+        sxhash sxhash-equal sxhash-eq sxhash-eql
+        symbol-function symbol-name symbol-plist symbol-value string-make-unibyte
         string-make-multibyte string-as-multibyte string-as-unibyte
         string-to-multibyte
         tan truncate
index 83cb7e70f37cd3079d350aea5f6a62c83e8f5bc5..818c2683463b2b80b4e9a7b8e2af19edf8be3cef 100644 (file)
@@ -362,6 +362,9 @@ is equivalent to the following two lines of code:
 \(defalias \\='old-fun \\='new-fun \"old-fun's doc.\")
 \(make-obsolete \\='old-fun \\='new-fun \"22.1\")
 
+If provided, WHEN should be a string indicating when the function
+was first made obsolete, for example a date or a release number.
+
 See the docstrings of `defalias' and `make-obsolete' for more details."
   (declare (doc-string 4)
            (advertised-calling-convention
@@ -404,6 +407,9 @@ dumped with Emacs).  This is so that any user customizations are
 applied before the defcustom tries to initialize the
 variable (this is due to the way `defvaralias' works).
 
+If provided, WHEN should be a string indicating when the variable
+was first made obsolete, for example a date or a release number.
+
 For the benefit of `custom-set-variables', if OBSOLETE-NAME has
 any of the following properties, they are copied to
 CURRENT-NAME, if it does not already have them:
@@ -428,8 +434,8 @@ CURRENT-NAME, if it does not already have them:
 ;; It only really affects M-x describe-face output.
 (defmacro define-obsolete-face-alias (obsolete-face current-face when)
   "Make OBSOLETE-FACE a face alias for CURRENT-FACE and mark it obsolete.
-The string WHEN gives the Emacs version where OBSOLETE-FACE became
-obsolete."
+If provided, WHEN should be a string indicating when the face
+was first made obsolete, for example a date or a release number."
   `(progn
      (put ,obsolete-face 'face-alias ,current-face)
      ;; Used by M-x describe-face.
index 1526e2fdeb9e9bb4dfe1b1c1ea881273ef436fa8..11eb44cea31be7cbf4286cd6e7a5d529113fdfd3 100644 (file)
@@ -1360,31 +1360,33 @@ extra args."
 (dolist (elt '(format message error))
   (put elt 'byte-compile-format-like t))
 
-;; Warn if a custom definition fails to specify :group.
+;; Warn if a custom definition fails to specify :group, or :type.
 (defun byte-compile-nogroup-warn (form)
-  (if (and (memq (car form) '(custom-declare-face custom-declare-variable))
-           byte-compile-current-group)
-      ;; The group will be provided implicitly.
-      nil
-    (let ((keyword-args (cdr (cdr (cdr (cdr 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)))
-      ;; Update the current group, if needed.
-      (if (and byte-compile-current-file ;Only when compiling a whole file.
-               (eq (car form) 'custom-declare-group)
-               (eq (car-safe name) 'quote))
-          (setq byte-compile-current-group (cadr name))))))
+  (let ((keyword-args (cdr (cdr (cdr (cdr form)))))
+       (name (cadr form)))
+    (when (eq (car-safe name) 'quote)
+      (or (not (eq (car form) 'custom-declare-variable))
+         (plist-get keyword-args :type)
+         (byte-compile-warn
+          "defcustom for `%s' fails to specify type" (cadr name)))
+      (if (and (memq (car form) '(custom-declare-face custom-declare-variable))
+              byte-compile-current-group)
+         ;; The group will be provided implicitly.
+         nil
+       (or (and (eq (car form) 'custom-declare-group)
+                (equal name ''emacs))
+           (plist-get keyword-args :group)
+           (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)))
+       ;; Update the current group, if needed.
+       (if (and byte-compile-current-file ;Only when compiling a whole file.
+                (eq (car form) 'custom-declare-group))
+           (setq byte-compile-current-group (cadr name)))))))
 
 ;; Warn if the function or macro is being redefined with a different
 ;; number of arguments.
index fd8f108a54e94c1295264d63e9d3c5b2d2ecc601..3a81adeb6a6dd0058690c56b8e17af5fc941d4f5 100644 (file)
@@ -1638,6 +1638,17 @@ function,command,variable,option or symbol." ms1))))))
             ;; * If a user option variable records a true-or-false
             ;;   condition, give it a name that ends in `-flag'.
 
+            ;; "True ..." should be "Non-nil ..."
+            (when (looking-at "\"\\*?\\(True\\)\\b")
+               (if (checkdoc-autofix-ask-replace
+                    (match-beginning 1) (match-end 1)
+                    "Say \"Non-nil\" instead of \"True\"? "
+                    "Non-nil")
+                   nil
+                 (checkdoc-create-error
+                  "\"True\" should usually be \"Non-nil\""
+                  (match-beginning 1) (match-end 1))))
+
             ;; If the variable has -flag in the name, make sure
             (if (and (string-match "-flag$" (car fp))
                      (not (looking-at "\"\\*?Non-nil\\s-+means\\s-+")))
@@ -1798,6 +1809,16 @@ Replace with \"%s\"? " original replace)
                            "Probably \"%s\" should be imperative \"%s\""
                            original replace)
                           (match-beginning 1) (match-end 1))))))
+            ;; "Return true ..." should be "Return non-nil ..."
+            (when (looking-at "\"Return \\(true\\)\\b")
+               (if (checkdoc-autofix-ask-replace
+                    (match-beginning 1) (match-end 1)
+                    "Say \"non-nil\" instead of \"true\"? "
+                    "non-nil")
+                   nil
+                 (checkdoc-create-error
+                  "\"true\" should usually be \"non-nil\""
+                  (match-beginning 1) (match-end 1))))
             ;; Done with functions
             )))
      ;;* When a documentation string refers to a Lisp symbol, write it as
index 6a4d835b63cc12d77e7ebd68ba6aecacf964f0d3..38295c302eacbba81c2a356857a7784fd46a2c26 100644 (file)
@@ -108,9 +108,10 @@ Optional LIGHTER is displayed in the mode line when the mode is on.
 Optional KEYMAP is the default keymap bound to the mode keymap.
   If non-nil, it should be a variable name (whose value is a keymap),
   or an expression that returns either a keymap or a list of
-  arguments for `easy-mmode-define-keymap'.  If you supply a KEYMAP
-  argument that is not a symbol, this macro defines the variable
-  MODE-map and gives it the value that KEYMAP specifies.
+  (KEY . BINDING) pairs where KEY and BINDING are suitable for
+  `define-key'.  If you supply a KEYMAP argument that is not a
+  symbol, this macro defines the variable MODE-map and gives it
+  the value that KEYMAP specifies.
 
 BODY contains code to execute each time the mode is enabled or disabled.
   It is executed after toggling the mode, and before running MODE-hook.
@@ -252,7 +253,8 @@ Use the command `%s' to change this variable." pretty-name mode))
          (t
          (let ((base-doc-string
                  (concat "Non-nil if %s is enabled.
-See the command `%s' for a description of this minor mode."
+See the `%s' command
+for a description of this minor mode."
                          (if body "
 Setting this variable directly does not take effect;
 either customize it (see the info node `Easy Customization')
index 6d4798b92f9b1397ef5a516bcc68c2c46492ed0a..7ee897093b2348a18286a9ec06682b4180c49ab5 100644 (file)
@@ -265,7 +265,7 @@ Summary:
 
 
 ;; Local Variables:
-;; generated-autoload-file: "eieio-core.el"
+;; generated-autoload-file: "eieio-loaddefs.el"
 ;; End:
 
 (provide 'eieio-compat)
index 631e4a437f2628a431a7a5548bfa91afc6d38573..fd8ae2abecb0a78f0decc8999c04b25b94de4a54 100644 (file)
@@ -33,6 +33,7 @@
 
 (require 'cl-lib)
 (require 'pcase)
+(require 'eieio-loaddefs)
 
 ;;;
 ;; A few functions that are better in the official EIEIO src, but
@@ -756,9 +757,7 @@ Argument FN is the function calling this verifier."
          ;; The slot-missing method is a cool way of allowing an object author
          ;; to intercept missing slot definitions.  Since it is also the LAST
          ;; thing called in this fn, its return value would be retrieved.
-         (slot-missing obj slot 'oref)
-         ;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
-         )
+         (slot-missing obj slot 'oref))
       (cl-check-type obj eieio-object)
       (eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref))))
 
@@ -780,9 +779,7 @@ Fills in OBJ's SLOT with its default value."
            ;; Oref that slot.
            (aref (eieio--class-class-allocation-values cl)
                  c)
-         (slot-missing obj slot 'oref-default)
-         ;;(signal 'invalid-slot-name (list (class-name cl) slot))
-         )
+         (slot-missing obj slot 'oref-default))
       (eieio-barf-if-slot-unbound
        (let ((val (cl--slot-descriptor-initform
                    (aref (eieio--class-slots cl)
@@ -822,9 +819,7 @@ Fills in OBJ's SLOT with VALUE."
              (aset (eieio--class-class-allocation-values class)
                    c value))
          ;; See oref for comment on `slot-missing'
-         (slot-missing obj slot 'oset value)
-         ;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
-         )
+         (slot-missing obj slot 'oset value))
       (eieio--validate-slot-value class c value slot)
       (aset obj c value))))
 
@@ -1100,98 +1095,6 @@ method invocation orders of the involved classes."
 (cl-defmethod cl-generic-generalizers ((_specializer (head subclass)))
   (list eieio--generic-subclass-generalizer))
 
-\f
-;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "6aca3c1b5f751a01331761da45fc4f5c")
-;;; Generated autoloads from eieio-compat.el
-
-(autoload 'eieio--defalias "eieio-compat" "\
-Like `defalias', but with less side-effects.
-More specifically, it has no side-effects at all when the new function
-definition is the same (`eq') as the old one.
-
-\(fn NAME BODY)" nil nil)
-
-(autoload 'defgeneric "eieio-compat" "\
-Create a generic function METHOD.
-DOC-STRING is the base documentation for this class.  A generic
-function has no body, as its purpose is to decide which method body
-is appropriate to use.  Uses `defmethod' to create methods, and calls
-`defgeneric' for you.  With this implementation the ARGS are
-currently ignored.  You can use `defgeneric' to apply specialized
-top level documentation to a method.
-
-\(fn METHOD ARGS &optional DOC-STRING)" nil t)
-
-(function-put 'defgeneric 'doc-string-elt '3)
-
-(make-obsolete 'defgeneric 'cl-defgeneric '"25.1")
-
-(autoload 'defmethod "eieio-compat" "\
-Create a new METHOD through `defgeneric' with ARGS.
-
-The optional second argument KEY is a specifier that
-modifies how the method is called, including:
-   :before  - Method will be called before the :primary
-   :primary - The default if not specified
-   :after   - Method will be called after the :primary
-   :static  - First arg could be an object or class
-The next argument is the ARGLIST.  The ARGLIST specifies the arguments
-to the method as with `defun'.  The first argument can have a type
-specifier, such as:
-  ((VARNAME CLASS) ARG2 ...)
-where VARNAME is the name of the local variable for the method being
-created.  The CLASS is a class symbol for a class made with `defclass'.
-A DOCSTRING comes after the ARGLIST, and is optional.
-All the rest of the args are the BODY of the method.  A method will
-return the value of the last form in the BODY.
-
-Summary:
-
- (defmethod mymethod [:before | :primary | :after | :static]
-                     ((typearg class-name) arg2 &optional opt &rest rest)
-    \"doc-string\"
-     body)
-
-\(fn METHOD &rest ARGS)" nil t)
-
-(function-put 'defmethod 'doc-string-elt '3)
-
-(make-obsolete 'defmethod 'cl-defmethod '"25.1")
-
-(autoload 'eieio--defgeneric-init-form "eieio-compat" "\
-
-
-\(fn METHOD DOC-STRING)" nil nil)
-
-(autoload 'eieio--defmethod "eieio-compat" "\
-
-
-\(fn METHOD KIND ARGCLASS CODE)" nil nil)
-
-(autoload 'eieio-defmethod "eieio-compat" "\
-Obsolete work part of an old version of the `defmethod' macro.
-
-\(fn METHOD ARGS)" nil nil)
-
-(make-obsolete 'eieio-defmethod 'cl-defmethod '"24.1")
-
-(autoload 'eieio-defgeneric "eieio-compat" "\
-Obsolete work part of an old version of the `defgeneric' macro.
-
-\(fn METHOD DOC-STRING)" nil nil)
-
-(make-obsolete 'eieio-defgeneric 'cl-defgeneric '"24.1")
-
-(autoload 'eieio-defclass "eieio-compat" "\
-
-
-\(fn CNAME SUPERCLASSES SLOTS OPTIONS)" nil nil)
-
-(make-obsolete 'eieio-defclass 'eieio-defclass-internal '"25.1")
-
-;;;***
-\f
-
 (provide 'eieio-core)
 
 ;;; eieio-core.el ends here
index 0ba1eba4f48a8be6c815c7aa8c3437f8ef7c5285..d2d87ea15371d881e3542e1e45bf1d38b9ca52f9 100644 (file)
@@ -473,7 +473,7 @@ Return the symbol for the group, or nil"
 (provide 'eieio-custom)
 
 ;; Local variables:
-;; generated-autoload-file: "eieio.el"
+;; generated-autoload-file: "eieio-loaddefs.el"
 ;; End:
 
 ;;; eieio-custom.el ends here
index 8a4df0635c4d2f0bfba46bcebaae3d21fca96456..9e5f524a945c46238babd66a7ff076f1602bb83c 100644 (file)
@@ -349,7 +349,7 @@ INDENT is the current indentation level."
 (provide 'eieio-opt)
 
 ;; Local variables:
-;; generated-autoload-file: "eieio.el"
+;; generated-autoload-file: "eieio-loaddefs.el"
 ;; End:
 
 ;;; eieio-opt.el ends here
index 51a6f7bc206761bcfbfccf22347691b83df52bd1..80ac8eff322f28231260a0384d5fc28b37449abc 100644 (file)
@@ -678,7 +678,8 @@ This class is not stored in the `parent' slot of a class vector."
 
 (setq eieio-default-superclass (cl--find-class 'eieio-default-superclass))
 
-(defalias 'standard-class 'eieio-default-superclass)
+(define-obsolete-function-alias 'standard-class
+  'eieio-default-superclass "25.2")
 
 (cl-defgeneric make-instance (class &rest initargs)
   "Make a new instance of CLASS based on INITARGS.
@@ -765,11 +766,7 @@ dynamically set from SLOTS."
   ;; Shared initialize will parse our slots for us.
   (shared-initialize this slots))
 
-(cl-defgeneric slot-missing (object slot-name operation &optional new-value)
-  "Method invoked when an attempt to access a slot in OBJECT fails.")
-
-(cl-defmethod slot-missing ((object eieio-default-superclass) slot-name
-                        _operation &optional _new-value)
+(cl-defgeneric slot-missing (object slot-name _operation &optional _new-value)
   "Method invoked when an attempt to access a slot in OBJECT fails.
 SLOT-NAME is the name of the failed slot, OPERATION is the type of access
 that was requested, and optional NEW-VALUE is the value that was desired
@@ -777,8 +774,9 @@ to be set.
 
 This method is called from `oref', `oset', and other functions which
 directly reference slots in EIEIO objects."
-  (signal 'invalid-slot-name (list (eieio-object-name object)
-                                  slot-name)))
+  (signal 'invalid-slot-name
+          (list (if (eieio-object-p object) (eieio-object-name object) object)
+                slot-name)))
 
 (cl-defgeneric slot-unbound (object class slot-name fn)
   "Slot unbound is invoked during an attempt to reference an unbound slot.")
@@ -815,22 +813,19 @@ first and modify the returned object.")
     (if params (shared-initialize nobj params))
     nobj))
 
-(cl-defgeneric destructor (this &rest params)
-  "Destructor for cleaning up any dynamic links to our object.")
-
-(cl-defmethod destructor ((_this eieio-default-superclass) &rest _params)
-  "Destructor for cleaning up any dynamic links to our object.
-Argument THIS is the object being destroyed.  PARAMS are additional
-ignored parameters."
+(cl-defgeneric destructor (_this &rest _params)
+  "Destructor for cleaning up any dynamic links to our object."
+  (declare (obsolete nil "25.2"))
   ;; No cleanup... yet.
-  )
+  nil)
 
-(cl-defgeneric object-print (this &rest strings)
-  "Pretty printer for object THIS.  Call function `object-name' with STRINGS.
+(cl-defgeneric object-print (this &rest _strings)
+  "Pretty printer for object THIS.
 
 It is sometimes useful to put a summary of the object into the
 default #<notation> string when using EIEIO browsing tools.
-Implement this method to customize the summary.")
+Implement this method to customize the summary."
+  (format "%S" this))
 
 (cl-defmethod object-print ((this eieio-default-superclass) &rest strings)
   "Pretty printer for object THIS.  Call function `object-name' with STRINGS.
@@ -938,11 +933,12 @@ this object."
 \f
 ;;; Unimplemented functions from CLOS
 ;;
-(defun change-class (_obj _class)
+(defun eieio-change-class (_obj _class)
   "Change the class of OBJ to type CLASS.
 This may create or delete slots, but does not affect the return value
 of `eq'."
   (error "EIEIO: `change-class' is unimplemented"))
+(define-obsolete-function-alias 'change-class 'eieio-change-class "25.2")
 
 ;; Hook ourselves into help system for describing classes and methods.
 ;; FIXME: This is not actually needed any more since we can click on the
@@ -970,41 +966,6 @@ variable PRINT-FUNCTION.  Optional argument NOESCAPE is passed to
 (advice-add 'edebug-prin1-to-string
             :around #'eieio-edebug-prin1-to-string)
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "eieio-custom" "eieio-custom.el" "e8d466f8eee341f3da967c2931b28043")
-;;; Generated autoloads from eieio-custom.el
-
-(autoload 'customize-object "eieio-custom" "\
-Customize OBJ in a custom buffer.
-Optional argument GROUP is the sub-group of slots to display.
-
-\(fn OBJ &optional GROUP)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "5bd32f1033d0e2eee7c32c0ad28330fc")
-;;; Generated autoloads from eieio-opt.el
-
-(autoload 'eieio-browse "eieio-opt" "\
-Create an object browser window to show all objects.
-If optional ROOT-CLASS, then start with that, otherwise start with
-variable `eieio-default-superclass'.
-
-\(fn &optional ROOT-CLASS)" t nil)
-
-(define-obsolete-function-alias 'eieio-help-class 'cl--describe-class "25.1")
-
-(autoload 'eieio-help-constructor "eieio-opt" "\
-Describe CTR if it is a class constructor.
-
-\(fn CTR)" nil nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
 (provide 'eieio)
 
 ;;; eieio ends here
index d5e7178b2265a1045a924529a5cf468650deac3b..6c2f869f260ab632b053721f1a317b8b8fa1994d 100644 (file)
@@ -197,12 +197,23 @@ expression point is on."
    (t
     (kill-local-variable 'eldoc-message-commands)
     (remove-hook 'post-command-hook 'eldoc-schedule-timer t)
-    (remove-hook 'pre-command-hook 'eldoc-pre-command-refresh-echo-area t))))
+    (remove-hook 'pre-command-hook 'eldoc-pre-command-refresh-echo-area t)
+    (when eldoc-timer
+      (cancel-timer eldoc-timer)
+      (setq eldoc-timer nil)))))
 
 ;;;###autoload
 (define-minor-mode global-eldoc-mode
-  "Enable `eldoc-mode' in all buffers where it's applicable."
-  :group 'eldoc :global t
+  "Toggle Global Eldoc mode on or off.
+With a prefix argument ARG, enable Global Eldoc mode if ARG is
+positive, and disable it otherwise.  If called from Lisp, enable
+the mode if ARG is omitted or nil, and toggle it if ARG is ‘toggle’.
+
+If Global Eldoc mode is on, `eldoc-mode' will be enabled in all
+buffers where it's applicable.  These are buffers that have modes
+that have enabled eldoc support.  See `eldoc-documentation-function'."
+  :group 'eldoc
+  :global t
   :initialize 'custom-initialize-delay
   :init-value t
   (setq eldoc-last-message nil)
index 2a2418fa7d2b16d27a7308712d907bbe3d5cb4ee..67cb102a67c6d9532b050fc5eaab5ee64ad25f82 100644 (file)
@@ -285,6 +285,46 @@ BUFFER defaults to current buffer.  Does not modify BUFFER."
             (kill-buffer clone)))))))
 
 
+(defmacro ert-with-function-mocked (name mock &rest body)
+  "Mocks function NAME with MOCK and run BODY.
+
+Once BODY finishes (be it normally by returning a value or
+abnormally by throwing or signaling), the old definition of
+function NAME is restored.
+
+BODY may further change the mock with `fset'.
+
+If MOCK is nil, the function NAME is mocked with a function
+`ert-fail'ing when called.
+
+For example:
+
+    ;; Regular use, function is mocked inside the BODY:
+    (should (eq 2 (+ 1 1)))
+    (ert-with-function-mocked ((+ (lambda (a b) (- a b))))
+      (should (eq 0 (+ 1 1))))
+    (should (eq 2 (+ 1 1)))
+
+    ;; Macro correctly recovers from a throw or signal:
+    (should
+      (catch 'done
+        (ert-with-function-mocked ((+ (lambda (a b) (- a b))))
+          (should (eq 0 (+ 1 1))))
+          (throw 'done t)))
+    (should (eq 2 (+ 1 1)))
+"
+  (declare (indent 2))
+  (let ((old-var (make-symbol "old-var"))
+        (mock-var (make-symbol "mock-var")))
+    `(let ((,old-var (symbol-function (quote ,name))) (,mock-var ,mock))
+       (fset (quote ,name)
+             (or ,mock-var (lambda (&rest _)
+                             (ert-fail (concat "`" ,(symbol-name name)
+                                               "' unexpectedly called.")))))
+       (unwind-protect
+           (progn ,@body)
+         (fset (quote ,name) ,old-var)))))
+
 (provide 'ert-x)
 
 ;;; ert-x.el ends here
index 0575ce49f80330a468566cc96c1bae8f22c68aea..c625fd345c9ef7c2b55fa812fb7499821201b856 100644 (file)
@@ -182,15 +182,15 @@ See the functions `find-function' and `find-variable'."
 LIBRARY should be a string (the name of the library)."
   ;; If the library is byte-compiled, try to find a source library by
   ;; the same name.
-  (if (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library)
-      (setq library (replace-match "" t t library)))
+  (when (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library)
+    (setq library (replace-match "" t t library)))
   (or
    (locate-file library
-               (or find-function-source-path load-path)
-               (find-library-suffixes))
+                (or find-function-source-path load-path)
+                (find-library-suffixes))
    (locate-file library
-               (or find-function-source-path load-path)
-               load-file-rep-suffixes)
+                (or find-function-source-path load-path)
+                load-file-rep-suffixes)
    (when (file-name-absolute-p library)
      (let ((rel (find-library--load-name library)))
        (when rel
@@ -201,8 +201,44 @@ LIBRARY should be a string (the name of the library)."
           (locate-file rel
                        (or find-function-source-path load-path)
                        load-file-rep-suffixes)))))
+   (find-library--from-load-path library)
    (error "Can't find library %s" library)))
 
+(defun find-library--from-load-path (library)
+  ;; In `load-history', the file may be ".elc", ".el", ".el.gz", and
+  ;; LIBRARY may be "foo.el" or "foo", so make sure that we get all
+  ;; potential matches, and then see whether any of them lead us to an
+  ;; ".el" or an ".el.gz" file.
+  (let* ((elc-regexp "\\.el\\(c\\(\\..*\\)?\\)\\'")
+         (suffix-regexp
+          (concat "\\("
+                  (mapconcat 'regexp-quote (find-library-suffixes) "\\'\\|")
+                  "\\|" elc-regexp "\\)\\'"))
+         (potentials
+          (mapcar
+           (lambda (entry)
+             (if (string-match suffix-regexp (car entry))
+                 (replace-match "" t t (car entry))
+               (car entry)))
+           (seq-filter
+            (lambda (entry)
+              (string-match
+               (concat "\\`"
+                       (regexp-quote
+                        (replace-regexp-in-string suffix-regexp "" library))
+                       suffix-regexp)
+               (file-name-nondirectory (car entry))))
+            load-history)))
+         result)
+    (dolist (file potentials)
+      (dolist (suffix (find-library-suffixes))
+        (when (not result)
+          (cond ((file-exists-p file)
+                 (setq result file))
+                ((file-exists-p (concat file suffix))
+                 (setq result (concat file suffix)))))))
+    result))
+
 (defvar find-function-C-source-directory
   (let ((dir (expand-file-name "src" source-directory)))
     (if (file-accessible-directory-p dir) dir))
@@ -255,9 +291,12 @@ TYPE should be nil to find a function, or `defvar' to find a variable."
     (cons (current-buffer) (match-beginning 0))))
 
 ;;;###autoload
-(defun find-library (library)
+(defun find-library (library &optional other-window)
   "Find the Emacs Lisp source of LIBRARY.
-LIBRARY should be a string (the name of the library)."
+LIBRARY should be a string (the name of the library).  If the
+optional OTHER-WINDOW argument (i.e., the command argument) is
+specified, pop to a different window before displaying the
+buffer."
   (interactive
    (let* ((dirs (or find-function-source-path load-path))
           (suffixes (find-library-suffixes))
@@ -279,11 +318,17 @@ LIBRARY should be a string (the name of the library)."
      (when (and def (not (test-completion def table)))
        (setq def nil))
      (list
-      (completing-read (if def (format "Library name (default %s): " def)
+      (completing-read (if def
+                           (format "Library name (default %s): " def)
                         "Library name: ")
-                      table nil nil nil nil def))))
-  (let ((buf (find-file-noselect (find-library-name library))))
-    (condition-case nil (switch-to-buffer buf) (error (pop-to-buffer buf)))))
+                      table nil nil nil nil def)
+      current-prefix-arg)))
+  (prog1
+      (funcall (if other-window
+                   'pop-to-buffer
+                 'pop-to-buffer-same-window)
+               (find-file-noselect (find-library-name library)))
+    (run-hooks 'find-function-after-hook)))
 
 ;;;###autoload
 (defun find-function-search-for-symbol (symbol type library)
index e400b4990364a59c2d829f708b033f3f0f837432..3507a39543697f8a21cd1638fdec77f27ae96908 100644 (file)
@@ -2,13 +2,16 @@
 
 ;; Copyright (C) 2014-2016 Free Software Foundation, Inc.
 
-;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-;; Maintainer: Artur Malabarba <bruce.connor.am@gmail.com>
+;; Author: Artur Malabarba <emacs@endlessparentheses.com>
+;; Package-Requires: ((emacs "24.1"))
 ;; Version: 1.0.4
 ;; Keywords: extensions lisp
 ;; Prefix: let-alist
 ;; Separator: -
 
+;; This is an Elpa :core package. Don't use functionality that is not
+;; compatible with Emacs 24.1.
+
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software: you can redistribute it and/or modify
@@ -134,7 +137,7 @@ displayed in the example above."
   (let ((var (make-symbol "alist")))
     `(let ((,var ,alist))
        (let ,(mapcar (lambda (x) `(,(car x) ,(let-alist--access-sexp (car x) var)))
-               (delete-dups (let-alist--deep-dot-search body)))
+                     (delete-dups (let-alist--deep-dot-search body)))
          ,@body))))
 
 (provide 'let-alist)
index 315b3d563435dd303cbdbfaf0cde8c7fc8cb2090..4f3af2a7d7f6985cd2ab0c801205cc8a1f324643 100644 (file)
 (defvar lisp-doc-string-elt-property 'doc-string-elt
   "The symbol property that holds the docstring position info.")
 
+(defconst lisp-prettify-symbols-alist '(("lambda"  . ?λ))
+  "Alist of symbol/\"pretty\" characters to be displayed.")
 
 ;;;; Font-lock support.
 
@@ -594,7 +596,7 @@ font-lock keywords will not be case sensitive."
           (font-lock-extra-managed-props help-echo)
          (font-lock-syntactic-face-function
           . lisp-font-lock-syntactic-face-function)))
-  (setq-local prettify-symbols-alist lisp--prettify-symbols-alist)
+  (setq-local prettify-symbols-alist lisp-prettify-symbols-alist)
   (setq-local electric-pair-skip-whitespace 'chomp)
   (setq-local electric-pair-open-newline-between-pairs nil))
 
@@ -655,9 +657,6 @@ font-lock keywords will not be case sensitive."
   :type 'hook
   :group 'lisp)
 
-(defconst lisp--prettify-symbols-alist
-  '(("lambda"  . ?λ)))
-
 ;;; Generic Lisp mode.
 
 (defvar lisp-mode-map
@@ -1217,8 +1216,15 @@ and initial semicolons."
       ;;
       ;; The `fill-column' is temporarily bound to
       ;; `emacs-lisp-docstring-fill-column' if that value is an integer.
-      (let ((paragraph-start (concat paragraph-start
-                                    "\\|\\s-*\\([(;:\"]\\|`(\\|#'(\\)"))
+      (let ((paragraph-start
+             (concat paragraph-start
+                     (format "\\|\\s-*\\([(;%s\"]\\|`(\\|#'(\\)"
+                             ;; If we're inside a string (like the doc
+                             ;; string), don't consider a colon to be
+                             ;; a paragraph-start character.
+                             (if (nth 3 (syntax-ppss))
+                                 ""
+                               ":"))))
            (paragraph-separate
             (concat paragraph-separate "\\|\\s-*\".*[,\\.]$"))
             (fill-column (if (and (integerp emacs-lisp-docstring-fill-column)
index 764d01ce6dbcddf8cf2297a1d83e13a95754fa88..ea7cce67be71e242c20db9bbf8718d1f71d777ee 100644 (file)
@@ -587,7 +587,11 @@ Interactively, the behavior depends on `narrow-to-defun-include-comments'."
 Each element looks like (OPEN-CHAR CLOSE-CHAR) or (COMMAND-CHAR
 OPEN-CHAR CLOSE-CHAR).  The characters OPEN-CHAR and CLOSE-CHAR
 of the pair whose key is equal to the last input character with
-or without modifiers, are inserted by `insert-pair'.")
+or without modifiers, are inserted by `insert-pair'.
+
+If COMMAND-CHAR is specified, it is a character that triggers the
+insertion of the open/close pair, and COMMAND-CHAR itself isn't
+inserted.")
 
 (defun insert-pair (&optional arg open close)
   "Enclose following ARG sexps in a pair of OPEN and CLOSE characters.
index 7a5b020203e8af1d524d2b6cdb736ca03e195cfa..c05bb53b0b31cf0ed0087639e3a8a264c5320b83 100644 (file)
 
 (require 'tabulated-list)
 (require 'macroexp)
+(require 'url-handlers)
 
 (defgroup package nil
   "Manager for Emacs Lisp packages."
@@ -905,12 +906,15 @@ untar into a directory named DIR; otherwise, signal an error."
   file)
 
 (defvar generated-autoload-file)
+(defvar autoload-timestamps)
 (defvar version-control)
 
 (defun package-generate-autoloads (name pkg-dir)
   (let* ((auto-name (format "%s-autoloads.el" name))
          ;;(ignore-name (concat name "-pkg.el"))
          (generated-autoload-file (expand-file-name auto-name pkg-dir))
+         ;; We don't need 'em, and this makes the output reproducible.
+         (autoload-timestamps nil)
          ;; Silence `autoload-generate-file-autoloads'.
          (noninteractive inhibit-message)
          (backup-inhibited t)
@@ -1426,7 +1430,10 @@ If `user-init-file' does not mention `(package-initialize)', add
 it to the file.
 If called as part of loading `user-init-file', set
 `package-enable-at-startup' to nil, to prevent accidentally
-loading packages twice."
+loading packages twice.
+It is not necessary to adjust `load-path' or `require' the
+individual packages after calling `package-initialize' -- this is
+taken care of by `package-initialize'."
   (interactive)
   (setq package-alist nil)
   (if (equal user-init-file load-file-name)
@@ -2293,7 +2300,7 @@ Otherwise no newline is inserted."
     (insert "\n")
     (unless (and pkg-dir (not archive)) ; Installed pkgs don't have archive.
       (package--print-help-section "Archive"
-        (or archive "n/a") "\n"))
+        (or archive "n/a")))
     (and version
          (package--print-help-section "Version"
            (package-version-join version)))
index 8362ddafd3fd6335910edaf086bc7538b127dc1e..92f0ad78566c78cfa46f38cd77b8c09f6bdb6ae3 100644 (file)
@@ -4,7 +4,7 @@
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Keywords: sequences
-;; Version: 2.3
+;; Version: 2.14
 ;; Package: seq
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -144,6 +144,18 @@ if positive or too small if negative)."
             sequence)
     (nreverse result)))
 
+(defun seq-map-indexed (function sequence)
+  "Return the result of applying FUNCTION to each element of SEQUENCE.
+Unlike `seq-map', FUNCTION takes two arguments: the element of
+the sequence, and its index within the sequence."
+  (let ((index 0))
+    (seq-map (lambda (elt)
+               (prog1
+                   (funcall function elt index)
+                 (setq index (1+ index))))
+             sequence)))
+
+
 ;; faster implementation for sequences (sequencep)
 (cl-defmethod seq-map (function (sequence sequence))
   (mapcar function sequence))
@@ -206,6 +218,16 @@ The result is a sequence of the same type as SEQUENCE."
 (cl-defmethod seq-sort (pred (list list))
   (sort (seq-copy list) pred))
 
+(defun seq-sort-by (function pred sequence)
+  "Sort SEQUENCE using PRED as a comparison function.
+Elements of SEQUENCE are transformed by FUNCTION before being
+sorted.  FUNCTION must be a function of one argument."
+  (seq-sort (lambda (a b)
+              (funcall pred
+                       (funcall function a)
+                       (funcall function b)))
+            sequence))
+
 (cl-defgeneric seq-reverse (sequence)
   "Return a sequence with elements of SEQUENCE in reverse order."
   (let ((result '()))
index e20a210de715e3bbe76a2be801d708838acefd2e..ae682ecf73a95335e859798990613fe0c49c88ab 100644 (file)
@@ -272,9 +272,10 @@ Note: back-references in REGEXPs do not work."
          (cond ,@(nreverse branches))))))
 
 (defun syntax-propertize-via-font-lock (keywords)
-  "Propertize for syntax in START..END using font-lock syntax.
+  "Propertize for syntax using font-lock syntax.
 KEYWORDS obeys the format used in `font-lock-syntactic-keywords'.
-The return value is a function suitable for `syntax-propertize-function'."
+The return value is a function (with two paremeters, START and
+END) suitable for `syntax-propertize-function'."
   (lambda (start end)
     (with-no-warnings
       (let ((font-lock-syntactic-keywords keywords))
@@ -283,7 +284,7 @@ The return value is a function suitable for `syntax-propertize-function'."
         (setq keywords font-lock-syntactic-keywords)))))
 
 (defun syntax-propertize (pos)
-  "Ensure that syntax-table properties are set until POS."
+  "Ensure that syntax-table properties are set until POS (a buffer point)."
   (when (< syntax-propertize--done pos)
     (if (null syntax-propertize-function)
         (setq syntax-propertize--done (max (point-max) pos))
@@ -416,6 +417,9 @@ point (where the PPSS is equivalent to nil).")
              (error nil)))
          syntax-ppss-stats))
 
+(defvar-local syntax-ppss-table nil
+  "Syntax-table to use during `syntax-ppss', if any.")
+
 (defun syntax-ppss (&optional pos)
   "Parse-Partial-Sexp State at POS, defaulting to point.
 The returned value is the same as that of `parse-partial-sexp'
@@ -431,6 +435,7 @@ running the hook."
   (unless pos (setq pos (point)))
   (syntax-propertize pos)
   ;;
+  (with-syntax-table (or syntax-ppss-table (syntax-table))
   (let ((old-ppss (cdr syntax-ppss-last))
        (old-pos (car syntax-ppss-last))
        (ppss nil)
@@ -567,7 +572,7 @@ running the hook."
        ;; we may end up calling parse-partial-sexp with a position before
        ;; point-min.  In that case, just parse from point-min assuming
        ;; a nil state.
-       (parse-partial-sexp (point-min) pos)))))
+       (parse-partial-sexp (point-min) pos))))))
 
 ;; Debugging functions
 
diff --git a/lisp/emacs-lisp/timer-list.el b/lisp/emacs-lisp/timer-list.el
new file mode 100644 (file)
index 0000000..9b13e52
--- /dev/null
@@ -0,0 +1,112 @@
+;;; timer-list.el --- list active timers in a buffer
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Maintainer: emacs-devel@gnu.org
+;; Package: emacs
+
+;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+;;;###autoload
+(defun timer-list (&optional _ignore-auto _nonconfirm)
+  "List all timers in a buffer."
+  (interactive)
+  (pop-to-buffer-same-window (get-buffer-create "*timer-list*"))
+  (let ((inhibit-read-only t))
+    (erase-buffer)
+    (timer-list-mode)
+    (dolist (timer (append timer-list timer-idle-list))
+      (insert (format "%4s %10s %8s %s"
+                      ;; Idle.
+                      (if (aref timer 7)
+                          "*"
+                        " ")
+                      ;; Next time.
+                      (let ((time (float-time (list (aref timer 1)
+                                                    (aref timer 2)
+                                                    (aref timer 3)))))
+                        (format "%.2f"
+                                (if (aref timer 7)
+                                    time
+                                  (- (float-time (list (aref timer 1)
+                                                       (aref timer 2)
+                                                       (aref timer 3)))
+                                     (float-time)))))
+                      ;; Repeat.
+                      (let ((repeat (aref timer 4)))
+                        (cond
+                         ((numberp repeat)
+                          (format "%.2f" (/ repeat 60)))
+                         ((null repeat)
+                          "-")
+                         (t
+                          (format "%s" repeat))))
+                      ;; Function.
+                      (let ((function (aref timer 5)))
+                        (replace-regexp-in-string
+                         "\n" " "
+                         (cond
+                          ((byte-code-function-p function)
+                           (replace-regexp-in-string
+                            "[^-A-Za-z0-9 ]" ""
+                            (format "%s" function)))
+                          (t
+                           (format "%s" function)))))))
+      (put-text-property (line-beginning-position)
+                         (1+ (line-beginning-position))
+                         'timer timer)
+      (insert "\n")))
+  (goto-char (point-min)))
+;; This command can be destructive if they don't know what they are
+;; doing.  Kids, don't try this at home!
+;;;###autoload (put 'timer-list 'disabled "Beware: manually canceling timers can ruin your Emacs session.")
+
+(defvar timer-list-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "c" 'timer-list-cancel)
+    (easy-menu-define nil map ""
+      '("Timers"
+       ["Cancel" timer-list-cancel t]))
+    map))
+
+(define-derived-mode timer-list-mode special-mode "timer-list"
+  "Mode for listing and controlling timers."
+  (setq truncate-lines t)
+  (buffer-disable-undo)
+  (setq-local revert-buffer-function 'timer-list)
+  (setq buffer-read-only t)
+  (setq header-line-format
+        (format "%4s %10s %8s %s"
+                "Idle" "Next" "Repeat" "Function")))
+
+(defun timer-list-cancel ()
+  "Cancel the timer on the line under point."
+  (interactive)
+  (let ((timer (get-text-property (line-beginning-position) 'timer))
+        (inhibit-read-only t))
+    (unless timer
+      (error "No timer on the current line"))
+    (cancel-timer timer)
+    (delete-region (line-beginning-position)
+                   (line-beginning-position 2))))
+
+(provide 'timer-list)
+
+;;; timer-list.el ends here
index 3f2e2fb5286c50f29dd69798619aee36b388f076..c01ea4973c72a451102ce2127a92096c7dbfd4b9 100644 (file)
@@ -424,6 +424,8 @@ This function returns a timer object which you can use in `cancel-timer'."
 (defun add-timeout (secs function object &optional repeat)
   "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 returns a timer object which you can use in `cancel-timer'.
 This function is for compatibility; see also `run-with-timer'."
   (run-with-timer secs repeat function object))
 
index 9351fcc6ca6b81d7d1312090a6f232fb5ca3c809..542dbccd77553f44ccdfd65ffb67b086cac6de2d 100644 (file)
@@ -302,7 +302,7 @@ is not turned on."
 If there is additional input within this time, the prefix key is
 used as a normal prefix key.  So typing a key sequence quickly will
 inhibit overriding the prefix key.
-As a special case, if the prefix keys repeated within this time, the
+As a special case, if the prefix key is repeated within this time, the
 first prefix key is discarded, so typing a prefix key twice in quick
 succession will also inhibit overriding the prefix key.
 If the value is nil, use a shifted prefix key to inhibit the override."
index b0b016b7063c4386e393c01748e78bc0ecb5ff57..170744026e1c9d610af68c32bcd0327d56c61c7b 100644 (file)
   :link '(custom-manual "(epa) Top")
   :group 'epg)
 
+(defcustom epa-replace-original-text 'ask
+  "Whether the original text shall be replaced by the decrypted.
+
+If t, replace the original text without any confirmation.
+If nil, don't replace the original text and show the result in a new buffer.
+If neither t nor nil, ask user for confirmation."
+  :type '(choice (const :tag "Never" nil)
+                (const :tag "Ask the user" ask)
+                (const :tag "Always" t))
+  :group 'epa)
+
 (defcustom epa-popup-info-window t
   "If non-nil, display status information from epa commands in another window."
   :type 'boolean
@@ -872,7 +883,9 @@ For example:
          (with-current-buffer (funcall make-buffer-function)
            (let ((inhibit-read-only t))
              (insert plain)))
-       (if (y-or-n-p "Replace the original text? ")
+       (if (or (eq epa-replace-original-text t)
+                (and epa-replace-original-text
+                     (y-or-n-p "Replace the original text? ")))
            (let ((inhibit-read-only t))
              (delete-region start end)
              (goto-char start)
@@ -968,7 +981,9 @@ For example:
                 (or coding-system-for-read
                     (get-text-property start 'epa-coding-system-used)
                     'undecided)))
-    (if (y-or-n-p "Replace the original text? ")
+    (if (or (eq epa-replace-original-text t)
+            (and epa-replace-original-text
+                 (y-or-n-p "Replace the original text? ")))
        (let ((inhibit-read-only t)
              buffer-read-only)
          (delete-region start end)
index 6d508e203f4b1b39d695e30e763835abc6786ff3..bbb7ccbc99d96a254c63b212962a4958f82f6da9 100644 (file)
@@ -1,4 +1,4 @@
-;;; erc-backend.el --- Backend network communication for ERC
+;;; erc-backend.el --- Backend network communication for ERC  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2004-2016 Free Software Foundation, Inc.
 
@@ -376,7 +376,7 @@ alist."
   :type '(repeat (cons (string :tag "Target")
                        coding-system)))
 
-(defcustom erc-server-connect-function 'erc-open-network-stream
+(defcustom erc-server-connect-function #'erc-open-network-stream
   "Function used to initiate a connection.
 It should take same arguments as `open-network-stream' does."
   :group 'erc-server
@@ -549,47 +549,45 @@ The current buffer is given by BUFFER."
 (defun erc-server-connect (server port buffer)
   "Perform the connection and login using the specified SERVER and PORT.
 We will store server variables in the buffer given by BUFFER."
-  (let ((msg (erc-format-message 'connect ?S server ?p port)))
+  (let ((msg (erc-format-message 'connect ?S server ?p port)) process)
     (message "%s" msg)
-    (let ((process (funcall erc-server-connect-function
-                            (format "erc-%s-%s" server port)
-                            nil server port)))
-      (unless (processp process)
-        (error "Connection attempt failed"))
+    (setq process (funcall erc-server-connect-function
+                           (format "erc-%s-%s" server port) nil server port))
+    (unless (processp process)
+      (error "Connection attempt failed"))
+    ;; Misc server variables
+    (with-current-buffer buffer
+      (setq erc-server-process process)
+      (setq erc-server-quitting nil)
+      (setq erc-server-reconnecting nil)
+      (setq erc-server-timed-out nil)
+      (setq erc-server-banned nil)
+      (setq erc-server-error-occurred nil)
+      (let ((time (erc-current-time)))
+        (setq erc-server-last-sent-time time)
+        (setq erc-server-last-ping-time time)
+        (setq erc-server-last-received-time time))
+      (setq erc-server-lines-sent 0)
+      ;; last peers (sender and receiver)
+      (setq erc-server-last-peers '(nil . nil)))
+    ;; we do our own encoding and decoding
+    (when (fboundp 'set-process-coding-system)
+      (set-process-coding-system process 'raw-text))
+    ;; process handlers
+    (set-process-sentinel process #'erc-process-sentinel)
+    (set-process-filter process #'erc-server-filter-function)
+    (set-process-buffer process buffer)
+    (erc-log "\n\n\n********************************************\n")
+    (message "%s" (erc-format-message
+                   'login ?n
+                   (with-current-buffer buffer (erc-current-nick))))
+    ;; wait with script loading until we receive a confirmation (first
+    ;; MOTD line)
+    (if (eq (process-status process) 'connect)
+        ;; waiting for a non-blocking connect - keep the user informed
+        (erc-display-message nil nil buffer "Opening connection..\n")
       (message "%s...done" msg)
-      ;; Misc server variables
-      (with-current-buffer buffer
-        (setq erc-server-process process)
-        (setq erc-server-quitting nil)
-        (setq erc-server-reconnecting nil)
-        (setq erc-server-timed-out nil)
-        (setq erc-server-banned nil)
-        (setq erc-server-error-occurred nil)
-        (let ((time (erc-current-time)))
-          (setq erc-server-last-sent-time time)
-          (setq erc-server-last-ping-time time)
-          (setq erc-server-last-received-time time))
-        (setq erc-server-lines-sent 0)
-        ;; last peers (sender and receiver)
-        (setq erc-server-last-peers '(nil . nil)))
-      ;; we do our own encoding and decoding
-      (when (fboundp 'set-process-coding-system)
-        (set-process-coding-system process 'raw-text))
-      ;; process handlers
-      (set-process-sentinel process 'erc-process-sentinel)
-      (set-process-filter process 'erc-server-filter-function)
-      (set-process-buffer process buffer)))
-  (erc-log "\n\n\n********************************************\n")
-  (message "%s" (erc-format-message
-            'login ?n
-            (with-current-buffer buffer (erc-current-nick))))
-  ;; wait with script loading until we receive a confirmation (first
-  ;; MOTD line)
-  (if (eq erc-server-connect-function 'open-network-stream-nowait)
-      ;; it's a bit unclear otherwise that it's attempting to establish a
-      ;; connection
-      (erc-display-message nil nil buffer "Opening connection..\n")
-    (erc-login)))
+      (erc-login)) ))
 
 (defun erc-server-reconnect ()
 "Reestablish the current IRC connection.
@@ -605,11 +603,11 @@ Make sure you are in an ERC buffer when running this."
       (setq erc-server-last-sent-time 0)
       (setq erc-server-lines-sent 0)
       (let ((erc-server-connect-function (or erc-session-connector
-                                             'erc-open-network-stream)))
+                                             #'erc-open-network-stream)))
         (erc-open erc-session-server erc-session-port erc-server-current-nick
                   erc-session-user-full-name t erc-session-password)))))
 
-(defun erc-server-delayed-reconnect (event buffer)
+(defun erc-server-delayed-reconnect (buffer)
   (if (buffer-live-p buffer)
     (with-current-buffer buffer
       (erc-server-reconnect))))
@@ -650,7 +648,6 @@ EVENT is the message received from the closed connection process."
   (or erc-server-reconnecting
       (and erc-server-auto-reconnect
            (not erc-server-banned)
-           (not erc-server-error-occurred)
            ;; make sure we don't infinitely try to reconnect, unless the
            ;; user wants that
            (or (eq erc-server-reconnect-attempts t)
@@ -679,18 +676,18 @@ EVENT is the message received from the closed connection process."
               (erc-update-mode-line)
               (set-buffer-modified-p nil))
           ;; reconnect
-          (condition-case err
+          (condition-case nil
               (progn
                 (setq erc-server-reconnecting   nil
                       erc-server-reconnect-count (1+ erc-server-reconnect-count))
                 (setq delay erc-server-reconnect-timeout)
                 (run-at-time delay nil
-                             #'erc-server-delayed-reconnect event buffer))
+                             #'erc-server-delayed-reconnect buffer))
             (error (unless (integerp erc-server-reconnect-attempts)
                      (message "%s ... %s"
                               "Reconnecting until we succeed"
                               "kill the ERC server buffer to stop"))
-                   (erc-server-delayed-reconnect event buffer))))))))
+                   (erc-server-delayed-reconnect buffer))))))))
 
 (defun erc-process-sentinel-1 (event buffer)
   "Called when `erc-process-sentinel' has decided that we're disconnecting.
@@ -813,7 +810,7 @@ protection algorithm."
                         (+ erc-server-flood-penalty
                            erc-server-flood-last-message))
                   (erc-log-irc-protocol str 'outbound)
-                  (condition-case err
+                  (condition-case nil
                       (progn
                         ;; Set encoding just before sending the string
                         (when (fboundp 'set-process-coding-system)
@@ -880,7 +877,7 @@ protection algorithm."
           (erc-log (concat "erc-server-send-queue: "
                            msg "(" (buffer-name buffer) ")"))
           (when (erc-server-process-alive)
-            (condition-case err
+            (condition-case nil
                 ;; Set encoding just before sending the string
                 (progn
                   (when (fboundp 'set-process-coding-system)
@@ -1071,7 +1068,7 @@ Finds hooks by looking in the `erc-server-responses' hashtable."
     (erc-with-server-buffer
       (run-hook-with-args 'erc-timer-hook (erc-current-time)))))
 
-(add-hook 'erc-default-server-functions 'erc-handle-unknown-server-response)
+(add-hook 'erc-default-server-functions #'erc-handle-unknown-server-response)
 
 (defun erc-handle-unknown-server-response (proc parsed)
   "Display unknown server response's message."
@@ -1079,7 +1076,7 @@ Finds hooks by looking in the `erc-server-responses' hashtable."
                       " "
                       (erc-response.command parsed)
                       " "
-                      (mapconcat 'identity (erc-response.command-args parsed)
+                      (mapconcat #'identity (erc-response.command-args parsed)
                                  " "))))
     (erc-display-message parsed 'notice proc line)))
 
@@ -1210,10 +1207,11 @@ add things to `%s' instead."
          ;; value at this point, so I default to nil, and (add-hook)
          ;; unconditionally
          (defvar ,hook-name nil ,(format hook-doc name))
-         (add-to-list ',hook-name ',fn-name)
+         (add-hook ',hook-name #',fn-name)
          ;; Handler function
          (defun ,fn-name (proc parsed)
            ,fn-doc
+           (ignore proc parsed)
            ,@fn-body)
 
        ;; Make find-function and find-variable find them
@@ -1326,7 +1324,7 @@ add things to `%s' instead."
 (define-erc-response-handler (MODE)
   "Handle server mode changes." nil
   (let ((tgt (car (erc-response.command-args parsed)))
-        (mode (mapconcat 'identity (cdr (erc-response.command-args parsed))
+        (mode (mapconcat #'identity (cdr (erc-response.command-args parsed))
                          " ")))
     (pcase-let ((`(,nick ,login ,host)
                  (erc-parse-user (erc-response.sender parsed))))
@@ -1368,11 +1366,11 @@ add things to `%s' instead."
                  (cons nn (cdr erc-default-recipients)))
            (rename-buffer nn t)         ; bug#12002
            (erc-update-mode-line)
-           (add-to-list 'bufs (current-buffer)))))
+           (cl-pushnew (current-buffer) bufs))))
       (erc-update-user-nick nick nn host nil nil login)
       (cond
        ((string= nick (erc-current-nick))
-        (add-to-list 'bufs (erc-server-buffer))
+        (cl-pushnew (erc-server-buffer) bufs)
         (erc-set-current-nick nn)
         (erc-update-mode-line)
         (setq erc-nick-change-attempt-count 0)
@@ -1493,7 +1491,7 @@ add things to `%s' instead."
 
 ;; FIXME: need clean way of specifying extra hooks in
 ;; define-erc-response-handler.
-(add-hook 'erc-server-PRIVMSG-functions 'erc-auto-query)
+(add-hook 'erc-server-PRIVMSG-functions #'erc-auto-query)
 
 (define-erc-response-handler (QUIT)
   "Another user has quit IRC." nil
@@ -1524,7 +1522,7 @@ add things to `%s' instead."
 (define-erc-response-handler (WALLOPS)
   "Display a WALLOPS message." nil
   (let ((message (erc-response.contents parsed)))
-    (pcase-let ((`(,nick ,login ,host)
+    (pcase-let ((`(,nick ,_login ,_host)
                  (erc-parse-user (erc-response.sender parsed))))
       (erc-display-message
        parsed 'notice nil
@@ -1576,7 +1574,7 @@ certain commands are accepted and more.  See documentation for
 
 A server may send more than one 005 message."
   nil
-  (let ((line (mapconcat 'identity
+  (let ((line (mapconcat #'identity
                          (setf (erc-response.command-args parsed)
                                (cdr (erc-response.command-args parsed)))
                          " ")))
@@ -1595,7 +1593,7 @@ A server may send more than one 005 message."
 (define-erc-response-handler (221)
   "Display the current user modes." nil
   (let* ((nick (car (erc-response.command-args parsed)))
-         (modes (mapconcat 'identity
+         (modes (mapconcat #'identity
                            (cdr (erc-response.command-args parsed)) " ")))
     (erc-set-modes nick modes)
     (erc-display-message parsed 'notice 'active 's221 ?n nick ?m modes)))
@@ -1623,12 +1621,12 @@ See `erc-display-server-message'." nil
 
 (define-erc-response-handler (275)
   "Display secure connection message." nil
-  (pcase-let ((`(,nick ,user ,message)
+  (pcase-let ((`(,nick ,_user ,_message)
                (cdr (erc-response.command-args parsed))))
     (erc-display-message
      parsed 'notice 'active 's275
      ?n nick
-     ?m (mapconcat 'identity (cddr (erc-response.command-args parsed))
+     ?m (mapconcat #'identity (cddr (erc-response.command-args parsed))
                    " "))))
 
 (define-erc-response-handler (290)
@@ -1659,12 +1657,12 @@ See `erc-display-server-message'." nil
 
 (define-erc-response-handler (307)
   "Display nick-identified message." nil
-  (pcase-let ((`(,nick ,user ,message)
+  (pcase-let ((`(,nick ,_user ,_message)
                (cdr (erc-response.command-args parsed))))
     (erc-display-message
      parsed 'notice 'active 's307
      ?n nick
-     ?m (mapconcat 'identity (cddr (erc-response.command-args parsed))
+     ?m (mapconcat #'identity (cddr (erc-response.command-args parsed))
                    " "))))
 
 (define-erc-response-handler (311 314)
@@ -1738,12 +1736,12 @@ See `erc-display-server-message'." nil
   "Display a message for the 321 event."
   (erc-display-message parsed 'notice proc 's321)
   nil)
-(add-hook 'erc-server-321-functions 'erc-server-321-message t)
+(add-hook 'erc-server-321-functions #'erc-server-321-message t)
 
 (define-erc-response-handler (322)
   "LIST notice." nil
   (let ((topic (erc-response.contents parsed)))
-    (pcase-let ((`(,channel ,num-users)
+    (pcase-let ((`(,channel ,_num-users)
                  (cdr (erc-response.command-args parsed))))
       (add-to-list 'erc-channel-list (list channel))
       (erc-update-channel-topic channel topic))))
@@ -1756,12 +1754,12 @@ See `erc-display-server-message'." nil
       (erc-display-message
        parsed 'notice proc 's322
        ?c channel ?u num-users ?t (or topic "")))))
-(add-hook 'erc-server-322-functions 'erc-server-322-message t)
+(add-hook 'erc-server-322-functions #'erc-server-322-message t)
 
 (define-erc-response-handler (324)
   "Channel or nick modes." nil
   (let ((channel (cadr (erc-response.command-args parsed)))
-        (modes (mapconcat 'identity (cddr (erc-response.command-args parsed))
+        (modes (mapconcat #'identity (cddr (erc-response.command-args parsed))
                           " ")))
     (erc-set-modes channel modes)
     (erc-display-message
@@ -1803,8 +1801,7 @@ See `erc-display-server-message'." nil
 
 (define-erc-response-handler (331)
   "No topic set for channel." nil
-  (let ((channel (cadr (erc-response.command-args parsed)))
-        (topic (erc-response.contents parsed)))
+  (let ((channel (cadr (erc-response.command-args parsed))))
     (erc-display-message parsed 'notice (erc-get-buffer channel proc)
                          's331 ?c channel)))
 
@@ -1838,12 +1835,10 @@ See `erc-display-server-message'." nil
 
 (define-erc-response-handler (352)
   "WHO notice." nil
-  (pcase-let ((`(,channel ,user ,host ,server ,nick ,away-flag)
+  (pcase-let ((`(,channel ,user ,host ,_server ,nick ,away-flag)
                (cdr (erc-response.command-args parsed))))
-    (let ((full-name (erc-response.contents parsed))
-          hopcount)
+    (let ((full-name (erc-response.contents parsed)))
       (when (string-match "\\(^[0-9]+ \\)\\(.*\\)$" full-name)
-        (setq hopcount (match-string 1 full-name))
         (setq full-name (match-string 2 full-name)))
       (erc-update-channel-member channel nick nick nil nil nil nil nil nil host user full-name)
       (erc-display-message parsed 'notice 'active 's352
index 7d50919633071d220a909fbe297143cdfd236091..f63ac17ab472d316ea56168865d4a3918ecdf5ed 100644 (file)
@@ -390,9 +390,9 @@ REGEXP is the regular expression which matched for this button."
   ;; merged correctly.  If we use overlays, then redisplay will be
   ;; very slow with lots of buttons.  This is why we manually merge
   ;; face text properties.
-  (let ((old (erc-list (get-text-property from 'face)))
+  (let ((old (erc-list (get-text-property from 'font-lock-face)))
         (pos from)
-        (end (next-single-property-change from 'face nil to))
+        (end (next-single-property-change from 'font-lock-face nil to))
         new)
     ;; old is the face at pos, in list form.  It is nil if there is no
     ;; face at pos.  If nil, the new face is FACE.  If not nil, the
@@ -400,10 +400,10 @@ REGEXP is the regular expression which matched for this button."
     ;; where this face changes.
     (while (< pos to)
       (setq new (if old (cons face old) face))
-      (put-text-property pos end 'face new)
+      (put-text-property pos end 'font-lock-face new)
       (setq pos end
-            old (erc-list (get-text-property pos 'face))
-            end (next-single-property-change pos 'face nil to)))))
+            old (erc-list (get-text-property pos 'font-lock-face))
+            end (next-single-property-change pos 'font-lock-face nil to)))))
 
 ;; widget-button-click calls with two args, we ignore the first.
 ;; Since Emacs runs this directly, rather than with
index 4b956cc01ac5ecddd575eb375edd33b03a582be9..1a93e2121005ad751dd8d1895a4a52481d5a2da5 100644 (file)
@@ -191,7 +191,8 @@ PARSED is an `erc-parsed' response struct."
                  (re-search-forward (regexp-quote nickname) nil t))
         (goto-char (match-beginning 0))
         (insert (erc-propertize erc-capab-identify-prefix
-                                'face 'erc-capab-identify-unidentified))))))
+                                'font-lock-face
+                                'erc-capab-identify-unidentified))))))
 
 (defun erc-capab-identify-get-unidentified-nickname (parsed)
   "Return the nickname of the user if unidentified.
index 5e03d30bf94d7a7f01e549877e2086f7c94439c9..e5e63092df3f06726f162f36bd0fc09a22695866 100644 (file)
@@ -54,10 +54,10 @@ See `erc-encoding-coding-alist'."
   (set (make-local-variable 'write-file-functions) new-val))
 
 (defvar erc-emacs-build-time
-  (if (stringp emacs-build-time)
+  (if (or (stringp emacs-build-time) (not emacs-build-time))
       emacs-build-time
     (format-time-string "%Y-%m-%d" emacs-build-time))
-  "Time at which Emacs was dumped out.")
+  "Time at which Emacs was dumped out, or nil if not available.")
 
 ;; Emacs 21 and XEmacs do not have user-emacs-directory, but XEmacs
 ;; has user-init-directory.
@@ -164,4 +164,3 @@ If START or END is negative, it counts from the end."
 ;; indent-tabs-mode: t
 ;; tab-width: 8
 ;; End:
-
index 1bf380d47d1e183f6f32d7008d10d4585623b406..9152527d4be2e757a8e8a2e50f0aa71ee68a0039 100644 (file)
@@ -1205,7 +1205,7 @@ other client."
         (setq posn (match-end 0))
         (erc-display-message
          nil nil proc
-         'dcc-chat-privmsg ?n (erc-propertize erc-dcc-from 'face
+         'dcc-chat-privmsg ?n (erc-propertize erc-dcc-from 'font-lock-face
                                               'erc-nick-default-face) ?m line))
       (setq erc-dcc-unprocessed-output (substring str posn)))))
 
index 2a1d18720aa3149dfea8b7d2bec2da002f465b44..afe8c555ce3a8e7ff46e5220fa502cdd832f48d7 100644 (file)
@@ -475,7 +475,7 @@ to a region in the current buffer."
   (font-lock-prepend-text-property
    from
    to
-   'face
+   'font-lock-face
    (append (if boldp
                '(erc-bold-face)
              nil)
index 1313ecc607280222c377c6e8481df3edb5f51c73..4104a4339950125d637b79a4324e0d08e5b60d75 100644 (file)
@@ -486,7 +486,7 @@ Use this defun with `erc-insert-modify-hook'."
                    nick-end)
               (erc-put-text-property
                nick-beg nick-end
-               'face match-face (current-buffer)))
+               'font-lock-face match-face (current-buffer)))
              ;; Highlight the nick of the message, or the current
              ;; nick if there's no nick in the message (e.g. /NAMES
              ;; output)
@@ -495,17 +495,17 @@ Use this defun with `erc-insert-modify-hook'."
               (if nick-end
                   (erc-put-text-property
                    nick-beg nick-end
-                   'face match-face (current-buffer))
+                   'font-lock-face match-face (current-buffer))
                 (goto-char (+ 2 (or nick-end
                                     (point-min))))
                 (while (re-search-forward match-regex nil t)
                   (erc-put-text-property (match-beginning 0) (match-end 0)
-                                         'face match-face))))
+                                         'font-lock-face match-face))))
              ;; Highlight the whole message
              ((eq match-htype 'all)
               (erc-put-text-property
                (point-min) (point-max)
-               'face match-face (current-buffer)))
+               'font-lock-face match-face (current-buffer)))
              ;; Highlight all occurrences of the word to be
              ;; highlighted.
              ((and (string= match-type "keyword")
@@ -521,7 +521,7 @@ Use this defun with `erc-insert-modify-hook'."
                         (while (re-search-forward regex nil t)
                           (erc-put-text-property
                            (match-beginning 0) (match-end 0)
-                           'face face))))
+                           'font-lock-face face))))
                     match-regex))
              ;; Highlight all occurrences of our nick.
              ((and (string= match-type "current-nick")
@@ -530,7 +530,7 @@ Use this defun with `erc-insert-modify-hook'."
                                   (point-min))))
               (while (re-search-forward match-regex nil t)
                 (erc-put-text-property (match-beginning 0) (match-end 0)
-                                       'face match-face)))
+                                       'font-lock-face match-face)))
              ;; Else twiddle your thumbs.
              (t nil))
             (run-hook-with-args
index a4c91ca9fb54f251e15f201bab86799569de3a70..ee4e1d2fb6dc55650ba7a39410df5945c431a044 100644 (file)
@@ -347,7 +347,8 @@ changed, it will then print it off to the right."
 Return the empty string if FORMAT is nil."
   (if format
       (let ((ts (format-time-string format time)))
-       (erc-put-text-property 0 (length ts) 'face 'erc-timestamp-face ts)
+       (erc-put-text-property 0 (length ts)
+                              'font-lock-face 'erc-timestamp-face ts)
        (erc-put-text-property 0 (length ts) 'invisible 'timestamp ts)
        (erc-put-text-property 0 (length ts)
                               'isearch-open-invisible 'timestamp ts)
index 4d8feb52759e13b43d007ac7b700141a5d49c174..a6d72d07d1df46c985e9a46ecdab0cad6dfd52a7 100644 (file)
@@ -480,99 +480,6 @@ START is the minimum length of the name used."
        (setq result other)))
     result))
 
-;;; Test:
-
-(cl-assert
- (and
-  ;; verify examples from the doc strings
-  (equal (let ((erc-track-shorten-aggressively nil))
-          (erc-unique-channel-names
-           '("#emacs" "#vi" "#electronica" "#folk")
-           '("#emacs" "#vi")))
-        '("#em" "#vi"))         ; emacs is different from electronica
-  (equal (let ((erc-track-shorten-aggressively t))
-          (erc-unique-channel-names
-           '("#emacs" "#vi" "#electronica" "#folk")
-           '("#emacs" "#vi")))
-        '("#em" "#v"))                ; vi is shortened by one letter
-  (equal (let ((erc-track-shorten-aggressively 'max))
-          (erc-unique-channel-names
-           '("#emacs" "#vi" "#electronica" "#folk")
-           '("#emacs" "#vi")))
-        '("#e" "#v"))  ; emacs need not be different from electronica
-  (equal (let ((erc-track-shorten-aggressively nil))
-          (erc-unique-channel-names
-           '("#linux-de" "#linux-fr")
-           '("#linux-de" "#linux-fr")))
-        '("#linux-de" "#linux-fr")) ; shortening by one letter is too aggressive
-  (equal (let ((erc-track-shorten-aggressively t))
-          (erc-unique-channel-names
-           '("#linux-de" "#linux-fr")
-           '("#linux-de" "#linux-fr")))
-        '("#linux-d" "#linux-f")); now we want to be aggressive
-  ;; specific problems
-  (equal (let ((erc-track-shorten-aggressively nil))
-          (erc-unique-channel-names
-           '("#dunnet" "#lisp" "#sawfish" "#fsf" "#guile"
-             "#testgnome" "#gnu" "#fsbot" "#hurd" "#hurd-bunny"
-             "#emacs")
-           '("#hurd-bunny" "#hurd" "#sawfish" "#lisp")))
-        '("#hurd-" "#hurd" "#s" "#l"))
-  (equal (let ((erc-track-shorten-aggressively nil))
-          (erc-unique-substrings
-           '("#emacs" "#vi" "#electronica" "#folk")))
-        '("#em" "#vi" "#el" "#f"))
-  (equal (let ((erc-track-shorten-aggressively t))
-          (erc-unique-substrings
-           '("#emacs" "#vi" "#electronica" "#folk")))
-        '("#em" "#v" "#el" "#f"))
-  (equal (let ((erc-track-shorten-aggressively nil))
-          (erc-unique-channel-names
-           '("#emacs" "#burse" "+linux.de" "#starwars"
-             "#bitlbee" "+burse" "#ratpoison")
-           '("+linux.de" "#starwars" "#burse")))
-        '("+l" "#s" "#bu"))
-  (equal (let ((erc-track-shorten-aggressively nil))
-          (erc-unique-channel-names
-           '("fsbot" "#emacs" "deego")
-           '("fsbot")))
-        '("fs"))
-  (equal (let ((erc-track-shorten-aggressively nil))
-          (erc-unique-channel-names
-           '("fsbot" "#emacs" "deego")
-           '("fsbot")
-           (lambda (s)
-             (> (length s) 4))
-           1))
-        '("f"))
-  (equal (let ((erc-track-shorten-aggressively nil))
-          (erc-unique-channel-names
-           '("fsbot" "#emacs" "deego")
-           '("fsbot")
-           (lambda (s)
-             (> (length s) 4))
-           2))
-        '("fs"))
-  (let ((erc-track-shorten-aggressively nil))
-    (equal (erc-unique-channel-names '("deego" "#hurd" "#hurd-bunny" "#emacs")
-                                    '("#hurd" "#hurd-bunny"))
-          '("#hurd" "#hurd-")))
-  ;; general examples
-  (let ((erc-track-shorten-aggressively t))
-    (and (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
-        (not (erc-unique-substring-1 "a" '("xyz" "xab")))
-        (equal (erc-unique-substrings '("abc" "xyz" "xab"))
-               '("ab" "xy" "xa"))
-        (equal (erc-unique-substrings '("abc" "abcdefg"))
-               '("abc" "abcd"))))
-  (let ((erc-track-shorten-aggressively nil))
-    (and (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
-        (not (erc-unique-substring-1 "a" '("xyz" "xab")))
-        (equal (erc-unique-substrings '("abc" "xyz" "xab"))
-               '("abc" "xyz" "xab"))
-        (equal (erc-unique-substrings '("abc" "abcdefg"))
-               '("abc" "abcd"))))))
-
 ;;; Minor mode
 
 ;; Play nice with other IRC clients (and Emacs development rules) by
@@ -981,13 +888,6 @@ is in `erc-mode'."
           (push cur faces)))
     faces))
 
-(cl-assert
- (let ((str "is bold"))
-   (put-text-property 3 (length str)
-                     'face '(bold erc-current-nick-face)
-                     str)
-   (erc-faces-in str)))
-
 ;;; Buffer switching
 
 (defvar erc-track-last-non-erc-buffer nil
index 1a126a80343dfd75b9c8cda2c601248a6b77d1ab..b20a6c9e9664313c80cd97e059e79553c6162b8f 100644 (file)
@@ -1474,6 +1474,10 @@ Defaults to the server buffer."
 (defconst erc-default-port 6667
   "IRC port to use if it cannot be detected otherwise.")
 
+(defconst erc-default-port-tls 6697
+  "IRC port to use for encrypted connections if it cannot be
+  detected otherwise.")
+
 (defcustom erc-join-buffer 'buffer
   "Determines how to display a newly created IRC buffer.
 
@@ -2200,7 +2204,8 @@ be invoked for the values of the other parameters."
 (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))
+  (interactive (let ((erc-default-port erc-default-port-tls))
+                (erc-select-read-args)))
   (let ((erc-server-connect-function 'erc-open-tls-stream))
     (apply #'erc r)))
 
@@ -2271,7 +2276,7 @@ and appears in face `erc-input-face' in the buffer."
                                        (aref string
                                              (1- (length string))))
                                    "\n"))
-                       'face 'erc-input-face)))))
+                       'font-lock-face 'erc-input-face)))))
         (let ((orig-win (selected-window))
               (debug-buffer-window (get-buffer-window (current-buffer) t)))
           (when debug-buffer-window
@@ -2461,9 +2466,9 @@ See also `erc-make-notice'."
         (t
          (erc-put-text-property
           0 (length string)
-          'face (or (intern-soft
-                     (concat "erc-" (symbol-name type) "-face"))
-                    "erc-default-face")
+          'font-lock-face (or (intern-soft
+                              (concat "erc-" (symbol-name type) "-face"))
+                             "erc-default-face")
           string)
          string)))
 
@@ -3576,7 +3581,7 @@ the message given by REASON."
 
 (defun erc-cmd-SV ()
   "Say the current ERC and Emacs version into channel."
-  (erc-send-message (format "I'm using ERC with %s %s (%s%s) of %s."
+  (erc-send-message (format "I'm using ERC with %s %s (%s%s)%s."
                             (if (featurep 'xemacs) "XEmacs" "GNU Emacs")
                             emacs-version
                             system-configuration
@@ -3597,7 +3602,9 @@ the message given by REASON."
                                                       x-toolkit-scroll-bars)))
                                "")
                              (if (featurep 'multi-tty) ", multi-tty" ""))
-                            erc-emacs-build-time))
+                            (if erc-emacs-build-time
+                                (concat " of " erc-emacs-build-time)
+                              "")))
   t)
 
 (defun erc-cmd-SM ()
@@ -3890,7 +3897,7 @@ If FACE is non-nil, it will be used to propertize the prompt.  If it is nil,
                                      'front-sticky t
                                      'read-only t))
         (erc-put-text-property 0 (1- (length prompt))
-                               'face (or face 'erc-prompt-face)
+                               'font-lock-face (or face 'erc-prompt-face)
                                prompt)
         (insert prompt))
       ;; Set the input marker
@@ -4253,11 +4260,11 @@ and as second argument the event parsed as a vector."
          (nick-face (if privp 'erc-nick-msg-face 'erc-nick-default-face))
          (msg-face (if privp 'erc-direct-msg-face 'erc-default-face)))
     ;; add text properties to text before the nick, the nick and after the nick
-    (erc-put-text-property 0 (length mark-s) 'face msg-face str)
+    (erc-put-text-property 0 (length mark-s) 'font-lock-face msg-face str)
     (erc-put-text-property (length mark-s) (+ (length mark-s) (length nick))
-                           'face nick-face str)
+                           'font-lock-face nick-face str)
     (erc-put-text-property (+ (length mark-s) (length nick)) (length str)
-                           'face msg-face str)
+                           'font-lock-face msg-face str)
     str))
 
 (defcustom erc-format-nick-function 'erc-format-nick
@@ -4294,7 +4301,7 @@ also `erc-format-nick-function'."
     (let ((nick (erc-server-user-nickname user)))
       (concat (erc-propertize
                (erc-get-user-mode-prefix nick)
-               'face 'erc-nick-prefix-face)
+               'font-lock-face 'erc-nick-prefix-face)
              nick))))
 
 (defun erc-format-my-nick ()
@@ -4305,12 +4312,12 @@ also `erc-format-nick-function'."
              (nick (erc-current-nick))
              (mode (erc-get-user-mode-prefix nick)))
         (concat
-         (erc-propertize open 'face 'erc-default-face)
-         (erc-propertize mode 'face 'erc-my-nick-prefix-face)
-         (erc-propertize nick 'face 'erc-my-nick-face)
-         (erc-propertize close 'face 'erc-default-face)))
+         (erc-propertize open 'font-lock-face 'erc-default-face)
+         (erc-propertize mode 'font-lock-face 'erc-my-nick-prefix-face)
+         (erc-propertize nick 'font-lock-face 'erc-my-nick-face)
+         (erc-propertize close 'font-lock-face 'erc-default-face)))
     (let ((prefix "> "))
-      (erc-propertize prefix 'face 'erc-default-face))))
+      (erc-propertize prefix 'font-lock-face 'erc-default-face))))
 
 (defun erc-echo-notice-in-default-buffer (s parsed buffer _sender)
   "Echos a private notice in the default buffer, namely the
@@ -5231,10 +5238,10 @@ See also variable `erc-notice-highlight-type'."
   (cond
    ((eq erc-notice-highlight-type 'prefix)
     (erc-put-text-property 0 (length erc-notice-prefix)
-                           'face 'erc-notice-face s)
+                           'font-lock-face 'erc-notice-face s)
     s)
    ((eq erc-notice-highlight-type 'all)
-    (erc-put-text-property 0 (length s) 'face 'erc-notice-face s)
+    (erc-put-text-property 0 (length s) 'font-lock-face 'erc-notice-face s)
     s)
    (t s)))
 
@@ -5246,7 +5253,7 @@ See also variable `erc-notice-highlight-type'."
 
 (defun erc-highlight-error (s)
   "Highlight error message S and return it."
-  (erc-put-text-property 0 (length s) 'face 'erc-error-face s)
+  (erc-put-text-property 0 (length s) 'font-lock-face 'erc-error-face s)
   s)
 
 (defun erc-put-text-property (start end property value &optional object)
@@ -5436,7 +5443,7 @@ This returns non-nil only if we actually send anything."
       (let ((beg (point)))
         (insert line)
         (erc-put-text-property beg (point)
-                               'face 'erc-command-indicator-face)
+                               'font-lock-face 'erc-command-indicator-face)
         (insert "\n"))
       (when (processp erc-server-process)
         (set-marker (process-mark erc-server-process) (point)))
@@ -5456,7 +5463,7 @@ current position."
       (let ((beg (point)))
         (insert line)
         (erc-put-text-property beg (point)
-                               'face 'erc-input-face))
+                               'font-lock-face 'erc-input-face))
       (insert "\n")
       (when (processp erc-server-process)
         (set-marker (process-mark erc-server-process) (point)))
@@ -5880,7 +5887,7 @@ user input."
         (setq args (substring args 1)))
     ;; prepare the prompt string for echo
     (erc-put-text-property 0 (length sp)
-                           'face 'erc-command-indicator-face sp)
+                           'font-lock-face 'erc-command-indicator-face sp)
     (while lines
       (setq s (car lines))
       (erc-log (concat "erc-load-script: CMD: " s))
@@ -5890,7 +5897,7 @@ user input."
                    erc-script-echo)
               (progn
                 (erc-put-text-property 0 (length line)
-                                       'face 'erc-input-face line)
+                                       'font-lock-face 'erc-input-face line)
                 (erc-display-line (concat sp line) cb)))))
       (setq lines (cdr lines)))))
 
index 388bc7473679f1664135dfed14b67ac369c6930a..074b94cc75d7668a59dda815b6edf3e9f10a0de4 100644 (file)
@@ -296,7 +296,7 @@ and the hook `eshell-exit-hook'."
   (run-hooks 'eshell-exit-hook))
 
 ;;;###autoload
-(define-derived-mode eshell-mode fundamental-mode "EShell"
+(define-derived-mode eshell-mode fundamental-mode "Eshell"
   "Emacs shell interactive mode."
   (setq-local eshell-mode t)
 
index 8b21730ef3310c69c3728d8c95738893dc1990b7..54281a72c7a348e6f59d6129059f1f87c432f677 100644 (file)
@@ -308,9 +308,9 @@ With prefix ARG, insert output into the current buffer at point."
                          (eshell-parse-command command))))
             intr
             (bufname (if (and proc (listp proc))
-                         "*EShell Async Command Output*"
+                         "*Eshell Async Command Output*"
                        (setq intr t)
-                       "*EShell Command Output*")))
+                       "*Eshell Command Output*")))
        (if (buffer-live-p (get-buffer bufname))
            (kill-buffer bufname))
        (rename-buffer bufname)
index 5f3020b3189b37452cce66d853eb0281c279d6ef..3e26eadc6bbd59114957ce32eaceb1319149313a 100644 (file)
@@ -979,31 +979,41 @@ of the default face.  Value is FACE."
   "Read one or more face names, prompting with PROMPT.
 PROMPT should not end in a space or a colon.
 
-Return DEFAULT if the user enters the empty string.
-If DEFAULT is non-nil, it should be a single face or a list of face names
-\(symbols or strings).  In the latter case, return the `car' of DEFAULT
-\(if MULTIPLE is nil, see below), or DEFAULT (if MULTIPLE is non-nil).
-
-If MULTIPLE is non-nil, this function uses `completing-read-multiple'
-to read multiple faces with \"[ \\t]*,[ \\t]*\" as the separator regexp
-and it returns a list of face names.  Otherwise, it reads and returns
-a single face name."
-  (if (and default (not (stringp default)))
-      (setq default
-            (cond ((symbolp default)
-                   (symbol-name default))
-                  (multiple
-                   (mapconcat (lambda (f) (if (symbolp f) (symbol-name f) f))
-                              default ", "))
-                  ;; If we only want one, and the default is more than one,
-                  ;; discard the unwanted ones.
-                  (t (symbol-name (car default))))))
+If DEFAULT is non-nil, it should be a face (a symbol) or a face
+name (a string).  It can also be a list of faces or face names.
+
+If MULTIPLE is non-nil, the return value from this function is a
+list of faces.  Otherwise a single face is returned.
+
+If the user enter the empty string at the prompt, DEFAULT is
+returned after a possible transformation according to MULTIPLE.
+That is, if DEFAULT is a list and MULTIPLE is nil, the first
+element of DEFAULT is returned.  If DEFAULT isn't a list, but
+MULTIPLE is non-nil, a one-element list containing DEFAULT is
+returned.  Otherwise, DEFAULT is returned verbatim."
+  (unless (listp default)
+    (setq default (list default)))
+  (when default
+    (setq default
+          (if multiple
+              (mapconcat (lambda (f) (if (symbolp f) (symbol-name f) f))
+                         default ", ")
+            ;; If we only want one, and the default is more than one,
+            ;; discard the unwanted ones.
+            (setq default (car default))
+            (if (symbolp default)
+                (symbol-name default)
+              default))))
   (when (and default (not multiple))
     (require 'crm)
     ;; For compatibility with `completing-read-multiple' use `crm-separator'
     ;; to define DEFAULT if MULTIPLE is nil.
     (setq default (car (split-string default crm-separator t))))
 
+  ;; Older versions of `read-face-name' did not append ": " to the
+  ;; prompt, so there are third party libraries that have that in the
+  ;; prompt.  If so, remove it.
+  (setq prompt (replace-regexp-in-string ": ?\\'" "" prompt))
   (let ((prompt (if default
                     (format-message "%s (default `%s'): " prompt default)
                   (format "%s: " prompt)))
@@ -1792,6 +1802,32 @@ If FRAME is nil, that stands for the selected frame."
     (mapcar 'car (tty-color-alist frame))))
 (defalias 'x-defined-colors 'defined-colors)
 
+(defun defined-colors-with-face-attributes (&optional frame)
+  "Return a list of colors supported for a particular frame.
+See `defined-colors' for arguments and return value. In contrast
+to `define-colors' the elements of the returned list are color
+strings with text properties, that make the color names render
+with the color they represent as background color."
+  (mapcar
+   (lambda (color-name)
+     (let ((foreground (readable-foreground-color color-name))
+          (color      (copy-sequence color-name)))
+       (propertize color 'face (list :foreground foreground
+                                    :background color))))
+   (defined-colors frame)))
+
+(defun readable-foreground-color (color)
+  "Return a readable foreground color for background COLOR."
+  (let* ((rgb   (color-values color))
+        (max   (apply #'max rgb))
+        (black (car (color-values "black")))
+        (white (car (color-values "white"))))
+    ;; Select black or white depending on which one is less similar to
+    ;; the brightest component.
+    (if (> (abs (- max black)) (abs (- max white)))
+       "black"
+      "white")))
+
 (declare-function xw-color-defined-p "xfns.c" (color &optional frame))
 
 (defun color-defined-p (color &optional frame)
@@ -1896,22 +1932,24 @@ resulting color name in the echo area."
         (colors (or facemenu-color-alist
                     (append '("foreground at point" "background at point")
                             (if allow-empty-name '(""))
-                            (defined-colors))))
+                             (if (display-color-p)
+                                 (defined-colors-with-face-attributes)
+                               (defined-colors)))))
         (color (completing-read
                 (or prompt "Color (name or #RGB triplet): ")
                 ;; Completing function for reading colors, accepting
                 ;; both color names and RGB triplets.
                 (lambda (string pred flag)
                   (cond
-                   ((null flag) ; Try completion.
+                   ((null flag)        ; Try completion.
                     (or (try-completion string colors pred)
                         (if (color-defined-p string)
                             string)))
-                   ((eq flag t) ; List all completions.
+                   ((eq flag t)        ; List all completions.
                     (or (all-completions string colors pred)
                         (if (color-defined-p string)
                             (list string))))
-                   ((eq flag 'lambda) ; Test completion.
+                   ((eq flag 'lambda)  ; Test completion.
                     (or (member string colors)
                         (color-defined-p string)))))
                 nil t)))
@@ -2411,6 +2449,14 @@ If you set `term-file-prefix' to nil, this function does nothing."
   :group 'basic-faces
   :version "22.1")
 
+(defface nobreak-hyphen
+  '((((background dark)) :foreground "cyan")
+    (((type pc)) :foreground "magenta")
+    (t :foreground "brown"))
+  "Face for displaying nobreak hyphens."
+  :group 'basic-faces
+  :version "25.2")
+
 (defgroup mode-line-faces nil
   "Faces used in the mode line."
   :group 'mode-line
@@ -2674,6 +2720,13 @@ It is used for characters of no fonts too."
   :version "24.1"
   :group 'basic-faces)
 
+(defface read-multiple-choice-face
+  '((t (:inherit underline
+        :weight bold)))
+  "Face for the symbol name in Apropos output."
+  :group 'basic-faces
+  :version "25.2")
+
 ;; Faces for TTY menus.
 (defface tty-menu-enabled-face
   '((t
index 8343b475c1b273a5acaefbed65db20f2d814ab44..7013e6e8ba4e106e7e0058207a02710d48314087 100644 (file)
@@ -570,7 +570,7 @@ Looks at `ffap-ftp-default-user', returns \"\" for \"localhost\"."
 (defvaralias 'ffap-newsgroup-heads  'thing-at-point-newsgroup-heads)
 (defalias 'ffap-newsgroup-p 'thing-at-point-newsgroup-p)
 
-(defsubst ffap-url-p (string)
+(defun ffap-url-p (string)
   "If STRING looks like an URL, return it (maybe improved), else nil."
   (when (and (stringp string) ffap-url-regexp)
     (let* ((case-fold-search t)
index f0102fd83afc0aabe829368b44dbf6824dab4db1..05ad7f57c5709de213b63dc78699b76582e7cd03 100644 (file)
@@ -429,18 +429,24 @@ from the MODE alist ignoring the input argument VALUE."
   (catch 'exit
     (unless enable-local-variables
       (throw 'exit (message "Directory-local variables are disabled")))
-    (let ((variables-file (or (and (buffer-file-name)
-                                  (not (file-remote-p (buffer-file-name)))
-                                  (dir-locals-find-file (buffer-file-name)))
-                             dir-locals-file))
-         variables)
-      (if (consp variables-file)       ; result from cache
-         ;; If cache element has an mtime, assume it came from a file.
-         ;; Otherwise, assume it was set directly.
-         (setq variables-file (if (nth 2 variables-file)
-                                  (expand-file-name dir-locals-file
-                                                    (car variables-file))
-                                (cadr variables-file))))
+    (let* ((dir-or-cache (and (buffer-file-name)
+                              (not (file-remote-p (buffer-file-name)))
+                              (dir-locals-find-file (buffer-file-name))))
+           (variables-file
+            ;; If there are several .dir-locals, the user probably
+            ;; wants to edit the last one (the highest priority).
+            (cond ((stringp dir-or-cache)
+                   (car (last (dir-locals--all-files dir-or-cache))))
+                  ((consp dir-or-cache)        ; result from cache
+                   ;; If cache element has an mtime, assume it came
+                   ;; from a file.  Otherwise, assume it was set
+                   ;; directly.
+                   (if (nth 2 dir-or-cache)
+                       (car (last (dir-locals--all-files (car dir-or-cache))))
+                     (cadr dir-or-cache)))
+                  ;; Try to make a proper file-name.
+                  (t (expand-file-name dir-locals-file))))
+           variables)
       ;; I can't be bothered to handle this case right now.
       ;; Dir locals were set directly from a class.  You need to
       ;; directly modify the class in dir-locals-class-alist.
index 5cdd3849f19d75b7341c7fe22534571a9d90a93b..132ebced1c077aa18c35ea938f7a6bca86f2212d 100644 (file)
@@ -2143,6 +2143,7 @@ Do you want to revisit the file normally now? ")
 \f
 (defun insert-file-contents-literally (filename &optional visit beg end replace)
   "Like `insert-file-contents', but only reads in the file literally.
+See `insert-file-contents' for an explanation of the parameters.
 A buffer may be modified in several ways after reading into the buffer,
 due to Emacs features such as format decoding, character code
 conversion, `find-file-hook', automatic uncompression, etc.
@@ -3667,7 +3668,7 @@ Return the new variables list."
       (error
        ;; The file's content might be invalid (e.g. have a merge conflict), but
        ;; that shouldn't prevent the user from opening the file.
-       (message ".dir-locals error: %s" (error-message-string err))
+       (message "%s error: %s" dir-locals-file (error-message-string err))
        nil))))
 
 (defun dir-locals-set-directory-class (directory class &optional mtime)
@@ -3719,8 +3720,41 @@ VARIABLES list of the class.  The list is processed in order.
 
 (defconst dir-locals-file ".dir-locals.el"
   "File that contains directory-local variables.
-It has to be constant to enforce uniform values
-across different environments and users.")
+It has to be constant to enforce uniform values across different
+environments and users.
+See also `dir-locals-file-2', whose values override this one's.
+See Info node `(elisp)Directory Local Variables' for details.")
+
+(defconst dir-locals-file-2 ".dir-locals-2.el"
+  "File that contains directory-local variables.
+This essentially a second file that can be used like
+`dir-locals-file', so that users can have specify their personal
+dir-local variables even if the current directory already has a
+`dir-locals-file' that is shared with other users (such as in a
+git repository).
+See Info node `(elisp)Directory Local Variables' for details.")
+
+(defun dir-locals--all-files (directory)
+  "Return a list of all readable dir-locals files in DIRECTORY.
+The returned list is sorted by increasing priority.  That is,
+values specified in the last file should take precedence over
+those in the first."
+  (when (file-readable-p directory)
+    (let* ((file-1 (expand-file-name (if (eq system-type 'ms-dos)
+                                        (dosified-file-name dir-locals-file)
+                                      dir-locals-file)
+                                    directory))
+           (file-2 (when (string-match "\\.el\\'" file-1)
+                     (replace-match "-2.el" t nil file-1)))
+          (out nil))
+      ;; The order here is important.
+      (dolist (f (list file-2 file-1))
+        (when (and f
+                   (file-readable-p f)
+                   (file-regular-p f)
+                   (not (file-directory-p f)))
+          (push f out)))
+      out)))
 
 (defun dir-locals-find-file (file)
   "Find the directory-local variables for FILE.
@@ -3735,78 +3769,93 @@ A cache entry based on a `dir-locals-file' is valid if the modification
 time stored in the cache matches the current file modification time.
 If not, the cache entry is cleared so that the file will be re-read.
 
-This function returns either nil (no directory local variables found),
-or the matching entry from `dir-locals-directory-cache' (a list),
-or the full path to the `dir-locals-file' (a string) in the case
-of no valid cache entry."
+This function returns either:
+  - nil (no directory local variables found),
+  - the matching entry from `dir-locals-directory-cache' (a list),
+  - or the full path to the directory (a string) containing at
+    least one `dir-locals-file' in the case of no valid cache
+    entry."
   (setq file (expand-file-name file))
-  (let* ((dir-locals-file-name
-         (if (eq system-type 'ms-dos)
-             (dosified-file-name dir-locals-file)
-           dir-locals-file))
-        (locals-file (locate-dominating-file file dir-locals-file-name))
-        (dir-elt nil))
+  (let* ((locals-dir (locate-dominating-file (file-name-directory file)
+                                             #'dir-locals--all-files))
+         dir-elt)
     ;; `locate-dominating-file' may have abbreviated the name.
-    (and locals-file
-        (setq locals-file (expand-file-name dir-locals-file-name locals-file)))
-        ;; Let dir-locals-read-from-file inform us via demoted-errors
-        ;; about unreadable files, etc.
-        ;; Maybe we'd want to keep searching though - that is
-        ;; a locate-dominating-file issue.
-;;;     (or (not (file-readable-p locals-file))
-;;;         (not (file-regular-p locals-file)))
-;;;     (setq locals-file nil))
+    (when locals-dir
+      (setq locals-dir (expand-file-name locals-dir)))
     ;; Find the best cached value in `dir-locals-directory-cache'.
     (dolist (elt dir-locals-directory-cache)
       (when (and (string-prefix-p (car elt) file
-                                 (memq system-type
-                                       '(windows-nt cygwin ms-dos)))
-                (> (length (car elt)) (length (car dir-elt))))
-       (setq dir-elt elt)))
+                                  (memq system-type
+                                        '(windows-nt cygwin ms-dos)))
+                 (> (length (car elt)) (length (car dir-elt))))
+        (setq dir-elt elt)))
     (if (and dir-elt
-            (or (null locals-file)
-                (<= (length (file-name-directory locals-file))
-                    (length (car dir-elt)))))
-       ;; Found a potential cache entry.  Check validity.
-       ;; A cache entry with no MTIME is assumed to always be valid
-       ;; (ie, set directly, not from a dir-locals file).
-       ;; Note, we don't bother to check that there is a matching class
-       ;; element in dir-locals-class-alist, since that's done by
-       ;; dir-locals-set-directory-class.
-       (if (or (null (nth 2 dir-elt))
-               (let ((cached-file (expand-file-name dir-locals-file-name
-                                                    (car dir-elt))))
-                 (and (file-readable-p cached-file)
-                      (equal (nth 2 dir-elt)
-                             (nth 5 (file-attributes cached-file))))))
-           ;; This cache entry is OK.
-           dir-elt
-         ;; This cache entry is invalid; clear it.
-         (setq dir-locals-directory-cache
-               (delq dir-elt dir-locals-directory-cache))
-         ;; Return the first existing dir-locals file.  Might be the same
-         ;; as dir-elt's, might not (eg latter might have been deleted).
-         locals-file)
+             (or (null locals-dir)
+                 (<= (length locals-dir)
+                     (length (car dir-elt)))))
+        ;; Found a potential cache entry.  Check validity.
+        ;; A cache entry with no MTIME is assumed to always be valid
+        ;; (ie, set directly, not from a dir-locals file).
+        ;; Note, we don't bother to check that there is a matching class
+        ;; element in dir-locals-class-alist, since that's done by
+        ;; dir-locals-set-directory-class.
+        (if (or (null (nth 2 dir-elt))
+                (let ((cached-files (dir-locals--all-files (car dir-elt))))
+                  ;; The entry MTIME should match the most recent
+                  ;; MTIME among matching files.
+                  (and cached-files
+                       (= (time-to-seconds (nth 2 dir-elt))
+                          (apply #'max (mapcar (lambda (f) (time-to-seconds (nth 5 (file-attributes f))))
+                                               cached-files))))))
+            ;; This cache entry is OK.
+            dir-elt
+          ;; This cache entry is invalid; clear it.
+          (setq dir-locals-directory-cache
+                (delq dir-elt dir-locals-directory-cache))
+          ;; Return the first existing dir-locals file.  Might be the same
+          ;; as dir-elt's, might not (eg latter might have been deleted).
+          locals-dir)
       ;; No cache entry.
-      locals-file)))
-
-(defun dir-locals-read-from-file (file)
-  "Load a variables FILE and register a new class and instance.
-FILE is the name of the file holding the variables to apply.
-The new class name is the same as the directory in which FILE
-is found.  Returns the new class name."
-  (with-temp-buffer
+      locals-dir)))
+
+(defun dir-locals-read-from-dir (dir)
+  "Load all variables files in DIR and register a new class and instance.
+DIR is the absolute name of a directory which must contain at
+least one dir-local file (which is a file holding variables to
+apply).
+Return the new class name, which is a symbol named DIR."
+  (require 'map)
+  (let* ((class-name (intern dir))
+         (files (dir-locals--all-files dir))
+         (read-circle nil)
+         (success nil)
+         (variables))
     (with-demoted-errors "Error reading dir-locals: %S"
-      (insert-file-contents file)
-      (unless (zerop (buffer-size))
-        (let* ((dir-name (file-name-directory file))
-               (class-name (intern dir-name))
-               (variables (let ((read-circle nil))
-                            (read (current-buffer)))))
-          (dir-locals-set-class-variables class-name variables)
-          (dir-locals-set-directory-class dir-name class-name
-                                          (nth 5 (file-attributes file)))
-          class-name)))))
+      (dolist (file files)
+        (with-temp-buffer
+          (insert-file-contents file)
+          (condition-case-unless-debug nil
+              (setq variables
+                    (map-merge-with 'list (lambda (a b) (map-merge 'list a b))
+                                    variables
+                                    (read (current-buffer))))
+            (end-of-file nil))))
+      (setq success t))
+    (dir-locals-set-class-variables class-name variables)
+    (dir-locals-set-directory-class
+     dir class-name
+     (seconds-to-time
+      (if success
+          (apply #'max (mapcar (lambda (file)
+                                 (time-to-seconds (nth 5 (file-attributes file))))
+                               files))
+        ;; If there was a problem, use the values we could get but
+        ;; don't let the cache prevent future reads.
+        0)))
+    class-name))
+
+(define-obsolete-function-alias 'dir-locals-read-from-file
+  'dir-locals-read-from-dir "25.1")
 
 (defcustom enable-remote-dir-locals nil
   "Non-nil means dir-local variables will be applied to remote files."
@@ -3829,17 +3878,17 @@ This does nothing if either `enable-local-variables' or
                 (not (file-remote-p (or (buffer-file-name)
                                         default-directory)))))
     ;; Find the variables file.
-    (let ((variables-file (dir-locals-find-file
-                           (or (buffer-file-name) default-directory)))
+    (let ((dir-or-cache (dir-locals-find-file
+                         (or (buffer-file-name) default-directory)))
          (class nil)
          (dir-name nil))
       (cond
-       ((stringp variables-file)
-       (setq dir-name (file-name-directory variables-file)
-             class (dir-locals-read-from-file variables-file)))
-       ((consp variables-file)
-       (setq dir-name (nth 0 variables-file))
-       (setq class (nth 1 variables-file))))
+       ((stringp dir-or-cache)
+       (setq dir-name dir-or-cache
+             class (dir-locals-read-from-dir dir-or-cache)))
+       ((consp dir-or-cache)
+       (setq dir-name (nth 0 dir-or-cache))
+       (setq class (nth 1 dir-or-cache))))
       (when class
        (let ((variables
               (dir-locals-collect-variables
@@ -5074,7 +5123,7 @@ change the additional actions you can take on files."
 \f
 (defun clear-visited-file-modtime ()
   "Clear out records of last mod time of visited file.
-Next attempt to save will certainly not complain of a discrepancy."
+Next attempt to save will not complain of a discrepancy."
   (set-visited-file-modtime 0))
 
 (defun not-modified (&optional arg)
@@ -6615,11 +6664,14 @@ message to that effect instead of signaling an error."
     ;; Simulate the message printed by `ls'.
     (insert (format "%s: No such file or directory\n" file))))
 
-(defvar kill-emacs-query-functions nil
+(defcustom 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 canceled.
 `save-buffers-kill-emacs' calls these functions, but `kill-emacs',
-the low level primitive, does not.  See also `kill-emacs-hook'.")
+the low level primitive, does not.  See also `kill-emacs-hook'."
+  :type 'hook
+  :version "25.2"
+  :group 'convenience)
 
 (defcustom confirm-kill-emacs nil
   "How to ask for confirmation when leaving Emacs.
@@ -6678,7 +6730,8 @@ if any returns nil.  If `confirm-kill-emacs' is non-nil, calls it."
 
 (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.
+If the current frame has no client, kill Emacs itself using
+`save-buffers-kill-emacs'.
 
 With prefix ARG, silently save all file-visiting buffers, then kill.
 
@@ -7035,6 +7088,78 @@ Otherwise, trash FILENAME using the freedesktop.org conventions,
                 (let ((delete-by-moving-to-trash nil))
                   (rename-file fn new-fn)))))))))
 
+(defsubst file-attribute-type (attributes)
+  "The type field in ATTRIBUTES returned by `file-attribute'.
+The value is either t for directory, string (name linked to) for
+symbolic link, or nil."
+  (nth 0 attributes))
+
+(defsubst file-attribute-link-number (attributes)
+  "Return the number of links in ATTRIBUTES returned by `file-attribute'."
+  (nth 1 attributes))
+
+(defsubst file-attribute-user-id (attributes)
+  "The UID field in ATTRIBUTES returned by `file-attribute'.
+This is either a string or a number.  If a string value cannot be
+looked up, a numeric value, either an integer or a float, is
+returned."
+  (nth 2 attributes))
+
+(defsubst file-attribute-group-id (attributes)
+  "The GID field in ATTRIBUTES returned by `file-attribute'.
+This is either a string or a number.  If a string value cannot be
+looked up, a numeric value, either an integer or a float, is
+returned."
+  (nth 3 attributes))
+
+(defsubst file-attribute-access-time (attributes)
+  "The last access time in ATTRIBUTES returned by `file-attribute'.
+This a list of integers (HIGH LOW USEC PSEC) in the same style
+as (current-time)."
+  (nth 4 attributes))
+
+(defsubst file-attribute-modification-time (attributes)
+  "The modification time in ATTRIBUTES returned by `file-attribute'.
+This is the time of the last change to the file's contents, and
+is a list of integers (HIGH LOW USEC PSEC) in the same style
+as (current-time)."
+  (nth 5 attributes))
+
+(defsubst file-attribute-status-change-time (attributes)
+  "The status modification time in ATTRIBUTES returned by `file-attribute'.
+This is the time of last change to the file's attributes: owner
+and group, access mode bits, etc, and is a list of integers (HIGH
+LOW USEC PSEC) in the same style as (current-time)."
+  (nth 6 attributes))
+
+(defsubst file-attribute-size (attributes)
+  "The size (in bytes) in ATTRIBUTES returned by `file-attribute'.
+This is a floating point number if the size is too large for an integer."
+  (nth 7 attributes))
+
+(defsubst file-attribute-modes (attributes)
+  "The file modes in ATTRIBUTES returned by `file-attribute'.
+This is a string of ten letters or dashes as in ls -l."
+  (nth 8 attributes))
+
+(defsubst file-attribute-inode-number (attributes)
+  "The inode number in ATTRIBUTES returned by `file-attribute'.
+If it is larger than what an Emacs integer can hold, this is of
+the form (HIGH . LOW): first the high bits, then the low 16 bits.
+If even HIGH is too large for an Emacs integer, this is instead
+of the form (HIGH MIDDLE . LOW): first the high bits, then the
+middle 24 bits, and finally the low 16 bits."
+  (nth 10 attributes))
+
+(defsubst file-attribute-device-number (attributes)
+  "The file system device number in ATTRIBUTES returned by `file-attribute'.
+If it is larger than what an Emacs integer can hold, this is of
+the form (HIGH . LOW): first the high bits, then the low 16 bits.
+If even HIGH is too large for an Emacs integer, this is instead
+of the form (HIGH MIDDLE . LOW): first the high bits, then the
+middle 24 bits, and finally the low 16 bits."
+  (nth 11 attributes))
+
 \f
 (define-key ctl-x-map "\C-f" 'find-file)
 (define-key ctl-x-map "\C-r" 'find-file-read-only)
index 7bfdbe7346646010062d47035382beda6f9ae5bf..b1b33ac23eb4b65ba99f90833a4c7d4aa4703e5d 100644 (file)
@@ -97,7 +97,7 @@ them for `find-ls-option'."
 
 (defcustom find-grep-options
   (if (or (eq system-type 'berkeley-unix)
-         (string-match "solaris2\\|irix" system-configuration))
+         (string-match "solaris2" 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.
index 8bd810f2c46374c1c531381269c587b6efaa2d76..3c3d860488f376c4b7e876d0cbb261e0117dcf99 100644 (file)
@@ -378,6 +378,15 @@ Variables of interest include:
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Support functions
 
+(defun ff-buffer-file-name (&optional buf)
+  "Like `buffer-file-name' but works with indirect buffers as well.
+If BUF is nil, uses the current buffer."
+  (unless buf
+    (setq buf (current-buffer)))
+  (or (buffer-file-name buf)
+      (when (buffer-base-buffer buf)
+       (buffer-file-name (buffer-base-buffer buf)))))
+
 (defun ff-find-the-other-file (&optional in-other-window)
   "Find the header or source file corresponding to the current file.
 Being on a `#include' line pulls in that file, but see the help on
@@ -420,9 +429,7 @@ If optional IN-OTHER-WINDOW is non-nil, find the file in another window."
       (setq alist (if (symbolp ff-other-file-alist)
                       (symbol-value ff-other-file-alist)
                     ff-other-file-alist)
-            pathname (if (buffer-file-name)
-                         (buffer-file-name)
-                       "/none.none"))
+            pathname (or (ff-buffer-file-name) "/none.none"))
 
       (setq fname (file-name-nondirectory pathname)
             no-match nil
@@ -448,7 +455,7 @@ If optional IN-OTHER-WINDOW is non-nil, find the file in another window."
         ;; invoke it with the name of the current file
         (if (and (atom action) (fboundp action))
             (progn
-              (setq suffixes (funcall action (buffer-file-name))
+              (setq suffixes (funcall action (ff-buffer-file-name))
                     match (cons (car match) (list suffixes))
                     stub nil
                     default-name (car suffixes)))
@@ -550,9 +557,7 @@ the `ff-ignore-include' variable."
       (setq alist (if (symbolp ff-other-file-alist)
                       (symbol-value ff-other-file-alist)
                     ff-other-file-alist)
-            pathname (if (buffer-file-name)
-                         (buffer-file-name)
-                       "/none.none"))
+            pathname (or (ff-buffer-file-name) "/none.none"))
 
       (setq fname (file-name-nondirectory pathname)
             match (car alist))
@@ -576,7 +581,7 @@ the `ff-ignore-include' variable."
         ;; invoke it with the name of the current file
         (if (and (atom action) (fboundp action))
             (progn
-              (setq suffixes (funcall action (buffer-file-name))
+              (setq suffixes (funcall action (ff-buffer-file-name))
                     match (cons (car match) (list suffixes))
                     stub nil))
 
@@ -655,14 +660,14 @@ name of the first file found."
           (message "Finding buffer %s..." filename))
 
       (if (bufferp (get-file-buffer filename))
-          (setq found (buffer-file-name (get-file-buffer filename))))
+          (setq found (ff-buffer-file-name (get-file-buffer filename))))
 
       (setq blist (buffer-list))
       (setq buf (buffer-name (car blist)))
       (while (and blist (not found))
 
         (if (string-match-p (concat filename "<[0-9]+>") buf)
-            (setq found (buffer-file-name (car blist))))
+            (setq found (ff-buffer-file-name (car blist))))
 
         (setq blist (cdr blist))
         (setq buf (buffer-name (car blist))))
index 475001f5707d7c6ac9009891fca358321d38d8cf..8591eb841c122ffef4dc0544d02334066b78221c 100644 (file)
@@ -118,7 +118,7 @@ Argument DIR is the directory containing FILE."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defun find-lisp-find-files (directory regexp)
-  "Find files in DIRECTORY which match REGEXP."
+  "Find files under DIRECTORY, recursively, that match REGEXP."
   (let ((file-predicate      'find-lisp-default-file-predicate)
        (directory-predicate 'find-lisp-default-directory-predicate)
        (find-lisp-regexp regexp))
@@ -297,6 +297,9 @@ It is a function which takes two arguments, the directory and its parent."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defun find-lisp-format (file-name file-attr switches now)
+  "Format one line of long ls output for file FILE-NAME.
+FILE-ATTR and FILE-SIZE give the file's attributes and size.
+SWITCHES and TIME-INDEX give the full switch list and time data."
   (let ((file-type (nth 0 file-attr)))
     (concat (if (memq ?i switches)     ; inode number
                (format "%6d " (nth 10 file-attr)))
@@ -325,7 +328,7 @@ It is a function which takes two arguments, the directory and its parent."
            "\n")))
 
 (defun find-lisp-time-index (switches)
-  ;; Return index into file-attributes according to ls SWITCHES.
+  "Return index into file-attributes according to ls SWITCHES."
   (cond
    ((memq ?c switches) 6)              ; last mode change
    ((memq ?u switches) 4)              ; last access
@@ -333,10 +336,11 @@ It is a function which takes two arguments, the directory and its parent."
    (t 5)))
 
 (defun find-lisp-format-time (file-attr switches now)
-  ;; Format time string for file with attributes FILE-ATTR according
-  ;; to SWITCHES (a list of ls option letters of which c and u are recognized).
-  ;; Use the same method as `ls' to decide whether to show time-of-day or year,
-  ;; depending on distance between file date and NOW.
+  "Format time string for file.
+This is done with attributes FILE-ATTR according to SWITCHES (a
+list of ls option letters of which c and u are recognized).  Use
+the same method as \"ls\" to decide whether to show time-of-day or
+year, depending on distance between file date and NOW."
   (let* ((time (nth (find-lisp-time-index switches) file-attr))
         (diff16 (- (car time) (car now)))
         (diff (+ (ash diff16 16) (- (car (cdr time)) (car (cdr now)))))
index a0971a17f5f527da733f50354e81cb1cf02daab2..b3da89705008085f6e66a12823424b5d29e6a83c 100644 (file)
@@ -86,46 +86,50 @@ When Font Lock mode is enabled, text is fontified as you type it:
 
  - Comments are displayed in `font-lock-comment-face';
  - Strings are displayed in `font-lock-string-face';
- - Certain other expressions are displayed in other faces according to the
-   value of the variable `font-lock-keywords'.
+ - Certain other expressions are displayed in other faces
+   according to the value of the variable `font-lock-keywords'.
 
 To customize the faces (colors, fonts, etc.) used by Font Lock for
 fontifying different parts of buffer text, use \\[customize-face].
 
-You can enable Font Lock mode in any major mode automatically by turning on in
-the major mode's hook.  For example, put in your ~/.emacs:
+You can enable Font Lock mode in any major mode automatically by
+turning on in the major mode's hook.  For example, put in your
+~/.emacs:
 
  (add-hook \\='c-mode-hook \\='turn-on-font-lock)
 
-Alternatively, you can use Global Font Lock mode to automagically turn on Font
-Lock mode in buffers whose major mode supports it and whose major mode is one
-of `font-lock-global-modes'.  For example, put in your ~/.emacs:
+Alternatively, you can use Global Font Lock mode to automagically
+turn on Font Lock mode in buffers whose major mode supports it
+and whose major mode is one of `font-lock-global-modes'.  For
+example, put in your ~/.emacs:
 
  (global-font-lock-mode t)
 
-Where major modes support different levels of fontification, you can use
-the variable `font-lock-maximum-decoration' to specify which level you
-generally prefer.  When you turn Font Lock mode on/off the buffer is
-fontified/defontified, though fontification occurs only if the buffer is
-less than `font-lock-maximum-size'.
+Where major modes support different levels of fontification, you
+can use the variable `font-lock-maximum-decoration' to specify
+which level you generally prefer.  When you turn Font Lock mode
+on/off the buffer is fontified/defontified, though fontification
+occurs only if the buffer is less than `font-lock-maximum-size'.
 
-To add your own highlighting for some major mode, and modify the highlighting
-selected automatically via the variable `font-lock-maximum-decoration', you can
-use `font-lock-add-keywords'.
+To add your own highlighting for some major mode, and modify the
+highlighting selected automatically via the variable
+`font-lock-maximum-decoration', you can use
+`font-lock-add-keywords'.
 
-To fontify a buffer, without turning on Font Lock mode and regardless of buffer
-size, you can use \\[font-lock-fontify-buffer].
+To fontify a buffer, without turning on Font Lock mode and
+regardless of buffer size, you can use \\[font-lock-fontify-buffer].
 
-To fontify a block (the function or paragraph containing point, or a number of
-lines around point), perhaps because modification on the current line caused
-syntactic change on other lines, you can use \\[font-lock-fontify-block].
+To fontify a block (the function or paragraph containing point,
+or a number of lines around point), perhaps because modification
+on the current line caused syntactic change on other lines, you
+can use \\[font-lock-fontify-block].
 
 You can set your own default settings for some mode, by setting a
 buffer local value for `font-lock-defaults', via its mode hook.
 
-The above is the default behavior of `font-lock-mode'; you may specify
-your own function which is called when `font-lock-mode' is toggled via
-`font-lock-function'. "
+The above is the default behavior of `font-lock-mode'; you may
+specify your own function which is called when `font-lock-mode'
+is toggled via `font-lock-function'. "
   nil nil nil
   :after-hook (font-lock-initial-fontify)
   ;; Don't turn on Font Lock mode if we don't have a display (we're running a
index 6f94f353c90fd7f0990d35a5c56be548f610b892..b5ff5cfd0af6ae1eb8a41648966a88efe6889ac2 100644 (file)
@@ -39,7 +39,7 @@
 ;;
 ;; To turn Font Lock mode on automatically, add this to your init file:
 ;;
-;;  (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
+;;  (add-hook 'emacs-lisp-mode-hook #'turn-on-font-lock)
 ;;
 ;; Or if you want to turn Font Lock mode on in many modes:
 ;;
@@ -364,105 +364,125 @@ Each element in a user-level keywords list should have one of these forms:
  (MATCHER HIGHLIGHT ...)
  (eval . FORM)
 
-where MATCHER can be either the regexp to search for, or the function name to
-call to make the search (called with one argument, the limit of the search;
-it should return non-nil, move point, and set `match-data' appropriately if
-it succeeds; like `re-search-forward' would).
-MATCHER regexps can be generated via the function `regexp-opt'.
+where MATCHER can be either the regexp to search for, or the
+function name to call to make the search (called with one
+argument, the limit of the search; it should return non-nil, move
+point, and set `match-data' appropriately if it succeeds; like
+`re-search-forward' would).  MATCHER regexps can be generated via
+the function `regexp-opt'.
 
-FORM is an expression, whose value should be a keyword element, evaluated when
-the keyword is (first) used in a buffer.  This feature can be used to provide a
-keyword that can only be generated when Font Lock mode is actually turned on.
+FORM is an expression, whose value should be a keyword element,
+evaluated when the keyword is (first) used in a buffer.  This
+feature can be used to provide a keyword that can only be
+generated when Font Lock mode is actually turned on.
 
 HIGHLIGHT should be either MATCH-HIGHLIGHT or MATCH-ANCHORED.
 
-For highlighting single items, for example each instance of the word \"foo\",
-typically only MATCH-HIGHLIGHT is required.
-However, if an item or (typically) items are to be highlighted following the
-instance of another item (the anchor), for example each instance of the
-word \"bar\" following the word \"anchor\" then MATCH-ANCHORED may be required.
+For highlighting single items, for example each instance of the
+word \"foo\", typically only MATCH-HIGHLIGHT is required.
+However, if an item or (typically) items are to be highlighted
+following the instance of another item (the anchor), for example
+each instance of the word \"bar\" following the word \"anchor\"
+then MATCH-ANCHORED may be required.
 
 MATCH-HIGHLIGHT should be of the form:
 
  (SUBEXP FACENAME [OVERRIDE [LAXMATCH]])
 
-SUBEXP is the number of the subexpression of MATCHER to be highlighted.
+SUBEXP is the number of the subexpression of MATCHER to be
+highlighted.
 
 FACENAME is an expression whose value is the face name to use.
-Instead of a face, FACENAME can evaluate to a property list
-of the form (face FACE PROP1 VAL1 PROP2 VAL2 ...)
-in which case all the listed text-properties will be set rather than
-just FACE.  In such a case, you will most likely want to put those
-properties in `font-lock-extra-managed-props' or to override
+Instead of a face, FACENAME can evaluate to a property list of
+the form (face FACE PROP1 VAL1 PROP2 VAL2 ...)  in which case all
+the listed text-properties will be set rather than just FACE.  In
+such a case, you will most likely want to put those properties in
+`font-lock-extra-managed-props' or to override
 `font-lock-unfontify-region-function'.
 
-OVERRIDE and LAXMATCH are flags.  If OVERRIDE is t, existing fontification can
-be overwritten.  If `keep', only parts not already fontified are highlighted.
-If `prepend' or `append', existing fontification is merged with the new, in
-which the new or existing fontification, respectively, takes precedence.
-If LAXMATCH is non-nil, that means don't signal an error if there is
+OVERRIDE and LAXMATCH are flags.  If OVERRIDE is t, existing
+fontification can be overwritten.  If `keep', only parts not
+already fontified are highlighted.  If `prepend' or `append',
+existing fontification is merged with the new, in which the new
+or existing fontification, respectively, takes precedence.  If
+LAXMATCH is non-nil, that means don't signal an error if there is
 no match for SUBEXP in MATCHER.
 
-For example, an element of the form highlights (if not already highlighted):
+For example, an element of the form highlights (if not already
+highlighted):
+
+ \"\\\\\\=<foo\\\\\\=>\"
+  Discrete occurrences of \"foo\" in the value of the variable
+  `font-lock-keyword-face'.
+
+ (\"fu\\\\(bar\\\\)\" . 1)
+  Substring \"bar\" within all occurrences of \"fubar\" in the
+  value of `font-lock-keyword-face'.
+
+ (\"fubar\" . fubar-face)
+  Occurrences of \"fubar\" in the value of `fubar-face'.
 
- \"\\\\\\=<foo\\\\\\=>\"               discrete occurrences of \"foo\" in the value of the
-                       variable `font-lock-keyword-face'.
- (\"fu\\\\(bar\\\\)\" . 1)     substring \"bar\" within all occurrences of \"fubar\" in
-                       the value of `font-lock-keyword-face'.
- (\"fubar\" . fubar-face)      Occurrences of \"fubar\" in the value of `fubar-face'.
  (\"foo\\\\|bar\" 0 foo-bar-face t)
-                       occurrences of either \"foo\" or \"bar\" in the value
-                       of `foo-bar-face', even if already highlighted.
+  Occurrences of either \"foo\" or \"bar\" in the value of
+  `foo-bar-face', even if already highlighted.
+
  (fubar-match 1 fubar-face)
-                       the first subexpression within all occurrences of
-                       whatever the function `fubar-match' finds and matches
-                       in the value of `fubar-face'.
+  The first subexpression within all occurrences of whatever the
+  function `fubar-match' finds and matches in the value of
+  `fubar-face'.
 
 MATCH-ANCHORED should be of the form:
 
  (MATCHER PRE-MATCH-FORM POST-MATCH-FORM MATCH-HIGHLIGHT ...)
 
-where MATCHER is a regexp to search for or the function name to call to make
-the search, as for MATCH-HIGHLIGHT above, but with one exception; see below.
-PRE-MATCH-FORM and POST-MATCH-FORM are evaluated before the first, and after
-the last, instance MATCH-ANCHORED's MATCHER is used.  Therefore they can be
-used to initialize before, and cleanup after, MATCHER is used.  Typically,
-PRE-MATCH-FORM is used to move to some position relative to the original
-MATCHER, before starting with MATCH-ANCHORED's MATCHER.  POST-MATCH-FORM might
-be used to move back, before resuming with MATCH-ANCHORED's parent's MATCHER.
-
-For example, an element of the form highlights (if not already highlighted):
-
- (\"\\\\\\=<anchor\\\\\\=>\" (0 anchor-face) (\"\\\\\\=<item\\\\\\=>\" nil nil (0 item-face)))
-
- discrete occurrences of \"anchor\" in the value of `anchor-face', and subsequent
- discrete occurrences of \"item\" (on the same line) in the value of `item-face'.
- (Here PRE-MATCH-FORM and POST-MATCH-FORM are nil.  Therefore \"item\" is
- initially searched for starting from the end of the match of \"anchor\", and
- searching for subsequent instances of \"anchor\" resumes from where searching
- for \"item\" concluded.)
-
-The above-mentioned exception is as follows.  The limit of the MATCHER search
-defaults to the end of the line after PRE-MATCH-FORM is evaluated.
-However, if PRE-MATCH-FORM returns a position greater than the position after
-PRE-MATCH-FORM is evaluated, that position is used as the limit of the search.
-It is generally a bad idea to return a position greater than the end of the
-line, i.e., cause the MATCHER search to span lines.
-
-These regular expressions can match text which spans lines, although
-it is better to avoid it if possible since updating them while editing
-text is slower, and it is not guaranteed to be always correct when using
-support modes like jit-lock or lazy-lock.
-
-This variable is set by major modes via the variable `font-lock-defaults'.
-Be careful when composing regexps for this list; a poorly written pattern can
-dramatically slow things down!
-
-A compiled keywords list starts with t.  It is produced internally
-by `font-lock-compile-keywords' from a user-level keywords list.
-Its second element is the user-level keywords list that was
-compiled.  The remaining elements have the same form as
-user-level keywords, but normally their values have been
+where MATCHER is a regexp to search for or the function name to
+call to make the search, as for MATCH-HIGHLIGHT above, but with
+one exception; see below.  PRE-MATCH-FORM and POST-MATCH-FORM are
+evaluated before the first, and after the last, instance
+MATCH-ANCHORED's MATCHER is used.  Therefore they can be used to
+initialize before, and cleanup after, MATCHER is used.
+Typically, PRE-MATCH-FORM is used to move to some position
+relative to the original MATCHER, before starting with
+MATCH-ANCHORED's MATCHER.  POST-MATCH-FORM might be used to move
+back, before resuming with MATCH-ANCHORED's parent's MATCHER.
+
+For example, an element of the form highlights (if not already
+highlighted):
+
+ (\"\\\\\\=<anchor\\\\\\=>\" (0 anchor-face)
+  (\"\\\\\\=<item\\\\\\=>\" nil nil (0 item-face)))
+
+  Discrete occurrences of \"anchor\" in the value of
+  `anchor-face', and subsequent discrete occurrences of
+  \"item\" (on the same line) in the value of `item-face'.
+  (Here PRE-MATCH-FORM and POST-MATCH-FORM are nil.  Therefore
+  \"item\" is initially searched for starting from the end of the
+  match of \"anchor\", and searching for subsequent instances of
+  \"anchor\" resumes from where searching for \"item\" concluded.)
+
+The above-mentioned exception is as follows.  The limit of the
+MATCHER search defaults to the end of the line after
+PRE-MATCH-FORM is evaluated.  However, if PRE-MATCH-FORM returns
+a position greater than the position after PRE-MATCH-FORM is
+evaluated, that position is used as the limit of the search.  It
+is generally a bad idea to return a position greater than the end
+of the line, i.e., cause the MATCHER search to span lines.
+
+These regular expressions can match text which spans lines,
+although it is better to avoid it if possible since updating them
+while editing text is slower, and it is not guaranteed to be
+always correct when using support modes like jit-lock or
+lazy-lock.
+
+This variable is set by major modes via the variable
+`font-lock-defaults'.  Be careful when composing regexps for this
+list; a poorly written pattern can dramatically slow things down!
+
+A compiled keywords list starts with t.  It is produced
+internally by `font-lock-compile-keywords' from a user-level
+keywords list.  Its second element is the user-level keywords
+list that was compiled.  The remaining elements have the same
+form as user-level keywords, but normally their values have been
 optimized.")
 
 (defvar font-lock-keywords-alist nil
@@ -562,11 +582,11 @@ When called with no args it should leave point at the beginning of any
 enclosing textual block and mark at the end.
 This is normally set via `font-lock-defaults'.")
 
-(defvar font-lock-fontify-buffer-function 'font-lock-default-fontify-buffer
+(defvar font-lock-fontify-buffer-function #'font-lock-default-fontify-buffer
   "Function to use for fontifying the buffer.
 This is normally set via `font-lock-defaults'.")
 
-(defvar font-lock-unfontify-buffer-function 'font-lock-default-unfontify-buffer
+(defvar font-lock-unfontify-buffer-function #'font-lock-default-unfontify-buffer
   "Function to use for unfontifying the buffer.
 This is used when turning off Font Lock mode.
 This is normally set via `font-lock-defaults'.")
@@ -580,7 +600,7 @@ If it fontifies a larger region, it should ideally return a list of the form
 \(jit-lock-bounds BEG . END) indicating the bounds of the region actually
 fontified.")
 
-(defvar font-lock-unfontify-region-function 'font-lock-default-unfontify-region
+(defvar font-lock-unfontify-region-function #'font-lock-default-unfontify-region
   "Function to use for unfontifying a region.
 It should take two args, the beginning and end of the region.
 This is normally set via `font-lock-defaults'.")
@@ -647,12 +667,12 @@ be enabled."
 (defun font-lock-mode-internal (arg)
   ;; Turn on Font Lock mode.
   (when arg
-    (add-hook 'after-change-functions 'font-lock-after-change-function t t)
+    (add-hook 'after-change-functions #'font-lock-after-change-function t t)
     (font-lock-set-defaults)
     (font-lock-turn-on-thing-lock))
   ;; Turn off Font Lock mode.
   (unless font-lock-mode
-    (remove-hook 'after-change-functions 'font-lock-after-change-function t)
+    (remove-hook 'after-change-functions #'font-lock-after-change-function t)
     (font-lock-unfontify-buffer)
     (font-lock-turn-off-thing-lock)))
 
@@ -785,8 +805,11 @@ see the variables `c-font-lock-extra-types', `c++-font-lock-extra-types',
 (defun font-lock-remove-keywords (mode keywords)
   "Remove highlighting KEYWORDS for MODE.
 
-MODE should be a symbol, the major mode command name, such as `c-mode'
-or nil.  If nil, highlighting keywords are removed for the current buffer.
+MODE should be a symbol, the major mode command name, such as
+`c-mode' or nil.  If nil, highlighting keywords are removed for
+the current buffer.
+
+For a description of KEYWORDS, see `font-lock-add-keywords'.
 
 To make the removal apply to modes derived from MODE as well,
 pass nil for MODE and add the call to MODE-hook.  This may fail
@@ -911,17 +934,17 @@ The value of this variable is used when Font Lock mode is turned on."
     (`jit-lock-mode
      ;; Prepare for jit-lock
      (remove-hook 'after-change-functions
-                  'font-lock-after-change-function t)
+                  #'font-lock-after-change-function t)
      (set (make-local-variable 'font-lock-flush-function)
-          'jit-lock-refontify)
+          #'jit-lock-refontify)
      (set (make-local-variable 'font-lock-ensure-function)
-          'jit-lock-fontify-now)
+          #'jit-lock-fontify-now)
      ;; Prevent font-lock-fontify-buffer from fontifying eagerly the whole
      ;; buffer.  This is important for things like CWarn mode which
      ;; adds/removes a few keywords and does a refontify (which takes ages on
      ;; large files).
      (set (make-local-variable 'font-lock-fontify-buffer-function)
-          'jit-lock-refontify)
+          #'jit-lock-refontify)
      ;; Don't fontify eagerly (and don't abort if the buffer is large).
      (set (make-local-variable 'font-lock-fontified) t)
      ;; Use jit-lock.
@@ -929,7 +952,7 @@ The value of this variable is used when Font Lock mode is turned on."
                         (not font-lock-keywords-only))
      ;; Tell jit-lock how we extend the region to refontify.
      (add-hook 'jit-lock-after-change-extend-region-functions
-               'font-lock-extend-jit-lock-region-after-change
+               #'font-lock-extend-jit-lock-region-after-change
                nil t))))
 
 (defun font-lock-turn-off-thing-lock ()
@@ -1570,6 +1593,7 @@ START should be at the beginning of a line."
   "Put proper face on each string and comment between START and END.
 START should be at the beginning of a line."
   (syntax-propertize end)  ; Apply any needed syntax-table properties.
+  (with-syntax-table (or syntax-ppss-table (syntax-table))
   (let ((comment-end-regexp
         (or font-lock-comment-end-skip
             (regexp-quote
@@ -1604,7 +1628,7 @@ START should be at the beginning of a line."
                                     font-lock-comment-delimiter-face))))
          (< (point) end))
       (setq state (parse-partial-sexp (point) end nil nil state
-                                     'syntax-table)))))
+                                     'syntax-table))))))
 
 ;;; End of Syntactic fontification functions.
 \f
@@ -1764,7 +1788,7 @@ If SYNTACTIC-KEYWORDS is non-nil, it means these keywords are used for
                        (mapcar #'font-lock-compile-keyword keywords))))
     (if (and (not syntactic-keywords)
             (let ((beg-function syntax-begin-function))
-              (or (eq beg-function 'beginning-of-defun)
+              (or (eq beg-function #'beginning-of-defun)
                    (if (symbolp beg-function)
                        (get beg-function 'font-lock-syntax-paren-check))))
             (not beginning-of-defun-function))
@@ -1885,7 +1909,7 @@ Sets various variables using `font-lock-defaults' and
          (let ((syntax (cdr selem)))
            (dolist (char (if (numberp (car selem))
                              (list (car selem))
-                           (mapcar 'identity (car selem))))
+                           (mapcar #'identity (car selem))))
              (modify-syntax-entry char syntax font-lock-syntax-table)))))
       ;; (nth 4 defaults) used to hold `font-lock-beginning-of-syntax-function',
       ;; but that was removed in 25.1, so if it's a cons cell, we assume that
@@ -2148,7 +2172,7 @@ Sets various variables using `font-lock-defaults' and
 ;;          ;; The default level is usually, but not necessarily, level 1.
 ;;          (setq level (- (length keywords)
 ;;                         (length (member (eval (car keywords))
-;;                                         (mapcar 'eval (cdr keywords))))))))
+;;                                         (mapcar #'eval (cdr keywords))))))))
 ;;      (setq font-lock-fontify-level (list level (> level 1)
 ;;                                       (< level (1- (length keywords))))))))
 ;;
index 47eb34ee6911498a3865c5436664fbe1039c0f2c..475af051a61d6483ec78dc49e7076a2ae1b2c14e 100644 (file)
 
        * gnus-picon.el (gnus-picons-display-pairs): Don't add two bars.
        (gnus-picons-try-face): Set the foreground color on the bar.
-       (gnus-picons-group-exluded-groups): New variable.
+       (gnus-picons-group-excluded-groups): New variable.
        (gnus-group-display-picons): Use it.
 
 1997-10-13  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
index 73f5f09965858a044ff3ca10752adc8b7aeb22b9..ed0e81f0ebfa1bf5f12bd12ec804f380b593fcc5 100644 (file)
        illegible and invisible text.
 
        * gnus-util.el (gnus-multiple-choice): Separate choices with
-       ", ".  Suggested by Dan Jacobson <jidanni@dman.ddts.net>.
+       ", ".  Suggested by Dan Jacobson <jidanni@dman.ddts.net>.
 
 2003-02-18  Jesper Harder  <harder@ifa.au.dk>
 
index e6cbe0458b4d42d1f0077608a1a19983ea9c2287..f734e6e6976421162c638c95fde7b6e7f905c36d 100644 (file)
        (shr-kinsoku-shorten): New internal variable.
        (shr-find-fill-point): Make kinsoku shorten text line if
        shr-kinsoku-shorten is bound to non-nil.
-       (shr-tag-table): Bild shr-kinsoku-shorten to t; refer to
+       (shr-tag-table): Bind shr-kinsoku-shorten to t; refer to
        shr-indentation too when testing if table is wider than frame width.
        (shr-insert-table): Use `string-width' instead of `length' to measure
        text width.
index b73d863f1c61ca65b57614865cba212aae24d1e1..27b00da1e22d932c3460f985c454ab52ec30c1d4 100644 (file)
@@ -70,13 +70,6 @@ buffer does not look like a news message."
   :type 'boolean
   :group 'canlock)
 
-(eval-when-compile
-  (defmacro canlock-string-as-unibyte (string)
-    "Return a unibyte string with the same individual bytes as STRING."
-    (if (fboundp 'string-as-unibyte)
-       (list 'string-as-unibyte string)
-      string)))
-
 (defun canlock-sha1 (message)
   "Make a SHA-1 digest of MESSAGE as a unibyte string of length 20 bytes."
   (let (sha1-maximum-internal-length)
@@ -97,7 +90,7 @@ buffer does not look like a news message."
      (canlock-sha1
       (concat opad
              (canlock-sha1
-              (concat ipad (canlock-string-as-unibyte message-id))))))))
+              (concat ipad (string-as-unibyte message-id))))))))
 
 (defun canlock-narrow-to-header ()
   "Narrow the buffer to the head of the message."
index fca2394cbc740ac5d2b3909376f89ab364999843..7aa52794e4cb0dcfee3e83e157f15d70ea78716f 100644 (file)
@@ -97,34 +97,6 @@ ARGS are passed to `message'."
 (autoload 'widget-convert "wid-edit")
 (autoload 'widget-default-get "wid-edit")
 
-;; Copy of the `nnmail-lazy' code from `nnmail.el':
-(define-widget 'gmm-lazy 'default
-  "Base widget for recursive data structures.
-
-This is a copy of the `lazy' widget in Emacs 22.1 provided for compatibility."
-  :format "%{%t%}: %v"
-  :convert-widget 'widget-value-convert-widget
-  :value-create (lambda (widget)
-                  (let ((value (widget-get widget :value))
-                        (type (widget-get widget :type)))
-                    (widget-put widget :children
-                                (list (widget-create-child-value
-                                       widget (widget-convert type) value)))))
-  :value-delete 'widget-children-value-delete
-  :value-get (lambda (widget)
-               (widget-value (car (widget-get widget :children))))
-  :value-inline (lambda (widget)
-                  (widget-apply (car (widget-get widget :children))
-                                :value-inline))
-  :default-get (lambda (widget)
-                 (widget-default-get
-                  (widget-convert (widget-get widget :type))))
-  :match (lambda (widget value)
-           (widget-apply (widget-convert (widget-get widget :type))
-                         :match value))
-  :validate (lambda (widget)
-              (widget-apply (car (widget-get widget :children)) :validate)))
-
 ;; Note: The format of `gmm-tool-bar-item' may change if some future Emacs
 ;; version will provide customizable tool bar buttons using a different
 ;; interface.
@@ -144,7 +116,7 @@ This is a copy of the `lazy' widget in Emacs 22.1 provided for compatibility."
 ;;
 ;; Then use (plist-get rs-command :none), (plist-get rs-command :shift)
 
-(define-widget 'gmm-tool-bar-item (if (gmm-widget-p 'lazy) 'lazy 'gmm-lazy)
+(define-widget 'gmm-tool-bar-item 'lazy
   "Tool bar list item."
   :tag "Tool bar item"
   :type '(choice
@@ -163,7 +135,7 @@ This is a copy of the `lazy' widget in Emacs 22.1 provided for compatibility."
                (const :tag "No map")
                (plist :inline t :tag "Properties"))))
 
-(define-widget 'gmm-tool-bar-zap-list (if (gmm-widget-p 'lazy) 'lazy 'gmm-lazy)
+(define-widget 'gmm-tool-bar-zap-list 'lazy
   "Tool bar zap list."
   :tag "Tool bar zap list"
   :type '(choice (const :tag "Zap all" t)
@@ -193,28 +165,12 @@ This is a copy of the `lazy' widget in Emacs 22.1 provided for compatibility."
                          :tag "Other"
                          (symbol :tag "Icon item")))))
 
-;; (defun gmm-color-cells (&optional display)
-;;   "Return the number of color cells supported by DISPLAY.
-;; Compatibility function."
-;;   ;; `display-color-cells' doesn't return more than 256 even if color depth is
-;;   ;; > 8 in Emacs 21.
-;;   ;;
-;;   ;; Feel free to add proper XEmacs support.
-;;   (let* ((cells (and (fboundp 'display-color-cells)
-;;                  (display-color-cells display)))
-;;      (plane (and (fboundp 'x-display-planes)
-;;                  (ash 1 (x-display-planes))))
-;;      (none -1))
-;;     (max (if (integerp cells) cells none)
-;;      (if (integerp plane) plane none))))
-
 (defcustom gmm-tool-bar-style
   (if (and (boundp 'tool-bar-mode)
           tool-bar-mode
-          (and (fboundp 'display-visual-class)
-               (not (memq (display-visual-class)
-                          (list 'static-gray 'gray-scale
-                                'static-color 'pseudo-color)))))
+          (memq (display-visual-class)
+                (list 'static-gray 'gray-scale
+                      'static-color 'pseudo-color)))
       'gnome
     'retro)
   "Preferred tool bar style."
@@ -242,15 +198,13 @@ item.  When \\[describe-key] <icon> shows \"<tool-bar> <new-file>
 runs the command find-file\", then use `new-file' in ZAP-LIST.
 
 DEFAULT-MAP specifies the default key map for ICON-LIST."
-  (let (;; For Emacs 21, we must let-bind `tool-bar-map'.  In Emacs 22, we
-       ;; could use some other local variable.
-       (tool-bar-map (if (eq zap-list t)
-                         (make-sparse-keymap)
-                       (copy-keymap tool-bar-map))))
+  (let ((map (if (eq zap-list t)
+                (make-sparse-keymap)
+              (copy-keymap tool-bar-map))))
     (when (listp zap-list)
       ;; Zap some items which aren't relevant for this mode and take up space.
       (dolist (key zap-list)
-       (define-key tool-bar-map (vector key) nil)))
+       (define-key map (vector key) nil)))
     (mapc (lambda (el)
            (let ((command (car el))
                  (icon (nth 1 el))
@@ -262,7 +216,7 @@ DEFAULT-MAP specifies the default key map for ICON-LIST."
                     ;; widget.  Suppress tooltip by adding `:enable nil'.
                     (if (fboundp 'tool-bar-local-item)
                         (apply 'tool-bar-local-item icon nil nil
-                               tool-bar-map :enable nil props)
+                               map :enable nil props)
                       ;; (tool-bar-local-item ICON DEF KEY MAP &rest PROPS)
                       ;; (tool-bar-add-item ICON DEF KEY &rest PROPS)
                       (apply 'tool-bar-add-item icon nil nil :enable nil props)))
@@ -270,18 +224,18 @@ DEFAULT-MAP specifies the default key map for ICON-LIST."
                     (apply 'tool-bar-local-item
                            icon command
                            (intern icon) ;; reuse icon or fmap here?
-                           tool-bar-map props))
+                           map props))
                    (t ;; A menu command
                     (apply 'tool-bar-local-item-from-menu
                            ;; (apply 'tool-bar-local-item icon def key
                            ;; tool-bar-map props)
-                           command icon tool-bar-map (symbol-value fmap)
+                           command icon map (symbol-value fmap)
                            props)))
              t))
          (if (symbolp icon-list)
              (eval icon-list)
            icon-list))
-    tool-bar-map))
+    map))
 
 (defmacro defun-gmm (name function arg-list &rest body)
   "Create function NAME.
@@ -292,109 +246,6 @@ Otherwise, create function NAME with ARG-LIST and BODY."
         `(defalias ',name ',function)
       `(defun ,name ,arg-list ,@body))))
 
-(defun-gmm gmm-image-search-load-path
-  image-search-load-path (file &optional path)
-  "Emacs 21 and XEmacs don't have `image-search-load-path'.
-This function returns nil on those systems."
-  nil)
-
-;; Cf. `mh-image-load-path-for-library' in `mh-compat.el'.
-
-(defun-gmm gmm-image-load-path-for-library
-  image-load-path-for-library (library image &optional path no-error)
-  "Return a suitable search path for images used by LIBRARY.
-
-It searches for IMAGE in `image-load-path' (excluding
-\"`data-directory'/images\") and `load-path', followed by a path
-suitable for LIBRARY, which includes \"../../etc/images\" and
-\"../etc/images\" relative to the library file itself, and then
-in \"`data-directory'/images\".
-
-Then this function returns a list of directories which contains
-first the directory in which IMAGE was found, followed by the
-value of `load-path'.  If PATH is given, it is used instead of
-`load-path'.
-
-If NO-ERROR is non-nil and a suitable path can't be found, don't
-signal an error.  Instead, return a list of directories as before,
-except that nil appears in place of the image directory.
-
-Here is an example that uses a common idiom to provide
-compatibility with versions of Emacs that lack the variable
-`image-load-path':
-
-    ;; Shush compiler.
-    (defvar image-load-path)
-
-    (let* ((load-path (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\"))
-           (image-load-path (cons (car load-path)
-                                  (when (boundp \\='image-load-path)
-                                    image-load-path))))
-      (mh-tool-bar-folder-buttons-init))"
-  (unless library (error "No library specified"))
-  (unless image   (error "No image specified"))
-  (let (image-directory image-directory-load-path)
-    ;; Check for images in image-load-path or load-path.
-    (let ((img image)
-          (dir (or
-                ;; Images in image-load-path.
-                (gmm-image-search-load-path image) ;; "gmm-" prefix!
-                ;; Images in load-path.
-                (locate-library image)))
-          parent)
-      ;; Since the image might be in a nested directory (for
-      ;; example, mail/attach.pbm), adjust `image-directory'
-      ;; accordingly.
-      (when dir
-        (setq dir (file-name-directory dir))
-        (while (setq parent (file-name-directory img))
-          (setq img (directory-file-name parent)
-                dir (expand-file-name "../" dir))))
-      (setq image-directory-load-path dir))
-
-    ;; If `image-directory-load-path' isn't Emacs's image directory,
-    ;; it's probably a user preference, so use it.  Then use a
-    ;; relative setting if possible; otherwise, use
-    ;; `image-directory-load-path'.
-    (cond
-     ;; User-modified image-load-path?
-     ((and image-directory-load-path
-           (not (equal image-directory-load-path
-                       (file-name-as-directory
-                        (expand-file-name "images" data-directory)))))
-      (setq image-directory image-directory-load-path))
-     ;; Try relative setting.
-     ((let (library-name d1ei d2ei)
-        ;; First, find library in the load-path.
-        (setq library-name (locate-library library))
-        (if (not library-name)
-            (error "Cannot find library %s in load-path" library))
-        ;; And then set image-directory relative to that.
-        (setq
-         ;; Go down 2 levels.
-         d2ei (file-name-as-directory
-               (expand-file-name
-                (concat (file-name-directory library-name) "../../etc/images")))
-         ;; Go down 1 level.
-         d1ei (file-name-as-directory
-               (expand-file-name
-                (concat (file-name-directory library-name) "../etc/images"))))
-        (setq image-directory
-              ;; Set it to nil if image is not found.
-              (cond ((file-exists-p (expand-file-name image d2ei)) d2ei)
-                    ((file-exists-p (expand-file-name image d1ei)) d1ei)))))
-     ;; Use Emacs's image directory.
-     (image-directory-load-path
-      (setq image-directory image-directory-load-path))
-     (no-error
-      (message "Could not find image %s for library %s" image library))
-     (t
-      (error "Could not find image %s for library %s" image library)))
-
-    ;; Return an augmented `path' or `load-path'.
-    (nconc (list image-directory)
-           (delete image-directory (copy-sequence (or path load-path))))))
-
 (defun gmm-customize-mode (&optional mode)
   "Customize customization group for MODE.
 If mode is nil, use `major-mode' of the current buffer."
@@ -405,75 +256,8 @@ If mode is nil, use `major-mode' of the current buffer."
                 (string-match "^\\(.+\\)-mode$" mode)
                 (match-string 1 mode))))))
 
-(defun gmm-write-region (start end filename &optional append visit
-                              lockname mustbenew)
-  "Compatibility function for `write-region'.
-
-In XEmacs, the seventh argument of `write-region' specifies the
-coding-system."
-  (if (and mustbenew (featurep 'xemacs))
-      (if (file-exists-p filename)
-         (signal 'file-already-exists (list "File exists" filename))
-       (write-region start end filename append visit lockname))
-    (write-region start end filename append visit lockname mustbenew)))
-
-;; `interactive-p' is obsolete since Emacs 23.2.
-(defmacro gmm-called-interactively-p (kind)
-  (condition-case nil
-      (progn
-       (eval '(called-interactively-p 'any))
-       ;; Emacs >=23.2
-       `(called-interactively-p ,kind))
-    ;; Emacs <23.2
-    (wrong-number-of-arguments '(called-interactively-p))
-    ;; XEmacs
-    (void-function '(interactive-p))))
-
-;; `labels' is obsolete since Emacs 24.3.
-(defmacro gmm-labels (bindings &rest body)
-  "Make temporary function bindings.
-The bindings can be recursive and the scoping is lexical, but capturing
-them in closures will only work if `lexical-binding' is in use.  But in
-Emacs 24.2 and older, the lexical scoping is handled via `lexical-let'
-rather than relying on `lexical-binding'.
-
-\(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
-  `(,(progn (require 'cl) (if (fboundp 'cl-labels) 'cl-labels 'labels))
-    ,bindings ,@body))
-(put 'gmm-labels 'lisp-indent-function 1)
-(put 'gmm-labels 'edebug-form-spec '((&rest (sexp sexp &rest form)) &rest form))
-
-(defun gmm-format-time-string (format-string &optional time tz)
-  "Use FORMAT-STRING to format the time TIME, or now if omitted.
-The optional TZ specifies the time zone in a number of seconds; any
-other non-nil value will be treated as 0.  Note that both the format
-specifiers `%Z' and `%z' will be replaced with a numeric form. "
-;; FIXME: is there a smart way to replace %Z with a time zone name?
-  (if (and (numberp tz) (not (zerop tz)))
-      (let ((st 0)
-           (case-fold-search t)
-           ls nd rest)
-       (setq time (if time
-                      (copy-sequence time)
-                    (current-time)))
-       (if (>= (setq ls (- (cadr time) (car (current-time-zone)) (- tz))) 0)
-           (setcar (cdr time) ls)
-         (setcar (cdr time) (+ ls 65536))
-         (setcar time (1- (car time))))
-       (setq tz (format "%s%02d%02d"
-                        (if (>= tz 0) "+" "-")
-                        (/ (abs tz) 3600)
-                        (/ (% (abs tz) 3600) 60)))
-       (while (string-match "%+z" format-string st)
-         (if (zerop (% (- (setq nd (match-end 0)) (match-beginning 0)) 2))
-             (progn
-               (push (substring format-string st (- nd 2)) rest)
-               (push tz rest))
-           (push (substring format-string st nd) rest))
-         (setq st nd))
-       (push (substring format-string st) rest)
-       (format-time-string (apply 'concat (nreverse rest)) time))
-    (format-time-string format-string time t)))
+(define-obsolete-function-alias 'gmm-format-time-string 'format-time-string
+  "25.2")
 
 (provide 'gmm-utils)
 
index 80753c118130e4acbdb1d9c42d7facf99eb3452c..6c1915ba909f7319c6cb06ea59c2362bc2a00738 100644 (file)
 (require 'gnus-score)
 (require 'gnus-srvr)
 (require 'gnus-util)
+(require 'timer)
 (eval-when-compile
-  (if (featurep 'xemacs)
-      (require 'itimer)
-    (require 'timer))
   (require 'cl))
 
 (autoload 'gnus-server-update-server "gnus-srvr")
@@ -82,28 +80,16 @@ If nil, only read articles will be expired."
   :group 'gnus-agent
   :type 'hook)
 
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
-  (add-hook 'gnus-agent-group-mode-hook 'gnus-xmas-agent-group-menu-add))
-
 (defcustom gnus-agent-summary-mode-hook nil
   "Hook run in Agent summary minor modes."
   :group 'gnus-agent
   :type 'hook)
 
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
-  (add-hook 'gnus-agent-summary-mode-hook 'gnus-xmas-agent-summary-menu-add))
-
 (defcustom gnus-agent-server-mode-hook nil
   "Hook run in Agent summary minor modes."
   :group 'gnus-agent
   :type 'hook)
 
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
-  (add-hook 'gnus-agent-server-mode-hook 'gnus-xmas-agent-server-menu-add))
-
 (defcustom gnus-agent-confirmation-function 'y-or-n-p
   "Function to confirm when error happens."
   :version "21.1"
@@ -252,16 +238,6 @@ NOTES:
 (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
 ;;;
@@ -571,19 +547,9 @@ manipulated as follows:
        ["Remove" gnus-agent-remove-server t]))))
 
 (defun gnus-agent-make-mode-line-string (string mouse-button mouse-func)
-  (if (and (fboundp 'propertize)
-          (fboundp 'make-mode-line-mouse-map))
-      (propertize string 'local-map
-                 (make-mode-line-mouse-map mouse-button mouse-func)
-                 'mouse-face
-                 (if (and (featurep 'xemacs)
-                          ;; XEmacs's `facep' only checks for a face
-                          ;; object, not for a face name, so it's useless
-                          ;; to check with `facep'.
-                          (find-face 'modeline))
-                     'modeline
-                   'mode-line-highlight))
-    string))
+  (propertize string 'local-map
+             (make-mode-line-mouse-map mouse-button mouse-func)
+             'mouse-face 'mode-line-highlight))
 
 (defun gnus-agent-toggle-plugged (set-to)
   "Toggle whether Gnus is unplugged or not."
@@ -868,7 +834,7 @@ be a select method."
                      (not (eq gnus-agent-synchronize-flags 'ask)))
                 (and (eq gnus-agent-synchronize-flags 'ask)
                      (gnus-y-or-n-p
-                      (gnus-format-message
+                      (format-message
                        "Synchronize flags on server `%s'? "
                        (cadr method))))))
     (gnus-agent-synchronize-flags-server method)))
@@ -2713,7 +2679,7 @@ The following commands are available:
   (let* ((gnus-tmp-name (format "%s" (car category)))
         (gnus-tmp-groups (length (gnus-agent-cat-groups category))))
     (beginning-of-line)
-    (gnus-add-text-properties
+    (add-text-properties
      (point)
      (prog1 (1+ (point))
        ;; Insert the text.
index 66b1e38da2efe09141af42cc3fb9c9268aa953ed..dea8d1f5c9f4a436057a53798423b6d551dfa2d2 100644 (file)
@@ -266,18 +266,11 @@ This can also be a list of the above values."
 ;; Fixme: This isn't the right thing for mixed graphical and non-graphical
 ;; frames in a session.
 (defcustom gnus-article-x-face-command
-  (if (featurep 'xemacs)
-      (if (or (gnus-image-type-available-p 'xface)
-             (gnus-image-type-available-p 'pbm))
-         'gnus-display-x-face-in-from
-       "{ echo \
+  (if (gnus-image-type-available-p 'pbm)
+      'gnus-display-x-face-in-from
+    "{ echo \
 '/* Format_version=1, Width=48, Height=48, Depth=1, Valid_bits_per_item=16 */'\
-; uncompface; } | icontopbm | ee -")
-    (if (gnus-image-type-available-p 'pbm)
-       'gnus-display-x-face-in-from
-      "{ echo \
-'/* Format_version=1, Width=48, Height=48, Depth=1, Valid_bits_per_item=16 */'\
-; uncompface; } | icontopbm | display -"))
+; uncompface; } | icontopbm | display -")
   "*String or function to be executed to display an X-Face header.
 If it is a string, the command will be executed in a sub-shell
 asynchronously.  The compressed face will be piped to this command."
@@ -484,9 +477,7 @@ and the latter avoids underlining any whitespace at all."
 Example: (_/*word*/_)."
   :group 'gnus-article-emphasis)
 
-(defface gnus-emphasis-strikethru (if (featurep 'xemacs)
-                                     '((t (:strikethru t)))
-                                   '((t (:strike-through t))))
+(defface gnus-emphasis-strikethru '((t (:strike-through t)))
   "Face used for displaying strike-through text (-word-)."
   :group 'gnus-article-emphasis)
 
@@ -711,13 +702,6 @@ The following additional specs are available:
   :type 'hook
   :group 'gnus-article-various)
 
-(when (featurep 'xemacs)
-  ;; Extracted from gnus-xmas-define in order to preserve user settings
-  (when (fboundp 'turn-off-scroll-in-place)
-    (add-hook 'gnus-article-mode-hook 'turn-off-scroll-in-place))
-  ;; Extracted from gnus-xmas-redefine in order to preserve user settings
-  (add-hook 'gnus-article-mode-hook 'gnus-xmas-article-menu-add))
-
 (defcustom gnus-article-menu-hook nil
   "*Hook run after the creation of the article mode menu."
   :type 'hook
@@ -883,10 +867,8 @@ 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)))
+(defcustom gnus-face-properties-alist '((pbm . (:face gnus-x-face))
+                                       (png . nil))
   "Alist of image types and properties applied to Face and X-Face images.
 Here are examples:
 
@@ -902,8 +884,7 @@ Here are examples:
 
 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."
+images in Emacs."
   :version "23.1" ;; No Gnus
   :group 'gnus-article-headers
   :type '(repeat (cons :format "%v" (symbol :tag "Image type") plist)))
@@ -1412,7 +1393,7 @@ predicate.  See Info node `(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)
+(defcustom gnus-treat-ansi-sequences 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'."
@@ -1426,14 +1407,12 @@ predicate.  See Info node `(gnus)Customizing Articles'."
 (defcustom gnus-treat-display-x-face
   (and (not noninteractive)
        (gnus-image-type-available-p 'xbm)
-       (if (featurep 'xemacs)
-          (featurep 'xface)
-        (condition-case nil
-             (and (string-match "^0x" (shell-command-to-string "uncompface"))
-                  (executable-find "icontopbm"))
-           ;; shell-command-to-string may signal an error, e.g. if
-           ;; shell-file-name is not found.
-           (error nil)))
+       (condition-case nil
+          (and (string-match "^0x" (shell-command-to-string "uncompface"))
+               (executable-find "icontopbm"))
+        ;; shell-command-to-string may signal an error, e.g. if
+        ;; shell-file-name is not found.
+        (error nil))
        'head)
   "Display X-Face headers.
 Valid values are nil and `head'.
@@ -1631,18 +1610,9 @@ It is a string, such as \"PGP\". If nil, ask user."
   :type 'string
   :group 'mime-security)
 
-(defvar idna-program)
-
-(defcustom gnus-use-idna (and (mm-coding-system-p 'utf-8)
-                             (condition-case nil
-                                 (require 'idna)
-                               (file-error)
-                               (invalid-operation))
-                             idna-program
-                             (executable-find idna-program))
-  "Whether IDNA decoding of headers is used when viewing messages.
-This requires GNU Libidn, and by default only enabled if it is found."
-  :version "22.1"
+(defcustom gnus-use-idna t
+  "Whether IDNA decoding of headers is used when viewing messages."
+  :version "25.2"
   :group 'gnus-article-headers
   :type 'boolean)
 
@@ -2087,7 +2057,7 @@ always hide."
                     (- gnus-article-normalized-header-length column)
                     ? )))
           ((> column gnus-article-normalized-header-length)
-           (gnus-put-text-property
+           (put-text-property
             (progn
               (forward-char gnus-article-normalized-header-length)
               (point))
@@ -2117,21 +2087,17 @@ try this wash."
   "Translate many Unicode characters into their ASCII equivalents."
   (interactive)
   (require 'org-entities)
-  (let ((table (make-char-table (if (featurep 'xemacs) 'generic))))
+  (let ((table (make-char-table nil)))
     (dolist (elem org-entities)
       (when (and (listp elem)
                 (= (length (nth 6 elem)) 1))
-       (if (featurep 'xemacs)
-           (put-char-table (aref (nth 6 elem) 0) (nth 4 elem) table)
-         (set-char-table-range table (aref (nth 6 elem) 0) (nth 4 elem)))))
+       (set-char-table-range table (aref (nth 6 elem) 0) (nth 4 elem))))
     (save-excursion
       (when (article-goto-body)
        (let ((inhibit-read-only t)
              replace props)
          (while (not (eobp))
-           (if (not (setq replace (if (featurep 'xemacs)
-                                      (get-char-table (following-char) table)
-                                    (aref table (following-char)))))
+           (if (not (setq replace (aref table (following-char))))
                (forward-char 1)
              (if (prog1
                      (setq props (text-properties-at (point)))
@@ -2314,8 +2280,6 @@ long lines if and only if arg is positive."
       (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 ()
@@ -2327,15 +2291,13 @@ long lines if and only if arg is positive."
       (goto-char (point-max))
       (let ((start (point)))
        (insert "X-Boundary: ")
-       (gnus-add-text-properties start (point) gnus-hidden-properties)
+       (add-text-properties start (point) gnus-hidden-properties)
        (insert (let (str (max (window-width)))
-                 (if (featurep 'xemacs)
-                     (setq max (1- max)))
                  (while (>= max (length str))
                    (setq str (concat str gnus-body-boundary-delimiter)))
                  (substring str 0 max))
                "\n")
-       (gnus-put-text-property start (point) 'gnus-decoration 'header)))))
+       (put-text-property start (point) 'gnus-decoration 'header)))))
 
 (defun article-fill-long-lines ()
   "Fill lines that are wider than the window width."
@@ -2492,7 +2454,7 @@ long lines if and only if arg is positive."
                   ;; The command is a string, so we interpret the command
                   ;; as a, well, command, and fork it off.
                   (let ((process-connection-type nil))
-                    (gnus-set-process-query-on-exit-flag
+                    (set-process-query-on-exit-flag
                      (start-process
                       "article-x-face" nil shell-file-name
                       shell-command-switch gnus-article-x-face-command)
@@ -2541,7 +2503,7 @@ If PROMPT (the prefix), prompt for a coding system to use."
              ctl (and ct (mail-header-parse-content-type ct))
              charset (cond
                       (prompt
-                       (mm-read-coding-system "Charset to decode: "))
+                       (read-coding-system "Charset to decode: "))
                       (ctl
                        (mail-content-type-get ctl 'charset)))
              format (and ctl (mail-content-type-get ctl 'format)))
@@ -2620,8 +2582,6 @@ If PROMPT (the prefix), prompt for a coding system to use."
                           t t nil 1))
          (goto-char (point-min)))))))
 
-(autoload 'idna-to-unicode "idna")
-
 (defun article-decode-idna-rhs ()
   "Decode IDNA strings in RHS in various headers in current buffer.
 The following headers are decoded: From:, To:, Cc:, Reply-To:,
@@ -2639,7 +2599,7 @@ Mail-Reply-To: and Mail-Followup-To:."
                         (save-excursion
                           (and (re-search-backward "^[^ \t]" nil t)
                                (looking-at "From\\|To\\|Cc\\|Reply-To\\|Mail-Reply-To\\|Mail-Followup-To")))
-                        (setq unicode (idna-to-unicode ace))))
+                        (setq unicode (puny-decode-domain ace))))
              (unless (string= ace unicode)
                (replace-match unicode nil nil nil 1)))))))))
 
@@ -2662,7 +2622,7 @@ If READ-CHARSET, ask for a coding system."
              (if (stringp charset)
                  (setq charset (intern (downcase charset)))))))
       (if read-charset
-         (setq charset (mm-read-coding-system "Charset: " charset)))
+         (setq charset (read-coding-system "Charset: " charset)))
       (unless charset
        (setq charset gnus-newsgroup-charset))
       (when (or force
@@ -2690,7 +2650,7 @@ If READ-CHARSET, ask for a coding system."
              (if (stringp charset)
                  (setq charset (intern (downcase charset)))))))
       (if read-charset
-         (setq charset (mm-read-coding-system "Charset: " charset)))
+         (setq charset (read-coding-system "Charset: " charset)))
       (unless charset
        (setq charset gnus-newsgroup-charset))
       (when (or force
@@ -2700,12 +2660,11 @@ If READ-CHARSET, ask for a coding system."
        (save-restriction
          (narrow-to-region (point) (point-max))
          (base64-decode-region (point-min) (point-max))
-         (mm-decode-coding-region
+         (decode-coding-region
           (point-min) (point-max)
           (mm-charset-to-coding-system charset nil t)))))))
 
-(eval-when-compile
-  (require 'rfc1843))
+(declare-function rfc1843-decode-region "rfc1843" (from to))
 
 (defun article-decode-HZ ()
   "Translate a HZ-encoded article."
@@ -2724,7 +2683,7 @@ If READ-CHARSET, ask for a coding system."
       (while (re-search-forward
              "\\(\\(https?\\|ftp\\)://\\S-+\\) *\n\\(\\S-+\\)" nil t)
        (replace-match "\\1\\3" t)))
-    (when (gmm-called-interactively-p 'any)
+    (when (called-interactively-p 'any)
       (gnus-treat-article nil))))
 
 (defun article-wash-html ()
@@ -2777,7 +2736,7 @@ summary buffer."
       (cond ((file-directory-p file)
             (when (or (not (eq how 'file))
                       (gnus-y-or-n-p
-                       (gnus-format-message
+                       (format-message
                         "Delete temporary HTML file(s) in directory `%s'? "
                         (file-name-as-directory file))))
               (gnus-delete-directory file)))
@@ -2883,7 +2842,7 @@ message header will be added to the bodies of the \"text/html\" parts."
 <img[\t\n ]+\\(?:[^\t\n >]+[\t\n ]+\\)*src=\"\\(cid:\\([^\"]+\\)\\)\""
                                           nil t)
                   (unless cid-dir
-                    (setq cid-dir (mm-make-temp-file "cid" t))
+                    (setq cid-dir (make-temp-file "cid" t))
                     (add-to-list 'gnus-article-browse-html-temp-list cid-dir))
                   (setq file nil
                         content nil)
@@ -2896,7 +2855,7 @@ message header will be added to the bodies of the \"text/html\" parts."
                     (replace-match cid-file nil nil nil 1))))
               (unless content (setq content (buffer-string))))
             (when (or charset header (not file))
-              (setq tmp-file (mm-make-temp-file
+              (setq tmp-file (make-temp-file
                               ;; Do we need to care for 8.3 filenames?
                               "mm-" nil ".html")))
             ;; Add a meta html tag to specify charset and a header.
@@ -2930,11 +2889,11 @@ message header will be added to the bodies of the \"text/html\" parts."
                   ;; charset specified in parts might be different.
                   (if (eq charset 'gnus-decoded)
                       (setq charset 'utf-8
-                            eheader (mm-encode-coding-string (buffer-string)
-                                                             charset)
+                            eheader (encode-coding-string (buffer-string)
+                                                          charset)
                             title (when title
-                                    (mm-encode-coding-string title charset))
-                            body (mm-encode-coding-string content charset))
+                                    (encode-coding-string title charset))
+                            body (encode-coding-string content charset))
                     (setq hcharset (mm-find-mime-charset-region (point-min)
                                                                 (point-max)))
                     (cond ((= (length hcharset) 1)
@@ -2951,30 +2910,30 @@ message header will be added to the bodies of the \"text/html\" parts."
                                     (mm-charset-to-coding-system charset
                                                                  nil t))
                               (if (eq coding body)
-                                  (setq eheader (mm-encode-coding-string
+                                  (setq eheader (encode-coding-string
                                                  (buffer-string) coding)
                                         title (when title
-                                                (mm-encode-coding-string
+                                                (encode-coding-string
                                                  title coding))
                                         body content)
                                 (setq charset 'utf-8
-                                      eheader (mm-encode-coding-string
+                                      eheader (encode-coding-string
                                                (buffer-string) charset)
                                       title (when title
-                                              (mm-encode-coding-string
+                                              (encode-coding-string
                                                title charset))
-                                      body (mm-encode-coding-string
-                                            (mm-decode-coding-string
+                                      body (encode-coding-string
+                                            (decode-coding-string
                                              content body)
                                             charset))))
                           (setq charset hcharset
-                                eheader (mm-encode-coding-string
+                                eheader (encode-coding-string
                                          (buffer-string) coding)
                                 title (when title
-                                        (mm-encode-coding-string
+                                        (encode-coding-string
                                          title coding))
                                 body content))
-                      (setq eheader (mm-string-as-unibyte (buffer-string))
+                      (setq eheader (string-as-unibyte (buffer-string))
                             body content)))
                   (erase-buffer)
                   (mm-disable-multibyte)
@@ -2997,8 +2956,8 @@ message header will be added to the bodies of the \"text/html\" parts."
              (charset
               (mm-with-unibyte-buffer
                 (insert (if (eq charset 'gnus-decoded)
-                            (mm-encode-coding-string content
-                                                     (setq charset 'utf-8))
+                            (encode-coding-string content
+                                                  (setq charset 'utf-8))
                           content))
                 (if (or (mm-add-meta-html-tag handle charset)
                         (not file))
@@ -4161,8 +4120,7 @@ and the raw article including all headers will be piped."
       (setq command
            (if (and (eq command 'default) default)
                default
-             (gnus-read-shell-command "Shell command on this article: "
-                                      default))))
+             (read-shell-command "Shell command on this article: " default))))
     (when (string-equal command "")
       (if default
          (setq command default)
@@ -4326,8 +4284,6 @@ If variable `gnus-use-long-file-name' is non-nil, it is
                  (put-text-property (match-end 0) (point-max)
                                     'face eface)))))))))
 
-(autoload 'canlock-verify "canlock" nil t) ;; for XEmacs.
-
 (defun article-verify-cancel-lock ()
   "Verify Cancel-Lock header."
   (interactive)
@@ -4440,13 +4396,9 @@ If variable `gnus-use-long-file-name' is non-nil, it is
  'undefined 'gnus-article-read-summary-keys gnus-article-mode-map)
 
 (defvar gnus-article-send-map)
-
 (gnus-define-keys (gnus-article-send-map "S" gnus-article-mode-map)
-  "W" gnus-article-wide-reply-with-original)
-(if (featurep 'xemacs)
-    (set-keymap-default-binding gnus-article-send-map
-                               'gnus-article-read-summary-send-keys)
-  (define-key gnus-article-send-map [t] 'gnus-article-read-summary-send-keys))
+  "W" gnus-article-wide-reply-with-original
+  [t] 'gnus-article-read-summary-send-keys)
 
 (defun gnus-article-make-menu-bar ()
   (unless (boundp 'gnus-article-commands-menu)
@@ -4522,8 +4474,8 @@ commands:
   (make-local-variable 'gnus-article-ignored-charsets)
   (set (make-local-variable 'bookmark-make-record-function)
        'gnus-summary-bookmark-make-record)
-  ;; Prevent Emacs 22 from displaying non-break space with `nobreak-space'
-  ;; face.
+  ;; Prevent Emacs from displaying non-break space with
+  ;; `nobreak-space' face.
   (set (make-local-variable 'nobreak-char-display) nil)
   ;; Enable `gnus-article-remove-images' to delete images shr.el renders.
   (set (make-local-variable 'shr-put-image-function) 'gnus-shr-put-image)
@@ -4602,7 +4554,7 @@ commands:
 (defun gnus-article-stop-animations ()
   (dolist (timer (and (boundp 'timer-list)
                      timer-list))
-    (when (eq (gnus-timer--function timer) 'image-animate-timeout)
+    (when (eq (timer--function timer) 'image-animate-timeout)
       (cancel-timer timer))))
 
 (defun gnus-stop-downloads ()
@@ -4645,8 +4597,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
        (gnus-article-setup-buffer)
        (set-buffer gnus-article-buffer)
        ;; Deactivate active regions.
-       (when (and (boundp 'transient-mark-mode)
-                  transient-mark-mode)
+       (when transient-mark-mode
          (setq mark-active nil))
        (if (not (setq result (let ((inhibit-read-only t))
                                (gnus-request-article-this-buffer
@@ -4906,8 +4857,8 @@ General format specifiers can also be used.  See Info node
 
 (defvar gnus-mime-button-map
   (let ((map (make-sparse-keymap)))
-    (define-key map gnus-mouse-2 'gnus-article-push-button)
-    (define-key map gnus-down-mouse-3 'gnus-mime-button-menu)
+    (define-key map [mouse-2] 'gnus-article-push-button)
+    (define-key map [down-mouse-3] 'gnus-mime-button-menu)
     (dolist (c gnus-mime-button-commands)
       (define-key map (cadr c) (car c)))
     map))
@@ -5050,7 +5001,6 @@ and `gnus-mime-delete-part', and not provided at run-time normally."
          (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
@@ -5294,7 +5244,7 @@ are decompressed."
        ((numberp arg)
        (setq charset (or (cdr (assq arg
                                     gnus-summary-show-article-charset-alist))
-                         (mm-read-coding-system "Charset: ")))))
+                         (read-coding-system "Charset: ")))))
       (switch-to-buffer (generate-new-buffer filename))
       (if (or coding-system
              (and charset
@@ -5303,11 +5253,8 @@ are decompressed."
                   (not (eq coding-system '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)))
+           (insert (decode-coding-string contents coding-system))
+           (setq buffer-file-coding-system last-coding-system-used))
        (mm-disable-multibyte)
        (insert contents)
        (setq buffer-file-coding-system mm-binary-coding-system))
@@ -5325,7 +5272,7 @@ are decompressed."
   (gnus-article-check-buffer)
   (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
         (contents (and handle (mm-get-part handle)))
-        (file (mm-make-temp-file (expand-file-name "mm." mm-tmp-directory)))
+        (file (make-temp-file (expand-file-name "mm." mm-tmp-directory)))
         (printer (mailcap-mime-info (mm-handle-media-type handle) "print")))
     (when contents
        (if printer
@@ -5394,18 +5341,9 @@ Compressed files like .gz and .bz2 are decompressed."
       (let ((displayed-p (mm-handle-displayed-p handle)))
        (gnus-insert-mime-button handle (get-text-property btn 'gnus-part)
                                 (list displayed-p))
-       (if (featurep 'emacs)
-           (delete-region
-            (point)
-            (next-single-property-change (point) 'gnus-data nil (point-max)))
-         (let* ((end (next-single-property-change (point) 'gnus-data))
-                (annots (annotations-at (or end (point-max)))))
-           (delete-region (point)
-                          (if end
-                              (if annots (1+ end) end)
-                            (point-max)))
-           (dolist (annot annots)
-             (set-extent-endpoints annot (point) (point)))))
+       (delete-region
+        (point)
+        (next-single-property-change (point) 'gnus-data nil (point-max)))
        (setq start (point))
        (if (search-backward "\n\n" nil t)
            (progn
@@ -5466,7 +5404,7 @@ specified charset."
                           (or (cdr (assq
                                     arg
                                     gnus-summary-show-article-charset-alist))
-                              (mm-read-coding-system "Charset: "))))
+                              (read-coding-system "Charset: "))))
              (if (mm-handle-undisplayer handle)
                  (mm-remove-part handle)))
        (gnus-mime-set-charset-parameters handle charset)
@@ -5581,7 +5519,7 @@ If INTERACTIVE, call FUNCTION interactively."
                             window
                           (setq window (selected-window))
                           ;; Article may be displayed in the other frame.
-                          (gnus-select-frame-set-input-focus
+                          (select-frame-set-input-focus
                            (prog1
                                frame
                              (setq frame (selected-frame))))))
@@ -5609,7 +5547,7 @@ If INTERACTIVE, call FUNCTION interactively."
                             (get-text-property (point) 'gnus-data))))
                (set-marker overlay-arrow-position nil)
                (unless gnus-auto-select-part
-                 (gnus-select-frame-set-input-focus frame)
+                 (select-frame-set-input-focus frame)
                  (select-window window))))
            t))
       (if gnus-inhibit-mime-unbuttonizing
@@ -5788,18 +5726,9 @@ all parts."
       ;; Toggle the button appearance between `[button]...' and `[button]'.
       (let ((displayed-p (mm-handle-displayed-p handle)))
        (gnus-insert-mime-button handle id (list displayed-p))
-       (if (featurep 'emacs)
-           (delete-region
-            (point)
-            (next-single-property-change (point) 'gnus-data nil (point-max)))
-         (let* ((end (next-single-property-change (point) 'gnus-data))
-                (annots (annotations-at (or end (point-max)))))
-           (delete-region (point)
-                          (if end
-                              (if annots (1+ end) end)
-                            (point-max)))
-           (dolist (annot annots)
-             (set-extent-endpoints annot (point) (point)))))
+       (delete-region
+        (point)
+        (next-single-property-change (point) 'gnus-data nil (point-max)))
        (setq start (point))
        (if (search-backward "\n\n" nil t)
            (progn
@@ -5910,16 +5839,12 @@ all parts."
      :button-keymap gnus-mime-button-map
      :help-echo
      (lambda (widget)
-       ;; Needed to properly clear the message due to a bug in
-       ;; wid-edit (XEmacs only).
-       (if (boundp 'help-echo-owns-message)
-          (setq help-echo-owns-message t))
        (format
        "%S: %s the MIME part; %S: more options"
-       (aref gnus-mouse-2 0)
+       'mouse-2
        (if (mm-handle-displayed-p (widget-get widget :mime-handle))
            "hide" "show")
-       (aref gnus-down-mouse-3 0))))))
+       'down-mouse-3)))))
 
 (defun gnus-widget-press-button (elems _el)
   (goto-char (widget-get elems :from))
@@ -6164,8 +6089,7 @@ If nil, don't show those extra buttons."
 
 (defun gnus-article-insert-newline ()
   "Insert a newline, but mark it as undeletable."
-  (gnus-put-text-property
-   (point) (progn (insert "\n") (point)) 'gnus-undeletable t))
+  (put-text-property (point) (progn (insert "\n") (point)) 'gnus-undeletable t))
 
 (defun gnus-mime-display-alternative (handles &optional preferred ibegend id)
   (let* ((preferred (or preferred (mm-preferred-alternative handles)))
@@ -6191,7 +6115,7 @@ If nil, don't show those extra buttons."
                  (not preferred)
                  (not (gnus-unbuttonized-mime-type-p
                        "multipart/alternative")))
-         (gnus-add-text-properties
+         (add-text-properties
           (setq from (point))
           (progn
             (insert (format "%d.  " id))
@@ -6204,17 +6128,16 @@ If nil, don't show those extra buttons."
               (gnus-mime-display-alternative
                ',ihandles ',not-pref ',begend ,id))
             keymap ,gnus-mime-button-map
-            ,gnus-mouse-face-prop ,gnus-article-mouse-face
+            mouse-face ,gnus-article-mouse-face
             face ,gnus-article-button-face
             gnus-part ,id
             article-type multipart
             rear-nonsticky t))
          (widget-convert-button 'link from (point)
-                                :action 'gnus-widget-press-button
-                                :button-keymap gnus-widget-button-keymap)
+                                :action 'gnus-widget-press-button)
          ;; Do the handles
          (while (setq handle (pop handles))
-           (gnus-add-text-properties
+           (add-text-properties
             (setq from (point))
             (progn
               (insert (format "(%c) %-18s"
@@ -6229,14 +6152,13 @@ If nil, don't show those extra buttons."
                 (gnus-mime-display-alternative
                  ',ihandles ',handle ',begend ,id))
               keymap ,gnus-mime-button-map
-              ,gnus-mouse-face-prop ,gnus-article-mouse-face
+              mouse-face ,gnus-article-mouse-face
               face ,gnus-article-button-face
               gnus-part ,id
               gnus-data ,handle
               rear-nonsticky t))
            (widget-convert-button 'link from (point)
-                                  :action 'gnus-widget-press-button
-                                  :button-keymap gnus-widget-button-keymap)
+                                  :action 'gnus-widget-press-button)
            (insert "  "))
          (insert "\n\n"))
        (when preferred
@@ -6350,7 +6272,7 @@ Provided for backwards compatibility."
                 (not (with-current-buffer gnus-summary-buffer
                        gnus-have-all-headers)))
             (not gnus-inhibit-hiding))
-    (gnus-article-hide-headers)))
+    (article-hide-headers)))
 
 (declare-function shr-put-image "shr" (data alt &optional flags))
 
@@ -6506,14 +6428,13 @@ the coding cookie."
       (when coding
        ;; If the coding system is not suitable to encode the text,
        ;; ask a user for a proper one.
-       (when (fboundp 'select-safe-coding-system)
-         (setq coding (coding-system-base
-                       (save-window-excursion
-                         (select-safe-coding-system (point-min) (point-max)
-                                                    coding))))
-         (setq coding-system-for-write
-               (or (cdr (assq coding '((mule-utf-8 . utf-8))))
-                   coding)))
+       (setq coding (coding-system-base
+                     (save-window-excursion
+                       (select-safe-coding-system (point-min) (point-max)
+                                                  coding))))
+       (setq coding-system-for-write
+             (or (cdr (assq coding '((mule-utf-8 . utf-8))))
+                 coding))
        (goto-char (point-min))
        ;; Add the coding cookie.
        (insert (format "X-Gnus-Coding-System: -*- coding: %s; -*-\n\n"
@@ -6584,14 +6505,14 @@ If given a numerical ARG, move forward ARG pages."
   (interactive)
   (when (gnus-article-next-page)
     (goto-char (point-min))
-    (gnus-article-read-summary-keys nil (gnus-character-to-event ?n))))
+    (gnus-article-read-summary-keys nil ?n)))
 
 
 (defun gnus-article-goto-prev-page ()
   "Show the previous page of the article."
   (interactive)
   (if (save-restriction (widen) (bobp)) ;; Real beginning-of-buffer?
-      (gnus-article-read-summary-keys nil (gnus-character-to-event ?p))
+      (gnus-article-read-summary-keys nil ?p)
     (gnus-article-prev-page nil)))
 
 ;; This is cleaner but currently breaks `gnus-pick-mode':
@@ -6613,12 +6534,10 @@ If given a numerical ARG, move forward ARG pages."
 If end of article, return non-nil.  Otherwise return nil.
 Argument LINES specifies lines to be scrolled up."
   (interactive "p")
-  (move-to-window-line (if (featurep 'xemacs) -1 (- -1 scroll-margin)))
+  (move-to-window-line (- -1 scroll-margin))
   (if (and (not (and gnus-article-over-scroll
                     (> (count-lines (window-start) (point-max))
-                       (if (featurep 'xemacs)
-                           (or lines (1- (window-height)))
-                         (+ (or lines (1- (window-height))) scroll-margin)))))
+                       (+ (or lines (1- (window-height))) scroll-margin))))
           (save-excursion
             (end-of-line)
             (and (pos-visible-in-window-p)     ;Not continuation line.
@@ -6642,20 +6561,18 @@ Argument LINES specifies lines to be scrolled up."
 
 (defun gnus-article-beginning-of-window ()
   "Move point to the beginning of the window.
-In Emacs, the point is placed at the line number which `scroll-margin'
+The point is placed at the line number which `scroll-margin'
 specifies."
-  (if (featurep 'xemacs)
-      (move-to-window-line 0)
-    ;; There is an obscure bug in Emacs that makes it impossible to
-    ;; scroll past big pictures in the article buffer.  Try to fix
-    ;; this by adding a sanity check by counting the lines visible.
-    (when (> (count-lines (window-start) (window-end)) 30)
-      (move-to-window-line
-       (min (max 0 scroll-margin)
-           (max 1 (- (window-height)
-                     (if mode-line-format 1 0)
-                     (if header-line-format 1 0)
-                     2)))))))
+  ;; There is an obscure bug in Emacs that makes it impossible to
+  ;; scroll past big pictures in the article buffer.  Try to fix
+  ;; this by adding a sanity check by counting the lines visible.
+  (when (> (count-lines (window-start) (window-end)) 30)
+    (move-to-window-line
+     (min (max 0 scroll-margin)
+         (max 1 (- (window-height)
+                   (if mode-line-format 1 0)
+                   (if header-line-format 1 0)
+                   2))))))
 
 (defvar scroll-in-place)
 
@@ -6682,10 +6599,7 @@ Argument LINES specifies lines to be scrolled down."
        (goto-char (point-max))
        (recenter (if gnus-article-over-scroll
                      (if lines
-                         (max (if (featurep 'xemacs)
-                                  lines
-                                (+ lines scroll-margin))
-                              3)
+                         (max (+ lines scroll-margin) 3)
                        (- (window-height) 2))
                    -1)))
     (prog1
@@ -6766,9 +6680,7 @@ not have a face in `gnus-article-boring-faces'."
       (let (gnus-pick-mode)
        (setq unread-command-events (nconc unread-command-events
                                           (list (or key last-command-event)))
-             keys (if (featurep 'xemacs)
-                      (events-to-keys (read-key-sequence nil t))
-                    (read-key-sequence nil t)))))
+             keys (read-key-sequence nil t))))
 
     (message "")
 
@@ -6816,7 +6728,7 @@ not have a face in `gnus-article-boring-faces'."
                                                (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-frame-set-input-focus (window-frame win))
                 (select-window win))))
        (setq in-buffer (current-buffer))
        ;; We disable the pick minor mode commands.
@@ -6869,27 +6781,25 @@ not have a face in `gnus-article-boring-faces'."
 
 (defun gnus-article-read-summary-send-keys ()
   (interactive)
-  (let ((unread-command-events (list (gnus-character-to-event ?S))))
+  (let ((unread-command-events (list ?S)))
     (gnus-article-read-summary-keys)))
 
 (defun gnus-article-describe-key (key)
   "Display documentation of the function invoked by KEY.
 KEY is a string or a vector."
-  (interactive (list (let ((cursor-in-echo-area t)) ;; better for XEmacs.
+  (interactive (list (let ((cursor-in-echo-area t))
                       (read-key-sequence "Describe key: "))))
   (gnus-article-check-buffer)
   (if (memq (key-binding key t) '(gnus-article-read-summary-keys
                                  gnus-article-read-summary-send-keys))
       (with-current-buffer gnus-article-current-summary
        (setq unread-command-events
-             (if (featurep 'xemacs)
-                 (append key unread-command-events)
-               (nconc
-                (mapcar (lambda (x) (if (and (integerp x) (>= x 128))
-                                        (list 'meta (- x 128))
-                                      x))
-                        key)
-                unread-command-events)))
+             (nconc
+              (mapcar (lambda (x) (if (and (integerp x) (>= x 128))
+                                      (list 'meta (- x 128))
+                                    x))
+                      key)
+              unread-command-events))
        (let ((cursor-in-echo-area t)
              gnus-pick-mode)
          (describe-key (read-key-sequence nil t))))
@@ -6898,7 +6808,7 @@ KEY is a string or a vector."
 (defun gnus-article-describe-key-briefly (key &optional insert)
   "Display documentation of the function invoked by KEY.
 KEY is a string or a vector."
-  (interactive (list (let ((cursor-in-echo-area t)) ;; better for XEmacs.
+  (interactive (list (let ((cursor-in-echo-area t))
                       (read-key-sequence "Describe key: "))
                     current-prefix-arg))
   (gnus-article-check-buffer)
@@ -6906,14 +6816,12 @@ KEY is a string or a vector."
                                  gnus-article-read-summary-send-keys))
       (with-current-buffer gnus-article-current-summary
        (setq unread-command-events
-             (if (featurep 'xemacs)
-                 (append key unread-command-events)
-               (nconc
-                (mapcar (lambda (x) (if (and (integerp x) (>= x 128))
-                                        (list 'meta (- x 128))
-                                      x))
-                        key)
-                unread-command-events)))
+             (nconc
+              (mapcar (lambda (x) (if (and (integerp x) (>= x 128))
+                                      (list 'meta (- x 128))
+                                    x))
+                      key)
+              unread-command-events))
        (let ((cursor-in-echo-area t)
              gnus-pick-mode)
          (describe-key-briefly (read-key-sequence nil t) insert)))
@@ -6987,13 +6895,12 @@ the entire article will be yanked."
   (interactive)
   (let ((article (cdr gnus-article-current))
        contents)
-    (if (not (gnus-region-active-p))
+    (if (not (and transient-mark-mode mark-active))
        (with-current-buffer gnus-summary-buffer
          (gnus-summary-reply (list (list article)) wide))
       (setq contents (buffer-substring (point) (mark t)))
       ;; Deactivate active regions.
-      (when (and (boundp 'transient-mark-mode)
-                transient-mark-mode)
+      (when transient-mark-mode
        (setq mark-active nil))
       (with-current-buffer gnus-summary-buffer
        (gnus-summary-reply
@@ -7013,13 +6920,12 @@ the entire article will be yanked."
   (interactive)
   (let ((article (cdr gnus-article-current))
        contents)
-      (if (not (gnus-region-active-p))
+      (if (not (and transient-mark-mode mark-active))
          (with-current-buffer gnus-summary-buffer
            (gnus-summary-followup (list (list article))))
        (setq contents (buffer-substring (point) (mark t)))
        ;; Deactivate active regions.
-       (when (and (boundp 'transient-mark-mode)
-                  transient-mark-mode)
+       (when transient-mark-mode
          (setq mark-active nil))
        (with-current-buffer gnus-summary-buffer
          (gnus-summary-followup
@@ -7031,10 +6937,11 @@ This means that signatures, cited text and (some) headers will be
 hidden.
 If given a prefix, show the hidden text instead."
   (interactive (append (gnus-article-hidden-arg) (list 'force)))
-  (gnus-article-hide-headers arg)
-  (gnus-article-hide-list-identifiers arg)
-  (gnus-article-hide-citation-maybe arg force)
-  (gnus-article-hide-signature arg))
+  (gnus-with-article-buffer
+    (article-hide-headers arg)
+    (article-hide-list-identifiers)
+    (gnus-article-hide-citation-maybe arg force)
+    (article-hide-signature arg)))
 
 (defun gnus-check-group-server ()
   ;; Make sure the connection to the server is alive.
@@ -7120,7 +7027,7 @@ If given a prefix, show the hidden text instead."
             ;; equivalent of string-make-multibyte which amount to decoding
             ;; with locale-coding-system, causing failure of
             ;; subsequent decoding.
-            (insert (mm-string-to-multibyte
+            (insert (string-to-multibyte
                      (with-current-buffer gnus-original-article-buffer
                        (buffer-substring (point-min) (point-max)))))
            'article)
@@ -7338,7 +7245,8 @@ groups."
   (when (and (not force)
             (gnus-group-read-only-p))
     (error "The current newsgroup does not support article editing"))
-  (gnus-article-date-original)
+  (gnus-with-article-buffer
+    (article-date-original))
   (gnus-article-edit-article
    'ignore
    `(lambda (no-highlight)
@@ -7441,31 +7349,26 @@ groups."
    "\\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:
-         ;; http://thread.gmane.org/47B4E3B2.3050402@gmail.com
-         "[" chars punct "]+" "(" "[" chars punct "]+" "[" chars "]*)"
-         "\\(?:" "[" chars punct "]+" "[" chars "]" "\\)?"
-         "\\|"
-         "[" chars punct "]+" "[" chars "]"
-         "\\)"))
-     (concat ;; XEmacs 21.4 doesn't support POSIX.
-      "\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+"
-      "\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)"))
+   (let ((chars "-a-z0-9_=#$@~%&*+\\/[:word:]")
+        (punct "!?:;.,"))
+     (concat
+      "\\(?:"
+      ;; Match paired parentheses, e.g. in Wikipedia URLs:
+      ;; http://thread.gmane.org/47B4E3B2.3050402@gmail.com
+      "[" chars punct "]+" "(" "[" chars punct "]+" "[" chars "]*)"
+      "\\(?:" "[" chars punct "]+" "[" chars "]" "\\)?"
+      "\\|"
+      "[" chars punct "]+" "[" chars "]"
+      "\\)"))
    "\\)")
   "Regular expression that matches URLs."
   :version "24.4"
   :group 'gnus-article-buttons
   :type 'regexp)
 
-(defcustom gnus-button-valid-fqdn-regexp
-  message-valid-fqdn-regexp
+(defcustom gnus-button-valid-fqdn-regexp "\\([-A-Za-z0-9]+\\.\\)+[A-Za-z]+"
   "Regular expression that matches a valid FQDN."
-  :version "22.1"
+  :version "25.2"
   :group 'gnus-article-buttons
   :type 'regexp)
 
@@ -7582,7 +7485,7 @@ address, `ask' if unsure and `invalid' if the string is invalid."
        (list gnus-button-mid-or-mail-heuristic-alist)
        (result 0) rate regexp lpartlen elem)
     (setq lpartlen
-         (length (gnus-replace-in-string mid-or-mail "^\\(.*\\)@.*$" "\\1")))
+         (length (replace-regexp-in-string "^\\(.*\\)@.*$" "\\1" mid-or-mail)))
     (gnus-message 8 "`%s', length of local part=`%s'." mid-or-mail lpartlen)
     ;; Certain special cases...
     (when (string-match
@@ -7653,7 +7556,7 @@ address, `ask' if unsure and `invalid' if the string is invalid."
       (setq guessed
            ;; get rid of surrounding angles...
            (funcall pref
-                    (gnus-replace-in-string mid-or-mail "^<\\|>$" "")))
+                    (replace-regexp-in-string "^<\\|>$" "" mid-or-mail)))
       (if (or (eq 'mid guessed) (eq 'mail guessed))
          (setq pref guessed)
        (setq pref 'ask)))
@@ -7685,13 +7588,13 @@ as a symbol to FUN."
   "Call `describe-function' when pushing the corresponding URL button."
   (describe-function
    (intern
-    (gnus-replace-in-string url gnus-button-handle-describe-prefix ""))))
+    (replace-regexp-in-string gnus-button-handle-describe-prefix "" url))))
 
 (defun gnus-button-handle-describe-variable (url)
   "Call `describe-variable' when pushing the corresponding URL button."
   (describe-variable
    (intern
-    (gnus-replace-in-string url gnus-button-handle-describe-prefix ""))))
+    (replace-regexp-in-string gnus-button-handle-describe-prefix "" url))))
 
 (defun gnus-button-handle-symbol (url)
 "Display help on variable or function.
@@ -7705,7 +7608,7 @@ Calls `describe-variable' or `describe-function'."
 (defun gnus-button-handle-describe-key (url)
   "Call `describe-key' when pushing the corresponding URL button."
   (let* ((key-string
-         (gnus-replace-in-string url gnus-button-handle-describe-prefix ""))
+         (replace-regexp-in-string gnus-button-handle-describe-prefix "" url))
         (keys (ignore-errors (eval `(kbd ,key-string)))))
     (if keys
        (describe-key keys)
@@ -7713,30 +7616,28 @@ Calls `describe-variable' or `describe-function'."
 
 (defun gnus-button-handle-apropos (url)
   "Call `apropos' when pushing the corresponding URL button."
-  (apropos (gnus-replace-in-string url gnus-button-handle-describe-prefix "")))
+  (apropos (replace-regexp-in-string gnus-button-handle-describe-prefix "" url)))
 
 (defun gnus-button-handle-apropos-command (url)
   "Call `apropos' when pushing the corresponding URL button."
   (apropos-command
-   (gnus-replace-in-string url gnus-button-handle-describe-prefix "")))
+   (replace-regexp-in-string gnus-button-handle-describe-prefix "" url)))
 
 (defun gnus-button-handle-apropos-variable (url)
   "Call `apropos' when pushing the corresponding URL button."
-  (funcall
-   (if (fboundp 'apropos-variable) 'apropos-variable 'apropos)
-   (gnus-replace-in-string url gnus-button-handle-describe-prefix "")))
+  (apropos-variable
+   (replace-regexp-in-string gnus-button-handle-describe-prefix "" url)))
 
 (defun gnus-button-handle-apropos-documentation (url)
   "Call `apropos' when pushing the corresponding URL button."
-  (funcall
-   (if (fboundp 'apropos-documentation) 'apropos-documentation 'apropos)
-   (gnus-replace-in-string url gnus-button-handle-describe-prefix "")))
+  (apropos-documentation
+   (replace-regexp-in-string gnus-button-handle-describe-prefix "" url)))
 
 (defun gnus-button-handle-library (url)
   "Call `locate-library' when pushing the corresponding URL button."
   (gnus-message 9 "url=`%s'" url)
   (let* ((lib (locate-library url))
-        (file (gnus-replace-in-string (or lib "") "\\.elc" ".el")))
+        (file (replace-regexp-in-string "\\.elc" ".el" (or lib ""))))
     (if (not lib)
        (gnus-message 1 "Cannot locale library `%s'." url)
       (find-file-read-only file))))
@@ -8030,14 +7931,14 @@ do the highlighting.  See the documentation for those functions."
          (when (and header-face
                     (not (memq (point) hpoints)))
            (push (point) hpoints)
-           (gnus-put-text-property from (point) 'face header-face))
+           (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)))))))
+           (put-text-property from (point) 'face field-face)))))))
 
 (defun gnus-article-highlight-signature ()
   "Highlight the signature in an article.
@@ -8092,7 +7993,7 @@ specified by `gnus-button-alist'."
                           (gnus-article-extend-url-button from start end))
                (gnus-article-add-button start end
                                         'gnus-button-push (list from entry))
-               (gnus-put-text-property
+               (put-text-property
                 start end
                 'gnus-string (buffer-substring-no-properties
                               start end))))))))))
@@ -8194,16 +8095,15 @@ url is put as the `gnus-button-url' overlay property on the button."
   (when gnus-article-button-face
     (overlay-put (make-overlay from to nil t)
                 'face gnus-article-button-face))
-  (gnus-add-text-properties
+  (add-text-properties
    from to
    (nconc (and gnus-article-mouse-face
-              (list gnus-mouse-face-prop gnus-article-mouse-face))
+              (list 'mouse-face gnus-article-mouse-face))
          (list 'gnus-callback fun)
          (and data (list 'gnus-data data))))
   (widget-convert-button 'link from to :action 'gnus-widget-press-button
                         :help-echo (or text "Follow the link")
-                        :keymap gnus-url-button-map
-                        :button-keymap gnus-widget-button-keymap))
+                        :keymap gnus-url-button-map))
 
 (defun gnus-article-copy-string ()
   "Copy the string in the button to the kill ring."
@@ -8335,13 +8235,13 @@ url is put as the `gnus-button-url' overlay property on the button."
   "Fetch a man page."
   (gnus-message 9 "`%s' `%s'" gnus-button-man-handler url)
   (when (eq gnus-button-man-handler 'woman)
-    (setq url (gnus-replace-in-string url "([1-9][X1a-z]*).*\\'" "")))
+    (setq url (replace-regexp-in-string "([1-9][X1a-z]*).*\\'" "" url)))
   (gnus-message 9 "`%s' `%s'" gnus-button-man-handler url)
   (funcall gnus-button-man-handler url))
 
 (defun gnus-button-handle-info-url (url)
   "Fetch an info URL."
-  (setq url (mm-subst-char-in-string ?+ ?\  url))
+  (setq url (subst-char-in-string ?+ ?\  url))
   (cond
    ((string-match "^\\([^:/]+\\)?/\\(.*\\)" url)
     (gnus-info-find-node
@@ -8350,14 +8250,14 @@ url is put as the `gnus-button-url' overlay property on the button."
             ")" (gnus-url-unhex-string (match-string 2 url)))))
    ((string-match "([^)\"]+)[^\"]+" url)
     (setq url
-         (gnus-replace-in-string
-          (gnus-replace-in-string url "[\n\t ]+" " ") "\"" ""))
+         (replace-regexp-in-string
+          "\"" "" (replace-regexp-in-string "[\n\t ]+" " " url)))
     (gnus-info-find-node url))
    (t (error "Can't parse %s" url))))
 
 (defun gnus-button-handle-info-url-gnome (url)
   "Fetch GNOME style info URL."
-  (setq url (mm-subst-char-in-string ?_ ?\  url))
+  (setq url (subst-char-in-string ?_ ?\  url))
   (if (string-match "\\([^#]+\\)#?\\(.*\\)" url)
       (gnus-info-find-node
        (concat "("
@@ -8489,9 +8389,9 @@ url is put as the `gnus-button-url' overlay property on the button."
       (if (fboundp func)
          (funcall func)
        (message-position-on-field (caar args)))
-      (insert (gnus-replace-in-string
-              (mapconcat 'identity (reverse (cdar args)) ", ")
-              "\r\n" "\n" t))
+      (insert (replace-regexp-in-string
+              "\r\n" "\n"
+              (mapconcat 'identity (reverse (cdar args)) ", ") nil t))
       (setq args (cdr args)))
     (if subject
        (message-goto-body)
@@ -8508,13 +8408,13 @@ url is put as the `gnus-button-url' overlay property on the button."
 
 (defvar gnus-prev-page-map
   (let ((map (make-sparse-keymap)))
-    (define-key map gnus-mouse-2 'gnus-button-prev-page)
+    (define-key map [mouse-2] 'gnus-button-prev-page)
     (define-key map "\r" 'gnus-button-prev-page)
     map))
 
 (defvar gnus-next-page-map
   (let ((map (make-sparse-keymap)))
-    (define-key map gnus-mouse-2 'gnus-button-next-page)
+    (define-key map [mouse-2] 'gnus-button-next-page)
     (define-key map "\r" 'gnus-button-next-page)
     map))
 
@@ -8828,8 +8728,8 @@ For example:
 
 (defvar gnus-mime-security-button-map
   (let ((map (make-sparse-keymap)))
-    (define-key map gnus-mouse-2 'gnus-article-push-button)
-    (define-key map gnus-down-mouse-3 'gnus-mime-security-button-menu)
+    (define-key map [mouse-2] 'gnus-article-push-button)
+    (define-key map [down-mouse-3] 'gnus-mime-security-button-menu)
     (dolist (c gnus-mime-security-button-commands)
       (define-key map (cadr c) (car c)))
     map))
@@ -8973,14 +8873,10 @@ For example:
      :button-keymap gnus-mime-security-button-map
      :help-echo
      (lambda (_widget)
-       ;; Needed to properly clear the message due to a bug in
-       ;; wid-edit (XEmacs only).
-       (when (boundp 'help-echo-owns-message)
-        (setq help-echo-owns-message t))
        (format
        "%S: show detail; %S: more options"
-       (aref gnus-mouse-2 0)
-       (aref gnus-down-mouse-3 0))))))
+       'mouse-2
+       'down-mouse-3)))))
 
 (defun gnus-mime-display-security (handle)
   (save-restriction
@@ -9026,8 +8922,6 @@ For example:
   (interactive)
   (gnus-mime-security-run-function 'mm-pipe-part))
 
-(gnus-ems-redefine)
-
 (provide 'gnus-art)
 
 (run-hooks 'gnus-art-load-hook)
index a1408259ec5ac7c9a21cc0f574177a3772224886..ba72d820431d3c25f1c931a790291578459b2887 100644 (file)
@@ -148,18 +148,13 @@ that was fetched."
     (with-current-buffer gnus-summary-buffer
       (let ((next (caadr (gnus-data-find-list article))))
        (when next
-         (if (not (fboundp 'run-with-idle-timer))
-             ;; This is either an older Emacs or XEmacs, so we
-             ;; do this, which leads to slightly slower article
-             ;; buffer display.
-             (gnus-async-prefetch-article group next summary)
-           (when gnus-async-timer
-             (ignore-errors
-               (nnheader-cancel-timer 'gnus-async-timer)))
-           (setq gnus-async-timer
-                 (run-with-idle-timer
-                  0.1 nil 'gnus-async-prefetch-article
-                  group next summary))))))))
+         (when gnus-async-timer
+           (ignore-errors
+             (nnheader-cancel-timer 'gnus-async-timer)))
+         (setq gnus-async-timer
+               (run-with-idle-timer
+                0.1 nil 'gnus-async-prefetch-article
+                group next summary)))))))
 
 (defun gnus-async-prefetch-article (group article summary &optional next)
   "Possibly prefetch several articles starting with ARTICLE."
index b7a63659d82ef8ad3900db0ee43b2ba5656da8fc..d5c7e0ee081f8bc3bb51b60a5725befcae8f92a9 100644 (file)
@@ -83,7 +83,7 @@
            (insert-buffer-substring buffer)
            ;; Tag the beginning of the article with the ident.
            (if (> (point-max) b)
-             (gnus-put-text-property b (1+ b) 'gnus-backlog ident)
+             (put-text-property b (1+ b) 'gnus-backlog ident)
              (gnus-error 3 "Article %d is blank" number))))))))
 
 (defun gnus-backlog-remove-oldest-article ()
index 1a082c255b675373de2f356c7e32eb70b80b1507..7e18d5e3d9994ca69eac1ea83fc8b6abf4fa0dd9 100644 (file)
@@ -174,17 +174,6 @@ where each BMK is of the form
 
 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)
-      '(device-on-window-system-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."
@@ -209,7 +198,7 @@ So the cdr of each bookmark is an alist too.")
       ;; Set the bookmark list
       (setq gnus-bookmark-alist
            (cons
-            (list (gnus-bookmark-remove-properties bmk-name)
+            (list (substring-no-properties bmk-name)
                   (gnus-bookmark-make-record
                    group message-id author date subject annotation))
             gnus-bookmark-alist))))
@@ -220,12 +209,12 @@ So the cdr of each bookmark is an alist too.")
   (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)))))
+        `((group . ,(substring-no-properties group))
+          (message-id . ,(substring-no-properties message-id))
+          (author . ,(substring-no-properties author))
+          (date . ,(substring-no-properties date))
+          (subject . ,(substring-no-properties subject))
+          (annotation . ,(substring-no-properties annotation)))))
     the-record))
 
 (defun gnus-bookmark-set-bookmark-name (group author subject)
@@ -237,7 +226,7 @@ So the cdr of each bookmark is an alist too.")
                   "-" (car subject) "-" (cadr subject)))
         (default-name-1
           ;; Strip "[]" chars from the bookmark name:
-          (gnus-replace-in-string default-name-0 "[]_[]" ""))
+          (replace-regexp-in-string "[]_[]" "" default-name-0))
         (name (read-from-minibuffer
                (format "Set bookmark (%s): " default-name-1)
                nil nil nil nil
@@ -367,7 +356,7 @@ 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 (gmm-called-interactively-p 'any)
+  (if (called-interactively-p 'any)
       (switch-to-buffer (get-buffer-create "*Gnus Bookmark List*"))
     (set-buffer (get-buffer-create "*Gnus Bookmark List*")))
   (let ((inhibit-read-only t)
@@ -387,7 +376,7 @@ deletion, or > if it is flagged for displaying."
       (insert (if (member (gnus-bookmark-get-annotation name) (list nil ""))
                  "  "
                " *"))
-      (if (gnus-bookmark-mouse-available-p)
+      (if (display-mouse-p)
          (add-text-properties
           (prog1
               (point)
@@ -400,7 +389,7 @@ deletion, or > if it is flagged for displaying."
               (insert "\n")))
           `(mouse-face highlight follow-link t
                        help-echo ,(format "%s: go to this article"
-                                          (aref gnus-mouse-2 0))))
+                                          'mouse-2)))
        (insert name "\n")))
     (goto-char (point-min))
     (forward-line 2)
@@ -443,9 +432,7 @@ That is, all information but the name."
     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 "q" 'quit-window)
   (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)
@@ -463,7 +450,7 @@ That is, all information but the name."
   (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
+  (define-key gnus-bookmark-bmenu-mode-map [mouse-2]
     'gnus-bookmark-bmenu-select-by-mouse))
 
 ;; Bookmark Buffer Menu mode is suitable only for specially formatted
@@ -536,7 +523,7 @@ Optional argument SHOW means show them unconditionally."
              (let ((start (point-at-eol)))
                (move-to-column gnus-bookmark-bmenu-file-column t)
                ;; Strip off `mouse-face' from the white spaces region.
-               (if (gnus-bookmark-mouse-available-p)
+               (if (display-mouse-p)
                    (remove-text-properties start (point)
                                            '(mouse-face nil help-echo nil))))
              (delete-region (point) (progn (end-of-line) (point)))
@@ -552,7 +539,7 @@ Optional argument SHOW means show them unconditionally."
        (insert (gnus-bookmark-get-details
                 bmk-name
                 gnus-bookmark-bookmark-inline-details))
-      (if (gnus-bookmark-mouse-available-p)
+      (if (display-mouse-p)
          (add-text-properties
           start
           (save-excursion (re-search-backward
@@ -561,7 +548,7 @@ Optional argument SHOW means show them unconditionally."
           `(mouse-face highlight
             follow-link t
             help-echo ,(format "%s: go to this article"
-                               (aref gnus-mouse-2 0))))))))
+                               'mouse-2)))))))
 
 (defun gnus-bookmark-kill-line (&optional newline-too)
   "Kill from point to end of line.
@@ -601,7 +588,7 @@ Does not affect the kill ring."
                 (gnus-bookmark-kill-line)
                (let ((start (point)))
                  (insert (car gnus-bookmark-bmenu-hidden-bookmarks))
-                 (if (gnus-bookmark-mouse-available-p)
+                 (if (display-mouse-p)
                      (add-text-properties
                       start
                       (save-excursion (re-search-backward
@@ -611,7 +598,7 @@ Does not affect the kill ring."
                         follow-link t
                         help-echo
                         ,(format "%s: go to this bookmark in other window"
-                                 (aref gnus-mouse-2 0))))))
+                                 'mouse-2)))))
                 (setq gnus-bookmark-bmenu-hidden-bookmarks
                       (cdr gnus-bookmark-bmenu-hidden-bookmarks))
                 (forward-line 1))))))))
index 83ccc4fc4a15c7a9a43c0f5f6884a787a7ae0626..050e8cd78950352d4f6e5dbab85628b22f86f8b1 100644 (file)
@@ -453,13 +453,11 @@ system for example was used.")
   (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))))
+                       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)
+       (push (cons (decode-coding-string
+                    (encode-coding-string decoded coding)
                     coding)
                    group)
              gnus-cache-unified-group-names)
index 502a3be355502e107c0c539e29a239b5b5fa63cd..4f05d2ee9d519c62555beb9614ce39f8bd427e19 100644 (file)
@@ -24,9 +24,6 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (require 'easy-mmode))) ; for `define-minor-mode'
 
 (require 'gnus)
 (require 'gnus-range)
@@ -530,7 +527,6 @@ longer than the frame width."
          (inhibit-point-motion-hooks t)
          (marks (gnus-dissect-cited-text))
          (adaptive-fill-mode nil)
-         (filladapt-mode nil)
          (fill-column (if width (prefix-numeric-value width) fill-column)))
       (save-restriction
        (while (cdr marks)
@@ -1121,7 +1117,7 @@ See also the documentation for `gnus-article-highlight-citation'."
              ((assq number gnus-cite-attribution-alist))
              (t
               (gnus-add-wash-type 'cite)
-              (gnus-add-text-properties
+              (add-text-properties
                (point) (progn (forward-line 1) (point))
                (nconc (list 'article-type 'cite)
                       gnus-hidden-properties))))
@@ -1194,9 +1190,7 @@ Returns nil if there is no such line before LIMIT, t otherwise."
 (defvar font-lock-keywords)
 (defvar font-lock-set-defaults)
 
-(eval-and-compile
-  (unless (featurep 'xemacs)
-    (autoload 'font-lock-set-defaults "font-lock")))
+(autoload 'font-lock-set-defaults "font-lock")
 
 (define-minor-mode gnus-message-citation-mode
   "Minor mode providing more font-lock support for nested citations.
@@ -1206,9 +1200,7 @@ When enabled, it automatically turns on `font-lock-mode'."
   nil ;; keymap
   (when (eq major-mode 'message-mode)   ;FIXME: Use derived-mode-p.
     ;; FIXME: Use font-lock-add-keywords!
-    (let ((defaults (car (if (featurep 'xemacs)
-                            (get 'message-mode 'font-lock-defaults)
-                          font-lock-defaults)))
+    (let ((defaults (car font-lock-defaults))
          default keywords)
       (while defaults
        (setq default (if (consp defaults)
@@ -1227,19 +1219,11 @@ When enabled, it automatically turns on `font-lock-mode'."
                         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))
+    (setq font-lock-set-defaults nil)
     (font-lock-set-defaults)
-    (cond (font-lock-mode
-           (if (fboundp 'font-lock-flush)
-               (font-lock-flush)
-             (font-lock-fontify-buffer)))
-         (gnus-message-citation-mode
-          (font-lock-mode 1)))))
+    (if font-lock-mode
+       (font-lock-flush)
+      (gnus-message-citation-mode (font-lock-mode 1)))))
 
 (defun turn-on-gnus-message-citation-mode ()
   "Turn on `gnus-message-citation-mode'."
@@ -1248,8 +1232,6 @@ When enabled, it automatically turns on `font-lock-mode'."
   "Turn off `gnus-message-citation-mode'."
   (gnus-message-citation-mode -1))
 
-(gnus-ems-redefine)
-
 (provide 'gnus-cite)
 
 ;; Local Variables:
index de66e34fb944d34991b443e8215f5f0b8723dce9..669de2bb79a6249246fad85da572755308dce2ff 100644 (file)
@@ -416,7 +416,7 @@ category."))
       ;; Decode values posting-style holds.
       (dolist (style (cdr (assq 'posting-style values)))
        (when (stringp (cadr style))
-         (setcdr style (list (mm-decode-coding-string (cadr style) 'utf-8)))))
+         (setcdr style (list (decode-coding-string (cadr style) 'utf-8)))))
 
       (setq gnus-custom-params
             (apply 'widget-create 'group
@@ -492,7 +492,7 @@ form, but who cares?"
     ;; Encode values posting-style holds.
     (dolist (style (cdr (assq 'posting-style params)))
       (when (stringp (cadr style))
-       (setcdr style (list (mm-encode-coding-string (cadr style) 'utf-8)))))
+       (setcdr style (list (encode-coding-string (cadr style) 'utf-8)))))
     (if gnus-custom-topic
        (gnus-topic-set-parameters gnus-custom-topic params)
       (gnus-group-edit-group-done 'params gnus-custom-group params)
index 93069e5e4e8fb5de4d2a035b5dfbc5cdb65c29a4..2f387fc336b3fc822afebe194fb9dd09a303424f 100644 (file)
@@ -103,10 +103,10 @@ DELAY is a string, giving the length of the time.  Possible values are:
           (aset deadline 1 minute)
           (aset deadline 2 hour)
           ;; Convert to seconds.
-          (setq deadline (gnus-float-time (apply 'encode-time
-                                                 (append deadline nil))))
+          (setq deadline (float-time (apply 'encode-time
+                                            (append deadline nil))))
           ;; If this time has passed already, add a day.
-          (when (< deadline (gnus-float-time))
+          (when (< deadline (float-time))
             (setq deadline (+ 86400 deadline))) ; 86400 secs/day
           ;; Convert seconds to date header.
           (setq deadline (message-make-date
@@ -129,7 +129,7 @@ DELAY is a string, giving the length of the time.  Possible values are:
                 (t
                  (setq delay (* num 60))))
           (setq deadline (message-make-date
-                          (seconds-to-time (+ (gnus-float-time) delay)))))
+                          (seconds-to-time (+ (float-time) delay)))))
          (t (error "Malformed delay `%s'" delay)))
     (message-add-header (format "%s: %s" gnus-delay-header deadline)))
   (set-buffer-modified-p t)
index eb7d0f871551bbfd0ca0f0e090f084d3a5d1449f..1d4b021d7fae39b08dc7726c50102c4aacdd9b97 100644 (file)
@@ -93,10 +93,7 @@ Emacs has been idle for IDLE `gnus-demon-timestep's."
 
 (defun gnus-demon-idle-since ()
   "Return the number of seconds since when Emacs is idle."
-  (if (featurep 'xemacs)
-      (itimer-time-difference (current-time) last-command-event-time)
-    (float-time (or (current-idle-time)
-                    '(0 0 0)))))
+  (float-time (or (current-idle-time) '(0 0 0))))
 
 (defun gnus-demon-run-callback (func &optional idle time special)
   "Run FUNC if Emacs has been idle for longer than IDLE seconds.
index 6f0bfe6766f5979d1a322885cf8bb7888e5ff589..af278b4427d5bb6d5124206ab3c90e3e670cf275 100644 (file)
@@ -83,13 +83,10 @@ There are currently two built-in format functions:
 
 ;; Compatibility functions ==================================================
 
-(eval-and-compile
-  (if (fboundp 'kill-entire-line)
-      (defalias 'gnus-diary-kill-entire-line 'kill-entire-line)
-    (defun gnus-diary-kill-entire-line ()
-      (beginning-of-line)
-      (let ((kill-whole-line t))
-       (kill-line)))))
+(defun gnus-diary-kill-entire-line ()
+  (beginning-of-line)
+  (let ((kill-whole-line t))
+    (kill-line)))
 
 
 ;; Summary line format ======================================================
index 3bbd4de1fe0b5be2a816ed0341a9855756627d0b..f7eae94a7d8be9cd1514ddb7efd92f990e060a96 100644 (file)
@@ -38,9 +38,6 @@
 
 ;;; Code:
 
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (require 'easy-mmode))) ; for `define-minor-mode'
 (require 'dired)
 (autoload 'mml-attach-file "mml")
 (autoload 'mm-default-file-encoding "mm-decode");; Shift this to `mailcap.el'?
@@ -86,12 +83,6 @@ See `mail-user-agent' for more information."
                               gnus-user-agent)
                (function :tag "Other")))
 
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (defvar gnus-dired-mode-hook)
-    (defvar gnus-dired-mode-on-hook)
-    (defvar gnus-dired-mode-off-hook)))
-
 (define-minor-mode gnus-dired-mode
   "Minor mode for intersections of gnus and dired.
 
@@ -134,9 +125,7 @@ filenames."
          (mapcar
           ;; don't attach directories
           (lambda (f) (if (file-directory-p f) nil f))
-          (nreverse
-           (let ((arg nil)) ;; Silence XEmacs 21.5 when compiling.
-             (dired-map-over-marks (dired-get-filename) arg)))))))
+          (nreverse (dired-map-over-marks (dired-get-filename) nil))))))
   (let ((destination nil)
        (files-str nil)
        (bufs nil))
index b5b17ba42b03ae81df4c5108da1e0c6c0a35467f..f5299bea806393ba3b392e846997091bfc5d46a0 100644 (file)
@@ -31,9 +31,6 @@
 (require 'nndraft)
 (require 'gnus-agent)
 (eval-when-compile (require 'cl))
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (require 'easy-mmode))) ; for `define-minor-mode'
 
 ;;; Draft minor mode
 
@@ -320,7 +317,7 @@ If DONT-POP is nil, display the buffer after setting it up."
        (let* ((window (get-buffer-window buff t))
               (frame (and window (window-frame window))))
          (if frame
-             (gnus-select-frame-set-input-focus frame)
+             (select-frame-set-input-focus frame)
            (pop-to-buffer buff t)))
        (error "The draft %s is under edit" file)))))
 
diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el
deleted file mode 100644 (file)
index 400ac4f..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
-
-;; Copyright (C) 1995-2016 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(eval-when-compile
-  (require 'cl)
-  (require 'ring))
-
-;;; Function aliases later to be redefined for XEmacs usage.
-
-(defvar gnus-mouse-2 [mouse-2])
-(defvar gnus-down-mouse-3 [down-mouse-3])
-(defvar gnus-down-mouse-2 [down-mouse-2])
-(defvar gnus-widget-button-keymap nil)
-(defvar gnus-mode-line-modified
-  (if (featurep 'xemacs)
-      '("--**-" . "-----")
-    '("**" "--")))
-
-(eval-and-compile
-  (autoload 'gnus-xmas-define "gnus-xmas")
-  (autoload 'gnus-xmas-redefine "gnus-xmas"))
-
-(autoload 'gnus-get-buffer-create "gnus")
-(autoload 'nnheader-find-etc-directory "nnheader")
-(autoload 'smiley-region "smiley")
-
-(defun gnus-kill-all-overlays ()
-  "Delete all overlays in the current buffer."
-  (let* ((overlayss (overlay-lists))
-        (buffer-read-only nil)
-        (overlays (delq nil (nconc (car overlayss) (cdr overlayss)))))
-    (while overlays
-      (delete-overlay (pop overlays)))))
-
-;;; Mule functions.
-
-(defun gnus-mule-max-width-function (el max-width)
-  `(let* ((val (eval (, el)))
-         (valstr (if (numberp val)
-                     (int-to-string val) val)))
-     (if (> (length valstr) ,max-width)
-        (truncate-string-to-width valstr ,max-width)
-       valstr)))
-
-(eval-and-compile
-  (if (featurep 'xemacs)
-      (gnus-xmas-define)
-    (defvar gnus-mouse-face-prop 'mouse-face
-      "Property used for highlighting mouse regions.")))
-
-(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
-   ((featurep 'xemacs)
-    (gnus-xmas-redefine))
-
-   ((featurep 'mule)
-    ;; Mule and new Emacs definitions
-
-    ;; [Note] Now there are three kinds of mule implementations,
-    ;; original MULE, XEmacs/mule and Emacs 20+ including
-    ;; MULE features.  Unfortunately these APIs are different.  In
-    ;; particular, Emacs (including original Mule) and XEmacs are
-    ;; quite different.  However, this version of Gnus doesn't support
-    ;; anything other than XEmacs 20+ and Emacs 20.3+.
-
-    ;; Predicates to check are following:
-    ;; (boundp 'MULE) is t only if Mule (original; anything older than
-    ;;                     Mule 2.3) is running.
-    ;; (featurep 'mule) is t when other mule variants are running.
-
-    ;; It is possible to detect XEmacs/mule by (featurep 'mule) and
-    ;; (featurep 'xemacs).  In this case, the implementation for
-    ;; XEmacs/mule may be shareable between XEmacs and XEmacs/mule.
-
-    (defvar gnus-summary-display-table nil
-      "Display table used in summary mode buffers.")
-    (defalias 'gnus-max-width-function 'gnus-mule-max-width-function)
-
-    (when (boundp 'gnus-check-before-posting)
-      (setq gnus-check-before-posting
-           (delq 'long-lines
-                 (delq 'control-chars gnus-check-before-posting))))
-
-    (defun gnus-summary-line-format-spec ()
-      (insert gnus-tmp-unread gnus-tmp-replied
-             gnus-tmp-score-char gnus-tmp-indentation)
-      (put-text-property
-       (point)
-       (progn
-        (insert
-         gnus-tmp-opening-bracket
-         (format "%4d: %-20s"
-                 gnus-tmp-lines
-                 (if (> (length gnus-tmp-name) 20)
-                     (truncate-string-to-width gnus-tmp-name 20)
-                   gnus-tmp-name))
-         gnus-tmp-closing-bracket)
-        (point))
-       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)
-       transient-mark-mode
-       (boundp 'mark-active)
-       mark-active))
-
-(defun gnus-mark-active-p ()
-  "Non-nil means the mark and region are currently active in this buffer."
-  mark-active) ; aliased to region-exists-p in XEmacs.
-
-(autoload 'gnus-alive-p "gnus-util")
-(autoload 'mm-disable-multibyte "mm-util")
-
-;;; Image functions.
-
-(defun gnus-image-type-available-p (type)
-  (and (fboundp 'image-type-available-p)
-       (if (fboundp 'display-images-p)
-          (display-images-p)
-        t)
-       (image-type-available-p type)))
-
-(defun gnus-create-image (file &optional type data-p &rest props)
-  (let ((face (plist-get props :face)))
-    (when face
-      (setq props (plist-put props :foreground (face-foreground face)))
-      (setq props (plist-put props :background (face-background face))))
-    (ignore-errors
-      (apply 'create-image file type data-p props))))
-
-(defun gnus-put-image (glyph &optional string category)
-  (let ((point (point)))
-    (insert-image glyph (or string " "))
-    (put-text-property point (point) 'gnus-image-category category)
-    (unless string
-      (put-text-property (1- (point)) (point)
-                        'gnus-image-text-deletable t))
-    glyph))
-
-(defun gnus-remove-image (image &optional 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))
-         (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))))))
-
-(defmacro gnus-string-mark-left-to-right (string)
-  (if (fboundp 'bidi-string-mark-left-to-right)
-      `(bidi-string-mark-left-to-right ,string)
-    string))
-
-(eval-and-compile
-  ;; XEmacs does not have window-inside-pixel-edges
-  (defalias 'gnus-window-inside-pixel-edges
-    (if (fboundp 'window-inside-pixel-edges)
-        'window-inside-pixel-edges
-      'window-pixel-edges))
-
-  (if (or (featurep 'emacs) (fboundp 'set-process-plist))
-      (progn                           ; these exist since Emacs 22.1
-       (defalias 'gnus-set-process-plist 'set-process-plist)
-       (defalias 'gnus-process-plist 'process-plist)
-       (defalias 'gnus-process-get 'process-get)
-       (defalias 'gnus-process-put 'process-put))
-    (defun gnus-set-process-plist (process plist)
-      "Replace the plist of PROCESS with PLIST.  Returns PLIST."
-      (put 'gnus-process-plist-internal process plist))
-
-    (defun gnus-process-plist (process)
-      "Return the plist of PROCESS."
-      ;; This form works but can't prevent the plist data from
-      ;; growing infinitely.
-      ;;(get 'gnus-process-plist-internal process)
-      (let* ((plist (symbol-plist 'gnus-process-plist-internal))
-            (tem (memq process plist)))
-       (prog1
-           (cadr tem)
-         ;; Remove it from the plist data.
-         (when tem
-           (if (eq plist tem)
-               (progn
-                 (setcar plist (caddr plist))
-                 (setcdr plist (or (cdddr plist) '(nil))))
-             (setcdr (nthcdr (- (length plist) (length tem) 1) plist)
-                     (cddr tem)))))))
-
-    (defun gnus-process-get (process propname)
-      "Return the value of PROCESS' PROPNAME property.
-This is the last value stored with `(gnus-process-put PROCESS PROPNAME VALUE)'."
-      (plist-get (gnus-process-plist process) propname))
-
-    (defun gnus-process-put (process propname value)
-      "Change PROCESS' PROPNAME property to VALUE.
-It can be retrieved with `(gnus-process-get PROCESS PROPNAME)'."
-      (gnus-set-process-plist process
-                             (plist-put (gnus-process-plist process)
-                                        propname value)))))
-
-(provide 'gnus-ems)
-
-;;; gnus-ems.el ends here
index a6b2730023377d5690bfb405c76c4de062ce6255..c1dd333ee50981a293f218d9f02a3a531c805d52 100644 (file)
@@ -28,7 +28,6 @@
   (require 'cl))
 
 (require 'mm-util)
-(require 'gnus-ems)
 (require 'gnus-util)
 (require 'gnus)
 
index de7203d9d10d6a4708b8750b64232eb5bb853b03..89be8640c532b1e908754739793f9a5cbd60c5e0 100644 (file)
@@ -94,8 +94,9 @@ Set image category to CATEGORY."
                  (mail-address (cadr address)))
              (when (if real-name
                        (re-search-forward
-                        (concat (gnus-replace-in-string
-                                 (regexp-quote real-name) "[\t ]+" "[\t\n ]+")
+                        (concat (replace-regexp-in-string
+                                 "[\t ]+" "[\t\n ]+"
+                                 (regexp-quote real-name))
                                 "\\|"
                                 (regexp-quote mail-address))
                         nil t)
@@ -110,8 +111,7 @@ Set image category to CATEGORY."
                ;; another mail with the same someaddress.
                (unless (memq 'gnus-gravatar (text-properties-at (point)))
                  (let ((point (point)))
-                   (unless (featurep 'xemacs)
-                     (setq gravatar (append gravatar gnus-gravatar-properties)))
+                   (setq gravatar (append gravatar gnus-gravatar-properties))
                    (gnus-put-image gravatar (buffer-substring (point) (1+ point)) category)
                    (put-text-property point (point) 'gnus-gravatar address)
                    (gnus-add-wash-type category)
index 1cd16a4e043b362ff79c9814bd30a77fcc951878..3de2609457299d4c8e43c97145072a182c09328d 100644 (file)
@@ -38,7 +38,6 @@
 (require 'gnus-undo)
 (require 'gmm-utils)
 (require 'time-date)
-(require 'gnus-ems)
 
 (eval-when-compile
   (require 'mm-url)
@@ -224,11 +223,6 @@ with some simple extensions:
   :group 'gnus-group-visual
   :type 'string)
 
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
-  (add-hook 'gnus-group-mode-hook 'gnus-xmas-group-menu-add)
-  (add-hook 'gnus-group-mode-hook 'gnus-xmas-setup-group-toolbar))
-
 (defcustom gnus-group-menu-hook nil
   "Hook run after the creation of the group mode menu."
   :group 'gnus-group-various
@@ -427,8 +421,7 @@ For example:
   :type '(repeat (cons (sexp :tag "Method") (symbol :tag "Charset"))))
 
 (defcustom gnus-group-name-charset-group-alist
-  (if (or (and (fboundp 'find-coding-system) (find-coding-system 'utf-8))
-         (mm-coding-system-p 'utf-8))
+  (if (mm-coding-system-p 'utf-8)
       '((".*" . utf-8))
     nil)
   "Alist of group regexp and the charset for group names.
@@ -535,10 +528,7 @@ simple manner.")
     (?O gnus-tmp-moderated-string ?s)
     (?p gnus-tmp-process-marked ?c)
     (?s gnus-tmp-news-server ?s)
-    (?n ,(if (featurep 'xemacs)
-            '(symbol-name gnus-tmp-news-method)
-          'gnus-tmp-news-method)
-       ?s)
+    (?n gnus-tmp-news-method ?s)
     (?P gnus-group-indentation ?s)
     (?E gnus-tmp-group-icon ?s)
     (?B gnus-tmp-summary-live ?c)
@@ -632,8 +622,8 @@ simple manner.")
   "\C-c\C-i" gnus-info-find-node
   "\M-e" gnus-group-edit-group-method
   "^" gnus-group-enter-server-mode
-  gnus-mouse-2 gnus-mouse-pick-group
-  [follow-link] mouse-face
+  [mouse-2] gnus-mouse-pick-group
+  [follow-link] 'mouse-face
   "<" beginning-of-buffer
   ">" end-of-buffer
   "\C-c\C-b" gnus-bug
@@ -798,32 +788,26 @@ simple manner.")
        ["Catch up" gnus-group-catchup-current
        :included (not (gnus-topic-mode-p))
        :active (gnus-group-group-name)
-       ,@(if (featurep 'xemacs) nil
-           '(:help "Mark unread articles in the current group as read"))]
+       :help "Mark unread articles in the current group as read"]
        ["Catch up " gnus-topic-catchup-articles
        :included (gnus-topic-mode-p)
-       ,@(if (featurep 'xemacs) nil
-           '(:help "Mark unread articles in the current group or topic as read"))]
+       :help "Mark unread articles in the current group or topic as read"]
        ["Catch up all articles" gnus-group-catchup-current-all
        (gnus-group-group-name)]
        ["Check for new articles" gnus-group-get-new-news-this-group
        :included (not (gnus-topic-mode-p))
        :active (gnus-group-group-name)
-       ,@(if (featurep 'xemacs) nil
-           '(:help "Check for new messages in current group"))]
+       :help "Check for new messages in current group"]
        ["Check for new articles " gnus-topic-get-new-news-this-topic
        :included (gnus-topic-mode-p)
-       ,@(if (featurep 'xemacs) nil
-           '(:help "Check for new messages in current group or topic"))]
+       :help "Check for new messages in current group or topic"]
        ["Toggle subscription" gnus-group-unsubscribe-current-group
        (gnus-group-group-name)]
        ["Kill" gnus-group-kill-group :active (gnus-group-group-name)
-       ,@(if (featurep 'xemacs) nil
-             '(:help "Kill (remove) current group"))]
+       :help "Kill (remove) current group"]
        ["Yank" gnus-group-yank-group gnus-list-of-killed-groups]
        ["Describe" gnus-group-describe-group :active (gnus-group-group-name)
-       ,@(if (featurep 'xemacs) nil
-           '(:help "Display description of the current group"))]
+       :help "Display description of the current group"]
        ;; Actually one should check, if any of the marked groups gives t for
        ;; (gnus-check-backend-function 'request-expire-articles ...)
        ["Expire articles" gnus-group-expire-articles
@@ -905,14 +889,14 @@ simple manner.")
              (memq (gnus-group-group-name) gnus-group-marked))]
        ["Unmark all" gnus-group-unmark-all-groups gnus-group-marked]
        ["Mark regexp..." gnus-group-mark-regexp t]
-       ["Mark region" gnus-group-mark-region :active (gnus-mark-active-p)]
+       ["Mark region" gnus-group-mark-region :active mark-active]
        ["Mark buffer" gnus-group-mark-buffer t]
        ["Execute command" gnus-group-universal-argument
         (or gnus-group-marked (gnus-group-group-name))])
        ("Subscribe"
        ["Subscribe to a group..." gnus-group-unsubscribe-group t]
        ["Kill all newsgroups in region" gnus-group-kill-region
-        :active (gnus-mark-active-p)]
+        :active mark-active]
        ["Kill all zombie groups" gnus-group-kill-all-zombies
         gnus-zombie-list]
        ["Kill all groups on level..." gnus-group-kill-level t])
@@ -960,13 +944,9 @@ simple manner.")
        ["Send a message (mail or news)" gnus-group-post-news t]
        ["Create a local message" gnus-group-news t]
        ["Check for new news" gnus-group-get-new-news
-       ,@(if (featurep 'xemacs) '(t)
-           '(:help "Get newly arrived articles"))
-       ]
+       :help "Get newly arrived articles"]
        ["Send queued messages" gnus-delay-send-queue
-       ,@(if (featurep 'xemacs) '(t)
-           '(:help "Send all messages that are scheduled to be sent now"))
-       ]
+       :help "Send all messages that are scheduled to be sent now"]
        ["Activate all groups" gnus-activate-all-groups t]
        ["Restart Gnus" gnus-group-restart t]
        ["Read init file" gnus-group-read-init-file t]
@@ -981,9 +961,7 @@ simple manner.")
        ["Flush score cache" gnus-score-flush-cache t]
        ["Toggle topics" gnus-topic-mode t]
        ["Send a bug report" gnus-bug t]
-       ["Exit from Gnus" gnus-group-exit
-       ,@(if (featurep 'xemacs) '(t)
-           '(:help "Quit reading news"))]
+       ["Exit from Gnus" gnus-group-exit :help "Quit reading news"]
        ["Exit without saving" gnus-group-quit t]))
 
     (gnus-run-hooks 'gnus-group-menu-hook)))
@@ -1101,18 +1079,14 @@ See `gmm-tool-bar-from-list' for the format of the list."
 (defun gnus-group-make-tool-bar (&optional force)
   "Make a group mode tool bar from `gnus-group-tool-bar'.
 When FORCE, rebuild the tool bar."
-  (when (and (not (featurep 'xemacs))
-            (boundp 'tool-bar-mode)
+  (when (and (boundp 'tool-bar-mode)
             tool-bar-mode
              (display-graphic-p)
             (or (not gnus-group-tool-bar-map) force))
     (let* ((load-path
-           (gmm-image-load-path-for-library "gnus"
-                                            "gnus/toggle-subscription.xpm"
-                                            nil t))
-           (image-load-path (cons (car load-path)
-                                  (when (boundp 'image-load-path)
-                                    image-load-path)))
+           (image-load-path-for-library
+            "gnus" "gnus/toggle-subscription.xpm" nil t))
+           (image-load-path (cons (car load-path) image-load-path))
           (map (gmm-tool-bar-from-list gnus-group-tool-bar
                                        gnus-group-tool-bar-zap-list
                                        'gnus-group-mode-map)))
@@ -1167,7 +1141,7 @@ The following commands are available:
       (goto-char (point-min))
       (setq gnus-group-mark-positions
            (list (cons 'process (and (search-forward
-                                      (mm-string-to-multibyte "\200") nil t)
+                                      (string-to-multibyte "\200") nil t)
                                      (- (point) (point-min) 1))))))))
 
 (defun gnus-mouse-pick-group (e)
@@ -1229,8 +1203,8 @@ The following commands are available:
 
 (defun gnus-group-name-decode (string charset)
   ;; Fixme: Don't decode in unibyte mode.
-  (if (and string charset (featurep 'mule))
-      (mm-decode-coding-string string charset)
+  (if (and string charset)
+      (decode-coding-string string charset)
     string))
 
 (defun gnus-group-decoded-name (string)
@@ -1394,7 +1368,7 @@ if it is a string, only list groups matching REGEXP."
     (when (or gnus-group-listed-groups
              (and (>= level gnus-level-killed) (<= lowest gnus-level-killed)))
       (gnus-group-prepare-flat-list-dead
-       (gnus-union
+       (cl-union
        not-in-list
        (setq gnus-killed-list (sort gnus-killed-list 'string<))
        :test 'equal)
@@ -1418,7 +1392,7 @@ if it is a string, only list groups matching REGEXP."
                 (or (not regexp)
                     (and (stringp regexp) (string-match regexp group))
                     (and (functionp regexp) (funcall regexp group))))
-           (gnus-add-text-properties
+           (add-text-properties
             (point) (prog1 (1+ (point))
                       (insert " " mark "     *: "
                               (gnus-group-decoded-name group)
@@ -1510,13 +1484,10 @@ if it is a string, only list groups matching REGEXP."
 ;; Date: Mon, 23 Jan 2006 19:59:13 +0100
 ;; Message-ID: <v9acdmrcse.fsf@marauder.physik.uni-ulm.de>
 
-(defcustom gnus-group-update-tool-bar
-  (and (not (featurep 'xemacs))
-       (boundp 'tool-bar-mode)
-       tool-bar-mode
-       ;; Using `redraw-frame' (see `gnus-tool-bar-update') in Emacs might
-       ;; be confusing, so maybe we shouldn't call it by default.
-       (fboundp 'force-window-update))
+;; Using `redraw-frame' (see `gnus-tool-bar-update') in Emacs might
+;; be confusing, so maybe we shouldn't call it by default.
+(defcustom gnus-group-update-tool-bar (and (boundp 'tool-bar-mode)
+                                          tool-bar-mode)
   "Force updating the group buffer tool bar."
   :group 'gnus-group
   :version "22.1"
@@ -1597,7 +1568,7 @@ if it is a string, only list groups matching REGEXP."
          gnus-tmp-header)      ; passed as parameter to user-funcs.
     (beginning-of-line)
     (setq beg (point))
-    (gnus-add-text-properties
+    (add-text-properties
      (point)
      (prog1 (1+ (point))
        ;; Insert the text.
@@ -1625,58 +1596,42 @@ if it is a string, only list groups matching REGEXP."
         (progn
           (unless (bound-and-true-p cursor-sensor-mode)
             (cursor-sensor-mode 1))
-          (gnus-put-text-property beg end 'cursor-sensor-functions
+          (put-text-property beg end 'cursor-sensor-functions
                                   '(gnus-tool-bar-update)))
-      (gnus-put-text-property beg end 'point-entered
+      (put-text-property beg end 'point-entered
                               #'gnus-tool-bar-update)
-      (gnus-put-text-property beg end 'point-left
+      (put-text-property beg end 'point-left
                               #'gnus-tool-bar-update))))
 
 (defun gnus-group-update-eval-form (group list)
   "Eval `car' of each element of LIST, and return the first that return t.
 Some value are bound so the form can use them."
-  (defvar group-age) (defvar ticked) (defvar score) (defvar level)
-  (defvar mailp) (defvar total) (defvar unread)
   (when list
     (let* ((entry (gnus-group-entry group))
-           (unread (if (numberp (car entry)) (car entry) 0))
            (active (gnus-active group))
-           (total (if active (1+ (- (cdr active) (car active))) 0))
            (info (nth 2 entry))
-           (method (inline (gnus-server-get-method group (gnus-info-method info))))
+           (method (inline (gnus-server-get-method
+                           group (gnus-info-method info))))
            (marked (gnus-info-marks info))
-           (mailp (apply 'append
-                         (mapcar
-                          (lambda (x)
-                            (memq x (assoc (symbol-name
-                                            (car (or method gnus-select-method)))
-                                           gnus-valid-select-methods)))
-                          '(mail post-mail))))
-           (level (or (gnus-info-level info) gnus-level-killed))
-           (score (or (gnus-info-score info) 0))
-           (ticked (gnus-range-length (cdr (assq 'tick marked))))
-           (group-age (gnus-group-timestamp-delta group)))
-      ;; FIXME: http://thread.gmane.org/gmane.emacs.gnus.general/65451/focus=65465
-      ;; ======================================================================
-      ;; From: Richard Stallman
-      ;; Subject: Re: Rewriting gnus-group-highlight-line (was: [...])
-      ;; Cc: ding@gnus.org
-      ;; Date: Sat, 27 Oct 2007 19:41:20 -0400
-      ;; Message-ID: <E1IlvHM-0006TS-7t@fencepost.gnu.org>
-      ;;
-      ;; [...]
-      ;; The kludge is that the alist elements contain expressions that refer
-      ;; to local variables with short names.  Perhaps write your own tiny
-      ;; evaluator that handles just `and', `or', and numeric comparisons
-      ;; and just a few specific variables.
-      ;; ======================================================================
-      ;;
-      ;; Similar for other evaluated variables.  Grep for risky-local-variable
-      ;; to find them!  -- rsteib
-      ;;
-      ;; Eval the cars of the lists until we find a match.
+          (env
+           (list
+            (cons 'unread (if (numberp (car entry)) (car entry) 0))
+            (cons 'total (if active (1+ (- (cdr active) (car active))) 0))
+            (cons 'mailp (apply
+                          'append
+                          (mapcar
+                           (lambda (x)
+                             (memq x (assoc
+                                      (symbol-name
+                                       (car (or method gnus-select-method)))
+                                      gnus-valid-select-methods)))
+                           '(mail post-mail))))
+            (cons 'level (or (gnus-info-level info) gnus-level-killed))
+            (cons 'score (or (gnus-info-score info) 0))
+            (cons 'ticked (gnus-range-length (cdr (assq 'tick marked))))
+            (cons 'group-age (gnus-group-timestamp-delta group)))))
       (while (and list
-                  (not (eval (caar list))))
+                  (not (eval (caar list) env)))
         (setq list (cdr list)))
       list)))
 
@@ -1687,12 +1642,12 @@ and ends at END."
   (let ((face (cdar (gnus-group-update-eval-form
                       group
                       gnus-group-highlight))))
-    (unless (eq face (gnus-get-text-property-excluding-characters-with-faces beg 'face))
+    (unless (eq face (gnus-get-text-property-excluding-characters-with-faces
+                     beg 'face))
       (let ((inhibit-read-only t))
         (gnus-put-text-property-excluding-characters-with-faces
          beg end 'face
-         (if (boundp face) (symbol-value face) face)))
-      (gnus-extent-start-open beg))))
+         (if (boundp face) (symbol-value face) face))))))
 
 (defun gnus-group-get-icon (group)
   "Return an icon for GROUP according to `gnus-group-icon-list'."
@@ -1800,8 +1755,7 @@ already.  If INFO-UNCHANGED is non-nil, dribble buffer is not updated."
             (mode-string (eval gformat)))
        ;; Say whether the dribble buffer has been modified.
        (setq mode-line-modified
-             (if modified (car gnus-mode-line-modified)
-               (cdr gnus-mode-line-modified)))
+             (if modified "**" "--"))
        ;; If the line is too long, we chop it off.
        (when (> (length mode-string) max-len)
          (setq mode-string (substring mode-string 0 (- max-len 4))))
@@ -2028,7 +1982,7 @@ Take into consideration N (the prefix) and the list of marked groups."
          (setq n (1- n))
          (gnus-group-next-group way)))
       (nreverse groups)))
-   ((and (gnus-region-active-p) (mark))
+   ((and transient-mark-mode mark-active (mark))
     ;; Work on the region between point and mark.
     (let ((max (max (point) (mark)))
          groups)
@@ -2240,9 +2194,9 @@ if it is not a list."
                (member group (mapcar 'symbol-name collection))
              (symbol-value (intern-soft group collection)))
       (setq group
-           (mm-encode-coding-string
+           (encode-coding-string
             group (gnus-group-name-charset nil group))))
-    (gnus-replace-in-string group "\n" "")))
+    (replace-regexp-in-string "\n" "" group)))
 
 ;;;###autoload
 (defun gnus-fetch-group (group &optional articles)
@@ -2402,7 +2356,7 @@ specified by `gnus-gmane-group-download-format'."
   (unless range (setq range 500))
   (when (< range 1)
     (error "Invalid range: %s" range))
-  (let ((tmpfile (mm-make-temp-file
+  (let ((tmpfile (make-temp-file
                  (format "%s.start-%s.range-%s." group start range)))
        (gnus-thread-sort-functions '(gnus-thread-sort-by-number)))
     (with-temp-file tmpfile
@@ -2488,21 +2442,25 @@ the bug number, and browsing the URL must return mbox output."
     (setq ids (string-to-number ids)))
   (unless (listp ids)
     (setq ids (list ids)))
-  (let ((tmpfile (mm-make-temp-file "gnus-temp-group-")))
+  (let ((tmpfile (make-temp-file "gnus-temp-group-")))
     (let ((coding-system-for-write 'binary)
          (coding-system-for-read 'binary))
       (with-temp-file tmpfile
        (mm-disable-multibyte)
        (dolist (id ids)
-         (url-insert-file-contents (format mbox-url id)))
+         (let ((file (format "~/.emacs.d/debbugs-cache/%s" id)))
+           (if (and (not gnus-plugged)
+                    (file-exists-p file))
+               (insert-file-contents file)
+             (url-insert-file-contents (format mbox-url id)))))
        (goto-char (point-min))
        ;; Add the debbugs address so that we can respond to reports easily.
        (while (re-search-forward "^To: " nil t)
          (end-of-line)
          (insert (format ", %s@%s" (car ids)
-                         (gnus-replace-in-string
-                          (gnus-replace-in-string mbox-url "^http://" "")
-                          "/.*$" ""))))))
+                         (replace-regexp-in-string
+                          "/.*$" ""
+                          (replace-regexp-in-string "^http://" "" mbox-url)))))))
     (gnus-group-read-ephemeral-group
      (format "nndoc+ephemeral:bug#%s"
             (mapconcat 'number-to-string ids ","))
@@ -2762,7 +2720,7 @@ server."
   (when (stringp method)
     (setq method (or (gnus-server-to-method method) method)))
   (unless encoded
-    (setq name (mm-encode-coding-string
+    (setq name (encode-coding-string
                name
                (gnus-group-name-charset method name))))
   (let* ((meth (gnus-method-simplify
@@ -2880,7 +2838,7 @@ and NEW-NAME will be prompted for."
                     "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
+     (list group (encode-coding-string
                  new-name
                  (gnus-group-name-charset
                   method
@@ -2951,7 +2909,7 @@ and NEW-NAME will be prompted for."
            (gnus-info-params info))
           (t info))
      ;; The proper documentation.
-     (gnus-format-message
+     (format-message
       "Editing the %s for `%s'."
       (cond
        ((eq part 'method) "select method")
@@ -3094,9 +3052,9 @@ If called with a prefix argument, ask for the file type."
                       (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))
+    (setcar (cdr method) (encode-coding-string file coding))
     (gnus-group-make-group
-     (mm-encode-coding-string (gnus-group-real-name name) coding)
+     (encode-coding-string (gnus-group-real-name name) coding)
      method nil nil t)))
 
 (defvar nnweb-type-definition)
@@ -3173,8 +3131,8 @@ If there is, use Gnus to create an nnrss group"
               (coding (gnus-group-name-charset '(nnrss "") title)))
          (when coding
            ;; Unify non-ASCII text.
-           (setq title (mm-decode-coding-string
-                        (mm-encode-coding-string title coding)
+           (setq title (decode-coding-string
+                        (encode-coding-string title coding)
                         coding)))
          (gnus-group-make-group title '(nnrss ""))
          (push (list title href desc) nnrss-group-alist)
@@ -3279,7 +3237,7 @@ mail messages or news articles in files that have numeric names."
       (error "%s is not an nnimap group" group))
     (unless (setq acl (nnimap-acl-get mailbox (cadr method)))
       (error "Server does not support ACL's"))
-    (gnus-edit-form acl (gnus-format-message "\
+    (gnus-edit-form acl (format-message "\
 Editing the access control list for `%s'.
 
    An access control list is a list of (identifier . rights) elements.
@@ -4040,7 +3998,7 @@ entail asking the server for the groups."
     (erase-buffer)
     (while groups
       (setq group (pop groups))
-      (gnus-add-text-properties
+      (add-text-properties
        (point) (prog1 (1+ (point))
                 (insert "       *: "
                         (gnus-group-decoded-name group)
@@ -4162,22 +4120,23 @@ If DONT-SCAN is non-nil, scan non-activated groups as well."
                 (gnus-read-all-descriptions-files)))
     (error "Couldn't request descriptions file"))
   (let ((buffer-read-only nil)
-       b)
-    (erase-buffer)
+       b groups)
     (mapatoms
      (lambda (group)
-       (setq b (point))
-       (let ((charset (gnus-group-name-charset nil (symbol-name group))))
-        (insert (format "      *: %-20s %s\n"
-                        (gnus-group-name-decode
-                         (symbol-name group) charset)
-                        (gnus-group-name-decode
-                         (symbol-value group) charset))))
-       (gnus-add-text-properties
-       b (1+ b) (list 'gnus-group group
-                      'gnus-unread t 'gnus-marked nil
-                      'gnus-level (1+ gnus-level-subscribed))))
+       (push (symbol-name group) groups))
      gnus-description-hashtb)
+    (setq groups (sort groups 'string<))
+    (erase-buffer)
+    (dolist (group groups)
+      (setq b (point))
+      (let ((charset (gnus-group-name-charset nil group)))
+       (insert (format "      *: %-20s %s\n"
+                       (gnus-group-name-decode group charset)
+                       (gnus-group-name-decode group charset))))
+      (add-text-properties
+       b (1+ b) (list 'gnus-group (intern group gnus-description-hashtb)
+                     'gnus-unread t 'gnus-marked nil
+                     'gnus-level (1+ gnus-level-subscribed))))
     (goto-char (point-min))
     (gnus-group-position-point)))
 
@@ -4533,7 +4492,7 @@ and the second element is the address."
        (if force
            (if (null articles)
                (setcar (nthcdr 3 info)
-                       (gnus-delete-alist type (car marked)))
+                       (assq-delete-all type (car marked)))
              (setcdr m (gnus-compress-sequence articles t)))
          (setcdr m (gnus-compress-sequence
                     (sort (nconc (gnus-uncompress-range (cdr m))
@@ -4675,14 +4634,10 @@ This command may read the active file."
        (gnus-group-list-mode gnus-group-list-mode) ;; Save it.
        func)
     (push last-command-event unread-command-events)
-    (if (featurep 'xemacs)
-       (push (make-event 'key-press '(key ?A)) unread-command-events)
-      (push ?A unread-command-events))
+    (push ?A unread-command-events)
     (let (gnus-pick-mode keys)
-      (setq keys (if (featurep 'xemacs)
-                    (events-to-keys (read-key-sequence nil))
-                  (read-key-sequence nil)))
-      (setq func (lookup-key (current-local-map) keys)))
+      (setq keys (read-key-sequence nil)
+           func (lookup-key (current-local-map) keys)))
     (if (or (not func)
            (numberp func))
        (ding)
index 884b40e9342bcdbdcdf5c5724de0b2e2b8243743..afbb845a0d81db2f36c2bae909d8581fb5fa3683 100644 (file)
@@ -39,7 +39,8 @@
 (require 'xml)
 (require 'browse-url)
 (require 'mm-util)
-(eval-and-compile (unless (featurep 'xemacs) (require 'help-fns)))
+(require 'help-fns)
+(require 'url-queue)
 
 (defcustom gnus-html-image-cache-ttl (days-to-time 7)
   "Time used to determine if we should use images from the cache."
@@ -88,27 +89,9 @@ fit these criteria."
     (define-key map [tab] 'widget-forward)
     map))
 
-(eval-and-compile
-  (defalias 'gnus-html-encode-url-chars
-    (if (fboundp 'browse-url-url-encode-chars)
-       'browse-url-url-encode-chars
-      (lambda (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 gnus-html-encode-url (url)
   "Encode URL."
-  (gnus-html-encode-url-chars url "[)$ ]"))
+  (browse-url-url-encode-chars url "[)$ ]"))
 
 (defun gnus-html-cache-expired (url ttl)
   "Check if URL is cached for more than TTL."
@@ -143,7 +126,7 @@ CHARS is a regexp-like character alternative (e.g., \"[)$]\")."
                                      charset nil t))
                       (not (eq charset 'ascii)))
              (insert (prog1
-                         (mm-decode-coding-string (buffer-string) charset)
+                         (decode-coding-string (buffer-string) charset)
                        (erase-buffer)
                        (mm-enable-multibyte))))
            (call-process-region (point-min) (point-max)
@@ -197,7 +180,7 @@ CHARS is a regexp-like character alternative (e.g., \"[)$]\")."
              alt-text (when (string-match "\\(alt\\|title\\)=\"\\([^\"]+\\)"
                                           parameters)
                         (xml-substitute-special (match-string 2 parameters))))
-       (gnus-add-text-properties
+       (add-text-properties
         start end
         (list 'image-url url
               'image-displayer `(lambda (url start end)
@@ -310,7 +293,7 @@ Use ALT-TEXT for the image string."
          (let ((overlay (make-overlay start end)))
            (overlay-put overlay 'evaporate t)
            (overlay-put overlay 'gnus-button-url url)
-           (gnus-put-text-property start end 'gnus-string url)
+           (put-text-property start end 'gnus-string url)
            (when gnus-article-mouse-face
              (overlay-put overlay 'mouse-face gnus-article-mouse-face)))))
        ;; The upper-case IMG_ALT is apparently just an artifact that
@@ -391,14 +374,9 @@ Use ALT-TEXT for the image string."
   "Retrieve IMAGE, and place it into BUFFER on arrival."
   (gnus-message 8 "gnus-html-schedule-image-fetching: buffer %s, image %s"
                 buffer image)
-  (if (fboundp 'url-queue-retrieve)
-      (url-queue-retrieve (car image)
-                         'gnus-html-image-fetched
-                         (list buffer image) t t)
-    (ignore-errors
-      (url-retrieve (car image)
-                   'gnus-html-image-fetched
-                   (list buffer image)))))
+  (url-queue-retrieve (car image)
+                     'gnus-html-image-fetched
+                     (list buffer image) t t))
 
 (defun gnus-html-image-fetched (status buffer image)
   "Callback function called when image has been fetched."
@@ -427,7 +405,7 @@ Return a string with image data."
 
 (defun gnus-html-maximum-image-size ()
   "Return the maximum size of an image according to `gnus-max-image-proportion'."
-  (let ((edges (gnus-window-inside-pixel-edges
+  (let ((edges (window-inside-pixel-edges
                 (get-buffer-window (current-buffer)))))
     ;; (width . height)
     (cons
@@ -444,7 +422,7 @@ Return a string with image data."
 
 (defun gnus-html-put-image (data url &optional alt-text)
   "Put an image with DATA from URL and optional ALT-TEXT."
-  (when (gnus-graphic-display-p)
+  (when (display-graphic-p)
     (let* ((start (text-property-any (point-min) (point-max)
                                     'image-url url))
            (end (when start
@@ -454,10 +432,7 @@ Return a string with image data."
         (let* ((image
                 (ignore-errors
                   (gnus-create-image data nil t)))
-               (size (and image
-                          (if (featurep 'xemacs)
-                              (cons (glyph-width image) (glyph-height image))
-                            (image-size image t)))))
+               (size (and image (image-size image t))))
           (save-excursion
             (goto-char start)
             (let ((alt-text (or alt-text
@@ -466,16 +441,8 @@ Return a string with image data."
               (if (and image
                        ;; Kludge to avoid displaying 30x30 gif images, which
                        ;; seems to be a signal of a broken image.
-                       (not (and (if (featurep 'xemacs)
-                                     (glyphp image)
-                                   (listp image))
-                                 (eq (if (featurep 'xemacs)
-                                         (let ((d (cdadar
-                                                  (specifier-spec-list
-                                                   (glyph-image image)))))
-                                           (and (vectorp d)
-                                                (aref d 0)))
-                                       (plist-get (cdr image) :type))
+                       (not (and (listp image)
+                                 (eq (plist-get (cdr image) :type)
                                      'gif)
                                  (= (car size) 30)
                                  (= (cdr size) 30))))
@@ -488,10 +455,9 @@ Return a string with image data."
                     :help-echo alt-text
                     :keymap gnus-html-displayed-image-map
                     url)
-                    (gnus-put-text-property start (point)
-                                           'gnus-alt-text alt-text)
+                    (put-text-property start (point) 'gnus-alt-text alt-text)
                     (when url
-                     (gnus-add-text-properties
+                     (add-text-properties
                       start (point)
                       `(image-url
                         ,url
index d7a431ae8c6d16948daafd69e5a444a960c60325..dea6523a541f53711bad4c4fd8e66063f53711ef 100644 (file)
   nil
   "iCalendar class for REPLY events")
 
-(defmethod gnus-icalendar-event:recurring-p ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:recurring-p ((event gnus-icalendar-event))
   "Return t if EVENT is recurring."
   (not (null (gnus-icalendar-event:recur event))))
 
-(defmethod gnus-icalendar-event:recurring-freq ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:recurring-freq ((event gnus-icalendar-event))
   "Return recurring frequency of EVENT."
   (let ((rrule (gnus-icalendar-event:recur event)))
     (string-match "FREQ=\\([[:alpha:]]+\\)" rrule)
     (match-string 1 rrule)))
 
-(defmethod gnus-icalendar-event:recurring-interval ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:recurring-interval ((event gnus-icalendar-event))
   "Return recurring interval of EVENT."
   (let ((rrule (gnus-icalendar-event:recur event))
         (default-interval 1))
     (or (match-string 1 rrule)
         default-interval)))
 
-(defmethod gnus-icalendar-event:start ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:start ((event gnus-icalendar-event))
   (format-time-string "%Y-%m-%d %H:%M" (gnus-icalendar-event:start-time event)))
 
 (defun gnus-icalendar-event--decode-datefield (event field zone-map)
 (defun gnus-icalendar-event--find-attendee (ical name-or-email)
   (let* ((event (car (icalendar--all-events ical)))
          (event-props (caddr event)))
-    (gmm-labels ((attendee-name (att) (plist-get (cadr att) 'CN))
-                 (attendee-email (att)
-                   (replace-regexp-in-string "^.*MAILTO:" "" (caddr att)))
-                 (attendee-prop-matches-p (prop)
-                   (and (eq (car prop) 'ATTENDEE)
-                        (or (member (attendee-name prop) name-or-email)
-                            (let ((att-email (attendee-email prop)))
-                              (gnus-icalendar-find-if (lambda (email)
-                                                        (string-match email att-email))
-                                                      name-or-email))))))
-
+    (cl-labels ((attendee-name (att) (plist-get (cadr att) 'CN))
+               (attendee-email
+                (att)
+                (replace-regexp-in-string "^.*MAILTO:" "" (caddr att)))
+               (attendee-prop-matches-p
+                (prop)
+                (and (eq (car prop) 'ATTENDEE)
+                     (or (member (attendee-name prop) name-or-email)
+                         (let ((att-email (attendee-email prop)))
+                           (gnus-icalendar-find-if
+                            (lambda (email)
+                              (string-match email att-email))
+                            name-or-email))))))
       (gnus-icalendar-find-if #'attendee-prop-matches-p event-props))))
 
 (defun gnus-icalendar-event--get-attendee-names (ical)
                           (lambda (p) (eq (car p) 'ATTENDEE))
                           (caddr event))))
 
-    (gmm-labels ((attendee-role (prop) (plist-get (cadr prop) 'ROLE))
-                 (attendee-name (prop)
-                                (or (plist-get (cadr prop) 'CN)
-                                    (replace-regexp-in-string "^.*MAILTO:" "" (caddr prop))))
-                 (attendees-by-type (type)
-                   (gnus-remove-if-not
-                    (lambda (p) (string= (attendee-role p) type))
-                    attendee-props))
-                 (attendee-names-by-type (type)
-                    (mapcar #'attendee-name (attendees-by-type type))))
-
+    (cl-labels
+       ((attendee-role (prop) (plist-get (cadr prop) 'ROLE))
+        (attendee-name
+         (prop)
+         (or (plist-get (cadr prop) 'CN)
+             (replace-regexp-in-string "^.*MAILTO:" "" (caddr prop))))
+        (attendees-by-type (type)
+                           (gnus-remove-if-not
+                            (lambda (p) (string= (attendee-role p) type))
+                            attendee-props))
+        (attendee-names-by-type
+         (type)
+         (mapcar #'attendee-name (attendees-by-type type))))
       (list
        (attendee-names-by-type "REQ-PARTICIPANT")
        (attendee-names-by-type "OPT-PARTICIPANT")))))
                        ((string= method "REPLY") 'gnus-icalendar-event-reply)
                        (t 'gnus-icalendar-event))))
 
-    (gmm-labels ((map-property (prop)
-                   (let ((value (icalendar--get-event-property event prop)))
-                     (when value
-                       ;; ugly, but cannot get
-                       ;;replace-regexp-in-string work with "\\" as
-                       ;;REP, plus we should also handle "\\;"
-                       (replace-regexp-in-string
-                        "\\\\," ","
-                        (replace-regexp-in-string
-                         "\\\\n" "\n" (substring-no-properties value))))))
-                 (accumulate-args (mapping)
-                   (destructuring-bind (slot . ical-property) mapping
-                     (setq args (append (list
-                                         (intern (concat ":" (symbol-name slot)))
-                                         (map-property ical-property))
-                                        args)))))
-
+    (cl-labels
+       ((map-property
+         (prop)
+         (let ((value (icalendar--get-event-property event prop)))
+           (when value
+             ;; ugly, but cannot get
+             ;;replace-regexp-in-string work with "\\" as
+             ;;REP, plus we should also handle "\\;"
+             (replace-regexp-in-string
+              "\\\\," ","
+              (replace-regexp-in-string
+               "\\\\n" "\n" (substring-no-properties value))))))
+        (accumulate-args
+         (mapping)
+         (destructuring-bind (slot . ical-property) mapping
+           (setq args (append (list
+                               (intern (concat ":" (symbol-name slot)))
+                               (map-property ical-property))
+                              args)))))
       (mapc #'accumulate-args prop-map)
       (apply 'make-instance event-class args))))
 
@@ -264,41 +270,46 @@ status will be retrieved from the first matching attendee record."
   (let ((summary-status (capitalize (symbol-name status)))
         (attendee-status (upcase (symbol-name status)))
         reply-event-lines)
-    (gmm-labels ((update-summary (line)
-                   (if (string-match "^[^:]+:" line)
-                       (replace-match (format "\\&%s: " summary-status) t nil line)
-                     line))
-                 (update-dtstamp ()
-                   (format-time-string "DTSTAMP:%Y%m%dT%H%M%SZ" nil t))
-                 (attendee-matches-identity (line)
-                   (gnus-icalendar-find-if (lambda (name) (string-match-p name line))
-                                           identities))
-                 (update-attendee-status (line)
-                   (when (and (attendee-matches-identity line)
-                              (string-match "\\(PARTSTAT=\\)[^;]+" line))
-                     (replace-match (format "\\1%s" attendee-status) t nil line)))
-                 (process-event-line (line)
-                   (when (string-match "^\\([^;:]+\\)" line)
-                     (let* ((key (match-string 0 line))
-                            ;; NOTE: not all of the below fields are mandatory,
-                            ;; but they are often present in other clients'
-                            ;; replies. Can be helpful for debugging, too.
-                            (new-line
-                             (cond
-                              ((string= key "ATTENDEE") (update-attendee-status line))
-                              ((string= key "SUMMARY") (update-summary line))
-                              ((string= key "DTSTAMP") (update-dtstamp))
-                              ((member key '("ORGANIZER" "DTSTART" "DTEND"
-                                             "LOCATION" "DURATION" "SEQUENCE"
-                                             "RECURRENCE-ID" "UID")) line)
-                              (t nil))))
-                       (when new-line
-                         (push new-line reply-event-lines))))))
+    (cl-labels
+       ((update-summary
+         (line)
+         (if (string-match "^[^:]+:" line)
+             (replace-match (format "\\&%s: " summary-status) t nil line)
+           line))
+        (update-dtstamp ()
+                        (format-time-string "DTSTAMP:%Y%m%dT%H%M%SZ" nil t))
+        (attendee-matches-identity
+         (line)
+         (gnus-icalendar-find-if (lambda (name) (string-match-p name line))
+                                 identities))
+        (update-attendee-status
+         (line)
+         (when (and (attendee-matches-identity line)
+                    (string-match "\\(PARTSTAT=\\)[^;]+" line))
+           (replace-match (format "\\1%s" attendee-status) t nil line)))
+        (process-event-line
+         (line)
+         (when (string-match "^\\([^;:]+\\)" line)
+           (let* ((key (match-string 0 line))
+                  ;; NOTE: not all of the below fields are mandatory,
+                  ;; but they are often present in other clients'
+                  ;; replies. Can be helpful for debugging, too.
+                  (new-line
+                   (cond
+                    ((string= key "ATTENDEE") (update-attendee-status line))
+                    ((string= key "SUMMARY") (update-summary line))
+                    ((string= key "DTSTAMP") (update-dtstamp))
+                    ((member key '("ORGANIZER" "DTSTART" "DTEND"
+                                   "LOCATION" "DURATION" "SEQUENCE"
+                                   "RECURRENCE-ID" "UID")) line)
+                    (t nil))))
+             (when new-line
+               (push new-line reply-event-lines))))))
 
       (mapc #'process-event-line (split-string ical-request "\n"))
 
       (unless (gnus-icalendar-find-if (lambda (x) (string-match "^ATTENDEE" x))
-                          reply-event-lines)
+                                     reply-event-lines)
         (error "Could not find an event attendee matching given identity"))
 
       (mapconcat #'identity `("BEGIN:VEVENT"
@@ -311,16 +322,17 @@ status will be retrieved from the first matching attendee record."
 The reply will have STATUS (`accepted', `tentative' or  `declined').
 The reply will be composed for attendees matching any entry
 on the IDENTITIES list."
-  (gmm-labels ((extract-block (blockname)
-               (save-excursion
-                 (let ((block-start-re (format "^BEGIN:%s" blockname))
-                       (block-end-re (format "^END:%s" blockname))
-                       start)
-                   (when (re-search-forward block-start-re nil t)
-                     (setq start (line-beginning-position))
-                     (re-search-forward block-end-re)
-                     (buffer-substring-no-properties start (line-end-position)))))))
-
+  (cl-labels
+      ((extract-block
+       (blockname)
+       (save-excursion
+         (let ((block-start-re (format "^BEGIN:%s" blockname))
+               (block-end-re (format "^END:%s" blockname))
+               start)
+           (when (re-search-forward block-start-re nil t)
+             (setq start (line-beginning-position))
+             (re-search-forward block-end-re)
+             (buffer-substring-no-properties start (line-end-position)))))))
     (let (zone event)
       (with-current-buffer (icalendar--get-unfolded-buffer (get-buffer buf))
         (goto-char (point-min))
@@ -376,7 +388,7 @@ on the IDENTITIES list."
 (defvar gnus-icalendar-org-enabled-p nil)
 
 
-(defmethod gnus-icalendar-event:org-repeat ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:org-repeat ((event gnus-icalendar-event))
   "Return `org-mode' timestamp repeater string for recurring EVENT.
 Return nil for non-recurring EVENT."
   (when (gnus-icalendar-event:recurring-p event)
@@ -390,14 +402,14 @@ Return nil for non-recurring EVENT."
       (when org-freq
         (format "+%s%s" (gnus-icalendar-event:recurring-interval event) org-freq)))))
 
-(defmethod gnus-icalendar-event:org-timestamp ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:org-timestamp ((event gnus-icalendar-event))
   "Build `org-mode' timestamp from EVENT start/end dates and recurrence info."
   (let* ((start (gnus-icalendar-event:start-time event))
          (end (gnus-icalendar-event:end-time event))
-         (start-date (format-time-string "%Y-%m-%d %a" start))
+         (start-date (format-time-string "%Y-%m-%d" start))
          (start-time (format-time-string "%H:%M" start))
          (start-at-midnight (string= start-time "00:00"))
-         (end-date (format-time-string "%Y-%m-%d %a" end))
+         (end-date (format-time-string "%Y-%m-%d" end))
          (end-time (format-time-string "%H:%M" end))
          (end-at-midnight (string= end-time "00:00"))
          (start-end-date-diff
@@ -417,7 +429,7 @@ Return nil for non-recurring EVENT."
      ;; A 0:0 - A+1 0:0 -> A
      ;; A 0:0 - A+n 0:0 -> A - A+n-1
      ((and start-at-midnight end-at-midnight) (if (> start-end-date-diff 1)
-                                                  (let ((end-ts (format-time-string "%Y-%m-%d %a" (time-subtract end time-1-day))))
+                                                  (let ((end-ts (format-time-string "%Y-%m-%d" (time-subtract end time-1-day))))
                                                     (format "<%s>--<%s>" start-date end-ts))
                                                 (format "<%s%s>" start-date repeat)))
      ;; end midnight
@@ -425,7 +437,7 @@ Return nil for non-recurring EVENT."
      ;; A .:. - A+n 0:0 -> A .:. - A_n-1
      (end-at-midnight (if (= start-end-date-diff 1)
                           (format "<%s %s-23:59%s>" start-date start-time repeat)
-                        (let ((end-ts (format-time-string "%Y-%m-%d %a" (time-subtract end time-1-day))))
+                        (let ((end-ts (format-time-string "%Y-%m-%d" (time-subtract end time-1-day))))
                           (format "<%s %s>--<%s>" start-date start-time end-ts))))
      ;; start midnight
      ;; A 0:0 - A .:. -> A 0:0-.:. (default 1)
@@ -448,7 +460,7 @@ Return nil for non-recurring EVENT."
   (mapconcat #'identity participants ", "))
 
 ;; TODO: make the template customizable
-(defmethod gnus-icalendar-event->org-entry ((event gnus-icalendar-event) reply-status)
+(cl-defmethod gnus-icalendar-event->org-entry ((event gnus-icalendar-event) reply-status)
   "Return string with new `org-mode' entry describing EVENT."
   (with-temp-buffer
     (org-mode)
@@ -498,16 +510,17 @@ the optional ORG-FILE argument is specified, only that one file
 is searched."
   (let ((uid (gnus-icalendar-event:uid event))
         (files (or org-file (org-agenda-files t 'ifmode))))
-    (gmm-labels
-        ((find-event-in (file)
-           (org-check-agenda-file file)
-           (with-current-buffer (find-file-noselect file)
-             (let ((event-pos (org-find-entry-with-id uid)))
-               (when (and event-pos
-                          (string= (cdr (assoc "ICAL_EVENT" (org-entry-properties event-pos)))
-                                   "t"))
-                 (throw 'found file))))))
-
+    (cl-labels
+        ((find-event-in
+         (file)
+         (org-check-agenda-file file)
+         (with-current-buffer (find-file-noselect file)
+           (let ((event-pos (org-find-entry-with-id uid)))
+             (when (and event-pos
+                        (string= (cdr (assoc "ICAL_EVENT"
+                                             (org-entry-properties event-pos)))
+                                 "t"))
+               (throw 'found file))))))
       (gnus-icalendar-find-if #'find-event-in files))))
 
 
@@ -567,22 +580,29 @@ is searched."
                     (fill-region (point-min) (point-max))))
 
                 ;; update entry properties
-                (gmm-labels
-                    ((update-org-entry (position property value)
-                                       (if (or (null value)
-                                               (string= value ""))
-                                           (org-entry-delete position property)
-                                         (org-entry-put position property value))))
+                (cl-labels
+                    ((update-org-entry
+                     (position property value)
+                     (if (or (null value)
+                             (string= value ""))
+                         (org-entry-delete position property)
+                       (org-entry-put position property value))))
 
                   (update-org-entry event-pos "ORGANIZER" organizer)
                   (update-org-entry event-pos "LOCATION" location)
-                  (update-org-entry event-pos "PARTICIPATION_TYPE" (symbol-name participation-type))
-                  (update-org-entry event-pos "REQ_PARTICIPANTS" (gnus-icalendar--format-participant-list req-participants))
-                  (update-org-entry event-pos "OPT_PARTICIPANTS" (gnus-icalendar--format-participant-list opt-participants))
+                  (update-org-entry event-pos "PARTICIPATION_TYPE"
+                                   (symbol-name participation-type))
+                  (update-org-entry event-pos "REQ_PARTICIPANTS"
+                                   (gnus-icalendar--format-participant-list
+                                    req-participants))
+                  (update-org-entry event-pos "OPT_PARTICIPANTS"
+                                   (gnus-icalendar--format-participant-list
+                                    opt-participants))
                   (update-org-entry event-pos "RRULE" recur)
-                  (update-org-entry event-pos "REPLY"
-                                    (if reply-status (capitalize (symbol-name reply-status))
-                                      "Not replied yet")))
+                  (update-org-entry
+                  event-pos "REPLY"
+                  (if reply-status (capitalize (symbol-name reply-status))
+                    "Not replied yet")))
                 (save-buffer)))))))))
 
 
@@ -641,12 +661,12 @@ is searched."
 
     (org-agenda-list nil (gnus-icalendar-event:start event) duration-days)))
 
-(defmethod gnus-icalendar-event:sync-to-org ((event gnus-icalendar-event-request) reply-status)
+(cl-defmethod gnus-icalendar-event:sync-to-org ((event gnus-icalendar-event-request) reply-status)
   (if (gnus-icalendar-find-org-event-file event)
       (gnus-icalendar--update-org-event event reply-status)
     (gnus-icalendar:org-event-save event reply-status)))
 
-(defmethod gnus-icalendar-event:sync-to-org ((event gnus-icalendar-event-cancel) reply-status)
+(cl-defmethod gnus-icalendar-event:sync-to-org ((event gnus-icalendar-event-cancel) reply-status)
   (when (gnus-icalendar-find-org-event-file event)
     (gnus-icalendar--cancel-org-event event)))
 
@@ -703,40 +723,43 @@ only makes sense to define names or email addresses."
 
 These will be used to retrieve the RSVP information from ical events."
   (apply #'append
-         (mapcar (lambda (x) (if (listp x) x (list x)))
-                 (list user-full-name (regexp-quote user-mail-address)
-                       ; NOTE: these can be lists
-                       gnus-ignored-from-addresses ; already regexp-quoted
-                       message-alternative-emails  ;
-                       (mapcar #'regexp-quote gnus-icalendar-additional-identities)))))
+         (mapcar
+         (lambda (x) (if (listp x) x (list x)))
+         (list user-full-name (regexp-quote user-mail-address)
+               ;; NOTE: these can be lists
+               gnus-ignored-from-addresses ; already regexp-quoted
+               (unless (functionp message-alternative-emails) ; String or function.
+                 message-alternative-emails)
+               (mapcar #'regexp-quote gnus-icalendar-additional-identities)))))
 
 ;; TODO: make the template customizable
-(defmethod gnus-icalendar-event->gnus-calendar ((event gnus-icalendar-event) &optional reply-status)
+(cl-defmethod gnus-icalendar-event->gnus-calendar ((event gnus-icalendar-event) &optional reply-status)
   "Format an overview of EVENT details."
-  (gmm-labels ((format-header (x)
-            (format "%-12s%s"
-                    (propertize (concat (car x) ":") 'face 'bold)
-                    (cadr x))))
+  (cl-labels
+      ((format-header (x)
+                     (format "%-12s%s"
+                             (propertize (concat (car x) ":") 'face 'bold)
+                             (cadr x))))
 
     (with-slots (organizer summary description location recur uid
                            method rsvp participation-type) event
       (let ((headers `(("Summary" ,summary)
-                      ("Location" ,(or location ""))
-                      ("Time" ,(gnus-icalendar-event:org-timestamp event))
-                      ("Organizer" ,organizer)
-                      ("Attendance" ,(if (eq participation-type 'non-participant)
-                                         "You are not listed as an attendee"
-                                       (capitalize (symbol-name participation-type))))
-                      ("Method" ,method))))
-
-       (when (and (not (gnus-icalendar-event-reply-p event)) rsvp)
-         (setq headers (append headers
-                               `(("Status" ,(or reply-status "Not replied yet"))))))
-
-       (concat
-        (mapconcat #'format-header headers "\n")
-        "\n\n"
-        description)))))
+                      ("Location" ,(or location ""))
+                      ("Time" ,(gnus-icalendar-event:org-timestamp event))
+                      ("Organizer" ,organizer)
+                      ("Attendance" ,(if (eq participation-type 'non-participant)
+                                         "You are not listed as an attendee"
+                                       (capitalize (symbol-name participation-type))))
+                      ("Method" ,method))))
+
+       (when (and (not (gnus-icalendar-event-reply-p event)) rsvp)
+         (setq headers (append headers
+                               `(("Status" ,(or reply-status "Not replied yet"))))))
+
+       (concat
+        (mapconcat #'format-header headers "\n")
+        "\n\n"
+        description)))))
 
 (defmacro gnus-icalendar-with-decoded-handle (handle &rest body)
   "Execute BODY in buffer containing the decoded contents of HANDLE."
@@ -745,8 +768,7 @@ These will be used to retrieve the RSVP information from ical events."
        (with-temp-buffer
          (mm-insert-part ,handle)
          (when (string= ,charset "utf-8")
-           (mm-decode-coding-region (point-min) (point-max) 'utf-8))
-
+           (decode-coding-region (point-min) (point-max) 'utf-8))
          ,@body))))
 
 
@@ -758,7 +780,7 @@ These will be used to retrieve the RSVP information from ical events."
   ;; FIXME: the gnus-mime-button-map keymap does not make sense for this kind
   ;; of button.
   (let ((start (point)))
-    (gnus-add-text-properties
+    (add-text-properties
      start
      (progn
        (insert "[ " text " ]")
@@ -769,8 +791,7 @@ These will be used to retrieve the RSVP information from ical events."
        face ,gnus-article-button-face
        gnus-data ,data))
     (widget-convert-button 'link start (point)
-                           :action 'gnus-widget-press-button
-                           :button-keymap gnus-widget-button-keymap)))
+                           :action 'gnus-widget-press-button)))
 
 (defun gnus-icalendar-send-buffer-by-mail (buffer-name subject)
   (let ((message-signature nil))
@@ -794,11 +815,13 @@ These will be used to retrieve the RSVP information from ical events."
                    (current-buffer) status (gnus-icalendar-identities)))))
 
     (when reply
-      (gmm-labels ((fold-icalendar-buffer ()
-               (goto-char (point-min))
-               (while (re-search-forward "^\\(.\\{72\\}\\)\\(.+\\)$" nil t)
-                 (replace-match "\\1\n \\2")
-                 (goto-char (line-beginning-position)))))
+      (cl-labels
+         ((fold-icalendar-buffer
+           ()
+           (goto-char (point-min))
+           (while (re-search-forward "^\\(.\\{72\\}\\)\\(.+\\)$" nil t)
+             (replace-match "\\1\n \\2")
+             (goto-char (line-beginning-position)))))
         (let ((subject (concat (capitalize (symbol-name status))
                                ": " (gnus-icalendar-event:summary event))))
 
@@ -819,27 +842,27 @@ These will be used to retrieve the RSVP information from ical events."
 (defun gnus-icalendar-sync-event-to-org (event)
   (gnus-icalendar-event:sync-to-org event gnus-icalendar-reply-status))
 
-(defmethod gnus-icalendar-event:inline-reply-buttons ((event gnus-icalendar-event) handle)
+(cl-defmethod gnus-icalendar-event:inline-reply-buttons ((event gnus-icalendar-event) handle)
   (when (gnus-icalendar-event:rsvp event)
     `(("Accept" gnus-icalendar-reply (,handle accepted ,event))
       ("Tentative" gnus-icalendar-reply (,handle tentative ,event))
       ("Decline" gnus-icalendar-reply (,handle declined ,event)))))
 
-(defmethod gnus-icalendar-event:inline-reply-buttons ((event gnus-icalendar-event-reply) handle)
+(cl-defmethod gnus-icalendar-event:inline-reply-buttons ((event gnus-icalendar-event-reply) handle)
   "No buttons for REPLY events."
   nil)
 
-(defmethod gnus-icalendar-event:inline-reply-status ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:inline-reply-status ((event gnus-icalendar-event))
   (or (when gnus-icalendar-org-enabled-p
         (gnus-icalendar--get-org-event-reply-status event))
       "Not replied yet"))
 
-(defmethod gnus-icalendar-event:inline-reply-status ((event gnus-icalendar-event-reply))
+(cl-defmethod gnus-icalendar-event:inline-reply-status ((event gnus-icalendar-event-reply))
   "No reply status for REPLY events."
   nil)
 
 
-(defmethod gnus-icalendar-event:inline-org-buttons ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:inline-org-buttons ((event gnus-icalendar-event))
   (let* ((org-entry-exists-p (gnus-icalendar-find-org-event-file event))
          (export-button-text (if org-entry-exists-p "Update Org Entry" "Export to Org")))
 
@@ -851,7 +874,7 @@ These will be used to retrieve the RSVP information from ical events."
                  `("Show Org Entry" gnus-icalendar--show-org-event ,event))))))
 
 
-(defmethod gnus-icalendar-event:inline-org-buttons ((event gnus-icalendar-event-cancel))
+(cl-defmethod gnus-icalendar-event:inline-org-buttons ((event gnus-icalendar-event-cancel))
   (let ((org-entry-exists-p (gnus-icalendar-find-org-event-file event)))
 
     (delq nil (list
@@ -868,13 +891,15 @@ These will be used to retrieve the RSVP information from ical events."
     (setq gnus-icalendar-reply-status nil)
 
     (when event
-      (gmm-labels ((insert-button-group (buttons)
-                (when buttons
-                  (mapc (lambda (x)
-                          (apply 'gnus-icalendar-insert-button x)
-                          (insert "    "))
-                        buttons)
-                  (insert "\n\n"))))
+      (cl-labels
+         ((insert-button-group
+           (buttons)
+           (when buttons
+             (mapc (lambda (x)
+                     (apply 'gnus-icalendar-insert-button x)
+                     (insert "    "))
+                   buttons)
+             (insert "\n\n"))))
 
         (insert-button-group
         (gnus-icalendar-event:inline-reply-buttons event handle))
index d0798d3426a16efd6ab2a2f23cd12c9fb0108df6..93545ff39bc0d7070ba0d96ac2989176bcc86c30 100644 (file)
@@ -164,7 +164,7 @@ If CONFIRM is non-nil, the user will be asked for an NNTP server."
        (gnus-open-server gnus-select-method)
        gnus-batch-mode
        (gnus-y-or-n-p
-       (gnus-format-message
+       (format-message
         "%s (%s) open error: `%s'.  Continue? "
         (car gnus-select-method) (cadr gnus-select-method)
         (gnus-status-message gnus-select-method)))
@@ -777,8 +777,7 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
       (message-options-set-recipient)
       (save-restriction
        (message-narrow-to-head)
-       (let ((mail-parse-charset message-default-charset))
-         (mail-encode-encoded-word-buffer)))
+       (mail-encode-encoded-word-buffer))
       (message-encode-message-body)))
   (let ((gnus-command-method (or gnus-command-method
                                 (gnus-find-method-for-group group)))
@@ -800,8 +799,7 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
       (message-options-set-recipient)
       (save-restriction
        (message-narrow-to-head)
-       (let ((mail-parse-charset message-default-charset))
-         (mail-encode-encoded-word-buffer)))
+       (mail-encode-encoded-word-buffer))
       (message-encode-message-body)))
   (let* ((func (car (gnus-group-name-to-method group)))
          (result (funcall (intern (format "%s-request-replace-article" func))
index 8ff36160f0900d58c65b4d8d06c233e404589aa2..97bbab41fd1c1735add7bff0b18cdfaee62b1964 100644 (file)
@@ -29,9 +29,6 @@
 (require 'gnus)
 (require 'gnus-msg)
 (eval-when-compile (require 'cl))
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (require 'easy-mmode))) ; for `define-minor-mode'
 
 ;;; Mailing list minor mode
 
@@ -84,12 +81,6 @@ If FORCE is non-nil, replace the old ones."
          (gnus-mailing-list-mode 1))
       (gnus-message 1 "no list-post in this message."))))
 
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (defvar gnus-mailing-list-mode-hook)
-    (defvar gnus-mailing-list-mode-on-hook)
-    (defvar gnus-mailing-list-mode-off-hook)))
-
 ;;;###autoload
 (define-minor-mode gnus-mailing-list-mode
   "Minor mode for providing mailing-list commands.
index b95bec2ace6879cce2fc082b11a37ed43fe36f82..8cabe01168b67861bb3732462ce1c9a79460ae8b 100644 (file)
@@ -28,7 +28,6 @@
 (eval-when-compile (require 'cl))
 
 (require 'gnus)
-(require 'gnus-ems)
 (require 'message)
 (require 'gnus-art)
 (require 'gnus-util)
@@ -496,8 +495,6 @@ Thank you for your help in stamping out bugs.
             (let ((mbl1 mml-buffer-list))
               (setq mml-buffer-list mbl)  ;; Global value
               (set (make-local-variable 'mml-buffer-list) mbl1);; Local value
-              (gnus-make-local-hook 'kill-buffer-hook)
-              (gnus-make-local-hook 'change-major-mode-hook)
               (add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t)
               (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))
           (mml-destroy-buffers)
@@ -594,11 +591,9 @@ instead."
 (defun gnus-inews-add-send-actions (winconf buffer article
                                            &optional config yanked
                                            winconf-name)
-  (gnus-make-local-hook 'message-sent-hook)
   (add-hook 'message-sent-hook (if gnus-agent 'gnus-agent-possibly-do-gcc
                                 'gnus-inews-do-gcc) nil t)
   (when gnus-agent
-    (gnus-make-local-hook 'message-header-hook)
     (add-hook 'message-header-hook 'gnus-agent-possibly-save-gcc nil t))
   (setq message-post-method
        `(lambda (&optional arg)
@@ -1139,9 +1134,9 @@ See the variable `gnus-user-agent'."
           (gnus-v
            (when (memq 'gnus gnus-user-agent)
              (concat "Gnus/"
-                     (gnus-replace-in-string
-                      (format "%1.8f" (gnus-continuum-version gnus-version))
-                      "0+\\'" "")
+                     (replace-regexp-in-string
+                      "0+\\'" ""
+                      (format "%1.8f" (gnus-continuum-version gnus-version)))
                      " (" gnus-version ")")))
           (emacs-v (gnus-emacs-version)))
       (concat gnus-v (when (and gnus-v emacs-v) " ")
@@ -1347,7 +1342,7 @@ For the \"inline\" alternatives, also see the variable
   (gnus-inews-insert-gcc)
   (let ((gcc (mapcar
              (lambda (group)
-               (mm-encode-coding-string
+               (encode-coding-string
                 group
                 (gnus-group-name-charset (gnus-inews-group-method group)
                                          group)))
@@ -1364,7 +1359,7 @@ For the \"inline\" alternatives, also see the variable
             (insert "Gcc: \"" gnus-newsgroup-name "\"\n"))
            ((stringp self)
             (insert "Gcc: "
-                    (mm-encode-coding-string
+                    (encode-coding-string
                      (if (string-match " " self)
                          (concat "\"" self "\"")
                        self)
@@ -1403,7 +1398,7 @@ For the \"inline\" alternatives, also see the variable
        tem)
     (dolist (style styles)
       (when (stringp (cadr style))
-       (setcdr style (list (mm-decode-coding-string (cadr style) 'utf-8)))))
+       (setcdr style (list (decode-coding-string (cadr style) 'utf-8)))))
     (dolist (style (if styles
                       (append gnus-posting-styles (list (cons ".*" styles)))
                     gnus-posting-styles))
@@ -1496,7 +1491,7 @@ See `gnus-summary-mail-forward' for ARG."
        (message-goto-subject)
        (re-search-forward " *$")
        (replace-match " (crosspost notification)" t t)
-       (gnus-deactivate-mark)
+       (deactivate-mark)
        (when (gnus-y-or-n-p "Send this complaint? ")
          (message-send-and-exit))))))
 
@@ -1642,7 +1637,7 @@ this is a reply."
          ;; Copy the article over to some group(s).
          (while (setq group (pop groups))
            (setq method (gnus-inews-group-method group)
-                 group (mm-encode-coding-string
+                 group (encode-coding-string
                         group
                         (gnus-group-name-charset method group)))
            (unless (gnus-check-server method)
@@ -1663,8 +1658,7 @@ this is a reply."
              (run-hooks 'gnus-gcc-post-body-encode-hook)
              (save-restriction
                (message-narrow-to-headers)
-               (let* ((mail-parse-charset message-default-charset)
-                      (newsgroups-field (save-restriction
+               (let* ((newsgroups-field (save-restriction
                                           (message-narrow-to-headers-or-head)
                                           (message-fetch-field "Newsgroups")))
                       (followup-field (save-restriction
@@ -1845,8 +1839,8 @@ this is a reply."
          (when tmp-style
            (dolist (style tmp-style)
              (when (stringp (cadr style))
-               (setcdr style (list (mm-decode-coding-string (cadr style)
-                                                            'utf-8)))))
+               (setcdr style (list (decode-coding-string (cadr style)
+                                                         'utf-8)))))
            (setq styles (append styles (list (cons ".*" tmp-style)))))))
       ;; Go through all styles and look for matches.
       (dolist (style styles)
@@ -1909,10 +1903,10 @@ this is a reply."
                  (cond
                   ((stringp value)
                    (if (and matched-string
-                            (gnus-string-match-p "\\\\[&[:digit:]]" value)
+                            (string-match-p "\\\\[&[:digit:]]" value)
                             (match-beginning 1))
-                       (gnus-match-substitute-replacement value nil nil
-                                                          matched-string)
+                       (match-substitute-replacement value nil nil
+                                                     matched-string)
                      value))
                   ((or (symbolp value)
                        (functionp value))
@@ -1954,7 +1948,6 @@ this is a reply."
       (setq name (assq 'name results)
            address (assq 'address results))
       (setq results (delq name (delq address results)))
-      (gnus-make-local-hook 'message-setup-hook)
       (setq results (sort results (lambda (x y)
                                    (string-lessp (car x) (car y)))))
       (dolist (result results)
@@ -2006,10 +1999,6 @@ this is a reply."
                         (insert "From: " (message-make-from) "\n"))))
                  nil 'local)))))
 
-;;; Allow redefinition of functions.
-
-(gnus-ems-redefine)
-
 (provide 'gnus-msg)
 
 ;;; gnus-msg.el ends here
index 54a75b69c850fe9f99174c6a4033b702dbbfa199..2f6d6a8b61961d8af42be7729386665e3b4f910b 100644 (file)
@@ -81,7 +81,7 @@ not get notifications."
             (article (nth 2 group-article)))
         (cond ((string= key "read")
                (gnus-fetch-group group (list article))
-               (gnus-select-frame-set-input-focus (selected-frame)))
+               (select-frame-set-input-focus (selected-frame)))
               ((string= key "mark-read")
                (gnus-update-read-articles
                 group
@@ -180,8 +180,11 @@ This is typically a function to add in
                   ;; Ignore mails from ourselves
                   (unless (and gnus-ignored-from-addresses
                                address
-                               (gnus-string-match-p gnus-ignored-from-addresses
-                                                    address))
+                               (cond ((functionp gnus-ignored-from-addresses)
+                                      (funcall gnus-ignored-from-addresses address))
+                                     (t (string-match-p
+                                        (gnus-ignored-from-addresses)
+                                        address))))
                     (let* ((photo-file (gnus-notifications-get-photo-file address))
                            (notification-id (gnus-notifications-notify
                                              (or (car address-components) address)
index bbbe0eded4e69c20b2acf200d425ebb2be0a43ad..1b0acd24030b1cbdd7a3264265a48d7b3205c3ae 100644 (file)
@@ -81,7 +81,6 @@ Some people may want to add \"unknown\" to this list."
   "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)
index 74e2b827c60cb03488145a835dcc969408c46875..c636c7eb32bf9ad658779aeb6feb8f78354c6af6 100644 (file)
 (require 'easymenu)
 (require 'registry)
 
-;; Silence XEmacs byte compiler, which will otherwise complain about
-;; call to `eieio-persistent-read'.
-(when (featurep 'xemacs)
-   (byte-compiler-options
-     (warnings (- callargs))))
-
 (defvar gnus-adaptive-word-syntax-table)
 
 (defvar gnus-registry-dirty t
@@ -1036,7 +1030,7 @@ only the last one's marks are returned."
   (let* ((article (last articles))
          (id (gnus-registry-fetch-message-id-fast article))
          (marks (when id (gnus-registry-get-id-key id 'mark))))
-    (when (gmm-called-interactively-p 'any)
+    (when (called-interactively-p 'any)
       (gnus-message 1 "Marks are %S" marks))
     marks))
 
diff --git a/lisp/gnus/gnus-rfc1843.el b/lisp/gnus/gnus-rfc1843.el
new file mode 100644 (file)
index 0000000..4e6fdc6
--- /dev/null
@@ -0,0 +1,77 @@
+;;; gnus-rfc1843.el --- HZ (rfc1843) decoding interface functions for Gnus
+
+;; Copyright (C) 1998-2016 Free Software Foundation, Inc.
+
+;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
+;; Keywords: news HZ HZ+ mail i18n
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Usage:
+;; (require 'gnus-rfc1843)
+;; (rfc1843-gnus-setup)
+
+;;; Code:
+
+(require 'rfc1843)
+(require 'gnus-sum)
+(require 'gnus-art)
+(require 'message)
+
+(defun rfc1843-decode-article-body ()
+  "Decode HZ encoded text in the article body."
+  (if (string-match (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
+                   (or gnus-newsgroup-name ""))
+      (save-excursion
+       (save-restriction
+         (message-narrow-to-head)
+         (let* ((inhibit-point-motion-hooks t)
+                (case-fold-search t)
+                (ct (message-fetch-field "Content-Type" t))
+                (ctl (and ct (mail-header-parse-content-type ct))))
+           (if (and ctl (not (string-match "/" (car ctl))))
+               (setq ctl nil))
+           (goto-char (point-max))
+           (widen)
+           (forward-line 1)
+           (narrow-to-region (point) (point-max))
+           (when (or (not ctl)
+                     (equal (car ctl) "text/plain"))
+             (rfc1843-decode-region (point) (point-max))))))))
+
+(defun rfc1843-gnus-setup ()
+  "Setup HZ decoding for Gnus."
+  (add-hook 'gnus-article-decode-hook 'rfc1843-decode-article-body t)
+  (setq gnus-decode-encoded-word-function
+       'gnus-multi-decode-encoded-word-string
+       gnus-decode-header-function
+       'gnus-multi-decode-header
+       gnus-decode-encoded-word-methods
+       (nconc gnus-decode-encoded-word-methods
+              (list
+               (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
+                     'rfc1843-decode-string)))
+       gnus-decode-header-methods
+       (nconc gnus-decode-header-methods
+              (list
+               (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
+                     'rfc1843-decode-region)))))
+
+(provide 'gnus-rfc1843)
+
+;;; gnus-rfc1843.el ends here
index d3e82fd7074993cbc49c79c15f8a81326fbd47d3..fc85bd69baf0faf40f5799824ea3cdcef7ce79d0 100644 (file)
@@ -25,9 +25,6 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (require 'easy-mmode))) ; for `define-minor-mode'
 
 (require 'gnus)
 (require 'gnus-sum)
@@ -47,9 +44,6 @@
   :type 'hook
   :group 'gnus-summary-pick)
 
-(when (featurep 'xemacs)
-  (add-hook 'gnus-pick-mode-hook 'gnus-xmas-pick-menu-add))
-
 (defcustom gnus-mark-unpicked-articles-as-read nil
   "*If non-nil, mark all unpicked articles as read."
   :type 'boolean
@@ -76,7 +70,7 @@ It accepts the same format specs that `gnus-summary-line-format' does."
       " " gnus-pick-next-page
       "u" gnus-pick-unmark-article-or-thread
       "." gnus-pick-article-or-thread
-      gnus-down-mouse-2 gnus-pick-mouse-pick-region
+      [down-mouse-2] gnus-pick-mouse-pick-region
       "\r" gnus-pick-start-reading)
     map))
 
@@ -100,11 +94,6 @@ It accepts the same format specs that `gnus-summary-line-format' does."
        ["Start reading" gnus-pick-start-reading t]
        ["Switch pick mode off" gnus-pick-mode gnus-pick-mode]))))
 
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (defvar gnus-pick-mode-on-hook)
-    (defvar gnus-pick-mode-off-hook)))
-
 (define-minor-mode gnus-pick-mode
   "Minor mode for providing a pick-and-read interface in Gnus summary buffers.
 
@@ -229,7 +218,7 @@ This must be bound to a button-down mouse event."
         (start-point (posn-point start-posn))
          (start-line (1+ (count-lines (point-min) start-point)))
         (start-window (posn-window start-posn))
-        (bounds (gnus-window-edges start-window))
+        (bounds (window-edges start-window))
         (top (nth 1 bounds))
         (bottom (if (window-minibuffer-p start-window)
                     (nth 3 bounds)
@@ -339,11 +328,6 @@ This must be bound to a button-down mouse event."
       '("Pick"
        ["Switch binary mode off" gnus-binary-mode t]))))
 
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (defvar gnus-binary-mode-on-hook)
-    (defvar gnus-binary-mode-off-hook)))
-
 (define-minor-mode gnus-binary-mode
   "Minor mode for providing a binary group interface in Gnus summary buffers."
   :lighter " Binary" :keymap gnus-binary-mode-map
@@ -419,11 +403,6 @@ Two predefined functions are available:
   :type 'hook
   :group 'gnus-summary-tree)
 
-(when (featurep 'xemacs)
-  (add-hook 'gnus-tree-mode-hook 'gnus-xmas-tree-menu-add)
-  (add-hook 'gnus-tree-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off))
-
-
 ;;; Internal variables.
 
 (defvar gnus-tmp-name)
@@ -458,7 +437,7 @@ Two predefined functions are available:
     (gnus-define-keys
         map
       "\r" gnus-tree-select-article
-      gnus-mouse-2 gnus-tree-pick-article
+      [mouse-2] gnus-tree-pick-article
       "\C-?" gnus-tree-read-summary-keys
       "h" gnus-tree-show-summary
 
@@ -639,7 +618,7 @@ Two predefined functions are available:
                (t (cdar gnus-tree-brackets))))
         (buffer-read-only nil)
         beg end)
-    (gnus-add-text-properties
+    (add-text-properties
      (setq beg (point))
      (setq end (progn (eval gnus-tree-line-format-spec) (point)))
      (list 'gnus-number gnus-tmp-number))
@@ -855,8 +834,7 @@ it in the environment specified by BINDINGS."
          region)
       (set-buffer gnus-tree-buffer)
       (when (setq region (gnus-tree-article-region article))
-       (when (or (not gnus-selected-tree-overlay)
-                 (gnus-extent-detached-p gnus-selected-tree-overlay))
+       (when (not gnus-selected-tree-overlay)
          ;; Create a new overlay.
          (overlay-put
           (setq gnus-selected-tree-overlay
@@ -885,13 +863,10 @@ it in the environment specified by BINDINGS."
     (with-current-buffer (gnus-get-tree-buffer)
       (let (region)
        (when (setq region (gnus-tree-article-region article))
-         (gnus-put-text-property (car region) (cdr region) 'face face)
+         (put-text-property (car region) (cdr region) 'face face)
          (set-window-point
           (gnus-get-buffer-window (current-buffer) t) (cdr region)))))))
 
-;;; Allow redefinition of functions.
-(gnus-ems-redefine)
-
 (provide 'gnus-salt)
 
 ;;; gnus-salt.el ends here
index d3a1139902b986e414c449b5b8a26aded8a62618..14059ac566be8c2940566e5e826078378d987604 100644 (file)
@@ -29,6 +29,7 @@
 
 (require 'gnus)
 (require 'gnus-sum)
+(require 'gnus-art)
 (require 'gnus-range)
 (require 'gnus-win)
 (require 'message)
@@ -739,6 +740,8 @@ current score file."
       (with-current-buffer gnus-summary-buffer
        (gnus-score-load-file current-score-file)))))
 
+(autoload 'appt-select-lowest-window "appt")
+
 (defun gnus-score-insert-help (string alist idx)
   (setq gnus-score-help-winconf (current-window-configuration))
   (with-current-buffer (gnus-get-buffer-create "*Score Help*")
@@ -773,7 +776,7 @@ current score file."
        (setq i (1+ i))))
     (goto-char (point-min))
     ;; display ourselves in a small window at the bottom
-    (gnus-select-lowest-window)
+    (appt-select-lowest-window)
     (if (< (/ (window-height) 2) window-min-height)
        (switch-to-buffer "*Score Help*")
       (split-window)
@@ -1428,7 +1431,7 @@ If FORMAT, also format the current score file."
                (and (file-exists-p file)
                     (not (file-writable-p file))))
            ()
-         (setq score (setcdr entry (gnus-delete-alist 'touched score)))
+         (setq score (setcdr entry (assq-delete-all 'touched score)))
          (erase-buffer)
          (let (emacs-lisp-mode-hook)
            (if (and (not gnus-adaptive-pretty-print)
@@ -1724,7 +1727,7 @@ score in `gnus-newsgroup-scored' by SCORE."
   nil)
 
 (defun gnus-score-decode-text-parts ()
-  (gmm-labels
+  (cl-labels
       ((mm-text-parts
        (handle)
        (cond ((stringp (car handle))
@@ -1748,7 +1751,7 @@ score in `gnus-newsgroup-scored' by SCORE."
            (mm-display-inline handle)
            (goto-char (point-max))))))
 
-    (let (;(mm-text-html-renderer 'w3m-standalone)
+    (let (                   ;(mm-text-html-renderer 'w3m-standalone)
          (handles (mm-dissect-buffer t)))
       (save-excursion
        (article-goto-body)
@@ -3048,19 +3051,12 @@ If ADAPT, return the home adaptive file instead."
 
 (defun gnus-decay-score (score)
   "Decay SCORE according to `gnus-score-decay-constant' and `gnus-score-decay-scale'."
-  (let ((n (- score
-             (* (if (< score 0) -1 1)
-                (min (abs score)
-                     (max gnus-score-decay-constant
-                          (* (abs score)
-                             gnus-score-decay-scale)))))))
-    (if (and (featurep 'xemacs)
-            ;; XEmacs's floor can handle only the floating point
-            ;; number below the half of the maximum integer.
-            (> (abs n) (lsh -1 -2)))
-       (string-to-number
-        (car (split-string (number-to-string n) "\\.")))
-      (floor n))))
+  (floor (- score
+           (* (if (< score 0) -1 1)
+              (min (abs score)
+                   (max gnus-score-decay-constant
+                        (* (abs score)
+                           gnus-score-decay-scale)))))))
 
 (defun gnus-decay-scores (alist day)
   "Decay non-permanent scores in ALIST."
index 2176e3fe34dd36a924e42b0c0de1e38d0d522a4b..a3525d8f28f0ffdfe201b4dfd8498c73cc0b796f 100644 (file)
 
 (require 'gnus)
 
-(defcustom gnus-use-correct-string-widths (featurep 'xemacs)
-  "*If non-nil, use correct functions for dealing with wide characters."
-  :version "22.1"
-  :group 'gnus-format
-  :type 'boolean)
-
-(defcustom gnus-make-format-preserve-properties (featurep 'xemacs)
-  "*If non-nil, use a replacement `format' function which preserves
-text properties. This is only needed on XEmacs, as Emacs does this anyway."
-  :version "22.1"
-  :group 'gnus-format
-  :type 'boolean)
-
 ;;; Internal variables.
 
 (defvar gnus-summary-mark-positions nil)
@@ -79,7 +66,6 @@ text properties. This is only needed on XEmacs, as Emacs does this anyway."
 (defvar gnus-tmp-news-method)
 (defvar gnus-tmp-news-server)
 (defvar gnus-mouse-face)
-(defvar gnus-mouse-face-prop)
 (defvar gnus-tmp-header)
 (defvar gnus-tmp-from)
 
@@ -87,11 +73,9 @@ text properties. This is only needed on XEmacs, as Emacs does this anyway."
                   (header gnus-tmp-from))
 
 (defmacro gnus-lrm-string-p (string)
-  (if (fboundp 'bidi-string-mark-left-to-right)
-      ;; LRM, RLM, PDF characters as integers to avoid breaking Emacs
-      ;; 23.
-      `(memq (aref ,string (1- (length ,string))) '(8206 8207 8236))
-    nil))
+  ;; LRM, RLM, PDF characters as integers to avoid breaking Emacs
+  ;; 23.
+  `(memq (aref ,string (1- (length ,string))) '(8206 8207 8236)))
 
 (defvar gnus-lrm-string (if (ignore-errors (string 8206))
                            (propertize (string 8206) 'invisible t)
@@ -226,9 +210,9 @@ Return a list of updated types."
   :type 'face)
 
 (defun gnus-mouse-face-function (form type)
-  `(gnus-put-text-property
+  `(put-text-property
     (point) (progn ,@form (point))
-    gnus-mouse-face-prop
+    'mouse-face
     ,(if (equal type 0)
         'gnus-mouse-face
        `(quote ,(symbol-value (intern (format "gnus-mouse-face-%d" type)))))))
@@ -259,23 +243,20 @@ Return a list of updated types."
   :type 'face)
 
 (defun gnus-face-face-function (form type)
-  `(gnus-add-text-properties
+  `(add-text-properties
     (point) (progn ,@form (point))
     (cons 'face
          (cons
           ;; Delay consing the value of the `face' property until
-          ;; `gnus-add-text-properties' runs, since it will be modified
-          ;; by `gnus-put-text-property-excluding-characters-with-faces'.
+          ;; `add-text-properties' runs, since it will be modified
+          ;; by `put-text-property-excluding-characters-with-faces'.
           (list ',(symbol-value (intern (format "gnus-face-%d" type))) 'default)
           ;; Redundant now, but still convenient.
           '(gnus-face t)))))
 
 (defun gnus-balloon-face-function (form type)
-  `(gnus-put-text-property
-    (point) (progn ,@form (point))
-    ,(if (fboundp 'balloon-help-mode)
-        ''balloon-help
-       ''help-echo)
+  `(put-text-property
+    (point) (progn ,@form (point)) 'help-echo
     ,(intern (format "gnus-balloon-face-%d" type))))
 
 (defun gnus-spec-tab (column)
@@ -316,62 +297,42 @@ Return a list of updated types."
     (setq wend seek)
     (substring string wstart (1- wend))))
 
-(defun gnus-string-width-function ()
-  (cond
-   (gnus-use-correct-string-widths
-    'gnus-correct-length)
-   ((fboundp 'string-width)
-    'string-width)
-   (t
-    'length)))
-
-(defun gnus-substring-function ()
-  (cond
-   (gnus-use-correct-string-widths
-    'gnus-correct-substring)
-   ((fboundp 'string-width)
-    'gnus-correct-substring)
-   (t
-    'substring)))
-
 (defun gnus-tilde-max-form (el max-width)
   "Return a form that limits EL to MAX-WIDTH."
-  (let ((max (abs max-width))
-       (length-fun (gnus-string-width-function))
-       (substring-fun (gnus-substring-function)))
+  (let ((max (abs max-width)))
     (if (symbolp el)
-       `(if (> (,length-fun ,el) ,max)
+       `(if (> (string-width ,el) ,max)
             ,(if (< max-width 0)
-                 `(,substring-fun ,el (- (,length-fun ,el) ,max))
+                 `(gnus-correct-substring ,el (- (string-width ,el) ,max))
                `(if (gnus-lrm-string-p ,el)
-                    (concat (,substring-fun ,el 0 ,max) ,gnus-lrm-string)
-                  (,substring-fun ,el 0 ,max)))
+                    (concat (gnus-correct-substring ,el 0 ,max)
+                            ,gnus-lrm-string)
+                  (gnus-correct-substring ,el 0 ,max)))
           ,el)
       `(let ((val (eval ,el)))
-        (if (> (,length-fun val) ,max)
+        (if (> (string-width val) ,max)
             ,(if (< max-width 0)
-                 `(,substring-fun val (- (,length-fun val) ,max))
+                 `(gnus-correct-substring val (- (string-width val) ,max))
                `(if (gnus-lrm-string-p val)
-                    (concat (,substring-fun val 0 ,max) ,gnus-lrm-string)
-                  (,substring-fun val 0 ,max)))
+                    (concat (gnus-correct-substring val 0 ,max)
+                            ,gnus-lrm-string)
+                  (gnus-correct-substring val 0 ,max)))
           val)))))
 
 (defun gnus-tilde-cut-form (el cut-width)
   "Return a form that cuts CUT-WIDTH off of EL."
-  (let ((cut (abs cut-width))
-       (length-fun (gnus-string-width-function))
-       (substring-fun (gnus-substring-function)))
+  (let ((cut (abs cut-width)))
     (if (symbolp el)
-       `(if (> (,length-fun ,el) ,cut)
+       `(if (> (string-width ,el) ,cut)
             ,(if (< cut-width 0)
-                 `(,substring-fun ,el 0 (- (,length-fun ,el) ,cut))
-               `(,substring-fun ,el ,cut))
+                 `(gnus-correct-substring ,el 0 (- (string-width ,el) ,cut))
+               `(gnus-correct-substring ,el ,cut))
           ,el)
       `(let ((val (eval ,el)))
-        (if (> (,length-fun val) ,cut)
+        (if (> (string-width val) ,cut)
             ,(if (< cut-width 0)
-                 `(,substring-fun val 0 (- (,length-fun val) ,cut))
-               `(,substring-fun val ,cut))
+                 `(gnus-correct-substring val 0 (- (string-width val) ,cut))
+               `(gnus-correct-substring val ,cut))
           val)))))
 
 (defun gnus-tilde-ignore-form (el ignore-value)
@@ -388,17 +349,16 @@ Return a list of updated types."
 characters correctly. This is because `format' may pad to columns or to
 characters when given a pad value."
   (let ((pad (abs pad-width))
-       (side (< 0 pad-width))
-       (length-fun (gnus-string-width-function)))
+       (side (< 0 pad-width)))
     (if (symbolp el)
-       `(let ((need (- ,pad (,length-fun ,el))))
+       `(let ((need (- ,pad (string-width ,el))))
           (if (> need 0)
               (concat ,(when side '(make-string need ?\ ))
                       ,el
                       ,(when (not side) '(make-string need ?\ )))
             ,el))
       `(let* ((val (eval ,el))
-             (need (- ,pad (,length-fun val))))
+             (need (- ,pad (string-width val))))
         (if (> need 0)
             (concat ,(when side '(make-string need ?\ ))
                     val
@@ -464,7 +424,7 @@ characters when given a pad value."
            `(let (gnus-position)
               ,@(gnus-complex-form-to-spec form spec-alist)
               (if gnus-position
-                  (gnus-put-text-property gnus-position (1+ gnus-position)
+                  (put-text-property gnus-position (1+ gnus-position)
                                           'gnus-position t)))
          `(progn
             ,@(gnus-complex-form-to-spec form spec-alist)))))))
@@ -486,42 +446,6 @@ characters when given a pad value."
                      (nth 1 sform)))))
         form)))
 
-
-(defun gnus-xmas-format (fstring &rest args)
-  "A version of `format' which preserves text properties.
-
-Required for XEmacs, where the built in `format' function strips all text
-properties from both the format string and any inserted strings.
-
-Only supports the format sequence %s, and %% for inserting
-literal % characters. A pad width and an optional - (to right pad)
-are supported for %s."
-  (let ((re "%%\\|%\\(-\\)?\\([1-9][0-9]*\\)?s")
-       (n (length args)))
-    (with-temp-buffer
-      (insert fstring)
-      (goto-char (point-min))
-      (while (re-search-forward re nil t)
-       (goto-char (match-end 0))
-       (cond
-        ((string= (match-string 0) "%%")
-         (delete-char -1))
-        (t
-         (if (null args)
-             (signal 'wrong-number-of-arguments
-                     (list #'gnus-xmas-format n fstring)))
-         (let* ((minlen (string-to-number (or (match-string 2) "")))
-                (arg (car args))
-                (str (if (stringp arg) arg (format "%s" arg)))
-                (lpad (null (match-string 1)))
-                (padlen (max 0 (- minlen (length str)))))
-           (replace-match "")
-           (if lpad (insert-char ?\  padlen))
-           (insert str)
-           (unless lpad (insert-char ?\  padlen))
-           (setq args (cdr args))))))
-      (buffer-string))))
-
 (defun gnus-parse-simple-format (format spec-alist &optional insert)
   ;; This function parses the FORMAT string with the help of the
   ;; SPEC-ALIST and returns a list that can be eval'ed to return a
@@ -628,14 +552,10 @@ are supported for %s."
            (setq elem '("*" ?s))))
          (setq elem-type (cadr elem))
          ;; Insert the new format elements.
-         (when (and pad-width
-                    (not (and (featurep 'xemacs)
-                              gnus-use-correct-string-widths)))
+         (when pad-width
            (insert (number-to-string pad-width)))
          ;; Create the form to be evalled.
-         (if (or max-width cut-width ignore-value
-                 (and (featurep 'xemacs)
-                      gnus-use-correct-string-widths))
+         (if (or max-width cut-width ignore-value)
              (progn
                (insert ?s)
                (let ((el (car elem)))
@@ -690,13 +610,6 @@ are supported for %s."
       ;; A single string spec in the end of the spec.
       ((string-match "\\`\\([^%]+\\)%[sc]\\'" fstring)
        (list (match-string 1 fstring) (car flist)))
-      ;; Only string (and %) specs (XEmacs only!)
-      ((and (featurep 'xemacs)
-           gnus-make-format-preserve-properties
-           (string-match
-            "\\`\\([^%]*\\(%%\\|%-?\\([1-9][0-9]*\\)?s\\)\\)*[^%]*\\'"
-            fstring))
-       (list (cons 'gnus-xmas-format (cons fstring (nreverse flist)))))
       ;; A more complex spec.
       (t
        (list (cons 'format (cons fstring (nreverse flist)))))))
@@ -717,7 +630,7 @@ are supported for %s."
 If PROPS, insert the result."
   (let ((form (gnus-parse-format format alist props)))
     (if props
-       (gnus-add-text-properties (point) (progn (eval form) (point)) props)
+       (add-text-properties (point) (progn (eval form) (point)) props)
       (eval form))))
 
 (defun gnus-set-format (type &optional insertable)
@@ -727,6 +640,25 @@ If PROPS, insert the result."
        (symbol-value (intern (format "gnus-%s-line-format-alist" type)))
        insertable)))
 
+
+    (defun gnus-summary-line-format-spec ()
+      (insert gnus-tmp-unread gnus-tmp-replied
+             gnus-tmp-score-char gnus-tmp-indentation)
+      (put-text-property
+       (point)
+       (progn
+        (insert
+         gnus-tmp-opening-bracket
+         (format "%4d: %-20s"
+                 gnus-tmp-lines
+                 (if (> (length gnus-tmp-name) 20)
+                     (truncate-string-to-width gnus-tmp-name 20)
+                   gnus-tmp-name))
+         gnus-tmp-closing-bracket)
+        (point))
+       'mouse-face gnus-mouse-face)
+      (insert " " gnus-tmp-subject-or-nil "\n"))
+
 (provide 'gnus-spec)
 
 ;; Local Variables:
index 5874bd760853270f0a5504dfd2798e76e2ecdfe2..30c7debc8e5118f6b64266b25945aa95379e5919 100644 (file)
@@ -156,7 +156,7 @@ If nil, a faster, but more primitive, buffer is used instead."
   (gnus-define-keys gnus-server-mode-map
     " " gnus-server-read-server-in-server-buffer
     "\r" gnus-server-read-server
-    gnus-mouse-2 gnus-server-pick-server
+    [mouse-2] gnus-server-pick-server
     "q" gnus-server-exit
     "l" gnus-server-list-servers
     "k" gnus-server-kill-server
@@ -280,10 +280,8 @@ The following commands are available:
   (buffer-disable-undo)
   (setq truncate-lines t)
   (setq buffer-read-only t)
-  (if (featurep 'xemacs)
-      (put 'gnus-server-mode 'font-lock-defaults '(gnus-server-font-lock-keywords t))
-    (set (make-local-variable 'font-lock-defaults)
-        '(gnus-server-font-lock-keywords t)))
+  (set (make-local-variable 'font-lock-defaults)
+       '(gnus-server-font-lock-keywords t))
   (gnus-run-mode-hooks 'gnus-server-mode-hook))
 
 (defun gnus-server-insert-server-line (name method)
@@ -310,7 +308,7 @@ The following commands are available:
                             " (cloud)"
                           "")))
     (beginning-of-line)
-    (gnus-add-text-properties
+    (add-text-properties
      (point)
      (prog1 (1+ (point))
        ;; Insert the text.
@@ -804,7 +802,7 @@ claim them."
              (while (not (eobp))
                (ignore-errors
                  (push (cons
-                        (mm-string-as-unibyte
+                        (string-as-unibyte
                          (buffer-substring
                           (point)
                           (progn
@@ -817,7 +815,7 @@ claim them."
            (while (not (eobp))
              (ignore-errors
                (push (cons
-                      (mm-string-as-unibyte
+                      (string-as-unibyte
                        (if (eq (char-after) ?\")
                            (read cur)
                          (let ((p (point)) (name ""))
@@ -865,7 +863,7 @@ claim them."
              (prefix (let ((gnus-select-method orig-select-method))
                        (gnus-group-prefixed-name "" method))))
          (while (setq group (pop groups))
-           (gnus-add-text-properties
+           (add-text-properties
             (point)
             (prog1 (1+ (point))
               (insert
@@ -882,10 +880,9 @@ claim them."
                           (t ?K)))
                        (max 0 (- (1+ (cddr group)) (cadr group)))
                        ;; Don't decode if name is ASCII
-                       (if (and (fboundp 'detect-coding-string)
-                                (eq (detect-coding-string name t) 'undecided))
+                       (if (eq (detect-coding-string name t) 'undecided)
                            name
-                         (mm-decode-coding-string
+                         (decode-coding-string
                           name
                           (inline (gnus-group-name-charset method name)))))))
             (list 'gnus-group name)
index 34a5ff6cbac83d83077e7942395965c98a918baa..a57797260ad753ac4931a9fd6d5df81ea2c931c7 100644 (file)
@@ -865,11 +865,6 @@ If REGEXP is given, lines that match it will be deleted."
       ;; Make sure that each dribble entry is a single line, so that
       ;; the "remove" code above works.
       (insert (replace-regexp-in-string "\n" "\\\\n" string) "\n")
-      ;; This has been commented by Josh Huber <huber@alum.wpi.edu>
-      ;; It causes problems with both XEmacs and Emacs 21, and doesn't
-      ;; seem to be of much value. (FIXME: remove this after we make sure
-      ;; it's not needed).
-      ;; (set-window-point (get-buffer-window (current-buffer)) (point-max))
       (bury-buffer gnus-dribble-buffer)
       (with-current-buffer gnus-group-buffer
        (gnus-group-set-mode-line))
@@ -893,9 +888,7 @@ If REGEXP is given, lines that match it will be deleted."
       (setq buffer-file-name dribble-file)
       ;; The buffer may be shrunk a lot when deleting old entries.
       ;; It caused the auto-saving to stop.
-      (if (featurep 'emacs)
-         (set (make-local-variable 'auto-save-include-big-deletions) t)
-       (set (make-local-variable 'disable-auto-save-when-buffer-shrinks) nil))
+      (set (make-local-variable 'auto-save-include-big-deletions) t)
       (auto-save-mode t)
       (buffer-disable-undo)
       (bury-buffer (current-buffer))
@@ -1675,10 +1668,10 @@ backend check whether the group actually exists."
              type-cache))
       ;; Only add groups that need updating.
       (if (or (and foreign-level (null (numberp foreign-level)))
-             (funcall (if one-level #'= #'<=) (gnus-info-level info)
-                      (if (eq (cadr method-group-list) 'foreign)
-                          foreign-level
-                        alevel)))
+          (funcall (if one-level #'= #'<=) (gnus-info-level info)
+                   (if (eq (cadr method-group-list) 'foreign)
+                       foreign-level
+                     alevel)))
          (setcar (nthcdr 2 method-group-list)
                  (cons info (nth 2 method-group-list)))
        ;; The group is inactive, so we nix out the number of unread articles.
@@ -1997,7 +1990,7 @@ backend check whether the group actually exists."
     (while lists
       (setq killed (car lists))
       (while killed
-       (gnus-sethash (mm-string-as-unibyte (car killed)) nil hashtb)
+       (gnus-sethash (string-as-unibyte (car killed)) nil hashtb)
        (setq killed (cdr killed)))
       (setq lists (cdr lists)))))
 
@@ -2393,8 +2386,8 @@ If FORCE is non-nil, the .newsrc file is read."
 
               (funcall func convert-to)))
           (gnus-dribble-enter
-           (gnus-format-message ";Converted gnus from version `%s' to `%s'."
-                               gnus-newsrc-file-version gnus-version)))))))
+           (format-message ";Converted gnus from version `%s' to `%s'."
+                          gnus-newsrc-file-version gnus-version)))))))
 
 (defun gnus-convert-mark-converter-prompt (converter no-prompt)
   "Indicate whether CONVERTER requires gnus-convert-old-newsrc to
@@ -2460,7 +2453,7 @@ If FORCE is non-nil, the .newsrc file is read."
     (dolist (elem gnus-newsrc-alist)
       ;; Protect against broken .newsrc.el files.
       (when (car elem)
-       (setcar elem (mm-string-as-unibyte (car elem)))))
+       (setcar elem (string-as-unibyte (car elem)))))
     (gnus-make-hashtable-from-newsrc-alist)
     (when (file-newer-than-file-p file ding-file)
       ;; Old format quick file
@@ -3032,7 +3025,7 @@ If FORCE is non-nil, the .newsrc file is read."
 (defun gnus-slave-save-newsrc ()
   (with-current-buffer gnus-dribble-buffer
     (let ((slave-name
-          (mm-make-temp-file (concat gnus-current-startup-file "-slave-")))
+          (make-temp-file (concat gnus-current-startup-file "-slave-")))
          (modes (ignore-errors
                   (file-modes (concat gnus-current-startup-file ".eld")))))
       (let ((coding-system-for-write gnus-ding-file-coding-system))
@@ -3164,8 +3157,8 @@ If FORCE is non-nil, the .newsrc file is read."
                          (gnus-parameter-charset name)
                          gnus-default-charset)))
                ;; Fixme: Don't decode in unibyte mode.
-               (when (and str charset (featurep 'mule))
-                 (setq str (mm-decode-coding-string str charset)))
+               (when (and str charset)
+                 (setq str (decode-coding-string str charset)))
                (set group str)))
            (forward-line 1))))
       (gnus-message 5 "Reading descriptions file...done")
@@ -3203,26 +3196,7 @@ If this variable is nil, don't do anything."
 
 (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)
+  (let (method active actives match)
     (dolist (server gnus-server-alist)
       (setq method (gnus-server-to-method server)
            active (intern (format "%s-active-file" (car method))))
@@ -3230,11 +3204,11 @@ If this variable is nil, don't do anything."
                 (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))))
+         (display-warning '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)
index 378d342d66909e7955967fb89418cc91f7e826ab..67b4268dbd98a7cced3d0da00e06009216031849 100644 (file)
 
 ;;; Code:
 
-(eval-when-compile
-  (require 'cl))
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (require 'easy-mmode))) ; for `define-minor-mode'
+(eval-when-compile (require 'cl))
 
 (defvar tool-bar-mode)
 (defvar gnus-tmp-header)
@@ -948,13 +944,6 @@ This hook is run before any variables are set in the summary buffer."
   :group 'gnus-summary-various
   :type 'hook)
 
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
-  (add-hook 'gnus-summary-mode-hook 'gnus-xmas-summary-menu-add)
-  (add-hook 'gnus-summary-mode-hook 'gnus-xmas-setup-summary-toolbar)
-  (add-hook 'gnus-summary-mode-hook
-           'gnus-xmas-switch-horizontal-scrollbar-off))
-
 (defcustom gnus-summary-menu-hook nil
   "*Hook run after the creation of the summary mode menu."
   :group 'gnus-summary-visual
@@ -1072,9 +1061,7 @@ automatically when it is selected."
   :group 'gnus-summary
   :type 'hook)
 
-(defcustom gnus-summary-display-arrow
-  (and (fboundp 'display-graphic-p)
-       (display-graphic-p))
+(defcustom gnus-summary-display-arrow (display-graphic-p)
   "*If non-nil, display an arrow highlighting the current article."
   :version "22.1"
   :group 'gnus-summary
@@ -1171,14 +1158,19 @@ which it may alter in any way."
        (not (string= user-mail-address ""))
        (regexp-quote user-mail-address))
   "*From headers that may be suppressed in favor of To headers.
-This can be a regexp or a list of regexps."
+This can be a regexp, a list of regexps or a function.
+
+If a function, an email string is passed as the argument."
   :version "21.1"
   :group 'gnus-summary
   :type '(choice regexp
-                (repeat :tag "Regexp List" regexp)))
+                (repeat :tag "Regexp List" regexp)
+                 function))
 
 (defsubst gnus-ignored-from-addresses ()
-  (gmm-regexp-concat gnus-ignored-from-addresses))
+  (cond ((functionp gnus-ignored-from-addresses)
+         gnus-ignored-from-addresses)
+        (t (gmm-regexp-concat gnus-ignored-from-addresses))))
 
 (defcustom gnus-summary-to-prefix "-> "
   "*String prefixed to the To field in the summary line when
@@ -1931,7 +1923,7 @@ increase the score of each group you read."
   "q" gnus-summary-exit
   "Q" gnus-summary-exit-no-update
   "\C-c\C-i" gnus-info-find-node
-  gnus-mouse-2 gnus-mouse-pick-article
+  [mouse-2] gnus-mouse-pick-article
   [follow-link] mouse-face
   "m" gnus-summary-mail-other-window
   "a" gnus-summary-post-news
@@ -2399,8 +2391,7 @@ increase the score of each group you read."
              ["Verify and Decrypt" gnus-summary-force-verify-and-decrypt 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"))]
+              :help "Encrypt the message body on disk"]
              ["Extract all parts..." gnus-summary-save-parts t]
              ("Multipart"
               ["Repair multipart" gnus-summary-repair-multipart t]
@@ -2409,8 +2400,7 @@ increase the score of each group you read."
               ["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"))]
+              :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]
@@ -2450,10 +2440,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
                                       '((1 . ,cs))))
                                  (gnus-summary-show-article 1))))
                       `[,(symbol-name cs) ,command t]))
-                  (sort (if (fboundp 'coding-system-list)
-                            (coding-system-list)
-                          (mapcar 'car mm-mime-mule-charset-alist))
-                        'string<)))))
+                  (sort (coding-system-list) 'string<)))))
             ("Washing"
              ("Remove Blanks"
               ["Leading" gnus-article-strip-leading-blank-lines t]
@@ -2477,8 +2464,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
              ["Quoted-Printable" gnus-article-de-quoted-unreadable t]
              ["Base64" gnus-article-de-base64-unreadable t]
              ["Rot 13" gnus-summary-caesar-message
-              ,@(if (featurep 'xemacs) '(t)
-                  '(:help "\"Caesar rotate\" article by 13"))]
+              :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]
@@ -2503,11 +2489,9 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
              )
             ("Output"
              ["Save in default format..." gnus-summary-save-article
-              ,@(if (featurep 'xemacs) '(t)
-                  '(:help "Save article using default method"))]
+              :help "Save article using default method"]
              ["Save in file..." gnus-summary-save-article-file
-              ,@(if (featurep 'xemacs) '(t)
-                  '(:help "Save article in file"))]
+              :help "Save article in file"]
              ["Save in Unix mail format..." gnus-summary-save-article-mail t]
              ["Save in MH folder..." gnus-summary-save-article-folder t]
              ["Save in VM folder..." gnus-summary-save-article-vm t]
@@ -2516,11 +2500,9 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
              ["Pipe through a filter..." gnus-summary-pipe-output t]
              ["Print with Muttprint..." gnus-summary-muttprint t]
              ["Print" gnus-summary-print-article
-              ,@(if (featurep 'xemacs) '(t)
-                  '(:help "Generate and print a PostScript image"))])
+              :help "Generate and print a PostScript image"])
             ("Copy, move,... (Backend)"
-             ,@(if (featurep 'xemacs) nil
-                 '(:help "Copying, moving, expiring articles..."))
+             :help "Copying, moving, expiring articles..."
              ["Respool article..." gnus-summary-respool-article t]
              ["Move article..." gnus-summary-move-article
               (gnus-check-backend-function
@@ -2547,9 +2529,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
               (gnus-check-backend-function
                'request-expire-articles gnus-newsgroup-name)])
             ("Extract"
-             ["Uudecode" gnus-uu-decode-uu
-              ,@(if (featurep 'xemacs) '(t)
-                  '(:help "Decode uuencoded article(s)"))]
+             ["Uudecode" gnus-uu-decode-uu :help "Decode uuencoded article(s)"]
              ["Uudecode and save" gnus-uu-decode-uu-and-save t]
              ["Unshar" gnus-uu-decode-unshar t]
              ["Unshar and save" gnus-uu-decode-unshar-and-save t]
@@ -2582,7 +2562,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
          (easy-menu-define
            gnus-article-commands-menu gnus-article-mode-map ""
            (cons "Commands" innards))
-       ;; in Emacs, don't share menu.
+       ;; Don't share the menu.
        (setq gnus-article-commands-menu
              (copy-keymap gnus-summary-article-menu))
        (define-key gnus-article-mode-map [menu-bar commands]
@@ -2612,28 +2592,22 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
       gnus-summary-post-menu gnus-summary-mode-map ""
       `("Post"
        ["Send a message (mail or news)" gnus-summary-post-news
-        ,@(if (featurep 'xemacs) '(t)
-            '(:help "Compose a new message (mail or news)"))]
+        :help "Compose a new message (mail or news)"]
        ["Followup" gnus-summary-followup
-        ,@(if (featurep 'xemacs) '(t)
-            '(:help "Post followup to this article"))]
+        :help "Post followup to this article"]
        ["Followup and yank" gnus-summary-followup-with-original
-        ,@(if (featurep 'xemacs) '(t)
-            '(:help "Post followup to this article, quoting its contents"))]
+        :help "Post followup to this article, quoting its contents"]
        ["Supersede article" gnus-summary-supersede-article t]
        ["Cancel article" gnus-summary-cancel-article
-        ,@(if (featurep 'xemacs) '(t)
-            '(:help "Cancel an article you posted"))]
+        :help "Cancel an article you posted"]
        ["Reply" gnus-summary-reply t]
        ["Reply and yank" gnus-summary-reply-with-original t]
        ["Wide reply" gnus-summary-wide-reply t]
        ["Wide reply and yank" gnus-summary-wide-reply-with-original
-        ,@(if (featurep 'xemacs) '(t)
-            '(:help "Mail a reply, quoting this article"))]
+        :help "Mail a reply, quoting this article"]
        ["Very wide reply" gnus-summary-very-wide-reply t]
        ["Very wide reply and yank" gnus-summary-very-wide-reply-with-original
-        ,@(if (featurep 'xemacs) '(t)
-            '(:help "Mail a very wide reply, quoting this article"))]
+        :help "Mail a very wide reply, quoting this article"]
        ["Mail forward" gnus-summary-mail-forward t]
        ["Post forward" gnus-summary-post-forward t]
        ["Digest and mail" gnus-uu-digest-mail-forward t]
@@ -2644,38 +2618,25 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
        ["Send a mail" gnus-summary-mail-other-window t]
        ["Create a local message" gnus-summary-news-other-window t]
        ["Uuencode and post" gnus-uu-post-news
-        ,@(if (featurep 'xemacs) '(t)
-            '(:help "Post a uuencoded article"))]
+        :help "Post a uuencoded article"]
        ["Followup via news" gnus-summary-followup-to-mail t]
        ["Followup via news and yank"
         gnus-summary-followup-to-mail-with-original t]
        ["Strip signature on reply"
         (lambda ()
           (interactive)
-          (if (not (memq message-cite-function
-                         '(message-cite-original-without-signature
-                           message-cite-original)))
-              ;; Stupid workaround for XEmacs not honoring :visible.
-              (message "Can't toggle this value of `message-cite-function'")
-            (setq message-cite-function
-                  (if (eq message-cite-function
-                          'message-cite-original-without-signature)
-                      'message-cite-original
-                    'message-cite-original-without-signature))))
-        ;; XEmacs barfs on :visible.
-        ,@(if (featurep 'xemacs) nil
-            '(:visible (memq message-cite-function
-                             '(message-cite-original-without-signature
-                               message-cite-original))))
+          (setq message-cite-function
+                (if (eq message-cite-function
+                        'message-cite-original-without-signature)
+                    'message-cite-original
+                  'message-cite-original-without-signature)))
+        :visible (memq message-cite-function
+                       '(message-cite-original-without-signature
+                         message-cite-original))
         :style toggle
         :selected (eq message-cite-function
                       'message-cite-original-without-signature)
-        ,@(if (featurep 'xemacs) nil
-            '(:help "Strip signature from cited article when replying."))]
-       ;;("Draft"
-       ;;["Send" gnus-summary-send-draft t]
-       ;;["Send bounced" gnus-resend-bounced-mail t])
-       ))
+        :help "Strip signature from cited article when replying."]))
 
     (cond
      ((not (keymapp gnus-summary-post-menu))
@@ -2696,13 +2657,11 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
          gnus-summary-kill-same-subject-and-select t]
         ["Mark same subject" gnus-summary-kill-same-subject t]
         ["Catchup" gnus-summary-catchup
-         ,@(if (featurep 'xemacs) '(t)
-             '(:help "Mark unread articles in this group as read"))]
+         :help "Mark unread articles in this group as read"]
         ["Catchup all" gnus-summary-catchup-all t]
         ["Catchup to here" gnus-summary-catchup-to-here t]
         ["Catchup from here" gnus-summary-catchup-from-here t]
-        ["Catchup region" gnus-summary-mark-region-as-read
-         (gnus-mark-active-p)]
+        ["Catchup region" gnus-summary-mark-region-as-read mark-active]
         ["Mark excluded" gnus-summary-limit-mark-excluded-as-read t])
        ("Mark Various"
         ["Tick" gnus-summary-tick-article-forward t]
@@ -2741,8 +2700,8 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
         ["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)]
-        ["Unmark region" gnus-uu-unmark-region (gnus-mark-active-p)]
+        ["Mark region" gnus-uu-mark-region mark-active]
+        ["Unmark region" gnus-uu-unmark-region mark-active]
         ["Mark by regexp..." gnus-uu-mark-by-regexp t]
         ["Unmark by regexp..." gnus-uu-unmark-by-regexp t]
         ["Mark all" gnus-uu-mark-all t]
@@ -2759,11 +2718,9 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
        ("Registry Marks")
        ("Scroll article"
         ["Page forward" gnus-summary-next-page
-         ,@(if (featurep 'xemacs) '(t)
-             '(:help "Show next page of article"))]
+         :help "Show next page of article"]
         ["Page backward" gnus-summary-prev-page
-         ,@(if (featurep 'xemacs) '(t)
-             '(:help "Show previous page of article"))]
+         :help "Show previous page of article"]
         ["Line forward" gnus-summary-scroll-up t])
        ("Move"
         ["Next unread article" gnus-summary-next-unread-article t]
@@ -2823,14 +2780,12 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
        ["Send a bug report" gnus-bug t]
        ("Exit"
         ["Catchup and exit" gnus-summary-catchup-and-exit
-         ,@(if (featurep 'xemacs) '(t)
-             '(:help "Mark unread articles in this group as read, then exit"))]
+         :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"))]
+         :help "Exit current group, return to group selection mode"]
         ["Exit group without updating" gnus-summary-exit-no-update t]
         ["Exit and goto next group" gnus-summary-next-group t]
         ["Exit and goto prev group" gnus-summary-prev-group t]
@@ -2979,17 +2934,12 @@ See `gmm-tool-bar-from-list' for the format of the list."
 (defun gnus-summary-make-tool-bar (&optional force)
   "Make a summary mode tool bar from `gnus-summary-tool-bar'.
 When FORCE, rebuild the tool bar."
-  (when (and (not (featurep 'xemacs))
-            (boundp 'tool-bar-mode)
+  (when (and (boundp 'tool-bar-mode)
             tool-bar-mode
             (or (not gnus-summary-tool-bar-map) force))
     (let* ((load-path
-           (gmm-image-load-path-for-library "gnus"
-                                            "mail/save.xpm"
-                                            nil t))
-           (image-load-path (cons (car load-path)
-                                  (when (boundp 'image-load-path)
-                                    image-load-path)))
+           (image-load-path-for-library "gnus" "mail/save.xpm" nil t))
+           (image-load-path (cons (car load-path) image-load-path))
           (map (gmm-tool-bar-from-list gnus-summary-tool-bar
                                        gnus-summary-tool-bar-zap-list
                                        'gnus-summary-mode-map)))
@@ -3120,12 +3070,10 @@ The following commands are available:
   (setq mode-name "Summary")
   (use-local-map gnus-summary-mode-map)
   (buffer-disable-undo)
-  (setq buffer-read-only t             ;Disable modification
-       show-trailing-whitespace nil)
-  (setq truncate-lines t)
-  ;; Force paragraph direction to be left-to-right.  Don't make it
-  ;; bound globally in old Emacsen and XEmacsen.
-  (set (make-local-variable 'bidi-paragraph-direction) 'left-to-right)
+  (setq buffer-read-only t
+       show-trailing-whitespace nil
+       truncate-lines t
+       bidi-paragraph-direction 'left-to-right)
   (add-to-invisibility-spec '(gnus-sum . t))
   (gnus-summary-set-display-table)
   (gnus-set-default-directory)
@@ -3134,7 +3082,6 @@ The following commands are available:
   (make-local-variable 'gnus-summary-dummy-line-format)
   (make-local-variable 'gnus-summary-dummy-line-format-spec)
   (make-local-variable 'gnus-summary-mark-positions)
-  (gnus-make-local-hook 'pre-command-hook)
   (add-hook 'pre-command-hook 'gnus-set-global-variables nil t)
   (gnus-run-mode-hooks 'gnus-summary-mode-hook)
   (turn-on-gnus-mailing-list-mode)
@@ -3479,13 +3426,13 @@ display only a single character."
        (i 32))
     ;; Nix out all the control chars...
     (while (>= (setq i (1- i)) 0)
-      (gnus-put-display-table i [??] table))
+      (aset table i [??]))
    ;; ... but not newline and cr, of course.  (cr is necessary for the
     ;; selective display).
-    (gnus-put-display-table ?\n nil table)
-    (gnus-put-display-table ?\r nil table)
+    (aset table ?\n nil)
+    (aset table ?\r nil)
     ;; We keep TAB as well.
-    (gnus-put-display-table ?\t nil table)
+    (aset table ?\t nil)
     ;; We nix out any glyphs 127 through 255, or 127 through 159 in
     ;; Emacs 23 (unicode), that are not set already.
     (let ((i (if (ignore-errors (= (make-char 'latin-iso8859-1 160) 160))
@@ -3493,8 +3440,8 @@ display only a single character."
               256)))
       (while (>= (setq i (1- i)) 127)
        ;; Only modify if the entry is nil.
-       (unless (gnus-get-display-table i table)
-         (gnus-put-display-table i [??] table))))
+       (unless (aref table i)
+         (aset table i [??]))))
     (setq buffer-display-table table)))
 
 (defun gnus-summary-set-article-display-arrow (pos)
@@ -3676,7 +3623,7 @@ buffer that was in action when the last article was fetched."
 (defun gnus-summary-insert-dummy-line (gnus-tmp-subject gnus-tmp-number)
   "Insert a dummy root in the summary buffer."
   (beginning-of-line)
-  (gnus-add-text-properties
+  (add-text-properties
    (point) (progn (eval gnus-summary-dummy-line-format-spec) (point))
    (list 'gnus-number gnus-tmp-number 'gnus-intangible gnus-tmp-number)))
 
@@ -3686,15 +3633,17 @@ 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
         (with-current-buffer gnus-summary-buffer
           gnus-newsgroup-ignored-charsets)))
     (or
-     (and ignored-from-addresses
-         (string-match ignored-from-addresses gnus-tmp-from)
+     (and gnus-ignored-from-addresses
+          (cond ((functionp gnus-ignored-from-addresses)
+                 (funcall gnus-ignored-from-addresses
+                          (mail-strip-quoted-names gnus-tmp-from)))
+                (t (string-match (gnus-ignored-from-addresses) gnus-tmp-from)))
          (let ((extra-headers (mail-header-extra header))
                to
                newsgroups)
@@ -3713,7 +3662,7 @@ buffer that was in action when the last article was fetched."
                                gnus-newsgroup-name)) 'nntp)
                      (gnus-group-real-name gnus-newsgroup-name))))
              (concat gnus-summary-newsgroup-prefix newsgroups)))))
-     (gnus-string-mark-left-to-right
+     (bidi-string-mark-left-to-right
       (inline
        (gnus-summary-extract-address-component gnus-tmp-from))))))
 
@@ -3780,7 +3729,7 @@ buffer that was in action when the last article was fetched."
        (setq gnus-tmp-lines "?")
       (setq gnus-tmp-lines (number-to-string gnus-tmp-lines)))
     (condition-case ()
-       (gnus-put-text-property
+       (put-text-property
         (point)
         (progn (eval gnus-summary-line-format-spec) (point))
         'gnus-number gnus-tmp-number)
@@ -3897,8 +3846,8 @@ respectively."
 Returns \"  ?  \" if there's bad input or if another error occurs.
 Input should look like this: \"Sun, 14 Oct 2001 13:34:39 +0200\"."
   (condition-case ()
-      (let* ((messy-date (gnus-float-time (gnus-date-get-time messy-date)))
-            (now (gnus-float-time))
+      (let* ((messy-date (float-time (gnus-date-get-time messy-date)))
+            (now (float-time))
             ;;If we don't find something suitable we'll use this one
             (my-format "%b %d '%y"))
        (let* ((difference (- now messy-date))
@@ -4488,9 +4437,9 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
 
 (defsubst gnus-remove-odd-characters (string)
   "Translate STRING into something that doesn't contain weird characters."
-  (mm-subst-char-in-string
+  (subst-char-in-string
    ?\r ?\-
-   (mm-subst-char-in-string ?\n ?\- string t) t))
+   (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.
@@ -5110,7 +5059,7 @@ Unscored articles will be counted as having a score of zero."
 (defun gnus-thread-latest-date (thread)
   "Return the highest article date in THREAD."
   (apply 'max
-        (mapcar (lambda (header) (gnus-float-time
+        (mapcar (lambda (header) (float-time
                                   (gnus-date-get-time
                                    (mail-header-date header))))
                 (message-flatten-list thread))))
@@ -5470,7 +5419,7 @@ or a straight list of headers."
            (if (= gnus-tmp-lines -1)
                (setq gnus-tmp-lines "?")
              (setq gnus-tmp-lines (number-to-string gnus-tmp-lines)))
-           (gnus-put-text-property
+           (put-text-property
             (point)
             (progn (eval gnus-summary-line-format-spec) (point))
             'gnus-number number)
@@ -5620,15 +5569,15 @@ If SELECT-ARTICLES, only select those articles from GROUP."
            (gnus-kill-buffer (current-buffer)))
          (error
           "Couldn't activate group %s: %s"
-          (mm-decode-coding-string group charset)
-          (mm-decode-coding-string (gnus-status-message group) charset))))
+          (decode-coding-string group charset)
+          (decode-coding-string (gnus-status-message group) charset))))
 
     (unless (gnus-request-group group t nil (gnus-get-info group))
       (when (derived-mode-p '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)))
+            (decode-coding-string group charset)
+            (decode-coding-string (gnus-status-message group) charset)))
 
     (when (and gnus-agent
               (gnus-active group))
@@ -6085,6 +6034,8 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                (setq arts (cdr arts)))
              (setq list (cdr all)))))
 
+       ;; When exiting the group, everything that's previously been
+       ;; unseen is now seen.
        (when (eq (cdr type) 'seen)
          (setq list (gnus-range-add list gnus-newsgroup-unseen)))
 
@@ -6677,7 +6628,7 @@ current article will be taken into consideration."
                     (gnus-summary-find-next nil article)))
            (decf n)))
        (nreverse articles)))
-     ((and (gnus-region-active-p) (mark))
+     ((and (and transient-mark-mode mark-active) (mark))
       (message "region active")
       ;; Work on the region between point and mark.
       (let ((max (max (point) (mark)))
@@ -6867,9 +6818,7 @@ Also do horizontal recentering."
   (when (and gnus-auto-center-summary
             (not (eq gnus-auto-center-summary 'vertical)))
     (gnus-horizontal-recenter))
-  (if (fboundp 'recenter-top-bottom)
-      (recenter-top-bottom n)
-    (recenter n)))
+  (recenter-top-bottom n))
 
 (put 'gnus-recenter 'isearch-scroll t)
 
@@ -6880,8 +6829,8 @@ Like forward-line, but skip over (and don't count) invisible lines."
     (while (and (> n 0) (not done))
       ;; If the following character is currently invisible,
       ;; skip all characters with that same `invisible' property value.
-      (while (gnus-invisible-p (point))
-       (goto-char (gnus-next-char-property-change (point))))
+      (while (invisible-p (point))
+       (goto-char (next-char-property-change (point))))
       (forward-line 1)
       (if (eobp)
          (setq done t)
@@ -6890,8 +6839,8 @@ Like forward-line, but skip over (and don't count) invisible lines."
       (forward-line -1)
       (if (bobp) (setq done t)
        (setq n (1+ n))
-       (while (and (not (bobp)) (gnus-invisible-p (1- (point))))
-         (goto-char (gnus-previous-char-property-change (point))))))))
+       (while (and (not (bobp)) (invisible-p (1- (point))))
+         (goto-char (previous-char-property-change (point))))))))
 
 (defun gnus-summary-recenter ()
   "Center point in the summary window.
@@ -7814,9 +7763,7 @@ If BACKWARD, the previous article is selected instead of the next."
    (t
     (unless (gnus-ephemeral-group-p gnus-newsgroup-name)
       (gnus-summary-jump-to-group gnus-newsgroup-name))
-    (let ((cmd (if (featurep 'xemacs)
-                  last-command-char
-                last-command-event))
+    (let ((cmd last-command-event)
          (point
           (with-current-buffer gnus-group-buffer
             (point)))
@@ -7844,7 +7791,7 @@ If BACKWARD, the previous article is selected instead of the next."
                          "exiting"))
          (gnus-summary-next-group nil group backward)))
        (t
-       (when (gnus-key-press-event-p last-input-event)
+       (when (numberp last-input-event)
          ;; Somehow or other, we may now have selected a different
          ;; window.  Make point go back to the summary buffer.
          (when (eq current-summary (current-buffer))
@@ -8368,15 +8315,14 @@ in `nnmail-extra-headers'."
       (gnus-summary-position-point))))
 
 (defun gnus-summary-limit-strange-charsets-predicate (header)
-  (when (fboundp 'char-charset)
-    (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)))
+  (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.
@@ -8671,7 +8617,7 @@ fetched for this group."
        (gnus-agent nil)
        (gnus-read-all-available-headers t))
     (setq gnus-newsgroup-headers
-         (gnus-merge
+         (cl-merge
           'list gnus-newsgroup-headers
           (gnus-fetch-headers articles nil t)
           'gnus-article-sort-by-number))
@@ -9083,7 +9029,7 @@ non-numeric or nil fetch the number specified by the
            (gnus-sorted-nunion gnus-newsgroup-unreads new-unreads))
       (setq gnus-newsgroup-headers
             (gnus-delete-duplicate-headers
-             (gnus-merge
+             (cl-merge
               'list gnus-newsgroup-headers new-headers
               'gnus-article-sort-by-number)))
       (setq gnus-newsgroup-articles
@@ -9132,7 +9078,7 @@ non-numeric or nil fetch the number specified by the
   (gnus-warp-to-article)
   (when (and (stringp message-id)
             (not (zerop (length message-id))))
-    (setq message-id (gnus-replace-in-string message-id " " ""))
+    (setq message-id (replace-regexp-in-string " " "" message-id))
     ;; Construct the correct Message-ID if necessary.
     ;; Suggested by tale@pawl.rpi.edu.
     (unless (string-match "^<" message-id)
@@ -9435,7 +9381,6 @@ Optional argument BACKWARD means do search for backward.
        (gnus-article-prepare-hook nil)
        (gnus-mark-article-hook nil)    ;Inhibit marking as read.
        (gnus-use-article-prefetch nil)
-       (gnus-xmas-force-redisplay nil) ;Inhibit XEmacs redisplay.
        (gnus-use-trees nil)            ;Inhibit updating tree buffer.
        (gnus-visual nil)
        (gnus-keep-backlog nil)
@@ -9611,10 +9556,10 @@ article.  If BACKWARD (the prefix) is non-nil, search backward instead."
 
 (defun gnus-summary-print-truncate-and-quote (string &optional len)
   "Truncate to LEN and quote all \"(\"'s in STRING."
-  (gnus-replace-in-string (if (and len (> (length string) len))
-                             (substring string 0 len)
-                           string)
-                         "[()]" "\\\\\\&"))
+  (replace-regexp-in-string "[()]" "\\\\\\&"
+                           (if (and len (> (length string) len))
+                               (substring string 0 len)
+                             string)))
 
 (defun gnus-summary-print-article (&optional filename n)
   "Generate and print a PostScript image of the process-marked (mail) articles.
@@ -9701,7 +9646,7 @@ C-u g', show the raw article."
     (gnus-summary-show-article t)
     (let ((gnus-newsgroup-charset
           (or (cdr (assq arg gnus-summary-show-article-charset-alist))
-              (mm-read-coding-system
+              (read-coding-system
                "View as charset: " ;; actually it is coding system.
                (with-current-buffer gnus-article-buffer
                  (mm-detect-coding-region (point) (point-max))))))
@@ -9862,8 +9807,6 @@ prefix specifies how many places to rotate each letter forward."
   ;; Create buttons and stuff...
   (gnus-treat-article nil))
 
-(declare-function idna-to-unicode "ext:idna" (str))
-
 (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
@@ -9873,25 +9816,16 @@ invalid IDNA string (`xn--bar' is invalid).
 You must have GNU Libidn (URL `http://www.gnu.org/software/libidn/')
 installed for this command to work."
   (interactive "P")
-  (if (not (and (mm-coding-system-p 'utf-8)
-               (condition-case nil
-                   (require 'idna)
-                 (file-error)
-                 (invalid-operation))
-               (symbol-value 'idna-program)
-               (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)))))))
+  (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 (puny-decode-domain (match-string 1))))
+         (set-window-start (get-buffer-window (current-buffer)) start))))))
 
 (defun gnus-summary-morse-message (&optional arg)
   "Morse decode the current article."
@@ -9996,7 +9930,7 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
            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
+          (decode-coding-string
            to-newsgroup
            (gnus-group-name-charset to-method to-newsgroup))))
     (unless to-method
@@ -10006,7 +9940,7 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
     (setq to-newsgroup
          (or encoded
              (and to-newsgroup
-                  (mm-encode-coding-string
+                  (encode-coding-string
                    to-newsgroup
                    (gnus-group-name-charset to-method to-newsgroup)))))
     ;; Check the method we are to move this article to...
@@ -10589,7 +10523,6 @@ groups."
                (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 ',gnus-newsgroup-charset)
@@ -10830,7 +10763,7 @@ If N is negative, mark backward instead.  If UNMARK is non-nil, remove
 the process mark instead.  The difference between N and the actual
 number of articles marked is returned."
   (interactive "P")
-  (if (and (null n) (gnus-region-active-p))
+  (if (and (null n) (and transient-mark-mode mark-active))
       (gnus-uu-mark-region (region-beginning) (region-end) unmark)
     (setq n (prefix-numeric-value n))
     (let ((backward (< n 0))
@@ -11184,7 +11117,7 @@ If NO-EXPIRE, auto-expiry will be inhibited."
        (goto-char (+ forward (point)))
        ;; Replace the old mark with the new mark.
         (let ((to-insert
-               (mm-subst-char-in-string
+               (subst-char-in-string
                (char-after) mark
                (buffer-substring (point) (1+ (point))))))
           (delete-region (point) (1+ (point)))
@@ -11716,17 +11649,7 @@ Returns nil if no thread was there to be shown."
          (end (or (gnus-summary--inv end) (gnus-summary--inv (1- end))))
         ;; Leave point at bol
         (beg (progn (beginning-of-line) (if (bobp) (point) (1- (point)))))
-        (eoi (when end
-               (if (fboundp 'next-single-char-property-change)
-                   ;; Note: XEmacs version of n-s-c-p-c may return nil
-                   (or (next-single-char-property-change end 'invisible)
-                       (point-max))
-                 (while (progn
-                          (end-of-line 2)
-                          (and (not (eobp))
-                               (eq (get-char-property (point) 'invisible)
-                                   'gnus-sum))))
-                 (point)))))
+        (eoi (and end (next-single-char-property-change end 'invisible))))
     (when eoi
       (remove-overlays beg eoi 'invisible 'gnus-sum)
       (goto-char orig)
@@ -12130,7 +12053,7 @@ no matter what the properties `:decode' and `:headers' are."
         command result)
     (unless (numberp (car articles))
       (error "No article to pipe"))
-    (setq command (gnus-read-shell-command
+    (setq command (read-shell-command
                   (concat "Shell command on "
                           (if (cdr articles)
                               (format "these %d articles" (length articles))
@@ -12301,7 +12224,6 @@ save those articles instead."
 (defun gnus-read-move-group-name (prompt default articles prefix)
   "Read a group name."
   (let* ((split-name (gnus-get-split-value gnus-move-split-methods))
-        (minibuffer-confirm-incomplete nil) ; XEmacs
         (prom
          (format "%s %s to"
                  prompt
@@ -12331,7 +12253,7 @@ save those articles instead."
          (setq to-newsgroup default))
       (unless to-newsgroup
        (error "No group name entered"))
-      (setq encoded (mm-encode-coding-string
+      (setq encoded (encode-coding-string
                     to-newsgroup
                     (gnus-group-name-charset to-method to-newsgroup)))
       (or (gnus-active encoded)
@@ -12457,9 +12379,9 @@ If REVERSE, save parts that do not match TYPE."
                  ": " (or (cdr (assq 'execute (car pslist))) "") "\n")
          (setq e (point))
          (forward-line -1)             ; back to `b'
-         (gnus-add-text-properties
+         (add-text-properties
           b (1- e) (list 'gnus-number gnus-reffed-article-number
-                         gnus-mouse-face-prop gnus-mouse-face))
+                         'mouse-face gnus-mouse-face))
          (gnus-data-enter
           after-article gnus-reffed-article-number
           gnus-unread-mark b (car pslist) 0 (- e b))
@@ -12601,16 +12523,16 @@ If REVERSE, save parts that do not match TYPE."
       (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)
+            (from (if (get-text-property beg 'mouse-face)
                       beg
                     (or (next-single-property-change
-                         beg gnus-mouse-face-prop nil end)
+                         beg 'mouse-face nil end)
                         beg)))
             (to
              (if (= from end)
                  (- from 2)
                (or (next-single-property-change
-                    from gnus-mouse-face-prop nil end)
+                    from 'mouse-face nil end)
                    end))))
        ;; If no mouse-face prop on line we will have to = from = end,
        ;; so we highlight the entire line instead.
@@ -12914,10 +12836,10 @@ returned."
                                                (mail-header-number h))
                                              gnus-newsgroup-headers)))
     (setq gnus-newsgroup-headers
-         (gnus-merge 'list
-                     gnus-newsgroup-headers
-                     (gnus-fetch-headers articles nil t)
-                     'gnus-article-sort-by-number))
+         (cl-merge 'list
+                   gnus-newsgroup-headers
+                   (gnus-fetch-headers articles nil t)
+                   'gnus-article-sort-by-number))
     (setq gnus-newsgroup-articles
          (gnus-sorted-nunion gnus-newsgroup-articles articles))
     ;; Suppress duplicates?
@@ -13115,8 +13037,6 @@ BOOKMARK is a bookmark name or a bookmark record."
 
 (gnus-summary-make-all-marking-commands)
 
-(gnus-ems-redefine)
-
 (provide 'gnus-sum)
 
 (run-hooks 'gnus-sum-load-hook)
index cd8a753607a5ddb02ea3ab93a7f133261a491338..249eb087b0b9fea0e44d49ecc8db99ffffa017fa 100644 (file)
@@ -201,27 +201,6 @@ KVDATA must be an alist."
 (defun gnus-sync-lesync-DELETE (url headers &optional data)
   (gnus-sync-lesync-call url "DELETE" headers data))
 
-;; this is not necessary with newer versions of json.el but 1.2 or older
-;; (which are in Emacs 24.1 and earlier) need it
-(defun gnus-sync-json-alist-p (list)
-  "Non-null if and only if LIST is an alist."
-  (while (consp list)
-    (setq list (if (consp (car list))
-                   (cdr list)
-                 'not-alist)))
-  (null list))
-
-;; this is not necessary with newer versions of json.el but 1.2 or older
-;; (which are in Emacs 24.1 and earlier) need it
-(defun gnus-sync-json-plist-p (list)
-  "Non-null if and only if LIST is a plist."
-  (while (consp list)
-    (setq list (if (and (keywordp (car list))
-                        (consp (cdr list)))
-                   (cddr list)
-                 'not-plist)))
-  (null list))
-
 ; (gnus-sync-lesync-setup "http://lesync.info:5984/tzz" "tzzadmin" "mypassword" "mysalt" t t)
 ; (gnus-sync-lesync-setup "http://lesync.info:5984/tzz")
 
index 24ae4cfae48f2b4de0e627cbae17f8116d53c89d..39236594eb73c3da0d96bd6c304d01410ac8deae 100644 (file)
@@ -44,9 +44,6 @@
   :type 'hook
   :group 'gnus-topic)
 
-(when (featurep 'xemacs)
-  (add-hook 'gnus-topic-mode-hook 'gnus-xmas-topic-menu-add))
-
 (defcustom gnus-topic-line-format "%i[ %(%{%n%}%) -- %A ]%v\n"
   "Format of topic lines.
 It works along the same lines as a normal formatting string,
@@ -575,7 +572,6 @@ articles in the topic and its subtopics."
                   (not (zerop unread)) ;Non-empty
                   tick                 ;Ticked articles
                   (/= point-max (point-max)))) ;Inactive groups
-      (gnus-extent-start-open (point))
       (gnus-topic-insert-topic-line
        (car type) visiblep
        (not (eq (nth 2 type) 'hidden))
@@ -644,7 +640,7 @@ articles in the topic and its subtopics."
     (beginning-of-line)
     ;; Insert the text.
     (if shownp
-       (gnus-add-text-properties
+       (add-text-properties
         (point)
         (prog1 (1+ (point))
           (eval gnus-topic-line-format-spec))
@@ -1065,7 +1061,7 @@ articles in the topic and its subtopics."
     [(meta tab)] gnus-topic-unindent
     "\C-i" gnus-topic-indent
     "\M-\C-i" gnus-topic-unindent
-    gnus-mouse-2 gnus-mouse-pick-topic)
+    [mouse-2] gnus-mouse-pick-topic)
 
   ;; Define a new submap.
   (gnus-define-keys (gnus-group-topic-map "T" gnus-group-mode-map)
@@ -1153,7 +1149,6 @@ articles in the topic and its subtopics."
           'gnus-group-sort-topic)
       (setq gnus-group-change-level-function 'gnus-topic-change-level)
       (setq gnus-goto-missing-group-function 'gnus-topic-goto-missing-group)
-      (gnus-make-local-hook 'gnus-check-bogus-groups-hook)
       (add-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist
                nil 'local)
       (setq gnus-topology-checked-p nil)
@@ -1167,7 +1162,7 @@ articles in the topic and its subtopics."
       (remove-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist)
       (setq gnus-group-prepare-function 'gnus-group-prepare-flat)
       (setq gnus-group-sort-alist-function 'gnus-group-sort-flat))
-    (when (gmm-called-interactively-p 'any)
+    (when (called-interactively-p 'any)
       (gnus-group-list-groups))))
 
 (defun gnus-topic-select-group (&optional all)
@@ -1294,7 +1289,7 @@ If COPYP, copy the groups instead."
    (list current-prefix-arg
         (gnus-completing-read "Move to topic" (mapcar 'car gnus-topic-alist) t
                               nil 'gnus-topic-history)))
-  (let ((use-marked (and (not n) (not (gnus-region-active-p))
+  (let ((use-marked (and (not n) (not (and transient-mark-mode mark-active))
                         gnus-group-marked t))
        (groups (gnus-group-process-prefix n))
        (topicl (assoc topic gnus-topic-alist))
@@ -1319,7 +1314,7 @@ If COPYP, copy the groups instead."
 (defun gnus-topic-remove-group (&optional n)
   "Remove the current group from the topic."
   (interactive "P")
-  (let ((use-marked (and (not n) (not (gnus-region-active-p))
+  (let ((use-marked (and (not n) (not (and transient-mark-mode mark-active))
                         gnus-group-marked t))
        (groups (gnus-group-process-prefix n)))
     (mapc
@@ -1615,8 +1610,8 @@ If performed on a topic, edit the topic parameters instead."
       (let ((topic (gnus-group-topic-name)))
        (gnus-edit-form
         (gnus-topic-parameters topic)
-        (gnus-format-message "Editing the topic parameters for `%s'."
-                             (or group topic))
+        (format-message "Editing the topic parameters for `%s'."
+                        (or group topic))
         `(lambda (form)
            (gnus-topic-set-parameters ,topic form)))))))
 
index b3afcd7f440098c2605ada706d1a72cd62d86f67..ad27e8996fb2808eae92a089223ec534abeba668 100644 (file)
@@ -44,9 +44,6 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (require 'easy-mmode))) ; for `define-minor-mode'
 
 (require 'gnus-util)
 (require 'gnus)
     ;; Set up the menu.
     (when (gnus-visual-p 'undo-menu 'menu)
       (gnus-undo-make-menu-bar))
-    (gnus-make-local-hook 'post-command-hook)
     (add-hook 'post-command-hook 'gnus-undo-boundary nil t)))
 
 ;;; Interface functions.
index 31645fcd3154674f230a7ebdf31ed433a5b5bed9..7d3c7089225d99484b78ed67a224304e5db746f3 100644 (file)
   :type `(radio (function-item
                  :doc "Use Emacs standard `completing-read' function."
                  gnus-emacs-completing-read)
-               ;; iswitchb.el is very old and ido.el is unavailable
-               ;; in XEmacs, so we exclude those function items.
-               ,@(unless (featurep 'xemacs)
-                   '((function-item
-                      :doc "Use `ido-completing-read' function."
-                      gnus-ido-completing-read)
-                     (function-item
-                      :doc "Use iswitchb based completing-read function."
-                      gnus-iswitchb-completing-read)))))
+               (function-item
+                :doc "Use `ido-completing-read' function."
+                gnus-ido-completing-read)
+               (function-item
+                :doc "Use iswitchb based completing-read function."
+                gnus-iswitchb-completing-read)))
 
 (defcustom gnus-completion-styles
-  (if (and (boundp 'completion-styles-alist)
-           (boundp 'completion-styles))
-      (append (when (and (assq 'substring completion-styles-alist)
-                         (not (memq 'substring completion-styles)))
-                (list 'substring))
-              completion-styles)
-    nil)
+  (append (when (and (assq 'substring completion-styles-alist)
+                    (not (memq 'substring completion-styles)))
+           (list 'substring))
+         completion-styles)
   "Value of `completion-styles' to use when completing."
   :version "24.1"
   :group 'gnus-meta
 (autoload 'nnheader-replace-chars-in-string "nnheader")
 (autoload 'mail-header-remove-comments "mail-parse")
 
-(eval-and-compile
-  (cond
-   ;; Prefer `replace-regexp-in-string' (present in Emacs, XEmacs 21.5,
-   ;; SXEmacs 22.1.4) over `replace-in-string'.  The latter leads to inf-loops
-   ;; on empty matches:
-   ;;   (replace-in-string "foo" "/*$" "/")
-   ;;   (replace-in-string "xe" "\\(x\\)?" "")
-   ((fboundp 'replace-regexp-in-string)
-    (defun gnus-replace-in-string  (string regexp newtext &optional literal)
-      "Replace all matches for REGEXP with NEWTEXT in STRING.
+(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."
-      (replace-regexp-in-string regexp newtext string nil literal)))
-   ((fboundp 'replace-in-string)
-    (defalias 'gnus-replace-in-string 'replace-in-string))))
+  (declare (obsolete replace-regexp-in-string "25.2"))
+  (replace-regexp-in-string regexp newtext string nil literal))
 
 (defun gnus-boundp (variable)
   "Return non-nil if VARIABLE is bound and non-nil."
@@ -141,14 +126,6 @@ This is a compatibility function for different Emacsen."
        (funcall (if (stringp buffer) 'get-buffer 'buffer-name)
                buffer))))
 
-;; 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
-;; up the byte compiler.
-(defalias 'gnus-make-local-hook (if (featurep 'xemacs)
-                                    'make-local-hook
-                                  'ignore))
-
 (defun gnus-delete-first (elt list)
   "Delete by side effect the first occurrence of ELT as a member of LIST."
   (if (equal (car list) elt)
@@ -311,13 +288,6 @@ Symbols are also allowed; their print names are used instead."
        (and (= (car fdate) (car date))
             (> (nth 1 fdate) (nth 1 date))))))
 
-;; Every version of Emacs Gnus supports has built-in float-time.
-;; The featurep test silences an irritating compiler warning.
-(defalias 'gnus-float-time
-  (if (or (featurep 'emacs)
-         (fboundp 'float-time))
-      'float-time 'time-to-seconds))
-
 ;;; Keymap macros.
 
 (defmacro gnus-local-set-keys (&rest plist)
@@ -326,13 +296,6 @@ Symbols are also allowed; their print names are used instead."
 
 (defmacro gnus-define-keys (keymap &rest plist)
   "Define all keys in PLIST in KEYMAP."
-  ;; Convert the key [?\S-\ ] to [(shift space)] for XEmacs.
-  (when (featurep 'xemacs)
-    (let ((bindings plist))
-      (while bindings
-       (when (equal (car bindings) [?\S-\ ])
-         (setcar bindings [(shift space)]))
-       (setq bindings (cddr bindings)))))
   `(gnus-define-keys-1 (quote ,keymap) (quote ,plist)))
 
 (defmacro gnus-define-keys-safe (keymap &rest plist)
@@ -434,7 +397,7 @@ Cache the result as a text property stored in DATE."
 
 (defun gnus-mode-string-quote (string)
   "Quote all \"%\"'s in STRING."
-  (gnus-replace-in-string string "%" "%%"))
+  (replace-regexp-in-string "%" "%%" string))
 
 ;; Make a hash table (default and minimum size is 256).
 ;; Optional argument HASHSIZE specifies the table size.
@@ -465,10 +428,10 @@ jabbering all the time."
 
 (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."
+If it is `log', add timestamps to only the messages that go into
+the \"*Messages*\" 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.1" ;; No Gnus
   :group  'gnus-various
   :type '(choice :format "%{%t%}:\n %[Value Menu%] %v"
@@ -481,56 +444,37 @@ but also to the ones displayed in the echo area."
 (eval-when-compile
   (defmacro gnus-message-with-timestamp-1 (format-string args)
     (let ((timestamp '(format-time-string "%Y%m%dT%H%M%S.%3N> " time)))
-      (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 (if (fboundp 'messages-buffer)
-                                            (messages-buffer)
-                                          (get-buffer-create "*Messages*"))
-                     (goto-char (point-max))
-                     (let ((inhibit-read-only t))
-                       (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))))))))
+      `(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 (if (fboundp 'messages-buffer)
+                                          (messages-buffer)
+                                        (get-buffer-create "*Messages*"))
+                   (goto-char (point-max))
+                   (let ((inhibit-read-only t))
+                     (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)))))))
 
 (defvar gnus-action-message-log nil)
 
@@ -646,7 +590,6 @@ If N, return the Nth ancestor instead."
 (defun gnus-read-event-char (&optional prompt)
   "Get the next event."
   (let ((event (read-event prompt)))
-    ;; should be gnus-characterp, but this can't be called in XEmacs anyway
     (cons (and (numberp event) event) event)))
 
 (defun gnus-copy-file (file &optional to)
@@ -839,9 +782,6 @@ If there's no subdirectory, delete DIRECTORY as well."
     (setq string (replace-match "" t t string)))
   string)
 
-(declare-function gnus-put-text-property "gnus"
-                  (start end property value &optional object))
-
 (defsubst gnus-put-text-property-excluding-newlines (beg end prop val)
   "The same as `put-text-property', but don't put this prop on any newlines in the region."
   (save-match-data
@@ -849,9 +789,9 @@ If there's no subdirectory, delete DIRECTORY as well."
       (save-restriction
        (goto-char beg)
        (while (re-search-forward gnus-emphasize-whitespace-regexp end 'move)
-         (gnus-put-text-property beg (match-beginning 0) prop val)
+         (put-text-property beg (match-beginning 0) prop val)
          (setq beg (point)))
-       (gnus-put-text-property beg (point) prop val)))))
+       (put-text-property beg (point) prop val)))))
 
 (defsubst gnus-put-overlay-excluding-newlines (beg end prop val)
   "The same as `put-text-property', but don't put this prop on any newlines in the region."
@@ -875,7 +815,7 @@ Otherwise, do nothing."
          (when (eq prop 'face)
            (setcar (cdr (get-text-property beg 'face)) (or val 'default)))
        (inline
-         (gnus-put-text-property beg stop prop val)))
+         (put-text-property beg stop prop val)))
       (setq beg stop))))
 
 (defun gnus-get-text-property-excluding-characters-with-faces (pos prop)
@@ -890,39 +830,12 @@ Otherwise, return the value."
 
 (defmacro gnus-faces-at (position)
   "Return a list of faces at POSITION."
-  (if (featurep 'xemacs)
-      `(let ((pos ,position))
-        (mapcar-extents 'extent-face
-                        nil (current-buffer) pos pos nil 'face))
-    `(let ((pos ,position))
-       (delq nil (cons (get-text-property pos 'face)
-                      (mapcar
-                       (lambda (overlay)
-                         (overlay-get overlay 'face))
-                       (overlays-at pos)))))))
-
-(if (fboundp 'invisible-p)
-    (defalias 'gnus-invisible-p 'invisible-p)
-  ;; for Emacs < 22.2, and XEmacs.
-  (defun gnus-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))))))
-
-;; Note: the optional 2nd argument has a different meaning between
-;; Emacs and XEmacs.
-;; (next-char-property-change POSITION &optional LIMIT)
-;; (next-extent-change        POS      &optional OBJECT)
-(defalias 'gnus-next-char-property-change
-  (if (fboundp 'next-extent-change)
-      'next-extent-change 'next-char-property-change))
-
-(defalias 'gnus-previous-char-property-change
-  (if (fboundp 'previous-extent-change)
-      'previous-extent-change 'previous-char-property-change))
+  `(let ((pos ,position))
+     (delq nil (cons (get-text-property pos 'face)
+                    (mapcar
+                     (lambda (overlay)
+                       (overlay-get overlay 'face))
+                     (overlays-at pos))))))
 
 ;;; Protected and atomic operations.  dmoore@ucsd.edu 21.11.1996
 ;; The primary idea here is to try to protect internal data structures
@@ -1001,16 +914,8 @@ with potentially long computations."
 
 ;;; Functions for saving to babyl/mail files.
 
-(eval-when-compile
-  (if (featurep 'xemacs)
-      ;; Don't load tm and apel XEmacs packages that provide some
-      ;; Emacs emulating functions and variables.
-      (let ((features features))
-       (provide 'tm-view)
-       (unless (fboundp 'set-alist) (defalias 'set-alist 'ignore))
-       (require 'rmail)) ;; It requires tm-view that loads apel.
-    (require 'rmail))
-  (autoload 'rmail-update-summary "rmailsum"))
+(require 'rmail)
+(autoload 'rmail-update-summary "rmailsum")
 
 (defvar mm-text-coding-system)
 
@@ -1207,11 +1112,8 @@ ARG is passed to the first function."
     (apply 'run-hook-with-args hook args)))
 
 (defun gnus-run-mode-hooks (&rest funcs)
-  "Run `run-mode-hooks' if it is available, otherwise `run-hooks'.
-This function saves the current buffer."
-  (if (fboundp 'run-mode-hooks)
-      (save-current-buffer (apply 'run-mode-hooks funcs))
-    (save-current-buffer (apply 'run-hooks funcs))))
+  "Run `run-mode-hooks', saving the current buffer."
+  (save-current-buffer (apply 'run-mode-hooks funcs)))
 
 ;;; Various
 
@@ -1259,16 +1161,6 @@ If HASH-TABLE-P is non-nil, regards SEQUENCE as a hash table."
        (setq sequence (cdr sequence))))
     (nreverse out)))
 
-(if (fboundp 'assq-delete-all)
-    (defalias 'gnus-delete-alist 'assq-delete-all)
-  (defun gnus-delete-alist (key alist)
-    "Delete from ALIST all elements whose car is KEY.
-Return the modified alist."
-    (let (entry)
-      (while (setq entry (assq key alist))
-       (setq alist (delq entry alist)))
-      alist)))
-
 (defun gnus-grep-in-list (word list)
   "Find if a WORD matches any regular expression in the given LIST."
   (when (and word list)
@@ -1370,43 +1262,17 @@ Return the modified alist."
 (put 'gnus-with-output-to-file 'lisp-indent-function 1)
 (put 'gnus-with-output-to-file 'edebug-form-spec '(form body))
 
-(if (fboundp 'union)
-    (defalias 'gnus-union 'union)
-  (defun gnus-union (l1 l2 &rest keys)
-    "Set union of lists L1 and L2.
-If KEYS contains the `:test' and `equal' pair, use `equal' to compare
-items in lists, otherwise use `eq'."
-    (cond ((null l1) l2)
-         ((null l2) l1)
-         ((equal l1 l2) l1)
-         (t
-          (or (>= (length l1) (length l2))
-              (setq l1 (prog1 l2 (setq l2 l1))))
-          (if (eq 'equal (plist-get keys :test))
-              (while l2
-                (or (member (car l2) l1)
-                    (push (car l2) l1))
-                (pop l2))
-            (while l2
-              (or (memq (car l2) l1)
-                  (push (car l2) l1))
-              (pop l2)))
-          l1))))
-
-(declare-function gnus-add-text-properties "gnus"
-                  (start end properties &optional object))
-
 (defun gnus-add-text-properties-when
   (property value start end properties &optional object)
-  "Like `gnus-add-text-properties', only applied on where PROPERTY is VALUE."
+  "Like `add-text-properties', only applied on where PROPERTY is VALUE."
   (let (point)
     (while (and start
                (< start end) ;; XEmacs will loop for every when start=end.
                (setq point (text-property-not-all start end property value)))
-      (gnus-add-text-properties start point properties object)
+      (add-text-properties start point properties object)
       (setq start (text-property-any point end property value)))
     (if start
-       (gnus-add-text-properties start end properties object))))
+       (add-text-properties start end properties object))))
 
 (defun gnus-remove-text-properties-when
   (property value start end properties &optional object)
@@ -1449,10 +1315,6 @@ is run."
   "Byte-compile FORM if `gnus-use-byte-compile' is non-nil."
   (if gnus-use-byte-compile
       (progn
-       (condition-case nil
-           ;; Work around a bug in XEmacs 21.4
-           (require 'byte-optimize)
-         (error))
        (require 'bytecomp)
        (defalias 'gnus-byte-compile
          (lambda (form)
@@ -1555,16 +1417,7 @@ SPEC is a predicate specifier that contains stuff like `or', `and',
                                           initial-input history def)
   "Call standard `completing-read-function'."
   (let ((completion-styles gnus-completion-styles))
-    (completing-read prompt
-                    (if (featurep 'xemacs)
-                        ;; Old XEmacs (at least 21.4) expect an alist,
-                        ;; in which the car of each element is a string,
-                        ;; for collection.
-                        (mapcar
-                         (lambda (elem)
-                           (list (format "%s" (or (car-safe elem) elem))))
-                         collection)
-                      collection)
+    (completing-read prompt collection
                      nil require-match initial-input history def)))
 
 (autoload 'ido-completing-read "ido")
@@ -1605,11 +1458,6 @@ SPEC is a predicate specifier that contains stuff like `or', `and',
       (or iswitchb-mode
          (remove-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup)))))
 
-(defun gnus-graphic-display-p ()
-  (if (featurep 'xemacs)
-      (device-on-window-system-p)
-    (display-graphic-p)))
-
 (put 'gnus-parse-without-error 'lisp-indent-function 0)
 (put 'gnus-parse-without-error 'edebug-form-spec '(body))
 
@@ -1655,7 +1503,7 @@ CHOICE is a list of the choice char and help message at IDX."
            (setq tchar nil)
            (setq buf (get-buffer-create "*Gnus Help*"))
            (pop-to-buffer buf)
-           (fundamental-mode)          ; for Emacs 20.4+
+           (fundamental-mode)
            (buffer-disable-undo)
            (erase-buffer)
            (insert prompt ":\n\n")
@@ -1690,31 +1538,18 @@ CHOICE is a list of the choice char and help message at IDX."
        (kill-buffer buf))
     tchar))
 
-(if (featurep 'emacs)
-    (defalias 'gnus-select-frame-set-input-focus 'select-frame-set-input-focus)
-  (if (fboundp 'select-frame-set-input-focus)
-      (defalias 'gnus-select-frame-set-input-focus 'select-frame-set-input-focus)
-    ;; XEmacs 21.4, SXEmacs
-    (defun gnus-select-frame-set-input-focus (frame)
-      "Select FRAME, raise it, and set input focus, if possible."
-      (raise-frame frame)
-      (select-frame frame)
-      (focus-frame frame))))
-
 (defun gnus-frame-or-window-display-name (object)
   "Given a frame or window, return the associated display name.
 Return nil otherwise."
-  (if (featurep 'xemacs)
-      (device-connection (dfw-device object))
-    (if (or (framep object)
-           (and (windowp object)
-                (setq object (window-frame object))))
-       (let ((display (frame-parameter object 'display)))
-         (if (and (stringp display)
-                  ;; Exclude invalid display names.
-                  (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'"
-                                display))
-             display)))))
+  (if (or (framep object)
+         (and (windowp object)
+              (setq object (window-frame object))))
+      (let ((display (frame-parameter object 'display)))
+       (if (and (stringp display)
+                ;; Exclude invalid display names.
+                (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'"
+                              display))
+           display))))
 
 (defvar tool-bar-mode)
 
@@ -1723,9 +1558,7 @@ Return nil otherwise."
   (when (and (boundp 'tool-bar-mode)
             tool-bar-mode)
     (let* ((args nil)
-          (func (cond ((featurep 'xemacs)
-                       'ignore)
-                      ((fboundp 'tool-bar-update)
+          (func (cond ((fboundp 'tool-bar-update)
                        'tool-bar-update)
                       ((fboundp 'force-window-update)
                        'force-window-update)
@@ -1770,25 +1603,6 @@ sequence, this is like `mapcar'.  With several, it is like the Common Lisp
           (cdr ,result)))
     `(mapcar ,function ,seq1)))
 
-(if (fboundp 'merge)
-    (defalias 'gnus-merge 'merge)
-  ;; Adapted from cl-seq.el
-  (defun gnus-merge (type list1 list2 pred)
-    "Destructively merge lists LIST1 and LIST2 to produce a new list.
-Argument TYPE is for compatibility and ignored.
-Ordering of the elements is preserved according to PRED, a `less-than'
-predicate on the elements."
-    (let ((res nil))
-      (while (and list1 list2)
-       (if (funcall pred (car list2) (car list1))
-           (push (pop list2) res)
-         (push (pop list1) res)))
-      (nconc (nreverse res) list1 list2))))
-
-(defvar xemacs-codename)
-(defvar sxemacs-codename)
-(defvar emacs-program-version)
-
 (defun gnus-emacs-version ()
   "Stringified Emacs version."
   (let* ((lst (if (listp gnus-user-agent)
@@ -1799,37 +1613,15 @@ predicate on the elements."
                         ((memq 'type lst)
                          (symbol-name system-type))
                         (t nil)))
-        codename emacsname)
-    (cond ((featurep 'sxemacs)
-          (setq emacsname "SXEmacs"
-                codename sxemacs-codename))
-         ((featurep 'xemacs)
-          (setq emacsname "XEmacs"
-                codename xemacs-codename))
-         (t
-          (setq emacsname "Emacs")))
+        codename)
     (cond
      ((not (memq 'emacs lst))
       nil)
      ((string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version)
-      ;; Emacs:
       (concat "Emacs/" (match-string 1 emacs-version)
              (if system-v
                  (concat " (" system-v ")")
                "")))
-     ((or (featurep 'sxemacs) (featurep 'xemacs))
-      ;; XEmacs or SXEmacs:
-      (concat emacsname "/" emacs-program-version
-             (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)
@@ -1858,36 +1650,6 @@ empty directories from OLD-PATH."
   (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)
-  (defalias 'gnus-set-process-query-on-exit-flag
-    'process-kill-without-query))
-
-(defalias 'gnus-read-shell-command
-  (if (fboundp 'read-shell-command) 'read-shell-command 'read-string))
-
-(defmacro gnus-put-display-table (range value display-table)
-  "Set the value for char RANGE to VALUE in DISPLAY-TABLE.  "
-  (if (featurep 'xemacs)
-      (progn
-        `(if (fboundp 'put-display-table)
-          (put-display-table ,range ,value ,display-table)
-          (if (sequencep ,display-table)
-              (aset ,display-table ,range ,value)
-            (put-char-table ,range ,value ,display-table))))
-    `(aset ,display-table ,range ,value)))
-
-(defmacro gnus-get-display-table (character display-table)
-  "Find value for CHARACTER in DISPLAY-TABLE.  "
-  (if (featurep 'xemacs)
-      `(if (fboundp 'get-display-table)
-          (get-display-table ,character ,display-table)
-          (if (sequencep ,display-table)
-              (aref ,display-table ,character)
-            (get-char-table ,character ,display-table)))
-    `(aref ,display-table ,character)))
-
 (declare-function image-size "image.c" (spec &optional pixels frame))
 
 (defun gnus-rescale-image (image size)
@@ -1910,12 +1672,11 @@ Sizes are in pixels."
                    image)))
       image)))
 
-(eval-when-compile (require 'gmm-utils))
 (defun gnus-recursive-directory-files (dir)
   "Return all regular files below DIR.
 The first found will be returned if a file has hard or symbolic links."
   (let (files attr attrs)
-    (gmm-labels
+    (cl-labels
        ((fn (directory)
             (dolist (file (directory-files directory t))
               (setq attr (file-attributes (file-truename file)))
@@ -1939,63 +1700,6 @@ The first found will be returned if a file has hard or symbolic links."
                      (memq elem list))))
     found))
 
-(eval-and-compile
-  (cond
-   ((fboundp 'match-substitute-replacement)
-    (defalias 'gnus-match-substitute-replacement 'match-substitute-replacement))
-   (t
-    (defun gnus-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'.
-
-This is the definition of match-substitute-replacement in subr.el from GNU Emacs."
-      (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)))))))
-
-(if (fboundp 'string-match-p)
-    (defalias 'gnus-string-match-p 'string-match-p)
-  (defsubst gnus-string-match-p (regexp string &optional start)
-    "\
-Same as `string-match' except this function does not change the match data."
-    (save-match-data
-      (string-match regexp string start))))
-
-(if (fboundp 'string-prefix-p)
-    (defalias 'gnus-string-prefix-p 'string-prefix-p)
-  (defun gnus-string-prefix-p (str1 str2 &optional ignore-case)
-    "Return non-nil if STR1 is a prefix of STR2.
-If IGNORE-CASE is non-nil, the comparison is done without paying attention
-to case differences."
-    (and (<= (length str1) (length str2))
-        (let ((prefix (substring str2 0 (length str1))))
-          (if ignore-case
-              (string-equal (downcase str1) (downcase prefix))
-            (string-equal str1 prefix))))))
-
-(defalias 'gnus-format-message
-  (if (fboundp 'format-message) 'format-message
-    ;; for Emacs < 25, and XEmacs, don't worry about quote translation.
-    'format))
-
-;; Simple check: can be a macro but this way, although slow, it's really clear.
-;; We don't use `bound-and-true-p' because it's not in XEmacs.
-(defun gnus-bound-and-true-p (sym)
-  (and (boundp sym) (symbol-value sym)))
-
-(if (fboundp 'timer--function)
-    (defalias 'gnus-timer--function 'timer--function)
-  (defun gnus-timer--function (timer)
-    (elt timer 5)))
-
 (defun gnus-test-list (list predicate)
   "To each element of LIST apply PREDICATE.
 Return nil if LIST is no list or is empty or some test returns nil;
@@ -2021,6 +1725,59 @@ lists of strings."
        (gnus-setdiff (cdr list1) list2)
       (cons (car list1) (gnus-setdiff (cdr list1) list2)))))
 
+;;; Image functions.
+
+(defun gnus-image-type-available-p (type)
+  (and (display-images-p)
+       (image-type-available-p type)))
+
+(defun gnus-create-image (file &optional type data-p &rest props)
+  (let ((face (plist-get props :face)))
+    (when face
+      (setq props (plist-put props :foreground (face-foreground face)))
+      (setq props (plist-put props :background (face-background face))))
+    (ignore-errors
+      (apply 'create-image file type data-p props))))
+
+(defun gnus-put-image (glyph &optional string category)
+  (let ((point (point)))
+    (insert-image glyph (or string " "))
+    (put-text-property point (point) 'gnus-image-category category)
+    (unless string
+      (put-text-property (1- (point)) (point)
+                        'gnus-image-text-deletable t))
+    glyph))
+
+(defun gnus-remove-image (image &optional 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))
+         (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))))))
+
+(defun gnus-kill-all-overlays ()
+  "Delete all overlays in the current buffer."
+  (let* ((overlayss (overlay-lists))
+        (buffer-read-only nil)
+        (overlays (delq nil (nconc (car overlayss) (cdr overlayss)))))
+    (while overlays
+      (delete-overlay (pop overlays)))))
+
 (provide 'gnus-util)
 
 ;;; gnus-util.el ends here
index 416567ed28571bebebdcabc4cf0d2f0d2bba9848..f199d1659d9f6defcce201dccb629e26b4559793 100644 (file)
@@ -217,11 +217,8 @@ Note that this variable can be used in conjunction with the
 
 ;; Various variables users may set
 
-(defcustom gnus-uu-tmp-dir
-  (cond ((fboundp 'temp-directory) (temp-directory))
-       ((boundp 'temporary-file-directory) temporary-file-directory)
-       ("/tmp/"))
-  "*Variable saying where gnus-uu is to do its work.
+(defcustom gnus-uu-tmp-dir temporary-file-directory
+  "Variable saying where gnus-uu is to do its work.
 Default is \"/tmp/\"."
   :group 'gnus-extract
   :type 'directory)
@@ -408,7 +405,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                          gnus-uu-default-dir))))
   (gnus-uu-initialize)
   (setq gnus-uu-binhex-article-name
-       (mm-make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
+       (make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
   (gnus-uu-decode-with-method 'gnus-uu-binhex-article n dir))
 
 (defun gnus-uu-decode-yenc (n dir)
@@ -474,7 +471,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                         gnus-uu-default-dir gnus-uu-default-dir)))
   (gnus-uu-initialize)
   (setq gnus-uu-binhex-article-name
-       (mm-make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
+       (make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
   (let ((gnus-view-pseudos (or gnus-view-pseudos 'automatic)))
     (gnus-uu-decode-binhex n file)))
 
@@ -486,7 +483,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   (interactive "P")
   (gnus-uu-initialize)
   (let ((gnus-uu-save-in-digest t)
-       (file (mm-make-temp-file (nnheader-concat gnus-uu-work-dir "forward")))
+       (file (make-temp-file (nnheader-concat gnus-uu-work-dir "forward")))
        (message-forward-as-mime message-forward-as-mime)
        (mail-parse-charset gnus-newsgroup-charset)
        (mail-parse-ignored-charsets gnus-newsgroup-ignored-charsets)
@@ -876,10 +873,7 @@ When called interactively, prompt for REGEXP."
        (with-current-buffer buffer
          (save-restriction
            (let ((inhibit-read-only t))
-             (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))
+             (set-text-properties (point-min) (point-max) nil))
            (when (and message-forward-as-mime
                       message-forward-show-mml
                       gnus-uu-digest-buffer)
@@ -1787,7 +1781,7 @@ Gnus might fail to display all of it.")
                 gnus-uu-tmp-dir)))
 
       (setq gnus-uu-work-dir
-           (mm-make-temp-file (concat gnus-uu-tmp-dir "gnus") 'dir))
+           (make-temp-file (concat gnus-uu-tmp-dir "gnus") 'dir))
       (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)
index b1498fd7852faf9e51b2adebaf99c597ced346ce..9c950a9e3e969e46b345aa3a31db6fc77f1f13b2 100644 (file)
@@ -273,9 +273,7 @@ See the Gnus manual for an explanation of the syntax used.")
              (cond
                ((eq buf (window-buffer (selected-window)))
                 (set-buffer buf))
-               ((eq t (window-dedicated-p
-                      ;; XEmacs version of `window-dedicated-p' requires it.
-                      (selected-window)))
+               ((eq t (window-dedicated-p))
                 ;; If the window is hard-dedicated, we have a problem because
                 ;; we just can't do what we're asked.  But signaling an error,
                 ;; like `switch-to-buffer' would do, is not an option because
@@ -417,19 +415,15 @@ See the Gnus manual for an explanation of the syntax used.")
                     (gnus-delete-windows-in-gnusey-frames))
                 ;; Just remove some windows.
                 (gnus-remove-some-windows)
-                (if (featurep 'xemacs)
-                    (switch-to-buffer nntp-server-buffer)
-                  (set-buffer nntp-server-buffer)))
+                (set-buffer nntp-server-buffer))
             (select-frame frame)))
 
         (let (gnus-window-frame-focus)
-          (if (featurep 'xemacs)
-              (switch-to-buffer nntp-server-buffer)
-            (set-buffer nntp-server-buffer))
+          (set-buffer nntp-server-buffer)
           (gnus-configure-frame split)
           (run-hooks 'gnus-configure-windows-hook)
           (when gnus-window-frame-focus
-            (gnus-select-frame-set-input-focus
+            (select-frame-set-input-focus
              (window-frame gnus-window-frame-focus)))))))))
 
 (defun gnus-delete-windows-in-gnusey-frames ()
@@ -510,27 +504,15 @@ should have point."
                  lowest-buf buf))))
       (when lowest-buf
        (pop-to-buffer lowest-buf)
-       (if (featurep 'xemacs)
-           (switch-to-buffer nntp-server-buffer)
-         (set-buffer nntp-server-buffer)))
+       (set-buffer nntp-server-buffer))
       (mapcar (lambda (b) (delete-windows-on b t))
              (delq lowest-buf bufs)))))
 
-(eval-and-compile
-  (cond
-   ((fboundp 'frames-on-display-list)
-    (defalias 'gnus-frames-on-display-list 'frames-on-display-list))
-   ((and (featurep 'xemacs) (fboundp 'frame-device))
-    (defun gnus-frames-on-display-list ()
-      (apply 'filtered-frame-list 'identity (list (frame-device nil)))))
-   (t
-    (defalias 'gnus-frames-on-display-list 'frame-list))))
-
 (defun gnus-get-buffer-window (buffer &optional frame)
   (cond ((and (null gnus-use-frames-on-any-display)
              (memq frame '(t 0 visible)))
         (car
-         (let ((frames (gnus-frames-on-display-list)))
+         (let ((frames (frames-on-display-list)))
            (gnus-remove-if (lambda (win) (not (memq (window-frame win)
                                                     frames)))
                            (get-buffer-window-list buffer nil frame)))))
index 5d2ce7ee19f0310a482cca1ace462df0c21f40c7..edf46f173b153fa5c489a6ca02b4db141c4be46d 100644 (file)
@@ -27,7 +27,7 @@
 
 ;;; Code:
 
-(eval '(run-hooks 'gnus-load-hook))
+(run-hooks 'gnus-load-hook)
 
 (eval-when-compile (require 'cl))
 (require 'wid-edit)
@@ -303,15 +303,9 @@ be set in `.emacs' instead."
   :group 'gnus-start
   :type 'boolean)
 
-(unless (featurep 'gnus-xmas)
-  (defalias 'gnus-extent-detached-p 'ignore)
-  (defalias 'gnus-extent-start-open 'ignore)
-  (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names)
-  (defalias 'gnus-character-to-event 'identity)
-  (defalias 'gnus-assq-delete-all 'assq-delete-all)
-  (defalias 'gnus-add-text-properties 'add-text-properties)
-  (defalias 'gnus-put-text-property 'put-text-property)
-  (defvar gnus-mode-line-image-cache t)
+(defvar gnus-mode-line-image-cache t)
+
+(eval-and-compile
   (if (fboundp 'find-image)
       (defun gnus-mode-line-buffer-identification (line)
        (let ((str (car-safe line))
@@ -336,12 +330,7 @@ be set in `.emacs' instead."
                      str)
                     (list str))
            line)))
-    (defalias 'gnus-mode-line-buffer-identification 'identity))
-  (defalias 'gnus-deactivate-mark 'deactivate-mark)
-  (defalias 'gnus-window-edges 'window-edges)
-  (defalias 'gnus-key-press-event-p 'numberp)
-  ;;(defalias 'gnus-decode-rfc1522 'ignore)
-  )
+    (defalias 'gnus-mode-line-buffer-identification 'identity)))
 
 ;; We define these group faces here to avoid the display
 ;; update forced when creating new faces.
@@ -914,14 +903,20 @@ be set in `.emacs' instead."
 
 (defun gnus-add-buffer ()
   "Add the current buffer to the list of Gnus buffers."
+  (gnus-prune-buffers)
   (push (current-buffer) gnus-buffers))
 
 (defmacro gnus-kill-buffer (buffer)
   "Kill BUFFER and remove from the list of Gnus buffers."
   `(let ((buf ,buffer))
      (when (gnus-buffer-exists-p buf)
-       (setq gnus-buffers (delete (get-buffer buf) gnus-buffers))
-       (kill-buffer buf))))
+       (kill-buffer buf)
+       (gnus-prune-buffers))))
+
+(defun gnus-prune-buffers ()
+  (dolist (buf gnus-buffers)
+    (unless (buffer-live-p buf)
+      (setq gnus-buffers (delete buf gnus-buffers)))))
 
 (defun gnus-buffers ()
   "Return a list of live Gnus buffers."
@@ -2503,16 +2498,11 @@ Disabling the agent may result in noticeable loss of performance."
                 (function-item gnus-slave-no-server)))
 
 (defcustom gnus-other-frame-parameters nil
-  "Frame parameters used by `gnus-other-frame' to create a Gnus frame.
-This should be an alist for Emacs, or a plist for XEmacs."
+  "Frame parameters used by `gnus-other-frame' to create a Gnus frame."
   :group 'gnus-start
-  :type (if (featurep 'xemacs)
-           '(repeat (list :inline t :format "%v"
-                          (symbol :tag "Property")
-                          (sexp :tag "Value")))
-         '(repeat (cons :format "%v"
-                        (symbol :tag "Parameter")
-                        (sexp :tag "Value")))))
+  :type '(repeat (cons :format "%v"
+                      (symbol :tag "Parameter")
+                      (sexp :tag "Value"))))
 
 (defcustom gnus-user-agent '(emacs gnus type)
   "Which information should be exposed in the User-Agent header.
@@ -3026,7 +3016,7 @@ See Info node `(gnus)Formatting Variables'."
 
 (defun gnus-suppress-keymap (keymap)
   (suppress-keymap keymap)
-  (let ((keys `([delete] "\177" "\M-u"))) ;gnus-mouse-2
+  (let ((keys `([delete] "\177" "\M-u"))) ;[mouse-2]
     (while keys
       (define-key keymap (pop keys) 'undefined))))
 
@@ -3155,10 +3145,6 @@ Return nil if not defined."
   (setcar (nthcdr 2 (gnus-gethash group gnus-newsrc-hashtb))
          info))
 
-;;; Load the compatibility functions.
-
-(require 'gnus-ems)
-
 \f
 ;;;
 ;;; Shutdown
@@ -3243,8 +3229,7 @@ If ARG, insert string at point."
                         4.99
                       (+ 5 (* 0.02
                               (abs
-                               (- (mm-char-int (aref (downcase alpha) 0))
-                                  (mm-char-int ?t))))
+                               (- (aref (downcase alpha) 0) ?t)))
                          -0.01))
                     minor least)
         (format "%d.%02d%02d" major minor least))))))
@@ -3448,7 +3433,7 @@ that that variable is buffer-local to the summary buffers."
 
 (defun gnus-simplify-mode-line ()
   "Make mode lines a bit simpler."
-  (setq mode-line-modified (cdr gnus-mode-line-modified))
+  (setq mode-line-modified "--")
   (when (listp mode-line-format)
     (make-local-variable 'mode-line-format)
     (setq mode-line-format (copy-sequence mode-line-format))
@@ -4386,12 +4371,12 @@ current display is used."
                                 (with-current-buffer (window-buffer window)
                                   (string-match "\\`gnus-"
                                                 (symbol-name major-mode))))
-                       (gnus-select-frame-set-input-focus
+                       (select-frame-set-input-focus
                         (setq gnus-other-frame-object (window-frame window)))
                        (select-window window)
                        (throw 'found t)))
                    'ignore t)))
-      (gnus-select-frame-set-input-focus
+      (select-frame-set-input-focus
        (setq gnus-other-frame-object
             (if display
                 (make-frame-on-display display gnus-other-frame-parameters)
@@ -4435,10 +4420,6 @@ prompt the user for the name of an NNTP server to use."
   (require 'debbugs-gnu)
   (debbugs-gnu nil "gnus"))
 
-;; Allow redefinition of Gnus functions.
-
-(gnus-ems-redefine)
-
 (provide 'gnus)
 
 ;;; gnus.el ends here
index 7293e334335c2b4c22f6a506230d2ccdd6d89ee1..a8c61faecc000e39503c07a7da56a9b0b2df70ed 100644 (file)
@@ -148,17 +148,17 @@ converted to the compressed format."
             (gnus-pp gnus-agent-expire-days)
 
            (insert
-            (gnus-format-message
+            (format-message
              "\nIn order to use version `%s' of gnus, you will need to set\n"
              converting-to))
             (insert "gnus-agent-expire-days to an integer. If you still wish to set different\n")
             (insert "expiration days to individual groups, you must instead set the\n")
-            (insert (gnus-format-message
+            (insert (format-message
                     "`agent-days-until-old' group and/or topic parameter.\n"))
             (insert "\n")
             (insert "If you would like, gnus can iterate over every group comparing its name to the\n")
             (insert "regular expressions that you currently have in gnus-agent-expire-days.  When\n")
-            (insert (gnus-format-message
+            (insert (format-message
                     "gnus finds a match, it will update that group's `agent-days-until-old' group\n"))
             (insert "parameter to the value associated with the regular expression.\n")
             (insert "\n")
index f4a9e191010f0264b1135b8351f8539cc2d5b36b..ebc9c97b6563bb4578a8f6f0d5e3811ca157f46e 100644 (file)
@@ -603,8 +603,8 @@ If CONFIRM is non-nil, ask for confirmation before removing a file."
          currday (+ currday (* low2days (nth 1 (current-time)))))
     (while files
       (let* ((ffile (car files))
-            (bfile (gnus-replace-in-string
-                    ffile "\\`.*/\\([^/]+\\)\\'" "\\1"))
+            (bfile (replace-regexp-in-string "\\`.*/\\([^/]+\\)\\'" "\\1"
+                                             ffile))
             (filetime (nth 5 (file-attributes ffile)))
             (fileday (* (car filetime) high2days))
             (fileday (+ fileday (* low2days (nth 1 filetime)))))
@@ -612,7 +612,7 @@ If CONFIRM is non-nil, ask for confirmation before removing a file."
        (when (and (> (- currday fileday) diff)
                   (if confirm
                       (y-or-n-p
-                       (gnus-format-message "\
+                       (format-message "\
 Delete old (> %s day(s)) incoming mail file `%s'? " diff bfile))
                     (gnus-message 8 "\
 Deleting old (> %s day(s)) incoming mail file `%s'." diff bfile)
@@ -629,8 +629,6 @@ Deleting old (> %s day(s)) incoming mail file `%s'." diff bfile)
        0)
     (funcall callback mail-source-crash-box info)))
 
-(autoload 'gnus-float-time "gnus-util")
-
 (defvar mail-source-incoming-last-checked-time nil)
 
 (defun mail-source-delete-crash-box ()
@@ -639,7 +637,7 @@ Deleting old (> %s day(s)) incoming mail file `%s'." diff bfile)
     (if (eq mail-source-delete-incoming t)
        (delete-file mail-source-crash-box)
       (let ((incoming
-            (mm-make-temp-file
+            (make-temp-file
              (expand-file-name
               mail-source-incoming-file-prefix
               mail-source-directory))))
@@ -651,7 +649,7 @@ Deleting old (> %s day(s)) incoming mail file `%s'." diff bfile)
          ;; Don't check for old incoming files more than once per day to
          ;; save a lot of file accesses.
          (when (or (null mail-source-incoming-last-checked-time)
-                   (> (gnus-float-time
+                   (> (float-time
                        (time-since mail-source-incoming-last-checked-time))
                       (* 24 60 60)))
            (setq mail-source-incoming-last-checked-time (current-time))
@@ -997,7 +995,6 @@ This only works when `display-time' is enabled."
     (if on
        (progn
          (require 'time)
-         ;; display-time-mail-function is an Emacs feature.
          (setq display-time-mail-function #'mail-source-new-mail-p)
          ;; Set up the main timer.
          (setq mail-source-report-new-mail-timer
index ed0422c1f4d57712ebf909f9526ed162071450c9..1ca7c5cafef737f6f6cf5997776a9b46ebfb2a31 100644 (file)
 ;; This is apparently necessary even though things are autoloaded.
 ;; Because we dynamically bind mail-abbrev-mode-regexp, we'd better
 ;; require mailabbrev here.
-(if (featurep 'xemacs)
-    (require 'mail-abbrevs)
-  (require 'mailabbrev))
+(require 'mailabbrev)
 (require 'mail-parse)
 (require 'mml)
 (require 'rfc822)
 (require 'format-spec)
 (require 'dired)
+(require 'mm-util)
+(require 'rfc2047)
+(require 'puny)
 
-(autoload 'mailclient-send-it "mailclient") ;; Emacs 22 or contrib/
+(autoload 'mailclient-send-it "mailclient")
 
 (defvar gnus-message-group-art)
 (defvar gnus-list-identifiers) ; gnus-sum is required where necessary
@@ -296,7 +297,7 @@ any confusion."
                 regexp))
 
 (defcustom message-subject-re-regexp
-  "^[ \t]*\\([Rr][Ee]\\(\\[[0-9]*\\]\\)*:[ \t]*\\)*[ \t]*"
+  "^[ \t]*\\([Rr][Ee]\\(\\[[0-9]*\\]\\)* ?:[ \t]*\\)*[ \t]*"
   "*Regexp matching \"Re: \" in the subject line."
   :group 'message-various
   :link '(custom-manual "(message)Message Headers")
@@ -1249,11 +1250,7 @@ called and its result is inserted."
          (if (and (boundp 'mail-archive-file-name)
                   (stringp mail-archive-file-name))
              (format "FCC: %s\n" mail-archive-file-name))
-         ;; Use the value of `mail-default-headers' if available.
-         ;; Note: as for XEmacs 21.4 and 21.5, it is unavailable
-         ;; unless sendmail.el is loaded.
-         (if (boundp 'mail-default-headers)
-             mail-default-headers))
+         mail-default-headers)
   "*A string of header lines to be inserted in outgoing mails."
   :version "23.2"
   :group 'message-headers
@@ -1346,20 +1343,23 @@ If nil, Message won't auto-save."
   :link '(custom-manual "(message)Various Message Variables")
   :type '(choice directory (const :tag "Don't auto-save" nil)))
 
-(defcustom message-default-charset
-  (and (not (mm-multibyte-p)) 'iso-8859-1)
+(defcustom message-default-charset (and (not (mm-multibyte-p)) 'iso-8859-1)
   "Default charset used in non-MULE Emacsen.
 If nil, you might be asked to input the charset."
   :version "21.1"
   :group 'message
   :link '(custom-manual "(message)Various Message Variables")
   :type 'symbol)
+(make-obsolete-variable
+ 'message-default-charset
+ "The default charset comes from the language environment" "25.2")
 
-(defcustom message-dont-reply-to-names
-  (and (boundp 'mail-dont-reply-to-names) mail-dont-reply-to-names)
-  "*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."
+(defcustom message-dont-reply-to-names mail-dont-reply-to-names
+  "Addresses to prune when doing wide replies.
+This can be a regexp, a list of regexps or a predicate function.
+Also, a value of nil means exclude your own user name only.
+
+If a function email is passed as the argument."
   :version "24.3"
   :group 'message
   :link '(custom-manual "(message)Wide Reply")
@@ -1368,7 +1368,9 @@ exclude your own user name only."
                 (repeat :tag "Regexp List" regexp)))
 
 (defsubst message-dont-reply-to-names ()
-  (gmm-regexp-concat message-dont-reply-to-names))
+  (if (functionp message-dont-reply-to-names)
+      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.
@@ -1630,11 +1632,6 @@ starting with `not' and followed by regexps."
        (0 'message-mml))))
   "Additional expressions to highlight in Message mode.")
 
-
-;; XEmacs does it like this.  For Emacs, we have to set the
-;; `font-lock-defaults' buffer-local variable.
-(put 'message-mode 'font-lock-defaults '(message-font-lock-keywords t))
-
 (defvar message-face-alist
   '((bold . message-bold-region)
     (underline . underline-region)
@@ -1676,12 +1673,8 @@ news."
 (defvar message-send-coding-system 'binary
   "Coding system to encode outgoing mail.")
 
-(defvar message-draft-coding-system
-  mm-auto-save-coding-system
-  "*Coding system to compose mail.
-If you'd like to make it possible to share draft files between XEmacs
-and Emacs, you may use `iso-2022-7bit' for this value at your own risk.
-Note that the coding-system `iso-2022-7bit' isn't suitable to all data.")
+(defvar message-draft-coding-system mm-auto-save-coding-system
+  "Coding system to compose mail.")
 
 (defcustom message-send-mail-partially-limit nil
   "The limitation of messages sent as message/partial.
@@ -1694,17 +1687,20 @@ should be sent in several parts.  If it is nil, the size is unlimited."
                 (integer 1000000)))
 
 (defcustom message-alternative-emails nil
-  "*Regexp matching alternative email addresses.
+  "*Regexp or predicate function matching alternative email addresses.
 The first address in the To, Cc or From headers of the original
 article matching this variable is used as the From field of
 outgoing messages.
 
+If a function, an email string is passed as the argument.
+
 This variable has precedence over posting styles and anything that runs
 off `message-setup-hook'."
   :group 'message-headers
   :link '(custom-manual "(message)Message Headers")
   :type '(choice (const :tag "Always use primary" nil)
-                regexp))
+                regexp
+                 function))
 
 (defcustom message-hierarchical-addresses nil
   "A list of hierarchical mail address definitions.
@@ -1761,25 +1757,9 @@ no, only reply back to the author."
   :type '(radio (const :format "%v  " nil)
                (string :format "FQDN: %v")))
 
-(defcustom message-use-idna
-  (and (or (mm-coding-system-p 'utf-8)
-          (condition-case nil
-              (let (mucs-ignore-version-incompatibilities)
-                (require 'un-define))
-            (error)))
-       (condition-case nil
-          (require 'idna)
-        (file-error)
-        (invalid-operation))
-       idna-program
-       (executable-find idna-program)
-       (string= (idna-to-ascii "räksmörgås") "xn--rksmrgs-5wao1o")
-       t)
-  "Whether to encode non-ASCII in domain names into ASCII according to IDNA.
-GNU Libidn, and in particular the elisp package \"idna.el\" and
-the external program \"idn\", must be installed for this
-functionality to work."
-  :version "22.1"
+(defcustom message-use-idna t
+  "Whether to encode non-ASCII in domain names into ASCII according to IDNA."
+  :version "25.2"
   :group 'message-headers
   :link '(custom-manual "(message)IDNA")
   :type '(choice (const :tag "Ask" ask)
@@ -1910,12 +1890,7 @@ You must have the \"hashcash\" binary installed, see `hashcash-path'."
 
 (defvar        message-options nil
   "Some saved answers when sending message.")
-;; FIXME: On XEmacs this causes problems since let-binding like:
-;; (let ((message-options message-options)) ...)
-;; as in `message-send' and `mml-preview' loses to buffer-local
-;; variable initialization.
-(unless (featurep 'xemacs)
-  (make-variable-buffer-local 'message-options))
+(make-variable-buffer-local 'message-options)
 
 (defvar message-send-mail-real-function nil
   "Internal send mail function.")
@@ -1923,63 +1898,6 @@ You must have the \"hashcash\" binary installed, see `hashcash-path'."
 (defvar message-bogus-system-names "\\`localhost\\.\\|\\.local\\'"
   "The regexp of bogus system names.")
 
-(defcustom message-valid-fqdn-regexp
-  (concat "[a-z0-9][-.a-z0-9]+\\." ;; [hostname.subdomain.]domain.
-         ;; valid TLDs:
-         "\\([a-z][a-z]\\|" ;; two letter country TDLs
-         "aero\\|arpa\\|asia\\|bitnet\\|biz\\|bofh\\|"
-         "cat\\|com\\|coop\\|edu\\|gov\\|"
-         "info\\|int\\|jobs\\|"
-         "mil\\|mobi\\|museum\\|name\\|net\\|"
-         "org\\|pro\\|tel\\|travel\\|uucp\\|"
-          ;; ICANN-era generic top-level domains
-          "academy\\|actor\\|agency\\|airforce\\|archi\\|associates\\|axa\\|"
-          "bar\\|bargains\\|bayern\\|beer\\|berlin\\|best\\|bid\\|bike\\|"
-          "biz\\|black\\|blackfriday\\|blue\\|boutique\\|build\\|builders\\|"
-          "buzz\\|cab\\|camera\\|camp\\|capital\\|cards\\|care\\|career\\|"
-          "careers\\|cash\\|catering\\|center\\|ceo\\|cheap\\|christmas\\|"
-          "church\\|citic\\|cleaning\\|clinic\\|clothing\\|club\\|codes\\|"
-          "coffee\\|college\\|cologne\\|com\\|community\\|company\\|computer\\|"
-          "construction\\|contractors\\|cooking\\|cool\\|country\\|creditcard\\|"
-          "cruises\\|dance\\|dating\\|democrat\\|dental\\|desi\\|design\\|"
-          "diamonds\\|directory\\|discount\\|domains\\|education\\|email\\|"
-          "engineering\\|enterprises\\|equipment\\|estate\\|eus\\|events\\|"
-          "exchange\\|expert\\|exposed\\|fail\\|farm\\|feedback\\|finance\\|"
-          "financial\\|fish\\|fishing\\|fitness\\|flights\\|florist\\|foo\\|"
-          "foundation\\|frogans\\|fund\\|furniture\\|futbol\\|gal\\|"
-          "gallery\\|gift\\|glass\\|globo\\|gmo\\|gop\\|graphics\\|gratis\\|"
-          "gripe\\|guide\\|guitars\\|guru\\|hamburg\\|haus\\|hiphop\\|"
-          "holdings\\|holiday\\|homes\\|horse\\|house\\|immobilien\\|"
-          "industries\\|info\\|ink\\|institute\\|insure\\|international\\|"
-          "investments\\|jetzt\\|juegos\\|kaufen\\|kim\\|kitchen\\|kiwi\\|"
-          "koeln\\|kred\\|land\\|lat\\|latino\\|lease\\|life\\|lighting\\|"
-          "limited\\|limo\\|link\\|loans\\|london\\|luxe\\|luxury\\|"
-          "management\\|mango\\|marketing\\|media\\|meet\\|menu\\|miami\\|"
-          "moda\\|moe\\|monash\\|moscow\\|motorcycles\\|nagoya\\|name\\|"
-          "net\\|neustar\\|ninja\\|nyc\\|okinawa\\|onl\\|org\\|paris\\|"
-          "partners\\|parts\\|photo\\|photography\\|photos\\|pics\\|"
-          "pictures\\|pink\\|plumbing\\|pro\\|productions\\|properties\\|"
-          "pub\\|qpon\\|quebec\\|recipes\\|red\\|reisen\\|ren\\|rentals\\|"
-          "repair\\|report\\|rest\\|reviews\\|rich\\|rocks\\|rodeo\\|"
-          "ruhr\\|ryukyu\\|saarland\\|schule\\|scot\\|services\\|sexy\\|"
-          "shiksha\\|shoes\\|singles\\|social\\|sohu\\|solar\\|solutions\\|"
-          "soy\\|supplies\\|supply\\|support\\|surgery\\|systems\\|tattoo\\|"
-          "tax\\|technology\\|tienda\\|tips\\|today\\|tokyo\\|tools\\|"
-          "town\\|toys\\|trade\\|training\\|university\\|uno\\|vacations\\|"
-          "vegas\\|ventures\\|viajes\\|villas\\|vision\\|vodka\\|vote\\|"
-          "voting\\|voto\\|voyage\\|wang\\|watch\\|webcam\\|wed\\|wien\\|"
-          "wiki\\|works\\|wtc\\|wtf\\|xyz\\|yachts\\|yokohama\\|you\\|"
-          "zone\\)")
-  ;; http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
-  ;; http://en.wikipedia.org/wiki/GTLD
-  ;; `approved, but not yet in operation': .xxx
-  ;; "dead" nato bitnet uucp
-  "Regular expression that matches a valid FQDN."
-  ;; see also: gnus-button-valid-fqdn-regexp
-  :version "25.1"
-  :group 'message-headers
-  :type 'regexp)
-
 (autoload 'gnus-alive-p "gnus-util")
 (autoload 'gnus-delay-article "gnus-delay")
 (autoload 'gnus-extract-address-components "gnus-util")
@@ -1988,14 +1906,11 @@ You must have the \"hashcash\" binary installed, see `hashcash-path'."
 (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")
@@ -2005,20 +1920,8 @@ You must have the \"hashcash\" binary installed, see `hashcash-path'."
 (autoload 'rmail-msg-is-pruned "rmail")
 (autoload 'rmail-output "rmailout")
 
-;; Emacs < 24.1 do not have mail-dont-reply-to
-(unless (fboundp 'mail-dont-reply-to)
-  (defalias 'mail-dont-reply-to 'rmail-dont-reply-to))
-
-(eval-and-compile
-  (if (featurep 'emacs)
-      (progn
-       (defun message-kill-all-overlays ()
-         (mapcar #'delete-overlay (overlays-in (point-min) (point-max))))
-       (defalias 'message-window-inside-pixel-edges
-         'window-inside-pixel-edges))
-    (defun message-kill-all-overlays ()
-      (map-extents (lambda (extent ignore) (delete-extent extent))))
-    (defalias 'message-window-inside-pixel-edges 'ignore)))
+(defun message-kill-all-overlays ()
+  (mapcar #'delete-overlay (overlays-in (point-min) (point-max))))
 
 \f
 
@@ -2238,8 +2141,8 @@ contains a valid encoded word.  Decode again? "
          ;; No double encoded subject? => bogus charset.
          (unless cs-coding
            (setq cs-coding
-                 (mm-read-coding-system
-                  (gnus-format-message "\
+                 (read-coding-system
+                  (format-message "\
 Decoded Subject \"%s\"
 contains an encoded word.  The charset `%s' is unknown or invalid.
 Hit RET to replace non-decodable characters with \"%s\" or enter replacement
@@ -2277,33 +2180,26 @@ charset: "
   "Remove trailing \"(was: <old subject>)\" from SUBJECT lines.
 Leading \"Re: \" is not stripped by this function.  Use the function
 `message-strip-subject-re' for this."
-  (let* ((query message-subject-trailing-was-query)
-        (new) (found))
-    (setq found
-         (string-match
-          (if (eq query 'ask)
-              message-subject-trailing-was-ask-regexp
-            message-subject-trailing-was-regexp)
-          subject))
-    (if found
-       (setq new (substring subject 0 (match-beginning 0))))
-    (if (or (not found) (eq query nil))
-       subject
-      (if (eq query 'ask)
-         (if (message-y-or-n-p
-              "Strip `(was: <old subject>)' in subject? " t
-              (concat
-               "Strip `(was: <old subject>)' in subject "
-               "and use the new one instead?\n\n"
-               "Current subject is:   \""
-               subject "\"\n\n"
-               "New subject would be: \""
-               new "\"\n\n"
-               "See the variable `message-subject-trailing-was-query' "
-               "to get rid of this query."
-               ))
-             new subject)
-       new))))
+  (or
+   (let ((query message-subject-trailing-was-query) new)
+     (and query
+          (string-match (if (eq query 'ask)
+                            message-subject-trailing-was-ask-regexp
+                          message-subject-trailing-was-regexp)
+                        subject)
+          (setq new (substring subject 0 (match-beginning 0)))
+          (or (not (eq query 'ask))
+              (message-y-or-n-p
+               "Strip `(was: <old subject>)' in subject? " t
+               (concat
+                "Strip `(was: <old subject>)' in subject "
+                "and use the new one instead?\n\n"
+                "Current subject is:   \"" subject "\"\n\n"
+                "New subject would be: \"" new "\"\n\n"
+                "See the variable `message-subject-trailing-was-query' "
+                "to get rid of this query.")))
+          new))
+   subject))
 
 ;;; Suggested by Jonas Steverud  @  www.dtek.chalmers.se/~d4jonas/
 
@@ -2702,19 +2598,16 @@ Prefixed with one \\[universal-argument], display the Emacs MIME
 manual.  With two \\[universal-argument]'s, display the EasyPG or
 PGG manual, depending on the value of `mml2015-use'."
   (interactive "p")
-  ;; Don't use `info' because support for `(filename)nodename' is not
-  ;; available in XEmacs < 21.5.12.
-  (Info-goto-node (format "(%s)Top"
-                         (cond ((eq arg 16)
-                                (require 'mml2015)
-                                mml2015-use)
-                               ((eq arg  4) 'emacs-mime)
-                               ;; `booleanp' only available in Emacs 22+
-                               ((and (not (memq arg '(nil t)))
-                                     (symbolp arg))
-                                arg)
-                               (t
-                                'message)))))
+  (info (format "(%s)Top"
+               (cond ((eq arg 16)
+                      (require 'mml2015)
+                      mml2015-use)
+                     ((eq arg  4) 'emacs-mime)
+                     ((and (not (booleanp arg))
+                           (symbolp arg))
+                      arg)
+                     (t
+                      'message)))))
 
 \f
 
@@ -2812,43 +2705,29 @@ PGG manual, depending on the value of `mml2015-use'."
     ["Caesar (rot13) Region" message-caesar-region (message-mark-active-p)]
     ["Elide Region" message-elide-region
      :active (message-mark-active-p)
-     ,@(if (featurep 'xemacs) nil
-        '(:help "Replace text in region with an ellipsis"))]
+     :help "Replace text in region with an ellipsis"]
     ["Delete Outside Region" message-delete-not-region
      :active (message-mark-active-p)
-     ,@(if (featurep 'xemacs) nil
-        '(:help "Delete all quoted text outside region"))]
+     :help "Delete all quoted text outside region"]
     ["Kill To Signature" message-kill-to-signature t]
     ["Newline and Reformat" message-newline-and-reformat t]
     ["Rename buffer" message-rename-buffer t]
-    ["Spellcheck" ispell-message
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Spellcheck this message"))]
+    ["Spellcheck" ispell-message :help "Spellcheck this message"]
     "----"
     ["Insert Region Marked" message-mark-inserted-region
-     :active (message-mark-active-p)
-     ,@(if (featurep 'xemacs) nil
-        '(:help "Mark region with enclosing tags"))]
+     :active (message-mark-active-p) :help "Mark region with enclosing tags"]
     ["Insert File Marked..." message-mark-insert-file
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Insert file at point marked with enclosing tags"))]
+     :help "Insert file at point marked with enclosing tags"]
     "----"
-    ["Send Message" message-send-and-exit
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Send this message"))]
+    ["Send Message" message-send-and-exit :help "Send this message"]
     ["Postpone Message" message-dont-send
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "File this draft message and exit"))]
+     :help "File this draft message and exit"]
     ["Send at Specific Time..." gnus-delay-article
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Ask, then arrange to send message at that time"))]
+     :help "Ask, then arrange to send message at that time"]
     ["Kill Message" message-kill-buffer
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Delete this message without sending"))]
+     :help "Delete this message without sending"]
     "----"
-    ["Message manual" message-info
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Display the Message manual"))]))
+    ["Message manual" message-info :help "Display the Message manual"]))
 
 (easy-menu-define
   message-mode-field-menu message-mode-map ""
@@ -2862,15 +2741,12 @@ PGG manual, depending on the value of `mml2015-use'."
     ["Fcc" message-goto-fcc t]
     ["Reply-To" message-goto-reply-to t]
     ["Flag As Important" message-insert-importance-high
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Mark this message as important"))]
+     :help "Mark this message as important"]
     ["Flag As Unimportant" message-insert-importance-low
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Mark this message as unimportant"))]
+     :help "Mark this message as unimportant"]
     ["Request Receipt"
      message-insert-disposition-notification-to
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Request a receipt notification"))]
+     :help "Request a receipt notification"]
     "----"
     ;; (typical) news stuff
     ["Summary" message-goto-summary t]
@@ -2886,18 +2762,14 @@ PGG manual, depending on the value of `mml2015-use'."
     "----"
     ;; (typical) mailing-lists stuff
     ["Fetch To" message-insert-to
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Insert a To header that points to the author."))]
+     :help "Insert a To header that points to the author."]
     ["Fetch To and Cc" message-insert-wide-reply
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help
-          "Insert To and Cc headers as if you were doing a wide reply."))]
+     :help "Insert To and Cc headers as if you were doing a wide reply."]
     "----"
     ["Send to list only" message-to-list-only t]
     ["Mail-Followup-To" message-goto-mail-followup-to t]
     ["Unsubscribed list post" message-generate-unsubscribed-mail-followup-to
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Insert a reasonable `Mail-Followup-To:' header."))]
+     :help "Insert a reasonable `Mail-Followup-To:' header."]
     ["Reduce To: to Cc:" message-reduce-to-to-cc t]
     "----"
     ["Sort Headers" message-sort-headers t]
@@ -2943,7 +2815,6 @@ message composition doesn't break too bad."
   ;; category, face, display: probably doesn't do any harm.
   ;; fontified: is used by font-lock.
   ;; syntax-table, local-map: I dunno.
-  ;; We need to add XEmacs names to the list.
   "Property list of with properties forbidden in message buffers.
 The values of the properties are ignored, only the property names are used.")
 
@@ -2979,8 +2850,6 @@ See also `message-forbidden-properties'."
          (inhibit-read-only t))
       (remove-text-properties begin end message-forbidden-properties))))
 
-(autoload 'ecomplete-setup "ecomplete") ;; for Emacs <23.
-
 (defvar message-smileys '(":-)" ":)"
                           ":-(" ":("
                           ";-)" ";)")
@@ -3078,25 +2947,19 @@ M-RET    `message-newline-and-reformat' (break the line and reformat)."
     (set (make-local-variable 'comment-start) message-yank-prefix)
     (set (make-local-variable 'comment-start-skip)
         (concat "^" (regexp-quote message-yank-prefix) "[ \t]*")))
-  (if (featurep 'xemacs)
-      (message-setup-toolbar)
-    (set (make-local-variable 'font-lock-defaults)
-        '(message-font-lock-keywords t))
-    (if (boundp 'tool-bar-map)
-       (set (make-local-variable 'tool-bar-map) (message-make-tool-bar))))
+  (set (make-local-variable 'font-lock-defaults)
+       '(message-font-lock-keywords t))
+  (if (boundp 'tool-bar-map)
+      (set (make-local-variable 'tool-bar-map) (message-make-tool-bar)))
   (easy-menu-add message-mode-menu message-mode-map)
   (easy-menu-add message-mode-field-menu message-mode-map)
-  (gnus-make-local-hook 'after-change-functions)
   ;; Mmmm... Forbidden properties...
   (add-hook 'after-change-functions 'message-strip-forbidden-properties
            nil 'local)
   ;; Allow mail alias things.
   (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))))
+    (mail-abbrevs-setup))
    ((message-mail-alias-type-p 'ecomplete)
     (ecomplete-setup)))
   (add-hook 'completion-at-point-functions 'message-completion-function nil t)
@@ -3122,8 +2985,6 @@ M-RET    `message-newline-and-reformat' (break the line and reformat)."
   (make-local-variable 'paragraph-separate)
   (make-local-variable 'paragraph-start)
   (make-local-variable 'adaptive-fill-regexp)
-  (unless (boundp 'adaptive-fill-first-line-regexp)
-    (setq adaptive-fill-first-line-regexp nil))
   (make-local-variable 'adaptive-fill-first-line-regexp)
   (let ((quote-prefix-regexp
         ;; User should change message-cite-prefix-regexp if
@@ -3146,20 +3007,8 @@ M-RET    `message-newline-and-reformat' (break the line and reformat)."
     (setq adaptive-fill-first-line-regexp
          (concat quote-prefix-regexp "\\|"
                  adaptive-fill-first-line-regexp)))
-  (make-local-variable 'auto-fill-inhibit-regexp)
-  ;;(setq auto-fill-inhibit-regexp "^[A-Z][^: \n\t]+:")
-  (setq auto-fill-inhibit-regexp nil)
-  (make-local-variable 'normal-auto-fill-function)
-  (setq normal-auto-fill-function 'message-do-auto-fill)
-  ;; KLUDGE: auto fill might already be turned on in `text-mode-hook'.
-  ;; In that case, ensure that it uses the right function.  The real
-  ;; 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)))
+  (setq-local auto-fill-inhibit-regexp nil)
+  (setq-local normal-auto-fill-function 'message-do-auto-fill))
 
 \f
 
@@ -3250,7 +3099,7 @@ M-RET    `message-newline-and-reformat' (break the line and reformat)."
 (defun message-goto-body ()
   "Move point to the beginning of the message body."
   (interactive)
-  (when (and (gmm-called-interactively-p 'any)
+  (when (and (called-interactively-p 'any)
             (looking-at "[ \t]*\n"))
     (expand-abbrev))
   (push-mark)
@@ -3565,22 +3414,20 @@ Prefix arg means justify as well."
 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
-    (if (message-point-in-header-p)
-       (message-fill-field)
-      (message-newline-and-reformat arg t))
-    t))
+  (if (message-point-in-header-p)
+      (message-fill-field)
+    (message-newline-and-reformat arg t))
+  t)
 
 (defun message-point-in-header-p ()
   "Return t if point is in the header."
   (save-excursion
-    (and
-     (not
-      (re-search-backward
-       (concat "^" (regexp-quote mail-header-separator) "\n") nil t))
-     (re-search-forward
-      (concat "^" (regexp-quote mail-header-separator) "\n") nil t))))
+    (save-restriction
+      (widen)
+      (let ((bound (+ (point-at-eol) 1)) case-fold-search)
+        (goto-char (point-min))
+        (not (search-forward (concat "\n" mail-header-separator "\n")
+                             bound t))))))
 
 (defun message-do-auto-fill ()
   "Like `do-auto-fill', but don't fill in message header."
@@ -3854,15 +3701,11 @@ 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)
+  (let ((citexp (concat "^\\("
+                       (concat message-yank-cited-prefix "\\|")
+                       message-yank-prefix
+                       "\\)+ *\n")))
+    (message "Removing `%s'" citexp)
     (save-excursion
       (message-goto-body)
       (while (re-search-forward citexp nil t)
@@ -4020,8 +3863,13 @@ This function uses `mail-citation-hook' if that is non-nil."
 (defun message-insert-formatted-citation-line (&optional from date tz)
   "Function that inserts a formatted citation line.
 The optional FROM, and DATE are strings containing the contents of
-the From header and the Date header respectively.  The optional TZ
-is a number of seconds, overrides the time zone of DATE.
+the From header and the Date header respectively.
+
+The optional TZ is omitted or nil for Emacs local time, t for
+Universal Time, `wall' for system wall clock time, or a string as
+in the TZ environment variable.  It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time')
+applied without consideration for daylight saving time.
 
 See `message-citation-line-format'."
   ;; The optional args are for testing/debugging.  They will disappear later.
@@ -4112,7 +3960,7 @@ See `message-citation-line-format'."
                               (>= i ?a)))
                  (push i lst)
                  (push (condition-case nil
-                           (gmm-format-time-string (format "%%%c" i) time tz)
+                           (format-time-string (format "%%%c" i) time tz)
                          (error (format ">%c<" i)))
                        lst))
                (setq i (1+ i)))
@@ -4283,7 +4131,7 @@ It should typically alter the sending method in some way or other."
                    (or (eq message-allow-no-recipients 'always)
                        (and (not (eq message-allow-no-recipients 'never))
                             (setq dont-barf-on-no-method
-                                  (gnus-y-or-n-p
+                                  (y-or-n-p
                                    (format "No receiver, perform %s anyway? "
                                            (cond ((and fcc gcc) "Fcc and Gcc")
                                                  (fcc "Fcc")
@@ -4371,8 +4219,7 @@ conformance."
                (const "invalid")
                (const :tag "duplicate @" "@@")
                (const :tag "non-ascii local part" "[^[:ascii:]].*@")
-               ;; Already caught by `message-valid-fqdn-regexp'
-               ;; (const :tag "`_' in domain part" "@.*_")
+               (const :tag "`_' in domain part" "@.*_")
                (const :tag "whitespace" "[ \t]"))
           (repeat :inline t
                   :tag "Other"
@@ -4418,7 +4265,7 @@ conformance."
                                 (point) 'no-illegible-text)
                                (point-max))))
               (setq char (char-after)))
-       (when (or (< (mm-char-int char) 128)
+       (when (or (< char 128)
                  (and (mm-multibyte-p)
                       (memq (char-charset char)
                             '(eight-bit-control eight-bit-graphic
@@ -4432,23 +4279,25 @@ conformance."
        (forward-char))
       (when found
        (setq choice
-             (gnus-multiple-choice
-              (if nul-chars
-                  "NUL characters found, which may cause problems.  Continue sending?"
-                "Non-printable characters found.  Continue sending?")
-              `((?d "Remove non-printable characters and send")
-                (?r ,(format
-                      "Replace non-printable characters with \"%s\" and send"
-                      message-replacement-char))
-                (?s "Send as is without removing anything")
-                (?e "Continue editing"))))
+             (car
+              (read-multiple-choice
+               (if nul-chars
+                   "NUL characters found, which may cause problems.  Continue sending?"
+                 "Non-printable characters found.  Continue sending?")
+               `((?d "delete" "Remove non-printable characters and send")
+                 (?r "replace"
+                     ,(format
+                       "Replace non-printable characters with \"%s\" and send"
+                       message-replacement-char))
+                 (?s "send" "Send as is without removing anything")
+                 (?e "edit" "Continue editing")))))
        (if (eq choice ?e)
          (error "Non-printable characters"))
        (message-goto-body)
        (skip-chars-forward mm-7bit-chars)
        (while (not (eobp))
          (when (let ((char (char-after)))
-                 (or (< (mm-char-int char) 128)
+                 (or (< char 128)
                      (and (mm-multibyte-p)
                           ;; FIXME: Wrong for Emacs 23 (unicode) and for
                           ;; things like undecodable utf-8 (in Emacs 21?).
@@ -4478,31 +4327,24 @@ conformance."
 RECIPIENTS is a mail header.  Return a list of potentially bogus
 addresses.  If none is found, return nil.
 
-An address might be bogus if the domain part is not fully
-qualified, see `message-valid-fqdn-regexp', or if there's a
-matching entry in `message-bogus-addresses'."
+An address might be bogus if if there's a matching entry in
+`message-bogus-addresses'."
   ;; FIXME: How about "foo@subdomain", when the MTA adds ".domain.tld"?
   (let (found)
     (mapc (lambda (address)
            (setq address (or (cadr address) ""))
-           (when
-               (or (string= "" address)
-                    (not
-                    (or
+           (when (or (string= "" address)
                      (not (string-match "@" address))
-                     (string-match
-                      (concat ".@.*\\("
-                              message-valid-fqdn-regexp "\\)\\'") address)))
-                   (and message-bogus-addresses
-                        (let ((re
-                               (if (listp message-bogus-addresses)
-                                   (mapconcat 'identity
-                                              message-bogus-addresses
-                                              "\\|")
-                                 message-bogus-addresses)))
-                          (string-match re address))))
+                     (string-match "@.*@" address)
+                     (and message-bogus-addresses
+                          (let ((re
+                                 (if (listp message-bogus-addresses)
+                                     (mapconcat 'identity
+                                                message-bogus-addresses
+                                                "\\|")
+                                   message-bogus-addresses)))
+                            (string-match re address))))
               (push address found)))
-         ;;
          (mail-extract-address-components recipients t))
     found))
 
@@ -4519,7 +4361,7 @@ This function could be useful in `message-setup-hook'."
          (dolist (bog (message-bogus-recipient-p addr))
            (and bog
                 (not (y-or-n-p
-                      (gnus-format-message
+                      (format-message
                        "Address `%s'%s might be bogus.  Continue? "
                        bog
                        ;; If the encoded version of the email address
@@ -5452,7 +5294,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-to-multibyte "[\000-\007\013\015-\032\034-\037\200-\237]")
+         (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? ")
@@ -5818,10 +5660,7 @@ In posting styles use `(\"Expires\" (make-expires-date 30))'."
   "Make a From header."
   (let* ((style message-from-style)
         (login (or address (message-make-address)))
-        (fullname (or name
-                      (and (boundp 'user-full-name)
-                           user-full-name)
-                      (user-full-name))))
+        (fullname (or name user-full-name (user-full-name))))
     (when (string= fullname "&")
       (setq fullname (user-login-name)))
     (with-temp-buffer
@@ -5914,24 +5753,19 @@ give as trustworthy answer as possible."
     (cond
      ((and message-user-fqdn
           (stringp message-user-fqdn)
-          (string-match message-valid-fqdn-regexp message-user-fqdn)
           (not (string-match message-bogus-system-names message-user-fqdn)))
       ;; `message-user-fqdn' seems to be valid
       message-user-fqdn)
-     ((and (string-match message-valid-fqdn-regexp sysname)
-          (not (string-match message-bogus-system-names sysname)))
+     ((and (string-match message-bogus-system-names sysname))
       ;; `system-name' returned the right result.
       sysname)
      ;; Try `mail-host-address'.
-     ((and (boundp 'mail-host-address)
-          (stringp mail-host-address)
-          (string-match message-valid-fqdn-regexp mail-host-address)
+     ((and (stringp mail-host-address)
           (not (string-match message-bogus-system-names mail-host-address)))
       mail-host-address)
      ;; We try `user-mail-address' as a backup.
      ((and user-domain
           (stringp user-domain)
-          (string-match message-valid-fqdn-regexp user-domain)
           (not (string-match message-bogus-system-names user-domain)))
       user-domain)
      ;; Default to this bogus thing.
@@ -6005,7 +5839,7 @@ subscribed address (and not the additional To and Cc header contents)."
         ace)
     (when field
       (dolist (rhs
-              (mm-delete-duplicates
+              (delete-dups
                (mapcar (lambda (rhs) (or (cadr (split-string rhs "@")) ""))
                        (mapcar 'downcase
                                (mapcar
@@ -6017,7 +5851,7 @@ subscribed address (and not the additional To and Cc header contents)."
        ;; the domain part, i.e., if it is a local user's address.
        (setq ace (if (string-match "\\`[[:ascii:]]*\\'" rhs)
                      rhs
-                   (downcase (idna-to-ascii rhs))))
+                   (downcase (puny-encode-domain rhs))))
        (when (and (not (equal rhs ace))
                   (or (not (eq message-use-idna 'ask))
                       (y-or-n-p (format "Replace %s with %s in %s:? "
@@ -6051,41 +5885,27 @@ See `message-idna-encode'."
        (message-idna-to-ascii-rhs-1 "Mail-Followup-To")
        (message-idna-to-ascii-rhs-1 "Cc")))))
 
-(defvar Date)
-(defvar Message-ID)
-(defvar Organization)
-(defvar From)
-(defvar Path)
-(defvar Subject)
-(defvar Newsgroups)
-(defvar In-Reply-To)
-(defvar References)
-(defvar To)
-(defvar Distribution)
-(defvar Lines)
-(defvar User-Agent)
-(defvar Expires)
-
 (defun message-generate-headers (headers)
   "Prepare article HEADERS.
 Headers already prepared in the buffer are not modified."
   (setq headers (append headers message-required-headers))
   (save-restriction
     (message-narrow-to-headers)
-    (let* ((Date (message-make-date))
-          (Message-ID (message-make-message-id))
-          (Organization (message-make-organization))
-          (From (message-make-from))
-          (Path (message-make-path))
-          (Subject nil)
-          (Newsgroups nil)
-          (In-Reply-To (message-make-in-reply-to))
-          (References (message-make-references))
-          (To nil)
-          (Distribution (message-make-distribution))
-          (Lines (message-make-lines))
-          (User-Agent message-newsreader)
-          (Expires (message-make-expires))
+    (let* ((header-values
+           (list 'Date (message-make-date)
+                 'Message-ID (message-make-message-id)
+                 'Organization (message-make-organization)
+                 'From (message-make-from)
+                 'Path (message-make-path)
+                 'Subject nil
+                 'Newsgroups nil
+                 'In-Reply-To (message-make-in-reply-to)
+                 'References (message-make-references)
+                 'To nil
+                 'Distribution (message-make-distribution)
+                 'Lines (message-make-lines)
+                 'User-Agent message-newsreader
+                 'Expires (message-make-expires)))
           (case-fold-search t)
           (optionalp nil)
           header value elem header-string)
@@ -6139,8 +5959,8 @@ Headers already prepared in the buffer are not modified."
                  (setq header (cdr elem))
                  (or (and (functionp (cdr elem))
                           (funcall (cdr elem)))
-                     (and (boundp (cdr elem))
-                          (symbol-value (cdr elem)))))
+                     (and (symbolp (cdr elem))
+                          (plist-get header-values (cdr elem)))))
                 ((consp elem)
                  ;; The element is a cons.  Either the cdr is a
                  ;; string to be inserted verbatim, or it is a
@@ -6150,11 +5970,11 @@ Headers already prepared in the buffer are not modified."
                           (cdr elem))
                      (and (functionp (cdr elem))
                           (funcall (cdr elem)))))
-                ((and (boundp header)
-                      (symbol-value header))
-                 ;; The element is a symbol.  We insert the value
-                 ;; of this symbol, if any.
-                 (symbol-value header))
+                ((and (symbolp header)
+                      (plist-member header-values header))
+                 ;; The element is a symbol.  We insert the value of
+                 ;; this symbol, if any.
+                 (plist-get header-values header))
                 ((not (message-check-element
                        (intern (downcase (symbol-name header)))))
                  ;; We couldn't generate a value for this header,
@@ -6266,10 +6086,7 @@ Headers already prepared in the buffer are not modified."
   "Split current line, moving portion beyond point vertically down.
 If the current line has `message-yank-prefix', insert it on the new line."
   (interactive "*")
-  (condition-case nil
-      (split-line message-yank-prefix) ;; Emacs 22.1+ supports arg.
-    (error
-     (split-line))))
+  (split-line message-yank-prefix))
 
 (defun message-insert-header (header value)
   (insert (capitalize (symbol-name header))
@@ -6412,35 +6229,73 @@ they are."
 (defvar visual-line-mode)
 (declare-function beginning-of-visual-line "simple" (&optional n))
 
+(defun message-beginning-of-header (handle-folded)
+  "Move point to beginning of header’s value.
+
+When point is at the first header line, moves it after the colon
+and spaces separating header name and header value.
+
+When point is in a continuation line of a folded header (i.e. the
+line starts with a space), the behaviour depends on HANDLE-FOLDED
+argument.  If it’s nil, function moves the point to the start of
+the header continuation; otherwise, function locates the
+beginning of the header and moves point past the colon as is the
+case of single-line headers.
+
+No check whether point is inside of a header or body of the
+message is performed.
+
+Returns point or nil if beginning of header’s value could not be
+found.  In the latter case, the point is still moved to the
+beginning of line (possibly after attempting to move it to the
+beginning of a folded header)."
+  ;; https://www.rfc-editor.org/rfc/rfc2822.txt, section 2.2.3. says that when
+  ;; unfolding a single WSP should be consumed.  WSP is defined as a space
+  ;; character or a horizontal tab.
+  (beginning-of-line)
+  (when handle-folded
+    (while (and (> (point) (point-min))
+                (or (eq (char-after) ?\s) (eq (char-after) ?\t)))
+      (beginning-of-line 0)))
+  (when (or (eq (char-after) ?\s) (eq (char-after) ?\t)
+            (search-forward ":" (point-at-eol) t))
+    ;; We are a bit more lacks than the RFC and allow any positive number of WSP
+    ;; characters.
+    (skip-chars-forward " \t" (point-at-eol))
+    (point)))
+
 (defun message-beginning-of-line (&optional n)
   "Move point to beginning of header value or to beginning of line.
 The prefix argument N is passed directly to `beginning-of-line'.
 
 This command is identical to `beginning-of-line' if point is
-outside the message header or if the option `message-beginning-of-line'
-is nil.
-
-If point is in the message header and on a (non-continued) header
-line, move point to the beginning of the header value or the beginning of line,
-whichever is closer.  If point is already at beginning of line, move point to
-beginning of header value.  Therefore, repeated calls will toggle point
-between beginning of field and beginning of line."
+outside the message header or if the option
+`message-beginning-of-line' is nil.
+
+If point is in the message header and on a header line, move
+point to the beginning of the header value or the beginning of
+line, whichever is closer.  If point is already at beginning of
+line, move point to beginning of header value.  Therefore,
+repeated calls will toggle point between beginning of field and
+beginning of line.
+
+When called without a prefix argument, header value spanning
+multiple lines is treated as a single line.  Otherwise, even if
+N is 1, when point is on a continuation header line, it will be
+moved to the beginning "
   (interactive "p")
-  (let ((zrs 'zmacs-region-stays))
-    (when (and (featurep 'xemacs) (interactive-p) (boundp zrs))
-      (set zrs t)))
-  (if (and message-beginning-of-line
-          (message-point-in-header-p))
-      (let* ((here (point))
-            (bol (progn (beginning-of-line n) (point)))
-            (eol (point-at-eol))
-            (eoh (re-search-forward ": *" eol t)))
-       (goto-char
-        (if (and eoh (or (< eoh here) (= bol here)))
-            eoh bol)))
-    (if (and (boundp 'visual-line-mode) visual-line-mode)
-       (beginning-of-visual-line n)
-      (beginning-of-line n))))
+  (cond
+   ;; Go to beginning of header or beginning of line.
+   ((and message-beginning-of-line (message-point-in-header-p))
+    (let* ((point (point))
+           (bol (progn (beginning-of-line n) (point)))
+           (boh (message-beginning-of-header visual-line-mode)))
+      (goto-char (if (and boh (or (< boh point) (= bol point))) boh bol))))
+   ;; Go to beginning of visual line
+   (visual-line-mode
+    (beginning-of-visual-line n))
+   ;; Go to beginning of line.
+   ((beginning-of-line n))))
 
 (defun message-buffer-name (type &optional to group)
   "Return a new (unique) buffer name based on TYPE and TO."
@@ -6507,7 +6362,7 @@ between beginning of field and beginning of line."
          (if window
              ;; Raise the frame already displaying the message buffer.
              (progn
-               (gnus-select-frame-set-input-focus (window-frame window))
+               (select-frame-set-input-focus (window-frame window))
                (select-window window))
            (funcall (or switch-function #'pop-to-buffer) buffer)
            (set-buffer buffer))
@@ -6517,10 +6372,7 @@ between beginning of field and beginning of line."
                               "Message already being composed; erase? ")
                            (message nil))))
            (error "Message being composed")))
-      (funcall (or switch-function
-                  (if (fboundp #'pop-to-buffer-same-window)
-                      #'pop-to-buffer-same-window
-                    #'pop-to-buffer))
+      (funcall (or switch-function 'pop-to-buffer-same-window)
               name)
       (set-buffer name))
     (erase-buffer)
@@ -6938,9 +6790,20 @@ want to get rid of this query permanently.")))
       ;; Squeeze whitespace.
       (while (string-match "[ \t][ \t]+" recipients)
        (setq recipients (replace-match " " t t recipients)))
-      ;; Remove addresses that match `mail-dont-reply-to-names'.
-      (let ((mail-dont-reply-to-names (message-dont-reply-to-names)))
-       (setq recipients (mail-dont-reply-to recipients)))
+      ;; Remove addresses that match `message-dont-reply-to-names'.
+      (setq recipients
+            (cond ((functionp message-dont-reply-to-names)
+                   (mapconcat
+                    'identity
+                    (delq nil
+                          (mapcar (lambda (mail)
+                                    (unless (funcall message-dont-reply-to-names
+                                                     (mail-strip-quoted-names mail))
+                                      mail))
+                                  (message-tokenize-header recipients)))
+                    ", "))
+                  (t (let ((mail-dont-reply-to-names (message-dont-reply-to-names)))
+                       (mail-dont-reply-to recipients)))))
       ;; Perhaps "Mail-Copies-To: never" removed the only address?
       (if (string-equal recipients "")
          (setq recipients author))
@@ -7222,7 +7085,7 @@ want to get rid of this query permanently."))
 If you have added `cancel-messages' to `message-shoot-gnksa-feet', all articles
 are yours except those that have Cancel-Lock header not belonging to you.
 Instead of shooting GNKSA feet, you should modify `message-alternative-emails'
-regexp to match all of yours addresses."
+to match all of yours addresses."
   ;; Canlock-logic as suggested by Per Abrahamsen
   ;; <abraham@dina.kvl.dk>
   ;;
@@ -7254,12 +7117,14 @@ regexp to match all of yours addresses."
                 (downcase (car (mail-header-parse-address
                                 (message-make-from))))))
           ;; Email address in From field matches
-          ;; 'message-alternative-emails' regexp
+          ;; 'message-alternative-emails' regexp or function.
           (and from
                message-alternative-emails
-               (string-match
-                message-alternative-emails
-                (car (mail-header-parse-address from))))))))))
+                (cond ((functionp message-alternative-emails)
+                       (funcall message-alternative-emails
+                                (mail-header-parse-address from)))
+                      (t (string-match message-alternative-emails
+                                       (car (mail-header-parse-address from))))))))))))
 
 ;;;###autoload
 (defun message-cancel-news (&optional arg)
@@ -7339,7 +7204,7 @@ header line with the old Message-ID."
     (cond ((save-window-excursion
             (with-output-to-temp-buffer "*Directory*"
               (with-current-buffer standard-output
-                (fundamental-mode))    ; for Emacs 20.4+
+                (fundamental-mode))
               (buffer-disable-undo standard-output)
               (let ((default-directory "/"))
                 (call-process
@@ -7485,14 +7350,13 @@ Optional DIGEST will use digest to forward."
   (let ((b (point))
        (contents (with-current-buffer forward-buffer (buffer-string)))
        e)
-    (unless (featurep 'xemacs)
-      (unless (mm-multibyte-string-p contents)
-       (error "Attempt to insert unibyte string from the buffer \"%s\"\
+    (unless (multibyte-string-p contents)
+      (error "Attempt to insert unibyte string from the buffer \"%s\"\
  to the multibyte buffer \"%s\""
-              (if (bufferp forward-buffer)
-                  (buffer-name forward-buffer)
-                forward-buffer)
-              (buffer-name))))
+            (if (bufferp forward-buffer)
+                (buffer-name forward-buffer)
+              forward-buffer)
+            (buffer-name)))
     (insert (mm-with-multibyte-buffer
              (insert contents)
              (mime-to-mml)
@@ -7549,14 +7413,13 @@ Optional DIGEST will use digest to forward."
   (let ((b (point)) e)
     (if (not message-forward-decoded-p)
        (let ((contents (with-current-buffer forward-buffer (buffer-string))))
-         (unless (featurep 'xemacs)
-           (unless (mm-multibyte-string-p contents)
-             (error "Attempt to insert unibyte string from the buffer \"%s\"\
+         (unless (multibyte-string-p contents)
+           (error "Attempt to insert unibyte string from the buffer \"%s\"\
  to the multibyte buffer \"%s\""
-                    (if (bufferp forward-buffer)
-                        (buffer-name forward-buffer)
-                      forward-buffer)
-                    (buffer-name))))
+                  (if (bufferp forward-buffer)
+                      (buffer-name forward-buffer)
+                    forward-buffer)
+                  (buffer-name)))
          (insert (mm-with-multibyte-buffer
                    (insert contents)
                    (mime-to-mml)
@@ -7688,10 +7551,8 @@ is for the internal use."
 (defun message-forward-rmail-make-body (forward-buffer)
   (save-window-excursion
     (set-buffer forward-buffer)
-    (if (rmail-msg-is-pruned)
-       (if (fboundp 'rmail-msg-restore-non-pruned-header)
-           (rmail-msg-restore-non-pruned-header) ; Emacs 22
-         (rmail-toggle-header 0))))              ; Emacs 23
+    (when (rmail-msg-is-pruned)
+      (rmail-toggle-header 0)))
   (message-forward-make-body forward-buffer))
 
 ;; Fixme: Should have defcustom.
@@ -7765,6 +7626,9 @@ is for the internal use."
             (let ((case-fold-search t))
               (re-search-forward "^mime-version:" nil t)))
            (message-inhibit-ecomplete t)
+           ;; We don't want smtpmail.el to encode anything, either.
+           (sendmail-coding-system 'raw-text)
+           (select-safe-coding-system-function nil)
            message-required-mail-headers
            message-generate-hashcash
            rfc2047-encode-encoded-words)
@@ -7941,12 +7805,10 @@ Pre-defined symbols include `message-tool-bar-gnome' and
 (defcustom message-tool-bar-gnome
   '((ispell-message "spell" nil
                    :vert-only t
-                   :visible (or (not (boundp 'flyspell-mode))
-                                (not flyspell-mode)))
+                   :visible (not flyspell-mode))
     (flyspell-buffer "spell" t
                     :vert-only t
-                    :visible (and (boundp 'flyspell-mode)
-                                  flyspell-mode)
+                    :visible flyspell-mode
                     :help "Flyspell whole buffer")
     (message-send-and-exit "mail/send" t :label "Send")
     (message-dont-send "mail/save-draft")
@@ -8003,18 +7865,14 @@ See `gmm-tool-bar-from-list' for the format of the list."
 (defun message-make-tool-bar (&optional force)
   "Make a message mode tool bar from `message-tool-bar-list'.
 When FORCE, rebuild the tool bar."
-  (when (and (not (featurep 'xemacs))
-            (boundp 'tool-bar-mode)
+  (when (and (boundp 'tool-bar-mode)
             tool-bar-mode
             (or (not message-tool-bar-map) force))
     (setq message-tool-bar-map
          (let* ((load-path
-                 (gmm-image-load-path-for-library "message"
-                                                  "mail/save-draft.xpm"
-                                                  nil t))
-                (image-load-path (cons (car load-path)
-                                       (when (boundp 'image-load-path)
-                                         image-load-path))))
+                 (image-load-path-for-library
+                  "message" "mail/save-draft.xpm" nil t))
+                (image-load-path (cons (car load-path) image-load-path)))
            (gmm-tool-bar-from-list message-tool-bar
                                    message-tool-bar-zap-list
                                    'message-mode-map))))
@@ -8065,10 +7923,8 @@ not in those headers.  If that variable is nil, indent with the
 regular text mode tabbing command."
   (interactive)
   (cond
-   ((if (and (boundp 'completion-fail-discreetly)
-             (fboundp 'completion-at-point))
-        (let ((completion-fail-discreetly t)) (completion-at-point))
-      (funcall (or (message-completion-function) #'ignore)))
+   ((let ((completion-fail-discreetly t))
+      (completion-at-point))
     ;; Completion was performed; nothing else to do.
     nil)
    (message-tab-body-function (funcall message-tab-body-function))
@@ -8114,41 +7970,7 @@ regular text mode tabbing command."
                 group)
               collection))
        gnus-active-hashtb))
-    (message-completion-in-region b e collection)))
-
-(defalias 'message-completion-in-region
-  (if (fboundp 'completion-in-region)
-      'completion-in-region
-    (lambda (b e hashtb)
-      (let* ((string (buffer-substring b e))
-             (completions (all-completions string hashtb))
-             comp)
-        (delete-region b (point))
-        (cond
-         ((= (length completions) 1)
-          (if (string= (car completions) string)
-              (progn
-                (insert string)
-                (message "Only matching group"))
-            (insert (car completions))))
-         ((and (setq comp (try-completion string hashtb))
-               (not (string= comp string)))
-          (insert comp))
-         (t
-          (insert string)
-          (if (not comp)
-              (message "No matching groups")
-            (save-selected-window
-              (pop-to-buffer "*Completions*")
-              (buffer-disable-undo)
-              (let ((buffer-read-only nil))
-                (erase-buffer)
-                (let ((standard-output (current-buffer)))
-                  (display-completion-list (sort completions 'string<)))
-                (setq buffer-read-only nil)
-                (goto-char (point-min))
-                (delete-region (point)
-                               (progn (forward-line 3) (point))))))))))))
+    (completion-in-region b e collection)))
 
 (defun message-expand-name ()
   (cond ((and (memq 'eudc message-expand-name-databases)
@@ -8177,7 +7999,7 @@ The following arguments may contain lists of values."
       (save-window-excursion
         (with-output-to-temp-buffer " *MESSAGE information message*"
           (with-current-buffer " *MESSAGE information message*"
-           (fundamental-mode)          ; for Emacs 20.4+
+           (fundamental-mode)
            (mapc 'princ text)
            (goto-char (point-min))))
        (funcall ask question))
@@ -8270,13 +8092,9 @@ regexp VARSTR."
 
 (defun message-read-from-minibuffer (prompt &optional initial-contents)
   "Read from the minibuffer while providing abbrev expansion."
-  (if (fboundp 'mail-abbrevs-setup)
-      (let ((minibuffer-setup-hook 'mail-abbrevs-setup)
-           (minibuffer-local-map message-minibuffer-local-map))
-       (read-from-minibuffer prompt initial-contents))
-    (let ((minibuffer-setup-hook 'mail-abbrev-minibuffer-setup-hook)
-         (minibuffer-local-map message-minibuffer-local-map))
-      (read-string prompt initial-contents))))
+  (let ((minibuffer-setup-hook 'mail-abbrevs-setup)
+       (minibuffer-local-map message-minibuffer-local-map))
+    (read-from-minibuffer prompt initial-contents)))
 
 (defun message-use-alternative-email-as-from ()
   "Set From field of the outgoing message to the first matching
@@ -8285,16 +8103,14 @@ From headers in the original article."
   (require 'mail-utils)
   (let* ((fields '("To" "Cc" "From"))
         (emails
-         (split-string
+         (message-tokenize-header
           (mail-strip-quoted-names
-           (mapconcat 'message-fetch-reply-field fields ","))
-          "[ \f\t\n\r\v,]+"))
-        email)
-    (while emails
-      (if (string-match message-alternative-emails (car emails))
-         (setq email (car emails)
-               emails nil))
-      (pop emails))
+           (mapconcat 'message-fetch-reply-field fields ","))))
+        (email (cond ((functionp message-alternative-emails)
+                       (car (cl-remove-if-not message-alternative-emails emails)))
+                      (t (loop for email in emails
+                               if (string-match-p message-alternative-emails email)
+                               return email)))))
     (unless (or (not email) (equal email user-mail-address))
       (message-remove-header "From")
       (goto-char (point-max))
@@ -8381,8 +8197,9 @@ From headers in the original article."
     (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" ""))
+             (replace-regexp-in-string
+              "\n" ""
+              (replace-regexp-in-string "^ +\\| +$" "" string)))
        (ecomplete-add-item 'mail (car (mail-header-parse-address string))
                            string))))
   (ecomplete-save))
@@ -8493,7 +8310,7 @@ Header and body are separated by `mail-header-separator'."
        (when force
          (sit-for message-send-form-letter-delay))
        (if (or force
-                 (y-or-n-p (gnus-format-message "Send message to `%s'? " to)))
+                 (y-or-n-p (format-message "Send message to `%s'? " to)))
            (progn
              (setq sent (1+ sent))
              (message-send-and-exit))
@@ -8582,7 +8399,7 @@ Used in `message-simplify-recipients'."
        (goto-char (point-min))
        (while (re-search-forward "<img.*src=\"\\([^\"]+\\)" nil t)
          (let ((file (match-string 1))
-               (edges (message-window-inside-pixel-edges
+               (edges (window-inside-pixel-edges
                        (get-buffer-window (current-buffer)))))
            (put-image
             (create-image
@@ -8594,10 +8411,6 @@ Used in `message-simplify-recipients'."
             (match-beginning 0)
             " ")))))))
 
-(when (featurep 'xemacs)
-  (require 'messagexmas)
-  (message-xmas-redefine))
-
 (provide 'message)
 
 (run-hooks 'message-load-hook)
index 45dbd901abf81f7b2a473229a3decf275340ad20..bac722e31bf1197c20444c70078722b0172ef925 100644 (file)
@@ -37,7 +37,7 @@
 (defun mm-dissect-archive (handle)
   (let ((decoder (cddr (assoc (car (mm-handle-type handle))
                              mm-archive-decoders)))
-       (dir (mm-make-temp-file
+       (dir (make-temp-file
              (expand-file-name "emm." mm-tmp-directory) 'dir)))
     (set-file-modes dir #o700)
     (unwind-protect
index 11449f9d9ded97f882fd4270abfb4905df186a76..6ccaa770dbd636a1bc3a7952b78c86175b1d09d6 100644 (file)
@@ -86,15 +86,15 @@ If no encoding was done, nil is returned."
                    (message-options-get 'mm-body-charset-encoding-alist)
                    (message-options-set
                     'mm-body-charset-encoding-alist
-                    (mm-read-coding-system "Charset used in the article: ")))
+                    (read-coding-system "Charset used in the article: ")))
              ;; The logic in `mml-generate-mime-1' confirms that it's OK
              ;; to return nil here.
              nil)))
     (save-excursion
       (if charset
          (progn
-           (mm-encode-coding-region (point-min) (point-max)
-                                    (mm-charset-to-coding-system charset))
+           (encode-coding-region (point-min) (point-max)
+                                 (mm-charset-to-coding-system charset))
            charset)
        (goto-char (point-min))
        (let ((charsets (mm-find-mime-charset-region (point-min) (point-max)
@@ -110,8 +110,8 @@ If no encoding was done, nil is returned."
           (t
            (prog1
                (setq charset (car charsets))
-             (mm-encode-coding-region (point-min) (point-max)
-                                      (mm-charset-to-coding-system charset))))
+             (encode-coding-region (point-min) (point-max)
+                                   (mm-charset-to-coding-system charset))))
           ))))))
 
 (defun mm-long-lines-p (length)
@@ -243,8 +243,7 @@ decoding.  If it is nil, default to `mail-parse-charset'."
   (save-excursion
     (when encoding
       (mm-decode-content-transfer-encoding encoding type))
-    (when (and (featurep 'mule) ;; Fixme: Wrong test for unibyte session.
-              (not (eq charset 'gnus-decoded)))
+    (when (not (eq charset 'gnus-decoded))
       (let ((coding-system (mm-charset-to-coding-system
                            ;; Allow overwrite using
                            ;; `mm-charset-override-alist'.
@@ -255,18 +254,11 @@ decoding.  If it is nil, default to `mail-parse-charset'."
            (setq coding-system
                  (mm-charset-to-coding-system mail-parse-charset)))
        (when (and charset coding-system
-                  ;; buffer-file-coding-system
-                  ;;Article buffer is nil coding system
-                  ;;in XEmacs
                   (mm-multibyte-p)
                   (or (not (eq coding-system 'ascii))
                       (setq coding-system mail-parse-charset)))
-         (mm-decode-coding-region (point-min) (point-max)
-                                  coding-system))
-       (setq buffer-file-coding-system
-             (if (boundp 'last-coding-system-used)
-                 (symbol-value 'last-coding-system-used)
-               coding-system))))))
+         (decode-coding-region (point-min) (point-max) coding-system))
+       (setq buffer-file-coding-system last-coding-system-used)))))
 
 (defun mm-decode-string (string charset)
   "Decode STRING with CHARSET."
@@ -278,22 +270,21 @@ decoding.  If it is nil, default to `mail-parse-charset'."
            (memq charset mail-parse-ignored-charsets))
     (setq charset mail-parse-charset))
   (or
-   (when (featurep 'mule)
-     (let ((coding-system (mm-charset-to-coding-system
-                          charset
-                          ;; Allow overwrite using
-                          ;; `mm-charset-override-alist'.
-                          nil t)))
-       (if (and (not coding-system)
-               (listp mail-parse-ignored-charsets)
-               (memq 'gnus-unknown mail-parse-ignored-charsets))
-          (setq coding-system
-                (mm-charset-to-coding-system mail-parse-charset)))
-       (when (and charset coding-system
-                 (mm-multibyte-p)
-                 (or (not (eq coding-system 'ascii))
-                     (setq coding-system mail-parse-charset)))
-        (mm-decode-coding-string string coding-system))))
+   (let ((coding-system (mm-charset-to-coding-system
+                        charset
+                        ;; Allow overwrite using
+                        ;; `mm-charset-override-alist'.
+                        nil t)))
+     (if (and (not coding-system)
+             (listp mail-parse-ignored-charsets)
+             (memq 'gnus-unknown mail-parse-ignored-charsets))
+        (setq coding-system
+              (mm-charset-to-coding-system mail-parse-charset)))
+     (when (and charset coding-system
+               (mm-multibyte-p)
+               (or (not (eq coding-system 'ascii))
+                   (setq coding-system mail-parse-charset)))
+       (decode-coding-string string coding-system)))
    string))
 
 (provide 'mm-bodies)
index 3ea63c740347aad63c14308bd6ef7690be8babb1..f45337dc04222c60b0ae41766e252e773ace3c5c 100644 (file)
@@ -28,9 +28,6 @@
 (eval-when-compile (require 'cl))
 
 (autoload 'gnus-map-function "gnus-util")
-(autoload 'gnus-replace-in-string "gnus-util")
-(autoload 'gnus-read-shell-command "gnus-util")
-(autoload 'gnus-format-message "gnus-util")
 
 (autoload 'mm-inline-partial "mm-partial")
 (autoload 'mm-inline-external-body "mm-extern")
@@ -291,10 +288,7 @@ before the external MIME handler is invoked."
              (mm-insert-part handle)
              (let ((image
                     (ignore-errors
-                      (if (fboundp 'create-image)
-                          (create-image (buffer-string) 'imagemagick 'data-p)
-                        (mm-create-image-xemacs
-                         (mm-handle-media-subtype handle))))))
+                      (create-image (buffer-string) 'imagemagick 'data-p))))
                (when image
                  (setcar (cdr handle) (list "image/imagemagick"))
                  (mm-image-fit-p handle)))))))
@@ -388,12 +382,7 @@ enables you to choose manually one of two types those mails include."
   :type '(repeat regexp) ;; See `mm-preferred-alternative-precedence'.
   :group 'mime-display)
 
-(defcustom mm-tmp-directory
-  (if (fboundp 'temp-directory)
-      (temp-directory)
-    (if (boundp 'temporary-file-directory)
-       temporary-file-directory
-      "/tmp/"))
+(defcustom mm-tmp-directory temporary-file-directory
   "Where mm will store its temporary files."
   :type 'directory
   :group 'mime-display)
@@ -778,7 +767,7 @@ MIME-Version header before proceeding."
     (with-current-buffer
           (generate-new-buffer " *mm*")
       ;; Preserve the data's unibyteness (for url-insert-file-contents).
-      (mm-set-buffer-multibyte mb)
+      (set-buffer-multibyte mb)
       (insert-buffer-substring obuf beg)
       (current-buffer))))
 
@@ -862,7 +851,7 @@ external if displayed external."
                                      (concat
                                       "using external program \""
                                       (format method filename) "\"")
-                                   (gnus-format-message
+                                   (format-message
                                     "by calling `%s' on the contents)" method))
                                  "? "))))))
            (if external
@@ -893,7 +882,7 @@ external if displayed external."
                  (select-window win)))
              (switch-to-buffer (generate-new-buffer " *mm*")))
            (buffer-disable-undo)
-           (mm-set-buffer-file-coding-system mm-binary-coding-system)
+           (set-buffer-file-coding-system mm-binary-coding-system)
            (insert-buffer-substring cur)
            (goto-char (point-min))
            (when method
@@ -920,7 +909,7 @@ external if displayed external."
        ;; The function is a string to be executed.
        (mm-insert-part handle)
        (mm-add-meta-html-tag handle)
-       (let* ((dir (mm-make-temp-file
+       (let* ((dir (make-temp-file
                     (expand-file-name "emm." mm-tmp-directory) 'dir))
               (filename (or
                          (mail-content-type-get
@@ -950,8 +939,8 @@ external if displayed external."
                ;; `mailcap-mime-extensions'.
                (setq suffix (car (rassoc (mm-handle-media-type handle)
                                          mailcap-mime-extensions))))
-             (setq file (mm-make-temp-file (expand-file-name "mm." dir)
-                                           nil suffix))))
+             (setq file (make-temp-file (expand-file-name "mm." dir)
+                                        nil suffix))))
          (let ((coding-system-for-write mm-binary-coding-system))
            (write-region (point-min) (point-max) file nil 'nomesg))
          ;; The file is deleted after the viewer exists.  If the users edits
@@ -1149,9 +1138,6 @@ external if displayed external."
       (ignore-errors
        (cond
         ;; Internally displayed part.
-        ((mm-annotationp object)
-          (if (featurep 'xemacs)
-              (delete-annotation object)))
         ((or (functionp object)
              (and (listp object)
                   (eq (car object) 'lambda)))
@@ -1315,7 +1301,7 @@ are ignored."
                     (with-current-buffer (mm-handle-buffer handle)
                       (buffer-string)))
                    ((mm-multibyte-p)
-                    (mm-string-to-multibyte (mm-get-part handle no-cache)))
+                    (string-to-multibyte (mm-get-part handle no-cache)))
                    (t
                     (mm-get-part handle no-cache)))))
     (save-restriction
@@ -1361,12 +1347,12 @@ string if you do not like underscores."
 
 (defun mm-file-name-delete-control (filename)
   "Delete control characters from FILENAME."
-  (gnus-replace-in-string filename "[\x00-\x1f\x7f]" ""))
+  (replace-regexp-in-string "[\x00-\x1f\x7f]" "" filename))
 
 (defun mm-file-name-delete-gotchas (filename)
   "Delete shell gotchas from FILENAME."
-  (setq filename (gnus-replace-in-string filename "[<>|]" ""))
-  (gnus-replace-in-string filename "^[.-]+" ""))
+  (setq filename (replace-regexp-in-string "[<>|]" "" filename))
+  (replace-regexp-in-string "^[.-]+" "" filename))
 
 (defun mm-save-part (handle &optional prompt)
   "Write HANDLE to a file.
@@ -1459,7 +1445,7 @@ text/\\(\\sw+\\)\\(?:;\\s-*charset=\\([^\"'>]+\\)\\)?[^>]*>" nil t)
 Use CMD as the process."
   (let ((name (mail-content-type-get (mm-handle-type handle) 'name))
        (command (or cmd
-                    (gnus-read-shell-command
+                    (read-shell-command
                      "Shell command on MIME part: " mm-last-shell-command))))
     (mm-with-unibyte-buffer
       (mm-insert-part handle)
@@ -1575,73 +1561,29 @@ be determined."
          (prog1
              (setq spec
                    (ignore-errors
-                     ;; Avoid testing `make-glyph' since W3 may define
-                     ;; a bogus version of it.
-                     (if (fboundp 'create-image)
-                         (create-image (buffer-string)
-                                       (or (mm-image-type-from-buffer)
-                                           (intern type))
-                                       'data-p)
-                       (mm-create-image-xemacs type))))
+                     (create-image (buffer-string)
+                                   (or (mm-image-type-from-buffer)
+                                       (intern type))
+                                   'data-p)))
            (mm-handle-set-cache handle spec))))))
 
-(defun mm-create-image-xemacs (type)
-  (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)))))))
-
 (declare-function image-size "image.c" (spec &optional pixels frame))
 
 (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 (featurep 'xemacs)
-           ;; XEmacs's glyphs can actually tell us about their width, so
-           ;; let's be nice and smart about them.
-           (or mm-inline-large-images
-               (and (<= (glyph-width image) (window-pixel-width))
-                    (<= (glyph-height image) (window-pixel-height))))
-         (let* ((size (image-size image))
-                (w (car size))
-                (h (cdr size)))
-           (or mm-inline-large-images
-               (and (<= h (1- (window-height))) ; Don't include mode line.
-                    (<= w (window-width)))))))))
+       (let* ((size (image-size image))
+              (w (car size))
+              (h (cdr size)))
+         (or mm-inline-large-images
+             (and (<= h (1- (window-height))) ; Don't include mode line.
+                  (<= w (window-width))))))))
 
 (defun mm-valid-image-format-p (format)
   "Say whether FORMAT can be displayed natively by Emacs."
-  (cond
-   ;; Handle XEmacs
-   ((fboundp 'valid-image-instantiator-format-p)
-    (valid-image-instantiator-format-p format))
-   ;; Handle Emacs
-   ((fboundp 'image-type-available-p)
-    (and (display-graphic-p)
-        (image-type-available-p format)))
-   ;; Nobody else can do images yet.
-   (t
-    nil)))
+  (and (display-graphic-p)
+       (image-type-available-p format)))
 
 (defun mm-valid-and-fit-image-p (format handle)
   "Say whether FORMAT can be displayed natively and HANDLE fits the window."
@@ -1839,8 +1781,7 @@ If RECURSIVE, search recursively."
 (defun mm-shr (handle)
   ;; Require since we bind its variables.
   (require 'shr)
-  (let ((shr-width (if (and (boundp 'shr-use-fonts)
-                           shr-use-fonts)
+  (let ((shr-width (if shr-use-fonts
                       nil
                     fill-column))
        (shr-content-function (lambda (id)
@@ -1864,8 +1805,8 @@ If RECURSIVE, search recursively."
                                    (mm-charset-to-coding-system charset
                                                                 nil t))
                              (not (eq charset 'ascii)))
-                        (mm-decode-coding-string (buffer-string) charset)
-                      (mm-string-as-multibyte (buffer-string)))
+                        (decode-coding-string (buffer-string) charset)
+                      (string-as-multibyte (buffer-string)))
                   (erase-buffer)
                   (mm-enable-multibyte)))
         (goto-char (point-min))
@@ -1894,6 +1835,7 @@ If RECURSIVE, search recursively."
                           ,(point-max-marker))))))))
 
 (defvar shr-map)
+(defvar shr-image-map)
 
 (autoload 'widget-convert-button "wid-edit")
 
@@ -1907,7 +1849,8 @@ If RECURSIVE, search recursively."
        (widget-convert-button
         'url-link start end
         :help-echo (get-text-property start 'help-echo)
-        :keymap shr-map
+        ;;; FIXME Should only use the image map on images.
+        :keymap shr-image-map
         (get-text-property start 'shr-url))
        (put-text-property start end 'local-map nil)
        (dolist (overlay (overlays-at start))
index 523a53b7f5e2042a9604fed8983f81d138752b2d..2b037f1cf96318bc9b2ae0f64d88e3ebe6209e72 100644 (file)
@@ -136,13 +136,6 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
           handle
           `(lambda ()
              (let (buffer-read-only)
-               (condition-case nil
-                   ;; This is only valid on XEmacs.
-                   (mapcar (lambda (prop)
-                           (remove-specifier
-                            (face-property 'default prop) (current-buffer)))
-                           '(background background-pixmap foreground))
-                 (error nil))
                (delete-region ,(point-min-marker) ,(point-max-marker))))))))))
 
 (provide 'mm-partial)
index e5c43fd155973e89c6b5ddd4fb045ab0e8445ab6..6919266794859d310bea3153691ab16f39b648d3 100644 (file)
@@ -276,19 +276,10 @@ If `mm-url-use-external' is non-nil, use `mm-url-program'."
            (insert-file-contents (substring url (1- (match-end 0))))
          (mm-url-insert-file-contents-external url))
        (goto-char (point-min))
-       (if (fboundp 'url-generic-parse-url)
-           (setq url-current-object
-                 (url-generic-parse-url url)))
+       (setq url-current-object (url-generic-parse-url url))
        (list url (buffer-size)))
     (mm-url-load-url)
     (let ((name buffer-file-name)
-         (url-request-extra-headers
-          ;; ISTM setting a Connection header was a workaround for
-          ;; older versions of url included with w3, but it does more
-          ;; harm than good with the one shipped with Emacs. --ansel
-          (if (not (and (boundp 'url-version)
-                        (equal url-version "Emacs")))
-              (list (cons "Connection" "Close"))))
          result)
       (setq result (url-insert-file-contents url))
       (save-excursion
@@ -296,10 +287,9 @@ If `mm-url-use-external' is non-nil, use `mm-url-program'."
        (while (re-search-forward "\r 1000\r ?" nil t)
          (replace-match "")))
       (setq buffer-file-name name)
-      (if (and (fboundp 'url-generic-parse-url)
-              (listp result))
-         (setq url-current-object (url-generic-parse-url
-                                   (car result))))
+      (when (listp result)
+       (setq url-current-object
+             (url-generic-parse-url (car result))))
       result)))
 
 ;;;###autoload
@@ -364,7 +354,7 @@ If FOLLOW-REFRESH is non-nil, redirect refresh url in META."
                              (string-to-number (substring entity 1)))))
                       (setq c (or (cdr (assq c mm-extra-numeric-entities))
                                   (mm-ucs-to-char c)))
-                      (if (mm-char-or-char-int-p c) c ?#))
+                      (if (characterp c) c ?#))
                   (or (cdr (assq (intern entity)
                                  mm-url-html-entities))
                       ?#))))
@@ -399,10 +389,7 @@ spaces.  Die Die Die."
          ((= char ?  ) "+")
          ((memq char mm-url-unreserved-chars) (char-to-string char))
          (t (upcase (format "%%%02x" char)))))
-       (mm-encode-coding-string chunk
-                               (if (fboundp 'find-coding-systems-string)
-                                   (car (find-coding-systems-string chunk))
-                                 buffer-file-coding-system))
+       (encode-coding-string chunk (car (find-coding-systems-string chunk)))
        "")))
 
 (defun mm-url-encode-www-form-urlencoded (pairs)
index 106d010a3dcc759896c1097ea3b2d7c1e5272a26..c0f8742504ec4b239f81050981d49350328d59c6 100644 (file)
 
 (eval-when-compile (require 'cl))
 (require 'mail-prsvr)
+(require 'timer)
 
-(eval-and-compile
-  (if (featurep 'xemacs)
-      (unless (ignore-errors
-               (require 'timer-funcs))
-       (require 'timer))
-    (require 'timer)))
-
-(defvar mm-mime-mule-charset-alist )
-;; Note this is not presently used on Emacs >= 23, which is good,
-;; since it means standalone message-mode (which requires mml and
-;; hence mml-util) does not load gnus-util.
-(autoload 'gnus-completing-read "gnus-util")
-
-;; Emulate functions that are not available in every (X)Emacs version.
-;; The name of a function is prefixed with mm-, like `mm-char-int' for
-;; `char-int' that is a native XEmacs function, not available in Emacs.
-;; Gnus programs all should use mm- functions, not the original ones.
-(eval-and-compile
-  (mapc
-   (lambda (elem)
-     (let ((nfunc (intern (format "mm-%s" (car elem)))))
-       (if (fboundp (car elem))
-          (defalias nfunc (car elem))
-        (defalias nfunc (cdr elem)))))
-   `(;; `coding-system-list' is not available in XEmacs 21.4 built
-     ;; without the `file-coding' feature.
-     (coding-system-list . ignore)
-     ;; `char-int' is an XEmacs function, not available in Emacs.
-     (char-int . identity)
-     ;; `coding-system-equal' is an Emacs function, not available in XEmacs.
-     (coding-system-equal . equal)
-     ;; `annotationp' is an XEmacs function, not available in Emacs.
-     (annotationp . ignore)
-     ;; `set-buffer-file-coding-system' is not available in XEmacs 21.4
-     ;; built without the `file-coding' feature.
-     (set-buffer-file-coding-system . ignore)
-     ;; `read-charset' is an Emacs function, not available in XEmacs.
-     (read-charset
-      . ,(lambda (prompt)
-          "Return a charset."
-          (intern
-           (gnus-completing-read
-            prompt
-            (mapcar (lambda (e) (symbol-name (car e)))
-                    mm-mime-mule-charset-alist)
-            t))))
-     ;; `subst-char-in-string' is not available in XEmacs 21.4.
-     (subst-char-in-string
-      . ,(lambda (from to string &optional inplace)
-          ;; stolen (and renamed) from nnheader.el
-          "Replace characters in STRING from FROM to TO.
-         Unless optional argument INPLACE is non-nil, return a new string."
-          (let ((string (if inplace string (copy-sequence string)))
-                (len (length string))
-                (idx 0))
-            ;; Replace all occurrences of FROM with TO.
-            (while (< idx len)
-              (when (= (aref string idx) from)
-                (aset string idx to))
-              (setq idx (1+ idx)))
-            string)))
-     ;; `replace-in-string' is an XEmacs function, not available in Emacs.
-     (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' is an Emacs function, not available in XEmacs.
-     (string-as-unibyte . identity)
-     ;; `string-make-unibyte' is an Emacs function, not available in XEmacs.
-     (string-make-unibyte . identity)
-     ;; string-as-multibyte often doesn't really do what you think it does.
-     ;; Example:
-     ;;    (aref (string-as-multibyte "\201") 0) -> 129 (aka ?\201)
-     ;;    (aref (string-as-multibyte "\300") 0) -> 192 (aka ?\300)
-     ;;    (aref (string-as-multibyte "\300\201") 0) -> 192 (aka ?\300)
-     ;;    (aref (string-as-multibyte "\300\201") 1) -> 129 (aka ?\201)
-     ;; but
-     ;;    (aref (string-as-multibyte "\201\300") 0) -> 2240
-     ;;    (aref (string-as-multibyte "\201\300") 1) -> <error>
-     ;; Better use string-to-multibyte or encode-coding-string.
-     ;; If you really need string-as-multibyte somewhere it's usually
-     ;; because you're using the internal emacs-mule representation (maybe
-     ;; because you're using string-as-unibyte somewhere), which is
-     ;; generally a problem in itself.
-     ;; Here is an approximate equivalence table to help think about it:
-     ;; (string-as-multibyte s)   ~= (decode-coding-string s 'emacs-mule)
-     ;; (string-to-multibyte s)   ~= (decode-coding-string s 'binary)
-     ;; (string-make-multibyte s) ~= (decode-coding-string s locale-coding-system)
-     ;; `string-as-multibyte' is an Emacs function, not available in XEmacs.
-     (string-as-multibyte . identity)
-     ;; `multibyte-string-p' is an Emacs function, not available in XEmacs.
-     (multibyte-string-p . ignore)
-     ;; `insert-byte' is available only in Emacs 23.1 or greater.
-     (insert-byte . insert-char)
-     ;; `multibyte-char-to-unibyte' is an Emacs function, not available
-     ;; in XEmacs.
-     (multibyte-char-to-unibyte . identity)
-     ;; `set-buffer-multibyte' is an Emacs function, not available in XEmacs.
-     (set-buffer-multibyte . ignore)
-     ;; `substring-no-properties' is available only in Emacs 22.1 or greater.
-     (substring-no-properties
-      . ,(lambda (string &optional from to)
-          "Return a substring of STRING, without text properties.
-It starts at index FROM and ending before TO.
-TO may be nil or omitted; then the substring runs to the end of STRING.
-If FROM is nil or omitted, the substring starts at the beginning of STRING.
-If FROM or TO is negative, it counts from the end.
-
-With one argument, just copy STRING without its properties."
-          (setq string (substring string (or from 0) to))
-          (set-text-properties 0 (length string) nil string)
-          string))
-     ;; `line-number-at-pos' is available only in Emacs 22.1 or greater
-     ;; and XEmacs 21.5.
-     (line-number-at-pos
-      . ,(lambda (&optional pos)
-          "Return (narrowed) buffer line number at position POS.
-If POS is nil, use current buffer location.
-Counting starts at (point-min), so the value refers
-to the contents of the accessible portion of the buffer."
-          (let ((opoint (or pos (point))) start)
-            (save-excursion
-              (goto-char (point-min))
-              (setq start (point))
-              (goto-char opoint)
-              (forward-line 0)
-              (1+ (count-lines start (point))))))))))
-
-;; `special-display-p' is an Emacs function, not available in XEmacs.
-(defalias 'mm-special-display-p
-  (if (featurep 'emacs)
-      '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))))))))))
-
-;; `decode-coding-string', `encode-coding-string', `decode-coding-region'
-;; and `encode-coding-region' are available in Emacs and XEmacs built with
-;; the `file-coding' feature, but the XEmacs versions treat nil, that is
-;; given as the `coding-system' argument, as the `binary' coding system.
-(eval-and-compile
-  (if (featurep 'xemacs)
-      (if (featurep 'file-coding)
-         (progn
-           (defun mm-decode-coding-string (str coding-system)
-             (if coding-system
-                 (decode-coding-string str coding-system)
-               str))
-           (defun mm-encode-coding-string (str coding-system)
-             (if coding-system
-                 (encode-coding-string str coding-system)
-               str))
-           (defun mm-decode-coding-region (start end coding-system)
-             (if coding-system
-                 (decode-coding-region start end coding-system)))
-           (defun mm-encode-coding-region (start end coding-system)
-             (if coding-system
-                 (encode-coding-region start end coding-system))))
-       (defun mm-decode-coding-string (str coding-system) str)
-       (defun mm-encode-coding-string (str coding-system) str)
-       (defalias 'mm-decode-coding-region 'ignore)
-       (defalias 'mm-encode-coding-region 'ignore))
-    (defalias 'mm-decode-coding-string 'decode-coding-string)
-    (defalias 'mm-encode-coding-string 'encode-coding-string)
-    (defalias 'mm-decode-coding-region 'decode-coding-region)
-    (defalias 'mm-encode-coding-region 'encode-coding-region)))
-
-;; `string-to-multibyte' is available only in Emacs.
-(defalias 'mm-string-to-multibyte (if (featurep 'xemacs)
-                                     'identity
-                                   'string-to-multibyte))
-
-;; `char-or-char-int-p' is an XEmacs function, not available in Emacs.
-(eval-and-compile
-  (defalias 'mm-char-or-char-int-p
-    (cond
-     ((fboundp 'char-or-char-int-p) 'char-or-char-int-p)
-     ((fboundp 'char-valid-p) 'char-valid-p)
-     (t 'identity))))
-
-;; `ucs-to-char' is a function that Mule-UCS provides.
-(eval-and-compile
-  (if (featurep 'xemacs)
-      (cond ((and (fboundp 'unicode-to-char) ;; XEmacs 21.5.
-                 (subrp (symbol-function 'unicode-to-char)))
-            (if (featurep 'mule)
-                (defalias 'mm-ucs-to-char 'unicode-to-char)
-              (defun mm-ucs-to-char (codepoint)
-                "Convert Unicode codepoint to character."
-                (or (unicode-to-char codepoint) ?#))))
-           ((featurep 'mule)
-            (defun mm-ucs-to-char (codepoint)
-              "Convert Unicode codepoint to character."
-              (if (fboundp 'ucs-to-char) ;; Mule-UCS is loaded.
-                  (progn
-                    (defalias 'mm-ucs-to-char
-                      (lambda (codepoint)
-                        "Convert Unicode codepoint to character."
-                        (condition-case nil
-                            (or (ucs-to-char codepoint) ?#)
-                          (error ?#))))
-                    (mm-ucs-to-char codepoint))
-                (condition-case nil
-                    (or (int-to-char codepoint) ?#)
-                  (error ?#)))))
-           (t
-            (defun mm-ucs-to-char (codepoint)
-              "Convert Unicode codepoint to character."
-              (condition-case nil
-                  (or (int-to-char codepoint) ?#)
-                (error ?#)))))
-    (if (let ((char (make-char 'japanese-jisx0208 36 34)))
-         (eq char (decode-char 'ucs char)))
-       ;; Emacs 23.
-       (defalias 'mm-ucs-to-char 'identity)
-      (defun mm-ucs-to-char (codepoint)
-       "Convert Unicode codepoint to character."
-       (or (decode-char 'ucs codepoint) ?#)))))
-
-;; Fixme:  This seems always to be used to read a MIME charset, so it
-;; should be re-named and fixed (in Emacs) to offer completion only on
-;; proper charset names (base coding systems which have a
-;; mime-charset defined).  XEmacs doesn't believe in mime-charset;
-;; test with
-;;   `(or (coding-system-get 'iso-8859-1 'mime-charset)
-;;        (coding-system-get 'iso-8859-1 :mime-charset))'
-;; Actually, there should be an `mm-coding-system-mime-charset'.
-(eval-and-compile
-  (defalias 'mm-read-coding-system
-    (if (featurep 'emacs) 'read-coding-system
-      (cond
-       ((fboundp 'read-coding-system)
-       (if (and (featurep 'xemacs)
-                (<= (string-to-number emacs-version) 21.1))
-           (lambda (prompt &optional default-coding-system)
-             (read-coding-system prompt))
-         'read-coding-system))
-       (t (lambda (prompt &optional default-coding-system)
-           "Prompt the user for a coding system."
-           (gnus-completing-read
-            prompt (mapcar (lambda (s) (symbol-name (car s)))
-                           mm-mime-mule-charset-alist))))))))
+(defvar mm-mime-mule-charset-alist)
+
+(defun mm-ucs-to-char (codepoint)
+  "Convert Unicode codepoint to character."
+  (or (decode-char 'ucs codepoint) ?#))
 
 (defvar mm-coding-system-list nil)
 (defun mm-get-coding-system-list ()
   "Get the coding system list."
   (or mm-coding-system-list
-      (setq mm-coding-system-list (mm-coding-system-list))))
+      (setq mm-coding-system-list (coding-system-list))))
 
 (defun mm-coding-system-p (cs)
-  "Return non-nil if CS is a symbol naming a coding system.
-In XEmacs, also return non-nil if CS is a coding system object.
-If CS is available, return CS itself in Emacs, and return a coding
-system object in XEmacs."
-  (if (fboundp 'find-coding-system)
-      (and cs (find-coding-system cs))
-    (if (fboundp 'coding-system-p)
-       (when (coding-system-p cs)
-         cs)
-      ;; no-MULE XEmacs:
-      (car (memq cs (mm-get-coding-system-list))))))
+  "Return CS if CS is a coding system."
+  (and (coding-system-p cs)
+       cs))
 
 (defvar mm-charset-synonym-alist
   `(
@@ -343,170 +88,17 @@ system object in XEmacs."
                 (mm-coding-system-p 'iso-8859-1))
        '((iso_8859-1 . iso-8859-1)))
     )
-  "A mapping from unknown or invalid charset names to the real charset names.
-
-See `mm-codepage-iso-8859-list' and `mm-codepage-ibm-list'.")
-
-(defun mm-codepage-setup (number &optional alias)
-  "Create a coding system cpNUMBER.
-The coding system is created using `codepage-setup'.  If ALIAS is
-non-nil, an alias is created and added to
-`mm-charset-synonym-alist'.  If ALIAS is a string, it's used as
-the alias.  Else windows-NUMBER is used."
-  (interactive
-   (let ((completion-ignore-case t)
-        (candidates (if (fboundp 'cp-supported-codepages)
-                        (cp-supported-codepages)
-                      ;; Removed in Emacs 23 (unicode), so signal an error:
-                      (error "`codepage-setup' not present in this Emacs version"))))
-     (list (gnus-completing-read "Setup DOS Codepage" candidates
-                                 t nil nil "437"))))
-  (when alias
-    (setq alias (if (stringp alias)
-                   (intern alias)
-                 (intern (format "windows-%s" number)))))
-  (let* ((cp (intern (format "cp%s" number))))
-    (unless (mm-coding-system-p cp)
-      (if (fboundp 'codepage-setup)    ; silence compiler
-         (codepage-setup number)
-       (error "`codepage-setup' not present in this Emacs version")))
-    (when (and alias
-              ;; Don't add alias if setup of cp failed.
-              (mm-coding-system-p cp))
-      (add-to-list 'mm-charset-synonym-alist (cons alias cp)))))
-
-(defcustom mm-codepage-iso-8859-list
-  (list 1250 ;; Windows-1250 is a variant of Latin-2 heavily used by Microsoft
-       ;; Outlook users in Czech republic.  Use this to allow reading of
-       ;; their e-mails.
-       '(1252 . 1) ;; Windows-1252 is a superset of iso-8859-1 (West
-                   ;; Europe).  See also `gnus-article-dumbquotes-map'.
-       '(1254 . 9) ;; Windows-1254 is a superset of iso-8859-9 (Turkish).
-       '(1255 . 8));; Windows-1255 is a superset of iso-8859-8 (Hebrew).
-  "A list of Windows codepage numbers and iso-8859 charset numbers.
-
-If an element is a number corresponding to a supported windows
-codepage, appropriate entries to `mm-charset-synonym-alist' are
-added by `mm-setup-codepage-iso-8859'.  An element may also be a
-cons cell where the car is a codepage number and the cdr is the
-corresponding number of an iso-8859 charset."
-  :type '(list (set :inline t
-                   (const 1250 :tag "Central and East European")
-                   (const (1252 . 1) :tag "West European")
-                   (const (1254 . 9) :tag "Turkish")
-                   (const (1255 . 8) :tag "Hebrew"))
-              (repeat :inline t
-                      :tag "Other options"
-                      (choice
-                       (integer :tag "Windows codepage number")
-                       (cons (integer :tag "Windows codepage number")
-                             (integer :tag "iso-8859 charset  number")))))
-  :version "22.1" ;; Gnus 5.10.9
-  :group 'mime)
-
-(defcustom mm-codepage-ibm-list
-  (list 437 ;; (US etc.)
-       860 ;; (Portugal)
-       861 ;; (Iceland)
-       862 ;; (Israel)
-       863 ;; (Canadian French)
-       865 ;; (Nordic)
-       852 ;;
-       850 ;; (Latin 1)
-       855 ;; (Cyrillic)
-       866 ;; (Cyrillic - Russian)
-       857 ;; (Turkish)
-       864 ;; (Arabic)
-       869 ;; (Greek)
-       874);; (Thai)
-  ;; In Emacs 23 (unicode), cp... and ibm... are aliases.
-  ;; Cf. http://thread.gmane.org/v9lkng5nwy.fsf@marauder.physik.uni-ulm.de
-  "List of IBM codepage numbers.
-
-The codepage mappings slightly differ between IBM and other vendors.
-See \"ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/IBM/README.TXT\".
-
-If an element is a number corresponding to a supported windows
-codepage, appropriate entries to `mm-charset-synonym-alist' are
-added by `mm-setup-codepage-ibm'."
-  :type '(list (set :inline t
-                   (const 437 :tag "US etc.")
-                   (const 860 :tag "Portugal")
-                   (const 861 :tag "Iceland")
-                   (const 862 :tag "Israel")
-                   (const 863 :tag "Canadian French")
-                   (const 865 :tag "Nordic")
-                   (const 852)
-                   (const 850 :tag "Latin 1")
-                   (const 855 :tag "Cyrillic")
-                   (const 866 :tag "Cyrillic - Russian")
-                   (const 857 :tag "Turkish")
-                   (const 864 :tag "Arabic")
-                   (const 869 :tag "Greek")
-                   (const 874 :tag "Thai"))
-              (repeat :inline t
-                      :tag "Other options"
-                      (integer :tag "Codepage number")))
-  :version "22.1" ;; Gnus 5.10.9
-  :group 'mime)
-
-(defun mm-setup-codepage-iso-8859 (&optional list)
-  "Add appropriate entries to `mm-charset-synonym-alist'.
-Unless LIST is given, `mm-codepage-iso-8859-list' is used."
-  (unless list
-    (setq list mm-codepage-iso-8859-list))
-  (dolist (i list)
-    (let (cp windows iso)
-      (if (consp i)
-         (setq cp (intern (format "cp%d" (car i)))
-               windows (intern (format "windows-%d" (car i)))
-               iso (intern (format "iso-8859-%d" (cdr i))))
-       (setq cp (intern (format "cp%d" i))
-             windows (intern (format "windows-%d" i))))
-      (unless (mm-coding-system-p windows)
-       (if (mm-coding-system-p cp)
-           (add-to-list 'mm-charset-synonym-alist (cons windows cp))
-         (add-to-list 'mm-charset-synonym-alist (cons windows iso)))))))
-
-(defun mm-setup-codepage-ibm (&optional list)
-  "Add appropriate entries to `mm-charset-synonym-alist'.
-Unless LIST is given, `mm-codepage-ibm-list' is used."
-  (unless list
-    (setq list mm-codepage-ibm-list))
-  (dolist (number list)
-    (let ((ibm (intern (format "ibm%d" number)))
-         (cp  (intern (format "cp%d" number))))
-      (when (and (not (mm-coding-system-p ibm))
-                (mm-coding-system-p cp))
-       (add-to-list 'mm-charset-synonym-alist (cons ibm cp))))))
-
-;; Initialize:
-(mm-setup-codepage-iso-8859)
-(mm-setup-codepage-ibm)
+  "A mapping from unknown or invalid charset names to the real charset names.")
 
 ;; Note: this has to be defined before `mm-charset-to-coding-system'.
-(defcustom mm-charset-eval-alist
-  (if (featurep 'xemacs)
-      nil ;; I don't know what would be useful for XEmacs.
-    '(;; Emacs 22 provides autoloads for 1250-1258
-      ;; (i.e. `mm-codepage-setup' does nothing).
-      (windows-1250 . (mm-codepage-setup 1250 t))
-      (windows-1251 . (mm-codepage-setup 1251 t))
-      (windows-1253 . (mm-codepage-setup 1253 t))
-      (windows-1257 . (mm-codepage-setup 1257 t))))
+(defcustom mm-charset-eval-alist nil
   "An alist of (CHARSET . FORM) pairs.
 If an article is encoded in an unknown CHARSET, FORM is
 evaluated.  This allows the loading of additional libraries
 providing charsets on demand.  If supported by your Emacs
 version, you could use `autoload-coding-system' here."
   :version "22.1" ;; Gnus 5.10.9
-  :type '(list (set :inline t
-                   (const (windows-1250 . (mm-codepage-setup 1250 t)))
-                   (const (windows-1251 . (mm-codepage-setup 1251 t)))
-                   (const (windows-1253 . (mm-codepage-setup 1253 t)))
-                   (const (windows-1257 . (mm-codepage-setup 1257 t)))
-                   (const (cp850 . (mm-codepage-setup 850 nil))))
-              (repeat :inline t
+  :type '(list (repeat :inline t
                       :tag "Other options"
                       (cons (symbol :tag "charset")
                             (symbol :tag "form"))))
@@ -706,7 +298,7 @@ superset of iso-8859-1."
 ;; Fixme: some of the cars here aren't valid MIME charsets.  That
 ;; should only matter with XEmacs, though.
 (defvar mm-mime-mule-charset-alist
-  `((us-ascii ascii)
+  '((us-ascii ascii)
     (iso-8859-1 latin-iso8859-1)
     (iso-8859-2 latin-iso8859-2)
     (iso-8859-3 latin-iso8859-3)
@@ -756,56 +348,24 @@ superset of iso-8859-1."
     (iso-2022-jp-3 latin-jisx0201 japanese-jisx0208-1978 japanese-jisx0208
                   japanese-jisx0213-1 japanese-jisx0213-2)
     (shift_jis latin-jisx0201 katakana-jisx0201 japanese-jisx0208)
-    ,(cond ((fboundp 'unicode-precedence-list)
-           (cons 'utf-8 (delq 'ascii (mapcar 'charset-name
-                                             (unicode-precedence-list)))))
-          ((or (not (fboundp 'charsetp)) ;; non-Mule case
-               (charsetp 'unicode-a)
-               (not (mm-coding-system-p 'mule-utf-8)))
-           '(utf-8 unicode-a unicode-b unicode-c unicode-d unicode-e))
-          (t ;; If we have utf-8 we're in Mule 5+.
-           (append '(utf-8)
-                   (delete 'ascii
-                           (coding-system-get 'mule-utf-8 'safe-charsets))))))
+    (utf-8))
   "Alist of MIME-charset/MULE-charsets.")
 
-(defun mm-enrich-utf-8-by-mule-ucs ()
-  "Make the `utf-8' MIME charset usable by the Mule-UCS package.
-This function will run when the `un-define' module is loaded under
-XEmacs, and fill the `utf-8' entry in `mm-mime-mule-charset-alist'
-with Mule charsets.  It is completely useless for Emacs."
-  (when (boundp 'unicode-basic-translation-charset-order-list)
-    (condition-case nil
-       (let ((val (delq
-                   'ascii
-                   (copy-sequence
-                    (symbol-value
-                     'unicode-basic-translation-charset-order-list))))
-             (elem (assq 'utf-8 mm-mime-mule-charset-alist)))
-         (if elem
-             (setcdr elem val)
-           (setq mm-mime-mule-charset-alist
-                 (nconc mm-mime-mule-charset-alist
-                        (list (cons 'utf-8 val))))))
-      (error))))
-
 ;; Correct by construction, but should be unnecessary for Emacs:
-(if (featurep 'xemacs)
-    (eval-after-load "un-define" '(mm-enrich-utf-8-by-mule-ucs))
-  (when (and (fboundp 'coding-system-list)
-            (fboundp 'sort-coding-systems))
-    (let ((css (sort-coding-systems (coding-system-list 'base-only)))
-         cs mime mule alist)
-      (while css
-       (setq cs (pop css)
-             mime (or (coding-system-get cs :mime-charset); Emacs 23 (unicode)
-                      (coding-system-get cs 'mime-charset)))
-       (when (and mime
-                  (not (eq t (setq mule
-                                   (coding-system-get cs 'safe-charsets))))
-                  (not (assq mime alist)))
-         (push (cons mime (delq 'ascii mule)) alist)))
-      (setq mm-mime-mule-charset-alist (nreverse alist)))))
+(when (and (fboundp 'coding-system-list)
+          (fboundp 'sort-coding-systems))
+  (let ((css (sort-coding-systems (coding-system-list 'base-only)))
+       cs mime mule alist)
+    (while css
+      (setq cs (pop css)
+           mime (or (coding-system-get cs :mime-charset) ; Emacs 23 (unicode)
+                    (coding-system-get cs 'mime-charset)))
+      (when (and mime
+                (not (eq t (setq mule
+                                 (coding-system-get cs 'safe-charsets))))
+                (not (assq mime alist)))
+       (push (cons mime (delq 'ascii mule)) alist)))
+    (setq mm-mime-mule-charset-alist (nreverse alist))))
 
 (defvar mm-hack-charsets '(iso-8859-15 iso-2022-jp-2)
   "A list of special charsets.
@@ -838,16 +398,11 @@ Valid elements include:
   "A table of the difference character between ISO-8859-X and ISO-8859-15.")
 
 (defcustom mm-coding-system-priorities
-  (let ((lang (if (boundp 'current-language-environment)
-                 (symbol-value 'current-language-environment))))
-    (cond (;; XEmacs without Mule but with `file-coding'.
-          (not lang) nil)
-         ;; In XEmacs 21.5 it may be the one like "Japanese (UTF-8)".
-         ((string-match "\\`Japanese" lang)
-          ;; Japanese users prefer iso-2022-jp to others usually used
-          ;; for `buffer-file-coding-system', however iso-8859-1 should
-          ;; be used when there are only ASCII and Latin-1 characters.
-          '(iso-8859-1 iso-2022-jp utf-8))))
+  (and (string-match "\\`Japanese" current-language-environment)
+       ;; Japanese users prefer iso-2022-jp to others usually used
+       ;; for `buffer-file-coding-system', however iso-8859-1 should
+       ;; be used when there are only ASCII and Latin-1 characters.
+       '(iso-8859-1 iso-2022-jp utf-8))
   "Preferred coding systems for encoding outgoing messages.
 
 More than one suitable coding system may be found for some text.
@@ -859,8 +414,7 @@ variable is set, it overrides the default priority."
   :group 'mime)
 
 ;; ??
-(defvar mm-use-find-coding-systems-region
-  (fboundp 'find-coding-systems-region)
+(defvar mm-use-find-coding-systems-region t
   "Use `find-coding-systems-region' to find proper coding systems.
 
 Setting it to nil is useful on Emacsen supporting Unicode if sending
@@ -887,45 +441,26 @@ like \"&#128;\" to the euro sign, mainly in html messages.")
 
 (defun mm-mule-charset-to-mime-charset (charset)
   "Return the MIME charset corresponding to the given Mule CHARSET."
-  (if (and (fboundp 'find-coding-systems-for-charsets)
-          (fboundp 'sort-coding-systems))
-      (let ((css (sort (sort-coding-systems
-                       (find-coding-systems-for-charsets (list charset)))
-                      'mm-sort-coding-systems-predicate))
-           cs mime)
-       (while (and (not mime)
-                   css)
-         (when (setq cs (pop css))
-           (setq mime (or (coding-system-get cs :mime-charset)
-                          (coding-system-get cs 'mime-charset)))))
-       mime)
-    (let ((alist (mapcar (lambda (cs)
-                          (assq cs mm-mime-mule-charset-alist))
-                        (sort (mapcar 'car mm-mime-mule-charset-alist)
-                              'mm-sort-coding-systems-predicate)))
-         out)
-      (while alist
-       (when (memq charset (cdar alist))
-         (setq out (caar alist)
-               alist nil))
-       (pop alist))
-      out)))
-
-(eval-and-compile
-  (if (featurep 'xemacs)
-      (defalias 'mm-enable-multibyte 'ignore)
-    (defun mm-enable-multibyte ()
-      "Set the multibyte flag of the current buffer.
+  (let ((css (sort (sort-coding-systems
+                   (find-coding-systems-for-charsets (list charset)))
+                  'mm-sort-coding-systems-predicate))
+       cs mime)
+    (while (and (not mime)
+               css)
+      (when (setq cs (pop css))
+       (setq mime (or (coding-system-get cs :mime-charset)
+                      (coding-system-get cs 'mime-charset)))))
+    mime))
+
+(defun mm-enable-multibyte ()
+  "Set the multibyte flag of the current buffer.
 Only do this if the default value of `enable-multibyte-characters' is
-non-nil.  This is a no-op in XEmacs."
-      (set-buffer-multibyte 'to)))
+non-nil."
+  (set-buffer-multibyte 'to))
 
-  (if (featurep 'xemacs)
-      (defalias 'mm-disable-multibyte 'ignore)
-    (defun mm-disable-multibyte ()
-      "Unset the multibyte flag of in the current buffer.
-This is a no-op in XEmacs."
-      (set-buffer-multibyte nil))))
+(defun mm-disable-multibyte ()
+  "Unset the multibyte flag of in the current buffer."
+  (set-buffer-multibyte nil))
 
 (defun mm-preferred-coding-system (charset)
   ;; A typo in some Emacs versions.
@@ -939,8 +474,7 @@ This is a no-op in XEmacs."
    mail-parse-mule-charset ;; cached mule-charset
    (progn
      (setq mail-parse-mule-charset
-          (and (boundp 'current-language-environment)
-               (car (last
+          (and (car (last
                      (assq 'charset
                            (assoc current-language-environment
                                   language-info-alist))))))
@@ -956,94 +490,53 @@ This is a no-op in XEmacs."
 (defun mm-charset-after (&optional pos)
   "Return charset of a character in current buffer at position POS.
 If POS is nil, it defaults to the current point.
-If POS is out of range, the value is nil.
-If the charset is `composition', return the actual one."
+If POS is out of range, the value is nil."
   (let ((char (char-after pos)) charset)
-    (if (< (mm-char-int char) 128)
+    (if (< char 128)
        (setq charset 'ascii)
-      ;; charset-after is fake in some Emacsen.
-      (setq charset (and (fboundp 'char-charset) (char-charset char)))
-      (if (eq charset 'composition)    ; Mule 4
-         (let ((p (or pos (point))))
-           (cadr (find-charset-region p (1+ p))))
-       (if (and charset (not (memq charset '(ascii eight-bit-control
-                                                   eight-bit-graphic))))
-           charset
-         (mm-guess-charset))))))
+      (setq charset (char-charset char))
+      (if (and charset (not (memq charset '(ascii eight-bit-control
+                                                 eight-bit-graphic))))
+         charset
+       (mm-guess-charset)))))
 
 (defun mm-mime-charset (charset)
   "Return the MIME charset corresponding to the given Mule CHARSET."
-  (if (eq charset 'unknown)
-      (error "The message contains non-printable characters, please use attachment"))
-  (if (and (fboundp 'coding-system-get) (fboundp 'get-charset-property))
-      (or
-       (and (mm-preferred-coding-system charset)
-           (or (coding-system-get
-                (mm-preferred-coding-system charset) :mime-charset)
-               (coding-system-get
-                (mm-preferred-coding-system charset) 'mime-charset)))
-       (and (eq charset 'ascii)
-           'us-ascii)
-       (mm-preferred-coding-system charset)
-       (mm-mule-charset-to-mime-charset charset))
-    ;; This is for XEmacs.
-    (mm-mule-charset-to-mime-charset charset)))
-
-;; `delete-dups' is not available in XEmacs 21.4.
-(if (fboundp 'delete-dups)
-    (defalias 'mm-delete-duplicates 'delete-dups)
-  (defun mm-delete-duplicates (list)
-    "Destructively remove `equal' duplicates from LIST.
-Store the result in LIST and return it.  LIST must be a proper list.
-Of several `equal' occurrences of an element in LIST, the first
-one is kept.
-
-This is a compatibility function for Emacsen without `delete-dups'."
-    ;; Code from `subr.el' in Emacs 22:
-    (let ((tail list))
-      (while tail
-       (setcdr tail (delete (car tail) (cdr tail)))
-       (setq tail (cdr tail))))
-    list))
+  (when (eq charset 'unknown)
+    (error "The message contains non-printable characters, please use attachment"))
+  (or
+   (and (mm-preferred-coding-system charset)
+       (coding-system-get (mm-preferred-coding-system charset) 'mime-charset))
+   (and (eq charset 'ascii)
+       'us-ascii)
+   (mm-preferred-coding-system charset)
+   (mm-mule-charset-to-mime-charset charset)))
 
 ;; Fixme:  This is used in places when it should be testing the
-;; default multibyteness.  See mm-default-multibyte-p.
-(eval-and-compile
-  (if (and (not (featurep 'xemacs))
-          (boundp 'enable-multibyte-characters))
-      (defun mm-multibyte-p ()
-       "Non-nil if multibyte is enabled in the current buffer."
-       enable-multibyte-characters)
-    (defun mm-multibyte-p () (featurep 'mule))))
-
-(defun mm-default-multibyte-p ()
-  "Return non-nil if the session is multibyte.
-This affects whether coding conversion should be attempted generally."
-  (if (featurep 'mule)
-      (if (boundp 'enable-multibyte-characters)
-         (default-value 'enable-multibyte-characters)
-       t)))
+;; default multibyteness.
+(defun mm-multibyte-p ()
+  "Non-nil if multibyte is enabled in the current buffer."
+  enable-multibyte-characters)
 
 (defun mm-iso-8859-x-to-15-region (&optional b e)
-  (if (fboundp 'char-charset)
-      (let (charset item c inconvertible)
-       (save-restriction
-         (if e (narrow-to-region b e))
-         (goto-char (point-min))
-         (skip-chars-forward "\0-\177")
-         (while (not (eobp))
-           (cond
-            ((not (setq item (assq (char-charset (setq c (char-after)))
-                                   mm-iso-8859-x-to-15-table)))
-             (forward-char))
-            ((memq c (cdr (cdr item)))
-             (setq inconvertible t)
-             (forward-char))
-            (t
-             (insert-before-markers (prog1 (+ c (car (cdr item)))
-                                      (delete-char 1)))))
-           (skip-chars-forward "\0-\177")))
-       (not inconvertible))))
+  (let (charset item c inconvertible)
+    (save-restriction
+      (if e (narrow-to-region b e))
+      (goto-char (point-min))
+      (skip-chars-forward "\0-\177")
+      (while (not (eobp))
+       (cond
+        ((not (setq item (assq (char-charset (setq c (char-after)))
+                               mm-iso-8859-x-to-15-table)))
+         (forward-char))
+        ((memq c (cdr (cdr item)))
+         (setq inconvertible t)
+         (forward-char))
+        (t
+         (insert-before-markers (prog1 (+ c (car (cdr item)))
+                                  (delete-char 1)))))
+       (skip-chars-forward "\0-\177")))
+    (not inconvertible)))
 
 (defun mm-sort-coding-systems-predicate (a b)
   (let ((priorities
@@ -1058,85 +551,6 @@ This affects whether coding conversion should be attempted generally."
                (length (memq (coding-system-base b) priorities)))
           t))))
 
-(declare-function latin-unity-massage-name "ext:latin-unity")
-(declare-function latin-unity-maybe-remap "ext:latin-unity")
-(declare-function latin-unity-representations-feasible-region "ext:latin-unity")
-(declare-function latin-unity-representations-present-region "ext: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.
-This uses the XEmacs-specific latin-unity package to better handle the
-case where identical characters from diverse ISO-8859-? character sets
-can be encoded using a single one of the corresponding coding systems.
-
-It treats `mm-coding-system-priorities' as the list of preferred
-coding systems; a useful example setting for this list in Western
-Europe would be (iso-8859-1 iso-8859-15 utf-8), which would default
-to the very standard Latin 1 coding system, and only move to coding
-systems that are less supported as is necessary to encode the
-characters that exist in the buffer.
-
-Latin Unity doesn't know about those non-ASCII Roman characters that
-are available in various East Asian character sets.  As such, its
-behavior if you have a JIS 0212 LATIN SMALL LETTER A WITH ACUTE in a
-buffer and it can otherwise be encoded as Latin 1, won't be ideal.
-But this is very much a corner case, so don't worry about it."
-  (let ((systems mm-coding-system-priorities) csets psets curset)
-
-    ;; Load the Latin Unity library, if available.
-    (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity"))
-      (require 'latin-unity))
-
-    ;; Now, can we use it?
-    (if (featurep 'latin-unity)
-       (progn
-         (setq csets (latin-unity-representations-feasible-region begin end)
-               psets (latin-unity-representations-present-region begin end))
-
-         (catch 'done
-
-           ;; Pass back the first coding system in the preferred list
-           ;; that can encode the whole region.
-           (dolist (curset systems)
-             (setq curset (latin-unity-massage-name 'buffer-default curset))
-
-             ;; If the coding system is a universal coding system, then
-             ;; it can certainly encode all the characters in the region.
-             (if (memq curset latin-unity-ucs-list)
-                 (throw 'done (list curset)))
-
-             ;; If a coding system isn't universal, and isn't in
-             ;; the list that latin unity knows about, we can't
-             ;; decide whether to use it here. Leave that until later
-             ;; in `mm-find-mime-charset-region' function, whence we
-             ;; have been called.
-             (unless (memq curset latin-unity-coding-systems)
-               (throw 'done nil))
-
-             ;; Right, we know about this coding system, and it may
-             ;; conceivably be able to encode all the characters in
-             ;; the region.
-             (if (latin-unity-maybe-remap begin end curset csets psets t)
-                 (throw 'done (list curset))))
-
-           ;; Can't encode using anything from the
-           ;; `mm-coding-system-priorities' list.
-           ;; Leave `mm-find-mime-charset' to do most of the work.
-           nil))
-
-      ;; Right, latin unity isn't available; let `mm-find-charset-region'
-      ;; take its default action, which equally applies to GNU Emacs.
-      nil)))
-
-(defmacro mm-xemacs-find-mime-charset (begin end)
-  (when (featurep 'xemacs)
-    `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end))))
-
-(declare-function mm-delete-duplicates "mm-util" (list))
-
 (defun mm-find-mime-charset-region (b e &optional hack-charsets)
   "Return the MIME charsets needed to encode the region between B and E.
 nil means ASCII, a single-element list represents an appropriate MIME
@@ -1178,16 +592,9 @@ charset, and a longer list means no appropriate charset."
                         (setq systems nil
                               charsets (list cs))))))
               charsets))
-       ;; If we're XEmacs, and some coding system is appropriate,
-       ;; mm-xemacs-find-mime-charset will return an appropriate list.
-       ;; Otherwise, we'll get nil, and the next setq will get invoked.
-       (setq charsets (mm-xemacs-find-mime-charset b e))
-
-       ;; Fixme: won't work for unibyte Emacs 23:
-
        ;; We're not multibyte, or a single coding system won't cover it.
        (setq charsets
-             (mm-delete-duplicates
+             (delete-dups
               (mapcar 'mm-mime-charset
                       (delq 'ascii
                             (mm-find-charset-region b e))))))
@@ -1200,17 +607,6 @@ charset, and a longer list means no appropriate charset."
     (if (and (memq 'iso-2022-jp-2 charsets)
             (memq 'iso-2022-jp-2 hack-charsets))
        (setq charsets (delq 'iso-2022-jp charsets)))
-    ;; Attempt to reduce the number of charsets if utf-8 is available.
-    (if (and (featurep 'xemacs)
-            (> (length charsets) 1)
-            (mm-coding-system-p 'utf-8))
-       (let ((mm-coding-system-priorities
-              (cons 'utf-8 mm-coding-system-priorities)))
-         (setq charsets
-               (mm-delete-duplicates
-                (mapcar 'mm-mime-charset
-                        (delq 'ascii
-                              (mm-find-charset-region b e)))))))
     charsets))
 
 (defmacro mm-with-unibyte-buffer (&rest forms)
@@ -1233,7 +629,6 @@ Use multibyte mode for this."
 
 (defmacro mm-with-unibyte-current-buffer (&rest forms)
   "Evaluate FORMS with current buffer temporarily made unibyte.
-Equivalent to `progn' in XEmacs.
 
 Note: We recommend not using this macro any more; there should be
 better ways to do a similar thing.  The previous version of this macro
@@ -1241,31 +636,27 @@ bound the default value of `enable-multibyte-characters' to nil while
 evaluating FORMS but it is no longer done.  So, some programs assuming
 it if any may malfunction."
   (declare (obsolete nil "25.1") (indent 0) (debug t))
-  (if (featurep 'xemacs)
-      `(progn ,@forms)
-    (let ((multibyte (make-symbol "multibyte")))
-      `(let ((,multibyte enable-multibyte-characters))
+  (let ((multibyte (make-symbol "multibyte")))
+    `(let ((,multibyte enable-multibyte-characters))
+       (when ,multibyte
+        (set-buffer-multibyte nil))
+       (prog1
+          (progn ,@forms)
         (when ,multibyte
-          (set-buffer-multibyte nil))
-        (prog1
-            (progn ,@forms)
-          (when ,multibyte
-            (set-buffer-multibyte t)))))))
+          (set-buffer-multibyte t))))))
 
 (defun mm-find-charset-region (b e)
   "Return a list of Emacs charsets in the region B to E."
   (cond
-   ((and (mm-multibyte-p)
-        (fboundp 'find-charset-region))
+   ((mm-multibyte-p)
     ;; Remove composition since the base charsets have been included.
     ;; Remove eight-bit-*, treat them as ascii.
     (let ((css (find-charset-region b e)))
-      (dolist (cs
-              '(composition eight-bit-control eight-bit-graphic control-1)
-              css)
-       (setq css (delq cs css)))))
+      (dolist (cs '(composition eight-bit-control eight-bit-graphic control-1))
+       (setq css (delq cs css)))
+      css))
    (t
-    ;; We are in a unibyte buffer or XEmacs non-mule, so we futz around a bit.
+    ;; We are in a unibyte buffer, so we futz around a bit.
     (save-excursion
       (save-restriction
        (narrow-to-region b e)
@@ -1274,11 +665,9 @@ it if any may malfunction."
        (if (eobp)
            '(ascii)
          (let (charset)
-           (setq charset
-                 (and (boundp 'current-language-environment)
-                      (car (last (assq 'charset
-                                       (assoc current-language-environment
-                                              language-info-alist))))))
+           (setq charset (car (last (assq 'charset
+                                          (assoc current-language-environment
+                                                 language-info-alist)))))
            (if (eq charset 'ascii) (setq charset nil))
            (or charset
                (setq charset
@@ -1305,9 +694,9 @@ it if any may malfunction."
   "Like `insert-file-contents', but only reads in the file.
 A buffer may be modified in several ways after reading into the buffer due
 to advanced Emacs features, such as file-name-handlers, format decoding,
-`find-file-hooks', etc.
+`find-file-hook', etc.
 If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'.
-  This function ensures that none of these modifications will take place."
+This function ensures that none of these modifications will take place."
   (letf* ((format-alist nil)
           (auto-mode-alist (if inhibit nil (mm-auto-mode-alist)))
           ((default-value 'major-mode) 'fundamental-mode)
@@ -1322,14 +711,8 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'.
                (append mm-inhibit-file-name-handlers
                        inhibit-file-name-handlers)
              inhibit-file-name-handlers))
-          (ffh (if (boundp 'find-file-hook)
-                   'find-file-hook
-                 'find-file-hooks))
-          (val (symbol-value ffh)))
-    (set ffh nil)
-    (unwind-protect
-       (insert-file-contents filename visit beg end replace)
-      (set ffh val))))
+         (find-file-hook nil))
+    (insert-file-contents filename visit beg end replace)))
 
 (defun mm-append-to-file (start end filename &optional codesys inhibit)
   "Append the contents of the region to the end of file FILENAME.
@@ -1371,70 +754,8 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'."
           inhibit-file-name-handlers)))
     (write-region start end filename append visit lockname)))
 
-(autoload 'gmm-write-region "gmm-utils")
-
-;; It is not a MIME function, but some MIME functions use it.
-(if (and (fboundp 'make-temp-file)
-        (ignore-errors
-          (let ((def (if (fboundp 'compiled-function-arglist) ;; XEmacs
-                         (eval (list 'compiled-function-arglist
-                                     (symbol-function 'make-temp-file)))
-                       (require 'help-fns)
-                       (help-function-arglist 'make-temp-file t))))
-            (and (>= (length def) 4)
-                 (eq (nth 3 def) 'suffix)))))
-    (defalias 'mm-make-temp-file 'make-temp-file)
-  ;; 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
-of PREFIX, and expanding against `temporary-file-directory' if necessary),
-is guaranteed to point to a newly created empty file.
-You can then use `write-region' to write new data into the file.
-
-If DIR-FLAG is non-nil, create a new empty directory instead of a file.
-
-If SUFFIX is non-nil, add that at the end of the file name."
-    (let ((umask (default-file-modes))
-         file)
-      (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 448)
-           (while (condition-case err
-                      (progn
-                        (setq file
-                              (make-temp-name
-                               (expand-file-name
-                                prefix
-                                (if (fboundp 'temp-directory)
-                                    ;; XEmacs
-                                    (temp-directory)
-                                  temporary-file-directory))))
-                        (if suffix
-                            (setq file (concat file suffix)))
-                        (if dir-flag
-                            (make-directory file)
-                          ;; NOTE: This is unsafe if Emacs 20
-                          ;; users and XEmacs users don't use
-                          ;; a secure temp directory.
-                          (gmm-write-region "" nil file nil 'silent
-                                            nil 'excl))
-                        nil)
-                    (file-already-exists t)
-                    ;; The 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
-             ;; `make-temp-name' and `write-region', let's try again.
-             nil)
-           file)
-       ;; Reset the umask.
-       (set-default-file-modes umask)))))
+(defalias 'mm-make-temp-file 'make-temp-file)
+(define-obsolete-function-alias 'mm-make-temp-file 'make-temp-file "25.2")
 
 (defvar mm-image-load-path-cache nil)
 
@@ -1455,54 +776,23 @@ If SUFFIX is non-nil, add that at the end of the file name."
       result)))
 
 ;; Fixme: This doesn't look useful where it's used.
-(if (fboundp 'detect-coding-region)
-    (defun mm-detect-coding-region (start end)
-      "Like `detect-coding-region' except returning the best one."
-      (let ((coding-systems
-            (detect-coding-region start end)))
-       (or (car-safe coding-systems)
-           coding-systems)))
-  (defun mm-detect-coding-region (start end)
-    (let ((point (point)))
-      (goto-char start)
-      (skip-chars-forward "\0-\177" end)
-      (prog1
-         (if (eq (point) end) 'ascii (mm-guess-charset))
-       (goto-char point)))))
+(defun mm-detect-coding-region (start end)
+  "Like `detect-coding-region' except returning the best one."
+  (let ((coding-systems (detect-coding-region start end)))
+    (or (car-safe coding-systems)
+       coding-systems)))
 
 (declare-function mm-detect-coding-region "mm-util" (start end))
 
-(if (fboundp 'coding-system-get)
-    (defun mm-detect-mime-charset-region (start end)
-      "Detect MIME charset of the text in the region between START and END."
-      (let ((cs (mm-detect-coding-region start end)))
-       (or (coding-system-get cs :mime-charset)
-           (coding-system-get cs 'mime-charset))))
-  (defun mm-detect-mime-charset-region (start end)
-    "Detect MIME charset of the text in the region between START and END."
-    (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-detect-mime-charset-region (start end)
+  "Detect MIME charset of the text in the region between START and END."
+  (let ((cs (mm-detect-coding-region start end)))
+    (coding-system-get cs 'mime-charset)))
 
 (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)))))
+  "Return the MIME charset corresponding to CODING-SYSTEM."
+  (and coding-system
+       (coding-system-get coding-system 'mime-charset)))
 
 (defvar jka-compr-acceptable-retval-list)
 (declare-function jka-compr-make-temp-name "jka-compr" (&optional local))
@@ -1571,14 +861,6 @@ decompressed data.  The buffer's multibyteness must be turned off."
          (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
@@ -1601,66 +883,16 @@ gzip, bzip2, etc. are allowed."
        (setq filename (file-name-sans-extension filename)))
       (goto-char (point-min))
       (unwind-protect
-         (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)))))))
+         (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))))
        (when decomp
          (kill-buffer (current-buffer)))))))
 
index 4197b2aa54ae3b200f714bc52f42d45574ecf799..049890e2e30a4a1b070be1acc9b5ff57e0cb5c91 100644 (file)
@@ -249,14 +249,7 @@ To disable dissecting shar codes, for instance, add
 (defsubst mm-uu-function-2 (entry)
   (nth 5 entry))
 
-;; 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))
+(defcustom mm-uu-hide-markers (< 16 (length (defined-colors)))
   "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'."
@@ -297,12 +290,8 @@ 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))
-        (multi (and (boundp 'enable-multibyte-characters)
-                    enable-multibyte-characters))
-       (coding-system
-         ;; Might not exist in non-MULE XEmacs
-         (when (boundp 'buffer-file-coding-system)
-           buffer-file-coding-system)))
+        (multi enable-multibyte-characters)
+       (coding-system buffer-file-coding-system))
     (with-current-buffer (generate-new-buffer " *mm-uu*")
       (if multi (mm-enable-multibyte) (mm-disable-multibyte))
       (setq buffer-file-coding-system coding-system)
@@ -322,13 +311,13 @@ apply the face `mm-uu-extract'."
   (interactive)
   (if symbol (set-default symbol value))
   (setq mm-uu-beginning-regexp nil)
-  (mapcar (lambda (entry)
-            (if (mm-uu-configure-p (mm-uu-type entry) 'disabled)
+  (mapcar (lambda (mm-uu-entry)
+            (if (mm-uu-configure-p (mm-uu-type mm-uu-entry) 'disabled)
                 nil
               (setq mm-uu-beginning-regexp
                     (concat mm-uu-beginning-regexp
                             (if mm-uu-beginning-regexp "\\|")
-                            (mm-uu-beginning-regexp entry)))))
+                            (mm-uu-beginning-regexp mm-uu-entry)))))
          mm-uu-type-alist))
 
 (mm-uu-configure)
@@ -336,7 +325,7 @@ apply the face `mm-uu-extract'."
 (defvar file-name)
 (defvar start-point)
 (defvar end-point)
-(defvar entry)
+(defvar mm-uu-entry)
 
 (defun mm-uu-uu-filename ()
   (if (looking-at ".+")
@@ -523,7 +512,7 @@ apply the face `mm-uu-extract'."
        (when (and mml2015-use (null (mml2015-clear-verify-function)))
          (mm-set-handle-multipart-parameter
           mm-security-handle 'gnus-details
-          (gnus-format-message
+          (format-message
            "Clear verification not supported by `%s'.\n" mml2015-use)))
        (mml2015-extract-cleartext-signature))
       (list (mm-make-handle buf mm-uu-text-plain-type)))))
@@ -587,11 +576,11 @@ apply the face `mm-uu-extract'."
                     (not (eq charset 'ascii)))
                ;; Assume that buffer's multibyteness is turned off.
                ;; See `mml2015-pgg-clear-decrypt'.
-               (insert (mm-decode-coding-string (prog1
-                                                    (buffer-string)
-                                                  (erase-buffer)
-                                                  (mm-enable-multibyte))
-                                                charset))
+               (insert (decode-coding-string (prog1
+                                                 (buffer-string)
+                                               (erase-buffer)
+                                               (mm-enable-multibyte))
+                                             charset))
              (mm-enable-multibyte))
            (list (mm-make-handle buf mm-uu-text-plain-type)))
        (list (mm-make-handle buf '("application/pgp-encrypted")))))))
@@ -612,10 +601,10 @@ apply the face `mm-uu-extract'."
 
 (defun mm-uu-gpg-key-skip-to-last ()
   (let ((point (point))
-       (end-regexp (mm-uu-end-regexp entry))
-       (beginning-regexp (mm-uu-beginning-regexp entry)))
+       (end-regexp (mm-uu-end-regexp mm-uu-entry))
+       (beginning-regexp (mm-uu-beginning-regexp mm-uu-entry)))
     (when (and end-regexp
-              (not (mm-uu-configure-p (mm-uu-type entry) 'disabled)))
+              (not (mm-uu-configure-p (mm-uu-type mm-uu-entry) 'disabled)))
       (while (re-search-forward end-regexp nil t)
        (skip-chars-forward " \t\n\r")
        (if (looking-at beginning-regexp)
index 8e1e3e782cf7e0e7c89009094489fe89a3f16dd1..c62ea958da6ec66331a6279c532f0bd15c056fd0 100644 (file)
@@ -31,7 +31,6 @@
 (require 'mml-smime)
 
 (autoload 'gnus-completing-read "gnus-util")
-(autoload 'gnus-window-inside-pixel-edges "gnus-ems")
 (autoload 'gnus-article-prepare-display "gnus-art")
 (autoload 'vcard-parse-string "vcard")
 (autoload 'vcard-format-string "vcard")
@@ -80,7 +79,7 @@
 
 (autoload 'gnus-rescale-image "gnus-util")
 
-(defun mm-inline-image-emacs (handle)
+(defun mm-inline-image (handle)
   (let ((b (point-marker))
        (inhibit-read-only t))
     (put-image
@@ -88,7 +87,7 @@
        (if (eq mm-inline-large-images 'resize)
            (gnus-rescale-image
            image
-           (let ((edges (gnus-window-inside-pixel-edges
+           (let ((edges (window-inside-pixel-edges
                          (get-buffer-window (current-buffer)))))
              (cons (truncate (* mm-inline-large-images-proportion
                                 (- (nth 2 edges) (nth 0 edges))))
          (remove-images b b)
          (delete-region b (1+ b)))))))
 
-(defun mm-inline-image-xemacs (handle)
-  (when (featurep 'xemacs)
-    (insert "\n")
-    (forward-char -1)
-    (let ((annot (make-annotation (mm-get-image handle) nil 'text))
-       (inhibit-read-only t))
-      (mm-handle-set-undisplayer
-       handle
-       `(lambda ()
-         (let ((b ,(point-marker))
-             (inhibit-read-only t))
-           (delete-annotation ,annot)
-           (delete-region (1- b) b))))
-      (set-extent-property annot 'mm t)
-      (set-extent-property annot 'duplicable t))))
-
-(eval-and-compile
-  (if (featurep 'xemacs)
-      (defalias 'mm-inline-image 'mm-inline-image-xemacs)
-    (defalias 'mm-inline-image 'mm-inline-image-emacs)))
-
 (defvar mm-w3m-setup nil
   "Whether gnus-article-mode has been setup to use emacs-w3m.")
 
              (delete-region ,(point-min-marker)
                             ,(point-max-marker)))))))))
 
-(defvar mm-w3m-standalone-supports-m17n-p (if (featurep 'mule) 'undecided)
+(defvar mm-w3m-standalone-supports-m17n-p 'undecided
   "*T means the w3m command supports the m17n feature.")
 
 (defun mm-w3m-standalone-supports-m17n-p ()
   "Say whether the w3m command supports the m17n feature."
   (cond ((eq mm-w3m-standalone-supports-m17n-p t) t)
        ((eq mm-w3m-standalone-supports-m17n-p nil) nil)
-       ((not (featurep 'mule)) (setq mm-w3m-standalone-supports-m17n-p nil))
        ((condition-case nil
             (let ((coding-system-for-write 'iso-2022-jp)
                   (coding-system-for-read 'iso-2022-jp)
-                  (str (mm-decode-coding-string "\
+                  (str (decode-coding-string "\
 \e$B#D#o#e#s!!#w#3#m!!#s#u#p#p#o#r#t!!#m#1#7#n!)\e(B" 'iso-2022-jp)))
               (mm-with-multibyte-buffer
                 (insert str)
     (delete-region (match-beginning 0) (match-end 0))))
 
 (defun mm-inline-wash-with-file (post-func cmd &rest args)
-  (let ((file (mm-make-temp-file
+  (let ((file (make-temp-file
               (expand-file-name "mm" mm-tmp-directory))))
     (let ((coding-system-for-write 'binary))
       (write-region (point-min) (point-max) file nil 'silent))
         handle
         `(lambda ()
            (let ((inhibit-read-only t))
-             (if (fboundp 'remove-specifier)
-                 ;; This is only valid on XEmacs.
-                 (dolist (prop '(background background-pixmap foreground))
-                   (remove-specifier
-                    (face-property 'default prop) (current-buffer))))
              (delete-region ,(point-min-marker) ,(point-max-marker)))))))))
 
 ;; Shut up byte-compiler.
@@ -486,18 +458,14 @@ If MODE is not set, try to find mode automatically."
        (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
-    ;; `with-current-buffer'/`generate-new-buffer' rather than
-    ;; `with-temp-buffer'.
-    (with-current-buffer (generate-new-buffer "*fontification*")
+    (with-temp-buffer
       (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))
+                    (decode-coding-string text coding-system))
                    (charset
                     (mm-decode-string text charset))
                    (t
@@ -524,28 +492,16 @@ If MODE is not set, try to find mode automatically."
          ;; Do not fontify if the guess mode is fundamental.
          (unless (or font-lock-mode
                      (eq major-mode 'fundamental-mode))
-            (if (fboundp 'font-lock-ensure)
-                (font-lock-ensure)
-              (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))
+           (font-lock-ensure))))
       (setq text (buffer-string))
       ;; Set buffer unmodified to avoid confirmation when killing the
       ;; buffer.
-      (set-buffer-modified-p nil)
-      (kill-buffer (current-buffer)))
+      (set-buffer-modified-p nil))
     (mm-insert-inline handle text)))
 
 ;; Shouldn't these functions check whether the user even wants to use
-;; font-lock?  At least under XEmacs, this fontification is pretty
-;; much unconditional.  Also, it would be nice to change for the size
-;; of the fontified region.
+;; font-lock?  Also, it would be nice to change for the size of the
+;; fontified region.
 
 (defun mm-display-patch-inline (handle)
   (mm-display-inline-fontify handle 'diff-mode))
index 254c427299e9d1584dac92734f303152ef693b1a..0e2d4381993664cd6d9277e187a05bec615d7c58 100644 (file)
@@ -27,6 +27,7 @@
 
 (require 'gnus-util)
 (require 'epg)
+(require 'epa)
 (require 'password-cache)
 (require 'mm-encode)
 
@@ -46,6 +47,8 @@
 (autoload 'mml-smime-verify "mml-smime")
 (autoload 'mml-smime-verify-test "mml-smime")
 (autoload 'epa--select-keys "epa")
+(autoload 'message-options-get "message")
+(autoload 'message-options-set "message")
 
 (declare-function message-options-set "message" (symbol value))
 
@@ -555,7 +558,7 @@ Return keys."
   (let* ((usage-prefs (mml-secure-cust-usage-lookup context usage))
         (curr-fprs (cdr (assoc name (cdr usage-prefs))))
         (key-fprs (mapcar 'mml-secure-fingerprint keys))
-        (new-fprs (gnus-union curr-fprs key-fprs :test 'equal)))
+        (new-fprs (cl-union curr-fprs key-fprs :test 'equal)))
     (if curr-fprs
        (setcdr (assoc name (cdr usage-prefs)) new-fprs)
       (setcdr usage-prefs (cons (cons name new-fprs) (cdr usage-prefs))))
@@ -623,7 +626,7 @@ Passphrase caching in Emacs is NOT recommended.  Use gpg-agent instead."
 The passphrase is read and cached."
   ;; Based on mml2015-epg-passphrase-callback.
   (if (eq key-id 'SYM)
-      (epg-passphrase-callback-function context key-id nil)
+      (epa-passphrase-callback-function context key-id nil)
     (let* ((password-cache-key-id
            (if (eq key-id 'PIN)
                "PIN"
@@ -702,9 +705,9 @@ be present in the keyring."
                       ;; In contrast, signing requires secret key.
                       (mml-secure-secret-key-exists-p context subkey))
                   (or (not fingerprint)
-                      (gnus-string-match-p (concat fingerprint "$") fpr)
-                      (gnus-string-match-p (concat fingerprint "$")
-                                           (epg-sub-key-fingerprint subkey))))
+                      (string-match-p (concat fingerprint "$") fpr)
+                      (string-match-p (concat fingerprint "$")
+                                      (epg-sub-key-fingerprint subkey))))
              (throw 'break t)))))))
 
 (defun mml-secure-find-usable-keys (context name usage &optional justone)
@@ -907,10 +910,10 @@ If no one is selected, symmetric encryption will be performed.  "
         cipher signers)
     (when sign
       (setq signers (mml-secure-signers context signer-names))
-      (epg-context-set-signers context signers))
+      (setf (epg-context-signers context) signers))
     (when (eq 'OpenPGP protocol)
-      (epg-context-set-armor context t)
-      (epg-context-set-textmode context t))
+      (setf (epg-context-armor context) t)
+      (setf (epg-context-textmode context) t))
     (when (mml-secure-cache-passphrase-p protocol)
       (epg-context-set-passphrase-callback
        context
@@ -935,9 +938,9 @@ If no one is selected, symmetric encryption will be performed.  "
         (signers (mml-secure-signers context signer-names))
         signature micalg)
     (when (eq 'OpenPGP protocol)
-      (epg-context-set-armor context t)
-      (epg-context-set-textmode context t))
-    (epg-context-set-signers context signers)
+      (setf (epg-context-armor context) t)
+      (setf (epg-context-textmode context) t))
+    (setf (epg-context-signers context) signers)
     (when (mml-secure-cache-passphrase-p protocol)
       (epg-context-set-passphrase-callback
        context
@@ -947,8 +950,9 @@ If no one is selected, symmetric encryption will be performed.  "
              (if (eq 'OpenPGP protocol)
                  (epg-sign-string context (buffer-string) mode)
                (epg-sign-string context
-                                (mm-replace-in-string (buffer-string)
-                                                      "\n" "\r\n") t))
+                                (replace-regexp-in-string
+                                 "\n" "\r\n" (buffer-string))
+                                t))
              mml-secure-secret-key-id-list nil)
       (error
        (mml-secure-clear-secret-key-id-list)
index 502c65b246387481670427beae39b52db2ddbc30..b15accd631c1ee0b80230d0907c2e5abf326ac10 100644 (file)
 (autoload 'message-narrow-to-headers "message")
 (autoload 'message-fetch-field "message")
 
-;; Prefer epg over openssl if it is available as epg uses GnuPG's gpgsm,
+;; Prefer epg over openssl as epg uses GnuPG's gpgsm,
 ;; which features full-fledged certificate management, while openssl requires
 ;; major manual efforts for certificate revocation and expiry and has bugs
 ;; as documented under man smime(1).
-(ignore-errors (require 'epg))
+(require 'epg)
 
-(defcustom mml-smime-use (if (featurep 'epg) 'epg 'openssl)
+(defcustom mml-smime-use 'epg
   "Whether to use OpenSSL or EasyPG (EPG) to handle S/MIME messages.
-Defaults to EPG if it's available.
-If you think about using OpenSSL, please read the BUGS section in the manual
-for the `smime' command coming with OpenSSL first.  EasyPG is recommended."
+If you're thinking about using OpenSSL, please first read the BUGS section
+in the manual for the `smime' command that comes with OpenSSL.
+We recommend EasyPG."
   :group 'mime-security
   :type '(choice (const :tag "EPG" epg)
                  (const :tag "OpenSSL" openssl)))
@@ -149,8 +149,7 @@ Whether the passphrase is cached at all is controlled by
       (if (not (and (not (file-exists-p tmp))
                    (get-buffer tmp)))
          (push tmp certfiles)
-       (setq file (mm-make-temp-file (expand-file-name "mml."
-                                                       mm-tmp-directory)))
+       (setq file (make-temp-file (expand-file-name "mml." mm-tmp-directory)))
        (with-current-buffer tmp
          (write-region (point-min) (point-max) file))
        (push file certfiles)
@@ -176,15 +175,12 @@ Whether the passphrase is cached at all is controlled by
   (list 'keyfile
        (if (= (length smime-keys) 1)
            (cadar smime-keys)
-         (or (let ((from (cadr (funcall (if (boundp
-                                             'gnus-extract-address-components)
-                                            gnus-extract-address-components
-                                          'mail-extract-address-components)
-                                        (or (save-excursion
-                                              (save-restriction
-                                                (message-narrow-to-headers)
-                                                (message-fetch-field "from")))
-                                            "")))))
+         (or (let ((from (cadr (mail-extract-address-components
+                                (or (save-excursion
+                                      (save-restriction
+                                        (message-narrow-to-headers)
+                                        (message-fetch-field "from")))
+                                    "")))))
                (and from (smime-get-key-by-email from)))
              (smime-get-key-by-email
               (gnus-completing-read "Sign this part with what signature"
@@ -205,18 +201,15 @@ Whether the passphrase is cached at all is controlled by
        (while (not result)
          (setq who (read-from-minibuffer
                     (format "%sLookup certificate for: " (or bad ""))
-                    (cadr (funcall (if (boundp
-                                        'gnus-extract-address-components)
-                                       gnus-extract-address-components
-                                     'mail-extract-address-components)
-                                   (or (save-excursion
-                                         (save-restriction
-                                           (message-narrow-to-headers)
-                                           (message-fetch-field "to")))
-                                       "")))))
+                    (cadr (mail-extract-address-components
+                           (or (save-excursion
+                                 (save-restriction
+                                   (message-narrow-to-headers)
+                                   (message-fetch-field "to")))
+                               "")))))
          (if (setq cert (smime-cert-by-dns who))
              (setq result (list 'certfile (buffer-name cert)))
-           (setq bad (gnus-format-message "`%s' not found. " who))))
+           (setq bad (format-message "`%s' not found. " who))))
       (quit))
     result))
 
@@ -235,7 +228,7 @@ Whether the passphrase is cached at all is controlled by
                                        "")))))
          (if (setq cert (smime-cert-by-ldap who))
              (setq result (list 'certfile (buffer-name cert)))
-           (setq bad (gnus-format-message "`%s' not found. " who))))
+           (setq bad (format-message "`%s' not found. " who))))
       (quit))
     result))
 
@@ -421,7 +414,7 @@ Content-Disposition: attachment; filename=smime.p7m
        (mm-set-handle-multipart-parameter
         mm-security-handle 'gnus-info "Corrupted")
        (throw 'error handle))
-      (setq part (mm-replace-in-string part "\n" "\r\n")
+      (setq part (replace-regexp-in-string "\n" "\r\n" part)
            context (epg-make-context 'CMS))
       (condition-case error
          (setq plain (epg-verify-string context (mm-get-part signature) part))
index c767ceb906181b8e085b19e77fac906a59d38c84..97cc87d06e3e636b5089c4523b8ffe779663a17e 100644 (file)
 (require 'mml-sec)
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'url))
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (require 'easy-mmode))) ; for `define-minor-mode'
 
 (autoload 'message-make-message-id "message")
 (declare-function gnus-setup-posting-charset "gnus-msg" (group))
-(autoload 'gnus-make-local-hook "gnus-util")
 (autoload 'gnus-completing-read "gnus-util")
 (autoload 'message-fetch-field "message")
 (autoload 'message-mark-active-p "message")
@@ -50,7 +46,6 @@
 (autoload 'message-mail-p         "message")
 
 (defvar gnus-article-mime-handles)
-(defvar gnus-mouse-2)
 (defvar gnus-newsrc-hashtb)
 (defvar message-default-charset)
 (defvar message-deletable-headers)
@@ -636,6 +631,7 @@ be \"related\" or \"alternate\"."
                      (let ((mm-coding-system-priorities
                             (cons 'utf-8 mm-coding-system-priorities)))
                        (setq charset (mm-encode-body))))
+                   (mm-disable-multibyte)
                    (setq encoding (mm-body-encoding
                                    charset (cdr (assq 'encoding cont))))))
                  (setq coded (buffer-string)))
@@ -645,7 +641,7 @@ be \"related\" or \"alternate\"."
            (mm-with-unibyte-buffer
              (cond
               ((cdr (assq 'buffer cont))
-               (insert (mm-string-as-unibyte
+               (insert (string-as-unibyte
                         (with-current-buffer (cdr (assq 'buffer cont))
                           (buffer-string)))))
               ((and filename
@@ -658,9 +654,7 @@ be \"related\" or \"alternate\"."
                                  filename)))))
               (t
                (let ((contents (cdr (assq 'contents cont))))
-                 (if (if (featurep 'xemacs)
-                         (string-match "[^\000-\377]" contents)
-                       (mm-multibyte-string-p contents))
+                 (if (multibyte-string-p contents)
                      (progn
                        (mm-enable-multibyte)
                        (insert contents)
@@ -670,7 +664,7 @@ be \"related\" or \"alternate\"."
              (if (setq encoding (cdr (assq 'encoding cont)))
                  (setq encoding (intern (downcase encoding))))
              (setq encoding (mm-encode-buffer type encoding)
-                   coded (mm-string-as-multibyte (buffer-string))))
+                   coded (string-as-multibyte (buffer-string))))
            (mml-insert-mime-headers cont type charset encoding nil)
            (insert "\n" coded))))
        ((eq (car cont) 'external)
@@ -1109,57 +1103,42 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
 (easy-menu-define
   mml-menu mml-mode-map ""
   `("Attachments"
-    ["Attach File..." mml-attach-file
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Attach a file at point"))]
+    ["Attach File..." mml-attach-file :help "Attach a file at point"]
     ["Attach Buffer..." mml-attach-buffer
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Attach a buffer to the outgoing message"))]
+     :help "Attach a buffer to the outgoing message"]
     ["Attach External..." mml-attach-external
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Attach reference to an external file"))]
+     :help "Attach reference to an external file"]
     ;; FIXME: Is it possible to do this without using
     ;; `gnus-gcc-externalize-attachments'?
     ["Externalize Attachments"
      (lambda ()
        (interactive)
-       (if (not (and (boundp 'gnus-gcc-externalize-attachments)
-                    (memq gnus-gcc-externalize-attachments
-                          '(all t nil))))
-          ;; Stupid workaround for XEmacs not honoring :visible.
-          (message "Can't handle this value of `gnus-gcc-externalize-attachments'")
-        (setq gnus-gcc-externalize-attachments
-              (not gnus-gcc-externalize-attachments))
-        (message "gnus-gcc-externalize-attachments is `%s'."
-                 gnus-gcc-externalize-attachments)))
-     ;; XEmacs barfs on :visible.
-     ,@(if (featurep 'xemacs) nil
-        '(:visible (and (boundp 'gnus-gcc-externalize-attachments)
-                        (memq gnus-gcc-externalize-attachments
-                              '(all t nil)))))
+       (setq gnus-gcc-externalize-attachments
+            (not gnus-gcc-externalize-attachments))
+       (message "gnus-gcc-externalize-attachments is `%s'."
+               gnus-gcc-externalize-attachments))
+     :visible (and (boundp 'gnus-gcc-externalize-attachments)
+                  (memq gnus-gcc-externalize-attachments
+                        '(all t nil)))
      :style toggle
      :selected gnus-gcc-externalize-attachments
-     ,@(if (featurep 'xemacs) nil
-        '(:help "Save attachments as external parts in Gcc copies"))]
+     :help "Save attachments as external parts in Gcc copies"]
     "----"
     ;;
     ("Change Security Method"
      ["PGP/MIME"
       (lambda () (interactive) (setq mml-secure-method "pgpmime"))
-      ,@(if (featurep 'xemacs) nil
-         '(:help "Set Security Method to PGP/MIME"))
+      :help "Set Security Method to PGP/MIME"
       :style radio
       :selected (equal mml-secure-method "pgpmime") ]
      ["S/MIME"
       (lambda () (interactive) (setq mml-secure-method "smime"))
-      ,@(if (featurep 'xemacs) nil
-         '(:help "Set Security Method to S/MIME"))
+      :help "Set Security Method to S/MIME"
       :style radio
       :selected (equal mml-secure-method "smime") ]
      ["Inline PGP"
       (lambda () (interactive) (setq mml-secure-method "pgp"))
-      ,@(if (featurep 'xemacs) nil
-         '(:help "Set Security Method to inline PGP"))
+      :help "Set Security Method to inline PGP"
       :style radio
       :selected (equal mml-secure-method "pgp") ] )
     ;;
@@ -1167,8 +1146,7 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
     ["Encrypt Message" mml-secure-message-encrypt t]
     ["Sign and Encrypt Message" mml-secure-message-sign-encrypt t]
     ["Encrypt/Sign off" mml-unsecure-message
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Don't Encrypt/Sign Message"))]
+     :help "Don't Encrypt/Sign Message"]
     ;; Do we have separate encrypt and encrypt/sign commands for parts?
     ["Sign Part" mml-secure-sign t]
     ["Encrypt Part" mml-secure-encrypt t]
@@ -1183,26 +1161,18 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
     ;;["Narrow" mml-narrow-to-part t]
     ["Quote MML in region" mml-quote-region
      :active (message-mark-active-p)
-     ,@(if (featurep 'xemacs) nil
-        '(:help "Quote MML tags in region"))]
+     :help "Quote MML tags in region"]
     ["Validate MML" mml-validate t]
     ["Preview" mml-preview t]
     "----"
     ["Emacs MIME manual" (lambda () (interactive) (message-info 4))
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Display the Emacs MIME manual"))]
+     :help "Display the Emacs MIME manual"]
     ["PGG manual" (lambda () (interactive) (message-info mml2015-use))
-     ;; XEmacs barfs on :visible.
-     ,@(if (featurep 'xemacs) nil
-        '(:visible (and (boundp 'mml2015-use) (equal mml2015-use 'pgg))))
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Display the PGG manual"))]
+     :visible (and (boundp 'mml2015-use) (equal mml2015-use 'pgg))
+     :help "Display the PGG manual"]
     ["EasyPG manual" (lambda () (interactive) (require 'mml2015) (message-info mml2015-use))
-     ;; XEmacs barfs on :visible.
-     ,@(if (featurep 'xemacs) nil
-        '(:visible (and (boundp 'mml2015-use) (equal mml2015-use 'epg))))
-     ,@(if (featurep 'xemacs) '(t)
-        '(:help "Display the EasyPG manual"))]))
+     :visible (and (boundp 'mml2015-use) (equal mml2015-use 'epg))
+     :help "Display the EasyPG manual"]))
 
 (define-minor-mode mml-mode
   "Minor mode for editing MML.
@@ -1379,7 +1349,7 @@ body) or \"attachment\" (separate from the body)."
                          'type type
                          ;; icicles redefines read-file-name and returns a
                          ;; string w/ text properties :-/
-                         'filename (mm-substring-no-properties file)
+                         'filename (substring-no-properties file)
                          'disposition (or disposition "attachment")
                          'description description)
     ;; When using Mail mode, make sure it does the mime encoding
@@ -1575,12 +1545,11 @@ or the `pop-to-buffer' function."
        (message-sort-headers)
        (mml-to-mime))
       (if raw
-         (when (fboundp 'set-buffer-multibyte)
-           (let ((s (buffer-string)))
-             ;; Insert the content into unibyte buffer.
-             (erase-buffer)
-             (mm-disable-multibyte)
-             (insert s)))
+         (let ((s (buffer-string)))
+           ;; Insert the content into unibyte buffer.
+           (erase-buffer)
+           (mm-disable-multibyte)
+           (insert s))
        (let ((gnus-newsgroup-charset (car message-posting-charset))
              gnus-article-prepare-hook gnus-original-article-buffer
              gnus-displaying-mime)
@@ -1591,7 +1560,6 @@ or the `pop-to-buffer' function."
            (gnus-article-prepare-display))))
       ;; Disable article-mode-map.
       (use-local-map nil)
-      (gnus-make-local-hook 'kill-buffer-hook)
       (add-hook 'kill-buffer-hook
                (lambda ()
                  (mm-destroy-parts gnus-article-mime-handles)) nil t)
@@ -1602,14 +1570,14 @@ or the `pop-to-buffer' function."
                     (lambda ()
                       (interactive)
                       (widget-button-press (point))))
-      (local-set-key gnus-mouse-2
+      (local-set-key [mouse-2]
                     (lambda (event)
                       (interactive "@e")
                       (widget-button-press (widget-event-point event) event)))
       ;; 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)))
+  (if (and (not (special-display-p (buffer-name mml-preview-buffer)))
           (boundp 'gnus-buffer-configuration)
           (assq 'mml-preview gnus-buffer-configuration))
       (let ((gnus-message-buffer (current-buffer)))
index 568dc564d914f1a4ba734b51dc23891dcfc2db74..f98984c1cdfc9e50d6d269d71cec5238e175a0d9 100644 (file)
@@ -195,17 +195,20 @@ Whether the passphrase is cached at all is controlled by
       (pop-to-buffer pgg-errors-buffer)
       (error "Encrypt error"))
     (delete-region (point-min) (point-max))
-    (mm-with-unibyte-current-buffer
-      (insert-buffer-substring pgg-output-buffer)
-      (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"))
+    (insert
+     (with-temp-buffer
+       (set-buffer-multibyte nil)
+       (insert-buffer-substring pgg-output-buffer)
+       (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")
+       (buffer-string)))
     t))
 
 (defun mml1991-pgg-encrypt (cont &optional sign)
@@ -275,17 +278,20 @@ Whether the passphrase is cached at all is controlled by
     (let* ((pair (mml-secure-epg-sign 'OpenPGP 'clear))
           (signature (car pair)))
       (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"))
+      (insert
+       (with-temp-buffer
+        (set-buffer-multibyte nil)
+        (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")
+        (buffer-string)))
       t)))
 
 (defun mml1991-epg-encrypt (cont &optional sign)
index 61ca53624d3857d5e78ddcc845f84cace5279502..774821320f16556052259cf6ee669800cfba8e91 100644 (file)
@@ -32,6 +32,7 @@
 (require 'mm-util)
 (require 'mml)
 (require 'mml-sec)
+(require 'epg-config)
 
 (defvar mc-pgp-always-sign)
 
 ;; Maybe this should be in eg mml-sec.el (and have a different name).
 ;; Then mml1991 would not need to require mml2015, and mml1991-use
 ;; could be removed.
-(defvar mml2015-use (or
-                    (progn
-                      (ignore-errors (require 'epg-config))
-                      (and (fboundp 'epg-check-configuration)
-                          'epg))
-                    (progn
-                      (let ((abs-file (locate-library "pgg")))
-                        ;; Don't load PGG if it is marked as obsolete
-                        ;; (Emacs 24).
-                        (when (and abs-file
-                                   (not (string-match "/obsolete/[^/]*\\'"
-                                                      abs-file)))
-                          (ignore-errors (require 'pgg))
-                          (and (fboundp 'pgg-sign-region)
-                               'pgg))))
-                    (progn (ignore-errors
-                             (load "mc-toplev"))
-                           (and (fboundp 'mc-encrypt-generic)
-                                (fboundp 'mc-sign-generic)
-                                (fboundp 'mc-cleanup-recipient-headers)
-                                'mailcrypt)))
+(defvar mml2015-use 'epg
   "The package used for PGP/MIME.
 Valid packages include `epg', `pgg' and `mailcrypt'.")
 
@@ -482,14 +463,17 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
                        (or (y-or-n-p "Sign the message? ")
                            'not))))
             'never)))
-    (mm-with-unibyte-current-buffer
-      (mc-encrypt-generic
-       (or (message-options-get 'message-recipients)
-          (message-options-set 'message-recipients
-                             (mc-cleanup-recipient-headers
-                              (read-string "Recipients: "))))
-       nil nil nil
-       (message-options-get 'message-sender))))
+    (insert
+     (with-temp-buffer
+       (set-buffer-multibyte nil)
+       (mc-encrypt-generic
+       (or (message-options-get 'message-recipients)
+           (message-options-set 'message-recipients
+                                (mc-cleanup-recipient-headers
+                                 (read-string "Recipients: "))))
+       nil nil nil
+       (message-options-get 'message-sender))
+       (buffer-string))))
   (goto-char (point-min))
   (unless (looking-at "-----BEGIN PGP MESSAGE-----")
     (error "Fail to encrypt the message"))
@@ -614,7 +598,7 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
            (insert "\r"))
          (forward-line)
          (end-of-line))
-       (with-temp-file (setq signature-file (mm-make-temp-file "pgg"))
+       (with-temp-file (setq signature-file (make-temp-file "pgg"))
          (mm-insert-part signature))
        (if (condition-case err
                (prog1
@@ -655,7 +639,7 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
     (if (condition-case err
            (prog1
                (mm-with-unibyte-buffer
-                 (insert (mm-encode-coding-string text coding-system))
+                 (insert (encode-coding-string text coding-system))
                  (pgg-verify-region (point-min) (point-max) nil t))
              (goto-char (point-min))
              (while (search-forward "\r\n" nil t)
@@ -775,12 +759,10 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
 (autoload 'epg-expand-group "epg-config")
 (autoload 'epa-select-keys "epa")
 
-(autoload 'gnus-create-image "gnus-ems")
-
 (defun mml2015-epg-key-image (key-id)
   "Return the image of a key, if any"
   (with-temp-buffer
-    (mm-set-buffer-multibyte nil)
+    (set-buffer-multibyte nil)
     (let* ((coding-system-for-write 'binary)
            (coding-system-for-read 'binary)
            (data (shell-command-to-string
@@ -920,7 +902,7 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
        (mm-set-handle-multipart-parameter
         mm-security-handle 'gnus-info "Corrupted")
        (throw 'error handle))
-      (setq part (mm-replace-in-string part "\n" "\r\n")
+      (setq part (replace-regexp-in-string "\n" "\r\n" part)
            signature (mm-get-part signature)
            context (epg-make-context))
       (condition-case error
@@ -943,8 +925,8 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
 (defun mml2015-epg-clear-verify ()
   (let ((inhibit-redisplay t)
        (context (epg-make-context))
-       (signature (mm-encode-coding-string (buffer-string)
-                                           coding-system-for-write))
+       (signature (encode-coding-string (buffer-string)
+                                        coding-system-for-write))
        plain)
     (condition-case error
        (setq plain (epg-verify-string context signature))
@@ -963,7 +945,7 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
           (mml2015-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)))
+         (insert (decode-coding-string plain coding-system-for-read)))
       (mml2015-extract-cleartext-signature))))
 
 (defun mml2015-epg-sign (cont)
index 9245396149a3d25a1ef6835b6cf6cf5e1a8a5594..71229dd9394da70599844d7fae0c5b0f09c3c1c8 100644 (file)
 (require 'gnus-start)
 (require 'gnus-sum)
 
-;; Compatibility Functions  =================================================
-
-(eval-and-compile
-  (if (fboundp 'signal-error)
-      (defun nndiary-error (&rest args)
-       (apply #'signal-error 'nndiary args))
-    (defun nndiary-error (&rest args)
-      (apply #'error args))))
-
-
 ;; Back End behavior customization ===========================================
 
 (defgroup nndiary nil
@@ -1157,12 +1147,12 @@ all.  This may very well take some time.")
   ;; within the specified bounds.
   ;; Signals are caught by `nndiary-schedule'.
   (if (not (string-match "^[ \t]*[0-9]+[ \t]*$" str))
-      (nndiary-error "not an integer value")
+      (error "Not an integer value")
     ;; else
     (let ((val (string-to-number str)))
       (and (or (< val min)
               (and max (> val max)))
-          (nndiary-error "value out of range"))
+          (error "Value out of range"))
       val)))
 
 (defun nndiary-parse-schedule-value (str min-or-values max)
@@ -1179,7 +1169,7 @@ all.  This may very well take some time.")
                        (match-string 1 str))))
          (if (and val (setq val (assoc val min-or-values)))
              (list (cadr val))
-           (nndiary-error "invalid syntax")))
+           (error "Invalid syntax")))
       ;; min-or-values is min
       (mapcar
        (lambda (val)
@@ -1199,7 +1189,7 @@ all.  This may very well take some time.")
                     (t
                      (cons end beg)))))
            (t
-            (nndiary-error "invalid syntax")))
+            (error "Invalid syntax")))
           ))
        (split-string str ",")))
     ))
@@ -1214,7 +1204,7 @@ all.  This may very well take some time.")
   (let ((header (format "^X-Diary-%s: \\(.*\\)$" head)))
     (goto-char (point-min))
     (if (not (re-search-forward header nil t))
-       (nndiary-error "header missing")
+       (error "Header missing")
       ;; else
       (nndiary-parse-schedule-value (match-string 1) min-or-values max))
     ))
index f8fefeb4ae15790871f655b61c4c9ff35dd9e415..09260cf33d1c78332a67227f074bf61646472b86 100644 (file)
@@ -761,7 +761,7 @@ from the document.")
   (looking-at "JMF"))
 
 (defun nndoc-oe-dbx-type-p ()
-  (looking-at (mm-string-to-multibyte "\317\255\022\376")))
+  (looking-at (string-to-multibyte "\317\255\022\376")))
 
 (defun nndoc-read-little-endian ()
   (+ (prog1 (char-after) (forward-char 1))
index 5f57dd2bf7c3f7412cac70927acc5cd0bfc45658..f10b6fa3df8d4e0b4f5086c7920dc03b8608f2cd 100644 (file)
@@ -203,12 +203,7 @@ are generated if and only if they are also in `message-draft-headers'.")
     (setq buffer-file-name (expand-file-name file)
          buffer-auto-save-file-name (make-auto-save-file-name))
     (clear-visited-file-modtime)
-    (let ((hook (if (boundp 'write-contents-functions)
-                   'write-contents-functions
-                 'write-contents-hooks)))
-      (gnus-make-local-hook hook)
-      (add-hook hook 'nndraft-generate-headers nil t))
-    (gnus-make-local-hook 'after-save-hook)
+    (add-hook 'write-contents-functions 'nndraft-generate-headers nil t)
     (add-hook 'after-save-hook 'nndraft-update-unread-articles nil t)
     (message-add-action '(nndraft-update-unread-articles)
                        'exit 'postpone 'kill)
index e60a492062656a3b17b63984d0592db47dca3bbf..28561c0594676ab003f79fd2bce89ac122881f70 100644 (file)
@@ -284,7 +284,7 @@ included.")
 (defun nneething-encode-file-name (file &optional coding-system)
   "Encode the name of the FILE in CODING-SYSTEM."
   (let ((pos 0) buf)
-    (setq file (mm-encode-coding-string
+    (setq file (encode-coding-string
                file (or coding-system nnmail-pathname-coding-system)))
     (while (string-match "[^-0-9a-zA-Z_:/.]" file pos)
       (setq buf (cons (format "%%%02x" (aref file (match-beginning 0)))
@@ -300,7 +300,7 @@ included.")
       (setq buf (cons (string (string-to-number (match-string 1 file) 16))
                      (cons (substring file pos (match-beginning 0)) buf))
            pos (match-end 0)))
-    (mm-decode-coding-string
+    (decode-coding-string
      (apply (function concat)
            (nreverse (cons (substring file pos) buf)))
      (or coding-system nnmail-pathname-coding-system))))
index ee60e3e18f2deccdd199e52b6dcb1486eebfebc9..402ffba8c6e29310525aff9c657cc4e8c680f25d 100644 (file)
@@ -884,9 +884,7 @@ deleted.  Point is left where the deleted region was."
              (active (or (cadr (assoc group nnfolder-group-alist))
                          (cons 1 0)))
              (scantime (assoc group nnfolder-scantime-alist))
-             (minid (or (and (boundp 'most-positive-fixnum)
-                             most-positive-fixnum)
-                        (lsh -1 -1)))
+             (minid most-positive-fixnum)
              maxid start end newscantime
              novbuf articles newnum
              buffer-read-only)
@@ -1061,7 +1059,7 @@ This command does not work if you use short group names."
 (defun nnfolder-group-pathname (group)
   "Make file name for GROUP."
   (setq group
-       (mm-encode-coding-string group nnmail-pathname-coding-system))
+       (encode-coding-string group nnmail-pathname-coding-system))
   (let ((dir (file-name-as-directory (expand-file-name nnfolder-directory))))
     ;; If this file exists, we use it directly.
     (if (or nnmail-use-long-file-names
index cd43016014eede42be48bacc7432f1ebf69f5680..191a90892f3bac1c3f6ce42f98ae297a7828c9c4 100644 (file)
@@ -40,6 +40,7 @@
 (require 'mail-utils)
 (require 'mm-util)
 (require 'gnus-util)
+(require 'subr-x)
 (autoload 'gnus-range-add "gnus-range")
 (autoload 'gnus-remove-from-range "gnus-range")
 ;; FIXME none of these are used explicitly in this file.
@@ -621,8 +622,8 @@ the line could be found."
                        (< beg nnheader-max-head-length))))
        ;; Finally decode the contents.
        (when (mm-coding-system-p nnheader-file-coding-system)
-         (mm-decode-coding-region start (point-max)
-                                  nnheader-file-coding-system))))
+         (decode-coding-region start (point-max)
+                               nnheader-file-coding-system))))
     t))
 
 (defun nnheader-article-p ()
@@ -726,9 +727,7 @@ the line could be found."
     (string-match nnheader-numerical-short-files file)
     (string-to-number (match-string 0 file))))
 
-(defvar nnheader-directory-files-is-safe
-  (or (eq system-type 'windows-nt)
-      (not (featurep 'xemacs)))
+(defvar nnheader-directory-files-is-safe (not (eq system-type 'windows-nt))
   "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,
@@ -780,28 +779,8 @@ If FULL, translate everything."
                      2 0))
        ;; We translate -- but only the file name.  We leave the directory
        ;; alone.
-       (if (and (featurep 'xemacs)
-                (memq system-type '(windows-nt cygwin)))
-           ;; This is needed on NT and stuff, because
-           ;; file-name-nondirectory is not enough to split
-           ;; file names, containing ':', e.g.
-           ;; "d:\\Work\\News\\nntp+news.fido7.ru:fido7.ru.gnu.SCORE"
-           ;;
-           ;; we are trying to correctly split such names:
-           ;; "d:file.name" -> "a:" "file.name"
-           ;; "aaa:bbb.ccc" -> "" "aaa:bbb.ccc"
-           ;; "d:aaa\\bbb:ccc"   -> "d:aaa\\" "bbb:ccc"
-           ;; etc.
-           ;; to translate then only the file name part.
-           (progn
-             (setq leaf file
-                   path "")
-             (if (string-match "\\(^\\w:\\|[/\\]\\)\\([^/\\]+\\)$" file)
-                 (setq leaf (substring file (match-beginning 2))
-                       path (substring file 0 (match-beginning 2)))))
-         ;; Emacs DTRT, says andrewi.
-         (setq leaf (file-name-nondirectory file)
-               path (file-name-directory file))))
+       (setq leaf (file-name-nondirectory file)
+             path (file-name-directory file)))
       (setq len (length leaf))
       (while (< i len)
        (when (setq trans (cdr (assq (aref leaf i)
@@ -842,7 +821,7 @@ without formatting."
     t))
 
 (defsubst nnheader-replace-chars-in-string (string from to)
-  (mm-subst-char-in-string from to string))
+  (subst-char-in-string from to string))
 
 (defun nnheader-replace-duplicate-chars-in-string (string from to)
   "Replace characters in STRING from FROM to TO."
@@ -898,7 +877,7 @@ without formatting."
       (if (file-directory-p (concat dir group))
          (expand-file-name group dir)
        ;; If not, we translate dots into slashes.
-       (expand-file-name (mm-encode-coding-string
+       (expand-file-name (encode-coding-string
                           (nnheader-replace-chars-in-string group ?. ?/)
                           nnheader-pathname-coding-system)
                          dir))))
@@ -1002,14 +981,8 @@ See `find-file-noselect' for the arguments."
           (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))
-          (val (symbol-value ffh)))
-    (set ffh nil)
-    (unwind-protect
-       (apply 'find-file-noselect args)
-      (set ffh val))))
+         (find-file-hook nil))
+    (apply 'find-file-noselect args)))
 
 (defun nnheader-directory-regular-files (dir)
   "Return a list of all regular files in DIR."
@@ -1098,16 +1071,14 @@ See `find-file-noselect' for the arguments."
 
 (defmacro nnheader-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))))
+  `(if enable-multibyte-characters
+       (insert (with-current-buffer ,buffer
+                (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)))
 
 (defvar nnheader-last-message-time '(0 0))
 (defun nnheader-message-maybe (&rest args)
@@ -1116,9 +1087,6 @@ See `find-file-noselect' for the arguments."
       (setq nnheader-last-message-time now)
       (apply 'nnheader-message args))))
 
-(when (featurep 'xemacs)
-  (require 'nnheaderxm))
-
 (run-hooks 'nnheader-load-hook)
 
 (provide 'nnheader)
index c285befc760369dcf68ba51bf079c7149d751470..2e2ec59aa5dfd255c9b4e0d5051d86345715bcc1 100644 (file)
 
 ;;; Code:
 
-(eval-and-compile
-  (require 'nnheader)
-  ;; In Emacs 24, `open-protocol-stream' is an autoloaded alias for
-  ;; `make-network-stream'.
-  (unless (fboundp 'open-protocol-stream)
-    (require 'proto-stream)))
-
 (eval-when-compile
   (require 'cl))
 
@@ -164,7 +157,8 @@ textual parts.")
     (forward "gnus-forward")))
 
 (defvar nnimap-quirks
-  '(("QRESYNC" "Zimbra" "QRESYNC ")))
+  '(("QRESYNC" "Zimbra" "QRESYNC ")
+    ("MOVE" "Dovecot" nil)))
 
 (defvar nnimap-inhibit-logging nil)
 
@@ -234,7 +228,7 @@ textual parts.")
          (delete-region (+ (match-beginning 0) 2) (point))
          (setq string (buffer-substring (point) (+ (point) size)))
          (delete-region (point) (+ (point) size))
-         (insert (format "%S" (mm-subst-char-in-string ?\n ?\s string))))
+         (insert (format "%S" (subst-char-in-string ?\n ?\s string))))
        (beginning-of-line)
        (setq article
              (and (re-search-forward "UID \\([0-9]+\\)" (line-end-position)
@@ -365,7 +359,7 @@ textual parts.")
        (with-current-buffer buffer
          (when (and nnimap-object
                     (nnimap-last-command-time nnimap-object)
-                    (> (gnus-float-time
+                    (> (float-time
                         (time-subtract
                          now
                          (nnimap-last-command-time nnimap-object)))
@@ -424,7 +418,7 @@ textual parts.")
       (when nnimap-server-port
        (push nnimap-server-port ports))
       (let* ((stream-list
-             (open-protocol-stream
+             (open-network-stream
               "*nnimap*" (current-buffer) nnimap-address
               (nnimap-map-port (car ports))
               :type nnimap-stream
@@ -437,7 +431,7 @@ textual parts.")
               :success " OK "
               :starttls-function
               (lambda (capabilities)
-                (when (gnus-string-match-p "STARTTLS" capabilities)
+                (when (string-match-p "STARTTLS" capabilities)
                   "1 STARTTLS\r\n"))))
             (stream (car stream-list))
             (props (cdr stream-list))
@@ -447,9 +441,7 @@ textual parts.")
        (when (and stream (not (memq (process-status stream) '(open run))))
          (setq stream nil))
 
-        (when (and (fboundp 'set-network-process-option) ;; Not in XEmacs.
-                   (fboundp 'process-type) ;; Emacs 22 doesn't provide it.
-                   (eq (process-type stream) 'network))
+        (when (eq (process-type stream) 'network)
           ;; Use TCP-keepalive so that connections that pass through a NAT
           ;; router don't hang when left idle.
           (set-network-process-option stream :keepalive t))
@@ -461,15 +453,15 @@ textual parts.")
              (nnheader-report 'nnimap "Unable to contact %s:%s via %s"
                               nnimap-address (car ports) nnimap-stream)
              'no-connect)
-         (gnus-set-process-query-on-exit-flag stream nil)
-         (if (not (gnus-string-match-p "[*.] \\(OK\\|PREAUTH\\)" greeting))
+         (set-process-query-on-exit-flag stream nil)
+         (if (not (string-match-p "[*.] \\(OK\\|PREAUTH\\)" greeting))
              (nnheader-report 'nnimap "%s" greeting)
            ;; Store the greeting (for debugging purposes).
            (setf (nnimap-greeting nnimap-object) greeting)
            (setf (nnimap-capabilities nnimap-object)
                  (mapcar #'upcase
                          (split-string capabilities)))
-           (unless (gnus-string-match-p "[*.] PREAUTH" greeting)
+           (unless (string-match-p "[*.] PREAUTH" greeting)
              (if (not (setq credentials
                             (if (eq nnimap-authenticator 'anonymous)
                                 (list "anonymous"
@@ -922,7 +914,8 @@ textual parts.")
   t)
 
 (deffoo nnimap-request-move-article (article group server accept-form
-                                            &optional _last internal-move-group)
+                                            &optional _last
+                                            internal-move-group)
   (setq group (nnimap-decode-gnus-group group))
   (when internal-move-group
     (setq internal-move-group (nnimap-decode-gnus-group internal-move-group)))
@@ -932,17 +925,19 @@ textual parts.")
                       'nnimap-request-head
                     'nnimap-request-article)
                   article group server (current-buffer))
-      ;; If the move is internal (on the same server), just do it the easy
-      ;; way.
+      ;; If the move is internal (on the same server), just do it the
+      ;; easy way.
       (let ((message-id (message-field-value "message-id")))
        (if internal-move-group
             (with-current-buffer (nnimap-buffer)
-              (let* ((can-move (nnimap-capability "MOVE"))
-                    (command (if can-move
-                                 "UID MOVE %d %S"
-                               "UID COPY %d %S"))
-                    (result (nnimap-command command article
-                                            (utf7-encode internal-move-group t))))
+              (let* ((can-move (and (nnimap-capability "MOVE")
+                                   (equal (nnimap-quirk "MOVE") "MOVE")))
+                    (command (if can-move
+                                 "UID MOVE %d %S"
+                               "UID COPY %d %S"))
+                    (result (nnimap-command
+                             command article
+                             (utf7-encode internal-move-group t))))
                 (when (and (car result) (not can-move))
                   (nnimap-delete-article article))
                 (cons internal-move-group
@@ -951,11 +946,10 @@ textual parts.")
                            internal-move-group server message-id
                            nnimap-request-articles-find-limit)))))
          ;; Move the article to a different method.
-         (let ((result (eval accept-form)))
-           (when result
-             (nnimap-change-group group server)
-             (nnimap-delete-article article)
-             result)))))))
+         (when-let ((result (eval accept-form)))
+           (nnimap-change-group group server)
+           (nnimap-delete-article article)
+           result))))))
 
 (deffoo nnimap-request-expire-articles (articles group &optional server force)
   (setq group (nnimap-decode-gnus-group group))
@@ -1003,7 +997,8 @@ textual parts.")
       (and (nnimap-change-group group server)
           (with-current-buffer (nnimap-buffer)
             (nnheader-message 7 "Expiring articles from %s: %s" group articles)
-             (let ((can-move (nnimap-capability "MOVE")))
+             (let ((can-move (and (nnimap-capability "MOVE")
+                                 (equal (nnimap-quirk "MOVE") "MOVE"))))
                (nnimap-command
                 (if can-move
                     "UID MOVE %s %S"
@@ -1887,9 +1882,7 @@ Return the server's response to the SELECT or EXAMINE command."
   (let ((name "*imap log*"))
     (or (get-buffer name)
         (with-current-buffer (get-buffer-create name)
-          (when (boundp 'window-point-insertion-type)
-            (make-local-variable 'window-point-insertion-type)
-            (setq window-point-insertion-type t))
+         (setq-local window-point-insertion-type t)
           (current-buffer)))))
 
 (defun nnimap-log-command (command)
@@ -2076,7 +2069,8 @@ Return the server's response to the SELECT or EXAMINE command."
                                  nnmail-split-fancy))
          (nnmail-inhibit-default-split-group t)
          (groups (nnimap-get-groups))
-          (can-move (nnimap-capability "MOVE"))
+          (can-move (and (nnimap-capability "MOVE")
+                        (equal (nnimap-quirk "MOVE") "MOVE")))
          new-articles)
       (erase-buffer)
       (nnimap-command "SELECT %S" nnimap-inbox)
index 560ba8ad2e5e9a12fb1d566ee7f795865966340b..6c2d11396cb549a095dbab9f03e6de21d00bfc1e 100644 (file)
@@ -928,9 +928,10 @@ ready to be added to the list of search results."
 
     ;; Set group to dirnam without any leading dots or slashes,
     ;; and with all subsequent slashes replaced by dots
-    (let ((group (gnus-replace-in-string
-                 (gnus-replace-in-string dirnam "^[./\\]" "" t)
-                 "[/\\]" "." t)))
+    (let ((group (replace-regexp-in-string
+                 "[/\\]" "."
+                 (replace-regexp-in-string "^[./\\]" "" dirnam nil t)
+                 nil t)))
 
     (vector (gnus-group-full-name group server)
            (if (string-match "\\`nnmaildir:" (gnus-group-server server))
@@ -1340,9 +1341,10 @@ Tested with swish-e-2.0.1 on Windows NT 4.0."
            ;; eliminate all ".", "/", "\" from beginning. Always matches.
             (string-match "^[./\\]*\\(.*\\)$" dirnam)
             ;; "/" -> "."
-            (setq group (gnus-replace-in-string (match-string 1 dirnam) "/" "."))
+            (setq group (replace-regexp-in-string
+                        "/" "." (match-string 1 dirnam)))
             ;; Windows "\\" -> "."
-            (setq group (gnus-replace-in-string group "\\\\" "."))
+            (setq group (replace-regexp-in-string "\\\\" "." group))
 
             (push (vector (gnus-group-full-name group server)
                           (string-to-number artno)
@@ -1414,7 +1416,7 @@ Tested with swish-e-2.0.1 on Windows NT 4.0."
        (when (string-match prefix dirnam)
          (setq dirnam (replace-match "" t t dirnam)))
        (push (vector (gnus-group-full-name
-                       (gnus-replace-in-string dirnam "/" ".") server)
+                       (replace-regexp-in-string "/" "." dirnam) server)
                      (string-to-number artno)
                      (string-to-number score))
              artlist))
@@ -1612,9 +1614,9 @@ actually)."
                                  group
                                (if (file-directory-p
                                     (setq group
-                                          (gnus-replace-in-string
-                                           group
-                                           "\\." "/" t)))
+                                          (replace-regexp-in-string
+                                           "\\." "/"
+                                           group nil t)))
                                    group))))))
                     (unless group
                       (error "Cannot locate directory for group"))
@@ -1667,7 +1669,7 @@ actually)."
             (server (cadr (gnus-server-to-method srv)))
             (groupspec (mapconcat
                         (lambda (x)
-                          (if (gnus-string-match-p "gmane" x)
+                          (if (string-match-p "gmane" x)
                               (format "group:%s" (gnus-group-short-name x))
                             (error "Can't search non-gmane groups: %s" x)))
                           groups " "))
@@ -1688,8 +1690,8 @@ actually)."
            (mm-url-encode-www-form-urlencoded
             `(("query" . ,search)
               ("HITSPERPAGE" . "999")))))
-         (unless (featurep 'xemacs) (set-buffer-multibyte t))
-         (mm-decode-coding-region (point-min) (point-max) 'utf-8)
+         (set-buffer-multibyte t)
+         (decode-coding-region (point-min) (point-max) 'utf-8)
          (goto-char (point-min))
          (forward-line 1)
          (while (not (eobp))
@@ -1705,7 +1707,7 @@ actually)."
                      (string-to-number (match-string 2 xref)) xscore)
                     artlist)))))
            (forward-line 1)))
-       (apply 'vector (nreverse (mm-delete-duplicates artlist)))))
+       (apply 'vector (nreverse (delete-dups artlist)))))
 
 ;;; Util Code:
 
@@ -1787,7 +1789,7 @@ article came from is also searched."
          (list (list (gnus-method-to-server
           (gnus-find-method-for-group gnus-newsgroup-name)))))
         (registry-group (and
-                         (gnus-bound-and-true-p 'gnus-registry-enabled)
+                         (bound-and-true-p gnus-registry-enabled)
                          (car (gnus-registry-get-id-key
                                (mail-header-id header) 'group))))
         (registry-server
@@ -1814,18 +1816,19 @@ article came from is also searched."
        (if (eq (car method) 'nntp)
            (while (not (eobp))
              (ignore-errors
-               (push (mm-string-as-unibyte
+               (push (string-as-unibyte
                       (gnus-group-full-name
                        (buffer-substring
                         (point)
                         (progn
                           (skip-chars-forward "^ \t")
-                          (point))) method))
+                          (point)))
+                       method))
                      groups))
              (forward-line))
          (while (not (eobp))
            (ignore-errors
-             (push (mm-string-as-unibyte
+             (push (string-as-unibyte
                     (if (eq (char-after) ?\")
                         (gnus-group-full-name (read cur) method)
                       (let ((p (point)) (name ""))
@@ -1859,7 +1862,7 @@ article came from is also searched."
   (when (eq (car (gnus-find-method-for-group gnus-newsgroup-name)) 'nnir)
     (setq gnus-summary-line-format
          (or nnir-summary-line-format gnus-summary-line-format))
-    (when (gnus-bound-and-true-p 'gnus-registry-enabled)
+    (when (bound-and-true-p gnus-registry-enabled)
       (remove-hook 'gnus-summary-article-delete-hook 'gnus-registry-action t)
       (remove-hook 'gnus-summary-article-move-hook 'gnus-registry-action t)
       (remove-hook 'gnus-summary-article-expire-hook 'gnus-registry-action t)
index 3d4178d1022478d50979bd254d4e1db197f09c25..94589e1734d5183748a19a8f31fbf92e72015720 100644 (file)
@@ -368,34 +368,7 @@ messages will be shown to indicate the current status."
   :type '(choice (const :tag "infinite" nil)
                  (number :tag "count")))
 
-(define-widget 'nnmail-lazy 'default
-  "Base widget for recursive data structures.
-
-This is copy of the `lazy' widget in Emacs 22.1 provided for compatibility."
-  :format "%{%t%}: %v"
-  :convert-widget 'widget-value-convert-widget
-  :value-create (lambda (widget)
-                  (let ((value (widget-get widget :value))
-                        (type (widget-get widget :type)))
-                    (widget-put widget :children
-                                (list (widget-create-child-value
-                                       widget (widget-convert type) value)))))
-  :value-delete 'widget-children-value-delete
-  :value-get (lambda (widget)
-               (widget-value (car (widget-get widget :children))))
-  :value-inline (lambda (widget)
-                  (widget-apply (car (widget-get widget :children))
-                                :value-inline))
-  :default-get (lambda (widget)
-                 (widget-default-get
-                  (widget-convert (widget-get widget :type))))
-  :match (lambda (widget value)
-           (widget-apply (widget-convert (widget-get widget :type))
-                         :match value))
-  :validate (lambda (widget)
-              (widget-apply (car (widget-get widget :children)) :validate)))
-
-(define-widget 'nnmail-split-fancy 'nnmail-lazy
+(define-widget 'nnmail-split-fancy 'lazy
   "Widget for customizing splits in the variable of the same name."
   :tag "Split"
   :type '(menu-choice :value (any ".*value.*" "misc")
@@ -628,14 +601,7 @@ using different case (i.e. mailing-list@domain vs Mailing-List@Domain)."
   mm-text-coding-system
   "Coding system used in reading inbox")
 
-(defvar nnmail-pathname-coding-system
-  ;; This causes Emacs 22.2 and 22.3 to issue a useless warning.
-  ;;(if (and (featurep 'xemacs) (featurep 'file-coding))
-  (if (featurep 'xemacs)
-      (if (featurep 'file-coding)
-         ;; Work around a bug in many XEmacs 21.5 betas.
-         ;; Cf. http://thread.gmane.org/gmane.emacs.gnus.general/68134
-         (setq file-name-coding-system (coding-system-aliasee 'file-name))))
+(defvar nnmail-pathname-coding-system nil
   "*Coding system for file name.")
 
 (defun nnmail-find-file (file)
@@ -697,7 +663,7 @@ nn*-request-list should have been called before calling this function."
              (setq group (symbol-name group)))
            (if (and (numberp (setq max (read buffer)))
                     (numberp (setq min (read buffer))))
-               (push (list (mm-string-as-unibyte group) (cons min max))
+               (push (list (string-as-unibyte group) (cons min max))
                      group-assoc)))
        (error nil))
       (widen)
@@ -1173,7 +1139,7 @@ FUNC will be called with the group name to determine the article number."
                        5 "Error in `nnmail-split-methods'; using `bogus' mail group: %S" error-info)
                       (sit-for 1)
                       '("bogus")))))
-             (setq split (mm-delete-duplicates split))
+             (setq split (delete-dups split))
              ;; The article may be "cross-posted" to `junk'.  What
              ;; to do?  Just remove the `junk' spec.  Don't really
              ;; see anything else to do...
@@ -1279,9 +1245,9 @@ Return the number of characters in the body."
     (insert (format "Xref: %s" (system-name)))
     (while group-alist
       (insert (if (mm-multibyte-p)
-                 (mm-string-as-multibyte
+                 (string-as-multibyte
                   (format " %s:%d" (caar group-alist) (cdar group-alist)))
-               (mm-string-as-unibyte
+               (string-as-unibyte
                 (format " %s:%d" (caar group-alist) (cdar group-alist)))))
       (setq group-alist (cdr group-alist)))
     (insert "\n")))
@@ -1957,10 +1923,8 @@ If TIME is nil, then return the cutoff time for oldness instead."
        ((and (equal header 'to-from)
             (or (string-match (cadr regexp-target-pair) from)
                 (and (string-match (cadr regexp-target-pair) to)
-                     (let* ((mail-dont-reply-to-names
-                             (message-dont-reply-to-names))
-                            (rmail-dont-reply-to-names ; obsolete since 24.1
-                             mail-dont-reply-to-names))
+                     (let ((mail-dont-reply-to-names
+                            (message-dont-reply-to-names)))
                        (equal (if (fboundp 'rmail-dont-reply-to)
                                   (rmail-dont-reply-to from)
                                 (mail-dont-reply-to from)) "")))))
@@ -2054,13 +2018,13 @@ If TIME is nil, then return the cutoff time for oldness instead."
     (error "No current split history"))
   (with-output-to-temp-buffer "*nnmail split history*"
     (with-current-buffer standard-output
-      (fundamental-mode))              ; for Emacs 20.4+
-      (dolist (elem nnmail-split-history)
-       (princ (mapconcat (lambda (ga)
-                           (concat (car ga) ":" (int-to-string (cdr ga))))
-                         elem
-                         ", "))
-       (princ "\n"))))
+      (fundamental-mode))
+    (dolist (elem nnmail-split-history)
+      (princ (mapconcat (lambda (ga)
+                         (concat (car ga) ":" (int-to-string (cdr ga))))
+                       elem
+                       ", "))
+      (princ "\n"))))
 
 (defun nnmail-purge-split-history (group)
   "Remove all instances of GROUP from `nnmail-split-history'."
index 3d8926b69259685040b88fddd8124ae83be54f62..cebdc95876fec189765e3b6a47f1ee2a1987d87e 100644 (file)
@@ -97,14 +97,14 @@ See `nnmaildir-flag-mark-mapping'."
 
 (defun nnmaildir--ensure-suffix (filename)
   "Ensure that FILENAME contains the suffix \":2,\"."
-  (if (gnus-string-match-p ":2," filename)
+  (if (string-match-p ":2," filename)
       filename
     (concat filename ":2,")))
 
 (defun nnmaildir--add-flag (flag suffix)
   "Return a copy of SUFFIX where FLAG is set.
 SUFFIX should start with \":2,\"."
-  (unless (gnus-string-match-p "^:2," suffix)
+  (unless (string-match-p "^:2," suffix)
     (error "Invalid suffix `%s'" suffix))
   (let* ((flags (substring suffix 3))
         (flags-as-list (append flags nil))
@@ -117,7 +117,7 @@ SUFFIX should start with \":2,\"."
 (defun nnmaildir--remove-flag (flag suffix)
   "Return a copy of SUFFIX where FLAG is cleared.
 SUFFIX should start with \":2,\"."
-  (unless (gnus-string-match-p "^:2," suffix)
+  (unless (string-match-p "^:2," suffix)
     (error "Invalid suffix `%s'" suffix))
   (let* ((flags (substring suffix 3))
         (flags-as-list (append flags nil))
@@ -537,8 +537,8 @@ by nnmaildir-request-article.")
        (prin1 (vector storage-version num msgid nov) (current-buffer))
        (setq file (concat novfile ":"))
        (nnmaildir--unlink file)
-       (gmm-write-region (point-min) (point-max) file nil 'no-message nil
-                         'excl))
+       (write-region (point-min) (point-max) file nil 'no-message nil
+                     'excl))
       (rename-file file novfile 'replace)
       (setf (nnmaildir--art-msgid article) msgid)
       nov)))
@@ -656,13 +656,13 @@ by nnmaildir-request-article.")
   (if (zerop n) 1 (1- (lsh 1 (1+ (logb n))))))
 
 (defun nnmaildir--system-name ()
-  (gnus-replace-in-string
-   (gnus-replace-in-string
-    (gnus-replace-in-string
-     (system-name)
-     "\\\\" "\\134" 'literal)
-    "/" "\\057" 'literal)
-   ":" "\\072" 'literal))
+  (replace-regexp-in-string
+   ":" "\\072"
+   (replace-regexp-in-string
+    "/" "\\057"
+    (replace-regexp-in-string "\\\\" "\\134" (system-name) nil 'literal)
+    nil 'literal)
+   nil 'literal))
 
 (defun nnmaildir-request-type (_group &optional _article)
   'mail)
@@ -848,11 +848,11 @@ by nnmaildir-request-article.")
              (when (or
                     ;; first look for marks in suffix, if it's valid...
                     (when (and (stringp suffix)
-                               (gnus-string-prefix-p ":2," suffix))
+                               (string-prefix-p ":2," suffix))
                       (or
-                       (not (gnus-string-match-p
+                       (not (string-match-p
                              (string (nnmaildir--mark-to-flag 'read)) suffix))
-                       (gnus-string-match-p
+                       (string-match-p
                         (string (nnmaildir--mark-to-flag 'tick)) suffix)))
                     ;; then look in marks directories
                     (not (file-exists-p (concat cdir prefix)))
@@ -955,8 +955,9 @@ by nnmaildir-request-article.")
                        pgname (nnmaildir--pgname nnmaildir--cur-server pgname)
                        group (symbol-value group)
                        ro (nnmaildir--param pgname 'read-only))
-                 (insert (gnus-replace-in-string
-                          (nnmaildir--grp-name group) " " "\\ " t)
+                 (insert (replace-regexp-in-string
+                          " " "\\ "
+                          (nnmaildir--grp-name group) nil t)
                          " ")
                   (princ (nnmaildir--group-maxnum nnmaildir--cur-server group)
                         nntp-server-buffer)
@@ -985,7 +986,7 @@ by nnmaildir-request-article.")
          (princ (nnmaildir--group-maxnum nnmaildir--cur-server group)
                 nntp-server-buffer)
          (insert " "
-                 (gnus-replace-in-string gname " " "\\ " t)
+                 (replace-regexp-in-string " " "\\ " gname nil t)
                  "\n")))))
   'group)
 
@@ -1116,7 +1117,7 @@ by nnmaildir-request-article.")
        (insert " ")
        (princ (nnmaildir--group-maxnum nnmaildir--cur-server group)
               nntp-server-buffer)
-       (insert " " (gnus-replace-in-string gname " " "\\ " t) "\n")
+       (insert " " (replace-regexp-in-string " " "\\ " gname nil t) "\n")
        t))))
 
 (defun nnmaildir-request-create-group (gname &optional server _args)
@@ -1278,7 +1279,7 @@ by nnmaildir-request-article.")
              (insert "\t" (nnmaildir--nov-get-beg nov) "\t"
                      (nnmaildir--art-msgid article) "\t"
                      (nnmaildir--nov-get-mid nov) "\tXref: nnmaildir "
-                     (gnus-replace-in-string gname " " "\\ " t) ":")
+                     (replace-regexp-in-string " " "\\ " gname nil t) ":")
              (princ num nntp-server-buffer)
              (insert "\t" (nnmaildir--nov-get-end nov) "\n"))))
     (catch 'return
@@ -1396,8 +1397,8 @@ by nnmaildir-request-article.")
              (concat "File exists: " tmpfile))
        (throw 'return nil))
       (with-current-buffer buffer
-       (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
-                         'excl))
+       (write-region (point-min) (point-max) tmpfile nil 'no-message nil
+                     'excl))
       (unix-sync) ;; no fsync :(
       (rename-file tmpfile (concat (nnmaildir--cur dir) file suffix) 'replace)
       t)))
@@ -1490,8 +1491,8 @@ by nnmaildir-request-article.")
                                  (throw 'return nil))))
       (condition-case nil (add-name-to-file nnmaildir--file tmpfile)
        (error
-        (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
-                          'excl)
+        (write-region (point-min) (point-max) tmpfile nil 'no-message nil
+                      'excl)
         (when (fboundp 'unix-sync)
           (unix-sync)))) ;; no fsync :(
       (nnheader-cancel-timer 24h)
index d5fa4fa74b4a552927a441df503bceb92d6e7070..128f912327cec9b6a81ac43553dd65d04319e6ad 100644 (file)
 
 ;;; === Keymaps
 
-(eval-when-compile
-  (when (featurep 'xemacs)
-    ;; The `kbd' macro requires that the `read-kbd-macro' macro is available.
-    (require 'edmacro)))
-
 ;; Group mode
 (defun nnmairix-group-mode-hook ()
   "Nnmairix group mode keymap."
@@ -1635,7 +1630,7 @@ search in raw mode."
 
 (defun nnmairix-determine-original-group-from-registry (mid)
   "Try to determine original group for message-id MID from the registry."
-  (when (gnus-bound-and-true-p 'gnus-registry-enabled)
+  (when (bound-and-true-p gnus-registry-enabled)
     (unless (string-match "^<" mid)
       (set mid (concat "<" mid)))
     (unless (string-match ">$" mid)
index c60e84567f77f648f5875c14ec051b13b0f3bfd0..51048bb29982cf4577187e2fb0bbed782d469b25 100644 (file)
@@ -242,8 +242,8 @@ as unread by Gnus.")
              (file-truename (file-name-as-directory
                              (expand-file-name nnmh-toplev))))
             dir)
-           (mm-string-to-multibyte ;Why?  Isn't it multibyte already?
-            (mm-encode-coding-string
+           (string-to-multibyte ;Why?  Isn't it multibyte already?
+            (encode-coding-string
              (nnheader-replace-chars-in-string
               (substring dir (match-end 0))
               ?/ ?.)
index 3350933f9499caaf8d0d5ddaa98e4ee114909b2a..4976f25795e83d84b9faa6f51f051ca275e985ff 100644 (file)
@@ -128,13 +128,13 @@ non-nil.")
   "Return a decoded group name of GROUP on SERVER-OR-METHOD."
   (if nnmail-group-names-not-encoded-p
       group
-    (mm-decode-coding-string
+    (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
+  (encode-coding-string
    group
    (nnml-group-name-charset group server-or-method)))
 
@@ -1077,8 +1077,7 @@ Use the nov database for the current group if available."
                ;; 1/ Move the article to a new file:
                (let* ((oldfile (nnml-article-to-file old-number))
                       (newfile
-                       (gnus-replace-in-string
-                        oldfile
+                       (replace-regexp-in-string
                         ;; 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
@@ -1087,7 +1086,8 @@ Use the nov database for the current group if available."
                         ;; value.
                         (concat
                          "\\(" old-number-string "\\)\\(\\(\\.[a-z0-9]+\\)?\\)$")
-                        (concat new-number-string "\\2"))))
+                        (concat new-number-string "\\2")
+                        oldfile)))
                  (with-current-buffer nntp-server-buffer
                    (nnmail-find-file oldfile)
                    ;; Update the Xref header in the article itself:
index c17a13c54c3250b4f507b66d6098fe5899ff28c9..6168e5a281b1cf64172ebf791279e60a9e62f5d4 100644 (file)
 (require 'mm-url)
 (require 'rfc2047)
 (require 'mml)
-(eval-when-compile
-  (ignore-errors
-   (require 'xml)))
-(eval '(require 'xml))
+(require 'xml)
 
 (nnoo-declare nnrss)
 
@@ -114,11 +111,11 @@ for decoding when the cdr that the data specify is not available.")
 ;;; Interface functions
 
 (defsubst nnrss-format-string (string)
-  (gnus-replace-in-string string " *\n *" " "))
+  (replace-regexp-in-string " *\n *" " " string))
 
 (defun nnrss-decode-group-name (group)
   (if (and group (mm-coding-system-p 'utf-8))
-      (setq group (mm-decode-coding-string group 'utf-8))
+      (setq group (decode-coding-string group 'utf-8))
     group))
 
 (deffoo nnrss-retrieve-headers (articles &optional group server fetch-old)
@@ -243,7 +240,6 @@ for decoding when the cdr that the data specify is not available.")
                          (max 1 (/ (* (window-width window) 7) 8))))
                  (fill-region (point) (point-max))
                  (goto-char (point-max))
-                 ;; XEmacs version of `fill-region' inserts newline.
                  (unless (bolp)
                    (insert "\n"))))
              (when (or link enclosure)
@@ -295,7 +291,7 @@ for decoding when the cdr that the data specify is not available.")
                        (let ((rfc2047-encoding-type 'mime)
                              rfc2047-encode-max-chars)
                          (rfc2047-encode-string
-                          (gnus-replace-in-string group "[\t\n ]+" "_")))))
+                          (replace-regexp-in-string "[\t\n ]+" "_" group)))))
        (when nnrss-content-function
          (funcall nnrss-content-function e group article))))
     (cond
@@ -372,8 +368,6 @@ for decoding when the cdr that the data specify is not available.")
 (nnoo-define-skeleton nnrss)
 
 ;;; Internal functions
-(eval-when-compile (defun xml-rpc-method-call (&rest args)))
-
 (defun nnrss-get-encoding ()
   "Return an encoding attribute specified in the current xml contents.
 If `nnrss-compatible-encoding-alist' specifies the compatible encoding,
@@ -417,7 +411,7 @@ otherwise return nil."
       ;; Decode text according to the encoding attribute.
       (when (setq cs (nnrss-get-encoding))
        (insert (prog1
-                   (mm-decode-coding-string (buffer-string) cs)
+                   (decode-coding-string (buffer-string) cs)
                  (erase-buffer)
                  (mm-enable-multibyte))))
       (goto-char (point-min))
@@ -588,12 +582,11 @@ which RSS 2.0 allows."
   "")
 
 (defun nnrss-insert (url)
-  (mm-with-unibyte-current-buffer
-    (condition-case err
-       (mm-url-insert url)
-      (error (if (or debug-on-quit debug-on-error)
-                (signal (car err) (cdr err))
-              (message "nnrss: Failed to fetch %s" url))))))
+  (condition-case err
+      (mm-url-insert url)
+    (error (if (or debug-on-quit debug-on-error)
+              (signal (car err) (cdr err))
+            (message "nnrss: Failed to fetch %s" url)))))
 
 (defun nnrss-decode-entities-string (string)
   (if string
@@ -763,7 +756,7 @@ Read the file and attempt to subscribe to each Feed in the file."
 Export subscriptions to a buffer in OPML Format."
   (interactive)
   (with-current-buffer (get-buffer-create "*OPML Export*")
-    (mm-set-buffer-file-coding-system 'utf-8)
+    (set-buffer-file-coding-system 'utf-8)
     (insert "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
            "<!-- OPML generated by Emacs Gnus' nnrss.el -->\n"
            "<opml version=\"1.1\">\n"
@@ -810,10 +803,11 @@ It is useful when `(setq nnrss-use-local t)'."
                   (nnrss-node-just-text node)
                 node))
         (cleaned-text (if text
-                          (gnus-replace-in-string
-                           (gnus-replace-in-string
-                            text "^[\000-\037\177]+\\|^ +\\| +$" "")
-                           "\r\n" "\n"))))
+                          (replace-regexp-in-string
+                           "\r\n" "\n"
+                           (replace-regexp-in-string
+                            "^[\000-\037\177]+\\|^ +\\| +$" ""
+                            text)))))
     (if (string-equal "" cleaned-text)
        nil
       cleaned-text)))
@@ -959,6 +953,9 @@ Use Mark Pilgrim's `ultra-liberal rss locator'."
              ;;    4. check syndic8
              (nnrss-find-rss-via-syndic8 url))))))))
 
+(declare-function xml-rpc-method-call "ext:xml-rpc"
+                 (server-url method &rest params))
+
 (defun nnrss-find-rss-via-syndic8 (url)
   "Query syndic8 for the rss feeds it has for URL."
   (if (not (locate-library "xml-rpc"))
index 620b8acae0b4dcdc55b1958c34fb3df2ea9f71cf..9db68b15df2bc4b2311cea9b49d9e7d20c4b2a3e 100644 (file)
@@ -306,7 +306,7 @@ there.")
                          "\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] "))
                    (zerop (forward-line -1))))
        ;; We require nnheader which requires gnus-util.
-       (let ((seconds (gnus-float-time (date-to-time date)))
+       (let ((seconds (float-time (date-to-time date)))
              groups)
          ;; Go through lines and add the latest groups to a list.
          (while (and (looking-at "\\([^ ]+\\) +[0-9]+ ")
@@ -335,6 +335,7 @@ there.")
   (save-excursion
     (let* ((process-connection-type nil) ; t bugs out on Solaris
           (inews-buffer (generate-new-buffer " *nnspool post*"))
+          (buf (current-buffer))
           (proc
            (condition-case err
                (apply 'start-process "*nnspool inews*" inews-buffer
@@ -346,7 +347,11 @@ there.")
          ()
        (nnheader-report 'nnspool "")
        (set-process-sentinel proc 'nnspool-inews-sentinel)
-       (mm-with-unibyte-current-buffer
+       (with-temp-buffer
+         (set-buffer-multibyte nil)
+         (insert-buffer-substring buf)
+         (encode-coding-region (point-min) (point-max)
+                               nnspool-file-coding-system)
          (process-send-region proc (point-min) (point-max)))
        ;; We slap a condition-case around this, because the process may
        ;; have exited already...
index f56b04568c8379f6f24fa02c4013442cc16de952..fa5f0e6c5821e62c211ffc33b7f2870f81ccd190 100644 (file)
 
 ;;; Code:
 
-(eval-and-compile
-  ;; In Emacs 24, `open-protocol-stream' is an autoloaded alias for
-  ;; `make-network-stream'.
-  (unless (fboundp 'open-protocol-stream)
-    (require 'proto-stream)))
-
 (require 'nnheader)
 (require 'nnoo)
 (require 'gnus-util)
@@ -244,8 +238,7 @@ server there that you can connect to.  See also
 
 (defvoo nntp-connection-timeout nil
   "*Number of seconds to wait before an nntp connection times out.
-If this variable is nil, which is the default, no timers are set.
-NOTE: This variable is never seen to work in Emacs 20 and XEmacs 21.")
+If this variable is nil, which is the default, no timers are set.")
 
 (defvoo nntp-prepare-post-hook nil
   "*Hook run just before posting an article.  It is supposed to be used
@@ -344,16 +337,14 @@ retried once before actually displaying the error report."
 
 (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))))
+  `(let ((string (buffer-substring ,start ,end)))
+     (with-current-buffer ,buffer
+       (erase-buffer)
+       (insert (if enable-multibyte-characters
+                  (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."
@@ -1269,7 +1260,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
                           (nntp-open-ssl-stream tls)
                           (nntp-open-tls-stream tls))))
                (if (assoc nntp-open-connection-function map)
-                   (open-protocol-stream
+                   (open-network-stream
                     "nntpd" pbuffer nntp-address nntp-port-number
                     :type (cadr (assoc nntp-open-connection-function map))
                     :end-of-command "^\\([2345]\\|[.]\\).*\n"
@@ -1301,13 +1292,11 @@ If SEND-IF-FORCE, only send authinfo to the server if the
       (nntp-kill-buffer pbuffer))
     (when (and (buffer-name pbuffer)
               process)
-      (when (and (fboundp 'set-network-process-option) ;; Unavailable in XEmacs.
-                (fboundp 'process-type) ;; Emacs 22 doesn't provide it.
-                 (eq (process-type process) 'network))
+      (when (eq (process-type process) 'network)
         ;; Use TCP-keepalive so that connections that pass through a NAT router
         ;; don't hang when left idle.
         (set-network-process-option process :keepalive t))
-      (gnus-set-process-query-on-exit-flag process nil)
+      (set-process-query-on-exit-flag process nil)
       (if (and (nntp-wait-for process "^2.*\n" buffer nil t)
               (memq (process-status process) '(open run)))
          (prog1
index 925f65f8dda80d5e49724383f607009d52ed3758..7fc4464a06ad21e3e5f0ade2effc9f5348ac0b9b 100644 (file)
@@ -103,10 +103,9 @@ Valid types include `google', `dejanews', and `gmane'.")
   (with-current-buffer nntp-server-buffer
     (erase-buffer)
     (let (article header)
-      (mm-with-unibyte-current-buffer
-       (while (setq article (pop articles))
-         (when (setq header (cadr (assq article nnweb-articles)))
-           (nnheader-insert-nov header))))
+      (while (setq article (pop articles))
+       (when (setq header (cadr (assq article nnweb-articles)))
+         (nnheader-insert-nov header)))
       'nov)))
 
 (deffoo nnweb-request-scan (&optional group server)
@@ -153,8 +152,7 @@ Valid types include `google', `dejanews', and `gmane'.")
     (let* ((header (cadr (assq article nnweb-articles)))
           (url (and header (mail-header-xref header))))
       (when (or (and url
-                    (mm-with-unibyte-current-buffer
-                      (mm-url-insert url)))
+                    (mm-url-insert url))
                (and (stringp article)
                     (nnweb-definition 'id t)
                     (let ((fetch (nnweb-definition 'id))
@@ -164,8 +162,7 @@ Valid types include `google', `dejanews', and `gmane'.")
                       (when (and fetch art)
                         (setq url (format fetch
                                           (mm-url-form-encode-xwfu art)))
-                        (mm-with-unibyte-current-buffer
-                          (mm-url-insert url))
+                        (mm-url-insert url)
                         (if (nnweb-definition 'reference t)
                             (setq article
                                   (funcall (nnweb-definition
@@ -215,17 +212,16 @@ Valid types include `google', `dejanews', and `gmane'.")
 (defun nnweb-read-overview (group)
   "Read the overview of GROUP and build the map."
   (when (file-exists-p (nnweb-overview-file group))
-    (mm-with-unibyte-buffer
-      (nnheader-insert-file-contents (nnweb-overview-file group))
-      (goto-char (point-min))
-      (let (header)
-       (while (not (eobp))
-         (setq header (nnheader-parse-nov))
-         (forward-line 1)
-         (push (list (mail-header-number header)
-                     header (mail-header-xref header))
-               nnweb-articles)
-         (nnweb-set-hashtb header (car nnweb-articles)))))))
+    (nnheader-insert-file-contents (nnweb-overview-file group))
+    (goto-char (point-min))
+    (let (header)
+      (while (not (eobp))
+       (setq header (nnheader-parse-nov))
+       (forward-line 1)
+       (push (list (mail-header-number header)
+                   header (mail-header-xref header))
+             nnweb-articles)
+       (nnweb-set-hashtb header (car nnweb-articles))))))
 
 (defun nnweb-write-overview (group)
   "Write the overview file for GROUP."
@@ -386,8 +382,7 @@ Valid types include `google', `dejanews', and `gmane'.")
     (setq nnweb-articles
          (nconc nnweb-articles map))
     (when (setq header (cadar map))
-      (mm-with-unibyte-current-buffer
-       (mm-url-insert (mail-header-xref header)))
+      (mm-url-insert (mail-header-xref header))
       (caar map))))
 
 (defun nnweb-google-create-mapping ()
@@ -513,8 +508,8 @@ Valid types include `google', `dejanews', and `gmane'.")
        ;;("TOPDOC" . "1000")
        ))))
   (setq buffer-file-name nil)
-  (unless (featurep 'xemacs) (set-buffer-multibyte t))
-  (mm-decode-coding-region (point-min) (point-max) 'utf-8)
+  (set-buffer-multibyte t)
+  (decode-coding-region (point-min) (point-max) 'utf-8)
   t)
 
 (defun nnweb-gmane-identity (url)
index 403447f3963594d8b938c102f577c06a632f56ab..b5450a82bdd4bb86ade2ed41806bd97d835e486d 100644 (file)
 (defvar smiley-data-directory)
 
 (defcustom smiley-style
-  (if (or (and (fboundp 'face-attribute)
-              ;; In batch mode, attributes can be unspecified.
-              (condition-case nil
-                  (>= (face-attribute 'default :height) 160)
-                (error nil)))
-         (and (fboundp 'face-height)
-              (>= (face-height 'default) 14)))
+  (if (and (fboundp 'face-attribute)
+          ;; In batch mode, attributes can be unspecified.
+          (condition-case nil
+              (>= (face-attribute 'default :height) 160)
+            (error nil)))
       '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
+  :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))
@@ -179,7 +177,7 @@ regexp to replace with IMAGE.  IMAGE is the name of an image file in
   "Replace in the region `smiley-regexp-alist' matches with corresponding images.
 A list of images is returned."
   (interactive "r")
-  (when (gnus-graphic-display-p)
+  (when (display-graphic-p)
     (unless smiley-cached-regexp-alist
       (smiley-update-cache))
     (save-excursion
index d1077a96fc94ea81a93634317fbf949a59e83675..9bec58a46f25bfa77b044f7401d2f3be77a8f3c5 100644 (file)
 
 (require 'dig)
 
-(if (locate-library "password-cache")
-    (require 'password-cache)
-  (require 'password))
+(require 'password-cache)
 
 (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)
@@ -244,21 +229,6 @@ must be set in `ldap-host-parameters-alist'."
 
 (defvar smime-details-buffer "*OpenSSL output*")
 
-;; Use mm-util?
-(eval-and-compile
-  (defalias 'smime-make-temp-file
-    (if (fboundp 'make-temp-file)
-       'make-temp-file
-      (lambda (prefix &optional dir-flag) ;; Simple implementation
-       (expand-file-name
-        (make-temp-name prefix)
-        (if (fboundp 'temp-directory)
-            (temp-directory)
-          temporary-file-directory))))))
-
-;; Password dialog function
-(declare-function password-read-and-add "password-cache" (prompt &optional 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
@@ -301,7 +271,7 @@ key and certificate itself."
         (keyfile (or (car-safe keyfile) keyfile))
         (buffer (generate-new-buffer " *smime*"))
         (passphrase (smime-ask-passphrase (expand-file-name keyfile)))
-        (tmpfile (smime-make-temp-file "smime")))
+        (tmpfile (make-temp-file "smime")))
     (if passphrase
        (setenv "GNUS_SMIME_PASSPHRASE" passphrase))
     (prog1
@@ -335,7 +305,7 @@ have proper MIME tags.  CERTFILES is a list of filenames, each file
 is expected to contain of a PEM encoded certificate."
   (smime-new-details-buffer)
   (let ((buffer (generate-new-buffer " *smime*"))
-       (tmpfile (smime-make-temp-file "smime")))
+       (tmpfile (make-temp-file "smime")))
     (prog1
        (when (prog1
                  (apply 'smime-call-openssl-region b e (list buffer tmpfile)
@@ -431,7 +401,7 @@ in the buffer specified by `smime-details-buffer'."
   (smime-new-details-buffer)
   (let ((buffer (generate-new-buffer " *smime*"))
        CAs (passphrase (smime-ask-passphrase (expand-file-name keyfile)))
-       (tmpfile (smime-make-temp-file "smime")))
+       (tmpfile (make-temp-file "smime")))
     (if passphrase
        (setenv "GNUS_SMIME_PASSPHRASE" passphrase))
     (if (prog1
@@ -588,13 +558,9 @@ A string or a list of strings is returned."
   "Get certificate for MAIL from the ldap server at HOST."
   (let ((ldapresult
         (funcall
-         (if (featurep 'xemacs)
-             (progn
-               (require 'smime-ldap)
-               'smime-ldap-search)
-           (progn
-             (require 'ldap)
-             'ldap-search))
+         (progn
+           (require 'ldap)
+           'ldap-search)
          (concat "mail=" mail)
          host '("userCertificate") nil))
        (retbuf (generate-new-buffer (format "*certificate for %s*" mail)))
@@ -611,11 +577,11 @@ A string or a list of strings is returned."
                  (string= (substring (cadaar ldapresult) 0 3)
                           "MII"))
              (setq cert
-                   (smime-replace-in-string
-                    (cadaar ldapresult)
+                   (replace-regexp-in-string
                     (concat "\\(\n\\|\r\\|-----BEGIN CERTIFICATE-----\\|"
                             "-----END CERTIFICATE-----\\)")
-                    "" t))
+                    ""
+                    (cadaar ldapresult) nil t))
            (setq cert (base64-encode-string (cadaar ldapresult) t)))
          (insert "-----BEGIN CERTIFICATE-----\n")
          (let ((i 0) (len (length cert)))
index 0086dd14792cf4a9eb559060ba9155000581991d..88854e0425355fa2b855936e34d6c5db373108d1 100644 (file)
@@ -162,13 +162,13 @@ submitted at once.  Internal variable.")
         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/" "")
-          "/" ":"))))
+         (replace-regexp-in-string
+          "/" ":"
+          (replace-regexp-in-string
+           "^.*article.gmane.org/" ""
+           (replace-regexp-in-string
+            "/raw" ":silent"
+            (mail-header-xref (gnus-summary-article-header article))))))))
        (spam-report-gmane-use-article-number
        (spam-report-url-ping
         rpt-host
@@ -207,8 +207,8 @@ submitted at once.  Internal variable.")
            (when host
              (when (string-equal "permalink.gmane.org" host)
                (setq host rpt-host)
-               (setq report (gnus-replace-in-string
-                             report "/\\([0-9]+\\)$" ":\\1")))
+               (setq report (replace-regexp-in-string "/\\([0-9]+\\)$" ":\\1"
+                                                    report)))
              (setq url (format "http://%s%s" host report)))
            (if (not (and host report url))
                (gnus-message
@@ -227,7 +227,7 @@ the function specified by `spam-report-url-ping-function'."
 
 (defcustom spam-report-user-mail-address
   (and (stringp user-mail-address)
-       (gnus-replace-in-string user-mail-address "@" "<at>"))
+       (replace-regexp-in-string "@" "<at>" user-mail-address))
   "Mail address of this user used for spam reports to Gmane.
 This is initialized based on `user-mail-address'."
   :type '(choice string
@@ -255,7 +255,7 @@ This is initialized based on `user-mail-address'."
                 80))
          (error "Could not open connection to %s" host))
       (set-marker (process-mark tcp-connection) (point-min))
-      (gnus-set-process-query-on-exit-flag tcp-connection nil)
+      (set-process-query-on-exit-flag tcp-connection nil)
       (process-send-string
        tcp-connection
        (format "GET %s HTTP/1.1\nUser-Agent: %s\nHost: %s\n\n"
@@ -297,8 +297,7 @@ symbol `ask', query before flushing the queue file."
                (re-search-forward
                 "http://\\([^/]+\\)\\(/.*\\) *$" (point-at-eol) t))
       (let ((spam-report-gmane-wait
-            (zerop (% (mm-line-number-at-pos)
-                      spam-report-gmane-max-requests))))
+            (zerop (% (line-number-at-pos) spam-report-gmane-max-requests))))
        (gnus-message 6 "Reporting %s%s..."
                      (match-string 1) (match-string 2))
        (funcall spam-report-url-ping-function
@@ -307,7 +306,7 @@ symbol `ask', query before flushing the queue file."
     (if (or (eq keep nil)
            (and (eq keep 'ask)
                 (y-or-n-p
-                 (gnus-format-message
+                 (format-message
                   "Flush requests from `%s'? " (current-buffer)))))
        (progn
          (gnus-message 7 "Flushing request file `%s'"
index afcc54137d8fd23212d4021c2143969144f56d2b..23b4556c75925b36164a8d3c15e27ae6587abbbe 100644 (file)
@@ -493,18 +493,6 @@ where DIFF is the difference between SCORE and 0.5."
     (setcdr (nthcdr 14 result) nil)
     result))
 
-(eval-when-compile
-  (defmacro spam-stat-called-interactively-p (kind)
-    (condition-case nil
-       (progn
-         (eval '(called-interactively-p 'any))
-         ;; Emacs >=23.2
-         `(called-interactively-p ,kind))
-      ;; Emacs <23.2
-      (wrong-number-of-arguments '(called-interactively-p))
-      ;; XEmacs
-      (void-function '(interactive-p)))))
-
 (defun spam-stat-score-buffer ()
   "Return a score describing the spam-probability for this buffer.
 Add user supplied modifications if supplied."
@@ -522,7 +510,7 @@ Add user supplied modifications if supplied."
            (error nil)))
         (ans
          (if score1s (+ score0 score1s) score0)))
-    (when (spam-stat-called-interactively-p 'any)
+    (when (called-interactively-p 'any)
       (message "%S" ans))
     ans))
 
index ab0584fdcf6a26940701af8258d851742d093bb0..d3224004f15f65006191e50d19c4341babd1e328 100644 (file)
@@ -1199,19 +1199,19 @@ Note this has to be fast."
     (if header-content
         (cond
          ((eq header 'X-Spam-Status)
-          (string-to-number (gnus-replace-in-string
-                             header-content
+          (string-to-number (replace-regexp-in-string
                              spam-spamassassin-score-regexp
-                             "\\1")))
+                             "\\1"
+                             header-content)))
          ;; 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=" "")
-                             ",.*" "")))
+          (string-to-number (replace-regexp-in-string
+                             ",.*" ""
+                             (replace-regexp-in-string
+                              ".*spamicity=" ""
+                              header-content))))
          (t nil))
       nil)))
 
index 6e8a108b5068d9767e73e25b531638ec168c34b2..040152a2c9fc249ccc433d6eec7e6130d25d87de 100644 (file)
@@ -699,17 +699,23 @@ it is displayed along with the global value."
   (interactive
    (let ((v (variable-at-point))
         (enable-recursive-minibuffers t)
+         (orig-buffer (current-buffer))
         val)
-     (setq val (completing-read (if (symbolp v)
-                                   (format
-                                    "Describe variable (default %s): " v)
-                                 "Describe variable: ")
-                               obarray
-                               (lambda (vv)
-                                  (or (get vv 'variable-documentation)
-                                      (and (boundp vv) (not (keywordp vv)))))
-                               t nil nil
-                               (if (symbolp v) (symbol-name v))))
+     (setq val (completing-read
+                (if (symbolp v)
+                    (format
+                     "Describe variable (default %s): " v)
+                  "Describe variable: ")
+                obarray
+                (lambda (vv)
+                  ;; In case the variable only exists in the buffer
+                  ;; the command we switch back to that buffer before
+                  ;; we examine the variable.
+                  (with-current-buffer orig-buffer
+                    (or (get vv 'variable-documentation)
+                        (and (boundp vv) (not (keywordp vv))))))
+                t nil nil
+                (if (symbolp v) (symbol-name v))))
      (list (if (equal val "")
               v (intern val)))))
   (let (file-name)
@@ -758,9 +764,8 @@ it is displayed along with the global value."
            (unless valvoid
              (with-current-buffer standard-output
                (setq val-start-pos (point))
-               (princ "value is ")
-               (let ((from (point))
-                     (line-beg (line-beginning-position))
+               (princ "value is")
+               (let ((line-beg (line-beginning-position))
                      (print-rep
                       (let ((rep
                              (let ((print-quoted t))
@@ -769,17 +774,17 @@ it is displayed along with the global value."
                             (format-message "`%s'" rep)
                           rep))))
                  (if (< (+ (length print-rep) (point) (- line-beg)) 68)
-                     (insert print-rep)
+                     (insert " " print-rep)
                    (terpri)
                    (pp val)
-                   (if (< (point) (+ 68 (line-beginning-position 0)))
-                       (delete-region from (1+ from))
-                     (delete-region (1- from) from)))
+                    ;; Remove trailing newline.
+                    (delete-char -1))
                  (let* ((sv (get variable 'standard-value))
                         (origval (and (consp sv)
                                       (condition-case nil
                                           (eval (car sv))
-                                        (error :help-eval-error)))))
+                                        (error :help-eval-error))))
+                         from)
                    (when (and (consp sv)
                                (not (equal origval val))
                                (not (equal origval :help-eval-error)))
@@ -910,29 +915,35 @@ if it is given a local binding.\n"))))
                                             (buffer-file-name buffer)))
                                       (dir-locals-find-file
                                        (buffer-file-name buffer))))
-                          (dir-file t))
+                          (is-directory nil))
                      (princ (substitute-command-keys
                              "  This variable's value is directory-local"))
-                     (if (null file)
-                         (princ ".\n")
-                       (princ ", set ")
-                        (if (consp file) ; result from cache
-                            ;; If the cache element has an mtime, we
-                            ;; assume it came from a file.
-                            (if (nth 2 file)
-                                (setq file (expand-file-name
-                                            dir-locals-file (car file)))
-                              ;; Otherwise, assume it was set directly.
-                              (setq file (car file)
-                                    dir-file nil)))
-                       (princ (substitute-command-keys
-                                (if dir-file
-                                    "by the file\n  `"
-                                  "for the directory\n  `")))
+                      (when (consp file) ; result from cache
+                        ;; If the cache element has an mtime, we
+                        ;; assume it came from a file.
+                        (if (nth 2 file)
+                            ;; (car file) is a directory.
+                            (setq file (dir-locals--all-files (car file)))
+                          ;; Otherwise, assume it was set directly.
+                          (setq file (car file)
+                                is-directory t)))
+                      (if (null file)
+                          (princ ".\n")
+                        (princ ", set ")
+                        (princ (substitute-command-keys
+                                (cond
+                                 (is-directory "for the directory\n  `")
+                                 ;; Many files matched.
+                                 ((and (consp file) (cdr file))
+                                  (setq file (file-name-directory (car file)))
+                                  (format "by one of the\n  %s files in the directory\n  `"
+                                          dir-locals-file))
+                                 (t (setq file (car file))
+                                    "by the file\n  `"))))
                        (with-current-buffer standard-output
                          (insert-text-button
                           file 'type 'help-dir-local-var-def
-                          'help-args (list variable file)))
+                             'help-args (list variable file)))
                        (princ (substitute-command-keys "'.\n"))))
                  (princ (substitute-command-keys
                          "  This variable's value is file-local.\n"))))
@@ -1098,7 +1109,13 @@ BUFFER should be a buffer or a buffer name."
       (if (or (not (vectorp docs)) (/= (length docs) 95))
          (error "Invalid first extra slot in this category table\n"))
       (with-current-buffer standard-output
-       (insert "Legend of category mnemonics (see the tail for the longer description)\n")
+        (setq-default help-button-cache (make-marker))
+       (insert "Legend of category mnemonics ")
+        (insert-button "(longer descriptions at the bottom)"
+                       'action help-button-cache
+                       'follow-link t
+                       'help-echo "mouse-2, RET: show full legend")
+        (insert "\n")
        (let ((pos (point)) (items 0) lines n)
          (dotimes (i 95)
            (if (aref docs i) (setq items (1+ items))))
@@ -1125,6 +1142,7 @@ BUFFER should be a buffer or a buffer name."
                "character(s)\tcategory mnemonics\n"
                "------------\t------------------")
        (describe-vector table 'help-describe-category-set)
+        (set-marker help-button-cache (point))
        (insert "Legend of category mnemonics:\n")
        (dotimes (i 95)
          (let ((elt (aref docs i)))
index 7b95e5fb04e195373974dc2423904b1f9ade86e8..e008698618c73a5acbdbb180d5d62b5485a77c46 100644 (file)
@@ -202,6 +202,7 @@ The format is (FUNCTION ARGS...).")
                   (let ((location
                          (find-function-search-for-symbol fun type file)))
                     (pop-to-buffer (car location))
+                        (run-hooks 'find-function-after-hook)
                     (if (cdr location)
                         (goto-char (cdr location))
                       (message "Unable to find location in file"))))
@@ -231,6 +232,7 @@ The format is (FUNCTION ARGS...).")
                     (setq file (help-C-file-name var 'var)))
                   (let ((location (find-variable-noselect var file)))
                     (pop-to-buffer (car location))
+                    (run-hooks 'find-function-after-hook)
                     (if (cdr location)
                       (goto-char (cdr location))
                       (message "Unable to find location in file"))))
index 061daacfdd383ff10a243ccd6894cc121718e336..efbae39a002af155e80c87124cbd628f3d6b1de2 100644 (file)
@@ -613,7 +613,15 @@ temporarily enables it to allow getting help on disabled items and buttons."
           (when (null (cdr yank-menu))
             (setq saved-yank-menu (copy-sequence yank-menu))
             (menu-bar-update-yank-menu "(any string)" nil))
-          (setq key (read-key-sequence "Describe key (or click or menu item): "))
+           (while
+               (progn
+                 (setq key (read-key-sequence "Describe the following key, mouse click, or menu item: "))
+                 (and (vectorp key)
+                      (consp (aref key 0))
+                      (symbolp (car (aref key 0)))
+                      (string-match "\\(mouse\\|down\\|click\\|drag\\)"
+                                    (symbol-name (car (aref key 0))))
+                      (not (sit-for (/ double-click-time 1000.0) t)))))
           ;; Clear the echo area message (Bug#7014).
           (message nil)
           ;; If KEY is a down-event, read and discard the
@@ -750,7 +758,15 @@ temporarily enables it to allow getting help on disabled items and buttons."
           (when (null (cdr yank-menu))
             (setq saved-yank-menu (copy-sequence yank-menu))
             (menu-bar-update-yank-menu "(any string)" nil))
-          (setq key (read-key-sequence "Describe key (or click or menu item): "))
+           (while
+               (progn
+                 (setq key (read-key-sequence "Describe the following key, mouse click, or menu item: "))
+                 (and (vectorp key)
+                      (consp (aref key 0))
+                      (symbolp (car (aref key 0)))
+                      (string-match "\\(mouse\\|down\\|click\\|drag\\)"
+                                    (symbol-name (car (aref key 0))))
+                      (not (sit-for (/ double-click-time 1000.0) t)))))
           (list
            key
            (prefix-numeric-value current-prefix-arg)
@@ -930,14 +946,15 @@ documentation for the major and minor modes of that buffer."
              (let ((mode-function (nth 0 mode))
                    (pretty-minor-mode (nth 1 mode))
                    (indicator (nth 2 mode)))
-               (add-text-properties 0 (length pretty-minor-mode)
-                                    '(face bold) pretty-minor-mode)
                (save-excursion
                  (goto-char (point-max))
                  (princ "\n\f\n")
                  (push (point-marker) help-button-cache)
                  ;; Document the minor modes fully.
-                 (insert pretty-minor-mode)
+                  (insert-text-button
+                   pretty-minor-mode 'type 'help-function
+                   'help-args (list mode-function)
+                   'button '(t))
                  (princ (format " minor mode (%s):\n"
                                 (if (zerop (length indicator))
                                     "no indicator"
index cf54ea54d0bb9c0ada38b7de4af6791cdf6dbfd9..e12ec8aa6467f15d44316f4bb8e6016f47b1ca5e 100644 (file)
@@ -845,7 +845,7 @@ Loads the variable `hfy-rgb-txt-colour-map', which is used by
 (provide 'hfy-cmap)
 
 ;; Local Variables:
-;; generated-autoload-file: "htmlfontify.el"
+;; generated-autoload-file: "htmlfontify-loaddefs.el"
 ;; End:
 
 ;;; hfy-cmap.el ends here
index ec14e0b4329e75f8514a54995b31f5fb15a26c2e..549010dda034d0416b0b9e5042fead60f6cdf40a 100644 (file)
@@ -727,7 +727,7 @@ with completion and history."
     (font-lock-flush)))
 
 (defun hi-lock-find-patterns ()
-  "Find patterns in current buffer for hi-lock."
+  "Add patterns from the current buffer to the list of hi-lock patterns."
   (interactive)
   (unless (memq major-mode hi-lock-exclude-modes)
     (let ((all-patterns nil)
index fc309bd62eec829cd5097d596c1787885ffe3b32..431300c81c2360440b01d054dfff151b8a29b3c6 100644 (file)
@@ -90,6 +90,8 @@
 ;;  (`font-lock-fontify-region')
 (require 'cus-edit)
 
+(require 'htmlfontify-loaddefs)
+
 (defconst htmlfontify-version 0.21)
 
 (defconst hfy-meta-tags
@@ -2417,26 +2419,6 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'."
   (let ((file (hfy-initfile)))
     (load file 'NOERROR nil nil) ))
 
-\f
-;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" "e644ddae915ddb98c9b2f16ffa5a74b2")
-;;; Generated autoloads from hfy-cmap.el
-
-(autoload 'htmlfontify-load-rgb-file "hfy-cmap" "\
-Load an X11 style rgb.txt FILE.
-Search `hfy-rgb-load-path' if FILE is not specified.
-Loads the variable `hfy-rgb-txt-colour-map', which is used by
-`hfy-fallback-colour-values'.
-
-\(fn &optional FILE)" t nil)
-
-(autoload 'hfy-fallback-colour-values "hfy-cmap" "\
-Use a fallback method for obtaining the rgb values for a color.
-
-\(fn COLOUR-STRING)" nil nil)
-
-;;;***
-\f
-
 (provide 'htmlfontify)
 
 ;;; htmlfontify.el ends here
index f5375612c342a5180c96b6dedbfc48a27747639c..6052bf32ce3f684dd2c778a67c0691a53c66b097 100644 (file)
@@ -1403,7 +1403,7 @@ You can then feed the file name(s) to other commands with \\[yank]."
   (if (zerop (ibuffer-count-marked-lines))
       (message "No buffers marked; use 'm' to mark a buffer")
     (let ((ibuffer-copy-filename-as-kill-result "")
-         (type (cond ((zerop arg)
+         (type (cond ((or (null arg) (zerop arg))
                       'full)
                      ((= arg 4)
                       'relative)
@@ -1412,20 +1412,23 @@ You can then feed the file name(s) to other commands with \\[yank]."
       (ibuffer-map-marked-lines
        #'(lambda (buf _mark)
           (setq ibuffer-copy-filename-as-kill-result
-                (concat ibuffer-copy-filename-as-kill-result
-                        (let ((name (buffer-file-name buf)))
-                          (if name
-                              (pcase type
-                                (`full
-                                 name)
-                                (`relative
-                                 (file-relative-name
-                                  name (or ibuffer-default-directory
-                                           default-directory)))
-                                (_
-                                 (file-name-nondirectory name)))
-                            ""))
-                        " "))))
+                 (concat ibuffer-copy-filename-as-kill-result
+                         (let ((name (buffer-file-name buf)))
+                           (cond (name
+                                  (concat
+                                   (pcase type
+                                     (`full
+                                      name)
+                                     (`relative
+                                      (file-relative-name
+                                       name (or ibuffer-default-directory
+                                                default-directory)))
+                                     (_
+                                      (file-name-nondirectory name))) " "))
+                                 (t "")))))))
+      (when (not (zerop (length ibuffer-copy-filename-as-kill-result)))
+        (setq ibuffer-copy-filename-as-kill-result
+              (substring ibuffer-copy-filename-as-kill-result 0 -1)))
       (kill-new ibuffer-copy-filename-as-kill-result))))
 
 (defun ibuffer-mark-on-buffer (func &optional ibuffer-mark-on-buffer-mark group)
@@ -1598,7 +1601,7 @@ defaults to one."
 (provide 'ibuf-ext)
 
 ;; Local Variables:
-;; generated-autoload-file: "ibuffer.el"
+;; generated-autoload-file: "ibuffer-loaddefs.el"
 ;; End:
 
 ;;; ibuf-ext.el ends here
index 9d23e64cd81484be7e8fc8377ea9a5fa78211f1a..704907a79f751c746e1fb37dde1b79982d247e12 100644 (file)
@@ -37,6 +37,7 @@
 
 (require 'font-core)
 
+(require 'ibuffer-loaddefs)
 ;; These come from ibuf-ext.el, which can not be require'd at compile time
 ;; because it has a recursive dependency on ibuffer.el
 (defvar ibuffer-auto-mode)
@@ -699,16 +700,10 @@ directory, like `default-directory'."
 
     (define-key-after map [menu-bar view dashes2]
       '("--"))
-    (define-key-after map [menu-bar view diff-with-file]
-      '(menu-item "Diff with file" ibuffer-diff-with-file
-        :help "View the differences between this buffer and its file"))
     (define-key-after map [menu-bar view auto-mode]
       '(menu-item "Auto Mode" ibuffer-auto-mode
         :button (:toggle . ibuffer-auto-mode)
         :help "Attempt to automatically update the Ibuffer buffer"))
-    (define-key-after map [menu-bar view customize]
-      '(menu-item "Customize Ibuffer" ibuffer-customize
-        :help "Use Custom to customize Ibuffer"))
 
     (define-key-after map [menu-bar mark]
       (cons "Mark" (make-sparse-keymap "Mark")))
@@ -819,6 +814,9 @@ directory, like `default-directory'."
     (define-key-after operate-map [do-view-and-eval]
       '(menu-item "Eval (viewing buffer)..." ibuffer-do-view-and-eval
         :help "Evaluate a Lisp form in each marked buffer while viewing it"))
+    (define-key-after operate-map [diff-with-file]
+      '(menu-item "Diff with file" ibuffer-diff-with-file
+                  :help "View the differences between this buffer and its file"))
 
     operate-map))
 
@@ -1742,7 +1740,13 @@ If point is on a group name, this function operates on that group."
        (cond ((zerop bufs) "No buffers")
             ((= 1 bufs) "1 buffer")
             (t (format "%s buffers" bufs))))))
-  (propertize (buffer-name) 'font-lock-face (ibuffer-buffer-name-face buffer mark)))
+  (let ((string (propertize (buffer-name)
+                            'font-lock-face
+                            (ibuffer-buffer-name-face buffer mark))))
+    (if (not (seq-position string ?\n))
+        string
+      (replace-regexp-in-string
+       "\n" (propertize "^J" 'font-lock-face 'escape-glyph) string))))
 
 (define-ibuffer-column size
   (:inline t
@@ -2611,382 +2615,6 @@ will be inserted before the group at point."
     (setq default-directory ibuffer-default-directory))
   (add-hook 'change-major-mode-hook 'font-lock-defontify nil t))
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "9521139d5f2ba7c870e3101fd73bb3ce")
-;;; Generated autoloads from ibuf-ext.el
-
-(autoload 'ibuffer-auto-mode "ibuf-ext" "\
-Toggle use of Ibuffer's auto-update facility (Ibuffer Auto mode).
-With a prefix argument ARG, enable Ibuffer Auto mode if ARG is
-positive, and disable it otherwise.  If called from Lisp, enable
-the mode if ARG is omitted or nil.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'ibuffer-mouse-filter-by-mode "ibuf-ext" "\
-Enable or disable filtering by the major mode chosen via mouse.
-
-\(fn EVENT)" t nil)
-
-(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 'ibuffer-mouse-toggle-filter-group "ibuf-ext" "\
-Toggle the display status of the filter group chosen with the mouse.
-
-\(fn EVENT)" t nil)
-
-(autoload 'ibuffer-toggle-filter-group "ibuf-ext" "\
-Toggle the display status of the filter group on this line.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-forward-filter-group "ibuf-ext" "\
-Move point forwards by COUNT filtering groups.
-
-\(fn &optional COUNT)" t nil)
-
-(autoload 'ibuffer-backward-filter-group "ibuf-ext" "\
-Move point backwards by COUNT filtering groups.
-
-\(fn &optional COUNT)" t nil)
- (autoload 'ibuffer-do-shell-command-pipe "ibuf-ext")
- (autoload 'ibuffer-do-shell-command-pipe-replace "ibuf-ext")
- (autoload 'ibuffer-do-shell-command-file "ibuf-ext")
- (autoload 'ibuffer-do-eval "ibuf-ext")
- (autoload 'ibuffer-do-view-and-eval "ibuf-ext")
- (autoload 'ibuffer-do-rename-uniquely "ibuf-ext")
- (autoload 'ibuffer-do-revert "ibuf-ext")
- (autoload 'ibuffer-do-isearch "ibuf-ext")
- (autoload 'ibuffer-do-isearch-regexp "ibuf-ext")
- (autoload 'ibuffer-do-replace-regexp "ibuf-ext")
- (autoload 'ibuffer-do-query-replace "ibuf-ext")
- (autoload 'ibuffer-do-query-replace-regexp "ibuf-ext")
- (autoload 'ibuffer-do-print "ibuf-ext")
-
-(autoload 'ibuffer-included-in-filters-p "ibuf-ext" "\
-
-
-\(fn BUF FILTERS)" nil nil)
-
-(autoload 'ibuffer-filters-to-filter-group "ibuf-ext" "\
-Make the current filters into a filtering group.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-set-filter-groups-by-mode "ibuf-ext" "\
-Set the current filter groups to filter by mode.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-pop-filter-group "ibuf-ext" "\
-Remove the first filter group.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-decompose-filter-group "ibuf-ext" "\
-Decompose the filter group GROUP into active filters.
-
-\(fn GROUP)" t nil)
-
-(autoload 'ibuffer-clear-filter-groups "ibuf-ext" "\
-Remove all filter groups.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-jump-to-filter-group "ibuf-ext" "\
-Move point to the filter group whose name is NAME.
-
-\(fn NAME)" t nil)
-
-(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 '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 'ibuffer-yank "ibuf-ext" "\
-Yank the last killed filter group before group at point.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-yank-filter-group "ibuf-ext" "\
-Yank the last killed filter group before group named NAME.
-
-\(fn NAME)" t nil)
-
-(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 '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 'ibuffer-switch-to-saved-filter-groups "ibuf-ext" "\
-Set this buffer's filter groups to saved version with NAME.
-The value from `ibuffer-saved-filter-groups' is used.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-filter-disable "ibuf-ext" "\
-Disable all filters currently in effect in this buffer.
-With optional arg DELETE-FILTER-GROUPS non-nil, delete all filter
-group definitions by setting `ibuffer-filter-groups' to nil.
-
-\(fn &optional DELETE-FILTER-GROUPS)" t nil)
-
-(autoload 'ibuffer-pop-filter "ibuf-ext" "\
-Remove the top filter in this buffer.
-
-\(fn)" t nil)
-
-(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
-be a complex filter like (OR [name: foo] [mode: bar-mode]), will be
-turned into two separate filters [name: foo] and [mode: bar-mode].
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-exchange-filters "ibuf-ext" "\
-Exchange the top two filters on the stack in this buffer.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-negate-filter "ibuf-ext" "\
-Negate the sense of the top filter in the current buffer.
-
-\(fn)" t nil)
-
-(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 '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 'ibuffer-delete-saved-filters "ibuf-ext" "\
-Delete saved filters with NAME from `ibuffer-saved-filters'.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-add-saved-filters "ibuf-ext" "\
-Add saved filters from `ibuffer-saved-filters' to this buffer's filters.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-switch-to-saved-filters "ibuf-ext" "\
-Set this buffer's filters to filters with NAME from `ibuffer-saved-filters'.
-
-\(fn NAME)" t nil)
- (autoload 'ibuffer-filter-by-mode "ibuf-ext")
- (autoload 'ibuffer-filter-by-used-mode "ibuf-ext")
- (autoload 'ibuffer-filter-by-derived-mode "ibuf-ext")
- (autoload 'ibuffer-filter-by-name "ibuf-ext")
- (autoload 'ibuffer-filter-by-filename "ibuf-ext")
- (autoload 'ibuffer-filter-by-size-gt  "ibuf-ext")
- (autoload 'ibuffer-filter-by-size-lt  "ibuf-ext")
- (autoload 'ibuffer-filter-by-content "ibuf-ext")
- (autoload 'ibuffer-filter-by-predicate "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
- Name - the name of the buffer
- Major Mode - the name of the major mode of the buffer
- Size - the size of the buffer
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-invert-sorting "ibuf-ext" "\
-Toggle whether or not sorting is in reverse order.
-
-\(fn)" t nil)
- (autoload 'ibuffer-do-sort-by-major-mode "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-mode-name "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-alphabetic "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-size "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-filename/process "ibuf-ext")
-
-(autoload 'ibuffer-bs-show "ibuf-ext" "\
-Emulate `bs-show' from the bs.el package.
-
-\(fn)" t nil)
-
-(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 '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 '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
-to move by.  The default is `ibuffer-marked-char'.
-
-If DIRECTION is non-nil, it should be an integer; negative integers
-mean move backwards, non-negative integers mean move forwards.
-
-\(fn &optional COUNT MARK DIRECTION)" t nil)
-
-(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
-to move by.  The default is `ibuffer-marked-char'.
-
-\(fn &optional COUNT MARK)" t nil)
-
-(autoload 'ibuffer-do-kill-lines "ibuf-ext" "\
-Hide all of the currently marked lines.
-
-\(fn)" t nil)
-
-(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
-corresponding line in the Ibuffer buffer.  If said buffer is in a
-hidden group filter, open it.
-
-If `ibuffer-jump-offer-only-visible-buffers' is non-nil, only offer
-visible buffers in the completion list.  Calling the command with
-a prefix argument reverses the meaning of that variable.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-diff-with-file "ibuf-ext" "\
-View the differences between marked buffers and their associated files.
-If no buffers are marked, use buffer at point.
-This requires the external program \"diff\" to be in your `exec-path'.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-copy-filename-as-kill "ibuf-ext" "\
-Copy filenames of marked buffers into the kill ring.
-
-The names are separated by a space.
-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' 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 'ibuffer-mark-by-name-regexp "ibuf-ext" "\
-Mark all buffers whose name matches REGEXP.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-mark-by-mode-regexp "ibuf-ext" "\
-Mark all buffers whose major mode matches REGEXP.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-mark-by-file-name-regexp "ibuf-ext" "\
-Mark all buffers whose file name matches REGEXP.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-mark-by-mode "ibuf-ext" "\
-Mark all buffers whose major mode equals MODE.
-
-\(fn MODE)" t nil)
-
-(autoload 'ibuffer-mark-modified-buffers "ibuf-ext" "\
-Mark all modified buffers.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-unsaved-buffers "ibuf-ext" "\
-Mark all modified buffers that have an associated file.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-dissociated-buffers "ibuf-ext" "\
-Mark all buffers whose associated file does not exist.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-help-buffers "ibuf-ext" "\
-Mark buffers whose major mode is in variable `ibuffer-help-buffer-modes'.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-compressed-file-buffers "ibuf-ext" "\
-Mark buffers whose associated file is compressed.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-old-buffers "ibuf-ext" "\
-Mark buffers which have not been viewed in `ibuffer-old-time' hours.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-special-buffers "ibuf-ext" "\
-Mark all buffers whose name begins and ends with `*'.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-read-only-buffers "ibuf-ext" "\
-Mark all read-only buffers.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-dired-buffers "ibuf-ext" "\
-Mark all `dired' buffers.
-
-\(fn)" t nil)
-
-(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.
-
-\(fn REGEXP &optional NLINES)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
-
 (provide 'ibuffer)
 
 (run-hooks 'ibuffer-load-hook)
index 3b60daa965412ef11dbe0fdee4486c13533024b5..6a962640dea67b779f6fafcdf73a574961e10f51 100644 (file)
@@ -388,6 +388,9 @@ matches exist."
        (progn ;;(debug (format "Candidates=%S field=%S" candidates name))
               (format " %sNo matches%s" open-bracket close-bracket))
       (if last (setcdr last nil))
+      (when (and minibuffer-completing-file-name
+                 icomplete-with-completion-tables)
+        (setq comps (completion-pcm--filename-try-filter comps)))
       (let* ((most-try
               (if (and base-size (> base-size 0))
                   (completion-try-completion
index a8274f52521913136025cd3b2431e6bb62be8011..67b023dfd707e2484e1acdb90b6a39a034003f18 100644 (file)
@@ -1143,7 +1143,8 @@ image."
 (defun image-dired-next-line ()
   "Move to next line and display properties."
   (interactive)
-  (forward-line 1)
+  (let ((goal-column (current-column)))
+    (next-line))
   ;; 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))
@@ -1155,7 +1156,8 @@ image."
 (defun image-dired-previous-line ()
   "Move to previous line and display properties."
   (interactive)
-  (forward-line -1)
+  (let ((goal-column (current-column)))
+    (previous-line))
   ;; 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
index e549b49001e0645a2897c623b6de89ee4a61a8a0..a18b07ebe6a9b2dd3e528af54e8131f665015ef6 100644 (file)
@@ -24,8 +24,8 @@
 ;;; Commentary:
 
 ;; Defines a major mode for visiting image files
-;; that allows conversion between viewing the text of the file
-;; and viewing the file as an image.  Viewing the image
+;; that allows conversion between viewing the text of the file,
+;; hex of the file and viewing the file as an image.  Viewing the image
 ;; works by putting a `display' text-property on the
 ;; image data, with the image-data still present underneath; if the
 ;; resulting buffer file is saved to another name it will correctly save
@@ -372,8 +372,8 @@ call."
 
 (defvar image-mode-map
   (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map special-mode-map)
     (define-key map "\C-c\C-c" 'image-toggle-display)
+    (define-key map "\C-c\C-x" 'image-toggle-hex-display)
     (define-key map (kbd "SPC")       'image-scroll-up)
     (define-key map (kbd "S-SPC")     'image-scroll-down)
     (define-key map (kbd "DEL")       'image-scroll-down)
@@ -406,6 +406,8 @@ call."
       '("Image"
        ["Show as Text" image-toggle-display :active t
         :help "Show image as text"]
+    ["Show as Hex" image-toggle-hex-display :active t
+     :help "Show image as hex"]
        "--"
        ["Fit to Window Height" image-transform-fit-to-height
         :visible (eq image-type 'imagemagick)
@@ -474,12 +476,13 @@ call."
        ["Goto Frame..." image-goto-frame :active image-multi-frame
         :help "Show a specific frame of this image"]
        ))
-    map)
+    (make-composed-keymap (list map image-map) special-mode-map))
   "Mode keymap for `image-mode'.")
 
 (defvar image-minor-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "\C-c\C-c" 'image-toggle-display)
+    (define-key map "\C-c\C-x" 'image-toggle-hex-display)
     map)
   "Mode keymap for `image-minor-mode'.")
 
@@ -490,8 +493,8 @@ call."
 ;;;###autoload
 (defun 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.
+You can use \\<image-mode-map>\\[image-toggle-display] or \\<image-mode-map>\\[image-toggle-hex-display]
+to toggle between display as an image and display as text or hex.
 
 Key bindings:
 \\{image-mode-map}"
@@ -530,7 +533,7 @@ Key bindings:
        (run-mode-hooks 'image-mode-hook)
        (let ((image (image-get-display-property))
              (msg1 (substitute-command-keys
-                    "Type \\[image-toggle-display] to view the image as "))
+             "Type \\[image-toggle-display] or \\[image-toggle-hex-display] to view the image as "))
              animated)
          (cond
           ((null image)
@@ -559,7 +562,7 @@ mouse-3: Previous frame"
 ;;;                         (substitute-command-keys
 ;;;                          "\\[image-toggle-animation] to animate."))))
           (t
-           (message "%s" (concat msg1 "text."))))))
+        (message "%s" (concat msg1 "text or hex."))))))
 
     (error
      (image-mode-as-text)
@@ -585,19 +588,10 @@ actual image."
       (add-hook 'change-major-mode-hook (lambda () (image-minor-mode -1)) nil t)))
 
 ;;;###autoload
-(defun image-mode-as-text ()
+(defun image-mode-to-text ()
   "Set a non-image mode as major mode in combination with image minor mode.
-A non-image major mode found from `auto-mode-alist' or Fundamental mode
-displays an image file as text.  `image-minor-mode' provides the key
-\\<image-mode-map>\\[image-toggle-display] to switch back to `image-mode'
-to display an image file as the actual image.
-
-You can use `image-mode-as-text' in `auto-mode-alist' when you want
-to display an image file as text initially.
-
-See commands `image-mode' and `image-minor-mode' for more information
-on these modes."
-  (interactive)
+A non-mage major mode found from `auto-mode-alist' or fundamental mode
+displays an image file as text."
   ;; image-mode-as-text = normal-mode + image-minor-mode
   (let ((previous-image-type image-type)) ; preserve `image-type'
     (if image-mode-previous-major-mode
@@ -625,12 +619,49 @@ on these modes."
     ;; Enable image minor mode with `C-c C-c'.
     (image-minor-mode 1)
     ;; Show the image file as text.
-    (image-toggle-display-text)
-    (message "%s" (concat
-                  (substitute-command-keys
-                   "Type \\[image-toggle-display] to view the image as ")
-                  (if (image-get-display-property)
-                      "text" "an image") "."))))
+    (image-toggle-display-text)))
+
+(defun image-mode-as-hex ()
+  "Set a non-image mode as major mode in combination with image minor mode.
+A non-mage major mode found from `auto-mode-alist' or fundamental mode
+displays an image file as hex.  `image-minor-mode' provides the key
+\\<image-mode-map>\\[image-toggle-hex-display] to switch back to `image-mode'
+to display an image file as the actual image.
+
+You can use `image-mode-as-hex' in `auto-mode-alist' when you want to
+to display an image file as hex initially.
+
+See commands `image-mode' and `image-minor-mode' for more information
+on these modes."
+  (interactive)
+  (image-mode-to-text)
+  ;; Turn on hexl-mode
+  (hexl-mode)
+  (message "%s" (concat
+                 (substitute-command-keys
+                  "Type \\[image-toggle-hex-display] or \\[image-toggle-display] to view the image as ")
+                 (if (image-get-display-property)
+                     "hex" "an image or text") ".")))
+
+(defun image-mode-as-text ()
+  "Set a non-image mode as major mode in combination with image minor mode.
+A non-image major mode found from `auto-mode-alist' or Fundamental mode
+displays an image file as text.  `image-minor-mode' provides the key
+\\<image-mode-map>\\[image-toggle-display] to switch back to `image-mode'
+to display an image file as the actual image.
+
+You can use `image-mode-as-text' in `auto-mode-alist' when you want
+to display an image file as text initially.
+
+See commands `image-mode' and `image-minor-mode' for more information
+on these modes."
+  (interactive)
+  (image-mode-to-text)
+  (message "%s" (concat
+                 (substitute-command-keys
+                  "Type \\[image-toggle-display] or \\[image-toggle-hex-display] to view the image as ")
+                 (if (image-get-display-property)
+                     "text" "an image or hex") ".")))
 
 (define-obsolete-function-alias 'image-mode-maybe 'image-mode "23.2")
 
@@ -725,15 +756,27 @@ was inserted."
     (if (called-interactively-p 'any)
        (message "Repeat this command to go back to displaying the file as text"))))
 
+(defun image-toggle-hex-display ()
+  "Toggle between image and hex display."
+  (interactive)
+  (if (image-get-display-property)
+      (image-mode-as-hex)
+    (if (eq major-mode 'fundamental-mode)
+        (image-mode-as-hex)
+      (image-mode))))
+
 (defun image-toggle-display ()
   "Toggle between image and text display.
+
 If the current buffer is displaying an image file as an image,
-call `image-mode-as-text' to switch to text.  Otherwise, display
-the image by calling `image-mode'."
+call `image-mode-as-text' to switch to text or hex display.
+Otherwise, display the image by calling `image-mode'"
   (interactive)
   (if (image-get-display-property)
       (image-mode-as-text)
-    (image-mode)))
+    (if (eq major-mode 'hexl-mode)
+        (image-mode-as-text)
+      (image-mode))))
 
 (defun image-kill-buffer ()
   "Kill the current buffer."
index 663afa7764ee2380db7b83b2d5c2351f429780db..2ae642a3e32b276adc32ba2eb1c67eadaa96169e 100644 (file)
@@ -126,6 +126,27 @@ Subdirectories are not automatically included in the search."
   :type '(repeat (choice directory variable))
   :initialize 'custom-initialize-delay)
 
+(defcustom image-scaling-factor 'auto
+  "When displaying images, apply this scaling factor before displaying.
+This is not supported for all image types, and is mostly useful
+when you have a high-resolution monitor.
+The value is either a floating point number (where numbers higher
+than 1 means to increase the size and lower means to shrink the
+size), or the symbol `auto', which will compute a scaling factor
+based on the font pixel size."
+  :type '(choice number
+                 (const :tag "Automatically compute" auto))
+  :group 'image
+  :version "25.2")
+
+;; Map put into text properties on images.
+(defvar image-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "-" 'image-decrease-size)
+    (define-key map "+" 'image-increase-size)
+    (define-key map "r" 'image-rotate)
+    (define-key map "o" 'image-save)
+    map))
 
 (defun image-load-path-for-library (library image &optional path no-error)
   "Return a suitable search path for images used by LIBRARY.
@@ -409,8 +430,49 @@ Image file names that are not absolute are searched for in the
   (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)
+            (and (not (plist-get props :scale))
+                 (list :scale
+                       (image-compute-scaling-factor image-scaling-factor)))
            props)))
 
+(defun image--set-property (image property value)
+  "Set PROPERTY in IMAGE to VALUE.
+Internal use only."
+  (if (null value)
+      (while (cdr image)
+        ;; IMAGE starts with the symbol `image', and the rest is a
+        ;; plist.  Decouple plist entries where the key matches
+        ;; the property.
+        (if (eq (cadr image) property)
+            (setcdr image (cddr image))
+          (setq image (cddr image))))
+    ;; Just enter the new value.
+    (plist-put (cdr image) property value))
+  value)
+
+(defun image-property (image property)
+  "Return the value of PROPERTY in IMAGE.
+Properties can be set with
+
+  (setf (image-property IMAGE PROPERTY) VALUE)
+If VALUE is nil, PROPERTY is removed from IMAGE."
+  (declare (gv-setter image--set-property))
+  (plist-get (cdr image) property))
+
+(defun image-compute-scaling-factor (scaling)
+  (cond
+   ((numberp image-scaling-factor)
+    image-scaling-factor)
+   ((eq image-scaling-factor 'auto)
+    (let ((width (/ (float (window-width nil t)) (window-width))))
+      ;; If we assume that a typical character is 10 pixels in width,
+      ;; then we should scale all images according to how wide they
+      ;; are.  But don't scale images down.
+      (if (< width 10)
+          1
+        (/ (float width) 10))))
+   (t
+    (error "Invalid scaling factor %s" image-scaling-factor))))
 
 ;;;###autoload
 (defun put-image (image pos &optional string area)
@@ -437,6 +499,7 @@ means display it in the right marginal area."
       (put-text-property 0 (length string) 'display prop string)
       (overlay-put overlay 'put-image t)
       (overlay-put overlay 'before-string string)
+      (overlay-put overlay 'map image-map)
       overlay)))
 
 
@@ -476,7 +539,9 @@ height of the image; integer values are taken as pixel values."
     (add-text-properties start (point)
                         `(display ,(if slice
                                        (list (cons 'slice slice) image)
-                                     image) rear-nonsticky (display)))))
+                                     image)
+                                   rear-nonsticky (display)
+                                   keymap ,image-map))))
 
 
 ;;;###autoload
@@ -512,7 +577,8 @@ The image is automatically split into ROWS x COLS slices."
          (insert string)
          (add-text-properties start (point)
                               `(display ,(list (list 'slice x y dx dy) image)
-                                        rear-nonsticky (display)))
+                                        rear-nonsticky (display)
+                                         keymap ,image-map))
          (setq x (+ x dx))))
       (setq x 0.0
            y (+ y dy))
@@ -884,6 +950,93 @@ has no effect."
 
 (imagemagick-register-types)
 
+(defun image-increase-size (n)
+  "Increase the image size by a factor of N.
+If N is 3, then the image size will be increased by 30%.  The
+default is 20%."
+  (interactive "P")
+  (image--change-size (if n
+                          (1+ (/ n 10))
+                        1.2)))
+
+(defun image-decrease-size (n)
+  "Decrease the image size by a factor of N.
+If N is 3, then the image size will be decreased by 30%.  The
+default is 20%."
+  (interactive "P")
+  (image--change-size (if n
+                          (- 1 (/ n 10))
+                        0.8)))
+
+(defun image--get-image ()
+  (let ((image (or (get-text-property (point) 'display)
+                   ;; `put-image' uses overlays, so find an image in
+                   ;; the overlays.
+                   (seq-find (lambda (overlay)
+                               (overlay-get overlay 'display))
+                             (overlays-at (point))))))
+    (when (or (not (consp image))
+              (not (eq (car image) 'image)))
+      (error "No image under point"))
+    image))
+
+(defun image--get-imagemagick-and-warn ()
+  (unless (fboundp 'imagemagick-types)
+    (error "Can't rescale images without ImageMagick support"))
+  (let ((image (image--get-image)))
+    (image-flush image)
+    (plist-put (cdr image) :type 'imagemagick)
+    image))
+
+(defun image--change-size (factor)
+  (let* ((image (image--get-imagemagick-and-warn))
+         (new-image (image--image-without-parameters image))
+         (scale (image--current-scaling image new-image)))
+    (setcdr image (cdr new-image))
+    (plist-put (cdr image) :scale (* scale factor))))
+
+(defun image--image-without-parameters (image)
+  (cons (pop image)
+        (let ((new nil))
+          (while image
+            (let ((key (pop image))
+                  (val (pop image)))
+              (unless (memq key '(:scale :width :height :max-width :max-height))
+              (setq new (nconc new (list key val))))))
+          new)))
+
+(defun image--current-scaling (image new-image)
+  ;; The image may be scaled due to many reasons (:scale, :max-width,
+  ;; etc), so find out what the current scaling is based on the
+  ;; original image size and the displayed size.
+  (let ((image-width (car (image-size new-image t)))
+        (display-width (car (image-size image t))))
+    (/ (float display-width) image-width)))
+
+(defun image-rotate ()
+  "Rotate the image under point by 90 degrees clockwise."
+  (interactive)
+  (let ((image (image--get-imagemagick-and-warn)))
+    (plist-put (cdr image) :rotation
+               (float (+ (or (plist-get (cdr image) :rotation) 0) 90)))))
+
+(defun image-save ()
+  "Save the image under point."
+  (interactive)
+  (let ((image (get-text-property (point) 'display)))
+    (when (or (not (consp image))
+              (not (eq (car image) 'image)))
+      (error "No image under point"))
+    (with-temp-buffer
+      (let ((file (plist-get (cdr image) :file)))
+        (if file
+            (if (not (file-exists-p file))
+                (error "File %s no longer exists" file)
+              (insert-file-contents-literally file))
+          (insert (plist-get (cdr image) :data))))
+      (write-region (point-min) (point-max)
+                    (read-file-name "Write image to file: ")))))
+
 (provide 'image)
 
 ;;; image.el ends here
similarity index 78%
rename from lisp/gnus/compface.el
rename to lisp/image/compface.el
index cd70d6c87c946689f462a05ee3a6d2df7c2723f4..e2f607b1be3b91672355081175c8b7102d25cab7 100644 (file)
@@ -31,7 +31,7 @@ Requires the external programs `uncompface', and `icontopbm'.  On a
 GNU/Linux system these might be in packages with names like `compface'
 or `faces-xface' and `netpbm' or `libgr-progs', for instance."
   (with-temp-buffer
-    (unless (featurep 'xemacs) (set-buffer-multibyte nil))
+    (set-buffer-multibyte nil)
     (insert face)
     (let ((coding-system-for-read 'raw-text)
          ;; At least "icontopbm" doesn't work with Windows because
@@ -44,17 +44,10 @@ or `faces-xface' and `netpbm' or `libgr-progs', for instance."
             (goto-char (point-min))
             (insert "/* Format_version=1, Width=48, Height=48, Depth=1,\
  Valid_bits_per_item=16 */\n")
-            ;; I just can't get "icontopbm" to work correctly on its
-            ;; own in XEmacs.  And Emacs doesn't understand un-raw pbm
-            ;; files.
-            (if (not (featurep 'xemacs))
-                (eq 0 (call-process-region (point-min) (point-max)
-                                           "icontopbm"
-                                           'delete '(t nil)))
-              (shell-command-on-region (point-min) (point-max)
-                                       "icontopbm | pnmnoraw"
-                                       (current-buffer) t)
-              t))
+            ;; Emacs doesn't understand un-raw pbm files.
+            (eq 0 (call-process-region (point-min) (point-max)
+                                       "icontopbm"
+                                       'delete '(t nil))))
           (buffer-string)))))
 
 (provide 'compface)
similarity index 92%
rename from lisp/gnus/gravatar.el
rename to lisp/image/gravatar.el
index 8e5ea313e4a2965406c86f151f9fa453cfaac152..4bf5875f08c7468937c7bafc605e08bd4802a20d 100644 (file)
@@ -26,6 +26,7 @@
 
 (require 'url)
 (require 'url-cache)
+(require 'image)
 
 (defgroup gravatar nil
   "Gravatar."
       (when (search-forward "\n\n" nil t)
         (buffer-substring (point) (point-max))))))
 
-(eval-and-compile
-  (cond ((featurep 'xemacs)
-        (require 'gnus-xmas)
-        (defalias 'gravatar-create-image 'gnus-xmas-create-image))
-       ((featurep 'gnus-ems)
-        (defalias 'gravatar-create-image 'gnus-create-image))
-       (t
-        (require 'image)
-        (defalias 'gravatar-create-image 'create-image))))
-
 (defun gravatar-data->image ()
   "Get data of current buffer and return an image.
 If no image available, return 'error."
   (let ((data (gravatar-get-data)))
     (if data
-       (gravatar-create-image data nil t)
+       (create-image data nil t)
       'error)))
 
 (autoload 'help-function-arglist "help-fns")
@@ -128,7 +119,7 @@ You can provide a list of argument to pass to CB in CBARGS."
          (apply #'url-retrieve args))
       (apply cb
                (with-temp-buffer
-                 (mm-disable-multibyte)
+                 (set-buffer-multibyte nil)
                  (url-cache-extract (url-cache-create-filename url))
                  (gravatar-data->image))
                cbargs))))
@@ -145,7 +136,7 @@ You can provide a list of argument to pass to CB in CBARGS."
             (kill-buffer (current-buffer))
             data))
       (with-temp-buffer
-        (mm-disable-multibyte)
+        (set-buffer-multibyte nil)
         (url-cache-extract (url-cache-create-filename url))
         (gravatar-data->image)))))
 
index 44bae2dd3b455f04040377c311edea7fee61707e..48257b892db19f4008b1dd830e62206792ff150c 100644 (file)
@@ -462,12 +462,15 @@ Don't move point."
 Simple elements in the alist look like (INDEX-NAME . POSITION).
 POSITION is the buffer position of the item; to go to the item
 is simply to move point to that position.
-POSITION is passed to `imenu-default-goto-function', so it can be a non-number
-if that variable has been changed (e.g. Semantic uses overlays for POSITIONs).
 
-Special elements look like (INDEX-NAME POSITION FUNCTION ARGUMENTS...).
-To \"go to\" a special element means applying FUNCTION
-to INDEX-NAME, POSITION, and the ARGUMENTS.
+POSITION is passed to `imenu-default-goto-function', so it can be
+a non-number if that variable has been changed (e.g. Semantic
+uses overlays for POSITIONs).
+
+Special elements look like
+\(INDEX-NAME POSITION FUNCTION ARGUMENTS...).
+To \"go to\" a special element means applying FUNCTION to
+INDEX-NAME, POSITION, and the ARGUMENTS.
 
 A nested sub-alist element looks like (INDEX-NAME . SUB-ALIST).
 The function `imenu--subalist-p' tests an element and returns t
index 00f68f0fbbf40502e844acd781712947a758bf35..58695654665ec6e43536a03c48c0e36f05c2cd42 100644 (file)
@@ -1397,10 +1397,10 @@ Setup char-width-table appropriate for non-CJK language environment."
     (aset char-acronym-table i (car c0-acronyms))
     (setq c0-acronyms (cdr c0-acronyms))))
 
-(let ((c1-acronyms '("XXX" "XXX" "BPH" "NBH" "IND" "NEL" "SSA" "ESA"
+(let ((c1-acronyms '("PAD" "HOP" "BPH" "NBH" "IND" "NEL" "SSA" "ESA"
                     "HTS" "HTJ" "VTS" "PLD" "PLU" "R1"  "SS2" "SS1"
                     "DCS" "PU1" "PU2" "STS" "CCH" "MW"  "SPA" "EPA"
-                    "SOS" "XXX" "SC1" "CSI" "ST"  "OSC" "PM"  "APC")))
+                    "SOS" "SGCI" "SC1" "CSI" "ST"  "OSC" "PM"  "APC")))
   (dotimes (i 32)
     (aset char-acronym-table (+ #x0080 i) (car c1-acronyms))
     (setq c1-acronyms (cdr c1-acronyms))))
index 90905a2ade9a3fa4b814228569915f432b0e08c6..612c0a08ad7db51d5e656e9e02fbef284f886fb6 100644 (file)
@@ -1259,7 +1259,7 @@ to map charsets to scripts.")
                                         &optional _style-variant _noerror)
   "Create a fontset from fontset specification string FONTSET-SPEC.
 FONTSET-SPEC is a string of the format:
-       FONTSET-NAME,SCRIPT-NAME0:FONT-NAME0,SCRIPT-NAME1:FONT-NAME1, ...
+       FONTSET-NAME[,SCRIPT-NAME0:FONT-NAME0,SCRIPT-NAME1:FONT-NAME1] ...
 Any number of SPACE, TAB, and NEWLINE can be put before and after commas.
 
 When a frame uses the fontset as the `font' parameter, the frame's
index 001aad14754dfedafbe8b1f6fd18443c931650ec..f2bb8e256952fa32b58f56f51f2cbbd9a8672698 100644 (file)
@@ -2235,7 +2235,7 @@ See `set-language-info-alist' for use in programs."
     ("br" . "Latin-1") ; Breton
     ("bs" . "Latin-2") ; Bosnian
     ("byn" . "UTF-8")  ; Bilin; Blin
-    ("ca" . "Latin-1") ; Catalan
+    ("ca" "Catalan" iso-8859-1) ; Catalan
     ; co Corsican
     ("cs" "Czech" iso-8859-2)
     ("cy" "Welsh" iso-8859-14)
@@ -2978,6 +2978,27 @@ on encoding."
   (let ((char (assoc name ucs-names)))
     (when char (format " (%c)" (cdr char)))))
 
+(defun char-from-name (string &optional ignore-case)
+  "Return a character as a number from its Unicode name STRING.
+If optional IGNORE-CASE is non-nil, ignore case in STRING.
+Return nil if STRING does not name a character."
+  (or (cdr (assoc-string string (ucs-names) ignore-case))
+      (let ((minus (string-match-p "-[0-9A-F]+\\'" string)))
+        (when minus
+          ;; Parse names like "VARIATION SELECTOR-17" and "CJK
+          ;; COMPATIBILITY IDEOGRAPH-F900" that are not in ucs-names.
+          (ignore-errors
+            (let* ((case-fold-search ignore-case)
+                   (vs (string-match-p "\\`VARIATION SELECTOR-" string))
+                   (minus-num (string-to-number (substring string minus)
+                                                (if vs 10 16)))
+                   (vs-offset (if vs (if (< minus-num -16) #xE00EF #xFDFF) 0))
+                   (code (- vs-offset minus-num))
+                   (name (get-char-code-property code 'name)))
+              (when (eq t (compare-strings string nil nil name nil nil
+                                           ignore-case))
+                code)))))))
+
 (defun read-char-by-name (prompt)
   "Read a character by its Unicode name or hex number string.
 Display PROMPT and read a string that represents a character by its
@@ -2991,9 +3012,11 @@ preceded by an asterisk `*' and use completion, it will show all
 the characters whose names include that substring, not necessarily
 at the beginning of the name.
 
-This function also accepts a hexadecimal number of Unicode code
-point or a number in hash notation, e.g. #o21430 for octal,
-#x2318 for hex, or #10r8984 for decimal."
+Accept a name like \"CIRCULATION FUNCTION\", a hexadecimal
+number like \"2A10\", or a number in hash notation (e.g.,
+\"#x2a10\" for hex, \"10r10768\" for decimal, or \"#o25020\" for
+octal).  Treat otherwise-ambiguous strings like \"BED\" (U+1F6CF)
+as names, not numbers."
   (let* ((enable-recursive-minibuffers t)
         (completion-ignore-case t)
         (input
@@ -3006,13 +3029,13 @@ point or a number in hash notation, e.g. #o21430 for octal,
                   (category . unicode-name))
               (complete-with-action action (ucs-names) string pred)))))
         (char
-         (cond
-          ((string-match-p "\\`[0-9a-fA-F]+\\'" input)
-           (string-to-number input 16))
-          ((string-match-p "\\`#" input)
-           (read input))
-          (t
-           (cdr (assoc-string input (ucs-names) t))))))
+          (cond
+           ((char-from-name input t))
+           ((string-match-p "\\`[0-9a-fA-F]+\\'" input)
+            (ignore-errors (string-to-number input 16)))
+           ((string-match-p "\\`#\\([bBoOxX]\\|[0-9]+[rR]\\)[0-9a-zA-Z]+\\'"
+                            input)
+            (ignore-errors (read input))))))
     (unless (characterp char)
       (error "Invalid character"))
     char))
similarity index 66%
rename from lisp/gnus/rfc1843.el
rename to lisp/international/rfc1843.el
index 1dbd11debd4f1b3844cb333fb3f2e752e51ab333..508629fb062f3388c09e306bc2a194d348da7dc4 100644 (file)
 
 ;;; Commentary:
 
-;; Usage:
-;; (require 'rfc1843)
-;; (rfc1843-gnus-setup)
-;;
 ;; Test:
 ;; (rfc1843-decode-string  "~{<:Ky2;S{#,NpJ)l6HK!#~}")
 
 ;;; Code:
 
 (eval-when-compile (require 'cl))
-(require 'mm-util)
-
-(defvar gnus-decode-encoded-word-function)
-(defvar gnus-decode-header-function)
-(defvar gnus-newsgroup-name)
 
 (defvar rfc1843-word-regexp
   "~\\({\\([\041-\167][\041-\176]\\| \\)+\\)\\(~}\\|$\\)")
@@ -90,12 +81,11 @@ ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc"
            (while (re-search-forward (if rfc1843-decode-hzp
                                          rfc1843-hzp-word-regexp
                                        rfc1843-word-regexp) (point-max) t)
-             ;;; Text with extents may cause XEmacs crash
              (setq str (buffer-substring-no-properties
                         (match-beginning 1)
                         (match-end 1)))
              (setq firstc (aref str 0))
-             (insert (mm-decode-coding-string
+             (insert (decode-coding-string
                       (rfc1843-decode
                        (prog1
                            (substring str 1)
@@ -112,10 +102,10 @@ ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc"
 
 (defun rfc1843-decode-string (string)
   "Decode HZ STRING and return the results."
-  (let ((m (mm-multibyte-p)))
+  (let ((m enable-multibyte-characters))
     (with-temp-buffer
       (when m
-       (mm-enable-multibyte))
+       (set-buffer-multibyte 'to))
       (insert string)
       (inline
        (rfc1843-decode-region (point-min) (point-max)))
@@ -136,54 +126,6 @@ ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc"
          (aset s (incf i) (+ v (if (< v 63) 64 98))))))
     s))
 
-(autoload 'mail-header-parse-content-type "mail-parse")
-(autoload 'message-narrow-to-head "message")
-(declare-function message-fetch-field "message" (header &optional not-all))
-
-(defun rfc1843-decode-article-body ()
-  "Decode HZ encoded text in the article body."
-  (if (string-match (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
-                   (or gnus-newsgroup-name ""))
-      (save-excursion
-       (save-restriction
-         (message-narrow-to-head)
-         (let* ((inhibit-point-motion-hooks t)
-                (case-fold-search t)
-                (ct (message-fetch-field "Content-Type" t))
-                (ctl (and ct (mail-header-parse-content-type ct))))
-           (if (and ctl (not (string-match "/" (car ctl))))
-               (setq ctl nil))
-           (goto-char (point-max))
-           (widen)
-           (forward-line 1)
-           (narrow-to-region (point) (point-max))
-           (when (or (not ctl)
-                     (equal (car ctl) "text/plain"))
-             (rfc1843-decode-region (point) (point-max))))))))
-
-(defvar gnus-decode-header-methods)
-(defvar gnus-decode-encoded-word-methods)
-
-(defun rfc1843-gnus-setup ()
-  "Setup HZ decoding for Gnus."
-  (require 'gnus-art)
-  (require 'gnus-sum)
-  (add-hook 'gnus-article-decode-hook 'rfc1843-decode-article-body t)
-  (setq gnus-decode-encoded-word-function
-       'gnus-multi-decode-encoded-word-string
-       gnus-decode-header-function
-       'gnus-multi-decode-header
-       gnus-decode-encoded-word-methods
-       (nconc gnus-decode-encoded-word-methods
-              (list
-               (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
-                     'rfc1843-decode-string)))
-       gnus-decode-header-methods
-       (nconc gnus-decode-header-methods
-              (list
-               (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
-                     'rfc1843-decode-region)))))
-
 (provide 'rfc1843)
 
 ;;; rfc1843.el ends here
similarity index 94%
rename from lisp/gnus/utf7.el
rename to lisp/international/utf7.el
index 9b7191b21e150a82bf36c4f95a292d25a2113dc1..bd04eba2faec5f77e26542ae5377646539306de2 100644 (file)
@@ -119,11 +119,17 @@ Use IMAP modification if FOR-IMAP is non-nil."
   "Encode text from START to END in buffer as UTF-7 escape fragment.
 Use IMAP modification if FOR-IMAP is non-nil."
   (save-restriction
-    (narrow-to-region start end)
-    (funcall (utf7-get-u16char-converter 'to-utf-16))
-    (mm-with-unibyte-current-buffer
-      (base64-encode-region start (point-max)))
-    (goto-char start)
+    (let* ((buf (current-buffer))
+          (base (with-temp-buffer
+                  (set-buffer-multibyte nil)
+                  (insert-buffer-substring buf start end)
+                  (funcall (utf7-get-u16char-converter 'to-utf-16))
+                  (base64-encode-region (point-min) (point-max))
+                  (buffer-string))))
+      (narrow-to-region start end)
+      (delete-region (point-min) (point-max))
+      (insert base))
+    (goto-char (point-min))
     (let ((pm (point-max)))
       (when for-imap
        (while (search-forward "/" nil t)
@@ -185,8 +191,7 @@ Use IMAP modification if FOR-IMAP is non-nil."
 (defun utf7-latin1-u16-char-converter ()
   "Convert latin 1 (ISO-8859.1) characters to 16 bit Unicode.
 Characters are converted to raw byte pairs in narrowed buffer."
-  (mm-encode-coding-region (point-min) (point-max) 'iso-8859-1)
-  (mm-disable-multibyte)
+  (encode-coding-region (point-min) (point-max) 'iso-8859-1)
   (goto-char (point-min))
   (while (not (eobp))
     (insert 0)
@@ -201,7 +206,7 @@ Characters are in raw byte pairs in narrowed buffer."
        (delete-char 1)
        (error "Unable to convert from Unicode"))
     (forward-char))
-  (mm-decode-coding-region (point-min) (point-max) 'iso-8859-1)
+  (decode-coding-region (point-min) (point-max) 'iso-8859-1)
   (mm-enable-multibyte))
 
 ;;;###autoload
index 218c18a666e6d3cd995b8649c3f89a6e9f9233fe..b2223e7b3081c2cf874d64be96fc39adae6d0b66 100644 (file)
@@ -2662,8 +2662,9 @@ the word mode."
   "Non-default value overrides the behavior of `isearch-search-fun-default'.
 This variable's value should be a function, which will be called
 with no arguments, and should return a function that takes three
-arguments: STRING, BOUND, and NOERROR.  See `re-search-forward'
-for the meaning of BOUND and NOERROR arguments.
+arguments: STRING, BOUND, and NOERROR.  STRING is the string to
+be searched for.  See `re-search-forward' for the meaning of
+BOUND and NOERROR arguments.
 
 This returned function will be used by `isearch-search-string' to
 search for the first occurrence of STRING.")
index 810c2205160ecbd091b98fca6921b3d5546754c9..c49fa6ed6c153699b586a89fde9450c7dd64b217 100644 (file)
@@ -195,9 +195,11 @@ the variable `jit-lock-stealth-nice'.
 If you need to debug code run from jit-lock, see `jit-lock-debug-mode'."
   (setq jit-lock-mode arg)
   (cond
-   ((buffer-base-buffer)
-    ;; We're in an indirect buffer.  This doesn't work because jit-lock relies
-    ;; on the `fontified' text-property which is shared with the base buffer.
+   ((and (buffer-base-buffer)
+         jit-lock-mode)
+    ;; We're in an indirect buffer, and we're turning the mode on.
+    ;; This doesn't work because jit-lock relies on the `fontified'
+    ;; text-property which is shared with the base buffer.
     (setq jit-lock-mode nil)
     (message "Not enabling jit-lock: it does not work in indirect buffer"))
 
index a3683738fc635203b32229f6b0bd6a7c1553716e..2e743b4c383c04cbeea51dee460245be9899405b 100644 (file)
@@ -478,7 +478,7 @@ without repeating the prefix."
   "Display the current head of the keyboard macro ring."
   (interactive)
   (unless (kmacro-ring-empty-p)
-    (kmacro-display (car (car kmacro-ring)) "2nd macro")))
+    (kmacro-display (car (car kmacro-ring)) nil "2nd macro")))
 
 
 (defun kmacro-cycle-ring-next (&optional _arg)
index a939719ec426614b19e480e3c7a4d921956202eb..11c5e03c97f779c019558159a73034ff71b3a0b2 100644 (file)
@@ -614,6 +614,28 @@ method and applying Turkish case rules for the characters i, I, ı, İ.")))
            (documentation . "Support for Brazilian Portuguese."))
  '("European"))
 
+(set-language-info-alist
+ "Catalan" '((charset iso-8859-1)
+            (coding-system iso-8859-1 iso-8859-15)
+            (coding-priority iso-8859-1)
+            (input-method . "catalan-prefix")
+            (nonascii-translation . iso-8859-1)
+            (unibyte-display . iso-8859-1)
+            (setup-function
+             . (lambda ()
+                 (modify-syntax-entry ?· "w" (standard-syntax-table))))
+            (exit-function
+             . (lambda ()
+                 (modify-syntax-entry ?· "_" (standard-syntax-table))))
+            (sample-text . "\
+Catalan (Català)  Avui demà i ahir s'esfullarà una rosa.")
+            (documentation . "\
+This language environment uses the ISO-8859-1 character set,
+sets the default input method to \"catalan-prefix\", and sets
+the syntax of the middle dot character `·' to word."))
+  '("European"))
+
+
 \f
 (define-coding-system 'mac-roman
   "Mac Roman Encoding (MIME:MACINTOSH)."
index ff993c472faba0dfeff3089796db6ff75c491714..c9986bef54c0c3e6d340ec55b9b3e3f2a5d47b09 100644 (file)
@@ -3,7 +3,7 @@
 ;;; Code:
 
 \f
-;;;### (autoloads nil "5x5" "play/5x5.el" (22150 28228 674072 702000))
+;;;### (autoloads nil "5x5" "play/5x5.el" (0 0 0 0))
 ;;; Generated autoloads from play/5x5.el
 
 (autoload '5x5 "5x5" "\
@@ -65,8 +65,7 @@ should return a grid vector array that is the new solution.
 
 ;;;***
 \f
-;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (22197 58438
-;;;;;;  383460 447000))
+;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ada-mode.el
 
 (autoload 'ada-add-extensions "ada-mode" "\
@@ -85,8 +84,7 @@ Ada mode is the major mode for editing Ada code.
 
 ;;;***
 \f
-;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (22150 28228
-;;;;;;  750072 702000))
+;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ada-stmt.el
 
 (autoload 'ada-header "ada-stmt" "\
@@ -96,8 +94,7 @@ Insert a descriptive header at the top of the file.
 
 ;;;***
 \f
-;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (22150 28228
-;;;;;;  754072 702000))
+;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ada-xref.el
 
 (autoload 'ada-find-file "ada-xref" "\
@@ -108,8 +105,7 @@ Completion is available.
 
 ;;;***
 \f
-;;;### (autoloads nil "add-log" "vc/add-log.el" (22284 55604 194845
-;;;;;;  171000))
+;;;### (autoloads nil "add-log" "vc/add-log.el" (0 0 0 0))
 ;;; Generated autoloads from vc/add-log.el
 
 (put 'change-log-default-name 'safe-local-variable 'string-or-null-p)
@@ -152,7 +148,11 @@ If `change-log-default-name' is nil, behave as though it were \"ChangeLog\"
 
 If `change-log-default-name' contains a leading directory component, then
 simply find it in the current directory.  Otherwise, search in the current
-directory and its successive parents for a file so named.
+directory and its successive parents for a file so named.  Stop at the first
+such file that exists (or has a buffer visiting it), or the first directory
+that contains any of `change-log-directory-files'.  If no match is found,
+use the current directory.  To override the choice of this function,
+simply create an empty ChangeLog file first by hand in the desired place.
 
 Once a file is found, `change-log-default-name' is set locally in the
 current buffer to the complete file name.
@@ -238,8 +238,7 @@ old-style time formats for entries are supported.
 
 ;;;***
 \f
-;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (22150 28227
-;;;;;;  338072 702000))
+;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/advice.el
 
 (defvar ad-redefinition-action 'warn "\
@@ -374,7 +373,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
 
 ;;;***
 \f
-;;;### (autoloads nil "align" "align.el" (22154 25280 740828 526000))
+;;;### (autoloads nil "align" "align.el" (0 0 0 0))
 ;;; Generated autoloads from align.el
 
 (autoload 'align "align" "\
@@ -472,12 +471,14 @@ Remove any highlighting that was added by `align-highlight-rule'.
 
 (autoload 'align-newline-and-indent "align" "\
 A replacement function for `newline-and-indent', aligning as it goes.
+The alignment is done by calling `align' on the region that was
+indented.
 
 \(fn)" t nil)
 
 ;;;***
 \f
-;;;### (autoloads nil "allout" "allout.el" (22189 64323 68321 19000))
+;;;### (autoloads nil "allout" "allout.el" (0 0 0 0))
 ;;; Generated autoloads from allout.el
 (push (purecopy '(allout 2 3)) package--builtin-versions)
 
@@ -837,8 +838,8 @@ for details on preparing Emacs for automatic allout activation.
 
 ;;;***
 \f
-;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (22150
-;;;;;;  28226 938072 702000))
+;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from allout-widgets.el
 (push (purecopy '(allout-widgets 1 0)) package--builtin-versions)
 
@@ -896,8 +897,7 @@ outline hot-spot navigation (see `allout-mode').
 
 ;;;***
 \f
-;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (22150 28228 350072
-;;;;;;  702000))
+;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (0 0 0 0))
 ;;; Generated autoloads from net/ange-ftp.el
 
 (defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir)
@@ -918,8 +918,7 @@ directory, so that Emacs will know its current contents.
 
 ;;;***
 \f
-;;;### (autoloads nil "animate" "play/animate.el" (22150 28228 674072
-;;;;;;  702000))
+;;;### (autoloads nil "animate" "play/animate.el" (0 0 0 0))
 ;;; Generated autoloads from play/animate.el
 
 (autoload 'animate-string "animate" "\
@@ -951,8 +950,7 @@ the buffer *Birthday-Present-for-Name*.
 
 ;;;***
 \f
-;;;### (autoloads nil "ansi-color" "ansi-color.el" (22150 28226 942072
-;;;;;;  702000))
+;;;### (autoloads nil "ansi-color" "ansi-color.el" (0 0 0 0))
 ;;; Generated autoloads from ansi-color.el
 (push (purecopy '(ansi-color 3 4 2)) package--builtin-versions)
 
@@ -978,8 +976,8 @@ This is a good function to put in `comint-output-filter-functions'.
 
 ;;;***
 \f
-;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (22182
-;;;;;;  44208 579853 279000))
+;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/antlr-mode.el
 (push (purecopy '(antlr-mode 2 2 3)) package--builtin-versions)
 
@@ -1015,8 +1013,7 @@ Used in `antlr-mode'.  Also a useful function in `java-mode-hook'.
 
 ;;;***
 \f
-;;;### (autoloads nil "appt" "calendar/appt.el" (22150 28227 46072
-;;;;;;  702000))
+;;;### (autoloads nil "appt" "calendar/appt.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/appt.el
 
 (autoload 'appt-add "appt" "\
@@ -1037,8 +1034,7 @@ ARG is positive, otherwise off.
 
 ;;;***
 \f
-;;;### (autoloads nil "apropos" "apropos.el" (22224 48490 143402
-;;;;;;  355000))
+;;;### (autoloads nil "apropos" "apropos.el" (0 0 0 0))
 ;;; Generated autoloads from apropos.el
 
 (autoload 'apropos-read-pattern "apropos" "\
@@ -1154,8 +1150,7 @@ Returns list of symbols and documentation found.
 
 ;;;***
 \f
-;;;### (autoloads nil "arc-mode" "arc-mode.el" (22150 28226 946072
-;;;;;;  702000))
+;;;### (autoloads nil "arc-mode" "arc-mode.el" (0 0 0 0))
 ;;; Generated autoloads from arc-mode.el
 
 (autoload 'archive-mode "arc-mode" "\
@@ -1175,7 +1170,7 @@ archive.
 
 ;;;***
 \f
-;;;### (autoloads nil "array" "array.el" (22150 28226 946072 702000))
+;;;### (autoloads nil "array" "array.el" (0 0 0 0))
 ;;; Generated autoloads from array.el
 
 (autoload 'array-mode "array" "\
@@ -1246,8 +1241,7 @@ Entering array mode calls the function `array-mode-hook'.
 
 ;;;***
 \f
-;;;### (autoloads nil "artist" "textmodes/artist.el" (22150 28229
-;;;;;;  86072 702000))
+;;;### (autoloads nil "artist" "textmodes/artist.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/artist.el
 (push (purecopy '(artist 1 2 6)) package--builtin-versions)
 
@@ -1453,8 +1447,7 @@ Keymap summary
 
 ;;;***
 \f
-;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (22150 28228
-;;;;;;  758072 702000))
+;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/asm-mode.el
 
 (autoload 'asm-mode "asm-mode" "\
@@ -1481,9 +1474,8 @@ Special commands:
 
 ;;;***
 \f
-;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (22150
-;;;;;;  28227 658072 702000))
-;;; Generated autoloads from gnus/auth-source.el
+;;;### (autoloads nil "auth-source" "auth-source.el" (0 0 0 0))
+;;; Generated autoloads from auth-source.el
 
 (defvar auth-source-cache-expiry 7200 "\
 How many seconds passwords are cached, or nil to disable
@@ -1494,13 +1486,13 @@ let-binding.")
 
 ;;;***
 \f
-;;;### (autoloads nil "autoarg" "autoarg.el" (22150 28226 946072
-;;;;;;  702000))
+;;;### (autoloads nil "autoarg" "autoarg.el" (0 0 0 0))
 ;;; 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.")
+See the `autoarg-mode' command
+for a description of this minor mode.")
 
 (custom-autoload 'autoarg-mode "autoarg" nil)
 
@@ -1532,7 +1524,8 @@ then invokes the normal binding of \\[autoarg-terminate].
 
 (defvar autoarg-kp-mode nil "\
 Non-nil if Autoarg-Kp mode is enabled.
-See the command `autoarg-kp-mode' for a description of this minor mode.
+See the `autoarg-kp-mode' command
+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 `autoarg-kp-mode'.")
@@ -1555,8 +1548,7 @@ This is similar to `autoarg-mode' but rebinds the keypad keys
 
 ;;;***
 \f
-;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (22150 28228
-;;;;;;  758072 702000))
+;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/autoconf.el
 
 (autoload 'autoconf-mode "autoconf" "\
@@ -1566,8 +1558,7 @@ Major mode for editing Autoconf configure.ac files.
 
 ;;;***
 \f
-;;;### (autoloads nil "autoinsert" "autoinsert.el" (22192 2880 903382
-;;;;;;  391000))
+;;;### (autoloads nil "autoinsert" "autoinsert.el" (0 0 0 0))
 ;;; Generated autoloads from autoinsert.el
 
 (autoload 'auto-insert "autoinsert" "\
@@ -1585,7 +1576,8 @@ or if CONDITION had no actions, after all other CONDITIONs.
 
 (defvar auto-insert-mode nil "\
 Non-nil if Auto-Insert mode is enabled.
-See the command `auto-insert-mode' for a description of this minor mode.
+See the `auto-insert-mode' command
+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 `auto-insert-mode'.")
@@ -1605,8 +1597,8 @@ insert a template for the file depending on the mode of the buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (22302
-;;;;;;  35693 265420 723000))
+;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/autoload.el
 
 (put 'generated-autoload-file 'safe-local-variable 'stringp)
@@ -1657,17 +1649,16 @@ should be non-nil).
 
 ;;;***
 \f
-;;;### (autoloads nil "autorevert" "autorevert.el" (22292 49734 698738
-;;;;;;  351000))
+;;;### (autoloads nil "autorevert" "autorevert.el" (0 0 0 0))
 ;;; Generated autoloads from autorevert.el
 
 (autoload 'auto-revert-mode "autorevert" "\
-Toggle reverting buffer when the file changes (Auto Revert mode).
-With a prefix argument ARG, enable Auto Revert mode if ARG is
+Toggle reverting buffer when the file changes (Auto-Revert Mode).
+With a prefix argument ARG, enable Auto-Revert Mode if ARG is
 positive, and disable it otherwise.  If called from Lisp, enable
 the mode if ARG is omitted or nil.
 
-Auto Revert mode is a minor mode that affects only the current
+Auto-Revert Mode is a minor mode that affects only the current
 buffer.  When enabled, it reverts the buffer when the file on
 disk changes.
 
@@ -1687,11 +1678,11 @@ This function is designed to be added to hooks, for example:
 
 (autoload 'auto-revert-tail-mode "autorevert" "\
 Toggle reverting tail of buffer when the file grows.
-With a prefix argument ARG, enable Auto-Revert Tail mode if ARG
+With a prefix argument ARG, enable Auto-Revert Tail Mode if ARG
 is positive, and disable it otherwise.  If called from Lisp,
 enable the mode if ARG is omitted or nil.
 
-When Auto Revert Tail mode is enabled, the tail of the file is
+When Auto-Revert Tail Mode is enabled, the tail of the file is
 constantly followed, as with the shell command `tail -f'.  This
 means that whenever the file grows on disk (presumably because
 some background process is appending to it from time to time),
@@ -1706,7 +1697,7 @@ Use `auto-revert-mode' for changes other than appends!
 \(fn &optional ARG)" t nil)
 
 (autoload 'turn-on-auto-revert-tail-mode "autorevert" "\
-Turn on Auto-Revert Tail mode.
+Turn on Auto-Revert Tail Mode.
 
 This function is designed to be added to hooks, for example:
   (add-hook \\='my-logfile-mode-hook #\\='turn-on-auto-revert-tail-mode)
@@ -1715,7 +1706,8 @@ This function is designed to be added to hooks, for example:
 
 (defvar global-auto-revert-mode nil "\
 Non-nil if Global Auto-Revert mode is enabled.
-See the command `global-auto-revert-mode' for a description of this minor mode.
+See the `global-auto-revert-mode' command
+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 `global-auto-revert-mode'.")
@@ -1723,12 +1715,12 @@ or call the function `global-auto-revert-mode'.")
 (custom-autoload 'global-auto-revert-mode "autorevert" nil)
 
 (autoload 'global-auto-revert-mode "autorevert" "\
-Toggle Global Auto Revert mode.
-With a prefix argument ARG, enable Global Auto Revert mode if ARG
+Toggle Global Auto-Revert Mode.
+With a prefix argument ARG, enable Global Auto-Revert Mode if ARG
 is positive, and disable it otherwise.  If called from Lisp,
 enable the mode if ARG is omitted or nil.
 
-Global Auto Revert mode is a global minor mode that reverts any
+Global Auto-Revert Mode is a global minor mode that reverts any
 buffer associated with a file when the file changes on disk.  Use
 `auto-revert-mode' to revert a particular buffer.
 
@@ -1746,7 +1738,7 @@ specifies in the mode line.
 
 ;;;***
 \f
-;;;### (autoloads nil "avoid" "avoid.el" (22150 28226 946072 702000))
+;;;### (autoloads nil "avoid" "avoid.el" (0 0 0 0))
 ;;; Generated autoloads from avoid.el
 
 (defvar mouse-avoidance-mode nil "\
@@ -1784,8 +1776,7 @@ definition of \"random distance\".)
 
 ;;;***
 \f
-;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (22150 28228
-;;;;;;  758072 702000))
+;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/bat-mode.el
 
 (add-to-list 'auto-mode-alist '("\\.\\(bat\\|cmd\\)\\'" . bat-mode))
@@ -1803,8 +1794,7 @@ Run script using `bat-run' and `bat-run-args'.
 
 ;;;***
 \f
-;;;### (autoloads nil "battery" "battery.el" (22216 22852 972596
-;;;;;;  491000))
+;;;### (autoloads nil "battery" "battery.el" (0 0 0 0))
 ;;; Generated autoloads from battery.el
  (put 'battery-mode-line-string 'risky-local-variable t)
 
@@ -1817,7 +1807,8 @@ The text being displayed in the echo area is controlled by the variables
 
 (defvar display-battery-mode nil "\
 Non-nil if Display-Battery mode is enabled.
-See the command `display-battery-mode' for a description of this minor mode.
+See the `display-battery-mode' command
+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 `display-battery-mode'.")
@@ -1839,8 +1830,8 @@ seconds.
 
 ;;;***
 \f
-;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (22150
-;;;;;;  28227 338072 702000))
+;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/benchmark.el
 
 (autoload 'benchmark-run "benchmark" "\
@@ -1876,8 +1867,7 @@ For non-interactive use see also `benchmark-run' and
 
 ;;;***
 \f
-;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (22150 28229
-;;;;;;  94072 702000))
+;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/bibtex.el
 
 (autoload 'bibtex-initialize "bibtex" "\
@@ -1969,7 +1959,7 @@ A prefix arg negates the value of `bibtex-search-entry-globally'.
 ;;;***
 \f
 ;;;### (autoloads nil "bibtex-style" "textmodes/bibtex-style.el"
-;;;;;;  (22150 28229 86072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from textmodes/bibtex-style.el
 
 (autoload 'bibtex-style-mode "bibtex-style" "\
@@ -1979,8 +1969,7 @@ Major mode for editing BibTeX style files.
 
 ;;;***
 \f
-;;;### (autoloads nil "binhex" "mail/binhex.el" (22150 28228 226072
-;;;;;;  702000))
+;;;### (autoloads nil "binhex" "mail/binhex.el" (0 0 0 0))
 ;;; Generated autoloads from mail/binhex.el
 
 (defconst binhex-begin-line "^:...............................................................$" "\
@@ -2004,8 +1993,7 @@ Binhex decode region between START and END.
 
 ;;;***
 \f
-;;;### (autoloads nil "blackbox" "play/blackbox.el" (22150 28228
-;;;;;;  674072 702000))
+;;;### (autoloads nil "blackbox" "play/blackbox.el" (0 0 0 0))
 ;;; Generated autoloads from play/blackbox.el
 
 (autoload 'blackbox "blackbox" "\
@@ -2124,8 +2112,7 @@ a reflection.
 
 ;;;***
 \f
-;;;### (autoloads nil "bookmark" "bookmark.el" (22301 64691 837087
-;;;;;;  484000))
+;;;### (autoloads nil "bookmark" "bookmark.el" (0 0 0 0))
 ;;; Generated autoloads from bookmark.el
  (define-key ctl-x-r-map "b" 'bookmark-jump)
  (define-key ctl-x-r-map "m" 'bookmark-set)
@@ -2316,9 +2303,9 @@ while loading.
 If you load a file that doesn't contain a proper bookmark alist, you
 will corrupt Emacs's bookmark list.  Generally, you should only load
 in files that were created with the bookmark functions in the first
-place.  Your own personal bookmark file, specified by the variable
-`bookmark-default-file', is maintained automatically by Emacs; you
-shouldn't need to load it explicitly.
+place.  Your own personal bookmark file, `~/.emacs.bmk', is
+maintained automatically by Emacs; you shouldn't need to load it
+explicitly.
 
 If you load a file containing bookmarks with the same names as
 bookmarks already present in your Emacs, the new bookmarks will get
@@ -2349,8 +2336,7 @@ Incremental search of bookmarks, hiding the non-matches as we go.
 
 ;;;***
 \f
-;;;### (autoloads nil "browse-url" "net/browse-url.el" (22189 64323
-;;;;;;  280321 19000))
+;;;### (autoloads nil "browse-url" "net/browse-url.el" (0 0 0 0))
 ;;; Generated autoloads from net/browse-url.el
 
 (defvar browse-url-browser-function 'browse-url-default-browser "\
@@ -2698,7 +2684,7 @@ from `browse-url-elinks-wrapper'.
 
 ;;;***
 \f
-;;;### (autoloads nil "bs" "bs.el" (22150 28226 950072 702000))
+;;;### (autoloads nil "bs" "bs.el" (0 0 0 0))
 ;;; Generated autoloads from bs.el
 (push (purecopy '(bs 1 17)) package--builtin-versions)
 
@@ -2739,8 +2725,7 @@ name of buffer configuration.
 
 ;;;***
 \f
-;;;### (autoloads nil "bubbles" "play/bubbles.el" (22150 28228 674072
-;;;;;;  702000))
+;;;### (autoloads nil "bubbles" "play/bubbles.el" (0 0 0 0))
 ;;; Generated autoloads from play/bubbles.el
 
 (autoload 'bubbles "bubbles" "\
@@ -2762,7 +2747,7 @@ columns on its right towards the left.
 ;;;***
 \f
 ;;;### (autoloads nil "bug-reference" "progmodes/bug-reference.el"
-;;;;;;  (22150 28228 758072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from progmodes/bug-reference.el
 
 (put 'bug-reference-url-format 'safe-local-variable (lambda (s) (or (stringp s) (and (symbolp s) (get s 'bug-reference-url-format)))))
@@ -2782,8 +2767,8 @@ Like `bug-reference-mode', but only buttonize in comments and strings.
 
 ;;;***
 \f
-;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (22195
-;;;;;;  16710 339344 967000))
+;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (0 0 0
+;;;;;;  0))
 ;;; 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)
@@ -2903,16 +2888,15 @@ and corresponding effects.
 
 ;;;***
 \f
-;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (22192
-;;;;;;  2880 911382 391000))
+;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from calendar/cal-china.el
 
 (put 'calendar-chinese-time-zone 'risky-local-variable t)
 
 ;;;***
 \f
-;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (22150 28227
-;;;;;;  50072 702000))
+;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/cal-dst.el
 
 (put 'calendar-daylight-savings-starts 'risky-local-variable t)
@@ -2923,8 +2907,8 @@ and corresponding effects.
 
 ;;;***
 \f
-;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (22150
-;;;;;;  28227 50072 702000))
+;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from calendar/cal-hebrew.el
 
 (autoload 'calendar-hebrew-list-yahrzeits "cal-hebrew" "\
@@ -2936,7 +2920,7 @@ from the cursor position.
 
 ;;;***
 \f
-;;;### (autoloads nil "calc" "calc/calc.el" (22150 28227 26072 702000))
+;;;### (autoloads nil "calc" "calc/calc.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc.el
  (define-key ctl-x-map "*" 'calc-dispatch)
 
@@ -3022,8 +3006,7 @@ See Info node `(calc)Defining Functions'.
 
 ;;;***
 \f
-;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (22150 28227
-;;;;;;  22072 702000))
+;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (0 0 0 0))
 ;;; Generated autoloads from calc/calc-undo.el
 
 (autoload 'calc-undo "calc-undo" "\
@@ -3033,8 +3016,7 @@ See Info node `(calc)Defining Functions'.
 
 ;;;***
 \f
-;;;### (autoloads nil "calculator" "calculator.el" (22222 61645 281665
-;;;;;;  355000))
+;;;### (autoloads nil "calculator" "calculator.el" (0 0 0 0))
 ;;; Generated autoloads from calculator.el
 
 (autoload 'calculator "calculator" "\
@@ -3045,8 +3027,7 @@ See the documentation for `calculator-mode' for more information.
 
 ;;;***
 \f
-;;;### (autoloads nil "calendar" "calendar/calendar.el" (22192 2880
-;;;;;;  919382 391000))
+;;;### (autoloads nil "calendar" "calendar/calendar.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/calendar.el
 
 (autoload 'calendar "calendar" "\
@@ -3089,8 +3070,7 @@ This function is suitable for execution in an init file.
 
 ;;;***
 \f
-;;;### (autoloads nil "canlock" "gnus/canlock.el" (22150 28227 658072
-;;;;;;  702000))
+;;;### (autoloads nil "canlock" "gnus/canlock.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/canlock.el
 
 (autoload 'canlock-insert-header "canlock" "\
@@ -3107,8 +3087,8 @@ it fails.
 
 ;;;***
 \f
-;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (22308
-;;;;;;  37947 170422 527000))
+;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/cc-engine.el
 
 (autoload 'c-guess-basic-syntax "cc-engine" "\
@@ -3118,8 +3098,7 @@ Return the syntactic context of the current line.
 
 ;;;***
 \f
-;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (22150 28228
-;;;;;;  790072 702000))
+;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-guess.el
 
 (defvar c-guess-guessed-offsets-alist nil "\
@@ -3217,8 +3196,7 @@ the absolute file name of the file if STYLE-NAME is nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (22162 19398
-;;;;;;  889892 547000))
+;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-mode.el
 
 (autoload 'c-initialize-cc-mode "cc-mode" "\
@@ -3376,8 +3354,8 @@ Key bindings:
 
 ;;;***
 \f
-;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (22150
-;;;;;;  28228 798072 702000))
+;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/cc-styles.el
 
 (autoload 'c-set-style "cc-styles" "\
@@ -3428,8 +3406,7 @@ and exists only for compatibility reasons.
 
 ;;;***
 \f
-;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (22150 28228
-;;;;;;  802072 702000))
+;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cc-vars.el
 (put 'c-basic-offset 'safe-local-variable 'integerp)
 (put 'c-backslash-column 'safe-local-variable 'integerp)
@@ -3437,8 +3414,7 @@ and exists only for compatibility reasons.
 
 ;;;***
 \f
-;;;### (autoloads nil "ccl" "international/ccl.el" (22150 28228 106072
-;;;;;;  702000))
+;;;### (autoloads nil "ccl" "international/ccl.el" (0 0 0 0))
 ;;; Generated autoloads from international/ccl.el
 
 (autoload 'ccl-compile "ccl" "\
@@ -3731,8 +3707,7 @@ See the documentation of `define-ccl-program' for the detail of CCL program.
 
 ;;;***
 \f
-;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (22150 28227
-;;;;;;  358072 702000))
+;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/cconv.el
 
 (autoload 'cconv-closure-convert "cconv" "\
@@ -3751,15 +3726,13 @@ Add the warnings that closure conversion would encounter.
 
 ;;;***
 \f
-;;;### (autoloads nil "cedet" "cedet/cedet.el" (22150 28227 146072
-;;;;;;  702000))
+;;;### (autoloads nil "cedet" "cedet/cedet.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/cedet.el
 (push (purecopy '(cedet 2 0)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (22150 28228
-;;;;;;  802072 702000))
+;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cfengine.el
 (push (purecopy '(cfengine 1 4)) package--builtin-versions)
 
@@ -3788,8 +3761,8 @@ Choose `cfengine2-mode' or `cfengine3-mode' by buffer contents.
 
 ;;;***
 \f
-;;;### (autoloads nil "character-fold" "character-fold.el" (22150
-;;;;;;  28227 274072 702000))
+;;;### (autoloads nil "character-fold" "character-fold.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from character-fold.el
 
 (autoload 'character-fold-to-regexp "character-fold" "\
@@ -3808,15 +3781,14 @@ from which to start.
 
 ;;;***
 \f
-;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (22150 28227
-;;;;;;  358072 702000))
+;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/chart.el
 (push (purecopy '(chart 0 2)) package--builtin-versions)
 
 ;;;***
 \f
 ;;;### (autoloads nil "check-declare" "emacs-lisp/check-declare.el"
-;;;;;;  (22296 46772 428104 103000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/check-declare.el
 
 (autoload 'check-declare-file "check-declare" "\
@@ -3833,8 +3805,8 @@ Returns non-nil if any false statements are found.
 
 ;;;***
 \f
-;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (22197
-;;;;;;  58438 127460 447000))
+;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/checkdoc.el
 (push (purecopy '(checkdoc 0 6 2)) package--builtin-versions)
 (put 'checkdoc-force-docstrings-flag 'safe-local-variable #'booleanp)
@@ -4044,8 +4016,8 @@ Find package keywords that aren't in `finder-known-keywords'.
 
 ;;;***
 \f
-;;;### (autoloads nil "china-util" "language/china-util.el" (22150
-;;;;;;  28228 162072 702000))
+;;;### (autoloads nil "china-util" "language/china-util.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from language/china-util.el
 
 (autoload 'decode-hz-region "china-util" "\
@@ -4082,8 +4054,7 @@ Encode the text in the current buffer to HZ.
 
 ;;;***
 \f
-;;;### (autoloads nil "chistory" "chistory.el" (22150 28227 274072
-;;;;;;  702000))
+;;;### (autoloads nil "chistory" "chistory.el" (0 0 0 0))
 ;;; Generated autoloads from chistory.el
 
 (autoload 'repeat-matching-complex-command "chistory" "\
@@ -4122,8 +4093,8 @@ and runs the normal hook `command-history-hook'.
 
 ;;;***
 \f
-;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (22150
-;;;;;;  28227 366072 702000))
+;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/cl-indent.el
 
 (autoload 'common-lisp-indent-function "cl-indent" "\
@@ -4206,8 +4177,7 @@ instead.
 
 ;;;***
 \f
-;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (22220 19926
-;;;;;;  380329 271000))
+;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/cl-lib.el
 (push (purecopy '(cl-lib 1 0)) package--builtin-versions)
 
@@ -4225,8 +4195,7 @@ a future Emacs interpreter will be able to use it.")
 
 ;;;***
 \f
-;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (22150 28228
-;;;;;;  802072 702000))
+;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cmacexp.el
 
 (autoload 'c-macro-expand "cmacexp" "\
@@ -4246,8 +4215,7 @@ For use inside Lisp programs, see also `c-macro-expansion'.
 
 ;;;***
 \f
-;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (22150 28227 274072
-;;;;;;  702000))
+;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (0 0 0 0))
 ;;; Generated autoloads from cmuscheme.el
 
 (autoload 'run-scheme "cmuscheme" "\
@@ -4267,7 +4235,7 @@ is run).
 
 ;;;***
 \f
-;;;### (autoloads nil "color" "color.el" (22150 28227 274072 702000))
+;;;### (autoloads nil "color" "color.el" (0 0 0 0))
 ;;; Generated autoloads from color.el
 
 (autoload 'color-name-to-rgb "color" "\
@@ -4286,7 +4254,7 @@ If FRAME cannot display COLOR, return nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "comint" "comint.el" (22280 21348 921123 491000))
+;;;### (autoloads nil "comint" "comint.el" (0 0 0 0))
 ;;; Generated autoloads from comint.el
 
 (defvar comint-output-filter-functions '(ansi-color-process-output comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\
@@ -4387,8 +4355,7 @@ REGEXP-GROUP is the regular expression group in REGEXP to use.
 
 ;;;***
 \f
-;;;### (autoloads nil "compare-w" "vc/compare-w.el" (22150 28229
-;;;;;;  250072 702000))
+;;;### (autoloads nil "compare-w" "vc/compare-w.el" (0 0 0 0))
 ;;; Generated autoloads from vc/compare-w.el
 
 (autoload 'compare-windows "compare-w" "\
@@ -4424,8 +4391,7 @@ on third call it again advances points to the next difference and so on.
 
 ;;;***
 \f
-;;;### (autoloads nil "compile" "progmodes/compile.el" (22308 37947
-;;;;;;  174422 527000))
+;;;### (autoloads nil "compile" "progmodes/compile.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/compile.el
 
 (defvar compilation-mode-hook nil "\
@@ -4606,13 +4572,13 @@ This is the value of `next-error-function' in Compilation buffers.
 
 ;;;***
 \f
-;;;### (autoloads nil "completion" "completion.el" (22197 58438 91460
-;;;;;;  447000))
+;;;### (autoloads nil "completion" "completion.el" (0 0 0 0))
 ;;; Generated autoloads from completion.el
 
 (defvar dynamic-completion-mode nil "\
 Non-nil if Dynamic-Completion mode is enabled.
-See the command `dynamic-completion-mode' for a description of this minor mode.
+See the `dynamic-completion-mode' command
+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 `dynamic-completion-mode'.")
@@ -4629,8 +4595,8 @@ if ARG is omitted or nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (22150
-;;;;;;  28229 94072 702000))
+;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from textmodes/conf-mode.el
 
 (autoload 'conf-mode "conf-mode" "\
@@ -4785,8 +4751,7 @@ For details see `conf-mode'.  Example:
 
 ;;;***
 \f
-;;;### (autoloads nil "cookie1" "play/cookie1.el" (22150 28228 674072
-;;;;;;  702000))
+;;;### (autoloads nil "cookie1" "play/cookie1.el" (0 0 0 0))
 ;;; Generated autoloads from play/cookie1.el
 
 (autoload 'cookie "cookie1" "\
@@ -4814,8 +4779,8 @@ and subsequent calls on the same file won't go to disk.
 
 ;;;***
 \f
-;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (22150
-;;;;;;  28227 374072 702000))
+;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/copyright.el
 (put 'copyright-at-end-flag 'safe-local-variable 'booleanp)
 (put 'copyright-names-regexp 'safe-local-variable 'stringp)
@@ -4853,8 +4818,8 @@ If FIX is non-nil, run `copyright-fix-years' instead.
 
 ;;;***
 \f
-;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (22197
-;;;;;;  58438 427460 447000))
+;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/cperl-mode.el
 (put 'cperl-indent-level 'safe-local-variable 'integerp)
 (put 'cperl-brace-offset 'safe-local-variable 'integerp)
@@ -5052,8 +5017,7 @@ Run a `perldoc' on the word around point.
 
 ;;;***
 \f
-;;;### (autoloads nil "cpp" "progmodes/cpp.el" (22150 28228 806072
-;;;;;;  702000))
+;;;### (autoloads nil "cpp" "progmodes/cpp.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cpp.el
 
 (autoload 'cpp-highlight-buffer "cpp" "\
@@ -5071,8 +5035,7 @@ Edit display information for cpp conditionals.
 
 ;;;***
 \f
-;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (22150 28227 374072
-;;;;;;  702000))
+;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/crm.el
 
 (autoload 'completing-read-multiple "crm" "\
@@ -5098,8 +5061,7 @@ with empty strings removed.
 
 ;;;***
 \f
-;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (22192 2874
-;;;;;;  475382 391000))
+;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/css-mode.el
 
 (autoload 'css-mode "css-mode" "\
@@ -5115,13 +5077,13 @@ Major mode to edit \"Sassy CSS\" files.
 
 ;;;***
 \f
-;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (22150 28227
-;;;;;;  458072 702000))
+;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (0 0 0 0))
 ;;; Generated autoloads from emulation/cua-base.el
 
 (defvar cua-mode nil "\
 Non-nil if Cua mode is enabled.
-See the command `cua-mode' for a description of this minor mode.
+See the `cua-mode' command
+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 `cua-mode'.")
@@ -5161,8 +5123,7 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings.
 
 ;;;***
 \f
-;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (22150 28227
-;;;;;;  462072 702000))
+;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (0 0 0 0))
 ;;; Generated autoloads from emulation/cua-rect.el
 
 (autoload 'cua-rectangle-mark-mode "cua-rect" "\
@@ -5174,11 +5135,9 @@ Activates the region if needed.  Only lasts until the region is deactivated.
 ;;;***
 \f
 ;;;### (autoloads nil "cursor-sensor" "emacs-lisp/cursor-sensor.el"
-;;;;;;  (22309 58853 326986 699000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/cursor-sensor.el
 
-(defvar cursor-sensor-inhibit nil)
-
 (autoload 'cursor-intangible-mode "cursor-sensor" "\
 Keep cursor outside of any `cursor-intangible' text property.
 
@@ -5196,8 +5155,7 @@ is entering the area covered by the text-property property or leaving it.
 
 ;;;***
 \f
-;;;### (autoloads nil "cus-edit" "cus-edit.el" (22150 28227 290072
-;;;;;;  702000))
+;;;### (autoloads nil "cus-edit" "cus-edit.el" (0 0 0 0))
 ;;; Generated autoloads from cus-edit.el
 
 (defvar custom-browse-sort-alphabetically nil "\
@@ -5447,6 +5405,7 @@ Optional NAME is the name of the buffer.
 OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
 SYMBOL is a customization option, and WIDGET is a widget for editing
 that option.
+DESCRIPTION is unused.
 
 \(fn OPTIONS &optional NAME DESCRIPTION)" nil nil)
 
@@ -5516,8 +5475,7 @@ The format is suitable for use with `easy-menu-define'.
 
 ;;;***
 \f
-;;;### (autoloads nil "cus-theme" "cus-theme.el" (22150 28227 290072
-;;;;;;  702000))
+;;;### (autoloads nil "cus-theme" "cus-theme.el" (0 0 0 0))
 ;;; Generated autoloads from cus-theme.el
 
 (autoload 'customize-create-theme "cus-theme" "\
@@ -5550,8 +5508,7 @@ omitted, a buffer named *Custom Themes* is used.
 
 ;;;***
 \f
-;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (22150 28229
-;;;;;;  250072 702000))
+;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (0 0 0 0))
 ;;; Generated autoloads from vc/cvs-status.el
 
 (autoload 'cvs-status-mode "cvs-status" "\
@@ -5561,8 +5518,7 @@ Mode used for cvs status output.
 
 ;;;***
 \f
-;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (22150 28228 810072
-;;;;;;  702000))
+;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/cwarn.el
 (push (purecopy '(cwarn 1 3 1)) package--builtin-versions)
 
@@ -5585,7 +5541,8 @@ if ARG is omitted or nil.
 
 (defvar global-cwarn-mode nil "\
 Non-nil if Global Cwarn mode is enabled.
-See the command `global-cwarn-mode' for a description of this minor mode.
+See the `global-cwarn-mode' command
+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 `global-cwarn-mode'.")
@@ -5606,8 +5563,8 @@ See `cwarn-mode' for more information on Cwarn mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (22150
-;;;;;;  28228 162072 702000))
+;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from language/cyril-util.el
 
 (autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\
@@ -5635,8 +5592,7 @@ If the argument is nil, we return the display table to its standard state.
 
 ;;;***
 \f
-;;;### (autoloads nil "dabbrev" "dabbrev.el" (22232 11079 208267
-;;;;;;  636000))
+;;;### (autoloads nil "dabbrev" "dabbrev.el" (0 0 0 0))
 ;;; Generated autoloads from dabbrev.el
 (put 'dabbrev-case-fold-search 'risky-local-variable t)
 (put 'dabbrev-case-replace 'risky-local-variable t)
@@ -5682,8 +5638,7 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion].
 
 ;;;***
 \f
-;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (22150 28227
-;;;;;;  146072 702000))
+;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/data-debug.el
 
 (autoload 'data-debug-new-buffer "data-debug" "\
@@ -5693,7 +5648,7 @@ Create a new data-debug buffer with NAME.
 
 ;;;***
 \f
-;;;### (autoloads nil "dbus" "net/dbus.el" (22150 28228 354072 702000))
+;;;### (autoloads nil "dbus" "net/dbus.el" (0 0 0 0))
 ;;; Generated autoloads from net/dbus.el
 
 (autoload 'dbus-handle-event "dbus" "\
@@ -5706,8 +5661,7 @@ If the HANDLER returns a `dbus-error', it is propagated as return message.
 
 ;;;***
 \f
-;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (22150 28228
-;;;;;;  810072 702000))
+;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/dcl-mode.el
 
 (autoload 'dcl-mode "dcl-mode" "\
@@ -5833,8 +5787,7 @@ There is some minimal font-lock support (see vars
 
 ;;;***
 \f
-;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (22150 28227
-;;;;;;  378072 702000))
+;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/debug.el
 
 (setq debugger 'debug)
@@ -5877,8 +5830,7 @@ To specify a nil argument interactively, exit with an empty minibuffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "decipher" "play/decipher.el" (22150 28228
-;;;;;;  674072 702000))
+;;;### (autoloads nil "decipher" "play/decipher.el" (0 0 0 0))
 ;;; Generated autoloads from play/decipher.el
 
 (autoload 'decipher "decipher" "\
@@ -5906,8 +5858,7 @@ The most useful commands are:
 
 ;;;***
 \f
-;;;### (autoloads nil "delim-col" "delim-col.el" (22150 28227 290072
-;;;;;;  702000))
+;;;### (autoloads nil "delim-col" "delim-col.el" (0 0 0 0))
 ;;; Generated autoloads from delim-col.el
 (push (purecopy '(delim-col 2 1)) package--builtin-versions)
 
@@ -5932,14 +5883,15 @@ START and END delimits the corners of text rectangle.
 
 ;;;***
 \f
-;;;### (autoloads nil "delsel" "delsel.el" (22159 43206 893781 63000))
+;;;### (autoloads nil "delsel" "delsel.el" (0 0 0 0))
 ;;; Generated autoloads from delsel.el
 
 (defalias 'pending-delete-mode 'delete-selection-mode)
 
 (defvar delete-selection-mode nil "\
 Non-nil if Delete-Selection mode is enabled.
-See the command `delete-selection-mode' for a description of this minor mode.
+See the `delete-selection-mode' command
+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 `delete-selection-mode'.")
@@ -5964,8 +5916,7 @@ information on adapting behavior of commands in Delete Selection mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (22229 34898
-;;;;;;  796051 395000))
+;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/derived.el
 
 (autoload 'define-derived-mode "derived" "\
@@ -6031,8 +5982,7 @@ the first time the mode is used.
 
 ;;;***
 \f
-;;;### (autoloads nil "descr-text" "descr-text.el" (22300 43827 136520
-;;;;;;  15000))
+;;;### (autoloads nil "descr-text" "descr-text.el" (0 0 0 0))
 ;;; Generated autoloads from descr-text.el
 
 (autoload 'describe-text-properties "descr-text" "\
@@ -6081,12 +6031,13 @@ This function is meant to be used as a value of
 
 ;;;***
 \f
-;;;### (autoloads nil "desktop" "desktop.el" (22189 64323 80321 19000))
+;;;### (autoloads nil "desktop" "desktop.el" (0 0 0 0))
 ;;; 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.
+See the `desktop-save-mode' command
+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 `desktop-save-mode'.")
@@ -6308,8 +6259,7 @@ Revert to the last loaded desktop.
 
 ;;;***
 \f
-;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (22150 28227
-;;;;;;  658072 702000))
+;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/deuglify.el
 
 (autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\
@@ -6341,8 +6291,8 @@ Deuglify broken Outlook (Express) articles and redisplay.
 
 ;;;***
 \f
-;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (22192
-;;;;;;  2880 939382 391000))
+;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from calendar/diary-lib.el
 
 (autoload 'diary "diary-lib" "\
@@ -6384,7 +6334,7 @@ Major mode for editing the diary file.
 
 ;;;***
 \f
-;;;### (autoloads nil "diff" "vc/diff.el" (22308 37947 246422 527000))
+;;;### (autoloads nil "diff" "vc/diff.el" (0 0 0 0))
 ;;; Generated autoloads from vc/diff.el
 
 (defvar diff-switches (purecopy "-u") "\
@@ -6432,8 +6382,7 @@ This requires the external program `diff' to be in your `exec-path'.
 
 ;;;***
 \f
-;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (22150 28229
-;;;;;;  250072 702000))
+;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (0 0 0 0))
 ;;; Generated autoloads from vc/diff-mode.el
 
 (autoload 'diff-mode "diff-mode" "\
@@ -6465,7 +6414,7 @@ the mode if ARG is omitted or nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "dig" "net/dig.el" (22150 28228 354072 702000))
+;;;### (autoloads nil "dig" "net/dig.el" (0 0 0 0))
 ;;; Generated autoloads from net/dig.el
 
 (autoload 'dig "dig" "\
@@ -6476,7 +6425,7 @@ Optional arguments are passed to `dig-invoke'.
 
 ;;;***
 \f
-;;;### (autoloads nil "dired" "dired.el" (22301 64996 17087 484000))
+;;;### (autoloads nil "dired" "dired.el" (0 0 0 0))
 ;;; Generated autoloads from dired.el
 
 (defvar dired-listing-switches (purecopy "-al") "\
@@ -6602,8 +6551,7 @@ Keybindings:
 
 ;;;***
 \f
-;;;### (autoloads nil "dirtrack" "dirtrack.el" (22150 28227 310072
-;;;;;;  702000))
+;;;### (autoloads nil "dirtrack" "dirtrack.el" (0 0 0 0))
 ;;; Generated autoloads from dirtrack.el
 
 (autoload 'dirtrack-mode "dirtrack" "\
@@ -6633,8 +6581,7 @@ from `default-directory'.
 
 ;;;***
 \f
-;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (22270 22707
-;;;;;;  603851 575000))
+;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/disass.el
 
 (autoload 'disassemble "disass" "\
@@ -6648,8 +6595,7 @@ redefine OBJECT if it is a symbol.
 
 ;;;***
 \f
-;;;### (autoloads nil "disp-table" "disp-table.el" (22150 28227 310072
-;;;;;;  702000))
+;;;### (autoloads nil "disp-table" "disp-table.el" (0 0 0 0))
 ;;; Generated autoloads from disp-table.el
 
 (autoload 'make-display-table "disp-table" "\
@@ -6770,8 +6716,7 @@ in `.emacs'.
 
 ;;;***
 \f
-;;;### (autoloads nil "dissociate" "play/dissociate.el" (22150 28228
-;;;;;;  674072 702000))
+;;;### (autoloads nil "dissociate" "play/dissociate.el" (0 0 0 0))
 ;;; Generated autoloads from play/dissociate.el
 
 (autoload 'dissociated-press "dissociate" "\
@@ -6787,7 +6732,7 @@ Default is 2.
 
 ;;;***
 \f
-;;;### (autoloads nil "dnd" "dnd.el" (22150 28227 314072 702000))
+;;;### (autoloads nil "dnd" "dnd.el" (0 0 0 0))
 ;;; Generated autoloads from dnd.el
 
 (defvar dnd-protocol-alist `((,(purecopy "^file:///") . dnd-open-local-file) (,(purecopy "^file://") . dnd-open-file) (,(purecopy "^file:") . dnd-open-local-file) (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . dnd-open-file)) "\
@@ -6807,8 +6752,7 @@ if some action was made, or nil if the URL is ignored.")
 
 ;;;***
 \f
-;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (22150 28229
-;;;;;;  98072 702000))
+;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/dns-mode.el
 
 (autoload 'dns-mode "dns-mode" "\
@@ -6831,8 +6775,7 @@ Locate SOA record and increment the serial field.
 
 ;;;***
 \f
-;;;### (autoloads nil "doc-view" "doc-view.el" (22253 13631 322961
-;;;;;;  36000))
+;;;### (autoloads nil "doc-view" "doc-view.el" (0 0 0 0))
 ;;; Generated autoloads from doc-view.el
 
 (autoload 'doc-view-mode-p "doc-view" "\
@@ -6878,8 +6821,7 @@ See the command `doc-view-mode' for more information on this mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "doctor" "play/doctor.el" (22150 28228 678072
-;;;;;;  702000))
+;;;### (autoloads nil "doctor" "play/doctor.el" (0 0 0 0))
 ;;; Generated autoloads from play/doctor.el
 
 (autoload 'doctor "doctor" "\
@@ -6889,7 +6831,7 @@ Switch to *doctor* buffer and start giving psychotherapy.
 
 ;;;***
 \f
-;;;### (autoloads nil "double" "double.el" (22150 28227 318072 702000))
+;;;### (autoloads nil "double" "double.el" (0 0 0 0))
 ;;; Generated autoloads from double.el
 
 (autoload 'double-mode "double" "\
@@ -6905,8 +6847,7 @@ strings when pressed twice.  See `double-map' for details.
 
 ;;;***
 \f
-;;;### (autoloads nil "dunnet" "play/dunnet.el" (22160 10656 10679
-;;;;;;  927000))
+;;;### (autoloads nil "dunnet" "play/dunnet.el" (0 0 0 0))
 ;;; Generated autoloads from play/dunnet.el
 (push (purecopy '(dunnet 2 2)) package--builtin-versions)
 
@@ -6917,8 +6858,8 @@ Switch to *dungeon* buffer and start game.
 
 ;;;***
 \f
-;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (22211
-;;;;;;  4933 581358 144000))
+;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from emacs-lisp/easy-mmode.el
 
 (defalias 'easy-mmode-define-minor-mode 'define-minor-mode)
@@ -6947,9 +6888,10 @@ Optional LIGHTER is displayed in the mode line when the mode is on.
 Optional KEYMAP is the default keymap bound to the mode keymap.
   If non-nil, it should be a variable name (whose value is a keymap),
   or an expression that returns either a keymap or a list of
-  arguments for `easy-mmode-define-keymap'.  If you supply a KEYMAP
-  argument that is not a symbol, this macro defines the variable
-  MODE-map and gives it the value that KEYMAP specifies.
+  (KEY . BINDING) pairs where KEY and BINDING are suitable for
+  `define-key'.  If you supply a KEYMAP argument that is not a
+  symbol, this macro defines the variable MODE-map and gives it
+  the value that KEYMAP specifies.
 
 BODY contains code to execute each time the mode is enabled or disabled.
   It is executed after toggling the mode, and before running MODE-hook.
@@ -7060,8 +7002,8 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX).
 
 ;;;***
 \f
-;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (22150
-;;;;;;  28227 398072 702000))
+;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/easymenu.el
 
 (autoload 'easy-menu-define "easymenu" "\
@@ -7199,8 +7141,7 @@ To implement dynamic menus, either call this from
 
 ;;;***
 \f
-;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (22150 28228
-;;;;;;  814072 702000))
+;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ebnf2ps.el
 (push (purecopy '(ebnf2ps 4 4)) package--builtin-versions)
 
@@ -7465,8 +7406,7 @@ See `ebnf-style-database' documentation.
 
 ;;;***
 \f
-;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (22150 28228
-;;;;;;  814072 702000))
+;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ebrowse.el
 
 (autoload 'ebrowse-tree-mode "ebrowse" "\
@@ -7614,8 +7554,7 @@ Display statistics for a class tree.
 
 ;;;***
 \f
-;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (22150 28227 318072
-;;;;;;  702000))
+;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (0 0 0 0))
 ;;; Generated autoloads from ebuff-menu.el
 
 (autoload 'electric-buffer-list "ebuff-menu" "\
@@ -7647,8 +7586,7 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry.
 
 ;;;***
 \f
-;;;### (autoloads nil "echistory" "echistory.el" (22150 28227 318072
-;;;;;;  702000))
+;;;### (autoloads nil "echistory" "echistory.el" (0 0 0 0))
 ;;; Generated autoloads from echistory.el
 
 (autoload 'Electric-command-history-redo-expression "echistory" "\
@@ -7659,9 +7597,8 @@ With prefix arg NOCONFIRM, execute current line as-is without editing.
 
 ;;;***
 \f
-;;;### (autoloads nil "ecomplete" "gnus/ecomplete.el" (22150 28227
-;;;;;;  658072 702000))
-;;; Generated autoloads from gnus/ecomplete.el
+;;;### (autoloads nil "ecomplete" "ecomplete.el" (0 0 0 0))
+;;; Generated autoloads from ecomplete.el
 
 (autoload 'ecomplete-setup "ecomplete" "\
 
@@ -7670,13 +7607,14 @@ With prefix arg NOCONFIRM, execute current line as-is without editing.
 
 ;;;***
 \f
-;;;### (autoloads nil "ede" "cedet/ede.el" (22189 64323 68321 19000))
+;;;### (autoloads nil "ede" "cedet/ede.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/ede.el
 (push (purecopy '(ede 1 2)) package--builtin-versions)
 
 (defvar global-ede-mode nil "\
 Non-nil if Global Ede mode is enabled.
-See the command `global-ede-mode' for a description of this minor mode.
+See the `global-ede-mode' command
+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 `global-ede-mode'.")
@@ -7696,8 +7634,7 @@ an EDE controlled project.
 
 ;;;***
 \f
-;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (22189 64323
-;;;;;;  92321 19000))
+;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/edebug.el
 
 (defvar edebug-all-defs nil "\
@@ -7761,7 +7698,7 @@ Toggle edebugging of all forms.
 
 ;;;***
 \f
-;;;### (autoloads nil "ediff" "vc/ediff.el" (22150 28229 274072 702000))
+;;;### (autoloads nil "ediff" "vc/ediff.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff.el
 (push (purecopy '(ediff 2 81 4)) package--builtin-versions)
 
@@ -8033,8 +7970,7 @@ With optional NODE, goes to that node.
 
 ;;;***
 \f
-;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (22150 28229
-;;;;;;  254072 702000))
+;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff-help.el
 
 (autoload 'ediff-customize "ediff-help" "\
@@ -8044,8 +7980,7 @@ With optional NODE, goes to that node.
 
 ;;;***
 \f
-;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (22189 64323
-;;;;;;  332321 19000))
+;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff-mult.el
 
 (autoload 'ediff-show-registry "ediff-mult" "\
@@ -8057,8 +7992,7 @@ Display Ediff's registry.
 
 ;;;***
 \f
-;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (22150 28229
-;;;;;;  270072 702000))
+;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (0 0 0 0))
 ;;; Generated autoloads from vc/ediff-util.el
 
 (autoload 'ediff-toggle-multiframe "ediff-util" "\
@@ -8077,8 +8011,7 @@ To change the default, set the variable `ediff-use-toolbar-p', which see.
 
 ;;;***
 \f
-;;;### (autoloads nil "edmacro" "edmacro.el" (22150 28227 318072
-;;;;;;  702000))
+;;;### (autoloads nil "edmacro" "edmacro.el" (0 0 0 0))
 ;;; Generated autoloads from edmacro.el
 (push (purecopy '(edmacro 2 1)) package--builtin-versions)
 
@@ -8127,8 +8060,7 @@ or nil, use a compact 80-column format.
 
 ;;;***
 \f
-;;;### (autoloads nil "edt" "emulation/edt.el" (22204 31687 809113
-;;;;;;  480000))
+;;;### (autoloads nil "edt" "emulation/edt.el" (0 0 0 0))
 ;;; Generated autoloads from emulation/edt.el
 
 (autoload 'edt-set-scroll-margins "edt" "\
@@ -8145,7 +8077,7 @@ Turn on EDT Emulation.
 
 ;;;***
 \f
-;;;### (autoloads nil "ehelp" "ehelp.el" (22150 28227 318072 702000))
+;;;### (autoloads nil "ehelp" "ehelp.el" (0 0 0 0))
 ;;; Generated autoloads from ehelp.el
 
 (autoload 'with-electric-help "ehelp" "\
@@ -8181,15 +8113,14 @@ BUFFER is put back into its original major mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (22308 37947
-;;;;;;  74422 527000))
+;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/eieio.el
 (push (purecopy '(eieio 1 4)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (22150
-;;;;;;  28612 762072 702000))
+;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from emacs-lisp/eieio-core.el
 (push (purecopy '(eieio-core 1 4)) package--builtin-versions)
 
@@ -8205,8 +8136,7 @@ It creates an autoload function for CNAME's constructor.
 
 ;;;***
 \f
-;;;### (autoloads nil "elec-pair" "elec-pair.el" (22150 28227 322072
-;;;;;;  702000))
+;;;### (autoloads nil "elec-pair" "elec-pair.el" (0 0 0 0))
 ;;; Generated autoloads from elec-pair.el
 
 (defvar electric-pair-text-pairs '((34 . 34)) "\
@@ -8220,7 +8150,8 @@ defined in `electric-pair-text-syntax-table'")
 
 (defvar electric-pair-mode nil "\
 Non-nil if Electric-Pair mode is enabled.
-See the command `electric-pair-mode' for a description of this minor mode.
+See the `electric-pair-mode' command
+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 `electric-pair-mode'.")
@@ -8247,8 +8178,7 @@ Toggle `electric-pair-mode' only in this buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "elide-head" "elide-head.el" (22150 28227 322072
-;;;;;;  702000))
+;;;### (autoloads nil "elide-head" "elide-head.el" (0 0 0 0))
 ;;; Generated autoloads from elide-head.el
 
 (autoload 'elide-head "elide-head" "\
@@ -8263,8 +8193,7 @@ This is suitable as an entry on `find-file-hook' or appropriate mode hooks.
 
 ;;;***
 \f
-;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (22150 28227
-;;;;;;  422072 702000))
+;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/elint.el
 
 (autoload 'elint-file "elint" "\
@@ -8299,8 +8228,7 @@ optional prefix argument REINIT is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (22150 28227 422072
-;;;;;;  702000))
+;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/elp.el
 
 (autoload 'elp-instrument-function "elp" "\
@@ -8334,8 +8262,7 @@ displayed.
 
 ;;;***
 \f
-;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (22150 28227 458072
-;;;;;;  702000))
+;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lock.el
 
 (autoload 'emacs-lock-mode "emacs-lock" "\
@@ -8362,8 +8289,7 @@ Other values are interpreted as usual.
 
 ;;;***
 \f
-;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (22150 28228
-;;;;;;  226072 702000))
+;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (0 0 0 0))
 ;;; Generated autoloads from mail/emacsbug.el
 
 (autoload 'report-emacs-bug "emacsbug" "\
@@ -8376,8 +8302,7 @@ Prompts for bug subject.  Leaves you in a mail buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "emerge" "vc/emerge.el" (22086 11930 378062
-;;;;;;  731000))
+;;;### (autoloads nil "emerge" "vc/emerge.el" (0 0 0 0))
 ;;; Generated autoloads from vc/emerge.el
 
 (autoload 'emerge-files "emerge" "\
@@ -8437,8 +8362,7 @@ Emerge two RCS revisions of a file, with another revision as ancestor.
 
 ;;;***
 \f
-;;;### (autoloads nil "enriched" "textmodes/enriched.el" (22150 28229
-;;;;;;  98072 702000))
+;;;### (autoloads nil "enriched" "textmodes/enriched.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/enriched.el
 
 (autoload 'enriched-mode "enriched" "\
@@ -8473,7 +8397,7 @@ Commands:
 
 ;;;***
 \f
-;;;### (autoloads nil "epa" "epa.el" (22150 28227 482072 702000))
+;;;### (autoloads nil "epa" "epa.el" (0 0 0 0))
 ;;; Generated autoloads from epa.el
 
 (autoload 'epa-list-keys "epa" "\
@@ -8661,8 +8585,7 @@ Insert selected KEYS after the point.
 
 ;;;***
 \f
-;;;### (autoloads nil "epa-dired" "epa-dired.el" (22150 28227 478072
-;;;;;;  702000))
+;;;### (autoloads nil "epa-dired" "epa-dired.el" (0 0 0 0))
 ;;; Generated autoloads from epa-dired.el
 
 (autoload 'epa-dired-do-decrypt "epa-dired" "\
@@ -8687,8 +8610,7 @@ Encrypt marked files.
 
 ;;;***
 \f
-;;;### (autoloads nil "epa-file" "epa-file.el" (22150 28227 482072
-;;;;;;  702000))
+;;;### (autoloads nil "epa-file" "epa-file.el" (0 0 0 0))
 ;;; Generated autoloads from epa-file.el
 
 (autoload 'epa-file-handler "epa-file" "\
@@ -8708,8 +8630,7 @@ Encrypt marked files.
 
 ;;;***
 \f
-;;;### (autoloads nil "epa-mail" "epa-mail.el" (22150 28227 482072
-;;;;;;  702000))
+;;;### (autoloads nil "epa-mail" "epa-mail.el" (0 0 0 0))
 ;;; Generated autoloads from epa-mail.el
 
 (autoload 'epa-mail-mode "epa-mail" "\
@@ -8769,7 +8690,8 @@ The buffer is expected to contain a mail message.
 
 (defvar epa-global-mail-mode nil "\
 Non-nil if Epa-Global-Mail mode is enabled.
-See the command `epa-global-mail-mode' for a description of this minor mode.
+See the `epa-global-mail-mode' command
+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 `epa-global-mail-mode'.")
@@ -8786,7 +8708,7 @@ if ARG is omitted or nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "epg" "epg.el" (22217 43732 468164 355000))
+;;;### (autoloads nil "epg" "epg.el" (0 0 0 0))
 ;;; Generated autoloads from epg.el
 (push (purecopy '(epg 1 0 0)) package--builtin-versions)
 
@@ -8797,8 +8719,7 @@ Return a context object.
 
 ;;;***
 \f
-;;;### (autoloads nil "epg-config" "epg-config.el" (22217 43732 444164
-;;;;;;  355000))
+;;;### (autoloads nil "epg-config" "epg-config.el" (0 0 0 0))
 ;;; Generated autoloads from epg-config.el
 
 (autoload 'epg-find-configuration "epg-config" "\
@@ -8832,7 +8753,7 @@ Look at CONFIG and try to expand GROUP.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc" "erc/erc.el" (22197 58438 151460 447000))
+;;;### (autoloads nil "erc" "erc/erc.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc.el
 (push (purecopy '(erc 5 3)) package--builtin-versions)
 
@@ -8881,36 +8802,32 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (22150
-;;;;;;  28227 506072 702000))
+;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from erc/erc-autoaway.el
  (autoload 'erc-autoaway-mode "erc-autoaway")
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-button" "erc/erc-button.el" (22195 16710
-;;;;;;  391344 967000))
+;;;### (autoloads nil "erc-button" "erc/erc-button.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-button.el
  (autoload 'erc-button-mode "erc-button" nil t)
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (22150 28227
-;;;;;;  510072 702000))
+;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-capab.el
  (autoload 'erc-capab-identify-mode "erc-capab" nil t)
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (22150 28227
-;;;;;;  510072 702000))
+;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-compat.el
  (autoload 'erc-define-minor-mode "erc-compat")
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (22150 28227 510072
-;;;;;;  702000))
+;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-dcc.el
  (autoload 'erc-dcc-mode "erc-dcc")
 
@@ -8940,14 +8857,14 @@ that subcommand.
 ;;;***
 \f
 ;;;### (autoloads nil "erc-desktop-notifications" "erc/erc-desktop-notifications.el"
-;;;;;;  (22150 28227 510072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from erc/erc-desktop-notifications.el
 (autoload 'erc-notifications-mode "erc-desktop-notifications" "" t)
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (22150
-;;;;;;  28227 510072 702000))
+;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from erc/erc-ezbounce.el
 
 (autoload 'erc-cmd-ezb "erc-ezbounce" "\
@@ -9009,8 +8926,7 @@ Add EZBouncer convenience functions to ERC.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (22150 28227 510072
-;;;;;;  702000))
+;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-fill.el
  (autoload 'erc-fill-mode "erc-fill" nil t)
 
@@ -9022,8 +8938,7 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (22150 28227
-;;;;;;  510072 702000))
+;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-identd.el
  (autoload 'erc-identd-mode "erc-identd")
 
@@ -9044,8 +8959,7 @@ system.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (22150 28227
-;;;;;;  514072 702000))
+;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-imenu.el
 
 (autoload 'erc-create-imenu-index "erc-imenu" "\
@@ -9055,22 +8969,19 @@ system.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-join" "erc/erc-join.el" (22150 28227 514072
-;;;;;;  702000))
+;;;### (autoloads nil "erc-join" "erc/erc-join.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-join.el
  (autoload 'erc-autojoin-mode "erc-join" nil t)
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-list" "erc/erc-list.el" (22150 28227 514072
-;;;;;;  702000))
+;;;### (autoloads nil "erc-list" "erc/erc-list.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-list.el
  (autoload 'erc-list-mode "erc-list")
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-log" "erc/erc-log.el" (22150 28227 514072
-;;;;;;  702000))
+;;;### (autoloads nil "erc-log" "erc/erc-log.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-log.el
  (autoload 'erc-log-mode "erc-log" nil t)
 
@@ -9099,8 +9010,7 @@ You can save every individual message by putting this function on
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-match" "erc/erc-match.el" (22150 28227
-;;;;;;  514072 702000))
+;;;### (autoloads nil "erc-match" "erc/erc-match.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-match.el
  (autoload 'erc-match-mode "erc-match")
 
@@ -9146,15 +9056,14 @@ Delete dangerous-host interactively to `erc-dangerous-hosts'.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (22150 28227 514072
-;;;;;;  702000))
+;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-menu.el
  (autoload 'erc-menu-mode "erc-menu" nil t)
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (22150
-;;;;;;  28227 514072 702000))
+;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from erc/erc-netsplit.el
  (autoload 'erc-netsplit-mode "erc-netsplit")
 
@@ -9165,8 +9074,8 @@ Show who's gone.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (22189
-;;;;;;  64323 128321 19000))
+;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from erc/erc-networks.el
 
 (autoload 'erc-determine-network "erc-networks" "\
@@ -9183,8 +9092,7 @@ Interactively select a server to connect to using `erc-server-alist'.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (22150 28227
-;;;;;;  518072 702000))
+;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-notify.el
  (autoload 'erc-notify-mode "erc-notify" nil t)
 
@@ -9202,36 +9110,33 @@ with args, toggle notify status of people.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-page" "erc/erc-page.el" (22150 28227 518072
-;;;;;;  702000))
+;;;### (autoloads nil "erc-page" "erc/erc-page.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-page.el
  (autoload 'erc-page-mode "erc-page")
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (22195
-;;;;;;  16710 595344 967000))
+;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (0 0
+;;;;;;  0))
 ;;; Generated autoloads from erc/erc-pcomplete.el
  (autoload 'erc-completion-mode "erc-pcomplete" nil t)
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (22150 28227
-;;;;;;  518072 702000))
+;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-replace.el
  (autoload 'erc-replace-mode "erc-replace")
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (22150 28227 518072
-;;;;;;  702000))
+;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-ring.el
  (autoload 'erc-ring-mode "erc-ring" nil t)
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-services" "erc/erc-services.el" (22150
-;;;;;;  28227 518072 702000))
+;;;### (autoloads nil "erc-services" "erc/erc-services.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from erc/erc-services.el
  (autoload 'erc-services-mode "erc-services" nil t)
 
@@ -9248,15 +9153,14 @@ When called interactively, read the password using `read-passwd'.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (22150 28227
-;;;;;;  518072 702000))
+;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-sound.el
  (autoload 'erc-sound-mode "erc-sound")
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (22150
-;;;;;;  28227 518072 702000))
+;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from erc/erc-speedbar.el
 
 (autoload 'erc-speedbar-browser "erc-speedbar" "\
@@ -9267,27 +9171,26 @@ This will add a speedbar major display mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (22150
-;;;;;;  28227 518072 702000))
+;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from erc/erc-spelling.el
  (autoload 'erc-spelling-mode "erc-spelling" nil t)
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (22150 28227
-;;;;;;  518072 702000))
+;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-stamp.el
  (autoload 'erc-timestamp-mode "erc-stamp" nil t)
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-track" "erc/erc-track.el" (22195 16710
-;;;;;;  599344 967000))
+;;;### (autoloads nil "erc-track" "erc/erc-track.el" (0 0 0 0))
 ;;; 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.")
+See the `erc-track-minor-mode' command
+for a description of this minor mode.")
 
 (custom-autoload 'erc-track-minor-mode "erc-track" nil)
 
@@ -9307,8 +9210,8 @@ keybindings will not do anything useful.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (22150
-;;;;;;  28227 522072 702000))
+;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from erc/erc-truncate.el
  (autoload 'erc-truncate-mode "erc-truncate" nil t)
 
@@ -9327,8 +9230,7 @@ Meant to be used in hooks, like `erc-insert-post-hook'.
 
 ;;;***
 \f
-;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (22150 28227 522072
-;;;;;;  702000))
+;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (0 0 0 0))
 ;;; Generated autoloads from erc/erc-xdcc.el
  (autoload 'erc-xdcc-mode "erc-xdcc")
 
@@ -9339,8 +9241,7 @@ Add a file to `erc-xdcc-files'.
 
 ;;;***
 \f
-;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (22182 4679 395463
-;;;;;;  499000))
+;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/ert.el
 
 (autoload 'ert-deftest "ert" "\
@@ -9409,8 +9310,7 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test).
 
 ;;;***
 \f
-;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (22150 28227
-;;;;;;  426072 702000))
+;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/ert-x.el
 
 (put 'ert-with-test-buffer 'lisp-indent-function 1)
@@ -9422,8 +9322,7 @@ Kill all test buffers that are still live.
 
 ;;;***
 \f
-;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (22150 28227
-;;;;;;  542072 702000))
+;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/esh-mode.el
 
 (autoload 'eshell-mode "esh-mode" "\
@@ -9433,8 +9332,7 @@ Emacs shell interactive mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "eshell" "eshell/eshell.el" (22150 28227 542072
-;;;;;;  702000))
+;;;### (autoloads nil "eshell" "eshell/eshell.el" (0 0 0 0))
 ;;; Generated autoloads from eshell/eshell.el
 (push (purecopy '(eshell 2 4 2)) package--builtin-versions)
 
@@ -9469,8 +9367,7 @@ corresponding to a successful execution.
 
 ;;;***
 \f
-;;;### (autoloads nil "etags" "progmodes/etags.el" (22182 44805 327853
-;;;;;;  279000))
+;;;### (autoloads nil "etags" "progmodes/etags.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/etags.el
 
 (defvar tags-file-name nil "\
@@ -9785,8 +9682,8 @@ for \\[find-tag] (which see).
 
 ;;;***
 \f
-;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (22150
-;;;;;;  28228 166072 702000))
+;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from language/ethio-util.el
 
 (autoload 'setup-ethiopic-environment-internal "ethio-util" "\
@@ -9954,7 +9851,7 @@ With ARG, insert that many delimiters.
 
 ;;;***
 \f
-;;;### (autoloads nil "eudc" "net/eudc.el" (22150 28228 354072 702000))
+;;;### (autoloads nil "eudc" "net/eudc.el" (0 0 0 0))
 ;;; Generated autoloads from net/eudc.el
 
 (autoload 'eudc-set-server "eudc" "\
@@ -10004,12 +9901,11 @@ This does nothing except loading eudc by autoload side-effect.
 
 \(fn)" t nil)
 
-(cond ((not (featurep 'xemacs)) (defvar eudc-tools-menu (let ((map (make-sparse-keymap "Directory Search"))) (define-key map [phone] `(menu-item ,(purecopy "Get Phone") eudc-get-phone :help ,(purecopy "Get the phone field of name from the directory server"))) (define-key map [email] `(menu-item ,(purecopy "Get Email") eudc-get-email :help ,(purecopy "Get the email field of NAME from the directory server"))) (define-key map [separator-eudc-email] menu-bar-separator) (define-key map [expand-inline] `(menu-item ,(purecopy "Expand Inline Query") eudc-expand-inline :help ,(purecopy "Query the directory server, and expand the query string before point"))) (define-key map [query] `(menu-item ,(purecopy "Query with Form") eudc-query-form :help ,(purecopy "Display a form to query the directory server"))) (define-key map [separator-eudc-query] menu-bar-separator) (define-key map [new] `(menu-item ,(purecopy "New Server") eudc-set-server :help ,(purecopy "Set the directory server to SERVER using PROTOCOL"))) (define-key map [load] `(menu-item ,(purecopy "Load Hotlist of Servers") eudc-load-eudc :help ,(purecopy "Load the Emacs Unified Directory Client"))) map)) (fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu))) (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)))))))))))
+(cond ((not (featurep 'xemacs)) (defvar eudc-tools-menu (let ((map (make-sparse-keymap "Directory Servers"))) (define-key map [phone] `(menu-item ,(purecopy "Get Phone") eudc-get-phone :help ,(purecopy "Get the phone field of name from the directory server"))) (define-key map [email] `(menu-item ,(purecopy "Get Email") eudc-get-email :help ,(purecopy "Get the email field of NAME from the directory server"))) (define-key map [separator-eudc-email] menu-bar-separator) (define-key map [expand-inline] `(menu-item ,(purecopy "Expand Inline Query") eudc-expand-inline :help ,(purecopy "Query the directory server, and expand the query string before point"))) (define-key map [query] `(menu-item ,(purecopy "Query with Form") eudc-query-form :help ,(purecopy "Display a form to query the directory server"))) (define-key map [separator-eudc-query] menu-bar-separator) (define-key map [new] `(menu-item ,(purecopy "New Server") eudc-set-server :help ,(purecopy "Set the directory server to SERVER using PROTOCOL"))) (define-key map [load] `(menu-item ,(purecopy "Load Hotlist of Servers") eudc-load-eudc :help ,(purecopy "Load the Emacs Unified Directory Client"))) map)) (fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu))) (t (let ((menu '("Directory Servers" ["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 Servers" (easy-menu-create-keymaps "Directory Servers" (cdr menu)))))))))))
 
 ;;;***
 \f
-;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (22150 28228 354072
-;;;;;;  702000))
+;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (0 0 0 0))
 ;;; Generated autoloads from net/eudc-bob.el
 
 (autoload 'eudc-display-generic-binary "eudc-bob" "\
@@ -10044,8 +9940,7 @@ Display a button for the JPEG DATA.
 
 ;;;***
 \f
-;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (22150 28228
-;;;;;;  354072 702000))
+;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (0 0 0 0))
 ;;; Generated autoloads from net/eudc-export.el
 
 (autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\
@@ -10061,8 +9956,8 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record.
 
 ;;;***
 \f
-;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (22150
-;;;;;;  28228 354072 702000))
+;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from net/eudc-hotlist.el
 
 (autoload 'eudc-edit-hotlist "eudc-hotlist" "\
@@ -10072,8 +9967,7 @@ Edit the hotlist of directory servers in a specialized buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (22150 28227 430072
-;;;;;;  702000))
+;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/ewoc.el
 
 (autoload 'ewoc-create "ewoc" "\
@@ -10099,7 +9993,7 @@ fourth arg NOSEP non-nil inhibits this.
 
 ;;;***
 \f
-;;;### (autoloads nil "eww" "net/eww.el" (22229 34898 904051 395000))
+;;;### (autoloads nil "eww" "net/eww.el" (0 0 0 0))
 ;;; Generated autoloads from net/eww.el
 
 (defvar eww-suggest-uris '(eww-links-at-point url-get-url-at-point eww-current-url) "\
@@ -10146,8 +10040,8 @@ Display the bookmarks.
 
 ;;;***
 \f
-;;;### (autoloads nil "executable" "progmodes/executable.el" (22150
-;;;;;;  28228 818072 702000))
+;;;### (autoloads nil "executable" "progmodes/executable.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/executable.el
 
 (autoload 'executable-command-find-posix-p "executable" "\
@@ -10182,7 +10076,7 @@ file modes.
 
 ;;;***
 \f
-;;;### (autoloads nil "expand" "expand.el" (22150 28227 542072 702000))
+;;;### (autoloads nil "expand" "expand.el" (0 0 0 0))
 ;;; Generated autoloads from expand.el
 
 (autoload 'expand-add-abbrevs "expand" "\
@@ -10231,8 +10125,7 @@ This is used only in conjunction with `expand-add-abbrevs'.
 
 ;;;***
 \f
-;;;### (autoloads nil "f90" "progmodes/f90.el" (22197 58438 431460
-;;;;;;  447000))
+;;;### (autoloads nil "f90" "progmodes/f90.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/f90.el
 
 (autoload 'f90-mode "f90" "\
@@ -10299,8 +10192,7 @@ with no args, if that value is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "face-remap" "face-remap.el" (22283 34751 141333
-;;;;;;  844000))
+;;;### (autoloads nil "face-remap" "face-remap.el" (0 0 0 0))
 ;;; Generated autoloads from face-remap.el
 
 (autoload 'face-remap-add-relative "face-remap" "\
@@ -10459,8 +10351,7 @@ Besides the choice of face, it is the same as `buffer-face-mode'.
 
 ;;;***
 \f
-;;;### (autoloads nil "feedmail" "mail/feedmail.el" (22092 27717
-;;;;;;  880268 464000))
+;;;### (autoloads nil "feedmail" "mail/feedmail.el" (0 0 0 0))
 ;;; Generated autoloads from mail/feedmail.el
 (push (purecopy '(feedmail 11)) package--builtin-versions)
 
@@ -10514,7 +10405,7 @@ you can set `feedmail-queue-reminder-alist' to nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "ffap" "ffap.el" (22279 37684 340180 436000))
+;;;### (autoloads nil "ffap" "ffap.el" (0 0 0 0))
 ;;; Generated autoloads from ffap.el
 
 (autoload 'ffap-next "ffap" "\
@@ -10577,8 +10468,7 @@ Evaluate the forms in variable `ffap-bindings'.
 
 ;;;***
 \f
-;;;### (autoloads nil "filecache" "filecache.el" (22150 28227 554072
-;;;;;;  702000))
+;;;### (autoloads nil "filecache" "filecache.el" (0 0 0 0))
 ;;; Generated autoloads from filecache.el
 
 (autoload 'file-cache-add-directory "filecache" "\
@@ -10635,8 +10525,7 @@ the name is considered already unique; only the second substitution
 
 ;;;***
 \f
-;;;### (autoloads nil "filenotify" "filenotify.el" (22230 55750 327718
-;;;;;;  91000))
+;;;### (autoloads nil "filenotify" "filenotify.el" (0 0 0 0))
 ;;; Generated autoloads from filenotify.el
 
 (autoload 'file-notify-handle-event "filenotify" "\
@@ -10651,8 +10540,7 @@ Otherwise, signal a `file-notify-error'.
 
 ;;;***
 \f
-;;;### (autoloads nil "files-x" "files-x.el" (22189 64323 128321
-;;;;;;  19000))
+;;;### (autoloads nil "files-x" "files-x.el" (0 0 0 0))
 ;;; Generated autoloads from files-x.el
 
 (autoload 'add-file-local-variable "files-x" "\
@@ -10717,8 +10605,7 @@ Copy directory-local variables to the -*- line.
 
 ;;;***
 \f
-;;;### (autoloads nil "filesets" "filesets.el" (22150 28227 578072
-;;;;;;  702000))
+;;;### (autoloads nil "filesets" "filesets.el" (0 0 0 0))
 ;;; Generated autoloads from filesets.el
 
 (autoload 'filesets-init "filesets" "\
@@ -10729,8 +10616,7 @@ Set up hooks, load the cache file -- if existing -- and build the menu.
 
 ;;;***
 \f
-;;;### (autoloads nil "find-cmd" "find-cmd.el" (22150 28227 578072
-;;;;;;  702000))
+;;;### (autoloads nil "find-cmd" "find-cmd.el" (0 0 0 0))
 ;;; Generated autoloads from find-cmd.el
 (push (purecopy '(find-cmd 0 6)) package--builtin-versions)
 
@@ -10750,8 +10636,7 @@ result is a string that should be ready for the command line.
 
 ;;;***
 \f
-;;;### (autoloads nil "find-dired" "find-dired.el" (22150 28227 578072
-;;;;;;  702000))
+;;;### (autoloads nil "find-dired" "find-dired.el" (0 0 0 0))
 ;;; Generated autoloads from find-dired.el
 
 (autoload 'find-dired "find-dired" "\
@@ -10791,8 +10676,7 @@ use in place of \"-ls\" as the final argument.
 
 ;;;***
 \f
-;;;### (autoloads nil "find-file" "find-file.el" (22150 28227 578072
-;;;;;;  702000))
+;;;### (autoloads nil "find-file" "find-file.el" (0 0 0 0))
 ;;; Generated autoloads from find-file.el
 
 (defvar ff-special-constructs `((,(purecopy "^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") lambda nil (buffer-substring (match-beginning 2) (match-end 2)))) "\
@@ -10882,15 +10766,18 @@ Visit the file you click on in another window.
 
 ;;;***
 \f
-;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (22150
-;;;;;;  28227 430072 702000))
+;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/find-func.el
 
 (autoload 'find-library "find-func" "\
 Find the Emacs Lisp source of LIBRARY.
-LIBRARY should be a string (the name of the library).
+LIBRARY should be a string (the name of the library).  If the
+optional OTHER-WINDOW argument (i.e., the command argument) is
+specified, pop to a different window before displaying the
+buffer.
 
-\(fn LIBRARY)" t nil)
+\(fn LIBRARY &optional OTHER-WINDOW)" t nil)
 
 (autoload 'find-function-search-for-symbol "find-func" "\
 Search for SYMBOL's definition of type TYPE in LIBRARY.
@@ -11053,8 +10940,7 @@ Define some key bindings for the find-function family of functions.
 
 ;;;***
 \f
-;;;### (autoloads nil "find-lisp" "find-lisp.el" (22150 28227 578072
-;;;;;;  702000))
+;;;### (autoloads nil "find-lisp" "find-lisp.el" (0 0 0 0))
 ;;; Generated autoloads from find-lisp.el
 
 (autoload 'find-lisp-find-dired "find-lisp" "\
@@ -11074,7 +10960,7 @@ Change the filter on a `find-lisp-find-dired' buffer to REGEXP.
 
 ;;;***
 \f
-;;;### (autoloads nil "finder" "finder.el" (22150 28227 578072 702000))
+;;;### (autoloads nil "finder" "finder.el" (0 0 0 0))
 ;;; Generated autoloads from finder.el
 (push (purecopy '(finder 1 0)) package--builtin-versions)
 
@@ -11096,8 +10982,7 @@ Find packages matching a given keyword.
 
 ;;;***
 \f
-;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (22150 28227 578072
-;;;;;;  702000))
+;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (0 0 0 0))
 ;;; Generated autoloads from flow-ctrl.el
 
 (autoload 'enable-flow-control "flow-ctrl" "\
@@ -11118,9 +11003,8 @@ to get the effect of a C-q.
 
 ;;;***
 \f
-;;;### (autoloads nil "flow-fill" "gnus/flow-fill.el" (22150 28227
-;;;;;;  658072 702000))
-;;; Generated autoloads from gnus/flow-fill.el
+;;;### (autoloads nil "flow-fill" "mail/flow-fill.el" (0 0 0 0))
+;;; Generated autoloads from mail/flow-fill.el
 
 (autoload 'fill-flowed-encode "flow-fill" "\
 
@@ -11134,8 +11018,7 @@ to get the effect of a C-q.
 
 ;;;***
 \f
-;;;### (autoloads nil "flymake" "progmodes/flymake.el" (22150 28228
-;;;;;;  818072 702000))
+;;;### (autoloads nil "flymake" "progmodes/flymake.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/flymake.el
 (push (purecopy '(flymake 0 3)) package--builtin-versions)
 
@@ -11165,8 +11048,7 @@ Turn flymake mode off.
 
 ;;;***
 \f
-;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (22197 58438
-;;;;;;  711460 447000))
+;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/flyspell.el
 
 (autoload 'flyspell-prog-mode "flyspell" "\
@@ -11236,14 +11118,13 @@ Flyspell whole buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "foldout" "foldout.el" (22150 28227 582072
-;;;;;;  702000))
+;;;### (autoloads nil "foldout" "foldout.el" (0 0 0 0))
 ;;; Generated autoloads from foldout.el
 (push (purecopy '(foldout 1 10)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "follow" "follow.el" (22308 37947 126422 527000))
+;;;### (autoloads nil "follow" "follow.el" (0 0 0 0))
 ;;; Generated autoloads from follow.el
 
 (autoload 'turn-on-follow-mode "follow" "\
@@ -11274,11 +11155,11 @@ virtual window.  This is accomplished by two main techniques:
   makes it possible to walk between windows using normal cursor
   movement commands.
 
-Follow mode comes to its prime when used on a large screen and two or
-more side-by-side windows are used.  The user can, with the help of
-Follow mode, use these full-height windows as though they were one.
-Imagine yourself editing a large function, or section of text, and
-being able to use 144 or 216 lines instead of the normal 72... (your
+Follow mode comes to its prime when used on a large screen and two
+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,
+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
@@ -11293,34 +11174,6 @@ Keys specific to Follow mode:
 
 \(fn &optional ARG)" t nil)
 
-(autoload 'follow-scroll-up-window "follow" "\
-Scroll text in a Follow mode window up by that window's size.
-The other windows in the window chain will scroll synchronously.
-
-If called with no ARG, the `next-screen-context-lines' last lines of
-the window will be visible after the scroll.
-
-If called with an argument, scroll ARG lines up.
-Negative ARG means scroll downward.
-
-Works like `scroll-up' when not in Follow mode.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'follow-scroll-down-window "follow" "\
-Scroll text in a Follow mode window down by that window's size.
-The other windows in the window chain will scroll synchronously.
-
-If called with no ARG, the `next-screen-context-lines' top lines of
-the window in the chain will be visible after the scroll.
-
-If called with an argument, scroll ARG lines down.
-Negative ARG means scroll upward.
-
-Works like `scroll-down' when not in Follow mode.
-
-\(fn &optional ARG)" t nil)
-
 (autoload 'follow-scroll-up "follow" "\
 Scroll text in a Follow mode window chain up.
 
@@ -11365,8 +11218,7 @@ selected if the original window is the first one in the frame.
 
 ;;;***
 \f
-;;;### (autoloads nil "footnote" "mail/footnote.el" (22150 28228
-;;;;;;  226072 702000))
+;;;### (autoloads nil "footnote" "mail/footnote.el" (0 0 0 0))
 ;;; Generated autoloads from mail/footnote.el
 (push (purecopy '(footnote 0 19)) package--builtin-versions)
 
@@ -11385,7 +11237,7 @@ play around with the following keys:
 
 ;;;***
 \f
-;;;### (autoloads nil "forms" "forms.el" (22253 13631 334961 36000))
+;;;### (autoloads nil "forms" "forms.el" (0 0 0 0))
 ;;; Generated autoloads from forms.el
 
 (autoload 'forms-mode "forms" "\
@@ -11421,8 +11273,7 @@ Visit a file in Forms mode in other window.
 
 ;;;***
 \f
-;;;### (autoloads nil "fortran" "progmodes/fortran.el" (22153 4424
-;;;;;;  620360 262000))
+;;;### (autoloads nil "fortran" "progmodes/fortran.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/fortran.el
 
 (autoload 'fortran-mode "fortran" "\
@@ -11499,8 +11350,7 @@ with no args, if that value is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "fortune" "play/fortune.el" (22150 28228 678072
-;;;;;;  702000))
+;;;### (autoloads nil "fortune" "play/fortune.el" (0 0 0 0))
 ;;; Generated autoloads from play/fortune.el
 
 (autoload 'fortune-add-fortune "fortune" "\
@@ -11537,6 +11387,13 @@ and choose the directory as the fortune-file.
 
 \(fn &optional FILE)" t nil)
 
+(autoload 'fortune-message "fortune" "\
+Display a fortune cookie to the mini-buffer.
+If called with a prefix, it has the same behavior as `fortune'.
+Optional FILE is a fortune file from which a cookie will be selected.
+
+\(fn &optional FILE)" t nil)
+
 (autoload 'fortune "fortune" "\
 Display a fortune cookie.
 If called with a prefix asks for the FILE to choose the fortune from,
@@ -11548,8 +11405,7 @@ and choose the directory as the fortune-file.
 
 ;;;***
 \f
-;;;### (autoloads nil "frameset" "frameset.el" (22182 4679 399463
-;;;;;;  499000))
+;;;### (autoloads nil "frameset" "frameset.el" (0 0 0 0))
 ;;; Generated autoloads from frameset.el
 
 (defvar frameset-session-filter-alist '((name . :never) (left . frameset-filter-iconified) (minibuffer . frameset-filter-minibuffer) (top . frameset-filter-iconified)) "\
@@ -11735,20 +11591,19 @@ Interactively, reads the register using `register-read-with-preview'.
 
 ;;;***
 \f
-;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (22182 4679 471463
-;;;;;;  499000))
+;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (0 0 0 0))
 ;;; Generated autoloads from play/gamegrid.el
 (push (purecopy '(gamegrid 1 2)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (22150 28228
-;;;;;;  822072 702000))
+;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/gdb-mi.el
 
 (defvar gdb-enable-debug nil "\
 Non-nil if Gdb-Enable-Debug mode is enabled.
-See the command `gdb-enable-debug' for a description of this minor mode.")
+See the `gdb-enable-debug' command
+for a description of this minor mode.")
 
 (custom-autoload 'gdb-enable-debug "gdb-mi" nil)
 
@@ -11820,8 +11675,7 @@ detailed description of this mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (22150 28227
-;;;;;;  430072 702000))
+;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/generic.el
 
 (defvar generic-mode-list nil "\
@@ -11901,8 +11755,7 @@ regular expression that can be used as an element of
 
 ;;;***
 \f
-;;;### (autoloads nil "glasses" "progmodes/glasses.el" (22150 28228
-;;;;;;  822072 702000))
+;;;### (autoloads nil "glasses" "progmodes/glasses.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/glasses.el
 
 (autoload 'glasses-mode "glasses" "\
@@ -11916,8 +11769,7 @@ add virtual separators (like underscores) at places they belong to.
 
 ;;;***
 \f
-;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (22272 64438
-;;;;;;  224671 103000))
+;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gmm-utils.el
 
 (autoload 'gmm-regexp-concat "gmm-utils" "\
@@ -11971,7 +11823,7 @@ DEFAULT-MAP specifies the default key map for ICON-LIST.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus" "gnus/gnus.el" (22165 43181 87854 955000))
+;;;### (autoloads nil "gnus" "gnus/gnus.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus.el
 (push (purecopy '(gnus 5 13)) package--builtin-versions)
 (when (fboundp 'custom-autoload)
@@ -12021,8 +11873,7 @@ prompt the user for the name of an NNTP server to use.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (22182 4679
-;;;;;;  403463 499000))
+;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-agent.el
 
 (autoload 'gnus-unplugged "gnus-agent" "\
@@ -12112,8 +11963,7 @@ CLEAN is obsolete and ignored.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (22284 55604
-;;;;;;  142845 171000))
+;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-art.el
 
 (autoload 'gnus-article-prepare-display "gnus-art" "\
@@ -12123,8 +11973,8 @@ Make the current buffer look like a nice article.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (22150
-;;;;;;  28227 674072 702000))
+;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from gnus/gnus-bookmark.el
 
 (autoload 'gnus-bookmark-set "gnus-bookmark" "\
@@ -12147,8 +11997,7 @@ deletion, or > if it is flagged for displaying.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (22150 28227
-;;;;;;  678072 702000))
+;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-cache.el
 
 (autoload 'gnus-jog-cache "gnus-cache" "\
@@ -12189,8 +12038,7 @@ supported.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (22150 28227
-;;;;;;  682072 702000))
+;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-delay.el
 
 (autoload 'gnus-delay-article "gnus-delay" "\
@@ -12225,8 +12073,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (22150 28227
-;;;;;;  686072 702000))
+;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-diary.el
 
 (autoload 'gnus-user-format-function-d "gnus-diary" "\
@@ -12241,8 +12088,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (22150 28227
-;;;;;;  686072 702000))
+;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-dired.el
 
 (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\
@@ -12252,8 +12098,7 @@ Convenience method to turn on gnus-dired-mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (22150 28227
-;;;;;;  686072 702000))
+;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-draft.el
 
 (autoload 'gnus-draft-reminder "gnus-draft" "\
@@ -12263,8 +12108,7 @@ Reminder user if there are unsent drafts.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (22165 43181
-;;;;;;  71854 955000))
+;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-fun.el
 
 (autoload 'gnus--random-face-with-type "gnus-fun" "\
@@ -12329,8 +12173,8 @@ Insert a random Face header from `gnus-face-directory'.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (22192
-;;;;;;  2880 975382 391000))
+;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from gnus/gnus-gravatar.el
 
 (autoload 'gnus-treat-from-gravatar "gnus-gravatar" "\
@@ -12347,8 +12191,7 @@ If gravatars are already displayed, remove them.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (22150 28227
-;;;;;;  694072 702000))
+;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-group.el
 
 (autoload 'gnus-fetch-group "gnus-group" "\
@@ -12365,8 +12208,7 @@ Pop up a frame and enter GROUP.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (22150 28227
-;;;;;;  694072 702000))
+;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-html.el
 
 (autoload 'gnus-article-html "gnus-html" "\
@@ -12381,8 +12223,7 @@ Pop up a frame and enter GROUP.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (22189 64323
-;;;;;;  180321 19000))
+;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-kill.el
 
 (defalias 'gnus-batch-kill 'gnus-batch-score)
@@ -12395,8 +12236,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (22150 28227 698072
-;;;;;;  702000))
+;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-ml.el
 
 (autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\
@@ -12419,8 +12259,7 @@ Minor mode for providing mailing-list commands.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (22150 28227
-;;;;;;  698072 702000))
+;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-mlspl.el
 
 (autoload 'gnus-group-split-setup "gnus-mlspl" "\
@@ -12520,8 +12359,7 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns:
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (22150 28227
-;;;;;;  702072 702000))
+;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-msg.el
 
 (autoload 'gnus-msg-mail "gnus-msg" "\
@@ -12548,7 +12386,7 @@ Like `message-reply'.
 ;;;***
 \f
 ;;;### (autoloads nil "gnus-notifications" "gnus/gnus-notifications.el"
-;;;;;;  (22150 28227 702072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-notifications.el
 
 (autoload 'gnus-notifications "gnus-notifications" "\
@@ -12564,8 +12402,7 @@ This is typically a function to add in
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (22192 2880
-;;;;;;  983382 391000))
+;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-picon.el
 
 (autoload 'gnus-treat-from-picon "gnus-picon" "\
@@ -12588,8 +12425,7 @@ If picons are already displayed, remove them.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (22150 28227
-;;;;;;  702072 702000))
+;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-range.el
 
 (autoload 'gnus-sorted-difference "gnus-range" "\
@@ -12656,8 +12492,8 @@ Add NUM into sorted LIST by side effect.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (22150
-;;;;;;  28227 702072 702000))
+;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from gnus/gnus-registry.el
 
 (autoload 'gnus-registry-initialize "gnus-registry" "\
@@ -12672,8 +12508,7 @@ Install the registry hooks.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (22150 28227
-;;;;;;  806072 702000))
+;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-sieve.el
 
 (autoload 'gnus-sieve-update "gnus-sieve" "\
@@ -12700,8 +12535,7 @@ See the documentation for these variables and functions for details.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (22150 28227
-;;;;;;  806072 702000))
+;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-spec.el
 
 (autoload 'gnus-update-format "gnus-spec" "\
@@ -12711,8 +12545,7 @@ Update the format specification near point.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (22197 58438
-;;;;;;  235460 447000))
+;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-start.el
 
 (autoload 'gnus-declare-backend "gnus-start" "\
@@ -12722,8 +12555,7 @@ Declare back end NAME with ABILITIES as a Gnus back end.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (22199 13769
-;;;;;;  464900 836000))
+;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-sum.el
 
 (autoload 'gnus-summary-bookmark-jump "gnus-sum" "\
@@ -12734,8 +12566,7 @@ BOOKMARK is a bookmark name or a bookmark record.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (22150 28227
-;;;;;;  862072 702000))
+;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-sync.el
 
 (autoload 'gnus-sync-initialize "gnus-sync" "\
@@ -12750,8 +12581,7 @@ Install the sync hooks.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (22150 28227
-;;;;;;  938072 702000))
+;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-win.el
 
 (autoload 'gnus-add-configuration "gnus-win" "\
@@ -12761,8 +12591,7 @@ Add the window configuration CONF to `gnus-buffer-configuration'.
 
 ;;;***
 \f
-;;;### (autoloads nil "gnutls" "net/gnutls.el" (22150 28228 358072
-;;;;;;  702000))
+;;;### (autoloads nil "gnutls" "net/gnutls.el" (0 0 0 0))
 ;;; Generated autoloads from net/gnutls.el
 
 (defvar gnutls-min-prime-bits 256 "\
@@ -12778,8 +12607,7 @@ A value of nil says to use the default GnuTLS value.")
 
 ;;;***
 \f
-;;;### (autoloads nil "gomoku" "play/gomoku.el" (22182 4679 471463
-;;;;;;  499000))
+;;;### (autoloads nil "gomoku" "play/gomoku.el" (0 0 0 0))
 ;;; Generated autoloads from play/gomoku.el
 
 (autoload 'gomoku "gomoku" "\
@@ -12805,8 +12633,7 @@ Use \\[describe-mode] for more info.
 
 ;;;***
 \f
-;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (22150 28228
-;;;;;;  358072 702000))
+;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (0 0 0 0))
 ;;; Generated autoloads from net/goto-addr.el
 
 (define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1")
@@ -12847,9 +12674,8 @@ Like `goto-address-mode', but only for comments and strings.
 
 ;;;***
 \f
-;;;### (autoloads nil "gravatar" "gnus/gravatar.el" (22150 28227
-;;;;;;  942072 702000))
-;;; Generated autoloads from gnus/gravatar.el
+;;;### (autoloads nil "gravatar" "image/gravatar.el" (0 0 0 0))
+;;; Generated autoloads from image/gravatar.el
 
 (autoload 'gravatar-retrieve "gravatar" "\
 Retrieve MAIL-ADDRESS gravatar and call CB on retrieval.
@@ -12864,8 +12690,7 @@ Retrieve MAIL-ADDRESS gravatar and returns it.
 
 ;;;***
 \f
-;;;### (autoloads nil "grep" "progmodes/grep.el" (22296 46772 464104
-;;;;;;  103000))
+;;;### (autoloads nil "grep" "progmodes/grep.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/grep.el
 
 (defvar grep-window-height nil "\
@@ -13032,7 +12857,7 @@ file name to `*.gz', and sets `grep-highlight-matches' to `always'.
 
 ;;;***
 \f
-;;;### (autoloads nil "gs" "gs.el" (22150 28228 26072 702000))
+;;;### (autoloads nil "gs" "gs.el" (0 0 0 0))
 ;;; Generated autoloads from gs.el
 
 (autoload 'gs-load-image "gs" "\
@@ -13045,8 +12870,7 @@ the form \"WINDOW-ID PIXMAP-ID\".  Value is non-nil if successful.
 
 ;;;***
 \f
-;;;### (autoloads nil "gud" "progmodes/gud.el" (22189 64323 288321
-;;;;;;  19000))
+;;;### (autoloads nil "gud" "progmodes/gud.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/gud.el
 
 (autoload 'gud-gdb "gud" "\
@@ -13124,7 +12948,8 @@ Major mode for editing GDB scripts.
 
 (defvar gud-tooltip-mode nil "\
 Non-nil if Gud-Tooltip mode is enabled.
-See the command `gud-tooltip-mode' for a description of this minor mode.
+See the `gud-tooltip-mode' command
+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 `gud-tooltip-mode'.")
@@ -13141,8 +12966,7 @@ it if ARG is omitted or nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (22150 28227 434072
-;;;;;;  702000))
+;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/gv.el
 
 (autoload 'gv-get "gv" "\
@@ -13244,8 +13068,7 @@ binding mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "handwrite" "play/handwrite.el" (22150 28228
-;;;;;;  678072 702000))
+;;;### (autoloads nil "handwrite" "play/handwrite.el" (0 0 0 0))
 ;;; Generated autoloads from play/handwrite.el
 
 (autoload 'handwrite "handwrite" "\
@@ -13262,8 +13085,7 @@ Variables: `handwrite-linespace'     (default 12)
 
 ;;;***
 \f
-;;;### (autoloads nil "hanoi" "play/hanoi.el" (22086 11930 130062
-;;;;;;  731000))
+;;;### (autoloads nil "hanoi" "play/hanoi.el" (0 0 0 0))
 ;;; Generated autoloads from play/hanoi.el
 
 (autoload 'hanoi "hanoi" "\
@@ -13290,8 +13112,7 @@ to be updated.
 
 ;;;***
 \f
-;;;### (autoloads nil "hashcash" "mail/hashcash.el" (22150 28228
-;;;;;;  230072 702000))
+;;;### (autoloads nil "hashcash" "mail/hashcash.el" (0 0 0 0))
 ;;; Generated autoloads from mail/hashcash.el
 
 (autoload 'hashcash-insert-payment "hashcash" "\
@@ -13333,8 +13154,7 @@ Prefix arg sets default accept amount temporarily.
 
 ;;;***
 \f
-;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (22150 28228 26072
-;;;;;;  702000))
+;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (0 0 0 0))
 ;;; Generated autoloads from help-at-pt.el
 
 (autoload 'help-at-pt-string "help-at-pt" "\
@@ -13461,8 +13281,7 @@ different regions.  With numeric argument ARG, behaves like
 
 ;;;***
 \f
-;;;### (autoloads nil "help-fns" "help-fns.el" (22211 4933 601358
-;;;;;;  144000))
+;;;### (autoloads nil "help-fns" "help-fns.el" (0 0 0 0))
 ;;; Generated autoloads from help-fns.el
 
 (autoload 'describe-function "help-fns" "\
@@ -13549,8 +13368,7 @@ Produce a texinfo buffer with sorted doc-strings from the DOC file.
 
 ;;;***
 \f
-;;;### (autoloads nil "help-macro" "help-macro.el" (22150 28228 26072
-;;;;;;  702000))
+;;;### (autoloads nil "help-macro" "help-macro.el" (0 0 0 0))
 ;;; Generated autoloads from help-macro.el
 
 (defvar three-step-help nil "\
@@ -13564,8 +13382,7 @@ gives the window that lists the options.")
 
 ;;;***
 \f
-;;;### (autoloads nil "help-mode" "help-mode.el" (22220 19926 384329
-;;;;;;  271000))
+;;;### (autoloads nil "help-mode" "help-mode.el" (0 0 0 0))
 ;;; Generated autoloads from help-mode.el
 
 (autoload 'help-mode "help-mode" "\
@@ -13666,8 +13483,7 @@ BOOKMARK is a bookmark name or a bookmark record.
 
 ;;;***
 \f
-;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (22150 28227
-;;;;;;  434072 702000))
+;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/helper.el
 
 (autoload 'Helper-describe-bindings "helper" "\
@@ -13682,7 +13498,7 @@ Provide help for current mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "hexl" "hexl.el" (22150 28228 26072 702000))
+;;;### (autoloads nil "hexl" "hexl.el" (0 0 0 0))
 ;;; Generated autoloads from hexl.el
 
 (autoload 'hexl-mode "hexl" "\
@@ -13776,7 +13592,7 @@ This discards the buffer's undo information.
 
 ;;;***
 \f
-;;;### (autoloads nil "hi-lock" "hi-lock.el" (22150 28228 30072 702000))
+;;;### (autoloads nil "hi-lock" "hi-lock.el" (0 0 0 0))
 ;;; Generated autoloads from hi-lock.el
 
 (autoload 'hi-lock-mode "hi-lock" "\
@@ -13846,7 +13662,8 @@ Hi-lock: end is found.  A mode is excluded if it's in the list
 
 (defvar global-hi-lock-mode nil "\
 Non-nil if Global Hi-Lock mode is enabled.
-See the command `global-hi-lock-mode' for a description of this minor mode.
+See the `global-hi-lock-mode' command
+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 `global-hi-lock-mode'.")
@@ -13943,8 +13760,7 @@ be found in variable `hi-lock-interactive-patterns'.
 
 ;;;***
 \f
-;;;### (autoloads nil "hideif" "progmodes/hideif.el" (22197 58438
-;;;;;;  447460 447000))
+;;;### (autoloads nil "hideif" "progmodes/hideif.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/hideif.el
 
 (autoload 'hide-ifdef-mode "hideif" "\
@@ -13991,8 +13807,7 @@ Several variables affect how the hiding is done:
 
 ;;;***
 \f
-;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (22150 28228
-;;;;;;  830072 702000))
+;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/hideshow.el
 
 (defvar hs-special-modes-alist (mapcar 'purecopy '((c-mode "{" "}" "/[*/]" nil nil) (c++-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil))) "\
@@ -14054,8 +13869,7 @@ Unconditionally turn off `hs-minor-mode'.
 
 ;;;***
 \f
-;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (22150 28228 30072
-;;;;;;  702000))
+;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (0 0 0 0))
 ;;; Generated autoloads from hilit-chg.el
 
 (autoload 'highlight-changes-mode "hilit-chg" "\
@@ -14165,7 +13979,8 @@ changes are made, so \\[highlight-changes-next-change] and
 
 (defvar global-highlight-changes-mode nil "\
 Non-nil if Global Highlight-Changes mode is enabled.
-See the command `global-highlight-changes-mode' for a description of this minor mode.
+See the `global-highlight-changes-mode' command
+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 `global-highlight-changes-mode'.")
@@ -14186,8 +14001,7 @@ See `highlight-changes-mode' for more information on Highlight-Changes mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (22150 28228 30072
-;;;;;;  702000))
+;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (0 0 0 0))
 ;;; Generated autoloads from hippie-exp.el
 (push (purecopy '(hippie-exp 1 6)) package--builtin-versions)
 
@@ -14219,7 +14033,7 @@ argument VERBOSE non-nil makes the function verbose.
 
 ;;;***
 \f
-;;;### (autoloads nil "hl-line" "hl-line.el" (22150 28228 30072 702000))
+;;;### (autoloads nil "hl-line" "hl-line.el" (0 0 0 0))
 ;;; Generated autoloads from hl-line.el
 
 (autoload 'hl-line-mode "hl-line" "\
@@ -14244,7 +14058,8 @@ addition to `hl-line-highlight' on `post-command-hook'.
 
 (defvar global-hl-line-mode nil "\
 Non-nil if Global Hl-Line mode is enabled.
-See the command `global-hl-line-mode' for a description of this minor mode.
+See the `global-hl-line-mode' command
+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 `global-hl-line-mode'.")
@@ -14268,8 +14083,7 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and
 
 ;;;***
 \f
-;;;### (autoloads nil "holidays" "calendar/holidays.el" (22150 28227
-;;;;;;  78072 702000))
+;;;### (autoloads nil "holidays" "calendar/holidays.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/holidays.el
 
 (defvar holiday-general-holidays (mapcar 'purecopy '((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"))) "\
@@ -14379,9 +14193,8 @@ The optional LABEL is used to label the buffer created.
 
 ;;;***
 \f
-;;;### (autoloads nil "html2text" "gnus/html2text.el" (22150 28227
-;;;;;;  946072 702000))
-;;; Generated autoloads from gnus/html2text.el
+;;;### (autoloads nil "html2text" "net/html2text.el" (0 0 0 0))
+;;; Generated autoloads from net/html2text.el
 
 (autoload 'html2text "html2text" "\
 Convert HTML to plain text in the current buffer.
@@ -14390,8 +14203,7 @@ Convert HTML to plain text in the current buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (22174 41792
-;;;;;;  975867 435000))
+;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (0 0 0 0))
 ;;; Generated autoloads from htmlfontify.el
 (push (purecopy '(htmlfontify 0 21)) package--builtin-versions)
 
@@ -14424,8 +14236,7 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'.
 
 ;;;***
 \f
-;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (22150 28228 50072
-;;;;;;  702000))
+;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (0 0 0 0))
 ;;; Generated autoloads from ibuf-macs.el
 
 (autoload 'define-ibuffer-column "ibuf-macs" "\
@@ -14527,8 +14338,7 @@ bound to the current value of the filter.
 
 ;;;***
 \f
-;;;### (autoloads nil "ibuffer" "ibuffer.el" (22150 28612 886072
-;;;;;;  702000))
+;;;### (autoloads nil "ibuffer" "ibuffer.el" (0 0 0 0))
 ;;; Generated autoloads from ibuffer.el
 
 (autoload 'ibuffer-list-buffers "ibuffer" "\
@@ -14567,8 +14377,8 @@ FORMATS is the value to use for `ibuffer-formats'.
 
 ;;;***
 \f
-;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (22150
-;;;;;;  28227 78072 702000))
+;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from calendar/icalendar.el
 (push (purecopy '(icalendar 0 19)) package--builtin-versions)
 
@@ -14621,13 +14431,13 @@ buffer `*icalendar-errors*'.
 
 ;;;***
 \f
-;;;### (autoloads nil "icomplete" "icomplete.el" (22150 28228 54072
-;;;;;;  702000))
+;;;### (autoloads nil "icomplete" "icomplete.el" (0 0 0 0))
 ;;; Generated autoloads from icomplete.el
 
 (defvar icomplete-mode nil "\
 Non-nil if Icomplete mode is enabled.
-See the command `icomplete-mode' for a description of this minor mode.
+See the `icomplete-mode' command
+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 `icomplete-mode'.")
@@ -14661,8 +14471,7 @@ completions:
 
 ;;;***
 \f
-;;;### (autoloads nil "icon" "progmodes/icon.el" (22197 58438 447460
-;;;;;;  447000))
+;;;### (autoloads nil "icon" "progmodes/icon.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/icon.el
 
 (autoload 'icon-mode "icon" "\
@@ -14702,8 +14511,8 @@ with no args, if that value is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (22150
-;;;;;;  28228 850072 702000))
+;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/idlw-shell.el
 
 (autoload 'idlwave-shell "idlw-shell" "\
@@ -14728,8 +14537,7 @@ See also the variable `idlwave-shell-prompt-pattern'.
 
 ;;;***
 \f
-;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (22197 58438
-;;;;;;  467460 447000))
+;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/idlwave.el
 (push (purecopy '(idlwave 6 1 22)) package--builtin-versions)
 
@@ -14858,7 +14666,7 @@ The main features of this mode are
 
 ;;;***
 \f
-;;;### (autoloads nil "ido" "ido.el" (22150 28228 82072 702000))
+;;;### (autoloads nil "ido" "ido.el" (0 0 0 0))
 ;;; Generated autoloads from ido.el
 
 (defvar ido-mode nil "\
@@ -15120,7 +14928,7 @@ DEF, if non-nil, is the default value.
 
 ;;;***
 \f
-;;;### (autoloads nil "ielm" "ielm.el" (22150 28228 82072 702000))
+;;;### (autoloads nil "ielm" "ielm.el" (0 0 0 0))
 ;;; Generated autoloads from ielm.el
 
 (autoload 'ielm "ielm" "\
@@ -15132,7 +14940,7 @@ See `inferior-emacs-lisp-mode' for details.
 
 ;;;***
 \f
-;;;### (autoloads nil "iimage" "iimage.el" (22150 28228 82072 702000))
+;;;### (autoloads nil "iimage" "iimage.el" (0 0 0 0))
 ;;; Generated autoloads from iimage.el
 
 (define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1")
@@ -15148,7 +14956,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'.
 
 ;;;***
 \f
-;;;### (autoloads nil "image" "image.el" (22150 28228 86072 702000))
+;;;### (autoloads nil "image" "image.el" (0 0 0 0))
 ;;; Generated autoloads from image.el
 
 (autoload 'image-type-from-data "image" "\
@@ -15341,8 +15149,7 @@ If Emacs is compiled without ImageMagick support, this does nothing.
 
 ;;;***
 \f
-;;;### (autoloads nil "image-dired" "image-dired.el" (22150 28228
-;;;;;;  86072 702000))
+;;;### (autoloads nil "image-dired" "image-dired.el" (0 0 0 0))
 ;;; Generated autoloads from image-dired.el
 (push (purecopy '(image-dired 0 4 11)) package--builtin-versions)
 
@@ -15479,8 +15286,7 @@ easy-to-use form.
 
 ;;;***
 \f
-;;;### (autoloads nil "image-file" "image-file.el" (22150 28228 86072
-;;;;;;  702000))
+;;;### (autoloads nil "image-file" "image-file.el" (0 0 0 0))
 ;;; Generated autoloads from image-file.el
 
 (defvar image-file-name-extensions (purecopy '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")) "\
@@ -15521,7 +15327,8 @@ the command `insert-file-contents'.
 
 (defvar auto-image-file-mode nil "\
 Non-nil if Auto-Image-File mode is enabled.
-See the command `auto-image-file-mode' for a description of this minor mode.
+See the `auto-image-file-mode' command
+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 `auto-image-file-mode'.")
@@ -15542,14 +15349,13 @@ An image file is one whose name has an extension in
 
 ;;;***
 \f
-;;;### (autoloads nil "image-mode" "image-mode.el" (22174 53239 753341
-;;;;;;  435000))
+;;;### (autoloads nil "image-mode" "image-mode.el" (0 0 0 0))
 ;;; Generated autoloads from image-mode.el
 
 (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.
+You can use \\<image-mode-map>\\[image-toggle-display] or \\<image-mode-map>\\[image-toggle-hex-display]
+to toggle between display as an image and display as text or hex.
 
 Key bindings:
 \\{image-mode-map}
@@ -15568,20 +15374,12 @@ actual image.
 
 \(fn &optional ARG)" t nil)
 
-(autoload 'image-mode-as-text "image-mode" "\
+(autoload 'image-mode-to-text "image-mode" "\
 Set a non-image mode as major mode in combination with image minor mode.
-A non-image major mode found from `auto-mode-alist' or Fundamental mode
-displays an image file as text.  `image-minor-mode' provides the key
-\\<image-mode-map>\\[image-toggle-display] to switch back to `image-mode'
-to display an image file as the actual image.
-
-You can use `image-mode-as-text' in `auto-mode-alist' when you want
-to display an image file as text initially.
-
-See commands `image-mode' and `image-minor-mode' for more information
-on these modes.
+A non-mage major mode found from `auto-mode-alist' or fundamental mode
+displays an image file as text.
 
-\(fn)" t nil)
+\(fn)" nil nil)
 
 (autoload 'image-bookmark-jump "image-mode" "\
 
@@ -15590,7 +15388,7 @@ on these modes.
 
 ;;;***
 \f
-;;;### (autoloads nil "imenu" "imenu.el" (22150 28228 90072 702000))
+;;;### (autoloads nil "imenu" "imenu.el" (0 0 0 0))
 ;;; Generated autoloads from imenu.el
 
 (defvar imenu-sort-function nil "\
@@ -15728,8 +15526,7 @@ for more information.
 
 ;;;***
 \f
-;;;### (autoloads nil "ind-util" "language/ind-util.el" (22150 28228
-;;;;;;  190072 702000))
+;;;### (autoloads nil "ind-util" "language/ind-util.el" (0 0 0 0))
 ;;; Generated autoloads from language/ind-util.el
 
 (autoload 'indian-compose-region "ind-util" "\
@@ -15759,8 +15556,7 @@ Convert old Emacs Devanagari characters to UCS.
 
 ;;;***
 \f
-;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (22150 28228
-;;;;;;  862072 702000))
+;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/inf-lisp.el
 
 (autoload 'inferior-lisp "inf-lisp" "\
@@ -15778,7 +15574,7 @@ of `inferior-lisp-program').  Runs the hooks from
 
 ;;;***
 \f
-;;;### (autoloads nil "info" "info.el" (22150 28228 98072 702000))
+;;;### (autoloads nil "info" "info.el" (0 0 0 0))
 ;;; Generated autoloads from info.el
 
 (defcustom Info-default-directory-list (let* ((config-dir (file-name-as-directory (or (and (featurep 'ns) (let ((dir (expand-file-name "../info" data-directory))) (if (file-directory-p dir) dir))) configure-info-directory))) (prefixes (prune-directory-list '("/usr/local/" "/usr/" "/opt/" "/"))) (suffixes '("share/" "" "gnu/" "gnu/lib/" "gnu/lib/emacs/" "emacs/" "lib/" "lib/emacs/")) (standard-info-dirs (apply #'nconc (mapcar (lambda (pfx) (let ((dirs (mapcar (lambda (sfx) (concat pfx sfx "info/")) suffixes))) (prune-directory-list dirs))) prefixes))) (dirs (if (member config-dir standard-info-dirs) (nconc standard-info-dirs (list config-dir)) (cons config-dir standard-info-dirs)))) (if (not (eq system-type 'windows-nt)) dirs (let* ((instdir (file-name-directory invocation-directory)) (dir1 (expand-file-name "../info/" instdir)) (dir2 (expand-file-name "../../../info/" instdir))) (cond ((file-exists-p dir1) (append dirs (list dir1))) ((file-exists-p dir2) (append dirs (list dir2))) (t dirs))))) "\
@@ -15990,8 +15786,7 @@ completion alternatives to currently visited manuals.
 
 ;;;***
 \f
-;;;### (autoloads nil "info-look" "info-look.el" (22291 28851 633608
-;;;;;;  847000))
+;;;### (autoloads nil "info-look" "info-look.el" (0 0 0 0))
 ;;; Generated autoloads from info-look.el
 
 (autoload 'info-lookup-reset "info-look" "\
@@ -16038,8 +15833,7 @@ Perform completion on file preceding point.
 
 ;;;***
 \f
-;;;### (autoloads nil "info-xref" "info-xref.el" (22150 28228 94072
-;;;;;;  702000))
+;;;### (autoloads nil "info-xref" "info-xref.el" (0 0 0 0))
 ;;; Generated autoloads from info-xref.el
 (push (purecopy '(info-xref 3)) package--builtin-versions)
 
@@ -16122,8 +15916,7 @@ the sources handy.
 
 ;;;***
 \f
-;;;### (autoloads nil "informat" "informat.el" (22150 28228 102072
-;;;;;;  702000))
+;;;### (autoloads nil "informat" "informat.el" (0 0 0 0))
 ;;; Generated autoloads from informat.el
 
 (autoload 'Info-tagify "informat" "\
@@ -16168,8 +15961,7 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\"
 
 ;;;***
 \f
-;;;### (autoloads nil "inline" "emacs-lisp/inline.el" (22171 34371
-;;;;;;  930658 796000))
+;;;### (autoloads nil "inline" "emacs-lisp/inline.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/inline.el
 
 (autoload 'define-inline "inline" "\
@@ -16183,8 +15975,7 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\"
 
 ;;;***
 \f
-;;;### (autoloads nil "inversion" "cedet/inversion.el" (22150 28227
-;;;;;;  218072 702000))
+;;;### (autoloads nil "inversion" "cedet/inversion.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/inversion.el
 (push (purecopy '(inversion 1 3)) package--builtin-versions)
 
@@ -16196,8 +15987,8 @@ Only checks one based on which kind of Emacs is being run.
 
 ;;;***
 \f
-;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (22150
-;;;;;;  28228 106072 702000))
+;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from international/isearch-x.el
 
 (autoload 'isearch-toggle-specified-input-method "isearch-x" "\
@@ -16217,8 +16008,7 @@ Toggle input method in interactive search.
 
 ;;;***
 \f
-;;;### (autoloads nil "isearchb" "isearchb.el" (22150 28228 154072
-;;;;;;  702000))
+;;;### (autoloads nil "isearchb" "isearchb.el" (0 0 0 0))
 ;;; Generated autoloads from isearchb.el
 (push (purecopy '(isearchb 1 5)) package--builtin-versions)
 
@@ -16232,8 +16022,8 @@ accessed via isearchb.
 
 ;;;***
 \f
-;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (22150
-;;;;;;  28228 106072 702000))
+;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from international/iso-cvt.el
 
 (autoload 'iso-spanish "iso-cvt" "\
@@ -16324,15 +16114,14 @@ Add submenus to the File menu, to convert to and from various formats.
 ;;;***
 \f
 ;;;### (autoloads nil "iso-transl" "international/iso-transl.el"
-;;;;;;  (22150 28228 106072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from international/iso-transl.el
  (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map)
  (autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 'keymap)
 
 ;;;***
 \f
-;;;### (autoloads nil "ispell" "textmodes/ispell.el" (22308 37947
-;;;;;;  230422 527000))
+;;;### (autoloads nil "ispell" "textmodes/ispell.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/ispell.el
 
 (put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t exclusive))))
@@ -16372,7 +16161,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 (purecopy '((("\\\\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 (purecopy '((("\\\\addcontentsline" ispell-tex-arg-end 2) ("\\\\add\\(tocontents\\|vspace\\)" ispell-tex-arg-end) ("\\\\\\([aA]lph\\|arabic\\)" ispell-tex-arg-end) ("\\\\cref" 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{}.
@@ -16552,10 +16341,10 @@ The `X' command aborts sending the message so that you can edit the buffer.
 
 To spell-check whenever a message is sent, include the appropriate lines
 in your init file:
-   (add-hook \\='message-send-hook \\='ispell-message)  ;; GNUS 5
-   (add-hook \\='news-inews-hook \\='ispell-message)    ;; GNUS 4
-   (add-hook \\='mail-send-hook  \\='ispell-message)
-   (add-hook \\='mh-before-send-letter-hook \\='ispell-message)
+   (add-hook \\='message-send-hook #\\='ispell-message)  ;; GNUS 5
+   (add-hook \\='news-inews-hook #\\='ispell-message)    ;; GNUS 4
+   (add-hook \\='mail-send-hook  #\\='ispell-message)
+   (add-hook \\='mh-before-send-letter-hook #\\='ispell-message)
 
 You can bind this to the key C-c i in GNUS or mail by adding to
 `news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
@@ -16565,8 +16354,8 @@ You can bind this to the key C-c i in GNUS or mail by adding to
 
 ;;;***
 \f
-;;;### (autoloads nil "japan-util" "language/japan-util.el" (22150
-;;;;;;  28228 190072 702000))
+;;;### (autoloads nil "japan-util" "language/japan-util.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from language/japan-util.el
 
 (autoload 'setup-japanese-environment-internal "japan-util" "\
@@ -16643,8 +16432,7 @@ If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
 
 ;;;***
 \f
-;;;### (autoloads nil "jka-compr" "jka-compr.el" (22150 28228 158072
-;;;;;;  702000))
+;;;### (autoloads nil "jka-compr" "jka-compr.el" (0 0 0 0))
 ;;; Generated autoloads from jka-compr.el
 
 (defvar jka-compr-inhibit nil "\
@@ -16667,8 +16455,7 @@ by `jka-compr-installed'.
 
 ;;;***
 \f
-;;;### (autoloads nil "js" "progmodes/js.el" (22305 18655 595719
-;;;;;;  883000))
+;;;### (autoloads nil "js" "progmodes/js.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/js.el
 (push (purecopy '(js 9)) package--builtin-versions)
 
@@ -16695,14 +16482,13 @@ locally, like so:
 
 ;;;***
 \f
-;;;### (autoloads nil "json" "json.el" (22197 58438 339460 447000))
+;;;### (autoloads nil "json" "json.el" (0 0 0 0))
 ;;; Generated autoloads from json.el
 (push (purecopy '(json 1 4)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "keypad" "emulation/keypad.el" (22150 28227
-;;;;;;  462072 702000))
+;;;### (autoloads nil "keypad" "emulation/keypad.el" (0 0 0 0))
 ;;; Generated autoloads from emulation/keypad.el
 
 (defvar keypad-setup nil "\
@@ -16757,8 +16543,8 @@ the decimal key on the keypad is mapped to DECIMAL instead of `.'
 
 ;;;***
 \f
-;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (22150
-;;;;;;  28228 106072 702000))
+;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from international/kinsoku.el
 
 (autoload 'kinsoku "kinsoku" "\
@@ -16779,8 +16565,7 @@ the context of text formatting.
 
 ;;;***
 \f
-;;;### (autoloads nil "kkc" "international/kkc.el" (22150 28228 106072
-;;;;;;  702000))
+;;;### (autoloads nil "kkc" "international/kkc.el" (0 0 0 0))
 ;;; Generated autoloads from international/kkc.el
 
 (defvar kkc-after-update-conversion-functions nil "\
@@ -16802,7 +16587,7 @@ and the return value is the length of the conversion.
 
 ;;;***
 \f
-;;;### (autoloads nil "kmacro" "kmacro.el" (22150 28228 162072 702000))
+;;;### (autoloads nil "kmacro" "kmacro.el" (0 0 0 0))
 ;;; Generated autoloads from kmacro.el
  (global-set-key "\C-x(" 'kmacro-start-macro)
  (global-set-key "\C-x)" 'kmacro-end-macro)
@@ -16914,8 +16699,8 @@ If kbd macro currently being defined end it before activating it.
 
 ;;;***
 \f
-;;;### (autoloads nil "korea-util" "language/korea-util.el" (22150
-;;;;;;  28228 194072 702000))
+;;;### (autoloads nil "korea-util" "language/korea-util.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from language/korea-util.el
 
 (defvar default-korean-keyboard (purecopy (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") "")) "3" "")) "\
@@ -16929,8 +16714,7 @@ The kind of Korean keyboard for Korean input method.
 
 ;;;***
 \f
-;;;### (autoloads nil "lao-util" "language/lao-util.el" (22150 28228
-;;;;;;  194072 702000))
+;;;### (autoloads nil "lao-util" "language/lao-util.el" (0 0 0 0))
 ;;; Generated autoloads from language/lao-util.el
 
 (autoload 'lao-compose-string "lao-util" "\
@@ -16967,8 +16751,8 @@ Transcribe Romanized Lao string STR to Lao character string.
 
 ;;;***
 \f
-;;;### (autoloads nil "latexenc" "international/latexenc.el" (22150
-;;;;;;  28228 106072 702000))
+;;;### (autoloads nil "latexenc" "international/latexenc.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from international/latexenc.el
 
 (defvar latex-inputenc-coding-alist (purecopy '(("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))) "\
@@ -17000,7 +16784,7 @@ coding system names is determined from `latex-inputenc-coding-alist'.
 ;;;***
 \f
 ;;;### (autoloads nil "latin1-disp" "international/latin1-disp.el"
-;;;;;;  (22150 28228 110072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from international/latin1-disp.el
 
 (defvar latin1-display nil "\
@@ -17041,8 +16825,8 @@ use either \\[customize] or the function `latin1-display'.")
 
 ;;;***
 \f
-;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (22150
-;;;;;;  28228 866072 702000))
+;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/ld-script.el
 
 (autoload 'ld-script-mode "ld-script" "\
@@ -17052,8 +16836,8 @@ A major mode to edit GNU ld script files
 
 ;;;***
 \f
-;;;### (autoloads nil "let-alist" "emacs-lisp/let-alist.el" (22150
-;;;;;;  28227 434072 702000))
+;;;### (autoloads nil "let-alist" "emacs-lisp/let-alist.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/let-alist.el
 (push (purecopy '(let-alist 1 0 4)) package--builtin-versions)
 
@@ -17092,7 +16876,7 @@ displayed in the example above.
 
 ;;;***
 \f
-;;;### (autoloads nil "life" "play/life.el" (22150 28228 678072 702000))
+;;;### (autoloads nil "life" "play/life.el" (0 0 0 0))
 ;;; Generated autoloads from play/life.el
 
 (autoload 'life "life" "\
@@ -17105,7 +16889,7 @@ generations (this defaults to 1).
 
 ;;;***
 \f
-;;;### (autoloads nil "linum" "linum.el" (22150 28228 210072 702000))
+;;;### (autoloads nil "linum" "linum.el" (0 0 0 0))
 ;;; Generated autoloads from linum.el
 (push (purecopy '(linum 0 9 24)) package--builtin-versions)
 
@@ -17121,7 +16905,8 @@ Linum mode is a buffer-local minor mode.
 
 (defvar global-linum-mode nil "\
 Non-nil if Global Linum mode is enabled.
-See the command `global-linum-mode' for a description of this minor mode.
+See the `global-linum-mode' command
+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 `global-linum-mode'.")
@@ -17142,8 +16927,7 @@ See `linum-mode' for more information on Linum mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "loadhist" "loadhist.el" (22150 28228 210072
-;;;;;;  702000))
+;;;### (autoloads nil "loadhist" "loadhist.el" (0 0 0 0))
 ;;; Generated autoloads from loadhist.el
 
 (autoload 'unload-feature "loadhist" "\
@@ -17174,7 +16958,7 @@ something strange, such as redefining an Emacs function.
 
 ;;;***
 \f
-;;;### (autoloads nil "locate" "locate.el" (22150 28228 210072 702000))
+;;;### (autoloads nil "locate" "locate.el" (0 0 0 0))
 ;;; Generated autoloads from locate.el
 
 (defvar locate-ls-subdir-switches (purecopy "-al") "\
@@ -17226,8 +17010,7 @@ except that FILTER is not optional.
 
 ;;;***
 \f
-;;;### (autoloads nil "log-edit" "vc/log-edit.el" (22150 28229 278072
-;;;;;;  702000))
+;;;### (autoloads nil "log-edit" "vc/log-edit.el" (0 0 0 0))
 ;;; Generated autoloads from vc/log-edit.el
 
 (autoload 'log-edit "log-edit" "\
@@ -17258,8 +17041,7 @@ done.  Otherwise, it uses the current buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "log-view" "vc/log-view.el" (22294 5044 399300
-;;;;;;  64000))
+;;;### (autoloads nil "log-view" "vc/log-view.el" (0 0 0 0))
 ;;; Generated autoloads from vc/log-view.el
 
 (autoload 'log-view-mode "log-view" "\
@@ -17269,13 +17051,13 @@ Major mode for browsing CVS log output.
 
 ;;;***
 \f
-;;;### (autoloads nil "lpr" "lpr.el" (22150 28228 210072 702000))
+;;;### (autoloads nil "lpr" "lpr.el" (0 0 0 0))
 ;;; Generated autoloads from lpr.el
 
 (defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\
 Non-nil if running on MS-DOS or MS Windows.")
 
-(defvar lpr-lp-system (memq system-type '(usg-unix-v hpux irix)) "\
+(defvar lpr-lp-system (memq system-type '(usg-unix-v hpux)) "\
 Non-nil if running on a system type that uses the \"lp\" command.")
 
 (defvar printer-name (and (eq system-type 'ms-dos) "PRN") "\
@@ -17364,8 +17146,7 @@ for further customization of the printer command.
 
 ;;;***
 \f
-;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (22220 19926 384329
-;;;;;;  271000))
+;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (0 0 0 0))
 ;;; Generated autoloads from ls-lisp.el
 
 (defvar ls-lisp-support-shell-wildcards t "\
@@ -17376,8 +17157,7 @@ Otherwise they are treated as Emacs regexps (for backward compatibility).")
 
 ;;;***
 \f
-;;;### (autoloads nil "lunar" "calendar/lunar.el" (22150 28227 78072
-;;;;;;  702000))
+;;;### (autoloads nil "lunar" "calendar/lunar.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/lunar.el
 
 (autoload 'lunar-phases "lunar" "\
@@ -17389,8 +17169,7 @@ This function is suitable for execution in an init file.
 
 ;;;***
 \f
-;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (22150 28228
-;;;;;;  866072 702000))
+;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/m4-mode.el
 
 (autoload 'm4-mode "m4-mode" "\
@@ -17400,7 +17179,7 @@ A major mode to edit m4 macro files.
 
 ;;;***
 \f
-;;;### (autoloads nil "macros" "macros.el" (22150 28228 210072 702000))
+;;;### (autoloads nil "macros" "macros.el" (0 0 0 0))
 ;;; Generated autoloads from macros.el
 
 (autoload 'name-last-kbd-macro "macros" "\
@@ -17489,8 +17268,7 @@ and then select the region of un-tablified names and use
 
 ;;;***
 \f
-;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (22197 58438
-;;;;;;  343460 447000))
+;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mail-extr.el
 
 (autoload 'mail-extract-address-components "mail-extr" "\
@@ -17520,8 +17298,7 @@ Convert mail domain DOMAIN to the country it corresponds to.
 
 ;;;***
 \f
-;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (22150 28228
-;;;;;;  230072 702000))
+;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mail-hist.el
 
 (autoload 'mail-hist-define-keys "mail-hist" "\
@@ -17550,8 +17327,7 @@ This function normally would be called when the message is sent.
 
 ;;;***
 \f
-;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (22150 28228
-;;;;;;  230072 702000))
+;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mail-utils.el
 
 (defvar mail-use-rfc822 nil "\
@@ -17625,13 +17401,13 @@ matches may be returned from the message body.
 
 ;;;***
 \f
-;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (22197 58438
-;;;;;;  343460 447000))
+;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mailabbrev.el
 
 (defvar mail-abbrevs-mode nil "\
 Non-nil if Mail-Abbrevs mode is enabled.
-See the command `mail-abbrevs-mode' for a description of this minor mode.
+See the `mail-abbrevs-mode' command
+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 `mail-abbrevs-mode'.")
@@ -17675,8 +17451,7 @@ double-quotes.
 
 ;;;***
 \f
-;;;### (autoloads nil "mailalias" "mail/mailalias.el" (22189 64323
-;;;;;;  268321 19000))
+;;;### (autoloads nil "mailalias" "mail/mailalias.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mailalias.el
 
 (defvar mail-complete-style 'angles "\
@@ -17729,8 +17504,7 @@ current header, calls `mail-complete-function' and passes prefix ARG if any.
 
 ;;;***
 \f
-;;;### (autoloads nil "mailclient" "mail/mailclient.el" (22182 4679
-;;;;;;  423463 499000))
+;;;### (autoloads nil "mailclient" "mail/mailclient.el" (0 0 0 0))
 ;;; Generated autoloads from mail/mailclient.el
 
 (autoload 'mailclient-send-it "mailclient" "\
@@ -17742,8 +17516,8 @@ The mail client is taken to be the handler of mailto URLs.
 
 ;;;***
 \f
-;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (22221
-;;;;;;  40772 751009 663000))
+;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/make-mode.el
 
 (autoload 'makefile-mode "make-mode" "\
@@ -17860,8 +17634,7 @@ An adapted `makefile-mode' that knows about imake.
 
 ;;;***
 \f
-;;;### (autoloads nil "makesum" "makesum.el" (22150 28228 258072
-;;;;;;  702000))
+;;;### (autoloads nil "makesum" "makesum.el" (0 0 0 0))
 ;;; Generated autoloads from makesum.el
 
 (autoload 'make-command-summary "makesum" "\
@@ -17872,7 +17645,7 @@ Previous contents of that buffer are killed first.
 
 ;;;***
 \f
-;;;### (autoloads nil "man" "man.el" (22308 37947 138422 527000))
+;;;### (autoloads nil "man" "man.el" (0 0 0 0))
 ;;; Generated autoloads from man.el
 
 (defalias 'manual-entry 'man)
@@ -17928,14 +17701,13 @@ Default bookmark handler for Man buffers.
 
 ;;;***
 \f
-;;;### (autoloads nil "map" "emacs-lisp/map.el" (22262 28597 583325
-;;;;;;  308000))
+;;;### (autoloads nil "map" "emacs-lisp/map.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/map.el
 (push (purecopy '(map 1 0)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "master" "master.el" (22150 28228 262072 702000))
+;;;### (autoloads nil "master" "master.el" (0 0 0 0))
 ;;; Generated autoloads from master.el
 (push (purecopy '(master 1 0 2)) package--builtin-versions)
 
@@ -17958,13 +17730,13 @@ yourself the value of `master-of' by calling `master-show-slave'.
 
 ;;;***
 \f
-;;;### (autoloads nil "mb-depth" "mb-depth.el" (22150 28228 262072
-;;;;;;  702000))
+;;;### (autoloads nil "mb-depth" "mb-depth.el" (0 0 0 0))
 ;;; Generated autoloads from mb-depth.el
 
 (defvar minibuffer-depth-indicate-mode nil "\
 Non-nil if Minibuffer-Depth-Indicate mode is enabled.
-See the command `minibuffer-depth-indicate-mode' for a description of this minor mode.
+See the `minibuffer-depth-indicate-mode' command
+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-depth-indicate-mode'.")
@@ -17986,14 +17758,13 @@ recursion depth in the minibuffer prompt.  This is only useful if
 
 ;;;***
 \f
-;;;### (autoloads nil "md4" "md4.el" (22150 28228 262072 702000))
+;;;### (autoloads nil "md4" "md4.el" (0 0 0 0))
 ;;; Generated autoloads from md4.el
 (push (purecopy '(md4 1 0)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "message" "gnus/message.el" (22201 55498 114885
-;;;;;;  567000))
+;;;### (autoloads nil "message" "gnus/message.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/message.el
 
 (define-mail-user-agent 'message-user-agent 'message-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook)
@@ -18158,8 +17929,8 @@ which specify the range to operate on.
 
 ;;;***
 \f
-;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (22150
-;;;;;;  28228 870072 702000))
+;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/meta-mode.el
 (push (purecopy '(meta-mode 1 0)) package--builtin-versions)
 
@@ -18175,8 +17946,7 @@ Major mode for editing MetaPost sources.
 
 ;;;***
 \f
-;;;### (autoloads nil "metamail" "mail/metamail.el" (22150 28228
-;;;;;;  234072 702000))
+;;;### (autoloads nil "metamail" "mail/metamail.el" (0 0 0 0))
 ;;; Generated autoloads from mail/metamail.el
 
 (autoload 'metamail-interpret-header "metamail" "\
@@ -18219,8 +17989,7 @@ redisplayed as output is inserted.
 
 ;;;***
 \f
-;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (22150 28228 294072
-;;;;;;  702000))
+;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-comp.el
 
 (autoload 'mh-smail "mh-comp" "\
@@ -18310,9 +18079,9 @@ delete the draft message.
 
 ;;;***
 \f
-;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (22150 28228 298072 702000))
+;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-e.el
-(push (purecopy '(mh-e 8 6)) package--builtin-versions)
+(push (purecopy '(mh-e 8 6 -4)) package--builtin-versions)
 
 (put 'mh-progs 'risky-local-variable t)
 
@@ -18327,8 +18096,7 @@ Display version information about MH-E and the MH mail handling system.
 
 ;;;***
 \f
-;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (22150 28228
-;;;;;;  302072 702000))
+;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (0 0 0 0))
 ;;; Generated autoloads from mh-e/mh-folder.el
 
 (autoload 'mh-rmail "mh-folder" "\
@@ -18409,13 +18177,13 @@ perform the operation on all messages in that region.
 
 ;;;***
 \f
-;;;### (autoloads nil "midnight" "midnight.el" (22265 4790 36806
-;;;;;;  924000))
+;;;### (autoloads nil "midnight" "midnight.el" (0 0 0 0))
 ;;; Generated autoloads from midnight.el
 
 (defvar midnight-mode nil "\
 Non-nil if Midnight mode is enabled.
-See the command `midnight-mode' for a description of this minor mode.
+See the `midnight-mode' command
+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 `midnight-mode'.")
@@ -18450,13 +18218,13 @@ to its second argument TM.
 
 ;;;***
 \f
-;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (22150 28228
-;;;;;;  322072 702000))
+;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (0 0 0 0))
 ;;; Generated autoloads from minibuf-eldef.el
 
 (defvar minibuffer-electric-default-mode nil "\
 Non-nil if Minibuffer-Electric-Default mode is enabled.
-See the command `minibuffer-electric-default-mode' for a description of this minor mode.
+See the `minibuffer-electric-default-mode' command
+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-electric-default-mode'.")
@@ -18480,7 +18248,7 @@ is modified to remove the default indication.
 
 ;;;***
 \f
-;;;### (autoloads nil "misc" "misc.el" (22150 28228 326072 702000))
+;;;### (autoloads nil "misc" "misc.el" (0 0 0 0))
 ;;; Generated autoloads from misc.el
 
 (autoload 'butterfly "misc" "\
@@ -18508,8 +18276,7 @@ The return value is always nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "misearch" "misearch.el" (22150 28228 326072
-;;;;;;  702000))
+;;;### (autoloads nil "misearch" "misearch.el" (0 0 0 0))
 ;;; Generated autoloads from misearch.el
  (add-hook 'isearch-mode-hook 'multi-isearch-setup)
 
@@ -18597,8 +18364,8 @@ whose file names match the specified wildcard.
 
 ;;;***
 \f
-;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (22150
-;;;;;;  28228 874072 702000))
+;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/mixal-mode.el
 (push (purecopy '(mixal-mode 0 1)) package--builtin-versions)
 
@@ -18609,8 +18376,7 @@ Major mode for the mixal asm language.
 
 ;;;***
 \f
-;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (22150 28227
-;;;;;;  978072 702000))
+;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-encode.el
 
 (autoload 'mm-default-file-encoding "mm-encode" "\
@@ -18620,8 +18386,7 @@ Return a default encoding for FILE.
 
 ;;;***
 \f
-;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (22150 28227
-;;;;;;  978072 702000))
+;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-extern.el
 
 (autoload 'mm-extern-cache-contents "mm-extern" "\
@@ -18639,8 +18404,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing.
 
 ;;;***
 \f
-;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (22150 28227
-;;;;;;  978072 702000))
+;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-partial.el
 
 (autoload 'mm-inline-partial "mm-partial" "\
@@ -18653,8 +18417,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing.
 
 ;;;***
 \f
-;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (22150 28227 978072
-;;;;;;  702000))
+;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-url.el
 
 (autoload 'mm-url-insert-file-contents "mm-url" "\
@@ -18670,8 +18433,7 @@ Insert file contents of URL using `mm-url-program'.
 
 ;;;***
 \f
-;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (22150 28227 982072
-;;;;;;  702000))
+;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mm-uu.el
 
 (autoload 'mm-uu-dissect "mm-uu" "\
@@ -18690,7 +18452,7 @@ Assume text has been decoded if DECODED is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "mml" "gnus/mml.el" (22150 28227 986072 702000))
+;;;### (autoloads nil "mml" "gnus/mml.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mml.el
 
 (autoload 'mml-to-mime "mml" "\
@@ -18715,8 +18477,7 @@ body) or \"attachment\" (separate from the body).
 
 ;;;***
 \f
-;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (22250 23504 507503
-;;;;;;  448000))
+;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mml1991.el
 
 (autoload 'mml1991-encrypt "mml1991" "\
@@ -18731,8 +18492,7 @@ body) or \"attachment\" (separate from the body).
 
 ;;;***
 \f
-;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (22250 23504 507503
-;;;;;;  448000))
+;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/mml2015.el
 
 (autoload 'mml2015-decrypt "mml2015" "\
@@ -18772,16 +18532,14 @@ body) or \"attachment\" (separate from the body).
 
 ;;;***
 \f
-;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (22276 61491
-;;;;;;  202868 4000))
+;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/mode-local.el
 
 (put 'define-overloadable-function 'doc-string-elt 3)
 
 ;;;***
 \f
-;;;### (autoloads nil "modula2" "progmodes/modula2.el" (22086 11930
-;;;;;;  214062 731000))
+;;;### (autoloads nil "modula2" "progmodes/modula2.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/modula2.el
 
 (defalias 'modula-2-mode 'm2-mode)
@@ -18814,8 +18572,7 @@ followed by the first character of the construct.
 
 ;;;***
 \f
-;;;### (autoloads nil "morse" "play/morse.el" (22150 28228 682072
-;;;;;;  702000))
+;;;### (autoloads nil "morse" "play/morse.el" (0 0 0 0))
 ;;; Generated autoloads from play/morse.el
 
 (autoload 'morse-region "morse" "\
@@ -18840,8 +18597,7 @@ Convert NATO phonetic alphabet in region to ordinary ASCII text.
 
 ;;;***
 \f
-;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (22150 28228 326072
-;;;;;;  702000))
+;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (0 0 0 0))
 ;;; Generated autoloads from mouse-drag.el
 
 (autoload 'mouse-drag-throw "mouse-drag" "\
@@ -18888,7 +18644,7 @@ To test this function, evaluate:
 
 ;;;***
 \f
-;;;### (autoloads nil "mpc" "mpc.el" (22150 28228 326072 702000))
+;;;### (autoloads nil "mpc" "mpc.el" (0 0 0 0))
 ;;; Generated autoloads from mpc.el
 
 (autoload 'mpc "mpc" "\
@@ -18898,7 +18654,7 @@ Main entry point for MPC.
 
 ;;;***
 \f
-;;;### (autoloads nil "mpuz" "play/mpuz.el" (22150 28228 682072 702000))
+;;;### (autoloads nil "mpuz" "play/mpuz.el" (0 0 0 0))
 ;;; Generated autoloads from play/mpuz.el
 
 (autoload 'mpuz "mpuz" "\
@@ -18908,12 +18664,13 @@ Multiplication puzzle with GNU Emacs.
 
 ;;;***
 \f
-;;;### (autoloads nil "msb" "msb.el" (22150 28228 338072 702000))
+;;;### (autoloads nil "msb" "msb.el" (0 0 0 0))
 ;;; Generated autoloads from msb.el
 
 (defvar msb-mode nil "\
 Non-nil if Msb mode is enabled.
-See the command `msb-mode' for a description of this minor mode.
+See the `msb-mode' command
+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 `msb-mode'.")
@@ -18933,8 +18690,8 @@ different buffer menu using the function `msb'.
 
 ;;;***
 \f
-;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (22150
-;;;;;;  28228 114072 702000))
+;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from international/mule-diag.el
 
 (autoload 'list-character-sets "mule-diag" "\
@@ -19066,8 +18823,8 @@ The default is 20.  If LIMIT is negative, do not limit the listing.
 
 ;;;***
 \f
-;;;### (autoloads nil "mule-util" "international/mule-util.el" (22165
-;;;;;;  44248 411854 955000))
+;;;### (autoloads nil "mule-util" "international/mule-util.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from international/mule-util.el
 
 (defsubst string-to-list (string) "\
@@ -19226,8 +18983,7 @@ QUALITY can be:
 
 ;;;***
 \f
-;;;### (autoloads nil "net-utils" "net/net-utils.el" (22150 28228
-;;;;;;  378072 702000))
+;;;### (autoloads nil "net-utils" "net/net-utils.el" (0 0 0 0))
 ;;; Generated autoloads from net/net-utils.el
 
 (autoload 'ifconfig "net-utils" "\
@@ -19321,8 +19077,7 @@ Open a network connection to HOST on PORT.
 
 ;;;***
 \f
-;;;### (autoloads nil "netrc" "net/netrc.el" (22150 28228 378072
-;;;;;;  702000))
+;;;### (autoloads nil "netrc" "net/netrc.el" (0 0 0 0))
 ;;; Generated autoloads from net/netrc.el
 
 (autoload 'netrc-credentials "netrc" "\
@@ -19334,8 +19089,8 @@ listed in the PORTS list.
 
 ;;;***
 \f
-;;;### (autoloads nil "network-stream" "net/network-stream.el" (22150
-;;;;;;  28228 378072 702000))
+;;;### (autoloads nil "network-stream" "net/network-stream.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from net/network-stream.el
 
 (autoload 'open-network-stream "network-stream" "\
@@ -19351,8 +19106,8 @@ BUFFER is a buffer or buffer name to associate with the process.
  Process output goes at end of that buffer.  BUFFER may be nil,
  meaning that the process is not associated with any buffer.
 HOST is the name or IP address of the host to connect to.
-SERVICE is the name of the service desired, or an integer specifying
- a port number to connect to.
+SERVICE is the name of the service desired, or an integer or
integer string specifying a port number to connect to.
 
 The remaining PARAMETERS should be a sequence of keywords and
 values:
@@ -19422,17 +19177,23 @@ non-nil, is used warn the user if the connection isn't encrypted.
 :nogreeting is a boolean that can be used to inhibit waiting for
 a greeting from the server.
 
-:nowait is a boolean that says the connection should be made
+:nowait, if non-nil, says the connection should be made
 asynchronously, if possible.
 
+:tls-parameters is a list that should be supplied if you're
+opening a TLS connection.  The first element is the TLS
+type (either `gnutls-x509pki' or `gnutls-anon'), and the
+remaining elements should be a keyword list accepted by
+gnutls-boot (as returned by `gnutls-boot-parameters').
+
 \(fn NAME BUFFER HOST SERVICE &rest PARAMETERS)" nil nil)
 
 (defalias 'open-protocol-stream 'open-network-stream)
 
 ;;;***
 \f
-;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (22150
-;;;;;;  28228 378072 702000))
+;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from net/newst-backend.el
 
 (autoload 'newsticker-running-p "newst-backend" "\
@@ -19454,7 +19215,7 @@ Run `newsticker-start-hook' if newsticker was not running already.
 ;;;***
 \f
 ;;;### (autoloads nil "newst-plainview" "net/newst-plainview.el"
-;;;;;;  (22150 28228 382072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from net/newst-plainview.el
 
 (autoload 'newsticker-plainview "newst-plainview" "\
@@ -19464,8 +19225,8 @@ Start newsticker plainview.
 
 ;;;***
 \f
-;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (22165
-;;;;;;  41682 87102 999000))
+;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from net/newst-reader.el
 
 (autoload 'newsticker-show-news "newst-reader" "\
@@ -19475,8 +19236,8 @@ Start reading news.  You may want to bind this to a key.
 
 ;;;***
 \f
-;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (22150
-;;;;;;  28228 382072 702000))
+;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from net/newst-ticker.el
 
 (autoload 'newsticker-ticker-running-p "newst-ticker" "\
@@ -19496,8 +19257,8 @@ running already.
 
 ;;;***
 \f
-;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (22196
-;;;;;;  37575 156683 383000))
+;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from net/newst-treeview.el
 
 (autoload 'newsticker-treeview "newst-treeview" "\
@@ -19507,8 +19268,7 @@ Start newsticker treeview.
 
 ;;;***
 \f
-;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (22150 28227 990072
-;;;;;;  702000))
+;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nndiary.el
 
 (autoload 'nndiary-generate-nov-databases "nndiary" "\
@@ -19518,8 +19278,7 @@ Generate NOV databases in all nndiary directories.
 
 ;;;***
 \f
-;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (22150 28227 990072
-;;;;;;  702000))
+;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nndoc.el
 
 (autoload 'nndoc-add-type "nndoc" "\
@@ -19533,8 +19292,7 @@ symbol in the alist.
 
 ;;;***
 \f
-;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (22150 28227
-;;;;;;  994072 702000))
+;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnfolder.el
 
 (autoload 'nnfolder-generate-active-file "nnfolder" "\
@@ -19545,7 +19303,7 @@ This command does not work if you use short group names.
 
 ;;;***
 \f
-;;;### (autoloads nil "nnml" "gnus/nnml.el" (22150 28228 2072 702000))
+;;;### (autoloads nil "nnml" "gnus/nnml.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/nnml.el
 
 (autoload 'nnml-generate-nov-databases "nnml" "\
@@ -19555,7 +19313,7 @@ Generate NOV databases in all nnml directories.
 
 ;;;***
 \f
-;;;### (autoloads nil "novice" "novice.el" (22150 28228 446072 702000))
+;;;### (autoloads nil "novice" "novice.el" (0 0 0 0))
 ;;; Generated autoloads from novice.el
 
 (define-obsolete-variable-alias 'disabled-command-hook 'disabled-command-function "22.1")
@@ -19587,8 +19345,8 @@ future sessions.
 
 ;;;***
 \f
-;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (22150
-;;;;;;  28229 102072 702000))
+;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from textmodes/nroff-mode.el
 
 (autoload 'nroff-mode "nroff-mode" "\
@@ -19602,27 +19360,13 @@ closing requests for requests that are used in matched pairs.
 
 ;;;***
 \f
-;;;### (autoloads nil "ntlm" "net/ntlm.el" (22150 28228 386072 702000))
+;;;### (autoloads nil "ntlm" "net/ntlm.el" (0 0 0 0))
 ;;; Generated autoloads from net/ntlm.el
 (push (purecopy '(ntlm 2 0 0)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "nxml-glyph" "nxml/nxml-glyph.el" (22150 28228
-;;;;;;  450072 702000))
-;;; Generated autoloads from nxml/nxml-glyph.el
-
-(autoload 'nxml-glyph-display-string "nxml-glyph" "\
-Return a string that can display a glyph for Unicode code-point N.
-FACE gives the face that will be used for displaying the string.
-Return nil if the face cannot display a glyph for N.
-
-\(fn N FACE)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (22150 28228
-;;;;;;  450072 702000))
+;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/nxml-mode.el
 
 (autoload 'nxml-mode "nxml-mode" "\
@@ -19682,21 +19426,7 @@ Many aspects this mode can be customized using
 
 ;;;***
 \f
-;;;### (autoloads nil "nxml-uchnm" "nxml/nxml-uchnm.el" (22150 28228
-;;;;;;  454072 702000))
-;;; Generated autoloads from nxml/nxml-uchnm.el
-
-(autoload 'nxml-enable-unicode-char-name-sets "nxml-uchnm" "\
-Enable the use of Unicode standard names for characters.
-The Unicode blocks for which names are enabled is controlled by
-the variable `nxml-enabled-unicode-blocks'.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "octave" "progmodes/octave.el" (22197 58438
-;;;;;;  503460 447000))
+;;;### (autoloads nil "octave" "progmodes/octave.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/octave.el
 
 (autoload 'octave-mode "octave" "\
@@ -19733,8 +19463,7 @@ startup file, `~/.emacs-octave'.
 
 ;;;***
 \f
-;;;### (autoloads nil "opascal" "progmodes/opascal.el" (22156 23699
-;;;;;;  542755 538000))
+;;;### (autoloads nil "opascal" "progmodes/opascal.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/opascal.el
 
 (define-obsolete-function-alias 'delphi-mode 'opascal-mode "24.4")
@@ -19769,7 +19498,7 @@ Coloring:
 
 ;;;***
 \f
-;;;### (autoloads nil "org" "org/org.el" (22309 58853 550986 699000))
+;;;### (autoloads nil "org" "org/org.el" (0 0 0 0))
 ;;; Generated autoloads from org/org.el
 
 (autoload 'org-babel-do-load-languages "org" "\
@@ -19990,8 +19719,7 @@ Call the customize function with org as argument.
 
 ;;;***
 \f
-;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (22150 28228
-;;;;;;  558072 702000))
+;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-agenda.el
 
 (autoload 'org-toggle-sticky-agenda "org-agenda" "\
@@ -20264,8 +19992,7 @@ to override `appt-message-warning-time'.
 
 ;;;***
 \f
-;;;### (autoloads nil "org-capture" "org/org-capture.el" (22150 28228
-;;;;;;  558072 702000))
+;;;### (autoloads nil "org-capture" "org/org-capture.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-capture.el
 
 (autoload 'org-capture-string "org-capture" "\
@@ -20307,8 +20034,7 @@ Set `org-capture-templates' to be similar to `org-remember-templates'.
 
 ;;;***
 \f
-;;;### (autoloads nil "org-colview" "org/org-colview.el" (22150 28228
-;;;;;;  582072 702000))
+;;;### (autoloads nil "org-colview" "org/org-colview.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-colview.el
 
 (autoload 'org-columns-remove-overlays "org-colview" "\
@@ -20371,8 +20097,7 @@ Turn on or update column view in the agenda.
 
 ;;;***
 \f
-;;;### (autoloads nil "org-compat" "org/org-compat.el" (22192 2874
-;;;;;;  471382 391000))
+;;;### (autoloads nil "org-compat" "org/org-compat.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-compat.el
 
 (autoload 'org-check-version "org-compat" "\
@@ -20382,8 +20107,7 @@ Try very hard to provide sensible version strings.
 
 ;;;***
 \f
-;;;### (autoloads nil "org-macs" "org/org-macs.el" (22150 28228 602072
-;;;;;;  702000))
+;;;### (autoloads nil "org-macs" "org/org-macs.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-macs.el
 
 (autoload 'org-load-noerror-mustsuffix "org-macs" "\
@@ -20393,8 +20117,7 @@ Load FILE with optional arguments NOERROR and MUSTSUFFIX.  Drop the MUSTSUFFIX a
 
 ;;;***
 \f
-;;;### (autoloads nil "org-version" "org/org-version.el" (22086 11930
-;;;;;;  98062 731000))
+;;;### (autoloads nil "org-version" "org/org-version.el" (0 0 0 0))
 ;;; Generated autoloads from org/org-version.el
 
 (autoload 'org-release "org-version" "\
@@ -20411,8 +20134,7 @@ The Git version of org-mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "outline" "outline.el" (22150 28228 666072
-;;;;;;  702000))
+;;;### (autoloads nil "outline" "outline.el" (0 0 0 0))
 ;;; Generated autoloads from outline.el
 (put 'outline-regexp 'safe-local-variable 'stringp)
 (put 'outline-heading-end-regexp 'safe-local-variable 'stringp)
@@ -20455,8 +20177,7 @@ See the command `outline-mode' for more information on this mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "package" "emacs-lisp/package.el" (22278 49710
-;;;;;;  59090 835000))
+;;;### (autoloads nil "package" "emacs-lisp/package.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/package.el
 (push (purecopy '(package 1 1 0)) package--builtin-versions)
 
@@ -20480,6 +20201,9 @@ it to the file.
 If called as part of loading `user-init-file', set
 `package-enable-at-startup' to nil, to prevent accidentally
 loading packages twice.
+It is not necessary to adjust `load-path' or `require' the
+individual packages after calling `package-initialize' -- this is
+taken care of by `package-initialize'.
 
 \(fn &optional NO-ACTIVATE)" t nil)
 
@@ -20571,12 +20295,13 @@ The list is displayed in a buffer named `*Packages*'.
 
 ;;;***
 \f
-;;;### (autoloads nil "paren" "paren.el" (22150 28228 666072 702000))
+;;;### (autoloads nil "paren" "paren.el" (0 0 0 0))
 ;;; Generated autoloads from paren.el
 
 (defvar show-paren-mode nil "\
 Non-nil if Show-Paren mode is enabled.
-See the command `show-paren-mode' for a description of this minor mode.
+See the `show-paren-mode' command
+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 `show-paren-mode'.")
@@ -20597,22 +20322,25 @@ matching parenthesis is highlighted in `show-paren-style' after
 
 ;;;***
 \f
-;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (22226
-;;;;;;  58701 641313 948000))
+;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (0 0
+;;;;;;  0))
 ;;; Generated autoloads from calendar/parse-time.el
 (put 'parse-time-rules 'risky-local-variable t)
 
 (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.
+STRING should be on something resembling an RFC2822 string, a la
+\"Fri, 25 Mar 2016 16:24:56 +0100\", but this function is
+somewhat liberal in what format it accepts, and will attempt to
+return a \"likely\" value even for somewhat malformed strings.
+The values returned are identical to those of `decode-time', but
+any values that are unknown are returned as nil.
 
 \(fn STRING)" nil nil)
 
 ;;;***
 \f
-;;;### (autoloads nil "pascal" "progmodes/pascal.el" (22197 58438
-;;;;;;  503460 447000))
+;;;### (autoloads nil "pascal" "progmodes/pascal.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/pascal.el
 
 (autoload 'pascal-mode "pascal" "\
@@ -20661,8 +20389,8 @@ See also the user variables `pascal-type-keywords', `pascal-start-keywords' and
 
 ;;;***
 \f
-;;;### (autoloads nil "password-cache" "password-cache.el" (22150
-;;;;;;  28228 666072 702000))
+;;;### (autoloads nil "password-cache" "password-cache.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from password-cache.el
 
 (defvar password-cache t "\
@@ -20683,8 +20411,7 @@ Check if KEY is in the cache.
 
 ;;;***
 \f
-;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (22195 16710
-;;;;;;  371344 967000))
+;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/pcase.el
 
 (autoload 'pcase "pcase" "\
@@ -20804,8 +20531,7 @@ to this macro.
 
 ;;;***
 \f
-;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (22150 28228 666072
-;;;;;;  702000))
+;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (0 0 0 0))
 ;;; Generated autoloads from pcmpl-cvs.el
 
 (autoload 'pcomplete/cvs "pcmpl-cvs" "\
@@ -20815,8 +20541,7 @@ Completion rules for the `cvs' command.
 
 ;;;***
 \f
-;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (22150 28228 666072
-;;;;;;  702000))
+;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (0 0 0 0))
 ;;; Generated autoloads from pcmpl-gnu.el
 
 (autoload 'pcomplete/gzip "pcmpl-gnu" "\
@@ -20839,12 +20564,16 @@ Completion for the GNU tar utility.
 
 \(fn)" nil nil)
 
+(autoload 'pcomplete/find "pcmpl-gnu" "\
+Completion for the GNU find utility.
+
+\(fn)" nil nil)
+
 (defalias 'pcomplete/gdb 'pcomplete/xargs)
 
 ;;;***
 \f
-;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (22150 28228
-;;;;;;  670072 702000))
+;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (0 0 0 0))
 ;;; Generated autoloads from pcmpl-linux.el
 
 (autoload 'pcomplete/kill "pcmpl-linux" "\
@@ -20864,8 +20593,7 @@ Completion for GNU/Linux `mount'.
 
 ;;;***
 \f
-;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (22150 28228 670072
-;;;;;;  702000))
+;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (0 0 0 0))
 ;;; Generated autoloads from pcmpl-rpm.el
 
 (autoload 'pcomplete/rpm "pcmpl-rpm" "\
@@ -20875,8 +20603,7 @@ Completion for the `rpm' command.
 
 ;;;***
 \f
-;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (22150 28228 670072
-;;;;;;  702000))
+;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (0 0 0 0))
 ;;; Generated autoloads from pcmpl-unix.el
 
 (autoload 'pcomplete/cd "pcmpl-unix" "\
@@ -20931,8 +20658,7 @@ Includes files as well as host names followed by a colon.
 
 ;;;***
 \f
-;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (22150 28228 670072
-;;;;;;  702000))
+;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (0 0 0 0))
 ;;; Generated autoloads from pcmpl-x.el
 
 (autoload 'pcomplete/tlmgr "pcmpl-x" "\
@@ -20956,8 +20682,7 @@ Completion for the `ag' command.
 
 ;;;***
 \f
-;;;### (autoloads nil "pcomplete" "pcomplete.el" (22150 28228 674072
-;;;;;;  702000))
+;;;### (autoloads nil "pcomplete" "pcomplete.el" (0 0 0 0))
 ;;; Generated autoloads from pcomplete.el
 
 (autoload 'pcomplete "pcomplete" "\
@@ -21014,7 +20739,7 @@ Setup `shell-mode' to use pcomplete.
 
 ;;;***
 \f
-;;;### (autoloads nil "pcvs" "vc/pcvs.el" (22182 4679 527463 499000))
+;;;### (autoloads nil "pcvs" "vc/pcvs.el" (0 0 0 0))
 ;;; Generated autoloads from vc/pcvs.el
 
 (autoload 'cvs-checkout "pcvs" "\
@@ -21089,8 +20814,7 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp d
 
 ;;;***
 \f
-;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (22150 28229
-;;;;;;  278072 702000))
+;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (0 0 0 0))
 ;;; Generated autoloads from vc/pcvs-defs.el
 
 (defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help ,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] `(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check out a module from the repository"))) (define-key m [update] `(menu-item ,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from the repository"))) (define-key m [examine] `(menu-item ,(purecopy "Examine Directory") cvs-examine :help ,(purecopy "Examine the current state of a workarea"))) (fset 'cvs-global-menu m)) "\
@@ -21098,8 +20822,8 @@ Global menu used by PCL-CVS.")
 
 ;;;***
 \f
-;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (22197
-;;;;;;  58438 503460 447000))
+;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/perl-mode.el
 (put 'perl-indent-level 'safe-local-variable 'integerp)
 (put 'perl-continued-statement-offset 'safe-local-variable 'integerp)
@@ -21160,8 +20884,7 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'.
 
 ;;;***
 \f
-;;;### (autoloads nil "picture" "textmodes/picture.el" (22168 58180
-;;;;;;  311008 971000))
+;;;### (autoloads nil "picture" "textmodes/picture.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/picture.el
 
 (autoload 'picture-mode "picture" "\
@@ -21241,8 +20964,7 @@ they are not by default assigned to keys.
 
 ;;;***
 \f
-;;;### (autoloads nil "pinentry" "net/pinentry.el" (22218 64587 997919
-;;;;;;  743000))
+;;;### (autoloads nil "pinentry" "net/pinentry.el" (0 0 0 0))
 ;;; Generated autoloads from net/pinentry.el
 (push (purecopy '(pinentry 0 1)) package--builtin-versions)
 
@@ -21259,9 +20981,8 @@ will not be shown.
 
 ;;;***
 \f
-;;;### (autoloads nil "plstore" "gnus/plstore.el" (22150 28228 10072
-;;;;;;  702000))
-;;; Generated autoloads from gnus/plstore.el
+;;;### (autoloads nil "plstore" "plstore.el" (0 0 0 0))
+;;; Generated autoloads from plstore.el
 
 (autoload 'plstore-open "plstore" "\
 Create a plstore instance associated with FILE.
@@ -21275,8 +20996,7 @@ Major mode for editing PLSTORE files.
 
 ;;;***
 \f
-;;;### (autoloads nil "po" "textmodes/po.el" (22150 28229 106072
-;;;;;;  702000))
+;;;### (autoloads nil "po" "textmodes/po.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/po.el
 
 (autoload 'po-find-file-coding-system "po" "\
@@ -21287,7 +21007,7 @@ Called through `file-coding-system-alist', before the file is visited for real.
 
 ;;;***
 \f
-;;;### (autoloads nil "pong" "play/pong.el" (22150 28228 682072 702000))
+;;;### (autoloads nil "pong" "play/pong.el" (0 0 0 0))
 ;;; Generated autoloads from play/pong.el
 
 (autoload 'pong "pong" "\
@@ -21303,8 +21023,8 @@ pong-mode keybindings:\\<pong-mode-map>
 
 ;;;***
 \f
-;;;### (autoloads nil "pop3" "gnus/pop3.el" (22150 28228 14072 702000))
-;;; Generated autoloads from gnus/pop3.el
+;;;### (autoloads nil "pop3" "net/pop3.el" (0 0 0 0))
+;;; Generated autoloads from net/pop3.el
 
 (autoload 'pop3-movemail "pop3" "\
 Transfer contents of a maildrop to the specified FILE.
@@ -21314,8 +21034,7 @@ Use streaming commands.
 
 ;;;***
 \f
-;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (22150 28227 454072
-;;;;;;  702000))
+;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/pp.el
 
 (autoload 'pp-to-string "pp" "\
@@ -21365,8 +21084,7 @@ Ignores leading comment characters.
 
 ;;;***
 \f
-;;;### (autoloads nil "printing" "printing.el" (22150 28228 698072
-;;;;;;  702000))
+;;;### (autoloads nil "printing" "printing.el" (0 0 0 0))
 ;;; Generated autoloads from printing.el
 (push (purecopy '(printing 6 9 3)) package--builtin-versions)
 
@@ -21954,7 +21672,7 @@ are both set to t.
 
 ;;;***
 \f
-;;;### (autoloads nil "proced" "proced.el" (22150 28228 702072 702000))
+;;;### (autoloads nil "proced" "proced.el" (0 0 0 0))
 ;;; Generated autoloads from proced.el
 
 (autoload 'proced "proced" "\
@@ -21972,8 +21690,7 @@ Proced buffers.
 
 ;;;***
 \f
-;;;### (autoloads nil "profiler" "profiler.el" (22150 28228 702072
-;;;;;;  702000))
+;;;### (autoloads nil "profiler" "profiler.el" (0 0 0 0))
 ;;; Generated autoloads from profiler.el
 
 (autoload 'profiler-start "profiler" "\
@@ -22001,8 +21718,7 @@ Open profile FILENAME.
 
 ;;;***
 \f
-;;;### (autoloads nil "project" "progmodes/project.el" (22296 46772
-;;;;;;  488104 103000))
+;;;### (autoloads nil "project" "progmodes/project.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/project.el
 
 (autoload 'project-current "project" "\
@@ -22044,8 +21760,7 @@ recognized.
 
 ;;;***
 \f
-;;;### (autoloads nil "prolog" "progmodes/prolog.el" (22283 34751
-;;;;;;  181333 844000))
+;;;### (autoloads nil "prolog" "progmodes/prolog.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/prolog.el
 
 (autoload 'prolog-mode "prolog" "\
@@ -22078,7 +21793,7 @@ With prefix argument ARG, restart the Prolog process if running before.
 
 ;;;***
 \f
-;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (22150 28228 986072 702000))
+;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (0 0 0 0))
 ;;; Generated autoloads from ps-bdf.el
 
 (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")) "\
@@ -22089,8 +21804,7 @@ The default value is (\"/usr/local/share/emacs/fonts/bdf\").")
 
 ;;;***
 \f
-;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (22197 58438
-;;;;;;  507460 447000))
+;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/ps-mode.el
 (push (purecopy '(ps-mode 1 1 9)) package--builtin-versions)
 
@@ -22136,8 +21850,7 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when the cursor is at the number
 
 ;;;***
 \f
-;;;### (autoloads nil "ps-print" "ps-print.el" (22220 19926 440329
-;;;;;;  271000))
+;;;### (autoloads nil "ps-print" "ps-print.el" (0 0 0 0))
 ;;; Generated autoloads from ps-print.el
 (push (purecopy '(ps-print 7 3 5)) package--builtin-versions)
 
@@ -22334,8 +22047,7 @@ If EXTENSION is any other symbol, it is ignored.
 
 ;;;***
 \f
-;;;### (autoloads nil "pulse" "cedet/pulse.el" (22150 28227 222072
-;;;;;;  702000))
+;;;### (autoloads nil "pulse" "cedet/pulse.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/pulse.el
 (push (purecopy '(pulse 1 0)) package--builtin-versions)
 
@@ -22353,8 +22065,7 @@ Optional argument FACE specifies the face to do the highlighting.
 
 ;;;***
 \f
-;;;### (autoloads nil "python" "progmodes/python.el" (22304 40885
-;;;;;;  57243 884000))
+;;;### (autoloads nil "python" "progmodes/python.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/python.el
 (push (purecopy '(python 0 25 1)) package--builtin-versions)
 
@@ -22391,8 +22102,8 @@ Major mode for editing Python files.
 
 ;;;***
 \f
-;;;### (autoloads nil "qp" "gnus/qp.el" (22150 28228 14072 702000))
-;;; Generated autoloads from gnus/qp.el
+;;;### (autoloads nil "qp" "mail/qp.el" (0 0 0 0))
+;;; Generated autoloads from mail/qp.el
 
 (autoload 'quoted-printable-decode-region "qp" "\
 Decode quoted-printable in the region between FROM and TO, per RFC 2045.
@@ -22410,8 +22121,7 @@ them into characters should be done separately.
 
 ;;;***
 \f
-;;;### (autoloads nil "quail" "international/quail.el" (22174 10581
-;;;;;;  673112 520000))
+;;;### (autoloads nil "quail" "international/quail.el" (0 0 0 0))
 ;;; Generated autoloads from international/quail.el
 
 (autoload 'quail-title "quail" "\
@@ -22641,8 +22351,8 @@ of each directory.
 
 ;;;***
 \f
-;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (22150
-;;;;;;  28228 202072 702000))
+;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from leim/quail/hangul.el
 
 (autoload 'hangul-input-method-activate "quail/hangul" "\
@@ -22655,7 +22365,7 @@ HELP-TEXT is a text set in `hangul-input-method-help-text'.
 ;;;***
 \f
 ;;;### (autoloads nil "quail/uni-input" "leim/quail/uni-input.el"
-;;;;;;  (22150 28228 210072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from leim/quail/uni-input.el
 
 (autoload 'ucs-input-activate "quail/uni-input" "\
@@ -22669,8 +22379,7 @@ While this input method is active, the variable
 
 ;;;***
 \f
-;;;### (autoloads nil "quickurl" "net/quickurl.el" (22197 58438 347460
-;;;;;;  447000))
+;;;### (autoloads nil "quickurl" "net/quickurl.el" (0 0 0 0))
 ;;; 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" "\
@@ -22741,8 +22450,7 @@ Display `quickurl-list' as a formatted list using `quickurl-list-mode'.
 
 ;;;***
 \f
-;;;### (autoloads nil "rcirc" "net/rcirc.el" (22150 28228 390072
-;;;;;;  702000))
+;;;### (autoloads nil "rcirc" "net/rcirc.el" (0 0 0 0))
 ;;; Generated autoloads from net/rcirc.el
 
 (autoload 'rcirc "rcirc" "\
@@ -22759,11 +22467,12 @@ If ARG is non-nil, instead prompt for connection parameters.
 (autoload 'rcirc-connect "rcirc" "\
 
 
-\(fn SERVER &optional PORT NICK USER-NAME FULL-NAME STARTUP-CHANNELS PASSWORD ENCRYPTION)" nil nil)
+\(fn SERVER &optional PORT NICK USER-NAME FULL-NAME STARTUP-CHANNELS PASSWORD ENCRYPTION SERVER-ALIAS)" nil nil)
 
 (defvar rcirc-track-minor-mode nil "\
 Non-nil if Rcirc-Track minor mode is enabled.
-See the command `rcirc-track-minor-mode' for a description of this minor mode.
+See the `rcirc-track-minor-mode' command
+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 `rcirc-track-minor-mode'.")
@@ -22780,8 +22489,8 @@ if ARG is omitted or nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (22150
-;;;;;;  28227 454072 702000))
+;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from emacs-lisp/re-builder.el
 
 (defalias 'regexp-builder 're-builder)
@@ -22799,13 +22508,13 @@ matching parts of the target buffer will be highlighted.
 
 ;;;***
 \f
-;;;### (autoloads nil "recentf" "recentf.el" (22150 28228 990072
-;;;;;;  702000))
+;;;### (autoloads nil "recentf" "recentf.el" (0 0 0 0))
 ;;; Generated autoloads from recentf.el
 
 (defvar recentf-mode nil "\
 Non-nil if Recentf mode is enabled.
-See the command `recentf-mode' for a description of this minor mode.
+See the `recentf-mode' command
+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 `recentf-mode'.")
@@ -22826,7 +22535,7 @@ were operated on recently.
 
 ;;;***
 \f
-;;;### (autoloads nil "rect" "rect.el" (22304 40885 81243 884000))
+;;;### (autoloads nil "rect" "rect.el" (0 0 0 0))
 ;;; Generated autoloads from rect.el
 
 (autoload 'delete-rectangle "rect" "\
@@ -22912,7 +22621,7 @@ no text on the right side of the rectangle.
 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
-rectangle, all continuous whitespace starting at that column is deleted.
+rectangle, all contiguous whitespace starting at that column is deleted.
 
 When called from a program the rectangle's corners are START and END.
 With a prefix (or a FILL) argument, also fill too short lines.
@@ -22966,8 +22675,7 @@ Activates the region if needed.  Only lasts until the region is deactivated.
 
 ;;;***
 \f
-;;;### (autoloads nil "refill" "textmodes/refill.el" (22150 28229
-;;;;;;  106072 702000))
+;;;### (autoloads nil "refill" "textmodes/refill.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/refill.el
 
 (autoload 'refill-mode "refill" "\
@@ -22987,8 +22695,7 @@ For true \"word wrap\" behavior, use `visual-line-mode' instead.
 
 ;;;***
 \f
-;;;### (autoloads nil "reftex" "textmodes/reftex.el" (22179 28801
-;;;;;;  466001 468000))
+;;;### (autoloads nil "reftex" "textmodes/reftex.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/reftex.el
 (autoload 'reftex-citation "reftex-cite" nil t)
 (autoload 'reftex-all-document-files "reftex-parse")
@@ -23041,8 +22748,8 @@ This enforces rescanning the buffer on next use.
 
 ;;;***
 \f
-;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (22182
-;;;;;;  44208 583853 279000))
+;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (0
+;;;;;;  0 0 0))
 ;;; 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))))
@@ -23051,8 +22758,8 @@ This enforces rescanning the buffer on next use.
 
 ;;;***
 \f
-;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (22150
-;;;;;;  28227 454072 702000))
+;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (0
+;;;;;;  0 0 0))
 ;;; Generated autoloads from emacs-lisp/regexp-opt.el
 
 (autoload 'regexp-opt "regexp-opt" "\
@@ -23081,15 +22788,13 @@ This means the number of non-shy regexp grouping constructs
 
 ;;;***
 \f
-;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (22150 28227 454072
-;;;;;;  702000))
+;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/regi.el
 (push (purecopy '(regi 1 8)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "remember" "textmodes/remember.el" (22150 28229
-;;;;;;  130072 702000))
+;;;### (autoloads nil "remember" "textmodes/remember.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/remember.el
 (push (purecopy '(remember 2 0)) package--builtin-versions)
 
@@ -23143,7 +22848,7 @@ to turn the *scratch* buffer into your notes buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "repeat" "repeat.el" (22150 28228 994072 702000))
+;;;### (autoloads nil "repeat" "repeat.el" (0 0 0 0))
 ;;; Generated autoloads from repeat.el
 (push (purecopy '(repeat 0 51)) package--builtin-versions)
 
@@ -23166,8 +22871,7 @@ recently executed command not bound to an input event\".
 
 ;;;***
 \f
-;;;### (autoloads nil "reporter" "mail/reporter.el" (22150 28228
-;;;;;;  234072 702000))
+;;;### (autoloads nil "reporter" "mail/reporter.el" (0 0 0 0))
 ;;; Generated autoloads from mail/reporter.el
 
 (autoload 'reporter-submit-bug-report "reporter" "\
@@ -23198,8 +22902,7 @@ mail-sending package is used for editing and sending the message.
 
 ;;;***
 \f
-;;;### (autoloads nil "reposition" "reposition.el" (22150 28228 994072
-;;;;;;  702000))
+;;;### (autoloads nil "reposition" "reposition.el" (0 0 0 0))
 ;;; Generated autoloads from reposition.el
 
 (autoload 'reposition-window "reposition" "\
@@ -23225,7 +22928,7 @@ first comment line visible (if point is in a comment).
 
 ;;;***
 \f
-;;;### (autoloads nil "reveal" "reveal.el" (22150 28228 994072 702000))
+;;;### (autoloads nil "reveal" "reveal.el" (0 0 0 0))
 ;;; Generated autoloads from reveal.el
 
 (autoload 'reveal-mode "reveal" "\
@@ -23241,7 +22944,8 @@ reveals invisible text around point.
 
 (defvar global-reveal-mode nil "\
 Non-nil if Global Reveal mode is enabled.
-See the command `global-reveal-mode' for a description of this minor mode.
+See the `global-reveal-mode' command
+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 `global-reveal-mode'.")
@@ -23260,8 +22964,7 @@ the mode if ARG is omitted or nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (22150 28227 454072
-;;;;;;  702000))
+;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/ring.el
 
 (autoload 'ring-p "ring" "\
@@ -23276,8 +22979,7 @@ Make a ring that can contain SIZE elements.
 
 ;;;***
 \f
-;;;### (autoloads nil "rlogin" "net/rlogin.el" (22150 28228 394072
-;;;;;;  702000))
+;;;### (autoloads nil "rlogin" "net/rlogin.el" (0 0 0 0))
 ;;; Generated autoloads from net/rlogin.el
 
 (autoload 'rlogin "rlogin" "\
@@ -23321,8 +23023,7 @@ variable.
 
 ;;;***
 \f
-;;;### (autoloads nil "rmail" "mail/rmail.el" (22250 56969 841825
-;;;;;;  171000))
+;;;### (autoloads nil "rmail" "mail/rmail.el" (0 0 0 0))
 ;;; Generated autoloads from mail/rmail.el
 
 (defvar rmail-file-name (purecopy "~/RMAIL") "\
@@ -23330,9 +23031,9 @@ Name of user's primary mail file.")
 
 (custom-autoload 'rmail-file-name "rmail" t)
 
-(put 'rmail-spool-directory 'standard-value '((cond ((file-exists-p "/var/mail") "/var/mail/") ((file-exists-p "/var/spool/mail") "/var/spool/mail/") ((memq system-type '(hpux usg-unix-v irix)) "/usr/mail/") (t "/usr/spool/mail/"))))
+(put 'rmail-spool-directory 'standard-value '((cond ((file-exists-p "/var/mail") "/var/mail/") ((file-exists-p "/var/spool/mail") "/var/spool/mail/") ((memq system-type '(hpux usg-unix-v)) "/usr/mail/") (t "/usr/spool/mail/"))))
 
-(defvar rmail-spool-directory (purecopy (cond ((file-exists-p "/var/mail") "/var/mail/") ((file-exists-p "/var/spool/mail") "/var/spool/mail/") ((memq system-type '(hpux usg-unix-v irix)) "/usr/mail/") (t "/usr/spool/mail/"))) "\
+(defvar rmail-spool-directory (purecopy (cond ((file-exists-p "/var/mail") "/var/mail/") ((file-exists-p "/var/spool/mail") "/var/spool/mail/") ((memq system-type '(hpux usg-unix-v)) "/usr/mail/") (t "/usr/spool/mail/"))) "\
 Name of directory used by system mailer for delivering new mail.
 Its name should end with a slash.")
 
@@ -23519,8 +23220,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server.
 
 ;;;***
 \f
-;;;### (autoloads nil "rmailout" "mail/rmailout.el" (22150 28228
-;;;;;;  246072 702000))
+;;;### (autoloads nil "rmailout" "mail/rmailout.el" (0 0 0 0))
 ;;; Generated autoloads from mail/rmailout.el
 (put 'rmail-output-file-alist 'risky-local-variable t)
 
@@ -23584,8 +23284,7 @@ than appending to it.  Deletes the message after writing if
 
 ;;;***
 \f
-;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (22150 28228
-;;;;;;  454072 702000))
+;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-cmpct.el
 
 (autoload 'rng-c-load-schema "rng-cmpct" "\
@@ -23596,8 +23295,7 @@ Return a pattern.
 
 ;;;***
 \f
-;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (22150 28228
-;;;;;;  458072 702000))
+;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-nxml.el
 
 (autoload 'rng-nxml-mode-init "rng-nxml" "\
@@ -23609,8 +23307,7 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (22150 28228
-;;;;;;  462072 702000))
+;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-valid.el
 
 (autoload 'rng-validate-mode "rng-valid" "\
@@ -23640,20 +23337,19 @@ to use for finding the schema.
 
 ;;;***
 \f
-;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (22150 28228 462072
-;;;;;;  702000))
+;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/rng-xsd.el
 
-(put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile 'rng-xsd-compile)
+(put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile #'rng-xsd-compile)
 
 (autoload 'rng-xsd-compile "rng-xsd" "\
 Provides W3C XML Schema as a RELAX NG datatypes library.
 NAME is a symbol giving the local name of the datatype.  PARAMS is a
 list of pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol
 giving the name of the parameter and PARAM-VALUE is a string giving
-its value.  If NAME or PARAMS are invalid, it calls rng-dt-error
+its value.  If NAME or PARAMS are invalid, it calls `rng-dt-error'
 passing it arguments in the same style as format; the value from
-rng-dt-error will be returned.  Otherwise, it returns a list.  The
+`rng-dt-error' will be returned.  Otherwise, it returns a list.  The
 first member of the list is t if any string is a legal value for the
 datatype and nil otherwise.  The second argument is a symbol; this
 symbol will be called as a function passing it a string followed by
@@ -23668,8 +23364,7 @@ must be equal.
 
 ;;;***
 \f
-;;;### (autoloads nil "robin" "international/robin.el" (22086 11929
-;;;;;;  882062 731000))
+;;;### (autoloads nil "robin" "international/robin.el" (0 0 0 0))
 ;;; Generated autoloads from international/robin.el
 
 (autoload 'robin-define-package "robin" "\
@@ -23701,7 +23396,7 @@ Start using robin package NAME, which is a string.
 
 ;;;***
 \f
-;;;### (autoloads nil "rot13" "rot13.el" (22150 28228 994072 702000))
+;;;### (autoloads nil "rot13" "rot13.el" (0 0 0 0))
 ;;; Generated autoloads from rot13.el
 
 (autoload 'rot13 "rot13" "\
@@ -23738,8 +23433,7 @@ Toggle the use of ROT13 encoding for the current window.
 
 ;;;***
 \f
-;;;### (autoloads nil "rst" "textmodes/rst.el" (22150 28229 146072
-;;;;;;  702000))
+;;;### (autoloads nil "rst" "textmodes/rst.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/rst.el
  (add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode)))
 
@@ -23769,8 +23463,8 @@ for modes derived from Text mode, like Mail mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (22253
-;;;;;;  13631 370961 36000))
+;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/ruby-mode.el
 (push (purecopy '(ruby-mode 1 2)) package--builtin-versions)
 
@@ -23787,8 +23481,7 @@ Major mode for editing Ruby code.
 
 ;;;***
 \f
-;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (22150 28228 994072
-;;;;;;  702000))
+;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (0 0 0 0))
 ;;; Generated autoloads from ruler-mode.el
 (push (purecopy '(ruler-mode 1 6)) package--builtin-versions)
 
@@ -23806,8 +23499,7 @@ if ARG is omitted or nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (22150 28227 454072
-;;;;;;  702000))
+;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/rx.el
 
 (autoload 'rx-to-string "rx" "\
@@ -24118,21 +23810,20 @@ enclosed in `(and ...)'.
 
 ;;;***
 \f
-;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (22150 28228
-;;;;;;  394072 702000))
+;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (0 0 0 0))
 ;;; Generated autoloads from net/sasl-ntlm.el
 (push (purecopy '(sasl 1 0)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "savehist" "savehist.el" (22150 28228 994072
-;;;;;;  702000))
+;;;### (autoloads nil "savehist" "savehist.el" (0 0 0 0))
 ;;; Generated autoloads from savehist.el
 (push (purecopy '(savehist 24)) package--builtin-versions)
 
 (defvar savehist-mode nil "\
 Non-nil if Savehist mode is enabled.
-See the command `savehist-mode' for a description of this minor mode.
+See the `savehist-mode' command
+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 `savehist-mode'.")
@@ -24158,13 +23849,13 @@ histories, which is probably undesirable.
 
 ;;;***
 \f
-;;;### (autoloads nil "saveplace" "saveplace.el" (22224 16978 400323
-;;;;;;  324000))
+;;;### (autoloads nil "saveplace" "saveplace.el" (0 0 0 0))
 ;;; Generated autoloads from saveplace.el
 
 (defvar save-place-mode nil "\
 Non-nil if Save-Place mode is enabled.
-See the command `save-place-mode' for a description of this minor mode.
+See the `save-place-mode' command
+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 `save-place-mode'.")
@@ -24196,8 +23887,7 @@ file:
 
 ;;;***
 \f
-;;;### (autoloads nil "scheme" "progmodes/scheme.el" (22150 28228
-;;;;;;  910072 702000))
+;;;### (autoloads nil "scheme" "progmodes/scheme.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/scheme.el
 
 (autoload 'scheme-mode "scheme" "\
@@ -24236,8 +23926,7 @@ that variable's value is a string.
 
 ;;;***
 \f
-;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (22150 28228
-;;;;;;  18072 702000))
+;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/score-mode.el
 
 (autoload 'gnus-score-mode "score-mode" "\
@@ -24250,13 +23939,13 @@ This mode is an extended emacs-lisp mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "scroll-all" "scroll-all.el" (22150 28228 994072
-;;;;;;  702000))
+;;;### (autoloads nil "scroll-all" "scroll-all.el" (0 0 0 0))
 ;;; Generated autoloads from scroll-all.el
 
 (defvar scroll-all-mode nil "\
 Non-nil if Scroll-All mode is enabled.
-See the command `scroll-all-mode' for a description of this minor mode.
+See the `scroll-all-mode' command
+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 `scroll-all-mode'.")
@@ -24276,8 +23965,7 @@ one window apply to all visible windows in the same frame.
 
 ;;;***
 \f
-;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (22150 28228
-;;;;;;  994072 702000))
+;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (0 0 0 0))
 ;;; Generated autoloads from scroll-lock.el
 
 (autoload 'scroll-lock-mode "scroll-lock" "\
@@ -24293,16 +23981,14 @@ vertically fixed relative to window boundaries during scrolling.
 
 ;;;***
 \f
-;;;### (autoloads nil "secrets" "net/secrets.el" (22150 28228 394072
-;;;;;;  702000))
+;;;### (autoloads nil "secrets" "net/secrets.el" (0 0 0 0))
 ;;; Generated autoloads from net/secrets.el
 (when (featurep 'dbusbind)
  (autoload 'secrets-show-secrets "secrets" nil t))
 
 ;;;***
 \f
-;;;### (autoloads nil "semantic" "cedet/semantic.el" (22150 28227
-;;;;;;  222072 702000))
+;;;### (autoloads nil "semantic" "cedet/semantic.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic.el
 (push (purecopy '(semantic 2 2)) package--builtin-versions)
 
@@ -24334,7 +24020,8 @@ The following modes are more targeted at people who want to see
 
 (defvar semantic-mode nil "\
 Non-nil if Semantic mode is enabled.
-See the command `semantic-mode' for a description of this minor mode.
+See the `semantic-mode' command
+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 `semantic-mode'.")
@@ -24360,7 +24047,7 @@ Semantic mode.
 ;;;***
 \f
 ;;;### (autoloads nil "semantic/bovine/grammar" "cedet/semantic/bovine/grammar.el"
-;;;;;;  (22150 28227 234072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/bovine/grammar.el
 
 (autoload 'bovine-grammar-mode "semantic/bovine/grammar" "\
@@ -24371,7 +24058,7 @@ Major mode for editing Bovine grammars.
 ;;;***
 \f
 ;;;### (autoloads nil "semantic/wisent/grammar" "cedet/semantic/wisent/grammar.el"
-;;;;;;  (22150 28227 266072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/semantic/wisent/grammar.el
 
 (autoload 'wisent-grammar-mode "semantic/wisent/grammar" "\
@@ -24381,8 +24068,7 @@ Major mode for editing Wisent grammars.
 
 ;;;***
 \f
-;;;### (autoloads nil "sendmail" "mail/sendmail.el" (22224 36171
-;;;;;;  816467 383000))
+;;;### (autoloads nil "sendmail" "mail/sendmail.el" (0 0 0 0))
 ;;; Generated autoloads from mail/sendmail.el
 
 (defvar mail-from-style 'default "\
@@ -24663,14 +24349,13 @@ Like `mail' command, but display mail buffer in another frame.
 
 ;;;***
 \f
-;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (22278 49573 67090
-;;;;;;  835000))
+;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/seq.el
-(push (purecopy '(seq 2 3)) package--builtin-versions)
+(push (purecopy '(seq 2 14)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "server" "server.el" (22150 28228 998072 702000))
+;;;### (autoloads nil "server" "server.el" (0 0 0 0))
 ;;; Generated autoloads from server.el
 
 (put 'server-host 'risky-local-variable t)
@@ -24707,7 +24392,8 @@ NAME defaults to `server-name'.  With argument, ask for NAME.
 
 (defvar server-mode nil "\
 Non-nil if Server mode is enabled.
-See the command `server-mode' for a description of this minor mode.
+See the `server-mode' command
+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 `server-mode'.")
@@ -24737,7 +24423,7 @@ only these files will be asked to be saved.
 
 ;;;***
 \f
-;;;### (autoloads nil "ses" "ses.el" (22189 64323 296321 19000))
+;;;### (autoloads nil "ses" "ses.el" (0 0 0 0))
 ;;; Generated autoloads from ses.el
 
 (autoload 'ses-mode "ses" "\
@@ -24781,8 +24467,8 @@ formula:
 
 ;;;***
 \f
-;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (22150
-;;;;;;  28229 150072 702000))
+;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from textmodes/sgml-mode.el
 
 (autoload 'sgml-mode "sgml-mode" "\
@@ -24847,8 +24533,8 @@ To work around that, do:
 
 ;;;***
 \f
-;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (22291
-;;;;;;  28851 657608 847000))
+;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/sh-script.el
 (push (purecopy '(sh-script 2 0 6)) package--builtin-versions)
 (put 'sh-shell 'safe-local-variable 'symbolp)
@@ -24913,8 +24599,7 @@ with your script for an edit-interpret-debug cycle.
 
 ;;;***
 \f
-;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (22150 28227
-;;;;;;  454072 702000))
+;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/shadow.el
 
 (autoload 'list-load-path-shadows "shadow" "\
@@ -24963,8 +24648,7 @@ function, `load-path-shadows-find'.
 
 ;;;***
 \f
-;;;### (autoloads nil "shadowfile" "shadowfile.el" (22150 28229 14072
-;;;;;;  702000))
+;;;### (autoloads nil "shadowfile" "shadowfile.el" (0 0 0 0))
 ;;; Generated autoloads from shadowfile.el
 
 (autoload 'shadow-define-cluster "shadowfile" "\
@@ -25002,7 +24686,7 @@ Set up file shadowing.
 
 ;;;***
 \f
-;;;### (autoloads nil "shell" "shell.el" (22150 28229 14072 702000))
+;;;### (autoloads nil "shell" "shell.el" (0 0 0 0))
 ;;; Generated autoloads from shell.el
 
 (defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\
@@ -25050,7 +24734,7 @@ Otherwise, one argument `-i' is passed to the shell.
 
 ;;;***
 \f
-;;;### (autoloads nil "shr" "net/shr.el" (22255 55369 13338 944000))
+;;;### (autoloads nil "shr" "net/shr.el" (0 0 0 0))
 ;;; Generated autoloads from net/shr.el
 
 (autoload 'shr-render-region "shr" "\
@@ -25067,9 +24751,8 @@ DOM should be a parse tree as generated by
 
 ;;;***
 \f
-;;;### (autoloads nil "sieve" "gnus/sieve.el" (22150 28228 18072
-;;;;;;  702000))
-;;; Generated autoloads from gnus/sieve.el
+;;;### (autoloads nil "sieve" "net/sieve.el" (0 0 0 0))
+;;; Generated autoloads from net/sieve.el
 
 (autoload 'sieve-manage "sieve" "\
 
@@ -25093,9 +24776,8 @@ DOM should be a parse tree as generated by
 
 ;;;***
 \f
-;;;### (autoloads nil "sieve-mode" "gnus/sieve-mode.el" (22150 28228
-;;;;;;  18072 702000))
-;;; Generated autoloads from gnus/sieve-mode.el
+;;;### (autoloads nil "sieve-mode" "net/sieve-mode.el" (0 0 0 0))
+;;; Generated autoloads from net/sieve-mode.el
 
 (autoload 'sieve-mode "sieve-mode" "\
 Major mode for editing Sieve code.
@@ -25109,8 +24791,7 @@ Turning on Sieve mode runs `sieve-mode-hook'.
 
 ;;;***
 \f
-;;;### (autoloads nil "simula" "progmodes/simula.el" (22197 58438
-;;;;;;  563460 447000))
+;;;### (autoloads nil "simula" "progmodes/simula.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/simula.el
 
 (autoload 'simula-mode "simula" "\
@@ -25158,8 +24839,7 @@ with no arguments, if that value is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "skeleton" "skeleton.el" (22197 58438 667460
-;;;;;;  447000))
+;;;### (autoloads nil "skeleton" "skeleton.el" (0 0 0 0))
 ;;; Generated autoloads from skeleton.el
 
 (defvar skeleton-filter-function 'identity "\
@@ -25278,16 +24958,15 @@ twice for the others.
 
 ;;;***
 \f
-;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (22150 28229
-;;;;;;  286072 702000))
+;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (0 0 0 0))
 ;;; Generated autoloads from vc/smerge-mode.el
 
 (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
+NAME-UPPER, NAME-LOWER, and NAME-BASE, if non-nil, are used for the
 buffer names.
 
-\(fn &optional NAME-MINE NAME-OTHER NAME-BASE)" t nil)
+\(fn &optional NAME-UPPER NAME-LOWER NAME-BASE)" t nil)
 
 (autoload 'smerge-mode "smerge-mode" "\
 Minor mode to simplify editing output from the diff3 program.
@@ -25306,8 +24985,7 @@ If no conflict maker is found, turn off `smerge-mode'.
 
 ;;;***
 \f
-;;;### (autoloads nil "smiley" "gnus/smiley.el" (22150 28228 18072
-;;;;;;  702000))
+;;;### (autoloads nil "smiley" "gnus/smiley.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/smiley.el
 
 (autoload 'smiley-region "smiley" "\
@@ -25324,8 +25002,7 @@ interactively.  If there's no argument, do it at the current buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (22150 28228
-;;;;;;  254072 702000))
+;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (0 0 0 0))
 ;;; Generated autoloads from mail/smtpmail.el
 
 (autoload 'smtpmail-send-it "smtpmail" "\
@@ -25340,8 +25017,7 @@ Send mail that was queued as a result of setting `smtpmail-queue-mail'.
 
 ;;;***
 \f
-;;;### (autoloads nil "snake" "play/snake.el" (22150 28228 682072
-;;;;;;  702000))
+;;;### (autoloads nil "snake" "play/snake.el" (0 0 0 0))
 ;;; Generated autoloads from play/snake.el
 
 (autoload 'snake "snake" "\
@@ -25364,8 +25040,7 @@ Snake mode keybindings:
 
 ;;;***
 \f
-;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (22150 28228
-;;;;;;  402072 702000))
+;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (0 0 0 0))
 ;;; Generated autoloads from net/snmp-mode.el
 
 (autoload 'snmp-mode "snmp-mode" "\
@@ -25394,15 +25069,13 @@ then `snmpv2-mode-hook'.
 
 ;;;***
 \f
-;;;### (autoloads nil "soap-client" "net/soap-client.el" (22249 52871
-;;;;;;  284284 99000))
+;;;### (autoloads nil "soap-client" "net/soap-client.el" (0 0 0 0))
 ;;; Generated autoloads from net/soap-client.el
-(push (purecopy '(soap-client 3 0 2)) package--builtin-versions)
+(push (purecopy '(soap-client 3 1 1)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "solar" "calendar/solar.el" (22284 55604 54845
-;;;;;;  171000))
+;;;### (autoloads nil "solar" "calendar/solar.el" (0 0 0 0))
 ;;; Generated autoloads from calendar/solar.el
 
 (autoload 'sunrise-sunset "solar" "\
@@ -25417,8 +25090,7 @@ This function is suitable for execution in an init file.
 
 ;;;***
 \f
-;;;### (autoloads nil "solitaire" "play/solitaire.el" (22150 28228
-;;;;;;  682072 702000))
+;;;### (autoloads nil "solitaire" "play/solitaire.el" (0 0 0 0))
 ;;; Generated autoloads from play/solitaire.el
 
 (autoload 'solitaire "solitaire" "\
@@ -25493,7 +25165,7 @@ Pick your favorite shortcuts:
 
 ;;;***
 \f
-;;;### (autoloads nil "sort" "sort.el" (22150 28229 18072 702000))
+;;;### (autoloads nil "sort" "sort.el" (0 0 0 0))
 ;;; Generated autoloads from sort.el
 (put 'sort-fold-case 'safe-local-variable 'booleanp)
 
@@ -25668,7 +25340,7 @@ is non-nil, it also prints a message describing the number of deletions.
 
 ;;;***
 \f
-;;;### (autoloads nil "spam" "gnus/spam.el" (22150 28228 22072 702000))
+;;;### (autoloads nil "spam" "gnus/spam.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/spam.el
 
 (autoload 'spam-initialize "spam" "\
@@ -25682,8 +25354,8 @@ installed through `spam-necessary-extra-headers'.
 
 ;;;***
 \f
-;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (22150
-;;;;;;  28228 22072 702000))
+;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from gnus/spam-report.el
 
 (autoload 'spam-report-process-queue "spam-report" "\
@@ -25725,8 +25397,7 @@ Spam reports will be queued with the method used when
 
 ;;;***
 \f
-;;;### (autoloads nil "speedbar" "speedbar.el" (22189 64323 312321
-;;;;;;  19000))
+;;;### (autoloads nil "speedbar" "speedbar.el" (0 0 0 0))
 ;;; Generated autoloads from speedbar.el
 
 (defalias 'speedbar 'speedbar-frame-mode)
@@ -25750,8 +25421,7 @@ selected.  If the speedbar frame is active, then select the attached frame.
 
 ;;;***
 \f
-;;;### (autoloads nil "spook" "play/spook.el" (22150 28228 682072
-;;;;;;  702000))
+;;;### (autoloads nil "spook" "play/spook.el" (0 0 0 0))
 ;;; Generated autoloads from play/spook.el
 
 (autoload 'spook "spook" "\
@@ -25766,8 +25436,7 @@ Return a vector containing the lines from `spook-phrases-file'.
 
 ;;;***
 \f
-;;;### (autoloads nil "sql" "progmodes/sql.el" (22203 10834 812791
-;;;;;;  123000))
+;;;### (autoloads nil "sql" "progmodes/sql.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/sql.el
 (push (purecopy '(sql 3 5)) package--builtin-versions)
 
@@ -26233,15 +25902,14 @@ Run vsql as an inferior process.
 
 ;;;***
 \f
-;;;### (autoloads nil "srecode" "cedet/srecode.el" (22150 28227 270072
-;;;;;;  702000))
+;;;### (autoloads nil "srecode" "cedet/srecode.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode.el
 (push (purecopy '(srecode 1 2)) package--builtin-versions)
 
 ;;;***
 \f
 ;;;### (autoloads nil "srecode/srt-mode" "cedet/srecode/srt-mode.el"
-;;;;;;  (22150 28227 274072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode/srt-mode.el
 
 (autoload 'srecode-template-mode "srecode/srt-mode" "\
@@ -26253,9 +25921,8 @@ Major-mode for writing SRecode macros.
 
 ;;;***
 \f
-;;;### (autoloads nil "starttls" "gnus/starttls.el" (22150 28228
-;;;;;;  22072 702000))
-;;; Generated autoloads from gnus/starttls.el
+;;;### (autoloads nil "starttls" "net/starttls.el" (0 0 0 0))
+;;; Generated autoloads from net/starttls.el
 
 (autoload 'starttls-open-stream "starttls" "\
 Open a TLS connection for a port to a host.
@@ -26277,7 +25944,7 @@ GnuTLS requires a port number.
 
 ;;;***
 \f
-;;;### (autoloads nil "strokes" "strokes.el" (22182 4679 511463 499000))
+;;;### (autoloads nil "strokes" "strokes.el" (0 0 0 0))
 ;;; Generated autoloads from strokes.el
 
 (autoload 'strokes-global-set-stroke "strokes" "\
@@ -26348,7 +26015,8 @@ If STROKES-MAP is not given, `strokes-global-map' will be used instead.
 
 (defvar strokes-mode nil "\
 Non-nil if Strokes mode is enabled.
-See the command `strokes-mode' for a description of this minor mode.
+See the `strokes-mode' command
+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 `strokes-mode'.")
@@ -26390,8 +26058,7 @@ Read a complex stroke and insert its glyph into the current buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "studly" "play/studly.el" (22279 37684 392180
-;;;;;;  436000))
+;;;### (autoloads nil "studly" "play/studly.el" (0 0 0 0))
 ;;; Generated autoloads from play/studly.el
 
 (autoload 'studlify-region "studly" "\
@@ -26411,8 +26078,7 @@ Studlify-case the current buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "subword" "progmodes/subword.el" (22150 28228
-;;;;;;  930072 702000))
+;;;### (autoloads nil "subword" "progmodes/subword.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/subword.el
 
 (define-obsolete-function-alias 'capitalized-words-mode 'subword-mode "25.1")
@@ -26447,7 +26113,8 @@ treat nomenclature boundaries as word boundaries.
 
 (defvar global-subword-mode nil "\
 Non-nil if Global Subword mode is enabled.
-See the command `global-subword-mode' for a description of this minor mode.
+See the `global-subword-mode' command
+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 `global-subword-mode'.")
@@ -26483,7 +26150,8 @@ as parts of words: e.g., in `superword-mode',
 
 (defvar global-superword-mode nil "\
 Non-nil if Global Superword mode is enabled.
-See the command `global-superword-mode' for a description of this minor mode.
+See the `global-superword-mode' command
+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 `global-superword-mode'.")
@@ -26504,8 +26172,7 @@ See `superword-mode' for more information on Superword mode.
 
 ;;;***
 \f
-;;;### (autoloads nil "supercite" "mail/supercite.el" (22150 28228
-;;;;;;  254072 702000))
+;;;### (autoloads nil "supercite" "mail/supercite.el" (0 0 0 0))
 ;;; Generated autoloads from mail/supercite.el
 
 (autoload 'sc-cite-original "supercite" "\
@@ -26537,15 +26204,15 @@ and `sc-post-hook' is run after the guts of this function.
 
 ;;;***
 \f
-;;;### (autoloads nil "t-mouse" "t-mouse.el" (22204 31687 849113
-;;;;;;  480000))
+;;;### (autoloads nil "t-mouse" "t-mouse.el" (0 0 0 0))
 ;;; Generated autoloads from t-mouse.el
 
 (define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1")
 
 (defvar gpm-mouse-mode t "\
 Non-nil if Gpm-Mouse mode is enabled.
-See the command `gpm-mouse-mode' for a description of this minor mode.
+See the `gpm-mouse-mode' command
+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 `gpm-mouse-mode'.")
@@ -26570,7 +26237,7 @@ GPM.  This is due to limitations in GPM and the Linux kernel.
 
 ;;;***
 \f
-;;;### (autoloads nil "tabify" "tabify.el" (22150 28229 26072 702000))
+;;;### (autoloads nil "tabify" "tabify.el" (0 0 0 0))
 ;;; Generated autoloads from tabify.el
 
 (autoload 'untabify "tabify" "\
@@ -26599,8 +26266,7 @@ The variable `tab-width' controls the spacing of tab stops.
 
 ;;;***
 \f
-;;;### (autoloads nil "table" "textmodes/table.el" (22186 51800 574004
-;;;;;;  628000))
+;;;### (autoloads nil "table" "textmodes/table.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/table.el
 
 (autoload 'table-insert "table" "\
@@ -27171,7 +26837,7 @@ converts a table into plain text without frames.  It is a companion to
 
 ;;;***
 \f
-;;;### (autoloads nil "talk" "talk.el" (22150 28229 26072 702000))
+;;;### (autoloads nil "talk" "talk.el" (0 0 0 0))
 ;;; Generated autoloads from talk.el
 
 (autoload 'talk-connect "talk" "\
@@ -27186,8 +26852,7 @@ Connect to the Emacs talk group from the current X display or tty frame.
 
 ;;;***
 \f
-;;;### (autoloads nil "tar-mode" "tar-mode.el" (22150 28229 26072
-;;;;;;  702000))
+;;;### (autoloads nil "tar-mode" "tar-mode.el" (0 0 0 0))
 ;;; Generated autoloads from tar-mode.el
 
 (autoload 'tar-mode "tar-mode" "\
@@ -27210,8 +26875,7 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'.
 
 ;;;***
 \f
-;;;### (autoloads nil "tcl" "progmodes/tcl.el" (22150 28228 934072
-;;;;;;  702000))
+;;;### (autoloads nil "tcl" "progmodes/tcl.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/tcl.el
 
 (autoload 'tcl-mode "tcl" "\
@@ -27259,8 +26923,7 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'.
 
 ;;;***
 \f
-;;;### (autoloads nil "telnet" "net/telnet.el" (22150 28228 406072
-;;;;;;  702000))
+;;;### (autoloads nil "telnet" "net/telnet.el" (0 0 0 0))
 ;;; Generated autoloads from net/telnet.el
 
 (autoload 'telnet "telnet" "\
@@ -27285,7 +26948,7 @@ Normally input is edited in Emacs and sent a line at a time.
 
 ;;;***
 \f
-;;;### (autoloads nil "term" "term.el" (22305 18655 603719 883000))
+;;;### (autoloads nil "term" "term.el" (0 0 0 0))
 ;;; Generated autoloads from term.el
 
 (autoload 'make-term "term" "\
@@ -27327,8 +26990,8 @@ use in that buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (22150
-;;;;;;  28227 458072 702000))
+;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/testcover.el
 
 (autoload 'testcover-this-defun "testcover" "\
@@ -27338,8 +27001,7 @@ Start coverage on function under point.
 
 ;;;***
 \f
-;;;### (autoloads nil "tetris" "play/tetris.el" (22189 64323 280321
-;;;;;;  19000))
+;;;### (autoloads nil "tetris" "play/tetris.el" (0 0 0 0))
 ;;; Generated autoloads from play/tetris.el
 (push (purecopy '(tetris 2 1)) package--builtin-versions)
 
@@ -27364,8 +27026,7 @@ tetris-mode keybindings:
 
 ;;;***
 \f
-;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (22197 58438
-;;;;;;  727460 447000))
+;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/tex-mode.el
 
 (defvar tex-shell-file-name nil "\
@@ -27666,8 +27327,7 @@ Major mode to edit DocTeX files.
 
 ;;;***
 \f
-;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (22197 58438
-;;;;;;  759460 447000))
+;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/texinfmt.el
 
 (autoload 'texinfo-format-buffer "texinfmt" "\
@@ -27706,8 +27366,7 @@ if large.  You can use `Info-split' to do this manually.
 
 ;;;***
 \f
-;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (22197 58438
-;;;;;;  759460 447000))
+;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/texinfo.el
 
 (defvar texinfo-open-quote (purecopy "``") "\
@@ -27791,8 +27450,8 @@ value of `texinfo-mode-hook'.
 
 ;;;***
 \f
-;;;### (autoloads nil "thai-util" "language/thai-util.el" (22150
-;;;;;;  28228 198072 702000))
+;;;### (autoloads nil "thai-util" "language/thai-util.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from language/thai-util.el
 
 (autoload 'thai-compose-region "thai-util" "\
@@ -27819,8 +27478,7 @@ Compose Thai characters in the current buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "thingatpt" "thingatpt.el" (22225 37858 570976
-;;;;;;  240000))
+;;;### (autoloads nil "thingatpt" "thingatpt.el" (0 0 0 0))
 ;;; Generated autoloads from thingatpt.el
 
 (autoload 'forward-thing "thingatpt" "\
@@ -27884,7 +27542,7 @@ Return the Lisp list at point, or nil if none is found.
 
 ;;;***
 \f
-;;;### (autoloads nil "thumbs" "thumbs.el" (22150 28229 198072 702000))
+;;;### (autoloads nil "thumbs" "thumbs.el" (0 0 0 0))
 ;;; Generated autoloads from thumbs.el
 
 (autoload 'thumbs-find-thumb "thumbs" "\
@@ -27918,15 +27576,14 @@ In dired, call the setroot program on the image at point.
 
 ;;;***
 \f
-;;;### (autoloads nil "thunk" "emacs-lisp/thunk.el" (22150 28227
-;;;;;;  458072 702000))
+;;;### (autoloads nil "thunk" "emacs-lisp/thunk.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/thunk.el
 (push (purecopy '(thunk 1 0)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (22150
-;;;;;;  28228 198072 702000))
+;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from language/tibet-util.el
 
 (autoload 'tibetan-char-p "tibet-util" "\
@@ -27999,8 +27656,7 @@ See also docstring of the function tibetan-compose-region.
 
 ;;;***
 \f
-;;;### (autoloads nil "tildify" "textmodes/tildify.el" (22165 43181
-;;;;;;  139854 955000))
+;;;### (autoloads nil "tildify" "textmodes/tildify.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/tildify.el
 (push (purecopy '(tildify 4 6 1)) package--builtin-versions)
 
@@ -28066,7 +27722,7 @@ variable will be set to the representation.
 
 ;;;***
 \f
-;;;### (autoloads nil "time" "time.el" (22150 28229 202072 702000))
+;;;### (autoloads nil "time" "time.el" (0 0 0 0))
 ;;; Generated autoloads from time.el
 
 (defvar display-time-day-and-date nil "\
@@ -28086,7 +27742,8 @@ This runs the normal hook `display-time-hook' after each update.
 
 (defvar display-time-mode nil "\
 Non-nil if Display-Time mode is enabled.
-See the command `display-time-mode' for a description of this minor mode.
+See the `display-time-mode' command
+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 `display-time-mode'.")
@@ -28128,8 +27785,8 @@ Return a string giving the duration of the Emacs initialization.
 
 ;;;***
 \f
-;;;### (autoloads nil "time-date" "calendar/time-date.el" (22150
-;;;;;;  28227 82072 702000))
+;;;### (autoloads nil "time-date" "calendar/time-date.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from calendar/time-date.el
 
 (autoload 'date-to-time "time-date" "\
@@ -28232,8 +27889,7 @@ Convert the time interval in seconds to a short string.
 
 ;;;***
 \f
-;;;### (autoloads nil "time-stamp" "time-stamp.el" (22212 25823 511089
-;;;;;;  159000))
+;;;### (autoloads nil "time-stamp" "time-stamp.el" (0 0 0 0))
 ;;; Generated autoloads from time-stamp.el
 (put 'time-stamp-format 'safe-local-variable 'stringp)
 (put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p)
@@ -28273,14 +27929,15 @@ With ARG, turn time stamping on if and only if arg is positive.
 
 ;;;***
 \f
-;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (22150
-;;;;;;  28227 82072 702000))
+;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from calendar/timeclock.el
 (push (purecopy '(timeclock 2 6 1)) package--builtin-versions)
 
 (defvar timeclock-mode-line-display nil "\
 Non-nil if Timeclock-Mode-Line-Display mode is enabled.
-See the command `timeclock-mode-line-display' for a description of this minor mode.
+See the `timeclock-mode-line-display' command
+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 `timeclock-mode-line-display'.")
@@ -28381,10 +28038,22 @@ relative only to the time worked today, and not to past time.
 
 \(fn &optional SHOW-SECONDS TODAY-ONLY)" t nil)
 
+;;;***
+\f
+;;;### (autoloads nil "timer-list" "emacs-lisp/timer-list.el" (0
+;;;;;;  0 0 0))
+;;; Generated autoloads from emacs-lisp/timer-list.el
+
+(autoload 'timer-list "timer-list" "\
+List all timers in a buffer.
+
+\(fn &optional IGNORE-AUTO NONCONFIRM)" t nil)
+ (put 'timer-list 'disabled "Beware: manually canceling timers can ruin your Emacs session.")
+
 ;;;***
 \f
 ;;;### (autoloads nil "titdic-cnv" "international/titdic-cnv.el"
-;;;;;;  (22150 28228 134072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from international/titdic-cnv.el
 
 (autoload 'titdic-convert "titdic-cnv" "\
@@ -28406,7 +28075,7 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\".
 
 ;;;***
 \f
-;;;### (autoloads nil "tmm" "tmm.el" (22295 25908 202516 451000))
+;;;### (autoloads nil "tmm" "tmm.el" (0 0 0 0))
 ;;; Generated autoloads from tmm.el
  (define-key global-map "\M-`" 'tmm-menubar)
  (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse)
@@ -28448,19 +28117,18 @@ Its value should be an event that has a binding in MENU.
 
 ;;;***
 \f
-;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (22304
-;;;;;;  40885 29243 884000))
+;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from calendar/todo-mode.el
 
 (autoload 'todo-show "todo-mode" "\
 Visit a todo file and display one of its categories.
 
-When invoked in Todo mode, Todo Archive mode or Todo Filtered
-Items mode, or when invoked anywhere else with a prefix argument,
-prompt for which todo file to visit.  When invoked outside of a
-Todo mode buffer without a prefix argument, visit
-`todo-default-todo-file'.  Subsequent invocations from outside of
-Todo mode revisit this file or, with option
+When invoked in Todo mode, prompt for which todo file to visit.
+When invoked outside of Todo mode with non-nil prefix argument
+SOLICIT-FILE prompt for which todo file to visit; otherwise visit
+`todo-default-todo-file'.  Subsequent invocations from outside
+of Todo mode revisit this file or, with option
 `todo-show-current-file' non-nil (the default), whichever todo
 file was last visited.
 
@@ -28489,6 +28157,9 @@ by default.  The done items are hidden, but typing
 items.  With non-nil user option `todo-show-with-done' both todo
 and done items are always shown on visiting a category.
 
+Invoking this command in Todo Archive mode visits the
+corresponding todo file, displaying the corresponding category.
+
 \(fn &optional SOLICIT-FILE INTERACTIVE)" t nil)
 
 (autoload 'todo-mode "todo-mode" "\
@@ -28514,8 +28185,7 @@ Mode for displaying and reprioritizing top priority Todo.
 
 ;;;***
 \f
-;;;### (autoloads nil "tool-bar" "tool-bar.el" (22150 28229 202072
-;;;;;;  702000))
+;;;### (autoloads nil "tool-bar" "tool-bar.el" (0 0 0 0))
 ;;; Generated autoloads from tool-bar.el
 
 (autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\
@@ -28585,8 +28255,7 @@ holds a keymap.
 
 ;;;***
 \f
-;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (22150 28227 458072
-;;;;;;  702000))
+;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/tq.el
 
 (autoload 'tq-create "tq" "\
@@ -28599,8 +28268,7 @@ to a tcp server on another machine.
 
 ;;;***
 \f
-;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (22150 28227
-;;;;;;  458072 702000))
+;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/trace.el
 
 (defvar trace-buffer "*trace-output*" "\
@@ -28645,8 +28313,7 @@ the output buffer or changing the window configuration.
 
 ;;;***
 \f
-;;;### (autoloads nil "tramp" "net/tramp.el" (22272 64438 268671
-;;;;;;  103000))
+;;;### (autoloads nil "tramp" "net/tramp.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp.el
 
 (defvar tramp-mode t "\
@@ -28655,26 +28322,24 @@ If it is set to nil, all remote file names are used literally.")
 
 (custom-autoload 'tramp-mode "tramp" t)
 
-(defvar tramp-syntax (if (featurep 'xemacs) 'sep 'ftp) "\
+(defvar tramp-syntax '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.")
+  `ftp' -- Ange-FTP like syntax
+  `sep' -- Syntax as defined for XEmacs originally.")
 
 (custom-autoload 'tramp-syntax "tramp" t)
 
 (defconst tramp-file-name-regexp-unified (if (memq system-type '(cygwin windows-nt)) "\\`/\\(\\[.*\\]\\|[^/|:]\\{2,\\}[^/|]*\\):" "\\`/[^/|:][^/|]*:") "\
 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' for more explanations.
+See `tramp-file-name-structure' for more explanations.
 
 On W32 systems, the volume letter must be ignored.")
 
 (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' 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) (t (error "Wrong `tramp-syntax' defined"))) "\
@@ -28695,14 +28360,12 @@ Also see `tramp-file-name-structure'.")
 
 (defconst tramp-completion-file-name-regexp-unified (if (memq system-type '(cygwin windows-nt)) "\\`/[^/]\\{2,\\}\\'" "\\`/[^/]*\\'") "\
 Value for `tramp-completion-file-name-regexp' for unified remoting.
-GNU Emacs uses a unified filename syntax for Tramp and Ange-FTP.
 See `tramp-file-name-structure' for more explanations.
 
 On W32 systems, the volume letter must be ignored.")
 
 (defconst tramp-completion-file-name-regexp-separate "\\`/\\([[][^]]*\\)?\\'" "\
 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' 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) (t (error "Wrong `tramp-syntax' defined"))) "\
@@ -28729,10 +28392,10 @@ pass to the OPERATION." (let* ((inhibit-file-name-handlers (\` (tramp-completion
 
 (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 ((directory-sep-char 47) (fn (assoc operation tramp-completion-file-name-handler-alist))) (if (and fn tramp-mode (or (eq tramp-syntax (quote sep)) (featurep (quote tramp)) (and (boundp (quote partial-completion-mode)) (symbol-value (quote partial-completion-mode))) (featurep (quote ido)) (featurep (quote icicles)))) (save-match-data (apply (cdr fn) args)) (tramp-completion-run-real-handler operation args))))
+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 (and fn tramp-mode (or (eq tramp-syntax (quote sep)) (featurep (quote tramp)) (and (boundp (quote partial-completion-mode)) (symbol-value (quote partial-completion-mode))) (featurep (quote ido)) (featurep (quote icicles)))) (save-match-data (apply (cdr fn) args)) (tramp-completion-run-real-handler operation args))))
 
 (defun tramp-autoload-file-name-handler (operation &rest args) "\
-Load Tramp file name handler, and perform OPERATION." (let ((default-directory "/")) (load "tramp" nil t)) (apply operation args))
+Load Tramp file name handler, and perform OPERATION." (let ((default-directory temporary-file-directory)) (load "tramp" nil t)) (apply operation args))
 
 (defun tramp-register-autoload-file-name-handlers nil "\
 Add Tramp file name handlers to `file-name-handler-alist' during autoload." (add-to-list (quote file-name-handler-alist) (cons tramp-file-name-regexp (quote tramp-autoload-file-name-handler))) (put (quote tramp-autoload-file-name-handler) (quote safe-magic) t) (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))
@@ -28761,8 +28424,7 @@ Discard Tramp from loading remote files.
 
 ;;;***
 \f
-;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (22150 28228
-;;;;;;  410072 702000))
+;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (0 0 0 0))
 ;;; Generated autoloads from net/tramp-ftp.el
 
 (autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\
@@ -28772,15 +28434,13 @@ Discard Tramp from loading remote files.
 
 ;;;***
 \f
-;;;### (autoloads nil "trampver" "net/trampver.el" (22150 28228 442072
-;;;;;;  702000))
+;;;### (autoloads nil "trampver" "net/trampver.el" (0 0 0 0))
 ;;; Generated autoloads from net/trampver.el
-(push (purecopy '(tramp 2 2 13 25 1)) package--builtin-versions)
+(push (purecopy '(tramp 2 3 0 -1)) package--builtin-versions)
 
 ;;;***
 \f
-;;;### (autoloads nil "tutorial" "tutorial.el" (22150 28229 206072
-;;;;;;  702000))
+;;;### (autoloads nil "tutorial" "tutorial.el" (0 0 0 0))
 ;;; Generated autoloads from tutorial.el
 
 (autoload 'help-with-tutorial "tutorial" "\
@@ -28804,8 +28464,7 @@ resumed later.
 
 ;;;***
 \f
-;;;### (autoloads nil "tv-util" "language/tv-util.el" (22086 11929
-;;;;;;  906062 731000))
+;;;### (autoloads nil "tv-util" "language/tv-util.el" (0 0 0 0))
 ;;; Generated autoloads from language/tv-util.el
 
 (autoload 'tai-viet-composition-function "tv-util" "\
@@ -28815,8 +28474,8 @@ resumed later.
 
 ;;;***
 \f
-;;;### (autoloads nil "two-column" "textmodes/two-column.el" (22150
-;;;;;;  28229 198072 702000))
+;;;### (autoloads nil "two-column" "textmodes/two-column.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from textmodes/two-column.el
  (autoload '2C-command "two-column" () t 'keymap)
  (global-set-key "\C-x6" '2C-command)
@@ -28863,13 +28522,13 @@ First column's text    sSs  Second column's text
 
 ;;;***
 \f
-;;;### (autoloads nil "type-break" "type-break.el" (22189 64323 316321
-;;;;;;  19000))
+;;;### (autoloads nil "type-break" "type-break.el" (0 0 0 0))
 ;;; Generated autoloads from type-break.el
 
 (defvar type-break-mode nil "\
 Non-nil if Type-Break mode is enabled.
-See the command `type-break-mode' for a description of this minor mode.
+See the `type-break-mode' command
+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 `type-break-mode'.")
@@ -28996,7 +28655,7 @@ FRAC should be the inverse of the fractional value; for example, a value of
 
 ;;;***
 \f
-;;;### (autoloads nil "uce" "mail/uce.el" (22150 28228 258072 702000))
+;;;### (autoloads nil "uce" "mail/uce.el" (0 0 0 0))
 ;;; Generated autoloads from mail/uce.el
 
 (autoload 'uce-reply-to-uce "uce" "\
@@ -29010,7 +28669,7 @@ You might need to set `uce-mail-reader' before using this.
 ;;;***
 \f
 ;;;### (autoloads nil "ucs-normalize" "international/ucs-normalize.el"
-;;;;;;  (22150 28228 134072 702000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from international/ucs-normalize.el
 
 (autoload 'ucs-normalize-NFD-region "ucs-normalize" "\
@@ -29075,8 +28734,8 @@ Normalize the string STR by the Unicode NFC and Mac OS's HFS Plus.
 
 ;;;***
 \f
-;;;### (autoloads nil "underline" "textmodes/underline.el" (22150
-;;;;;;  28229 198072 702000))
+;;;### (autoloads nil "underline" "textmodes/underline.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from textmodes/underline.el
 
 (autoload 'underline-region "underline" "\
@@ -29096,8 +28755,7 @@ which specify the range to operate on.
 
 ;;;***
 \f
-;;;### (autoloads nil "unrmail" "mail/unrmail.el" (22150 28228 258072
-;;;;;;  702000))
+;;;### (autoloads nil "unrmail" "mail/unrmail.el" (0 0 0 0))
 ;;; Generated autoloads from mail/unrmail.el
 
 (autoload 'batch-unrmail "unrmail" "\
@@ -29117,8 +28775,7 @@ The variable `unrmail-mbox-format' controls which mbox format to use.
 
 ;;;***
 \f
-;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (22150 28227
-;;;;;;  458072 702000))
+;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/unsafep.el
 
 (autoload 'unsafep "unsafep" "\
@@ -29130,7 +28787,7 @@ UNSAFEP-VARS is a list of symbols with local bindings.
 
 ;;;***
 \f
-;;;### (autoloads nil "url" "url/url.el" (22150 28229 234072 702000))
+;;;### (autoloads nil "url" "url/url.el" (0 0 0 0))
 ;;; Generated autoloads from url/url.el
 
 (autoload 'url-retrieve "url" "\
@@ -29173,12 +28830,16 @@ 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
 no further processing).  URL is either a string or a parsed URL.
 
-\(fn URL &optional SILENT INHIBIT-COOKIES)" nil nil)
+If SILENT is non-nil, don't do any messaging while retrieving.
+If INHIBIT-COOKIES is non-nil, refuse to store cookies.  If
+TIMEOUT is passed, it should be a number that says (in seconds)
+how long to wait for a response before giving up.
+
+\(fn URL &optional SILENT INHIBIT-COOKIES TIMEOUT)" nil nil)
 
 ;;;***
 \f
-;;;### (autoloads nil "url-auth" "url/url-auth.el" (22150 28229 210072
-;;;;;;  702000))
+;;;### (autoloads nil "url-auth" "url/url-auth.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-auth.el
 
 (autoload 'url-get-authentication "url-auth" "\
@@ -29219,8 +28880,7 @@ RATING   a rating between 1 and 10 of the strength of the authentication.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-cache" "url/url-cache.el" (22150 28229
-;;;;;;  210072 702000))
+;;;### (autoloads nil "url-cache" "url/url-cache.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-cache.el
 
 (autoload 'url-store-in-cache "url-cache" "\
@@ -29241,8 +28901,7 @@ Extract FNAM from the local disk cache.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-cid" "url/url-cid.el" (22150 28229 210072
-;;;;;;  702000))
+;;;### (autoloads nil "url-cid" "url/url-cid.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-cid.el
 
 (autoload 'url-cid "url-cid" "\
@@ -29252,8 +28911,7 @@ Extract FNAM from the local disk cache.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-dav" "url/url-dav.el" (22150 28229 214072
-;;;;;;  702000))
+;;;### (autoloads nil "url-dav" "url/url-dav.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-dav.el
 
 (autoload 'url-dav-supported-p "url-dav" "\
@@ -29287,8 +28945,7 @@ added to this list, so most requests can just pass in nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-file" "url/url-file.el" (22150 28229 214072
-;;;;;;  702000))
+;;;### (autoloads nil "url-file" "url/url-file.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-file.el
 
 (autoload 'url-file "url-file" "\
@@ -29298,8 +28955,7 @@ Handle file: and ftp: URLs.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-gw" "url/url-gw.el" (22150 28229 218072
-;;;;;;  702000))
+;;;### (autoloads nil "url-gw" "url/url-gw.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-gw.el
 
 (autoload 'url-gateway-nslookup-host "url-gw" "\
@@ -29320,13 +28976,14 @@ overriding the value of `url-gateway-method'.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (22150
-;;;;;;  28229 218072 702000))
+;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from url/url-handlers.el
 
 (defvar url-handler-mode nil "\
 Non-nil if Url-Handler mode is enabled.
-See the command `url-handler-mode' for a description of this minor mode.
+See the `url-handler-mode' command
+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 `url-handler-mode'.")
@@ -29382,8 +29039,7 @@ if it had been inserted from a file named URL.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-http" "url/url-http.el" (22229 34898 908051
-;;;;;;  395000))
+;;;### (autoloads nil "url-http" "url/url-http.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-http.el
  (autoload 'url-default-expander "url-expand")
 
@@ -29395,8 +29051,7 @@ if it had been inserted from a file named URL.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-irc" "url/url-irc.el" (22150 28229 222072
-;;;;;;  702000))
+;;;### (autoloads nil "url-irc" "url/url-irc.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-irc.el
 
 (autoload 'url-irc "url-irc" "\
@@ -29406,8 +29061,7 @@ if it had been inserted from a file named URL.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (22150 28229 222072
-;;;;;;  702000))
+;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-ldap.el
 
 (autoload 'url-ldap "url-ldap" "\
@@ -29420,8 +29074,7 @@ URL can be a URL string, or a URL vector of the type returned by
 
 ;;;***
 \f
-;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (22150 28229
-;;;;;;  222072 702000))
+;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-mailto.el
 
 (autoload 'url-mail "url-mailto" "\
@@ -29436,8 +29089,7 @@ Handle the mailto: URL syntax.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-misc" "url/url-misc.el" (22150 28229 222072
-;;;;;;  702000))
+;;;### (autoloads nil "url-misc" "url/url-misc.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-misc.el
 
 (autoload 'url-man "url-misc" "\
@@ -29468,8 +29120,7 @@ Fetch a data URL (RFC 2397).
 
 ;;;***
 \f
-;;;### (autoloads nil "url-news" "url/url-news.el" (22150 28229 222072
-;;;;;;  702000))
+;;;### (autoloads nil "url-news" "url/url-news.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-news.el
 
 (autoload 'url-news "url-news" "\
@@ -29484,8 +29135,7 @@ Fetch a data URL (RFC 2397).
 
 ;;;***
 \f
-;;;### (autoloads nil "url-ns" "url/url-ns.el" (22150 28229 222072
-;;;;;;  702000))
+;;;### (autoloads nil "url-ns" "url/url-ns.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-ns.el
 
 (autoload 'isPlainHostName "url-ns" "\
@@ -29525,8 +29175,7 @@ Fetch a data URL (RFC 2397).
 
 ;;;***
 \f
-;;;### (autoloads nil "url-parse" "url/url-parse.el" (22150 28229
-;;;;;;  222072 702000))
+;;;### (autoloads nil "url-parse" "url/url-parse.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-parse.el
 
 (autoload 'url-recreate-url "url-parse" "\
@@ -29577,8 +29226,7 @@ parses to
 
 ;;;***
 \f
-;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (22150 28229
-;;;;;;  222072 702000))
+;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-privacy.el
 
 (autoload 'url-setup-privacy-info "url-privacy" "\
@@ -29588,8 +29236,7 @@ Setup variables that expose info about you and your system.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-queue" "url/url-queue.el" (22150 28229
-;;;;;;  226072 702000))
+;;;### (autoloads nil "url-queue" "url/url-queue.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-queue.el
 
 (autoload 'url-queue-retrieve "url-queue" "\
@@ -29603,8 +29250,7 @@ The variable `url-queue-timeout' sets a timeout.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (22165 43181
-;;;;;;  143854 955000))
+;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-tramp.el
 
 (defvar url-tramp-protocols '("ftp" "ssh" "scp" "rsync" "telnet") "\
@@ -29622,8 +29268,7 @@ would have been passed to OPERATION.
 
 ;;;***
 \f
-;;;### (autoloads nil "url-util" "url/url-util.el" (22150 28229 234072
-;;;;;;  702000))
+;;;### (autoloads nil "url-util" "url/url-util.el" (0 0 0 0))
 ;;; Generated autoloads from url/url-util.el
 
 (defvar url-debug nil "\
@@ -29791,8 +29436,7 @@ This uses `url-current-object', set locally to the buffer.
 
 ;;;***
 \f
-;;;### (autoloads nil "userlock" "userlock.el" (22150 28229 234072
-;;;;;;  702000))
+;;;### (autoloads nil "userlock" "userlock.el" (0 0 0 0))
 ;;; Generated autoloads from userlock.el
 
 (autoload 'ask-user-about-lock "userlock" "\
@@ -29820,8 +29464,7 @@ The buffer in question is current when this function is called.
 
 ;;;***
 \f
-;;;### (autoloads nil "utf-7" "international/utf-7.el" (22150 28228
-;;;;;;  134072 702000))
+;;;### (autoloads nil "utf-7" "international/utf-7.el" (0 0 0 0))
 ;;; Generated autoloads from international/utf-7.el
 
 (autoload 'utf-7-post-read-conversion "utf-7" "\
@@ -29846,8 +29489,8 @@ The buffer in question is current when this function is called.
 
 ;;;***
 \f
-;;;### (autoloads nil "utf7" "gnus/utf7.el" (22150 28228 26072 702000))
-;;; Generated autoloads from gnus/utf7.el
+;;;### (autoloads nil "utf7" "international/utf7.el" (0 0 0 0))
+;;; Generated autoloads from international/utf7.el
 
 (autoload 'utf7-encode "utf7" "\
 Encode UTF-7 STRING.  Use IMAP modification if FOR-IMAP is non-nil.
@@ -29856,8 +29499,7 @@ Encode UTF-7 STRING.  Use IMAP modification if FOR-IMAP is non-nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "uudecode" "mail/uudecode.el" (22150 28228
-;;;;;;  258072 702000))
+;;;### (autoloads nil "uudecode" "mail/uudecode.el" (0 0 0 0))
 ;;; Generated autoloads from mail/uudecode.el
 
 (autoload 'uudecode-decode-region-external "uudecode" "\
@@ -29881,7 +29523,7 @@ If FILE-NAME is non-nil, save the result to FILE-NAME.
 
 ;;;***
 \f
-;;;### (autoloads nil "vc" "vc/vc.el" (22150 28229 306072 702000))
+;;;### (autoloads nil "vc" "vc/vc.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc.el
 
 (defvar vc-checkout-hook nil "\
@@ -30197,8 +29839,7 @@ Return the branch part of a revision number REV.
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (22271 43574
-;;;;;;  247751 139000))
+;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-annotate.el
 
 (autoload 'vc-annotate "vc-annotate" "\
@@ -30237,8 +29878,7 @@ should be applied to the background or to the foreground.
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (22150 28229 290072
-;;;;;;  702000))
+;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-bzr.el
 
 (defconst vc-bzr-admin-dirname ".bzr" "\
@@ -30254,8 +29894,7 @@ Name of the format file in a .bzr directory.")
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (22150 28229 290072
-;;;;;;  702000))
+;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-cvs.el
 (defun vc-cvs-registered (f)
   "Return non-nil if file F is registered with CVS."
@@ -30266,8 +29905,7 @@ Name of the format file in a .bzr directory.")
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (22150 28229 294072
-;;;;;;  702000))
+;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-dir.el
 
 (autoload 'vc-dir "vc-dir" "\
@@ -30291,8 +29929,8 @@ These are the commands available for use in the file status buffer:
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (22150
-;;;;;;  28229 294072 702000))
+;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from vc/vc-dispatcher.el
 
 (autoload 'vc-do-command "vc-dispatcher" "\
@@ -30315,8 +29953,7 @@ case, and the process object in the asynchronous case.
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-git" "vc/vc-git.el" (22305 18655 607719
-;;;;;;  883000))
+;;;### (autoloads nil "vc-git" "vc/vc-git.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-git.el
  (defun vc-git-registered (file)
   "Return non-nil if FILE is registered with git."
@@ -30327,7 +29964,7 @@ case, and the process object in the asynchronous case.
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (22188 43494 205543 203000))
+;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-hg.el
  (defun vc-hg-registered (file)
   "Return non-nil if FILE is registered with hg."
@@ -30338,8 +29975,7 @@ case, and the process object in the asynchronous case.
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (22188 43494 205543
-;;;;;;  203000))
+;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-mtn.el
 
 (defconst vc-mtn-admin-dir "_MTN" "\
@@ -30355,8 +29991,7 @@ Name of the monotone directory's format file.")
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (22150 28229 302072
-;;;;;;  702000))
+;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-rcs.el
 
 (defvar vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "\
@@ -30369,8 +30004,7 @@ For a description of possible values, see `vc-check-master-templates'.")
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (22150 28229 302072
-;;;;;;  702000))
+;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-sccs.el
 
 (defvar vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "\
@@ -30388,8 +30022,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir)
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-src" "vc/vc-src.el" (22150 28229 302072
-;;;;;;  702000))
+;;;### (autoloads nil "vc-src" "vc/vc-src.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-src.el
 
 (defvar vc-src-master-templates (purecopy '("%s.src/%s,v")) "\
@@ -30402,8 +30035,7 @@ For a description of possible values, see `vc-check-master-templates'.")
 
 ;;;***
 \f
-;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (22150 28229 302072
-;;;;;;  702000))
+;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (0 0 0 0))
 ;;; Generated autoloads from vc/vc-svn.el
  (defun vc-svn-registered (f)
   (let ((admin-dir (cond ((and (eq system-type 'windows-nt)
@@ -30416,8 +30048,8 @@ For a description of possible values, see `vc-check-master-templates'.")
 
 ;;;***
 \f
-;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (22197
-;;;;;;  58438 563460 447000))
+;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/vera-mode.el
 (push (purecopy '(vera-mode 2 28)) package--builtin-versions)
  (add-to-list 'auto-mode-alist (cons (purecopy "\\.vr[hi]?\\'")  'vera-mode))
@@ -30476,7 +30108,7 @@ Key bindings:
 ;;;***
 \f
 ;;;### (autoloads nil "verilog-mode" "progmodes/verilog-mode.el"
-;;;;;;  (22197 58438 615460 447000))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from progmodes/verilog-mode.el
 
 (autoload 'verilog-mode "verilog-mode" "\
@@ -30615,8 +30247,8 @@ Key bindings specific to `verilog-mode-map' are:
 
 ;;;***
 \f
-;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (22292
-;;;;;;  49734 746738 351000))
+;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/vhdl-mode.el
 
 (autoload 'vhdl-mode "vhdl-mode" "\
@@ -31170,8 +30802,8 @@ Key bindings:
 
 ;;;***
 \f
-;;;### (autoloads nil "viet-util" "language/viet-util.el" (22150
-;;;;;;  28228 198072 702000))
+;;;### (autoloads nil "viet-util" "language/viet-util.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from language/viet-util.el
 
 (autoload 'viet-encode-viscii-char "viet-util" "\
@@ -31215,7 +30847,7 @@ Convert Vietnamese characters of the current buffer to `VIQR' mnemonics.
 
 ;;;***
 \f
-;;;### (autoloads nil "view" "view.el" (22150 28229 322072 702000))
+;;;### (autoloads nil "view" "view.el" (0 0 0 0))
 ;;; Generated autoloads from view.el
 
 (defvar view-remove-frame-by-deleting t "\
@@ -31471,8 +31103,7 @@ Exit View mode and make the current buffer editable.
 
 ;;;***
 \f
-;;;### (autoloads nil "viper" "emulation/viper.el" (22150 28227 478072
-;;;;;;  702000))
+;;;### (autoloads nil "viper" "emulation/viper.el" (0 0 0 0))
 ;;; Generated autoloads from emulation/viper.el
 (push (purecopy '(viper 3 14 1)) package--builtin-versions)
 
@@ -31489,8 +31120,8 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'.
 
 ;;;***
 \f
-;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (22150
-;;;;;;  28227 458072 702000))
+;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (0 0 0
+;;;;;;  0))
 ;;; Generated autoloads from emacs-lisp/warnings.el
 
 (defvar warning-prefix-function nil "\
@@ -31580,7 +31211,7 @@ this is equivalent to `display-warning', using
 
 ;;;***
 \f
-;;;### (autoloads nil "wdired" "wdired.el" (22240 5212 92626 379000))
+;;;### (autoloads nil "wdired" "wdired.el" (0 0 0 0))
 ;;; Generated autoloads from wdired.el
 (push (purecopy '(wdired 2 0)) package--builtin-versions)
 
@@ -31598,8 +31229,7 @@ See `wdired-mode'.
 
 ;;;***
 \f
-;;;### (autoloads nil "webjump" "net/webjump.el" (22150 28228 442072
-;;;;;;  702000))
+;;;### (autoloads nil "webjump" "net/webjump.el" (0 0 0 0))
 ;;; Generated autoloads from net/webjump.el
 
 (autoload 'webjump "webjump" "\
@@ -31615,8 +31245,8 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke
 
 ;;;***
 \f
-;;;### (autoloads nil "which-func" "progmodes/which-func.el" (22150
-;;;;;;  28228 986072 702000))
+;;;### (autoloads nil "which-func" "progmodes/which-func.el" (0
+;;;;;;  0))
 ;;; Generated autoloads from progmodes/which-func.el
  (put 'which-func-format 'risky-local-variable t)
  (put 'which-func-current 'risky-local-variable t)
@@ -31625,7 +31255,8 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke
 
 (defvar which-function-mode nil "\
 Non-nil if Which-Function mode is enabled.
-See the command `which-function-mode' for a description of this minor mode.
+See the `which-function-mode' command
+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 `which-function-mode'.")
@@ -31646,8 +31277,7 @@ in certain major modes.
 
 ;;;***
 \f
-;;;### (autoloads nil "whitespace" "whitespace.el" (22150 28229 326072
-;;;;;;  702000))
+;;;### (autoloads nil "whitespace" "whitespace.el" (0 0 0 0))
 ;;; Generated autoloads from whitespace.el
 (push (purecopy '(whitespace 13 2 2)) package--builtin-versions)
 
@@ -31679,7 +31309,8 @@ See also `whitespace-newline' and `whitespace-display-mappings'.
 
 (defvar global-whitespace-mode nil "\
 Non-nil if Global Whitespace mode is enabled.
-See the command `global-whitespace-mode' for a description of this minor mode.
+See the `global-whitespace-mode' command
+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 `global-whitespace-mode'.")
@@ -31699,7 +31330,8 @@ See also `whitespace-style', `whitespace-newline' and
 
 (defvar global-whitespace-newline-mode nil "\
 Non-nil if Global Whitespace-Newline mode is enabled.
-See the command `global-whitespace-newline-mode' for a description of this minor mode.
+See the `global-whitespace-newline-mode' command
+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 `global-whitespace-newline-mode'.")
@@ -32015,8 +31647,7 @@ cleaning up these problems.
 
 ;;;***
 \f
-;;;### (autoloads nil "wid-browse" "wid-browse.el" (22150 28229 326072
-;;;;;;  702000))
+;;;### (autoloads nil "wid-browse" "wid-browse.el" (0 0 0 0))
 ;;; Generated autoloads from wid-browse.el
 
 (autoload 'widget-browse-at "wid-browse" "\
@@ -32044,8 +31675,7 @@ if ARG is omitted or nil.
 
 ;;;***
 \f
-;;;### (autoloads nil "wid-edit" "wid-edit.el" (22150 28229 330072
-;;;;;;  702000))
+;;;### (autoloads nil "wid-edit" "wid-edit.el" (0 0 0 0))
 ;;; Generated autoloads from wid-edit.el
 
 (autoload 'widgetp "wid-edit" "\
@@ -32087,8 +31717,7 @@ Setup current buffer so editing string widgets works.
 
 ;;;***
 \f
-;;;### (autoloads nil "windmove" "windmove.el" (22150 28229 330072
-;;;;;;  702000))
+;;;### (autoloads nil "windmove" "windmove.el" (0 0 0 0))
 ;;; Generated autoloads from windmove.el
 
 (autoload 'windmove-left "windmove" "\
@@ -32140,12 +31769,13 @@ Default MODIFIER is `shift'.
 
 ;;;***
 \f
-;;;### (autoloads nil "winner" "winner.el" (22150 28229 354072 702000))
+;;;### (autoloads nil "winner" "winner.el" (0 0 0 0))
 ;;; Generated autoloads from winner.el
 
 (defvar winner-mode nil "\
 Non-nil if Winner mode is enabled.
-See the command `winner-mode' for a description of this minor mode.
+See the `winner-mode' command
+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 `winner-mode'.")
@@ -32156,14 +31786,20 @@ or call the function `winner-mode'.")
 Toggle Winner mode on or off.
 With a prefix argument ARG, enable Winner mode if ARG is
 positive, and disable it otherwise.  If called from Lisp, enable
-the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'.
-\\{winner-mode-map}
+the mode if ARG is omitted or nil, and toggle it if ARG is ‘toggle’.
+
+Winner mode is a global minor mode that records the changes in
+the window configuration (i.e. how the frames are partitioned
+into windows) so that the changes can be \"undone\" using the
+command `winner-undo'.  By default this one is bound to the key
+sequence `C-c <left>'.  If you change your mind (while undoing),
+you can press `C-c <right>' (calling `winner-redo').
 
 \(fn &optional ARG)" t nil)
 
 ;;;***
 \f
-;;;### (autoloads nil "woman" "woman.el" (22216 22853 52596 491000))
+;;;### (autoloads nil "woman" "woman.el" (0 0 0 0))
 ;;; Generated autoloads from woman.el
 (push (purecopy '(woman 0 551)) package--builtin-versions)
 
@@ -32212,7 +31848,7 @@ Default bookmark handler for Woman buffers.
 
 ;;;***
 \f
-;;;### (autoloads nil "xml" "xml.el" (22249 52924 872284 99000))
+;;;### (autoloads nil "xml" "xml.el" (0 0 0 0))
 ;;; Generated autoloads from xml.el
 
 (autoload 'xml-parse-file "xml" "\
@@ -32268,8 +31904,7 @@ Both features can be combined by providing a cons cell
 
 ;;;***
 \f
-;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (22150 28228 462072
-;;;;;;  702000))
+;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (0 0 0 0))
 ;;; Generated autoloads from nxml/xmltok.el
 
 (autoload 'xmltok-get-declared-encoding-position "xmltok" "\
@@ -32287,8 +31922,7 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT.
 
 ;;;***
 \f
-;;;### (autoloads nil "xref" "progmodes/xref.el" (22286 10932 162198
-;;;;;;  251000))
+;;;### (autoloads nil "xref" "progmodes/xref.el" (0 0 0 0))
 ;;; Generated autoloads from progmodes/xref.el
 
 (autoload 'xref-find-backend "xref" "\
@@ -32355,13 +31989,13 @@ IGNORES is a list of glob patterns.
 
 ;;;***
 \f
-;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (22290 7990 504790
-;;;;;;  288000))
+;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (0 0 0 0))
 ;;; Generated autoloads from xt-mouse.el
 
 (defvar xterm-mouse-mode nil "\
 Non-nil if Xterm-Mouse mode is enabled.
-See the command `xterm-mouse-mode' for a description of this minor mode.
+See the `xterm-mouse-mode' command
+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 `xterm-mouse-mode'.")
@@ -32385,8 +32019,7 @@ down the SHIFT key while pressing the mouse button.
 
 ;;;***
 \f
-;;;### (autoloads nil "xwidget" "xwidget.el" (22272 64438 424671
-;;;;;;  103000))
+;;;### (autoloads nil "xwidget" "xwidget.el" (0 0 0 0))
 ;;; Generated autoloads from xwidget.el
 
 (autoload 'xwidget-webkit-browse-url "xwidget" "\
@@ -32398,8 +32031,8 @@ Interactively, URL defaults to the string looking like a url around point.
 
 ;;;***
 \f
-;;;### (autoloads nil "yenc" "gnus/yenc.el" (22150 28228 26072 702000))
-;;; Generated autoloads from gnus/yenc.el
+;;;### (autoloads nil "yenc" "mail/yenc.el" (0 0 0 0))
+;;; Generated autoloads from mail/yenc.el
 
 (autoload 'yenc-decode-region "yenc" "\
 Yenc decode region between START and END using an internal decoder.
@@ -32413,7 +32046,7 @@ Extract file name from an yenc header.
 
 ;;;***
 \f
-;;;### (autoloads nil "zone" "play/zone.el" (22150 28228 682072 702000))
+;;;### (autoloads nil "zone" "play/zone.el" (0 0 0 0))
 ;;; Generated autoloads from play/zone.el
 
 (autoload 'zone "zone" "\
@@ -32517,46 +32150,54 @@ Zone out, completely.
 ;;;;;;  "eshell/esh-io.el" "eshell/esh-module.el" "eshell/esh-opt.el"
 ;;;;;;  "eshell/esh-proc.el" "eshell/esh-util.el" "eshell/esh-var.el"
 ;;;;;;  "ezimage.el" "format-spec.el" "fringe.el" "generic-x.el"
-;;;;;;  "gnus/compface.el" "gnus/gnus-async.el" "gnus/gnus-bcklg.el"
-;;;;;;  "gnus/gnus-cite.el" "gnus/gnus-cloud.el" "gnus/gnus-cus.el"
-;;;;;;  "gnus/gnus-demon.el" "gnus/gnus-dup.el" "gnus/gnus-eform.el"
-;;;;;;  "gnus/gnus-ems.el" "gnus/gnus-icalendar.el" "gnus/gnus-int.el"
-;;;;;;  "gnus/gnus-logic.el" "gnus/gnus-mh.el" "gnus/gnus-salt.el"
-;;;;;;  "gnus/gnus-score.el" "gnus/gnus-srvr.el" "gnus/gnus-topic.el"
-;;;;;;  "gnus/gnus-undo.el" "gnus/gnus-util.el" "gnus/gnus-uu.el"
-;;;;;;  "gnus/gnus-vm.el" "gnus/gssapi.el" "gnus/ietf-drums.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-archive.el"
-;;;;;;  "gnus/mm-bodies.el" "gnus/mm-decode.el" "gnus/mm-util.el"
-;;;;;;  "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el" "gnus/nnagent.el"
-;;;;;;  "gnus/nnbabyl.el" "gnus/nndir.el" "gnus/nndraft.el" "gnus/nneething.el"
-;;;;;;  "gnus/nngateway.el" "gnus/nnheader.el" "gnus/nnimap.el" "gnus/nnir.el"
-;;;;;;  "gnus/nnmail.el" "gnus/nnmaildir.el" "gnus/nnmairix.el" "gnus/nnmbox.el"
-;;;;;;  "gnus/nnmh.el" "gnus/nnnil.el" "gnus/nnoo.el" "gnus/nnregistry.el"
-;;;;;;  "gnus/nnrss.el" "gnus/nnspool.el" "gnus/nntp.el" "gnus/nnvirtual.el"
-;;;;;;  "gnus/nnweb.el" "gnus/registry.el" "gnus/rfc1843.el" "gnus/rfc2045.el"
-;;;;;;  "gnus/rfc2047.el" "gnus/rfc2231.el" "gnus/rtree.el" "gnus/sieve-manage.el"
-;;;;;;  "gnus/smime.el" "gnus/spam-stat.el" "gnus/spam-wash.el" "hex-util.el"
-;;;;;;  "hfy-cmap.el" "ibuf-ext.el" "international/charscript.el"
+;;;;;;  "gnus/gnus-async.el" "gnus/gnus-bcklg.el" "gnus/gnus-cite.el"
+;;;;;;  "gnus/gnus-cloud.el" "gnus/gnus-cus.el" "gnus/gnus-demon.el"
+;;;;;;  "gnus/gnus-dup.el" "gnus/gnus-eform.el" "gnus/gnus-icalendar.el"
+;;;;;;  "gnus/gnus-int.el" "gnus/gnus-logic.el" "gnus/gnus-mh.el"
+;;;;;;  "gnus/gnus-rfc1843.el" "gnus/gnus-salt.el" "gnus/gnus-score.el"
+;;;;;;  "gnus/gnus-srvr.el" "gnus/gnus-topic.el" "gnus/gnus-undo.el"
+;;;;;;  "gnus/gnus-util.el" "gnus/gnus-uu.el" "gnus/gnus-vm.el" "gnus/gssapi.el"
+;;;;;;  "gnus/legacy-gnus-agent.el" "gnus/mail-source.el" "gnus/messcompat.el"
+;;;;;;  "gnus/mm-archive.el" "gnus/mm-bodies.el" "gnus/mm-decode.el"
+;;;;;;  "gnus/mm-util.el" "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el"
+;;;;;;  "gnus/nnagent.el" "gnus/nnbabyl.el" "gnus/nndir.el" "gnus/nndraft.el"
+;;;;;;  "gnus/nneething.el" "gnus/nngateway.el" "gnus/nnheader.el"
+;;;;;;  "gnus/nnimap.el" "gnus/nnir.el" "gnus/nnmail.el" "gnus/nnmaildir.el"
+;;;;;;  "gnus/nnmairix.el" "gnus/nnmbox.el" "gnus/nnmh.el" "gnus/nnnil.el"
+;;;;;;  "gnus/nnoo.el" "gnus/nnregistry.el" "gnus/nnrss.el" "gnus/nnspool.el"
+;;;;;;  "gnus/nntp.el" "gnus/nnvirtual.el" "gnus/nnweb.el" "gnus/smime.el"
+;;;;;;  "gnus/spam-stat.el" "gnus/spam-wash.el" "hex-util.el" "hfy-cmap.el"
+;;;;;;  "htmlfontify-loaddefs.el" "ibuf-ext.el" "image/compface.el"
+;;;;;;  "international/charprop.el" "international/charscript.el"
 ;;;;;;  "international/fontset.el" "international/iso-ascii.el" "international/ja-dic-cnv.el"
-;;;;;;  "international/ja-dic-utl.el" "international/ogonek.el" "kermit.el"
-;;;;;;  "language/hanja-util.el" "language/thai-word.el" "ldefs-boot.el"
-;;;;;;  "leim/quail/arabic.el" "leim/quail/croatian.el" "leim/quail/cyril-jis.el"
-;;;;;;  "leim/quail/cyrillic.el" "leim/quail/czech.el" "leim/quail/ethiopic.el"
-;;;;;;  "leim/quail/georgian.el" "leim/quail/greek.el" "leim/quail/hanja-jis.el"
-;;;;;;  "leim/quail/hanja.el" "leim/quail/hanja3.el" "leim/quail/hebrew.el"
-;;;;;;  "leim/quail/indian.el" "leim/quail/ipa-praat.el" "leim/quail/ipa.el"
-;;;;;;  "leim/quail/japanese.el" "leim/quail/lao.el" "leim/quail/latin-alt.el"
-;;;;;;  "leim/quail/latin-ltx.el" "leim/quail/latin-post.el" "leim/quail/latin-pre.el"
-;;;;;;  "leim/quail/lrt.el" "leim/quail/persian.el" "leim/quail/programmer-dvorak.el"
+;;;;;;  "international/ja-dic-utl.el" "international/ogonek.el" "international/rfc1843.el"
+;;;;;;  "international/uni-bidi.el" "international/uni-brackets.el"
+;;;;;;  "international/uni-category.el" "international/uni-combining.el"
+;;;;;;  "international/uni-comment.el" "international/uni-decimal.el"
+;;;;;;  "international/uni-decomposition.el" "international/uni-digit.el"
+;;;;;;  "international/uni-lowercase.el" "international/uni-mirrored.el"
+;;;;;;  "international/uni-name.el" "international/uni-numeric.el"
+;;;;;;  "international/uni-old-name.el" "international/uni-titlecase.el"
+;;;;;;  "international/uni-uppercase.el" "kermit.el" "language/hanja-util.el"
+;;;;;;  "language/thai-word.el" "ldefs-boot.el" "leim/quail/arabic.el"
+;;;;;;  "leim/quail/croatian.el" "leim/quail/cyril-jis.el" "leim/quail/cyrillic.el"
+;;;;;;  "leim/quail/czech.el" "leim/quail/ethiopic.el" "leim/quail/georgian.el"
+;;;;;;  "leim/quail/greek.el" "leim/quail/hanja-jis.el" "leim/quail/hanja.el"
+;;;;;;  "leim/quail/hanja3.el" "leim/quail/hebrew.el" "leim/quail/indian.el"
+;;;;;;  "leim/quail/ipa-praat.el" "leim/quail/ipa.el" "leim/quail/japanese.el"
+;;;;;;  "leim/quail/lao.el" "leim/quail/latin-alt.el" "leim/quail/latin-ltx.el"
+;;;;;;  "leim/quail/latin-post.el" "leim/quail/latin-pre.el" "leim/quail/lrt.el"
+;;;;;;  "leim/quail/persian.el" "leim/quail/programmer-dvorak.el"
 ;;;;;;  "leim/quail/py-punct.el" "leim/quail/pypunct-b5.el" "leim/quail/rfc1345.el"
 ;;;;;;  "leim/quail/sgml-input.el" "leim/quail/sisheng.el" "leim/quail/slovak.el"
 ;;;;;;  "leim/quail/symbol-ksc.el" "leim/quail/tamil-dvorak.el" "leim/quail/thai.el"
 ;;;;;;  "leim/quail/tibetan.el" "leim/quail/viqr.el" "leim/quail/vntelex.el"
 ;;;;;;  "leim/quail/vnvni.el" "leim/quail/welsh.el" "loadup.el" "mail/blessmail.el"
-;;;;;;  "mail/mailheader.el" "mail/mspools.el" "mail/rfc2368.el"
-;;;;;;  "mail/rfc822.el" "mail/rmail-spam-filter.el" "mail/rmailedit.el"
-;;;;;;  "mail/rmailkwd.el" "mail/rmailmm.el" "mail/rmailmsc.el" "mail/rmailsort.el"
+;;;;;;  "mail/ietf-drums.el" "mail/mail-parse.el" "mail/mail-prsvr.el"
+;;;;;;  "mail/mailheader.el" "mail/mspools.el" "mail/rfc2045.el"
+;;;;;;  "mail/rfc2047.el" "mail/rfc2231.el" "mail/rfc2368.el" "mail/rfc822.el"
+;;;;;;  "mail/rmail-spam-filter.el" "mail/rmailedit.el" "mail/rmailkwd.el"
+;;;;;;  "mail/rmailmm.el" "mail/rmailmsc.el" "mail/rmailsort.el"
 ;;;;;;  "mail/rmailsum.el" "mail/undigest.el" "mh-e/mh-acros.el"
 ;;;;;;  "mh-e/mh-alias.el" "mh-e/mh-buffers.el" "mh-e/mh-compat.el"
 ;;;;;;  "mh-e/mh-funcs.el" "mh-e/mh-gnus.el" "mh-e/mh-identity.el"
@@ -32567,25 +32208,25 @@ Zone out, completely.
 ;;;;;;  "mh-e/mh-utils.el" "mh-e/mh-xface.el" "mouse-copy.el" "mwheel.el"
 ;;;;;;  "net/dns.el" "net/eudc-vars.el" "net/eudcb-bbdb.el" "net/eudcb-ldap.el"
 ;;;;;;  "net/eudcb-mab.el" "net/hmac-def.el" "net/hmac-md5.el" "net/imap.el"
-;;;;;;  "net/ldap.el" "net/mairix.el" "net/newsticker.el" "net/nsm.el"
-;;;;;;  "net/rfc2104.el" "net/sasl-cram.el" "net/sasl-digest.el"
-;;;;;;  "net/sasl-scram-rfc.el" "net/sasl.el" "net/shr-color.el"
-;;;;;;  "net/soap-inspect.el" "net/socks.el" "net/tls.el" "net/tramp-adb.el"
-;;;;;;  "net/tramp-cache.el" "net/tramp-cmds.el" "net/tramp-compat.el"
-;;;;;;  "net/tramp-gvfs.el" "net/tramp-gw.el" "net/tramp-loaddefs.el"
-;;;;;;  "net/tramp-sh.el" "net/tramp-smb.el" "net/tramp-uu.el" "net/zeroconf.el"
-;;;;;;  "notifications.el" "nxml/nxml-enc.el" "nxml/nxml-maint.el"
-;;;;;;  "nxml/nxml-ns.el" "nxml/nxml-outln.el" "nxml/nxml-parse.el"
-;;;;;;  "nxml/nxml-rap.el" "nxml/nxml-util.el" "nxml/rng-dt.el" "nxml/rng-loc.el"
-;;;;;;  "nxml/rng-maint.el" "nxml/rng-match.el" "nxml/rng-parse.el"
-;;;;;;  "nxml/rng-pttrn.el" "nxml/rng-uri.el" "nxml/rng-util.el"
-;;;;;;  "nxml/xsd-regexp.el" "obarray.el" "org/ob-C.el" "org/ob-R.el"
-;;;;;;  "org/ob-asymptote.el" "org/ob-awk.el" "org/ob-calc.el" "org/ob-clojure.el"
-;;;;;;  "org/ob-comint.el" "org/ob-core.el" "org/ob-css.el" "org/ob-ditaa.el"
-;;;;;;  "org/ob-dot.el" "org/ob-emacs-lisp.el" "org/ob-eval.el" "org/ob-exp.el"
-;;;;;;  "org/ob-fortran.el" "org/ob-gnuplot.el" "org/ob-haskell.el"
-;;;;;;  "org/ob-io.el" "org/ob-java.el" "org/ob-js.el" "org/ob-keys.el"
-;;;;;;  "org/ob-latex.el" "org/ob-ledger.el" "org/ob-lilypond.el"
+;;;;;;  "net/ldap.el" "net/mailcap.el" "net/mairix.el" "net/newsticker.el"
+;;;;;;  "net/nsm.el" "net/puny.el" "net/rfc2104.el" "net/sasl-cram.el"
+;;;;;;  "net/sasl-digest.el" "net/sasl-scram-rfc.el" "net/sasl.el"
+;;;;;;  "net/shr-color.el" "net/sieve-manage.el" "net/soap-inspect.el"
+;;;;;;  "net/socks.el" "net/tls.el" "net/tramp-adb.el" "net/tramp-cache.el"
+;;;;;;  "net/tramp-cmds.el" "net/tramp-compat.el" "net/tramp-gvfs.el"
+;;;;;;  "net/tramp-gw.el" "net/tramp-loaddefs.el" "net/tramp-sh.el"
+;;;;;;  "net/tramp-smb.el" "net/tramp-uu.el" "net/zeroconf.el" "notifications.el"
+;;;;;;  "nxml/nxml-enc.el" "nxml/nxml-maint.el" "nxml/nxml-ns.el"
+;;;;;;  "nxml/nxml-outln.el" "nxml/nxml-parse.el" "nxml/nxml-rap.el"
+;;;;;;  "nxml/nxml-util.el" "nxml/rng-dt.el" "nxml/rng-loc.el" "nxml/rng-maint.el"
+;;;;;;  "nxml/rng-match.el" "nxml/rng-parse.el" "nxml/rng-pttrn.el"
+;;;;;;  "nxml/rng-uri.el" "nxml/rng-util.el" "nxml/xsd-regexp.el"
+;;;;;;  "org/ob-C.el" "org/ob-R.el" "org/ob-asymptote.el" "org/ob-awk.el"
+;;;;;;  "org/ob-calc.el" "org/ob-clojure.el" "org/ob-comint.el" "org/ob-core.el"
+;;;;;;  "org/ob-css.el" "org/ob-ditaa.el" "org/ob-dot.el" "org/ob-emacs-lisp.el"
+;;;;;;  "org/ob-eval.el" "org/ob-exp.el" "org/ob-fortran.el" "org/ob-gnuplot.el"
+;;;;;;  "org/ob-haskell.el" "org/ob-io.el" "org/ob-java.el" "org/ob-js.el"
+;;;;;;  "org/ob-keys.el" "org/ob-latex.el" "org/ob-ledger.el" "org/ob-lilypond.el"
 ;;;;;;  "org/ob-lisp.el" "org/ob-lob.el" "org/ob-makefile.el" "org/ob-matlab.el"
 ;;;;;;  "org/ob-maxima.el" "org/ob-mscgen.el" "org/ob-ocaml.el" "org/ob-octave.el"
 ;;;;;;  "org/ob-org.el" "org/ob-perl.el" "org/ob-picolisp.el" "org/ob-plantuml.el"
@@ -32614,22 +32255,22 @@ Zone out, completely.
 ;;;;;;  "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" "ps-def.el" "ps-mule.el" "ps-samp.el"
-;;;;;;  "sb-image.el" "scroll-bar.el" "soundex.el" "subdirs.el" "tempo.el"
-;;;;;;  "textmodes/bib-mode.el" "textmodes/makeinfo.el" "textmodes/page-ext.el"
-;;;;;;  "textmodes/refbib.el" "textmodes/refer.el" "textmodes/reftex-auc.el"
-;;;;;;  "textmodes/reftex-cite.el" "textmodes/reftex-dcr.el" "textmodes/reftex-global.el"
-;;;;;;  "textmodes/reftex-index.el" "textmodes/reftex-parse.el" "textmodes/reftex-ref.el"
-;;;;;;  "textmodes/reftex-sel.el" "textmodes/reftex-toc.el" "textmodes/texnfo-upd.el"
-;;;;;;  "timezone.el" "tooltip.el" "tree-widget.el" "url/url-about.el"
-;;;;;;  "url/url-cookie.el" "url/url-dired.el" "url/url-domsuf.el"
-;;;;;;  "url/url-expand.el" "url/url-ftp.el" "url/url-future.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" "vc/ediff-diff.el"
-;;;;;;  "vc/ediff-init.el" "vc/ediff-merg.el" "vc/ediff-ptch.el"
-;;;;;;  "vc/ediff-vers.el" "vc/ediff-wind.el" "vc/pcvs-info.el" "vc/pcvs-parse.el"
-;;;;;;  "vc/pcvs-util.el" "vc/vc-dav.el" "vc/vc-filewise.el" "vcursor.el"
-;;;;;;  "vt-control.el" "vt100-led.el" "w32-fns.el" "w32-vars.el"
-;;;;;;  "x-dnd.el") (22309 59446 538986 699000))
+;;;;;;  "registry.el" "rtree.el" "sb-image.el" "scroll-bar.el" "soundex.el"
+;;;;;;  "subdirs.el" "svg.el" "tempo.el" "textmodes/bib-mode.el"
+;;;;;;  "textmodes/makeinfo.el" "textmodes/page-ext.el" "textmodes/refbib.el"
+;;;;;;  "textmodes/refer.el" "textmodes/reftex-auc.el" "textmodes/reftex-cite.el"
+;;;;;;  "textmodes/reftex-dcr.el" "textmodes/reftex-global.el" "textmodes/reftex-index.el"
+;;;;;;  "textmodes/reftex-parse.el" "textmodes/reftex-ref.el" "textmodes/reftex-sel.el"
+;;;;;;  "textmodes/reftex-toc.el" "textmodes/texnfo-upd.el" "timezone.el"
+;;;;;;  "tooltip.el" "tree-widget.el" "url/url-about.el" "url/url-cookie.el"
+;;;;;;  "url/url-dired.el" "url/url-domsuf.el" "url/url-expand.el"
+;;;;;;  "url/url-ftp.el" "url/url-future.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" "vc/ediff-diff.el" "vc/ediff-init.el" "vc/ediff-merg.el"
+;;;;;;  "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el"
+;;;;;;  "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el"
+;;;;;;  "vc/vc-filewise.el" "vcursor.el" "vt-control.el" "vt100-led.el"
+;;;;;;  "w32-fns.el" "w32-vars.el" "x-dnd.el") (0 0 0 0))
 
 ;;;***
 \f
index 078f9f99fabe4f9d76c8d3a3886ecdf577236b66..138a97ac28a9bc03dae4c3d815bd63fa100c26cc 100644 (file)
   diaeresis  |   \"    | \"i -> ï   \"\" -> ¨
     tilde    |   ~    | ~n -> ñ
    cedilla   |   ~    | ~c -> ç
+  middle dot |   ~    | ~. -> ·
    symbol    |   ~    | ~> -> »   ~< -> «   ~! -> ¡   ~? -> ¿
 " nil t nil nil nil nil nil nil nil nil t)
 
  ("~<" ?\«)
  ("~!" ?¡)
  ("~?" ?¿)
+ ("~." ?·)
  ("~ " ?~)
 )
 
index d49ccb356ff7cd720ada5c8f9da0e87c7f424ac6..122f8e31d5726908d20f9063910a0ca625e907d8 100644 (file)
@@ -120,7 +120,15 @@ Linum mode is a buffer-local minor mode."
   (mapc #'delete-overlay linum-overlays)
   (setq linum-overlays nil)
   (dolist (w (get-buffer-window-list (current-buffer) nil t))
-    (set-window-margins w 0 (cdr (window-margins w)))))
+    ;; restore margins if needed FIXME: This still fails if the
+    ;; "other" mode has incidentally set margins to exactly what linum
+    ;; had: see bug#20674 for a similar workaround in nlinum.el
+    (let ((set-margins (window-parameter w 'linum--set-margins))
+          (current-margins (window-margins w)))
+      (when (and set-margins
+                 (equal set-margins current-margins))
+        (set-window-margins w 0 (cdr current-margins))
+        (set-window-parameter w 'linum--set-margins nil)))))
 
 (defun linum-update-current ()
   "Update line numbers for the current buffer."
@@ -143,10 +151,10 @@ Linum mode is a buffer-local minor mode."
 
 (defun linum--face-width (face)
   (let ((info (font-info (face-font face)))
-       width)
+        width)
     (setq width (aref info 11))
     (if (<= width 0)
-       (setq width (aref info 10)))
+        (setq width (aref info 10)))
     width))
 
 (defun linum-update-window (win)
@@ -170,7 +178,7 @@ Linum mode is a buffer-local minor mode."
              (visited (catch 'visited
                         (dolist (o (overlays-in (point) (point)))
                           (when (equal-including-properties
-                                (overlay-get o 'linum-str) str)
+                                 (overlay-get o 'linum-str) str)
                             (unless (memq o linum-overlays)
                               (push o linum-overlays))
                             (setq linum-available (delq o linum-available))
@@ -193,7 +201,12 @@ Linum mode is a buffer-local minor mode."
       (setq width (ceiling
                    (/ (* width 1.0 (linum--face-width 'linum))
                       (frame-char-width)))))
-    (set-window-margins win width (cdr (window-margins win)))))
+    ;; open up space in the left margin, if needed, and record that
+    ;; fact as the window-parameter `linum--set-margins'
+    (let ((existing-margins (window-margins win)))
+      (when (> width (or (car existing-margins) 0))
+        (set-window-margins win width (cdr existing-margins))
+        (set-window-parameter win 'linum--set-margins (window-margins win))))))
 
 (defun linum-after-change (beg end _len)
   ;; update overlays on deletions, and after newlines are inserted
index 21c64a8c3b40167ad60b6564cc7d2af5dd4d694a..53fc2215a903528365a52456684d4fde483a5799 100644 (file)
     (let ((dir (car load-path)))
       ;; We'll probably overflow the pure space.
       (setq purify-flag nil)
+      ;; Value of max-lisp-eval-depth when compiling initially.
+      ;; During bootstrapping the byte-compiler is run interpreted when
+      ;; compiling itself, which uses a lot more stack than usual.
+      (setq max-lisp-eval-depth 2200)
       (setq load-path (list (expand-file-name "." dir)
                            (expand-file-name "emacs-lisp" dir)
                            (expand-file-name "language" dir)
 (load "emacs-lisp/nadvice")
 (load "emacs-lisp/cl-preloaded")
 (load "minibuffer")            ;After loaddefs, for define-minor-mode.
+(load "obarray")        ;abbrev.el is implemented in terms of obarrays.
 (load "abbrev")         ;lisp-mode.el and simple.el use define-abbrev-table.
 (load "simple")
 
index 04e3b38ab170025b653e27264f8d01f73404a405..2fe32c7d5e74a9b2fe02b82e1968690654503701 100644 (file)
@@ -36,7 +36,7 @@
 
 ;;;###autoload
 (defvar lpr-lp-system
-  (memq system-type '(usg-unix-v hpux irix))
+  (memq system-type '(usg-unix-v hpux))
   "Non-nil if running on a system type that uses the \"lp\" command.")
 
 
index 85e91cdadc0e719b3462756564fc94ebb65ce24c..11cbea0b373e3a770ca8b398d681074abd58ef11 100644 (file)
@@ -72,7 +72,7 @@
 
 (defcustom ls-lisp-emulation
   (cond ;; ((eq system-type 'windows-nt) 'MS-Windows)
-       ((memq system-type '(hpux usg-unix-v irix berkeley-unix))
+       ((memq system-type '(hpux usg-unix-v berkeley-unix))
         'UNIX))        ; very similar to GNU
   ;; Anything else defaults to nil, meaning GNU.
   "Platform to emulate: GNU (default), MacOS, MS-Windows, UNIX.
similarity index 99%
rename from lisp/gnus/flow-fill.el
rename to lisp/mail/flow-fill.el
index 904f031d0e40d4c2b28509a5b1b95860a81128c1..d28814224757bfb0236d5880ff7fdc332605771a 100644 (file)
@@ -157,7 +157,6 @@ RFC 2646 suggests 66 characters for readability."
            (condition-case nil
                (let ((fill-prefix (when quote (concat quote " ")))
                      (fill-column (eval fill-flowed-display-column))
-                     filladapt-mode
                      adaptive-fill-mode)
                  (fill-region (point-at-bol)
                               (min (1+ (point-at-eol))
similarity index 97%
rename from lisp/gnus/ietf-drums.el
rename to lisp/mail/ietf-drums.el
index 8008e327592a357e29170ffe5953bced5dc23b4f..03349d120552a04823162e69ed52cd5a9dbb2dae 100644 (file)
@@ -38,7 +38,6 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
-(require 'mm-util)
 
 (defvar ietf-drums-no-ws-ctl-token "\001-\010\013\014\016-\037\177"
   "US-ASCII control characters excluding CR, LF and white space.")
@@ -74,11 +73,6 @@ backslash and doublequote.")
     (modify-syntax-entry ?* "_" table)
     (modify-syntax-entry ?\; "_" table)
     (modify-syntax-entry ?\' "_" table)
-    (if (featurep 'xemacs)
-       (let ((i 128))
-         (while (< i 256)
-           (modify-syntax-entry i "w" table)
-           (setq i (1+ i)))))
     table))
 
 (defun ietf-drums-token-to-list (token)
@@ -86,10 +80,10 @@ backslash and doublequote.")
   (let ((i 0)
        b e c out range)
     (while (< i (length token))
-      (setq c (mm-char-int (aref token i)))
+      (setq c (aref token i))
       (incf i)
       (cond
-       ((eq c (mm-char-int ?-))
+       ((eq c ?-)
        (if b
            (setq range t)
          (push c out)))
index 44a082c330d666e1b7bf4ab3a49416440e4ff0d6..4f3e71d34b8b66d4e9bad517899ed703c709d6e0 100644 (file)
@@ -1406,25 +1406,26 @@ consing a string.)"
              (insert (upcase mi) ". ")))
 
          ;; Nuke name if it is the same as mailbox name.
-         (let ((buffer-length (- (point-max) (point-min)))
-               (i 0)
-               (names-match-flag t))
-           (when (and (> buffer-length 0)
-                      (eq buffer-length (- mbox-end mbox-beg)))
-             (goto-char (point-max))
-             (insert-buffer-substring canonicalization-buffer
-                                      mbox-beg mbox-end)
-             (while (and names-match-flag
-                         (< i buffer-length))
-               (or (eq (downcase (char-after (+ i (point-min))))
-                       (downcase
-                        (char-after (+ i buffer-length (point-min)))))
-                   (setq names-match-flag nil))
-               (setq i (1+ i)))
-             (delete-region (+ (point-min) buffer-length) (point-max))
-             (and names-match-flag
-                          mail-extr-ignore-realname-equals-mailbox-name
-                          (narrow-to-region (point) (point)))))
+          (when mail-extr-ignore-single-names
+            (let ((buffer-length (- (point-max) (point-min)))
+                  (i 0)
+                  (names-match-flag t))
+              (when (and (> buffer-length 0)
+                         (eq buffer-length (- mbox-end mbox-beg)))
+                (goto-char (point-max))
+                (insert-buffer-substring canonicalization-buffer
+                                         mbox-beg mbox-end)
+                (while (and names-match-flag
+                            (< i buffer-length))
+                  (or (eq (downcase (char-after (+ i (point-min))))
+                          (downcase
+                           (char-after (+ i buffer-length (point-min)))))
+                      (setq names-match-flag nil))
+                  (setq i (1+ i)))
+                (delete-region (+ (point-min) buffer-length) (point-max))
+                (and names-match-flag
+                     mail-extr-ignore-realname-equals-mailbox-name
+                     (narrow-to-region (point) (point))))))
 
          ;; Nuke name if it's just one word.
          (goto-char (point-min))
similarity index 89%
rename from lisp/gnus/qp.el
rename to lisp/mail/qp.el
index d179cbb2cbdeaa115fe55fb5871509d3b0a976ff..a295e0c2d8e6099da3f980d4c0f84538c53266f7 100644 (file)
@@ -27,9 +27,6 @@
 
 ;;; Code:
 
-(require 'mm-util)
-(defvar mm-use-ultra-safe-encoding)
-
 ;;;###autoload
 (defun quoted-printable-decode-region (from to &optional coding-system)
   "Decode quoted-printable in the region between FROM and TO, per RFC 2045.
@@ -45,7 +42,8 @@ them into characters should be done separately."
   (interactive
    ;; Let the user determine the coding system with "C-x RET c".
    (list (region-beginning) (region-end) coding-system-for-read))
-  (unless (mm-coding-system-p coding-system) ; e.g. `ascii' from Gnus
+  (when (and coding-system
+            (not (coding-system-p coding-system))) ; e.g. `ascii' from Gnus
     (setq coding-system nil))
   (save-excursion
     (save-restriction
@@ -59,7 +57,7 @@ them into characters should be done separately."
        ;; which already contains non-ASCII characters which would
        ;; then get doubly-decoded below.
        (if coding-system
-           (mm-encode-coding-region (point-min) (point-max) coding-system))
+           (encode-coding-region (point-min) (point-max) coding-system))
        (goto-char (point-min))
        (while (and (skip-chars-forward "^=")
                    (not (eobp)))
@@ -87,14 +85,15 @@ them into characters should be done separately."
                 (message "Malformed quoted-printable text")
                 (forward-char)))))
       (if coding-system
-         (mm-decode-coding-region (point-min) (point-max) coding-system)))))
+         (decode-coding-region (point-min) (point-max) coding-system)))))
 
 (defun quoted-printable-decode-string (string &optional coding-system)
   "Decode the quoted-printable encoded STRING and return the result.
 If CODING-SYSTEM is non-nil, decode the string with coding-system.
 Use of CODING-SYSTEM is deprecated; this function should deal with
 raw bytes, and coding conversion should be done separately."
-  (mm-with-unibyte-buffer
+  (with-temp-buffer
+    (set-buffer-multibyte nil)
     (insert string)
     (quoted-printable-decode-region (point-min) (point-max) coding-system)
     (buffer-string)))
@@ -116,7 +115,7 @@ encode lines starting with \"From\"."
     (setq class "\010-\012\014\040-\074\076-\177"))
   (save-excursion
     (goto-char from)
-    (if (re-search-forward (mm-string-to-multibyte "[^\x0-\x7f\x80-\xff]")
+    (if (re-search-forward (string-to-multibyte "[^\x0-\x7f\x80-\xff]")
                           to t)
        (error "Multibyte character in QP encoding region"))
     (save-restriction
@@ -127,8 +126,7 @@ encode lines starting with \"From\"."
                  (not (eobp)))
        (insert
         (prog1
-            ;; To unibyte in case of Emacs 23 (unicode) eight-bit.
-            (format "=%02X" (mm-multibyte-char-to-unibyte (char-after)))
+            (format "=%02X" (char-after))
           (delete-char 1))))
       ;; Encode white space at the end of lines.
       (goto-char (point-min))
@@ -139,17 +137,17 @@ encode lines starting with \"From\"."
           (prog1
               (format "=%02X" (char-after))
             (delete-char 1)))))
-      (let ((mm-use-ultra-safe-encoding
+      (let ((ultra
             (and (boundp 'mm-use-ultra-safe-encoding)
                  mm-use-ultra-safe-encoding)))
-       (when (or fold mm-use-ultra-safe-encoding)
+       (when (or fold ultra)
          (let ((tab-width 1)           ; HTAB is one character.
                (case-fold-search nil))
            (goto-char (point-min))
            (while (not (eobp))
              ;; In ultra-safe mode, encode "From " at the beginning
              ;; of a line.
-             (when mm-use-ultra-safe-encoding
+             (when ultra
                (if (looking-at "From ")
                    (replace-match "From=20" nil t)
                  (if (looking-at "-")
@@ -167,9 +165,9 @@ encode lines starting with \"From\"."
 (defun quoted-printable-encode-string (string)
   "Encode the STRING as quoted-printable and return the result."
   (with-temp-buffer
-    (if (mm-multibyte-string-p string)
-       (mm-enable-multibyte)
-      (mm-disable-multibyte))
+    (if (multibyte-string-p string)
+       (set-buffer-multibyte 'to)
+      (set-buffer-multibyte nil))
     (insert string)
     (quoted-printable-encode-region (point-min) (point-max))
     (buffer-string)))
similarity index 100%
rename from lisp/gnus/rfc2045.el
rename to lisp/mail/rfc2045.el
similarity index 92%
rename from lisp/gnus/rfc2047.el
rename to lisp/mail/rfc2047.el
index 6647d10b0b2b8aab1c8eba9ef7730cffd022136c..4cb10e543936a10d6d194ef21668dd6c6134f7a1 100644 (file)
@@ -267,7 +267,7 @@ Should be called narrowed to the head of the message."
                             (mm-coding-system-p
                              (car message-posting-charset)))
                        ;; 8 bit must be decoded.
-                       (mm-encode-coding-region
+                       (encode-coding-region
                         (point-min) (point-max)
                         (mm-charset-to-coding-system
                          (car message-posting-charset))))
@@ -290,12 +290,10 @@ Should be called narrowed to the head of the message."
                (let ((rfc2047-encoding-type 'mime))
                  (rfc2047-encode-region (point) (point-max))))
               ((eq method 'default)
-               (if (and (featurep 'mule)
-                        (if (boundp 'enable-multibyte-characters)
-                            (default-value 'enable-multibyte-characters))
+               (if (and (default-value 'enable-multibyte-characters)
                         mail-parse-charset)
-                   (mm-encode-coding-region (point) (point-max)
-                                            mail-parse-charset)))
+                   (encode-coding-region (point) (point-max)
+                                         mail-parse-charset)))
               ;; We get this when CC'ing messages to newsgroups with
               ;; 8-bit names.  The group name mail copy just got
               ;; unconditionally encoded.  Previously, it would ask
@@ -317,11 +315,8 @@ 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 (or (and (featurep 'mule)
-                            (if (boundp 'enable-multibyte-characters)
-                                (default-value 'enable-multibyte-characters)))
-                       (featurep 'file-coding))
-                   (mm-encode-coding-region (point) (point-max) method)))
+               (when (default-value 'enable-multibyte-characters)
+                 (encode-coding-region (point) (point-max) method)))
               ;; Hm.
               (t)))
            (goto-char (point-max))))))))
@@ -356,9 +351,7 @@ The buffer may be narrowed."
     ;; it appears to be the cleanest way.
     ;; Play safe and don't assume the form of the word syntax entry --
     ;; copy it from ?a.
-    (if (featurep 'xemacs)
-       (put-char-table t (get-char-table ?a (standard-syntax-table)) table)
-      (set-char-table-range table t (aref (standard-syntax-table) ?a)))
+    (set-char-table-range table t (aref (standard-syntax-table) ?a))
     (modify-syntax-entry ?\\ "\\" table)
     (modify-syntax-entry ?\" "\"" table)
     (modify-syntax-entry ?\( "(" table)
@@ -556,7 +549,7 @@ Dynamically bind `rfc2047-encoding-type' to change that."
             (if (or debug-on-quit debug-on-error)
                 (signal (car err) (cdr err))
               (error "Invalid data for rfc2047 encoding: %s"
-                     (mm-replace-in-string orig-text "[ \t\n]+" " "))))))))
+                     (replace-regexp-in-string "[ \t\n]+" " " orig-text))))))))
     (unless dont-fold
       (rfc2047-fold-region b (point)))
     (goto-char (point-max))))
@@ -592,7 +585,7 @@ should not change this value.")
        ((not rfc2047-encode-max-chars)
         (concat start
                 (funcall encoder (if cs
-                                     (mm-encode-coding-string string cs)
+                                     (encode-coding-string string cs)
                                    string))
                 "?="))
        ((>= column rfc2047-encode-max-chars)
@@ -616,7 +609,7 @@ should not change this value.")
             (setq next (concat start
                                (funcall encoder
                                         (if cs
-                                            (mm-encode-coding-string
+                                            (encode-coding-string
                                              (substring string 0 (1+ index))
                                              cs)
                                           (substring string 0 (1+ index))))
@@ -700,9 +693,9 @@ Point moves to the end of the region."
               (setq crest (buffer-substring-no-properties (point) b)))
             (setq eword (rfc2047-encode-1
                          (- b (point-at-bol))
-                         (mm-replace-in-string
-                          (buffer-substring-no-properties b e)
-                          "\n\\([ \t]?\\)" "\\1")
+                         (replace-regexp-in-string
+                          "\n\\([ \t]?\\)" "\\1"
+                          (buffer-substring-no-properties b e))
                          cs
                          (or (cdr (assq encoding
                                         rfc2047-encode-function-alist))
@@ -947,7 +940,7 @@ ENCODED-WORD)."
                                      (rfc2047-pad-base64 (nth 2 word)))))
                         ((char-equal ?Q (nth 1 word))
                          (setq text (quoted-printable-decode-string
-                                     (mm-subst-char-in-string
+                                     (subst-char-in-string
                                       ?_ ?  (nth 2 word) t)))))
                 (error
                  (message "%s" (error-message-string code))
@@ -963,7 +956,7 @@ ENCODED-WORD)."
       (setq words (concat
                   (or (and (setq cs (caar rest))
                            (condition-case code
-                               (mm-decode-coding-string (cdar rest) cs)
+                               (decode-coding-string (cdar rest) cs)
                              (error
                               (message "%s" (error-message-string code))
                               nil)))
@@ -1087,13 +1080,13 @@ other than `\"' and `\\' in quoted strings."
                     mail-parse-charset
                     (not (eq mail-parse-charset 'us-ascii))
                     (not (eq mail-parse-charset 'gnus-decoded)))
-           (mm-decode-coding-region b e mail-parse-charset))
+           (decode-coding-region b e mail-parse-charset))
          (setq b (point)))
        (when (and (mm-multibyte-p)
                   mail-parse-charset
                   (not (eq mail-parse-charset 'us-ascii))
                   (not (eq mail-parse-charset 'gnus-decoded)))
-         (mm-decode-coding-region b (point-max) mail-parse-charset))))))
+         (decode-coding-region b (point-max) mail-parse-charset))))))
 
 (defun rfc2047-decode-address-region (start end)
   "Decode MIME-encoded words in region between START and END.
@@ -1105,49 +1098,47 @@ strings are stripped."
   "Decode MIME-encoded STRING and return the result.
 If ADDRESS-MIME is non-nil, strip backslashes which precede characters
 other than `\"' and `\\' in quoted strings."
-  ;; (let ((m (mm-multibyte-p)))
-    (if (string-match "=\\?" string)
-       (with-temp-buffer
-          ;; We used to only call mm-enable-multibyte if `m' is non-nil,
-          ;; but this can't be the right criterion.  Don't just revert this
-          ;; change if it encounters a bug.  Please help me fix it
-          ;; right instead.  --Stef
-          ;; The string returned should always be multibyte in a multibyte
-         ;; session, i.e. the buffer should be multibyte before
-         ;; `buffer-string' is called.
-          (mm-enable-multibyte)
-         (insert string)
-         (inline
-           (rfc2047-decode-region (point-min) (point-max) address-mime))
-         (buffer-string))
-      (when address-mime
-       (setq string
-             (with-temp-buffer
-               (when (mm-multibyte-string-p string)
-                 (mm-enable-multibyte))
-               (insert string)
-               (rfc2047-strip-backslashes-in-quoted-strings)
-               (buffer-string))))
-      ;; Fixme: As above, `m' here is inappropriate.
-      (if (and ;; m
-              mail-parse-charset
-              (not (eq mail-parse-charset 'us-ascii))
-              (not (eq mail-parse-charset 'gnus-decoded)))
-         ;; `decode-coding-string' in Emacs offers a third optional
-         ;; arg NOCOPY to avoid consing a new string if the decoding
-         ;; is "trivial".  Unfortunately it currently doesn't
-         ;; consider anything else than a nil coding system
-         ;; trivial.
-         ;; `rfc2047-decode-string' is called multiple times for each
-         ;; article during summary buffer generation, and we really
-         ;; want to avoid unnecessary consing.  So we bypass
-         ;; `decode-coding-string' if the string is purely ASCII.
-         (if (and (fboundp 'detect-coding-string)
-                  ;; string is purely ASCII
-                  (eq (detect-coding-string string t) 'undecided))
-              string
-            (mm-decode-coding-string string mail-parse-charset))
-        (mm-string-to-multibyte string)))) ;; )
+  (if (string-match "=\\?" string)
+      (with-temp-buffer
+       ;; We used to only call mm-enable-multibyte if `m' is non-nil,
+       ;; but this can't be the right criterion.  Don't just revert this
+       ;; change if it encounters a bug.  Please help me fix it
+       ;; right instead.  --Stef
+       ;; The string returned should always be multibyte in a multibyte
+       ;; session, i.e. the buffer should be multibyte before
+       ;; `buffer-string' is called.
+       (mm-enable-multibyte)
+       (insert string)
+       (inline
+         (rfc2047-decode-region (point-min) (point-max) address-mime))
+       (buffer-string))
+    (when address-mime
+      (setq string
+           (with-temp-buffer
+             (when (multibyte-string-p string)
+               (mm-enable-multibyte))
+             (insert string)
+             (rfc2047-strip-backslashes-in-quoted-strings)
+             (buffer-string))))
+    ;; Fixme: As above, `m' here is inappropriate.
+    (if (and ;; m
+        mail-parse-charset
+        (not (eq mail-parse-charset 'us-ascii))
+        (not (eq mail-parse-charset 'gnus-decoded)))
+       ;; `decode-coding-string' in Emacs offers a third optional
+       ;; arg NOCOPY to avoid consing a new string if the decoding
+       ;; is "trivial".  Unfortunately it currently doesn't
+       ;; consider anything else than a nil coding system
+       ;; trivial.
+       ;; `rfc2047-decode-string' is called multiple times for each
+       ;; article during summary buffer generation, and we really
+       ;; want to avoid unnecessary consing.  So we bypass
+       ;; `decode-coding-string' if the string is purely ASCII.
+       (if (eq (detect-coding-string string t) 'undecided)
+           ;; string is purely ASCII
+           string
+         (decode-coding-string string mail-parse-charset))
+      (string-to-multibyte string))))
 
 (defun rfc2047-decode-address-string (string)
   "Decode MIME-encoded STRING and return the result.
similarity index 97%
rename from lisp/gnus/rfc2231.el
rename to lisp/mail/rfc2231.el
index 34c8ecd4583550ad5ac7c3abe89bb5a610882abd..128779ab4c6946830bf3dec2bbc00943a1fd6bdf 100644 (file)
@@ -63,12 +63,13 @@ must never cause a Lisp error."
          (let (mod)
            (when (and (string-match "\\\\\"" string)
                       (not (string-match "\\`\"\\|[^\\]\"" string)))
-             (setq string (mm-replace-in-string string "\\\\\"" "\"")
+             (setq string (replace-regexp-in-string "\\\\\"" "\"" string)
                    mod t))
            (when (and (string-match "\\\\(" string)
                       (string-match "\\\\)" string)
                       (not (string-match "\\`(\\|[^\\][()]" string)))
-             (setq string (mm-replace-in-string string "\\\\\\([()]\\)" "\\1")
+             (setq string (replace-regexp-in-string
+                           "\\\\\\([()]\\)" "\\1" string)
                    mod t))
            (or (and mod
                     (ignore-errors
@@ -230,7 +231,7 @@ These look like:
       ;; Decode using the charset, if any.
       (if (memq coding-system '(nil ascii))
          (buffer-string)
-       (mm-decode-coding-string (buffer-string) coding-system)))))
+       (decode-coding-string (buffer-string) coding-system)))))
 
 (defun rfc2231-encode-string (param value)
   "Return and PARAM=VALUE string encoded according to RFC2231.
index 10ba5b380312646efd55d32e50846c1e36b34d5d..734155e217d9118718b47fd84f7b374fd16dcecd 100644 (file)
@@ -40,6 +40,8 @@
 (require 'mail-utils)
 (require 'rfc2047)
 
+(require 'rmail-loaddefs)
+
 (declare-function compilation--message->loc "compile" (cl-x) t)
 (declare-function epa--find-coding-system-for-mime-charset "epa" (mime-charset))
 
@@ -161,7 +163,7 @@ its character representation and its display representation.")
 (put 'rmail-spool-directory 'standard-value
      '((cond ((file-exists-p "/var/mail") "/var/mail/")
             ((file-exists-p "/var/spool/mail") "/var/spool/mail/")
-            ((memq system-type '(hpux usg-unix-v irix)) "/usr/mail/")
+            ((memq system-type '(hpux usg-unix-v)) "/usr/mail/")
             (t "/usr/spool/mail/"))))
 
 ;;;###autoload
@@ -174,7 +176,7 @@ its character representation and its display representation.")
         "/var/mail/")
        ;; Many GNU/Linux systems use this name.
        ((file-exists-p "/var/spool/mail") "/var/spool/mail/")
-       ((memq system-type '(hpux usg-unix-v irix)) "/usr/mail/")
+       ((memq system-type '(hpux usg-unix-v)) "/usr/mail/")
        (t "/usr/spool/mail/")))
   "Name of directory used by system mailer for delivering new mail.
 Its name should end with a slash."
@@ -239,6 +241,7 @@ please report it with \\[report-emacs-bug].")
 (declare-function mail-dont-reply-to "mail-utils" (destinations))
 (declare-function rmail-update-summary "rmailsum" (&rest ignore))
 (declare-function rmail-mime-toggle-hidden "rmailmm" ())
+(declare-function rmail-mime-entity-truncated "rmailmm" (entity))
 
 (defun rmail-probe (prog)
   "Determine what flavor of movemail PROG is.
@@ -4588,6 +4591,7 @@ Argument MIME is non-nil if this is a mime message."
 ;; There doesn't really seem to be an appropriate menu.
 ;; Eg the edit command is not in a menu either.
 
+(defvar rmail-mime-render-html-function) ; defcustom in rmailmm
 (defun rmail-epa-decrypt ()
   "Decrypt GnuPG or OpenPGP armors in current message."
   (interactive)
@@ -4730,227 +4734,6 @@ Argument MIME is non-nil if this is a mime message."
        (setq buffer-file-coding-system rmail-message-encoding))))
 (add-hook 'after-save-hook 'rmail-after-save-hook)
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "rmailedit" "rmailedit.el" "03eb8c36b3c57d58eecedb9eeffa623e")
-;;; Generated autoloads from rmailedit.el
-
-(autoload 'rmail-edit-current-message "rmailedit" "\
-Edit the contents of this message.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailkwd" "rmailkwd.el" "4e1b251929961e2b9d3b126301d697d0")
-;;; Generated autoloads from rmailkwd.el
-
-(autoload 'rmail-add-label "rmailkwd" "\
-Add LABEL to labels associated with current RMAIL message.
-Completes (see `rmail-read-label') over known labels when reading.
-LABEL may be a symbol or string.  Only one label is allowed.
-
-\(fn LABEL)" t nil)
-
-(autoload 'rmail-kill-label "rmailkwd" "\
-Remove LABEL from labels associated with current RMAIL message.
-Completes (see `rmail-read-label') over known labels when reading.
-LABEL may be a symbol or string.  Only one label is allowed.
-
-\(fn LABEL)" t nil)
-
-(autoload 'rmail-read-label "rmailkwd" "\
-Read a label with completion, prompting with PROMPT.
-Completions are chosen from `rmail-label-obarray'.  The default
-is `rmail-last-label', if that is non-nil.  Updates `rmail-last-label'
-according to the choice made, and returns a symbol.
-
-\(fn PROMPT)" nil nil)
-
-(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.
-With prefix argument N moves backward N messages with these labels.
-
-\(fn N LABELS)" t nil)
-
-(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.
-With prefix argument N moves forward N messages with these labels.
-
-\(fn N LABELS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailmm" "rmailmm.el" "7ab6ab96dfdeeec6bc8f4620295b7119")
-;;; Generated autoloads from rmailmm.el
-
-(autoload 'rmail-mime "rmailmm" "\
-Toggle the display of a MIME message.
-
-The actual behavior depends on the value of `rmail-enable-mime'.
-
-If `rmail-enable-mime' is non-nil (the default), this command toggles
-the display of a MIME message between decoded presentation form and
-raw data.  With optional prefix argument ARG, it toggles the display only
-of the MIME entity at point, if there is one.  The optional argument
-STATE forces a particular display state, rather than toggling.
-`raw' forces raw mode, any other non-nil value forces decoded mode.
-
-If `rmail-enable-mime' is nil, this creates a temporary \"*RMAIL*\"
-buffer holding a decoded copy of the message. Inline content-types are
-handled according to `rmail-mime-media-type-handlers-alist'.
-By default, this displays text and multipart messages, and offers to
-download attachments as specified by `rmail-mime-attachment-dirs-alist'.
-The arguments ARG and STATE have no effect in this case.
-
-\(fn &optional ARG STATE)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailmsc" "rmailmsc.el" "471c370ff9f183806c8d749961ec9d79")
-;;; Generated autoloads from rmailmsc.el
-
-(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.
-
-This applies only to the current session.
-
-\(fn FILE-NAME)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailsort" "rmailsort.el" "2c8e39f7bae6fcc465a83ebccd46c8a4")
-;;; Generated autoloads from rmailsort.el
-
-(autoload 'rmail-sort-by-date "rmailsort" "\
-Sort messages of current Rmail buffer by \"Date\" header.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-subject "rmailsort" "\
-Sort messages of current Rmail buffer by \"Subject\" header.
-Ignores any \"Re: \" prefix.  If prefix argument REVERSE is
-non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-author "rmailsort" "\
-Sort messages of current Rmail buffer by author.
-This uses either the \"From\" or \"Sender\" header, downcased.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-recipient "rmailsort" "\
-Sort messages of current Rmail buffer by recipient.
-This uses either the \"To\" or \"Apparently-To\" header, downcased.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-correspondent "rmailsort" "\
-Sort messages of current Rmail buffer by other correspondent.
-This uses either the \"From\", \"Sender\", \"To\", or
-\"Apparently-To\" header, downcased.  Uses the first header not
-excluded by `mail-dont-reply-to-names'.  If prefix argument
-REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-lines "rmailsort" "\
-Sort messages of current Rmail buffer by the number of lines.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-labels "rmailsort" "\
-Sort messages of current Rmail buffer by labels.
-LABELS is a comma-separated list of labels.  The order of these
-labels specifies the order of messages: messages with the first
-label come first, messages with the second label come second, and
-so on.  Messages that have none of these labels come last.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE LABELS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailsum" "rmailsum.el" "8205e67c8188aa5c01715e79e10667c1")
-;;; Generated autoloads from rmailsum.el
-
-(autoload 'rmail-summary "rmailsum" "\
-Display a summary of all messages, one line per message.
-
-\(fn)" t nil)
-
-(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 '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),
- only look in the To and From fields.
-RECIPIENTS is a regular expression.
-
-\(fn RECIPIENTS &optional PRIMARY-ONLY)" t nil)
-
-(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),
-Emacs will list the message in the summary.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'rmail-summary-by-topic "rmailsum" "\
-Display a summary of all messages with the given SUBJECT.
-Normally checks just the Subject field of headers; but with prefix
-argument WHOLE-MESSAGE is non-nil, looks in the whole message.
-SUBJECT is a regular expression.
-
-\(fn SUBJECT &optional WHOLE-MESSAGE)" t nil)
-
-(autoload 'rmail-summary-by-senders "rmailsum" "\
-Display a summary of all messages whose \"From\" field matches SENDERS.
-SENDERS is a regular expression.
-
-\(fn SENDERS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "undigest" "undigest.el" "20561f083496eb113fa9e501902bfcc3")
-;;; Generated autoloads from undigest.el
-
-(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 '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.  This command is only useful when messages are
-forwarded with `rmail-enable-mime-composing' set to nil.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
 
 (provide 'rmail)
 
index 5c29e7ec8bf8980c3ff9d4d2c491e44e1fcedf74..46e5e17a2e8f72b35da47958b02694406a217ad2 100644 (file)
@@ -448,7 +448,7 @@ HEADER-DIFF should be a return value from `rmail-edit-diff-headers'."
 (provide 'rmailedit)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailedit.el ends here
index 0301e5121290fbfa0564db410183cee253b7932d..6581ee628a7077865d1f30dc5dbfcdd4dc0c2f7a 100644 (file)
@@ -192,7 +192,7 @@ With prefix argument N moves forward N messages with these labels."
 (provide 'rmailkwd)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailkwd.el ends here
index 75219747684236cc6ef46f80854e52c740ed3f9d..9343b11806753e92e3e28412bcb99efa64d0cbef 100644 (file)
@@ -1560,7 +1560,7 @@ This is the usual value of `rmail-insert-mime-forwarded-message-function'."
 (provide 'rmailmm)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailmm.el ends here
index 0a76576dfc24600fa67c97dec03583b32c06336d..1185dccf22578581b3759a9f1791e79f0c70dca7 100644 (file)
@@ -55,7 +55,7 @@ This applies only to the current session."
   (rmail-show-message-1 rmail-current-message))
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailmsc.el ends here
index 1eb60c2d547b1ef8e9ebed12c19a00e93e31cae4..60320b929e40855f6ab1cec9b99b7c2fd3f74779 100644 (file)
@@ -251,7 +251,7 @@ Numeric keys are sorted numerically, all others as strings."
 (provide 'rmailsort)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailsort.el ends here
index 52b717fb9d5954df64cb91492a9f3073bc40b124..0a2ca0b803822ba8531011e743f83238f7b072fe 100644 (file)
@@ -1871,7 +1871,7 @@ the summary is only showing a subset of messages."
 (provide 'rmailsum)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailsum.el ends here
index 8e0bb3ae6baecbe864bad2e5d25b5876ed0ef32b..f21b847b49b9f6389ad9743c227b212a62eb0009 100644 (file)
@@ -858,8 +858,6 @@ Returns an error if the server cannot be contacted."
            ;; Send the contents.
            (smtpmail-command-or-throw process "DATA")
            (smtpmail-send-data process smtpmail-text-buffer)
-           ;; DATA end "."
-           (smtpmail-command-or-throw process ".")
            ;; Return success.
            nil))
       (when (and process
@@ -957,10 +955,11 @@ Returns an error if the server cannot be contacted."
   (process-send-string process "\r\n"))
 
 (defun smtpmail-send-data (process buffer)
-  (let ((data-continue t) sending-data
+  (let ((data-continue t)
         (pr (with-current-buffer buffer
               (make-progress-reporter "Sending email "
-                                      (point-min) (point-max)))))
+                                      (point-min) (point-max))))
+        sending-data)
     (with-current-buffer buffer
       (goto-char (point-min)))
     (while data-continue
@@ -970,6 +969,8 @@ Returns an error if the server cannot be contacted."
        (end-of-line 2)
         (setq data-continue (not (eobp))))
       (smtpmail-send-data-1 process sending-data))
+    ;; DATA end "."
+    (smtpmail-command-or-throw process ".")
     (progress-reporter-done pr)))
 
 (defun smtpmail-deduce-address-list (smtpmail-text-buffer header-start header-end)
index 1d0a3718a96a1401b5fee995ebb9744f0e487c6e..54ee99bafb2c885efb4427341bc7676fa6816dce 100644 (file)
@@ -327,7 +327,7 @@ forwarded with `rmail-enable-mime-composing' set to nil."
 (provide 'undigest)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; undigest.el ends here
similarity index 98%
rename from lisp/gnus/yenc.el
rename to lisp/mail/yenc.el
index cfac06d4f19221893dea625f1f5bb658263c8918..a4ebd0db15bf0e1c820fcf2820317b15518439cb 100644 (file)
@@ -90,8 +90,8 @@
                (setq last (match-beginning 0))
                (setq footer-alist (yenc-parse-line (match-string 0)))
                (setq work-buffer (generate-new-buffer " *yenc-work*"))
-               (unless (featurep 'xemacs)
-                 (with-current-buffer work-buffer (set-buffer-multibyte nil)))
+               (with-current-buffer work-buffer
+                 (set-buffer-multibyte nil))
                (while (< first last)
                  (setq char (char-after first))
                  (cond ((or (eq char ?\r)
index 6281d7e5453f0aad6744ea875b1a9e27f948579c..933e2d22f67ce1785d51cccb8faf7bafd97c2dc5 100644 (file)
 (defun clipboard-yank ()
   "Insert the clipboard contents, or the last stretch of killed text."
   (interactive "*")
-  (let ((gui-select-enable-clipboard t))
+  (let ((gui-select-enable-clipboard t)
+        (interprogram-paste-function (or interprogram-paste-function
+                                         #'gui-selection-value)))
     (yank)))
 
 (defun clipboard-kill-ring-save (beg end &optional region)
-  "Copy region to kill ring, and save in the GUI's clipboard."
+  "Copy region to kill ring, and save in the GUI's clipboard.
+If the optional argument REGION is non-nil, the function ignores
+BEG and END, and saves the current region instead."
   (interactive "r\np")
-  (let ((gui-select-enable-clipboard t))
+  (let ((gui-select-enable-clipboard t)
+        (interprogram-cut-function (or interprogram-cut-function
+                                       #'gui-select-text)))
     (kill-ring-save beg end region)))
 
 (defun clipboard-kill-region (beg end &optional region)
-  "Kill the region, and save it in the GUI's clipboard."
+  "Kill the region, and save it in the GUI's clipboard.
+If the optional argument REGION is non-nil, the function ignores
+BEG and END, and kills the current region instead."
   (interactive "r\np")
-  (let ((gui-select-enable-clipboard t))
+  (let ((gui-select-enable-clipboard t)
+        (interprogram-cut-function (or interprogram-cut-function
+                                       #'gui-select-text)))
     (kill-region beg end region)))
 
 (defun menu-bar-enable-clipboard ()
@@ -1577,7 +1587,7 @@ mail status in mode line"))
     (bindings--define-key menu [browse-web]
       '(menu-item "Browse the Web..." browse-web))
     (bindings--define-key menu [directory-search]
-      '(menu-item "Directory Search" eudc-tools-menu))
+      '(menu-item "Directory Servers" eudc-tools-menu))
     (bindings--define-key menu [compose-mail]
       '(menu-item "Compose New Mail" compose-mail
                   :visible (and mail-user-agent (not (eq mail-user-agent 'ignore)))
index 4e64cfb12d329c0fcdab9845d2f08ec4b2d588fa..72980b7ead82bf337ce67387f30b969f916b54a8 100644 (file)
@@ -916,14 +916,14 @@ CONFIG is the window configuration before sending mail."
   ;; use it as the drafts folder.  Then copy the skeleton to a regular
   ;; temp file, and return the regular temp file.
   (let (new
-        (temp-folder (mm-make-temp-file
+        (temp-folder (make-temp-file
                       (concat mh-user-path "draftfolder.") t)))
     (mh-exec-cmd "comp" "-nowhatnowproc"
                  "-draftfolder" (format "+%s"
                                         (file-name-nondirectory temp-folder))
                  (if (stringp mh-comp-formfile)
                      (list "-form" mh-comp-formfile)))
-    (setq new (mm-make-temp-file "comp."))
+    (setq new (make-temp-file "comp."))
     (rename-file (concat temp-folder "/" "1") new t)
     (delete-file (concat temp-folder "/" ".mh_sequences"))
     (delete-directory temp-folder)
index c900248c9b682ca153a6bc2d783d0093f065f9e0..20029f8e0b5c23bcbf4a50967c7a27452e4a6b0a 100644 (file)
@@ -5,7 +5,7 @@
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
-;; Version: 8.6
+;; Version: 8.6+git
 ;; Keywords: mail
 
 ;; This file is part of GNU Emacs.
 ;; 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.6" "Version number of MH-E.")
+(defconst mh-version "8.6+git" "Version number of MH-E.")
 
 ;; Variants
 
index 6540059b965a6f58aa660ab444e19736859a9659..1ee05d32de5bc484028bd9dca78c7cec8ddb99e4 100644 (file)
@@ -369,13 +369,15 @@ instead of a string, a function that takes the completion and returns the
 
 (defun completion-table-with-predicate (table pred1 strict string pred2 action)
   "Make a completion table equivalent to TABLE but filtered through PRED1.
-PRED1 is a function of one argument which returns non-nil if and only if the
-argument is an element of TABLE which should be considered for completion.
-STRING, PRED2, and ACTION are the usual arguments to completion tables,
-as described in `try-completion', `all-completions', and `test-completion'.
-If STRICT is t, the predicate always applies; if nil it only applies if
-it does not reduce the set of possible completions to nothing.
-Note: TABLE needs to be a proper completion table which obeys predicates."
+PRED1 is a function of one argument which returns non-nil if and
+only if the argument is an element of TABLE which should be
+considered for completion.  STRING, PRED2, and ACTION are the
+usual arguments to completion tables, as described in
+`try-completion', `all-completions', and `test-completion'.  If
+STRICT is non-nil, the predicate always applies; if nil it only
+applies if it does not reduce the set of possible completions to
+nothing.  Note: TABLE needs to be a proper completion table which
+obeys predicates."
   (cond
    ((and (not strict) (eq action 'lambda))
     ;; Ignore pred1 since it doesn't really have to apply anyway.
index fa355ffeb71e605f7577d2f1a7b865d17ef0892a..e5e111054e1d28ddacbd26aaf805c81683b55e28 100644 (file)
@@ -155,7 +155,7 @@ items `Turn Off' and `Help'."
               (if (fboundp mm-fun)      ; bug#20201
                   `(keymap
                     ,indicator
-                    (turn-off menu-item "Turn Off minor mode" ,mm-fun)
+                    (turn-off menu-item "Turn off minor mode" ,mm-fun)
                     (help menu-item "Help for minor mode"
                           (lambda () (interactive)
                             (describe-function ',mm-fun)))))))
index 20e4bc85d85249a2612723827ec453778e87c9cb..aa7fee6adb61ea38069057b0e668f86623a2cfc8 100644 (file)
@@ -265,10 +265,7 @@ defaults to 6600 and HOST defaults to localhost."
       (let ((v (match-string 3 host)))
         (setq host (match-string 2 host))
         (when (and (stringp v) (not (string= "" v)))
-          (setq port
-                (if (string-match "[^[:digit:]]" v)
-                    (string-to-number v)
-                  v)))))
+          (setq port v))))
     (when (file-name-absolute-p host)
       ;; Expand file name because `file-name-absolute-p'
       ;; considers paths beginning with "~" as absolute
index f1450d470fcdb4848ff74b0a122fb96c47900e1c..9e03854fd11668455515306647a57f66ba1a11b2 100644 (file)
@@ -187,7 +187,8 @@ This can be slightly disconcerting, but some people prefer it."
 
 (defun mwheel-scroll (event)
   "Scroll up or down according to the EVENT.
-This should only be bound to mouse buttons 4 and 5."
+This should be bound only to mouse buttons 4 and 5 on non-Windows
+systems."
   (interactive (list last-input-event))
   (let* ((curwin (if mouse-wheel-follow-mouse
                      (prog1
index 867bea98e771101f478a948879af93332dd9ceca..22e48dbd3d3175ac6b32c8cf73fc978c2312e918 100644 (file)
@@ -1146,7 +1146,7 @@ queries the server for the existing fields and displays a corresponding form."
 
 (defun eudc-menu ()
   (let (command)
-    (append '("Directory Search")
+    (append '("Directory Servers")
            (list
             (append
              '("Server")
@@ -1186,8 +1186,8 @@ queries the server for the existing fields and displays a corresponding form."
       (define-key
        global-map
        [menu-bar tools directory-search]
-       (cons "Directory Search"
-             (easy-menu-create-menu "Directory Search" (cdr (eudc-menu))))))
+       (cons "Directory Servers"
+             (easy-menu-create-menu "Directory Servers" (cdr (eudc-menu))))))
      ((fboundp 'easy-menu-add-item)
       (let ((menu (eudc-menu)))
        (easy-menu-add-item nil '("tools") (easy-menu-create-menu (car menu)
@@ -1197,8 +1197,9 @@ queries the server for the existing fields and displays a corresponding form."
       (define-key
        global-map
        [menu-bar tools eudc]
-       (cons "Directory Search"
-             (easy-menu-create-keymaps "Directory Search" (cdr (eudc-menu))))))
+       (cons "Directory Servers"
+             (easy-menu-create-keymaps "Directory Servers"
+                                        (cdr (eudc-menu))))))
      (t
       (error "Unknown version of easymenu"))))
    ))
@@ -1231,7 +1232,7 @@ This does nothing except loading eudc by autoload side-effect."
 (cond
  ((not (featurep 'xemacs))
   (defvar eudc-tools-menu
-    (let ((map (make-sparse-keymap "Directory Search")))
+    (let ((map (make-sparse-keymap "Directory Servers")))
       (define-key map [phone]
        `(menu-item ,(purecopy "Get Phone") eudc-get-phone
                    :help ,(purecopy "Get the phone field of name from the directory server")))
@@ -1255,7 +1256,7 @@ This does nothing except loading eudc by autoload side-effect."
       map))
   (fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu)))
  (t
-  (let ((menu  '("Directory Search"
+  (let ((menu  '("Directory Servers"
                 ["Load Hotlist of Servers" eudc-load-eudc t]
                 ["New Server" eudc-set-server t]
                 ["---" nil nil]
@@ -1279,8 +1280,8 @@ This does nothing except loading eudc by autoload side-effect."
            (define-key
              global-map
              [menu-bar tools eudc]
-             (cons "Directory Search"
-                   (easy-menu-create-keymaps "Directory Search"
+             (cons "Directory Servers"
+                   (easy-menu-create-keymaps "Directory Servers"
                                              (cdr menu)))))))))))
 
 ;;}}}
index 620a8a5f9acfb3a6041af7e47b83356e4ea275cd..34cb02c24ac16851796f62f3834f6c07c03d0e66 100644 (file)
@@ -31,6 +31,7 @@
 (require 'url-queue)
 (require 'url-util)                    ; for url-get-url-at-point
 (require 'mm-url)
+(require 'puny)
 (eval-when-compile (require 'subr-x)) ;; for string-trim
 
 (defgroup eww nil
@@ -222,7 +223,7 @@ See also `eww-form-checkbox-selected-symbol'."
   "When this regex is found in the URL, it's not a keyword but an address.")
 
 (defvar eww-link-keymap
-  (let ((map (copy-keymap shr-map)))
+  (let ((map (copy-keymap shr-image-map)))
     (define-key map "\r" 'eww-follow-link)
     map))
 
@@ -279,6 +280,13 @@ word(s) will be searched for via `eww-search-prefix'."
        (current-buffer)
      (get-buffer-create "*eww*")))
   (eww-setup-buffer)
+  ;; Check whether the domain only uses "Highly Restricted" Unicode
+  ;; IDNA characters.  If not, transform to punycode to indicate that
+  ;; there may be funny business going on.
+  (let ((parsed (url-generic-parse-url url)))
+    (unless (puny-highly-restrictive-domain-p (url-host parsed))
+      (setf (url-host parsed) (puny-encode-domain (url-host parsed)))
+      (setq url (url-recreate-url parsed))))
   (plist-put eww-data :url url)
   (plist-put eww-data :title "")
   (eww-update-header-line-format)
@@ -410,7 +418,7 @@ Currently this means either text/html or application/xhtml+xml."
        (source (and (null document)
                     (buffer-substring (point) (point-max)))))
     (with-current-buffer buffer
-      (setq bidi-paragraph-direction 'left-to-right)
+      (setq bidi-paragraph-direction nil)
       (plist-put eww-data :source source)
       (plist-put eww-data :dom document)
       (let ((inhibit-read-only t)
@@ -418,9 +426,11 @@ Currently this means either text/html or application/xhtml+xml."
            (shr-target-id (url-target (url-generic-parse-url url)))
            (shr-external-rendering-functions
              (append
+              shr-external-rendering-functions
               '((title . eww-tag-title)
                 (form . eww-tag-form)
                 (input . eww-tag-input)
+                (button . eww-form-submit)
                 (textarea . eww-tag-textarea)
                 (select . eww-tag-select)
                 (link . eww-tag-link)
@@ -570,7 +580,7 @@ Currently this means either text/html or application/xhtml+xml."
   (let ((inhibit-read-only t))
     (remove-overlays)
     (erase-buffer))
-  (setq bidi-paragraph-direction 'left-to-right)
+  (setq bidi-paragraph-direction nil)
   (unless (eq major-mode 'eww-mode)
     (eww-mode)))
 
@@ -703,9 +713,11 @@ the like."
     (define-key map "R" 'eww-readable)
     (define-key map "H" 'eww-list-histories)
     (define-key map "E" 'eww-set-character-encoding)
+    (define-key map "s" 'eww-switch-to-buffer)
     (define-key map "S" 'eww-list-buffers)
     (define-key map "F" 'eww-toggle-fonts)
     (define-key map "D" 'eww-toggle-paragraph-direction)
+    (define-key map [(meta C)] 'eww-toggle-colors)
 
     (define-key map "b" 'eww-add-bookmark)
     (define-key map "B" 'eww-list-bookmarks)
@@ -726,10 +738,13 @@ the like."
        ["View page source" eww-view-source]
        ["Copy page URL" eww-copy-page-url t]
        ["List histories" eww-list-histories t]
+       ["Switch to buffer" eww-switch-to-buffer t]
        ["List buffers" eww-list-buffers t]
        ["Add bookmark" eww-add-bookmark t]
        ["List bookmarks" eww-list-bookmarks t]
        ["List cookies" url-cookie-list t]
+       ["Toggle fonts" eww-toggle-fonts t]
+       ["Toggle colors" eww-toggle-colors t]
         ["Character Encoding" eww-set-character-encoding]
         ["Toggle Paragraph Direction" eww-toggle-paragraph-direction]))
     map))
@@ -1516,6 +1531,24 @@ If CHARSET is nil then use UTF-8."
       (eww-reload nil 'utf-8)
     (eww-reload nil charset)))
 
+(defun eww-switch-to-buffer ()
+  "Prompt for an EWW buffer to display in the selected window."
+  (interactive)
+  (let ((completion-extra-properties
+         '(:annotation-function (lambda (buf)
+                                  (with-current-buffer buf
+                                    (format " %s" (eww-current-url)))))))
+    (pop-to-buffer-same-window
+     (read-buffer "Switch to EWW buffer: "
+                  (cl-loop for buf in (nreverse (buffer-list))
+                           if (with-current-buffer buf (derived-mode-p 'eww-mode))
+                           return buf)
+                  t
+                  (lambda (bufn)
+                    (with-current-buffer
+                        (if (consp bufn) (cdr bufn) (get-buffer bufn))
+                      (derived-mode-p 'eww-mode)))))))
+
 (defun eww-toggle-fonts ()
   "Toggle whether to use monospaced or font-enabled layouts."
   (interactive)
@@ -1524,6 +1557,15 @@ If CHARSET is nil then use UTF-8."
   (message "Proportional fonts are now %s"
            (if shr-use-fonts "on" "off")))
 
+(defun eww-toggle-colors ()
+  "Toggle whether to use HTML-specified colors or not."
+  (interactive)
+  (message "Colors are now %s"
+          (if (setq shr-use-colors (not shr-use-colors))
+              "on"
+            "off"))
+  (eww-reload))
+
 ;;; Bookmarks code
 
 (defvar eww-bookmarks nil)
index ce44c032231d1758ecb2aa1bcebdd6e2884344a7..9ed1c8b830539f0e2399d033f5842bf2a00aba90 100644 (file)
@@ -26,7 +26,7 @@
 
 ;; This package provides language bindings for the GnuTLS library
 ;; using the corresponding core functions in gnutls.c.  It should NOT
-;; be used directly, only through open-protocol-stream.
+;; be used directly, only through open-network-stream.
 
 ;; Simple test:
 ;;
@@ -95,7 +95,7 @@ A value of nil says to use the default GnuTLS value."
                  (integer :tag "Number of bits" 512))
   :group 'gnutls)
 
-(defun open-gnutls-stream (name buffer host service)
+(defun open-gnutls-stream (name buffer host service &optional nowait)
   "Open a SSL/TLS connection for a service to a host.
 Returns a subprocess-object to represent the connection.
 Input and output work as for subprocesses; `delete-process' closes it.
@@ -109,6 +109,9 @@ BUFFER is the buffer (or `buffer-name') to associate with the process.
 Third arg is name of the host to connect to, or its IP address.
 Fourth arg SERVICE is name of the service desired, or an integer
 specifying a port number to connect to.
+Fifth arg NOWAIT (which is optional) means that the socket should
+be opened asynchronously.  The connection process will be
+returned to the caller before TLS negotiation has happened.
 
 Usage example:
 
@@ -122,9 +125,20 @@ This is a very simple wrapper around `gnutls-negotiate'.  See its
 documentation for the specific parameters you can use to open a
 GnuTLS connection, including specifying the credential type,
 trust and key files, and priority string."
-  (gnutls-negotiate :process (open-network-stream name buffer host service)
-                    :type 'gnutls-x509pki
-                    :hostname host))
+  (let ((process (open-network-stream
+                  name buffer host service
+                  :nowait nowait
+                  :tls-parameters
+                  (and nowait
+                       (cons 'gnutls-x509pki
+                             (gnutls-boot-parameters
+                              :type 'gnutls-x509pki
+                              :hostname host))))))
+    (if nowait
+        process
+      (gnutls-negotiate :process process
+                        :type 'gnutls-x509pki
+                        :hostname host))))
 
 (define-error 'gnutls-error "GnuTLS error")
 
@@ -140,10 +154,47 @@ trust and key files, and priority string."
            &allow-other-keys)
   "Negotiate a SSL/TLS connection.  Returns proc.  Signals gnutls-error.
 
-Note arguments are passed CL style, :type TYPE instead of just TYPE.
+Note that arguments are passed CL style, :type TYPE instead of just TYPE.
 
-TYPE is `gnutls-x509pki' (default) or `gnutls-anon'.  Use nil for the default.
 PROCESS is a process returned by `open-network-stream'.
+For the meaning of the rest of the parameters, see `gnutls-boot-parameters'."
+  (let* ((type (or type 'gnutls-x509pki))
+        ;; The gnutls library doesn't understand files delivered via
+        ;; the special handlers, so ignore all files found via those.
+        (file-name-handler-alist nil)
+         (params (gnutls-boot-parameters
+                  :type type
+                  :hostname hostname
+                  :priority-string priority-string
+                  :trustfiles trustfiles
+                  :crlfiles crlfiles
+                  :keylist keylist
+                  :min-prime-bits min-prime-bits
+                  :verify-flags verify-flags
+                  :verify-error verify-error
+                  :verify-hostname-error verify-hostname-error))
+         ret)
+    (gnutls-message-maybe
+     (setq ret (gnutls-boot process type
+                            (append (list :complete-negotiation t)
+                                    params)))
+     "boot: %s" params)
+
+    (when (gnutls-errorp ret)
+      ;; This is a error from the underlying C code.
+      (signal 'gnutls-error (list process ret)))
+
+    process))
+
+(cl-defun gnutls-boot-parameters
+    (&rest spec
+           &key type hostname priority-string
+           trustfiles crlfiles keylist min-prime-bits
+           verify-flags verify-error verify-hostname-error
+           &allow-other-keys)
+  "Return a keyword list of parameters suitable for passing to `gnutls-boot'.
+
+TYPE is `gnutls-x509pki' (default) or `gnutls-anon'.  Use nil for the default.
 HOSTNAME is the remote hostname.  It must be a valid string.
 PRIORITY-STRING is as per the GnuTLS docs, default is \"NORMAL\".
 TRUSTFILES is a list of CA bundles.  It defaults to `gnutls-trustfiles'.
@@ -189,62 +240,47 @@ here's a recent version of the list.
 
 It must be omitted, a number, or nil; if omitted or nil it
 defaults to GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT."
-  (let* ((type (or type 'gnutls-x509pki))
-        ;; The gnutls library doesn't understand files delivered via
-        ;; the special handlers, so ignore all files found via those.
-        (file-name-handler-alist nil)
-         (trustfiles (or trustfiles (gnutls-trustfiles)))
-         (priority-string (or priority-string
-                              (cond
-                               ((eq type 'gnutls-anon)
-                                "NORMAL:+ANON-DH:!ARCFOUR-128")
-                               ((eq type 'gnutls-x509pki)
-                                (if gnutls-algorithm-priority
-                                    (upcase gnutls-algorithm-priority)
-                                  "NORMAL")))))
-         (verify-error (or verify-error
-                           ;; this uses the value of `gnutls-verify-error'
-                           (cond
-                            ;; if t, pass it on
-                            ((eq gnutls-verify-error t)
-                             t)
-                            ;; if a list, look for hostname matches
-                            ((listp gnutls-verify-error)
-                             (apply 'append
-                                    (mapcar
-                                     (lambda (check)
-                                       (when (string-match (nth 0 check)
-                                                           hostname)
-                                         (nth 1 check)))
-                                     gnutls-verify-error)))
-                            ;; else it's nil
-                            (t nil))))
-         (min-prime-bits (or min-prime-bits gnutls-min-prime-bits))
-         params ret)
+  (let ((trustfiles (or trustfiles (gnutls-trustfiles)))
+        (priority-string (or priority-string
+                             (cond
+                              ((eq type 'gnutls-anon)
+                               "NORMAL:+ANON-DH:!ARCFOUR-128")
+                              ((eq type 'gnutls-x509pki)
+                               (if gnutls-algorithm-priority
+                                   (upcase gnutls-algorithm-priority)
+                                 "NORMAL")))))
+        (verify-error (or verify-error
+                          ;; this uses the value of `gnutls-verify-error'
+                          (cond
+                           ;; if t, pass it on
+                           ((eq gnutls-verify-error t)
+                            t)
+                           ;; if a list, look for hostname matches
+                           ((listp gnutls-verify-error)
+                            (apply 'append
+                                   (mapcar
+                                    (lambda (check)
+                                      (when (string-match (nth 0 check)
+                                                          hostname)
+                                        (nth 1 check)))
+                                    gnutls-verify-error)))
+                           ;; else it's nil
+                           (t nil))))
+        (min-prime-bits (or min-prime-bits gnutls-min-prime-bits)))
 
     (when verify-hostname-error
       (push :hostname verify-error))
 
-    (setq params `(:priority ,priority-string
-                             :hostname ,hostname
-                             :loglevel ,gnutls-log-level
-                             :min-prime-bits ,min-prime-bits
-                             :trustfiles ,trustfiles
-                             :crlfiles ,crlfiles
-                             :keylist ,keylist
-                             :verify-flags ,verify-flags
-                             :verify-error ,verify-error
-                             :callbacks nil))
-
-    (gnutls-message-maybe
-     (setq ret (gnutls-boot process type params))
-     "boot: %s" params)
-
-    (when (gnutls-errorp ret)
-      ;; This is a error from the underlying C code.
-      (signal 'gnutls-error (list process ret)))
-
-    process))
+    `(:priority ,priority-string
+                :hostname ,hostname
+                :loglevel ,gnutls-log-level
+                :min-prime-bits ,min-prime-bits
+                :trustfiles ,trustfiles
+                :crlfiles ,crlfiles
+                :keylist ,keylist
+                :verify-flags ,verify-flags
+                :verify-error ,verify-error
+                :callbacks nil)))
 
 (defun gnutls-trustfiles ()
   "Return a list of usable trustfiles."
similarity index 100%
rename from lisp/gnus/html2text.el
rename to lisp/net/html2text.el
similarity index 87%
rename from lisp/gnus/mailcap.el
rename to lisp/net/mailcap.el
index bf7ba0817ea1fda558d627a4b770e21a22018285..ae49972f5bfcb26980024588e9243c7262b056ad 100644 (file)
 (eval-when-compile (require 'cl))
 (autoload 'mail-header-parse-content-type "mail-parse")
 
-;; `mm-delete-duplicates' is an alias for `delete-dups' in Emacs 22.
-(defalias 'mailcap-delete-duplicates
-  (if (fboundp 'delete-dups)
-      'delete-dups
-    (autoload 'mm-delete-duplicates "mm-util")
-    'mm-delete-duplicates))
-
-;; `mailcap-replace-in-string' is an alias like `gnus-replace-in-string'.
-(eval-and-compile
-  (cond
-   ((fboundp 'replace-regexp-in-string)
-    (defun mailcap-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)))
-   ((fboundp 'replace-in-string)
-    (defalias 'mailcap-replace-in-string 'replace-in-string))))
-
 (defgroup mailcap nil
   "Definition of viewers for MIME types."
   :version "21.1"
@@ -66,12 +46,6 @@ This is a compatibility function for different Emacsen."
     table)
   "A syntax table for parsing SGML attributes.")
 
-(eval-and-compile
-  (when (featurep 'xemacs)
-    (condition-case nil
-       (require 'lpr)
-      (error nil))))
-
 (defvar mailcap-print-command
   (mapconcat 'identity
             (cons (if (boundp 'lpr-command)
@@ -84,6 +58,59 @@ This is a compatibility function for different Emacsen."
             " ")
   "Shell command (including switches) used to print PostScript files.")
 
+(defun mailcap--get-user-mime-data (sym)
+  (let ((val (default-value sym))
+       res)
+    (dolist (entry val)
+      (setq res (cons (list (cdr (assq 'viewer entry))
+                           (cdr (assq 'type entry))
+                           (cdr (assq 'test entry)))
+                     res)))
+    (nreverse res)))
+
+(defun mailcap--set-user-mime-data (sym val)
+  (let (res)
+    (dolist (entry val)
+      (setq res (cons `((viewer . ,(car entry))
+                       (type . ,(cadr entry))
+                       ,@(when (caddr entry)
+                           `((test . ,(caddr entry)))))
+                     res)))
+    (set-default sym (nreverse res))))
+
+(defcustom mailcap-user-mime-data nil
+  "A list of viewers preferred for different MIME types.
+The elements of the list are alists of the following structure
+
+  ((viewer . VIEWER)
+   (type   . MIME-TYPE)
+   (test   . TEST))
+
+where VIEWER is either a lisp command, e.g., a major-mode, or a
+string containing a shell command for viewing files of the
+defined MIME-TYPE.  In case of a shell command, %s will be
+replaced with the file.
+
+MIME-TYPE is a regular expression being matched against the
+actual MIME type.  It is implicitly surrounded with ^ and $.
+
+TEST is an lisp form which is evaluated in order to test if the
+entry should be chosen.  The `test' entry is optional.
+
+When selecting a viewer for a given MIME type, the first viewer
+in this list with a matching MIME-TYPE and successful TEST is
+selected.  Only if none matches, the standard `mailcap-mime-data'
+is consulted."
+  :type '(repeat
+         (list
+          (choice (function :tag "Function or mode")
+                  (string :tag "Shell command"))
+          (regexp :tag "MIME Type")
+          (sexp :tag "Test (optional)")))
+  :get #'mailcap--get-user-mime-data
+  :set #'mailcap--set-user-mime-data
+  :group 'mailcap)
+
 ;; Postpone using defcustom for this as it's so big and we essentially
 ;; have to have two copies of the data around then.  Perhaps just
 ;; customize the Lisp viewers and rely on the normal configuration
@@ -726,6 +753,20 @@ If TEST is not given, it defaults to t."
       t)
      (t nil))))
 
+(defun mailcap-select-preferred-viewer (type-info)
+  "Return an applicable viewer entry from `mailcap-user-mime-data'."
+  (let ((info (mapcar (lambda (a) (cons (symbol-name (car a))
+                                   (cdr a)))
+                      (cdr type-info)))
+        viewer)
+    (dolist (entry mailcap-user-mime-data)
+      (when (and (null viewer)
+                 (string-match (concat "^" (cdr (assq 'type entry)) "$")
+                               (car type-info))
+                 (mailcap-viewer-passes-test entry info))
+        (setq viewer entry)))
+    viewer))
+
 (defun mailcap-mime-info (string &optional request no-decode)
   "Get the MIME viewer command for STRING, return nil if none found.
 Expects a complete content-type header line as its argument.
@@ -758,41 +799,47 @@ If NO-DECODE is non-nil, don't decode STRING."
            (if no-decode
                (list (or string "text/plain"))
              (mail-header-parse-content-type (or string "text/plain"))))
-      (setq major (split-string (car ctl) "/"))
-      (setq minor (cadr major)
-           major (car major))
-      (when (setq major-info (cdr (assoc major mailcap-mime-data)))
-       (when (setq viewers (mailcap-possible-viewers major-info minor))
-         (setq info (mapcar (lambda (a) (cons (symbol-name (car a))
-                                              (cdr a)))
-                            (cdr ctl)))
-         (while viewers
-           (if (mailcap-viewer-passes-test (car viewers) info)
-               (setq passed (cons (car viewers) passed)))
-           (setq viewers (cdr viewers)))
-         (setq passed (sort passed 'mailcap-viewer-lessp))
-         (setq viewer (car passed))))
-      (when (and (stringp (cdr (assq 'viewer viewer)))
-                passed)
-       (setq viewer (car passed)))
+      ;; Check if there's a user-defined viewer from `mailcap-user-mime-data'.
+      (setq viewer (mailcap-select-preferred-viewer ctl))
+      (if viewer
+          (setq passed (list viewer))
+        ;; None found, so heuristically select some applicable viewer
+        ;; from `mailcap-mime-data'.
+        (setq major (split-string (car ctl) "/"))
+        (setq minor (cadr major)
+              major (car major))
+        (when (setq major-info (cdr (assoc major mailcap-mime-data)))
+          (when (setq viewers (mailcap-possible-viewers major-info minor))
+            (setq info (mapcar (lambda (a) (cons (symbol-name (car a))
+                                            (cdr a)))
+                               (cdr ctl)))
+            (while viewers
+              (if (mailcap-viewer-passes-test (car viewers) info)
+                  (setq passed (cons (car viewers) passed)))
+              (setq viewers (cdr viewers)))
+            (setq passed (sort passed 'mailcap-viewer-lessp))
+            (setq viewer (car passed))))
+        (when (and (stringp (cdr (assq 'viewer viewer)))
+                   passed)
+          (setq viewer (car passed))))
       (cond
        ((and (null viewer) (not (equal major "default")) request)
-       (mailcap-mime-info "default" request no-decode))
+        (mailcap-mime-info "default" request no-decode))
        ((or (null request) (equal request ""))
-       (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info))
+        (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info))
        ((stringp request)
-       (mailcap-unescape-mime-test
-        (cdr-safe (assoc request viewer)) info))
+        (mailcap-unescape-mime-test
+         (cdr-safe (assoc request viewer)) info))
        ((eq request 'all)
-       passed)
+        passed)
        (t
-       ;; MUST make a copy *sigh*, else we modify mailcap-mime-data
-       (setq viewer (copy-sequence viewer))
-       (let ((view (assq 'viewer viewer))
-             (test (assq 'test viewer)))
-         (if view (setcdr view (mailcap-unescape-mime-test (cdr view) info)))
-         (if test (setcdr test (mailcap-unescape-mime-test (cdr test) info))))
-       viewer)))))
+        ;; MUST make a copy *sigh*, else we modify mailcap-mime-data
+        (setq viewer (copy-sequence viewer))
+        (let ((view (assq 'viewer viewer))
+              (test (assq 'test viewer)))
+          (if view (setcdr view (mailcap-unescape-mime-test (cdr view) info)))
+          (if test (setcdr test (mailcap-unescape-mime-test (cdr test) info))))
+        viewer)))))
 
 ;;;
 ;;; Experimental MIME-types parsing
@@ -993,7 +1040,7 @@ If FORCE, re-parse even if already parsed."
 (defun mailcap-mime-types ()
   "Return a list of MIME media types."
   (mailcap-parse-mimetypes)
-  (mailcap-delete-duplicates
+  (delete-dups
    (nconc
     (mapcar 'cdr mailcap-mime-extensions)
     (apply
@@ -1021,14 +1068,14 @@ If FORCE, re-parse even if already parsed."
   (mailcap-parse-mimetypes)
   (let* ((all-mime-type
          ;; All unique MIME types from file extensions
-         (mailcap-delete-duplicates
+         (delete-dups
           (mapcar (lambda (file)
                     (mailcap-extension-to-mime
                      (file-name-extension file t)))
                   files)))
         (all-mime-info
          ;; All MIME info lists
-         (mailcap-delete-duplicates
+         (delete-dups
           (mapcar (lambda (mime-type)
                     (mailcap-mime-info mime-type 'all))
                   all-mime-type)))
@@ -1046,17 +1093,20 @@ If FORCE, re-parse even if already parsed."
            (car all-mime-info)))
         (commands
          ;; Command strings from `viewer' field of the MIME info
-         (mailcap-delete-duplicates
-          (delq nil (mapcar (lambda (mime-info)
-                              (let ((command (cdr (assoc 'viewer mime-info))))
-                                (if (stringp command)
-                                    (mailcap-replace-in-string
-                                     ;; Replace mailcap's `%s' placeholder
-                                     ;; with dired's `?' placeholder
-                                     (mailcap-replace-in-string
-                                      ;; Remove the final filename placeholder
-                                      command "[ \t\n]*\\('\\)?%s\\1?[ \t\n]*\\'" "" t)
-                                     "%s" "?" t))))
+         (delete-dups
+          (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
+                               "[ \t\n]*\\('\\)?%s\\1?[ \t\n]*\\'" ""
+                               command nil t)
+                              nil t))))
                             common-mime-info)))))
     commands))
 
index 8029e2ca70a17115426ef14b2ce4cae7eebadb4f..b13bece391206d6b82e896cfb7565d31652f3ebd 100644 (file)
@@ -79,7 +79,7 @@
 ;; On GNU/Linux and Irix, the system's ping program seems to send packets
 ;; indefinitely unless told otherwise
 (defcustom ping-program-options
-  (and (memq system-type '(gnu/linux irix))
+  (and (eq system-type 'gnu/linux)
        (list "-c" "4"))
   "Options for the ping program.
 These options can be used to limit how many ICMP packets are emitted."
index 11885987ba56528e3fc29b868d5d92f1daeab890..c2845d96a5db788319a60e63b84fc2e6097a5c56 100644 (file)
@@ -46,6 +46,7 @@
 (require 'starttls)
 (require 'auth-source)
 (require 'nsm)
+(require 'puny)
 
 (autoload 'gnutls-negotiate "gnutls")
 (autoload 'open-gnutls-stream "gnutls")
@@ -64,8 +65,8 @@ BUFFER is a buffer or buffer name to associate with the process.
  Process output goes at end of that buffer.  BUFFER may be nil,
  meaning that the process is not associated with any buffer.
 HOST is the name or IP address of the host to connect to.
-SERVICE is the name of the service desired, or an integer specifying
- a port number to connect to.
+SERVICE is the name of the service desired, or an integer or
integer string specifying a port number to connect to.
 
 The remaining PARAMETERS should be a sequence of keywords and
 values:
@@ -135,8 +136,14 @@ non-nil, is used warn the user if the connection isn't encrypted.
 :nogreeting is a boolean that can be used to inhibit waiting for
 a greeting from the server.
 
-:nowait is a boolean that says the connection should be made
-asynchronously, if possible."
+:nowait, if non-nil, says the connection should be made
+asynchronously, if possible.
+
+:tls-parameters is a list that should be supplied if you're
+opening a TLS connection.  The first element is the TLS
+type (either `gnutls-x509pki' or `gnutls-anon'), and the
+remaining elements should be a keyword list accepted by
+gnutls-boot (as returned by `gnutls-boot-parameters')."
   (unless (featurep 'make-network-process)
     (error "Emacs was compiled without networking support"))
   (let ((type (plist-get parameters :type))
@@ -148,8 +155,10 @@ asynchronously, if possible."
                                (plist-get parameters :capability-command))))))
        ;; The simplest case: wrapper around `make-network-process'.
        (make-network-process :name name :buffer buffer
-                             :host host :service service
-                             :nowait (plist-get parameters :nowait))
+                             :host (puny-encode-domain host) :service service
+                             :nowait (plist-get parameters :nowait)
+                              :tls-parameters
+                              (plist-get parameters :tls-parameters))
       (let ((work-buffer (or buffer
                             (generate-new-buffer " *stream buffer*")))
            (fun (cond ((and (eq type 'plain)
@@ -194,11 +203,14 @@ asynchronously, if possible."
 
 ;;;###autoload
 (defalias 'open-protocol-stream 'open-network-stream)
+(define-obsolete-function-alias 'open-protocol-stream 'open-network-stream
+  "25.2")
 
 (defun network-stream-open-plain (name buffer host service parameters)
   (let ((start (with-current-buffer buffer (point)))
        (stream (make-network-process :name name :buffer buffer
-                                     :host host :service service
+                                     :host (puny-encode-domain host)
+                                      :service service
                                      :nowait (plist-get parameters :nowait))))
     (when (plist-get parameters :warn-unless-encrypted)
       (setq stream (nsm-verify-connection stream host service nil t)))
@@ -219,7 +231,8 @@ asynchronously, if possible."
                                 eoc))
         ;; Return (STREAM GREETING CAPABILITIES RESULTING-TYPE)
         (stream (make-network-process :name name :buffer buffer
-                                      :host host :service service))
+                                      :host (puny-encode-domain host)
+                                       :service service))
         (greeting (and (not (plist-get parameters :nogreeting))
                        (network-stream-get-response stream start eoc)))
         (capabilities (network-stream-command stream capability-command
@@ -296,8 +309,12 @@ asynchronously, if possible."
          (unless require-tls
            (setq stream
                  (make-network-process :name name :buffer buffer
-                                       :host host :service service))
+                                       :host (puny-encode-domain host)
+                                        :service service))
            (network-stream-get-response stream start eoc)))
+        (unless (process-live-p stream)
+          (error "Unable to negotiate a TLS connection with %s/%s"
+                 host service))
        ;; Re-get the capabilities, which may have now changed.
        (setq capabilities
              (network-stream-command stream capability-command eo-capa))))
@@ -355,32 +372,34 @@ asynchronously, if possible."
   (with-current-buffer buffer
     (let* ((start (point-max))
           (stream
-           (funcall (if (gnutls-available-p)
-                        'open-gnutls-stream
-                      'open-tls-stream)
-                    name buffer host service))
+            (if (gnutls-available-p)
+                (open-gnutls-stream name buffer host service
+                                    (plist-get parameters :nowait))
+              (open-tls-stream name buffer host service)))
           (eoc (plist-get parameters :end-of-command)))
-      ;; Check certificate validity etc.
-      (when (and (gnutls-available-p) stream)
-       (setq stream (nsm-verify-connection stream host service)))
-      (if (null stream)
-         (list nil nil nil 'plain)
-       ;; If we're using tls.el, we have to delete the output from
-       ;; openssl/gnutls-cli.
-       (when (and (not (gnutls-available-p))
-                  eoc)
-         (network-stream-get-response stream start eoc)
-         (goto-char (point-min))
-         (when (re-search-forward eoc nil t)
-           (goto-char (match-beginning 0))
-           (delete-region (point-min) (line-beginning-position))))
-       (let ((capability-command (plist-get parameters :capability-command))
-             (eo-capa (or (plist-get parameters :end-of-capability)
-                          eoc)))
-         (list stream
-               (network-stream-get-response stream start eoc)
-               (network-stream-command stream capability-command eo-capa)
-               'tls))))))
+      (if (plist-get parameters :nowait)
+          (list stream nil nil 'tls)
+        ;; Check certificate validity etc.
+        (when (and (gnutls-available-p) stream)
+          (setq stream (nsm-verify-connection stream host service)))
+        (if (null stream)
+            (list nil nil nil 'plain)
+          ;; If we're using tls.el, we have to delete the output from
+          ;; openssl/gnutls-cli.
+          (when (and (not (gnutls-available-p))
+                     eoc)
+            (network-stream-get-response stream start eoc)
+            (goto-char (point-min))
+            (when (re-search-forward eoc nil t)
+              (goto-char (match-beginning 0))
+              (delete-region (point-min) (line-beginning-position))))
+          (let ((capability-command (plist-get parameters :capability-command))
+                (eo-capa (or (plist-get parameters :end-of-capability)
+                             eoc)))
+            (list stream
+                  (network-stream-get-response stream start eoc)
+                  (network-stream-command stream capability-command eo-capa)
+                  'tls)))))))
 
 (defun network-stream-open-shell (name buffer host service parameters)
   (require 'format-spec)
index d0b5543773233f44721352fb02599219a1dae2a0..72bff66c381a2e6dab24f3c0d3fcf7a7665568e8 100644 (file)
@@ -297,19 +297,30 @@ unencrypted."
       nil
     (let ((response
           (condition-case nil
-              (nsm-query-user message args (nsm-format-certificate status))
+               (intern
+                (car (split-string
+                      (nsm-query-user message args
+                                      (nsm-format-certificate status))))
+                obarray)
             ;; Make sure we manage to close the process if the user hits
             ;; `C-g'.
             (quit 'no)
             (error 'no))))
       (if (eq response 'no)
-         nil
+          (progn
+            (message "Aborting connection to %s:%s" host port)
+            nil)
+        (message (if (eq response 'session)
+                     "Accepting certificate for %s:%s this session only"
+                   "Permanently accepting certificate for %s:%s")
+                 host port)
        (nsm-save-host host port status what response)
        t))))
 
 (defun nsm-query-user (message args cert)
   (let ((buffer (get-buffer-create "*Network Security Manager*")))
     (save-window-excursion
+      ;; First format the certificate and warnings.
       (with-help-window buffer
         (with-current-buffer buffer
           (erase-buffer)
@@ -321,28 +332,15 @@ unencrypted."
             ;; Fill the first line of the message, which usually
             ;; contains lots of explanatory text.
             (fill-region (point) (line-end-position)))))
-      (let ((responses '((?n . no)
-                         (?s . session)
-                         (?a . always)))
-            (prefix "")
-            (cursor-in-echo-area t)
-            response)
-        (while (not response)
-          (setq response
-                (cdr
-                 (assq (downcase
-                        (read-char
-                         (concat prefix
-                                 "Continue connecting? (No, Session only, Always) ")))
-                       responses)))
-          (unless response
-            (ding)
-            (setq prefix "Invalid choice.  ")))
-        (kill-buffer buffer)
-        ;; If called from a callback, `read-char' will insert things
-        ;; into the pending input.  Clear that.
-        (clear-this-command-keys)
-        response))))
+      ;; Then ask the user what to do about it.
+      (unwind-protect
+          (cadr
+           (read-multiple-choice
+            "Continue connecting?"
+            '((?a "always" "Accept this certificate this session and for all future sessions.")
+              (?s "session only" "Accept this certificate this session only.")
+              (?n "no" "Refuse to use this certificate, and close the connection."))))
+        (kill-buffer buffer)))))
 
 (defun nsm-save-host (host port status what permanency)
   (let* ((id (nsm-id host port))
similarity index 97%
rename from lisp/gnus/pop3.el
rename to lisp/net/pop3.el
index fc593806bfcda4bcbde20df08147f9152617e050..1695bbd3a403041b4ec7551191ec4848328af005 100644 (file)
 
 (eval-when-compile (require 'cl))
 
-(eval-and-compile
-  ;; In Emacs 24, `open-protocol-stream' is an autoloaded alias for
-  ;; `make-network-stream'.
-  (unless (fboundp 'open-protocol-stream)
-    (require 'proto-stream)))
-
 (require 'mail-utils)
 (defvar parse-time-months)
 
@@ -533,13 +527,6 @@ this is nil, `ssl' is assumed for connections to port
                 (const :tag "SSL/TLS" ssl)
                 (const starttls)))
 
-(eval-and-compile
-  (if (fboundp 'set-process-query-on-exit-flag)
-      (defalias 'pop3-set-process-query-on-exit-flag
-       'set-process-query-on-exit-flag)
-    (defalias 'pop3-set-process-query-on-exit-flag
-      'process-kill-without-query)))
-
 (defun pop3-open-server (mailhost port)
   "Open TCP connection to MAILHOST on PORT.
 Returns the process associated with the connection."
@@ -552,7 +539,7 @@ Returns the process associated with the connection."
       (erase-buffer)
       (setq pop3-read-point (point-min))
       (setq result
-           (open-protocol-stream
+           (open-network-stream
             "POP" (current-buffer) mailhost port
             :type (cond
                    ((or (eq pop3-stream-type 'ssl)
@@ -576,7 +563,7 @@ Returns the process associated with the connection."
          (setq pop3-timestamp
                (substring response (or (string-match "<" response) 0)
                           (+ 1 (or (string-match ">" response) -1)))))
-       (pop3-set-process-query-on-exit-flag (car result) nil)
+       (set-process-query-on-exit-flag (car result) nil)
        (erase-buffer)
        (car result)))))
 
@@ -644,9 +631,7 @@ If NOW, use that time instead."
      (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)))))
+     (format-time-string "%Y %H:%M:%S %z" now))))
 
 (defun pop3-munge-message-separator (start end)
   "Check to see if a message separator exists.  If not, generate one."
diff --git a/lisp/net/puny.el b/lisp/net/puny.el
new file mode 100644 (file)
index 0000000..50bde85
--- /dev/null
@@ -0,0 +1,248 @@
+;;; puny.el --- translate non-ASCII domain names to ASCII
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: mail, net
+
+;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Written by looking at
+;; http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion
+
+;;; Code:
+
+(require 'seq)
+
+(defun puny-encode-domain (domain)
+  "Encode DOMAIN according to the IDNA/punycode algorithm.
+For instance, \"fśf.org\" => \"xn--ff-2sa.org\"."
+  ;; The vast majority of domain names are not IDNA domain names, so
+  ;; add a check first to avoid doing unnecessary work.
+  (if (string-match "\\'[[:ascii:]]+\\'" domain)
+      domain
+    (mapconcat 'puny-encode-string (split-string domain "[.]") ".")))
+
+(defun puny-encode-string (string)
+  "Encode STRING according to the IDNA/punycode algorithm.
+This is used to encode non-ASCII domain names.
+For instance, \"bücher\" => \"xn--bcher-kva\"."
+  (let ((ascii (seq-filter (lambda (char)
+                             (< char 128))
+                           string)))
+    (if (= (length ascii) (length string))
+        string
+      (concat "xn--"
+              (if (null ascii)
+                  ""
+                (concat ascii "-"))
+              (puny-encode-complex (length ascii) string)))))
+
+(defun puny-decode-domain (domain)
+  "Decode DOMAIN according to the IDNA/punycode algorithm.
+For instance, \"xn--ff-2sa.org\" => \"fśf.org\"."
+  (mapconcat 'puny-decode-string (split-string domain "[.]") "."))
+
+(defun puny-decode-string (string)
+  "Decode an IDNA/punycode-encoded string.
+For instance \"xn--bcher-kva\" => \"bücher\"."
+  (if (string-match "\\`xn--" string)
+      (puny-decode-string-internal (substring string 4))
+    string))
+
+(defconst puny-initial-n 128)
+(defconst puny-initial-bias 72)
+(defconst puny-base 36)
+(defconst puny-damp 700)
+(defconst puny-tmin 1)
+(defconst puny-tmax 26)
+(defconst puny-skew 28)
+
+;; 0-25  a-z
+;; 26-36 0-9
+(defun puny-encode-digit (d)
+  (if (< d 26)
+      (+ ?a d)
+    (+ ?0 (- d 26))))
+
+(defun puny-adapt (delta num-points first-time)
+  (let ((delta (if first-time
+                   (/ delta puny-damp)
+                 (/ delta 2)))
+        (k 0))
+    (setq delta (+ delta (/ delta num-points)))
+    (while (> delta (/ (* (- puny-base puny-tmin)
+                          puny-tmax)
+                       2))
+      (setq delta (/ delta (- puny-base puny-tmin))
+            k (+ k puny-base)))
+    (+ k (/ (* (1+ (- puny-base puny-tmin)) delta)
+            (+ delta puny-skew)))))
+
+(defun puny-encode-complex (insertion-points string)
+  (let ((n puny-initial-n)
+        (delta 0)
+        (bias puny-initial-bias)
+        (h insertion-points)
+        result m ijv q)
+    (while (< h (length string))
+      (setq ijv (cl-loop for char across string
+                         when (>= char n)
+                         minimize char))
+      (setq m ijv)
+      (setq delta (+ delta (* (- m n) (+ h 1)))
+            n m)
+      (cl-loop for char across string
+               when (< char n)
+               do (cl-incf delta)
+               when (= char ijv)
+               do (progn
+                    (setq q delta)
+                    (cl-loop with k = puny-base
+                             for t1 = (cond
+                                       ((<= k bias)
+                                        puny-tmin)
+                                       ((>= k (+ bias puny-tmax))
+                                        puny-tmax)
+                                       (t
+                                        (- k bias)))
+                             while (>= q t1)
+                             do (push (puny-encode-digit
+                                       (+ t1 (mod (- q t1)
+                                                  (- puny-base t1))))
+                                      result)
+                             do (setq q (/ (- q t1) (- puny-base t1))
+                                      k (+ k puny-base)))
+                    (push (puny-encode-digit q) result)
+                    (setq bias (puny-adapt delta (+ h 1) (= h insertion-points))
+                          delta 0
+                          h (1+ h))))
+      (cl-incf delta)
+      (cl-incf n))
+    (nreverse result)))
+
+(defun puny-decode-digit (cp)
+  (cond
+   ((<= cp ?9)
+    (+ (- cp ?0) 26))
+   ((<= cp ?Z)
+    (- cp ?A))
+   ((<= cp ?z)
+    (- cp ?a))
+   (t
+    puny-base)))
+
+(defun puny-decode-string-internal (string)
+  (with-temp-buffer
+    (insert string)
+    (goto-char (point-max))
+    (search-backward "-" nil (point-min))
+    ;; The encoded chars are after the final dash.
+    (let ((encoded (buffer-substring (1+ (point)) (point-max)))
+          (ic 0)
+          (i 0)
+          (bias puny-initial-bias)
+          (n puny-initial-n)
+          out)
+      (delete-region (point) (point-max))
+      (while (< ic (length encoded))
+        (let ((old-i i)
+              (w 1)
+              (k puny-base)
+              digit t1)
+          (cl-loop do (progn
+                        (setq digit (puny-decode-digit (aref encoded ic)))
+                        (cl-incf ic)
+                        (cl-incf i (* digit w))
+                        (setq t1 (cond
+                                  ((<= k bias)
+                                   puny-tmin)
+                                  ((>= k (+ bias puny-tmax))
+                                   puny-tmax)
+                                  (t
+                                   (- k bias)))))
+                   while (>= digit t1)
+                   do (setq w (* w (- puny-base t1))
+                            k (+ k puny-base)))
+          (setq out (1+ (buffer-size)))
+          (setq bias (puny-adapt (- i old-i) out (= old-i 0))))
+
+        (setq n (+ n (/ i out))
+              i (mod i out))
+        (goto-char (point-min))
+        (forward-char i)
+        (insert (format "%c" n))
+        (cl-incf i)))
+    (buffer-string)))
+
+;; http://www.unicode.org/reports/tr39/#Restriction_Level_Detection
+;; http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Inclusion_in_Identifiers
+
+(defun puny-highly-restrictive-string-p (string)
+  "Say whether STRING is \"highly restrictive\" in the Unicode IDNA sense.
+See http://www.unicode.org/reports/tr39/#Restriction_Level_Detection
+for details.  The main idea is that if you're mixing
+scripts (like latin and cyrillic), you may confuse the user by
+using homographs."
+  (let ((scripts
+         (delq
+          t
+          (seq-uniq
+           (seq-map (lambda (char)
+                      (if (memq char
+                                ;; These characters are always allowed
+                                ;; in any string.
+                                '(#x0027 ; APOSTROPHE
+                                  #x002D ; HYPHEN-MINUS
+                                  #x002E ; FULL STOP
+                                  #x003A ; COLON
+                                  #x00B7 ; MIDDLE DOT
+                                  #x058A ; ARMENIAN HYPHEN
+                                  #x05F3 ; HEBREW PUNCTUATION GERESH
+                                  #x05F4 ; HEBREW PUNCTUATION GERSHAYIM
+                                  #x0F0B ; TIBETAN MARK INTERSYLLABIC TSHEG
+                                  #x200C ; ZERO WIDTH NON-JOINER*
+                                  #x200D ; ZERO WIDTH JOINER*
+                                  #x2010 ; HYPHEN
+                                  #x2019 ; RIGHT SINGLE QUOTATION MARK
+                                  #x2027 ; HYPHENATION POINT
+                                  #x30A0 ; KATAKANA-HIRAGANA DOUBLE HYPHEN
+                                  #x30FB)) ; KATAKANA MIDDLE DOT
+                          t
+                        (aref char-script-table char)))
+                    string)))))
+    (or
+     ;; Every character uses the same script.
+     (= (length scripts) 1)
+     (seq-some 'identity
+               (mapcar (lambda (list)
+                         (seq-every-p (lambda (script)
+                                        (memq script list))
+                                      scripts))
+                       '((latin han hiragana kana)
+                         (latin han bopomofo)
+                         (latin han hangul)))))))
+
+(defun puny-highly-restrictive-domain-p (domain)
+  "Say whether DOMAIN is \"highly restrictive\" in the Unicode IDNA sense.
+See `puny-highly-restrictive-string-p' for further details."
+  (seq-every-p 'puny-highly-restrictive-string-p (split-string domain "[.]")))
+
+(provide 'puny)
+
+;;; puny.el ends here
index 55b43f63963109f2fb39fcfbda834e33987b3507..f2c8c5d50c5f76b0a665413009a047ea2dd24409 100644 (file)
@@ -103,7 +103,12 @@ connected to automatically.
 `:encryption'
 
 VALUE must be `plain' (the default) for unencrypted connections, or `tls'
-for connections using SSL/TLS."
+for connections using SSL/TLS.
+
+`:server-alias'
+
+VALUE must be a string that will be used instead of the server name for
+display purposes. If absent, the real server name will be displayed instead."
   :type '(alist :key-type string
                :value-type (plist :options
                                    ((:nick string)
@@ -113,7 +118,8 @@ for connections using SSL/TLS."
                                     (:full-name string)
                                     (:channels (repeat string))
                                     (:encryption (choice (const tls)
-                                                         (const plain))))))
+                                                         (const plain)))
+                                    (:server-alias string))))
   :group 'rcirc)
 
 (defcustom rcirc-default-port 6667
@@ -484,22 +490,26 @@ If ARG is non-nil, instead prompt for connection parameters."
              (channels (plist-get (cdr c) :channels))
               (password (plist-get (cdr c) :password))
               (encryption (plist-get (cdr c) :encryption))
+              (server-alias (plist-get (cdr c) :server-alias))
               contact)
          (when server
            (let (connected)
              (dolist (p (rcirc-process-list))
-               (when (string= server (process-name p))
+               (when (string= (or server-alias server) (process-name p))
                  (setq connected p)))
              (if (not connected)
                  (condition-case nil
                      (rcirc-connect server port nick user-name
-                                    full-name channels password encryption)
-                   (quit (message "Quit connecting to %s" server)))
+                                     full-name channels password encryption
+                                     server-alias)
+                   (quit (message "Quit connecting to %s"
+                                   (or server-alias server))))
                (with-current-buffer (process-buffer connected)
                   (setq contact (process-contact
-                                 (get-buffer-process (current-buffer)) :host))
+                                 (get-buffer-process (current-buffer)) :name))
                   (setq connected-servers
-                        (cons (if (stringp contact) contact server)
+                        (cons (if (stringp contact)
+                                  contact (or server-alias server))
                               connected-servers))))))))
       (when connected-servers
        (message "Already connected to %s"
@@ -528,9 +538,10 @@ If ARG is non-nil, instead prompt for connection parameters."
 
 ;;;###autoload
 (defun rcirc-connect (server &optional port nick user-name
-                             full-name startup-channels password encryption)
+                             full-name startup-channels password encryption
+                             server-alias)
   (save-excursion
-    (message "Connecting to %s..." server)
+    (message "Connecting to %s..." (or server-alias server))
     (let* ((inhibit-eol-conversion)
            (port-number (if port
                            (if (stringp port)
@@ -542,7 +553,7 @@ If ARG is non-nil, instead prompt for connection parameters."
           (full-name (or full-name rcirc-default-full-name))
           (startup-channels startup-channels)
            (process (open-network-stream
-                     server nil server port-number
+                     (or server-alias server) nil server port-number
                      :type (or encryption 'plain))))
       ;; set up process
       (set-process-coding-system process 'raw-text 'raw-text)
@@ -557,7 +568,8 @@ If ARG is non-nil, instead prompt for connection parameters."
                        password encryption))
       (setq-local rcirc-process process)
       (setq-local rcirc-server server)
-      (setq-local rcirc-server-name server) ; Update when we get 001 response.
+      (setq-local rcirc-server-name
+                  (or server-alias server)) ; Update when we get 001 response.
       (setq-local rcirc-buffer-alist nil)
       (setq-local rcirc-nick-table (make-hash-table :test 'equal))
       (setq-local rcirc-nick nick)
@@ -584,7 +596,7 @@ If ARG is non-nil, instead prompt for connection parameters."
        (setq rcirc-keepalive-timer
              (run-at-time 0 (/ rcirc-timeout-seconds 2) 'rcirc-keepalive)))
 
-      (message "Connecting to %s...done" server)
+      (message "Connecting to %s...done" (or server-alias server))
 
       ;; return process object
       process)))
index 2c8ff79763f3cc36219d49f864cb0bac17f1c53c..bf05fe93baeef8ec44a9ba6acf3f2e0d6f91a47c 100644 (file)
@@ -36,6 +36,7 @@
 (require 'subr-x)
 (require 'dom)
 (require 'seq)
+(require 'svg)
 
 (defgroup shr nil
   "Simple HTML Renderer"
@@ -64,6 +65,12 @@ fit these criteria."
   :group 'shr
   :type 'boolean)
 
+(defcustom shr-use-colors t
+  "If non-nil, respect color specifications in the HTML."
+  :version "25.2"
+  :group 'shr
+  :type 'boolean)
+
 (defcustom shr-table-horizontal-line nil
   "Character used to draw horizontal table lines.
 If nil, don't draw horizontal table lines."
@@ -136,6 +143,14 @@ cid: URL as the argument.")
 (defvar shr-inhibit-images nil
   "If non-nil, inhibit loading images.")
 
+(defvar shr-external-rendering-functions nil
+  "Alist of tag/function pairs used to alter how shr renders certain tags.
+For instance, eww uses this to alter rendering of title, forms
+and other things:
+((title . eww-tag-title)
+ (form . eww-tag-form)
+ ...)")
+
 ;;; Internal variables.
 
 (defvar shr-folding-mode nil)
@@ -151,7 +166,6 @@ cid: URL as the argument.")
 (defvar shr-depth 0)
 (defvar shr-warning nil)
 (defvar shr-ignore-cache nil)
-(defvar shr-external-rendering-functions nil)
 (defvar shr-target-id nil)
 (defvar shr-table-separator-length 1)
 (defvar shr-table-separator-pixel-width 0)
@@ -172,10 +186,16 @@ cid: URL as the argument.")
     (define-key map "w" 'shr-copy-url)
     (define-key map "u" 'shr-copy-url)
     (define-key map "v" 'shr-browse-url)
-    (define-key map "o" 'shr-save-contents)
+    (define-key map "O" 'shr-save-contents)
     (define-key map "\r" 'shr-browse-url)
     map))
 
+(defvar shr-image-map
+  (let ((map (copy-keymap shr-map)))
+    (when (boundp 'image-map)
+      (set-keymap-parent map image-map))
+    map))
+
 ;; Public functions and commands.
 (declare-function libxml-parse-html-region "xml.c"
                  (start end &optional base-url discard-comments))
@@ -254,22 +274,19 @@ DOM should be a parse tree as generated by
     (set-window-hscroll nil 0)
     (shr-descend dom)
     (shr-fill-lines start (point))
-    (shr-remove-trailing-whitespace start (point))
+    (shr--remove-blank-lines-at-the-end start (point))
     (when shr-warning
       (message "%s" shr-warning))))
 
-(defun shr-remove-trailing-whitespace (start end)
-  (let ((width (window-width)))
-    (save-restriction
+(defun shr--remove-blank-lines-at-the-end (start end)
+  (save-restriction
+    (save-excursion
       (narrow-to-region start end)
-      (goto-char start)
-      (while (not (eobp))
-       (end-of-line)
-       (when (> (shr-previous-newline-padding-width (current-column)) width)
-         (dolist (overlay (overlays-at (point)))
-           (when (overlay-get overlay 'before-string)
-             (overlay-put overlay 'before-string nil))))
-       (forward-line 1)))))
+      (goto-char end)
+      (when (and (re-search-backward "[^ \n]" nil t)
+                 (not (eobp)))
+        (forward-line 1)
+        (delete-region (point) (point-max))))))
 
 (defun shr-copy-url (&optional image-url)
   "Copy the URL under point to the kill ring.
@@ -435,11 +452,10 @@ size, and full-buffer size."
 
 (defun shr-descend (dom)
   (let ((function
-        (or
-         ;; Allow other packages to override (or provide) rendering
-         ;; of elements.
-         (cdr (assq (dom-tag dom) shr-external-rendering-functions))
-         (intern (concat "shr-tag-" (symbol-name (dom-tag dom))) obarray)))
+         (intern (concat "shr-tag-" (symbol-name (dom-tag dom))) obarray))
+        ;; Allow other packages to override (or provide) rendering
+        ;; of elements.
+        (external (cdr (assq (dom-tag dom) shr-external-rendering-functions)))
        (style (dom-attr dom 'style))
        (shr-stylesheet shr-stylesheet)
        (shr-depth (1+ shr-depth))
@@ -454,9 +470,12 @@ size, and full-buffer size."
          (setq style nil)))
       ;; If we have a display:none, then just ignore this part of the DOM.
       (unless (equal (cdr (assq 'display shr-stylesheet)) "none")
-       (if (fboundp function)
-           (funcall function dom)
-         (shr-generic dom))
+        (cond (external
+               (funcall external dom))
+              ((fboundp function)
+               (funcall function dom))
+              (t
+               (shr-generic dom)))
        (when (and shr-target-id
                   (equal (dom-attr dom 'id) shr-target-id))
          ;; If the element was empty, we don't have anything to put the
@@ -535,6 +554,16 @@ size, and full-buffer size."
       (insert string)
       (shr-pixel-column))))
 
+(defsubst shr--translate-insertion-chars ()
+  ;; Remove soft hyphens.
+  (goto-char (point-min))
+  (while (search-forward "­" nil t)
+    (replace-match "" t t))
+  ;; Translate non-breaking spaces into real spaces.
+  (goto-char (point-min))
+  (while (search-forward " " nil t)
+    (replace-match " " t t)))
+
 (defun shr-insert (text)
   (when (and (not (bolp))
             (get-text-property (1- (point)) 'image-url))
@@ -545,14 +574,11 @@ size, and full-buffer size."
       (insert text)
       (save-restriction
        (narrow-to-region start (point))
-       ;; Remove soft hyphens.
-       (goto-char (point-min))
-       (while (search-forward "­" nil t)
-         (replace-match "" t t))
+        (shr--translate-insertion-chars)
        (goto-char (point-max)))))
    (t
     (let ((font-start (point)))
-      (when (and (string-match "\\`[ \t\n\r ]" text)
+      (when (and (string-match "\\`[ \t\n\r]" text)
                 (not (bolp))
                 (not (eq (char-after (1- (point))) ? )))
        (insert " "))
@@ -562,14 +588,11 @@ size, and full-buffer size."
        (save-restriction
          (narrow-to-region start (point))
          (goto-char start)
-         (when (looking-at "[ \t\n\r ]+")
+         (when (looking-at "[ \t\n\r]+")
            (replace-match "" t t))
-         (while (re-search-forward "[ \t\n\r ]+" nil t)
+         (while (re-search-forward "[ \t\n\r]+" nil t)
            (replace-match " " t t))
-         ;; Remove soft hyphens.
-         (goto-char (point-min))
-         (while (search-forward "­" nil t)
-           (replace-match "" t t))
+          (shr--translate-insertion-chars)
          (goto-char (point-max)))
        ;; We may have removed everything we inserted if if was just
        ;; spaces.
@@ -952,10 +975,14 @@ element is the data blob and the second element is the content-type."
                      (create-image data 'svg t :ascent 100))
                     ((eq size 'full)
                      (ignore-errors
-                       (shr-rescale-image data content-type)))
+                       (shr-rescale-image data content-type
+                                           (plist-get flags :width)
+                                           (plist-get flags :height))))
                     (t
                      (ignore-errors
-                       (shr-rescale-image data content-type))))))
+                       (shr-rescale-image data content-type
+                                           (plist-get flags :width)
+                                           (plist-get flags :height)))))))
         (when image
          ;; When inserting big-ish pictures, put them at the
          ;; beginning of the line.
@@ -978,21 +1005,37 @@ element is the data blob and the second element is the content-type."
        image)
     (insert (or alt ""))))
 
-(defun shr-rescale-image (data &optional content-type)
-  "Rescale DATA, if too big, to fit the current buffer."
+(defun shr-rescale-image (data content-type width height)
+  "Rescale DATA, if too big, to fit the current buffer.
+WIDTH and HEIGHT are the sizes given in the HTML data, if any."
   (if (not (and (fboundp 'imagemagick-types)
                 (get-buffer-window (current-buffer))))
       (create-image data nil t :ascent 100)
-    (let ((edges (window-inside-pixel-edges
-                 (get-buffer-window (current-buffer)))))
-      (create-image
-       data 'imagemagick t
-       :ascent 100
-       :max-width (truncate (* shr-max-image-proportion
-                              (- (nth 2 edges) (nth 0 edges))))
-       :max-height (truncate (* shr-max-image-proportion
-                               (- (nth 3 edges) (nth 1 edges))))
-       :format content-type))))
+    (let* ((edges (window-inside-pixel-edges
+                   (get-buffer-window (current-buffer))))
+           (max-width (truncate (* shr-max-image-proportion
+                                   (- (nth 2 edges) (nth 0 edges)))))
+           (max-height (truncate (* shr-max-image-proportion
+                                    (- (nth 3 edges) (nth 1 edges))))))
+      (when (or (and width
+                     (> width max-width))
+                (and height
+                     (> height max-height)))
+        (setq width nil
+              height nil))
+      (if (and width height)
+          (create-image
+           data 'imagemagick t
+           :ascent 100
+           :width width
+           :height height
+           :format content-type)
+        (create-image
+         data 'imagemagick t
+         :ascent 100
+         :max-width max-width
+         :max-height max-height
+         :format content-type)))))
 
 ;; url-cache-extract autoloads url-cache.
 (declare-function url-cache-create-filename "url-cache" (url))
@@ -1071,8 +1114,15 @@ START, and END.  Note that START and END should be markers."
                                   url)))
                      (if title (format "%s (%s)" iri title) iri))
         'follow-link t
-        'mouse-face 'highlight
-        'keymap shr-map)))
+        'mouse-face 'highlight))
+  ;; Don't overwrite any keymaps that are already in the buffer (i.e.,
+  ;; image keymaps).
+  (while (and start
+              (< start (point)))
+    (let ((next (next-single-property-change start 'keymap nil (point))))
+      (if (get-text-property start 'keymap)
+          (setq start next)
+        (put-text-property start (or next (point)) 'keymap shr-map)))))
 
 (defun shr-encode-url (url)
   "Encode URL."
@@ -1104,7 +1154,9 @@ ones, in case fg and bg are nil."
                (shr-color-visible bg fg)))))))
 
 (defun shr-colorize-region (start end fg &optional bg)
-  (when (and (or fg bg) (>= (display-color-cells) 88))
+  (when (and shr-use-colors
+             (or fg bg)
+             (>= (display-color-cells) 88))
     (let ((new-colors (shr-color-check fg bg)))
       (when new-colors
        (when fg
@@ -1117,18 +1169,6 @@ ones, in case fg and bg are nil."
                                  t)))
       new-colors)))
 
-(defun shr-previous-newline-padding-width (width)
-  (let ((overlays (overlays-at (point)))
-       (previous-width 0))
-    (if (null overlays)
-       width
-      (dolist (overlay overlays)
-       (setq previous-width
-             (+ previous-width
-                (length (plist-get (overlay-properties overlay)
-                                   'before-string)))))
-      (+ width previous-width))))
-
 ;;; Tag-specific rendering rules.
 
 (defun shr-tag-html (dom)
@@ -1137,7 +1177,9 @@ ones, in case fg and bg are nil."
      ((equal dir "ltr")
       (setq bidi-paragraph-direction 'left-to-right))
      ((equal dir "rtl")
-      (setq bidi-paragraph-direction 'right-to-left))))
+      (setq bidi-paragraph-direction 'right-to-left))
+     ((equal dir "auto")
+      (setq bidi-paragraph-direction nil))))
   (shr-generic dom))
 
 (defun shr-tag-body (dom)
@@ -1223,9 +1265,6 @@ ones, in case fg and bg are nil."
 (defun shr-tag-s (dom)
   (shr-fontize-dom dom 'shr-strike-through))
 
-(defun shr-tag-del (dom)
-  (shr-fontize-dom dom 'shr-strike-through))
-
 (defun shr-tag-b (dom)
   (shr-fontize-dom dom 'bold))
 
@@ -1245,6 +1284,24 @@ ones, in case fg and bg are nil."
   (let ((shr-current-font 'default))
     (shr-generic dom)))
 
+(defun shr-tag-ins (cont)
+  (let* ((start (point))
+         (color "green")
+         (shr-stylesheet (nconc (list (cons 'color color))
+                               shr-stylesheet)))
+    (shr-generic cont)
+    (shr-colorize-region start (point) color
+                         (cdr (assq 'background-color shr-stylesheet)))))
+
+(defun shr-tag-del (cont)
+  (let* ((start (point))
+         (color "red")
+         (shr-stylesheet (nconc (list (cons 'color color))
+                               shr-stylesheet)))
+    (shr-fontize-dom cont 'shr-strike-through)
+    (shr-colorize-region start (point) color
+                         (cdr (assq 'background-color shr-stylesheet)))))
+
 (defun shr-parse-style (style)
   (when style
     (save-match-data
@@ -1392,6 +1449,8 @@ The preference is a float determined from `shr-prefer-media-type'."
     (when (> (current-column) 0)
       (insert "\n"))
     (let ((alt (dom-attr dom 'alt))
+          (width (shr-string-number (dom-attr dom 'width)))
+          (height (shr-string-number (dom-attr dom 'height)))
          (url (shr-expand-url (or url (dom-attr dom 'src)))))
       (let ((start (point-marker)))
        (when (zerop (length alt))
@@ -1405,7 +1464,8 @@ The preference is a float determined from `shr-prefer-media-type'."
               (string-match "\\`data:" url))
          (let ((image (shr-image-from-data (substring url (match-end 0)))))
            (if image
-               (funcall shr-put-image-function image alt)
+               (funcall shr-put-image-function image alt
+                         (list :width width :height height))
              (insert alt))))
         ((and (not shr-inhibit-images)
               (string-match "\\`cid:" url))
@@ -1414,7 +1474,8 @@ The preference is a float determined from `shr-prefer-media-type'."
            (if (or (not shr-content-function)
                    (not (setq image (funcall shr-content-function url))))
                (insert alt)
-             (funcall shr-put-image-function image alt))))
+             (funcall shr-put-image-function image alt
+                       (list :width width :height height)))))
         ((or shr-inhibit-images
              (and shr-blocked-images
                   (string-match shr-blocked-images url)))
@@ -1422,20 +1483,26 @@ The preference is a float determined from `shr-prefer-media-type'."
           (shr-insert alt))
         ((and (not shr-ignore-cache)
               (url-is-cached (shr-encode-url url)))
-         (funcall shr-put-image-function (shr-get-image-data url) alt))
+         (funcall shr-put-image-function (shr-get-image-data url) alt
+                   (list :width width :height height)))
         (t
-         (insert alt " ")
          (when (and shr-ignore-cache
                     (url-is-cached (shr-encode-url url)))
            (let ((file (url-cache-create-filename (shr-encode-url url))))
              (when (file-exists-p file)
                (delete-file file))))
+          (when (image-type-available-p 'svg)
+            (insert-image
+             (shr-make-placeholder-image dom)
+             (or alt "")))
+          (insert " ")
          (url-queue-retrieve
           (shr-encode-url url) 'shr-image-fetched
-          (list (current-buffer) start (set-marker (make-marker) (1- (point))))
+          (list (current-buffer) start (set-marker (make-marker) (point))
+                 (list :width width :height height))
           t t)))
        (when (zerop shr-table-depth) ;; We are not in a table.
-         (put-text-property start (point) 'keymap shr-map)
+         (put-text-property start (point) 'keymap shr-image-map)
          (put-text-property start (point) 'shr-alt alt)
          (put-text-property start (point) 'image-url url)
          (put-text-property start (point) 'image-displayer
@@ -1444,6 +1511,50 @@ The preference is a float determined from `shr-prefer-media-type'."
                             (shr-fill-text
                              (or (dom-attr dom 'title) alt))))))))
 
+(defun shr-string-number (string)
+  (if (null string)
+      nil
+    (setq string (replace-regexp-in-string "[^0-9]" "" string))
+    (if (zerop (length string))
+        nil
+      (string-to-number string))))
+
+(defun shr-make-placeholder-image (dom)
+  (let* ((edges (and
+                 (get-buffer-window (current-buffer))
+                 (window-inside-pixel-edges
+                  (get-buffer-window (current-buffer)))))
+         (scaling (image-compute-scaling-factor image-scaling-factor))
+         (width (truncate
+                 (* (or (shr-string-number (dom-attr dom 'width)) 100)
+                    scaling)))
+         (height (truncate
+                  (* (or (shr-string-number (dom-attr dom 'height)) 100)
+                     scaling)))
+         (max-width
+          (and edges
+               (truncate (* shr-max-image-proportion
+                            (- (nth 2 edges) (nth 0 edges))))))
+         (max-height (and edges
+                          (truncate (* shr-max-image-proportion
+                                       (- (nth 3 edges) (nth 1 edges))))))
+         svg image)
+    (when (and max-width
+               (> width max-width))
+      (setq height (truncate (* (/ (float max-width) width) height))
+            width max-width))
+    (when (and max-height
+               (> height max-height))
+      (setq width (truncate (* (/ (float max-height) height) width))
+            height max-height))
+    (setq svg (svg-create width height))
+    (svg-gradient svg "background" 'linear '((0 . "#b0b0b0") (100 . "#808080")))
+    (svg-rectangle svg 0 0 width height :gradient "background"
+                   :stroke-width 2 :stroke-color "black")
+    (let ((image (svg-image svg)))
+      (setf (image-property image :ascent) 100)
+      image)))
+
 (defun shr-tag-pre (dom)
   (let ((shr-folding-mode 'none)
        (shr-current-font 'default))
@@ -1510,7 +1621,9 @@ The preference is a float determined from `shr-prefer-media-type'."
        (put-text-property start (1+ start)
                           'shr-continuation-indentation shr-indentation)
        (put-text-property start (1+ start) 'shr-prefix-length (length bullet))
-       (shr-generic dom)))))
+       (shr-generic dom))))
+  (unless (bolp)
+    (insert "\n")))
 
 (defun shr-mark-fill (start)
   ;; We may not have inserted any text to fill.
@@ -1573,6 +1686,24 @@ The preference is a float determined from `shr-prefer-media-type'."
       (shr-colorize-region start (point) color
                           (cdr (assq 'background-color shr-stylesheet))))))
 
+(defun shr-tag-bdo (dom)
+  (let* ((direction (dom-attr dom 'dir))
+         (char (cond
+                ((equal direction "ltr")
+                 ?\N{LEFT-TO-RIGHT OVERRIDE})
+                ((equal direction "rtl")
+                 ?\N{RIGHT-TO-LEFT OVERRIDE}))))
+    (when char
+      (insert ?\N{FIRST STRONG ISOLATE} char))
+    (shr-generic dom)
+    (when char
+      (insert ?\N{POP DIRECTIONAL FORMATTING} ?\N{POP DIRECTIONAL ISOLATE}))))
+
+(defun shr-tag-bdi (dom)
+  (insert ?\N{FIRST STRONG ISOLATE})
+  (shr-generic dom)
+  (insert ?\N{POP DIRECTIONAL ISOLATE}))
+
 ;;; Table rendering algorithm.
 
 ;; Table rendering is the only complicated thing here.  We do this by
similarity index 99%
rename from lisp/gnus/sieve-manage.el
rename to lisp/net/sieve-manage.el
index 212a7fd9f35e720376682177bcbb75be7becbd88..695bbd860debef9a5ebcd7ecec6e88af5c779fc0 100644 (file)
     (require 'password-cache)
   (require 'password))
 
-(eval-when-compile
-  (require 'cl)                                ; caddr
-  (require 'sasl)
-  (require 'starttls))
+(eval-when-compile (require 'cl))
+(require 'sasl)
+(require 'starttls)
 (autoload 'sasl-find-mechanism "sasl")
 (autoload 'auth-source-search "auth-source")
 
@@ -202,7 +201,7 @@ Return the buffer associated with the connection."
     (sieve-manage-erase)
     (setq sieve-manage-state 'initial)
     (destructuring-bind (proc . props)
-        (open-protocol-stream
+        (open-network-stream
          "SIEVE" buffer server port
          :type stream
          :capability-command "CAPABILITY\r\n"
similarity index 98%
rename from lisp/gnus/sieve-mode.el
rename to lisp/net/sieve-mode.el
index 5ea687dd918707d60190ed0c3ceeaf6de6a06945..7575ba67c5ed624eb381ace52b9ee65ccbc6ab79 100644 (file)
@@ -204,9 +204,8 @@ Turning on Sieve mode runs `sieve-mode-hook'."
   (set (make-local-variable 'comment-end) "")
   ;;(set (make-local-variable 'comment-start-skip) "\\(^\\|\\s-\\);?#+ *")
   (set (make-local-variable 'comment-start-skip) "#+ *")
-  (unless (featurep 'xemacs)
-    (set (make-local-variable 'font-lock-defaults)
-        '(sieve-font-lock-keywords nil nil ((?_ . "w")))))
+  (set (make-local-variable 'font-lock-defaults)
+       '(sieve-font-lock-keywords nil nil ((?_ . "w"))))
   (easy-menu-add-item nil nil sieve-mode-menu))
 
 ;; Menu
similarity index 100%
rename from lisp/gnus/sieve.el
rename to lisp/net/sieve.el
index 12c9f419555de8226ea12de75066f9179cd2bed7..f8973a3a5376be43275493f1077b79b3f9347a5a 100644 (file)
@@ -5,7 +5,7 @@
 ;; Author: Alexandru Harsanyi <AlexHarsanyi@gmail.com>
 ;; Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
 ;; Created: December, 2009
-;; Version: 3.0.2
+;; Version: 3.1.1
 ;; Keywords: soap, web-services, comm, hypermedia
 ;; Package: soap-client
 ;; Homepage: https://github.com/alex-hhh/emacs-soap-client
@@ -1249,8 +1249,8 @@ See also `soap-wsdl-resolve-references'."
           (when messages
             (error (mapconcat 'identity (nreverse messages) "; and: "))))
       (cl-labels ((fail-with-message (format value)
-                                    (push (format format value) messages)
-                                    (throw 'invalid nil)))
+                                     (push (format format value) messages)
+                                     (throw 'invalid nil)))
         (catch 'invalid
           (let ((enumeration (soap-xs-simple-type-enumeration type)))
             (when (and (> (length enumeration) 1)
@@ -1630,7 +1630,7 @@ This is a specialization of `soap-encode-value' for
 `soap-xs-complex-type' objects."
   (case (soap-xs-complex-type-indicator type)
     (array
-     (error "soap-encode-xs-complex-type arrays are handled elsewhere"))
+     (error "Arrays of type soap-encode-xs-complex-type are handled elsewhere"))
     ((sequence choice all nil)
      (let ((type-list (list type)))
 
@@ -2999,6 +2999,33 @@ http://schemas.xmlsoap.org/soap/encoding/\"\n"))
   :type 'boolean
   :group 'soap-client)
 
+(defun soap-find-port (wsdl service)
+  "Return the WSDL port having SERVICE name.
+Signal an error if not found."
+  (or (catch 'found
+        (dolist (p (soap-wsdl-ports wsdl))
+          (when (equal service (soap-element-name p))
+            (throw 'found p))))
+      (error "Unknown SOAP service: %s" service)))
+
+(defun soap-find-operation (port operation-name)
+  "Inside PORT, find OPERATION-NAME, a `soap-port-type'.
+Signal an error if not found."
+  (let* ((binding (soap-port-binding port))
+         (op (gethash operation-name (soap-binding-operations binding))))
+    (or op
+        (error "No operation %s for SOAP service %s"
+               operation-name (soap-element-name port)))))
+
+(defun soap-operation-arity (wsdl service operation-name)
+  "Return the number of arguments required by a soap operation.
+WSDL, SERVICE, OPERATION-NAME and PARAMETERS are as described in
+`soap-invoke'."
+  (let* ((port (soap-find-port wsdl service))
+         (op (soap-find-operation port operation-name))
+         (bop (soap-bound-operation-operation op)))
+    (length (soap-operation-parameter-order bop))))
+
 (defun soap-invoke-internal (callback cbargs wsdl service operation-name
                                       &rest parameters)
   "Implement `soap-invoke' and `soap-invoke-async'.
@@ -3006,54 +3033,43 @@ If CALLBACK is non-nil, operate asynchronously, then call CALLBACK as (apply
 CALLBACK RESPONSE CBARGS), where RESPONSE is the SOAP invocation result.
 If CALLBACK is nil, operate synchronously.  WSDL, SERVICE,
 OPERATION-NAME and PARAMETERS are as described in `soap-invoke'."
-  (let ((port (catch 'found
-                (dolist (p (soap-wsdl-ports wsdl))
-                  (when (equal service (soap-element-name p))
-                    (throw 'found p))))))
-    (unless port
-      (error "Unknown SOAP service: %s" service))
-
-    (let* ((binding (soap-port-binding port))
-           (operation (gethash operation-name
-                               (soap-binding-operations binding))))
-      (unless operation
-        (error "No operation %s for SOAP service %s" operation-name service))
-
-      (let ((url-request-method "POST")
-            (url-package-name "soap-client.el")
-            (url-package-version "1.0")
-            (url-request-data
-             ;; url-request-data expects a unibyte string already encoded...
-             (encode-coding-string
-              (soap-create-envelope operation parameters wsdl
-                                    (soap-port-service-url port))
-              'utf-8))
-            (url-mime-charset-string "utf-8;q=1, iso-8859-1;q=0.5")
-            (url-http-attempt-keepalives t)
-            (url-request-extra-headers
-             (list
-              (cons "SOAPAction"
-                    (concat "\"" (soap-bound-operation-soap-action
-                                  operation) "\""))
-              (cons "Content-Type"
-                    "text/xml; charset=utf-8"))))
-        (if callback
-            (url-retrieve
-             (soap-port-service-url port)
-             (lambda (status)
-               (let ((data-buffer (current-buffer)))
-                 (unwind-protect
-                     (let ((error-status (plist-get status :error)))
-                       (if error-status
-                           (signal (car error-status) (cdr error-status))
-                         (apply callback
-                                (soap-parse-envelope
-                                 (soap-parse-server-response)
-                                 operation wsdl)
-                                cbargs)))
-                   ;; Ensure the url-retrieve buffer is not leaked.
-                   (and (buffer-live-p data-buffer)
-                        (kill-buffer data-buffer))))))
+  (let* ((port (soap-find-port wsdl service))
+         (operation (soap-find-operation port operation-name)))
+    (let ((url-request-method "POST")
+          (url-package-name "soap-client.el")
+          (url-package-version "1.0")
+          (url-request-data
+           ;; url-request-data expects a unibyte string already encoded...
+           (encode-coding-string
+            (soap-create-envelope operation parameters wsdl
+                                  (soap-port-service-url port))
+            'utf-8))
+          (url-mime-charset-string "utf-8;q=1, iso-8859-1;q=0.5")
+          (url-http-attempt-keepalives t)
+          (url-request-extra-headers
+           (list
+            (cons "SOAPAction"
+                  (concat "\"" (soap-bound-operation-soap-action
+                                operation) "\""))
+            (cons "Content-Type"
+                  "text/xml; charset=utf-8"))))
+      (if callback
+          (url-retrieve
+           (soap-port-service-url port)
+           (lambda (status)
+             (let ((data-buffer (current-buffer)))
+               (unwind-protect
+                    (let ((error-status (plist-get status :error)))
+                      (if error-status
+                          (signal (car error-status) (cdr error-status))
+                          (apply callback
+                                 (soap-parse-envelope
+                                  (soap-parse-server-response)
+                                  operation wsdl)
+                                 cbargs)))
+                 ;; Ensure the url-retrieve buffer is not leaked.
+                 (and (buffer-live-p data-buffer)
+                      (kill-buffer data-buffer))))))
           (let ((buffer (url-retrieve-synchronously
                          (soap-port-service-url port))))
             (condition-case err
@@ -3077,7 +3093,7 @@ OPERATION-NAME and PARAMETERS are as described in `soap-invoke'."
               (error
                (when soap-debug
                  (pop-to-buffer buffer))
-               (error (error-message-string err))))))))))
+               (error (error-message-string err)))))))))
 
 (defun soap-invoke (wsdl service operation-name &rest parameters)
   "Invoke a SOAP operation and return the result.
similarity index 96%
rename from lisp/gnus/starttls.el
rename to lisp/net/starttls.el
index f3ef5e023f97c44706e260be615fcdffeb6a0885..096ed2adc0de93b77102974c4f4f02f9db3f075a 100644 (file)
@@ -232,13 +232,6 @@ handshake, or nil on failure."
       (starttls-negotiate-gnutls process)
     (signal-process (process-id process) 'SIGALRM)))
 
-(eval-and-compile
-  (if (fboundp 'set-process-query-on-exit-flag)
-      (defalias 'starttls-set-process-query-on-exit-flag
-       'set-process-query-on-exit-flag)
-    (defalias 'starttls-set-process-query-on-exit-flag
-      'process-kill-without-query)))
-
 (defun starttls-open-stream-gnutls (name buffer host port)
   (message "Opening STARTTLS connection to `%s:%s'..." host port)
   (let* (done
@@ -250,7 +243,7 @@ handshake, or nil on failure."
                                  (int-to-string port)
                                port)
                         starttls-extra-arguments)))
-    (starttls-set-process-query-on-exit-flag process nil)
+    (set-process-query-on-exit-flag process nil)
     (while (and (processp process)
                (eq (process-status process) 'run)
                (with-current-buffer buffer
@@ -292,7 +285,7 @@ GnuTLS requires a port number."
                           name buffer starttls-program
                           host (format "%s" port)
                           starttls-extra-args)))
-      (starttls-set-process-query-on-exit-flag process nil)
+      (set-process-query-on-exit-flag process nil)
       process)))
 
 (defun starttls-available-p ()
index 32fd1888d3602b2ac474b85be6b25fcc24406603..5940b713958a5d5585d09e988e5e9fd5ec94afc2 100644 (file)
 
 (require 'tramp)
 
-;; Pacify byte-compiler.
-(defvar directory-listing-before-filename-regexp)
-(defvar directory-sep-char)
-
 ;;;###tramp-autoload
 (defcustom tramp-adb-program "adb"
   "Name of the Android Debug Bridge program."
@@ -109,7 +105,6 @@ It is used for TCP/IP devices."
     (directory-files . tramp-handle-directory-files)
     (directory-files-and-attributes
      . tramp-adb-handle-directory-files-and-attributes)
-    (dired-call-process . ignore)
     (dired-compress-file . ignore)
     (dired-uncache . tramp-handle-dired-uncache)
     (expand-file-name . tramp-adb-handle-expand-file-name)
@@ -162,7 +157,7 @@ It is used for TCP/IP devices."
     (shell-command . tramp-adb-handle-shell-command)
     (start-file-process . tramp-adb-handle-start-file-process)
     (substitute-in-file-name . tramp-handle-substitute-in-file-name)
-    (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+    (unhandled-file-name-directory . ignore)
     (vc-registered . ignore)
     (verify-visited-file-modtime . tramp-handle-verify-visited-file-modtime)
     (write-region . tramp-adb-handle-write-region))
@@ -199,7 +194,7 @@ pass to the OPERATION."
                       tramp-current-host nil nil))
            result)
        (tramp-message v 6 "%s" (mapconcat 'identity (process-command p) " "))
-       (tramp-compat-set-process-query-on-exit-flag p nil)
+       (set-process-query-on-exit-flag p nil)
        (while (eq 'run (process-status p))
          (accept-process-output p 0.1))
        (accept-process-output p 0.1)
@@ -213,7 +208,7 @@ pass to the OPERATION."
         (lambda (elt)
           (setcar
            (cdr elt)
-           (tramp-compat-replace-regexp-in-string
+           (replace-regexp-in-string
             ":" tramp-prefix-port-format (car (cdr elt)))))
         result)
        result))))
@@ -233,12 +228,9 @@ pass to the OPERATION."
       (unless (tramp-run-real-handler 'file-name-absolute-p (list localname))
        (setq localname (concat "/" localname)))
       ;; 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.
-      (let ((directory-sep-char ?/)
-           (default-directory (tramp-compat-temporary-file-directory)))
+      ;; `default-directory' is bound, because on Windows there would
+      ;; be problems with UNC shares or Cygwin mounts.
+      (let ((default-directory (tramp-compat-temporary-file-directory)))
        (tramp-make-tramp-file-name
         method user host
         (tramp-drop-volume-letter
@@ -261,8 +253,7 @@ pass to the OPERATION."
       (with-tramp-file-property v localname "file-truename"
        (let ((result nil))                     ; result steps in reverse order
          (tramp-message v 4 "Finding true name for `%s'" filename)
-         (let* ((directory-sep-char ?/)
-                (steps (tramp-compat-split-string localname "/"))
+         (let* ((steps (split-string localname "/" 'omit))
                 (localnamedir (tramp-run-real-handler
                                'file-name-as-directory (list localname)))
                 (is-dir (string= localname localnamedir))
@@ -312,8 +303,7 @@ pass to the OPERATION."
                          "Symlink target `%s' on wrong host" symlink-target))
                       (setq symlink-target localname))
                     (setq steps
-                          (append (tramp-compat-split-string
-                                   symlink-target "/")
+                          (append (split-string symlink-target "/" 'omit)
                                   steps)))
                    (t
                     ;; It's a file.
@@ -450,9 +440,8 @@ Convert (\"-al\") to (\"-a\" \"-l\").  Remove arguments like \"--dired\"."
   (split-string
    (apply 'concat
          (mapcar (lambda (s)
-                   (tramp-compat-replace-regexp-in-string
-                    "\\(.\\)"  " -\\1"
-                    (tramp-compat-replace-regexp-in-string "^-" "" s)))
+                   (replace-regexp-in-string
+                    "\\(.\\)"  " -\\1" (replace-regexp-in-string "^-" "" s)))
                  ;; FIXME: Warning about removed switches (long and non-dash).
                  (delq nil
                        (mapcar
@@ -585,8 +574,7 @@ Emacs dired can't find files."
           v 'file-error "Cannot make local copy of file `%s'" filename))
        (set-file-modes
         tmpfile
-        (logior (or (file-modes filename) 0)
-                (tramp-compat-octal-to-decimal "0400"))))
+        (logior (or (file-modes filename) 0) (string-to-number "0400" 8))))
       tmpfile)))
 
 (defun tramp-adb-handle-file-writable-p (filename)
@@ -631,8 +619,7 @@ But handle the case, if the \"test\" command is not available."
        (copy-file filename tmpfile 'ok)
        (set-file-modes
         tmpfile
-        (logior (or (file-modes tmpfile) 0)
-                (tramp-compat-octal-to-decimal "0600"))))
+        (logior (or (file-modes tmpfile) 0) (string-to-number "0600" 8))))
       (tramp-run-real-handler
        'write-region
        (list start end tmpfile append 'no-message lockname confirm))
@@ -657,8 +644,7 @@ But handle the case, if the \"test\" command is not available."
   (with-parsed-tramp-file-name filename nil
     (tramp-flush-file-property v (file-name-directory localname))
     (tramp-flush-file-property v localname)
-    (tramp-adb-send-command-and-check
-     v (format "chmod %s %s" (tramp-compat-decimal-to-octal mode) localname))))
+    (tramp-adb-send-command-and-check v (format "chmod %o %s" mode localname))))
 
 (defun tramp-adb-handle-set-file-times (filename &optional time)
   "Like `set-file-times' for Tramp files."
@@ -736,10 +722,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
        (if (and t1 t2
                 (tramp-equal-remote filename newname)
                 (not (file-directory-p filename)))
-           (let ((l1 (tramp-file-name-handler
-                      'file-remote-p filename 'localname))
-                 (l2 (tramp-file-name-handler
-                      'file-remote-p newname 'localname)))
+           (let ((l1 (file-remote-p filename 'localname))
+                 (l2 (file-remote-p newname 'localname)))
              (when (and (not ok-if-already-exists)
                         (file-exists-p newname))
                (tramp-error v 'file-already-exists newname))
@@ -755,7 +739,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
               "Error renaming %s to %s" filename newname))
 
          ;; Rename by copy.
-         (copy-file filename newname ok-if-already-exists t t)
+         (copy-file
+          filename newname ok-if-already-exists 'keep-time 'preserve-uid-gid)
          (delete-file filename))))))
 
 (defun tramp-adb-handle-process-file
@@ -856,12 +841,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
       ;; because the remote process could have changed them.
       (when tmpinput (delete-file tmpinput))
 
-      ;; `process-file-side-effects' has been introduced with GNU
-      ;; Emacs 23.2.  If set to nil, no remote file will be changed
-      ;; by `program'.  If it doesn't exist, we assume its default
-      ;; value t.
-      (unless (and (boundp 'process-file-side-effects)
-                  (not (symbol-value 'process-file-side-effects)))
+      (unless process-file-side-effects
         (tramp-flush-directory-property v ""))
 
       ;; Return exit status.
@@ -941,9 +921,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
                                     (current-buffer))))
          ;; There's some output, display it.
          (when (with-current-buffer output-buffer (> (point-max) (point-min)))
-           (if (functionp 'display-message-or-buffer)
-               (tramp-compat-funcall 'display-message-or-buffer output-buffer)
-             (pop-to-buffer output-buffer))))))))
+           (display-message-or-buffer output-buffer)))))))
 
 ;; We use BUFFER also as connection buffer during setup.  Because of
 ;; this, its original contents must be saved, and restored once
@@ -1008,7 +986,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
                    ;; process.  We ignore errors, because the process
                    ;; could have finished already.
                    (ignore-errors
-                     (tramp-compat-set-process-query-on-exit-flag p t)
+                     (set-process-query-on-exit-flag p t)
                      (set-marker (process-mark p) (point)))
                    ;; Return process.
                    p))))
@@ -1035,7 +1013,7 @@ E.g. a host name \"192.168.1.1#5555\" returns \"192.168.1.1:5555\"
           (host (tramp-file-name-host vec))
           (port (tramp-file-name-port vec))
           (devices (mapcar 'cadr (tramp-adb-parse-device-names nil))))
-      (tramp-compat-replace-regexp-in-string
+      (replace-regexp-in-string
        tramp-prefix-port-format ":"
        (cond ((member host devices) host)
             ;; This is the case when the host is connected to the default port.
@@ -1051,7 +1029,7 @@ E.g. a host name \"192.168.1.1#5555\" returns \"192.168.1.1:5555\"
                   (not (zerop (length host)))
                   (not (tramp-adb-execute-adb-command
                          vec "connect"
-                         (tramp-compat-replace-regexp-in-string
+                         (replace-regexp-in-string
                           tramp-prefix-port-format ":" host))))
              ;; When new device connected, running other adb command (e.g.
              ;; adb shell) immediately will fail.  To get around this
@@ -1205,7 +1183,7 @@ connection if a previous connection has died for some reason."
            (unless (eq 'run (process-status p))
              (tramp-error  vec 'file-error "Terminated!"))
            (tramp-set-connection-property p "vector" vec)
-           (tramp-compat-set-process-query-on-exit-flag p nil)
+           (set-process-query-on-exit-flag p nil)
 
            ;; Check whether the properties have been changed.  If
            ;; yes, this is a strong indication that we must expire all
@@ -1250,7 +1228,7 @@ connection if a previous connection has died for some reason."
                ;; Read the expression.
                (goto-char (point-min))
                (read (current-buffer)))
-             ":" 'omit-nulls))
+             ":" 'omit))
 
            ;; Mark it as connected.
            (tramp-set-connection-property p "connected" t)))))))
index 26825ffa2dd88864d1c22ff538a009b8ff01ff37..158cfb5cae38b1e717c4603302939608e0be39b5 100644 (file)
@@ -75,25 +75,7 @@ details see the info pages."
                       (choice :tag "           Value" sexp))))
 
 (defcustom tramp-persistency-file-name
-  (cond
-   ;; GNU Emacs.
-   ((and (fboundp 'locate-user-emacs-file))
-    (expand-file-name (tramp-compat-funcall 'locate-user-emacs-file "tramp")))
-   ((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"))
+  (expand-file-name (locate-user-emacs-file "tramp"))
   "File which keeps connection history for Tramp connections."
   :group 'tramp
   :type 'file)
@@ -241,8 +223,10 @@ This is suppressed for temporary buffers."
 ;;;###tramp-autoload
 (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."
+KEY identifies the connection, it is either a process or a
+vector.  A special case is nil, which is used to cache connection
+properties of the local machine.  If the value is not set for the
+connection, returns DEFAULT."
   ;; Unify key by removing localname and hop from vector.  Work with a
   ;; copy in order to avoid side effects.
   (when (vectorp key)
@@ -259,8 +243,10 @@ If the value is not set for the connection, returns DEFAULT."
 ;;;###tramp-autoload
 (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."
+KEY identifies the connection, it is either a process or a
+vector.  A special case is nil, which is used to cache connection
+properties of the local machine.  PROPERTY is set persistent when
+KEY is a vector."
   ;; Unify key by removing localname and hop from vector.  Work with a
   ;; copy in order to avoid side effects.
   (when (vectorp key)
@@ -276,13 +262,17 @@ PROPERTY is set persistent when KEY is a vector."
 ;;;###tramp-autoload
 (defun tramp-connection-property-p (key property)
   "Check whether named PROPERTY of a connection is defined.
-KEY identifies the connection, it is either a process or a vector."
+KEY identifies the connection, it is either a process or a
+vector.  A special case is nil, which is used to cache connection
+properties of the local machine."
   (not (eq (tramp-get-connection-property key property 'undef) 'undef)))
 
 ;;;###tramp-autoload
 (defun tramp-flush-connection-property (key)
   "Remove all properties identified by KEY.
-KEY identifies the connection, it is either a process or a vector."
+KEY identifies the connection, it is either a process or a
+vector.  A special case is nil, which is used to cache connection
+properties of the local machine."
   ;; Unify key by removing localname and hop from vector.  Work with a
   ;; copy in order to avoid side effects.
   (when (vectorp key)
@@ -307,19 +297,14 @@ KEY identifies the connection, it is either a process or a vector."
       (maphash
        (lambda (key value)
         ;; Remove text properties from KEY and VALUE.
-        ;; `substring-no-properties' does not exist in XEmacs.
-        (when (functionp 'substring-no-properties)
-          (when (vectorp key)
-            (dotimes (i (length key))
-              (when (stringp (aref key i))
-                (aset key i
-                      (tramp-compat-funcall
-                       'substring-no-properties (aref key i))))))
-          (when (stringp key)
-            (setq key (tramp-compat-funcall 'substring-no-properties key)))
-          (when (stringp value)
-            (setq value
-                  (tramp-compat-funcall 'substring-no-properties value))))
+        (when (vectorp key)
+          (dotimes (i (length key))
+            (when (stringp (aref key i))
+              (aset key i (substring-no-properties (aref key i))))))
+        (when (stringp key)
+          (setq key (substring-no-properties key)))
+        (when (stringp value)
+          (setq value (substring-no-properties value)))
         ;; Dump.
         (let ((tmp (format
                     "(%s %s)"
@@ -418,8 +403,8 @@ for all methods.  Resulting data are derived from connection history."
           ;; When "emacs -Q" has been called, both variables are nil.
           ;; We do not load the persistency file then, in order to
           ;; have a clean test environment.
-          (or (and (boundp 'init-file-user) (symbol-value 'init-file-user))
-              (and (boundp 'site-run-file) (symbol-value 'site-run-file))))
+          (or init-file-user
+              site-run-file))
   (condition-case err
       (with-temp-buffer
        (insert-file-contents tramp-persistency-file-name)
index e7901bb7861a5e038e42cb3eaf47df6d00b3dbf2..856011fc0ee9844af639b2548d144bc87410e853 100644 (file)
@@ -31,6 +31,9 @@
 (require 'tramp)
 
 ;; Pacify byte-compiler.
+(declare-function mml-mode "mml")
+(declare-function mml-insert-empty-tag "mml")
+(declare-function reporter-dump-variable "reporter")
 (defvar reporter-eval-buffer)
 (defvar reporter-prompt-for-summary-p)
 
@@ -128,7 +131,7 @@ This includes password cache, file cache, connection cache, buffers."
   (setq tramp-locked nil)
 
   ;; Flush password cache.
-  (tramp-compat-funcall 'password-reset)
+  (password-reset)
 
   ;; Flush file and connection cache.
   (clrhash tramp-cache-data)
@@ -142,7 +145,7 @@ This includes password cache, file cache, connection cache, buffers."
   "Kill all remote buffers."
   (interactive)
 
-  ;; Remove all Tramp related buffers.
+  ;; Remove all Tramp related connections.
   (tramp-cleanup-all-connections)
 
   ;; Remove all buffers with a remote default-directory.
@@ -166,7 +169,6 @@ This includes password cache, file cache, connection cache, buffers."
 (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
@@ -185,7 +187,6 @@ This includes password cache, file cache, connection cache, buffers."
             backup-by-copying-when-mismatch
             backup-by-copying-when-privileged-mismatch
             backup-directory-alist
-            bkup-backup-directory-info
             password-cache
             password-cache-expiry
             remote-file-name-inhibit-cache
@@ -194,8 +195,7 @@ This includes password cache, file cache, connection cache, buffers."
 
        'tramp-load-report-modules      ; pre-hook
        'tramp-append-tramp-buffers     ; post-hook
-       (tramp-compat-funcall
-       (if (functionp 'propertize) 'propertize 'progn)
+       (propertize
        "\n" 'display "\
 Enter your bug report in this message, including as much detail
 as you possibly can about the problem, what you did to cause it
@@ -243,7 +243,7 @@ buffer in your bug report.
            (base64-encode-string (encode-coding-string val 'raw-text)))))))
 
     ;; Dump variable.
-    (tramp-compat-funcall 'reporter-dump-variable varsym mailbuf)
+    (reporter-dump-variable varsym mailbuf)
 
     (unless (hash-table-p val)
       ;; Remove string quotation.
@@ -264,15 +264,8 @@ buffer in your bug report.
 
 (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))
-  (tramp-compat-funcall 'message-mode)
-  (tramp-compat-funcall 'mml-mode t))
+  (message-mode)
+  (mml-mode t))
 
 (defun tramp-append-tramp-buffers ()
   "Append Tramp buffers and buffer local variables into the bug report."
@@ -303,7 +296,7 @@ buffer in your bug report.
               ;; Non-tramp variables of interest.
               '(default-directory))
              'string<))
-           (tramp-compat-funcall 'reporter-dump-variable varsym elbuf))
+           (reporter-dump-variable varsym elbuf))
        (lisp-indent-line)
        (insert ")\n"))
       (insert-buffer-substring elbuf)))
@@ -313,7 +306,7 @@ buffer in your bug report.
   (ignore-errors
     (mapc
      (lambda (x) (when (string-match "tramp" x) (insert x "\n")))
-     (split-string (tramp-compat-funcall 'list-load-path-shadows t) "\n")))
+     (split-string (list-load-path-shadows t) "\n")))
 
   ;; Append buffers only when we are in message mode.
   (when (and
@@ -322,7 +315,7 @@ buffer in your bug report.
         (symbol-value 'mml-mode))
 
     (let ((tramp-buf-regexp "\\*\\(debug \\)?tramp/")
-         (buffer-list (tramp-compat-funcall 'tramp-list-tramp-buffers))
+         (buffer-list (tramp-list-tramp-buffers))
          (curbuf (current-buffer)))
 
       ;; There is at least one Tramp buffer.
@@ -364,13 +357,13 @@ the debug buffer(s).")
              (kill-buffer nil)
              (switch-to-buffer curbuf)
              (goto-char (point-max))
-             (insert (tramp-compat-funcall 'propertize "\n" 'display "\n\
+             (insert (propertize "\n" 'display "\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)
-               (tramp-compat-funcall
-                'mml-insert-empty-tag 'part 'type "text/plain"
+               (mml-insert-empty-tag
+                'part 'type "text/plain"
                 'encoding "base64" 'disposition "attachment" 'buffer buffer
                 'description buffer))
              (set-buffer-modified-p nil))
index 44923aee895205f373c7dbedfb1c5662313b714a..f1f31d0398e57af3591fcb8b4a2cf2ced52fc1c4 100644 (file)
@@ -23,9 +23,8 @@
 
 ;;; Commentary:
 
-;; Tramp's main Emacs version for development is Emacs 24.  This
-;; package provides compatibility functions for Emacs 22, Emacs 23,
-;; XEmacs 21.4+ and SXEmacs 22.
+;; Tramp's main Emacs version for development is Emacs 25.  This
+;; package provides compatibility functions for Emacs 23 and Emacs 24.
 
 ;;; Code:
 
 (eval-when-compile
   (require 'cl))
 
-(eval-and-compile
-
-  ;; GNU Emacs 22.
-  (unless (fboundp 'ignore-errors)
-    (load "cl" 'noerror)
-    (load "cl-macs" 'noerror))
-
-  ;; Some packages must be required for XEmacs, because we compile
-  ;; with -no-autoloads.
-  (when (featurep 'xemacs)
-    (require 'cus-edit)
-    (require 'env)
-    (require 'executable)
-    (require 'outline)
-    (require 'passwd)
-    (require 'pp)
-    (require 'regexp-opt)
-    (require 'time-date))
-
-  (require 'advice)
-  (require 'custom)
-  (require 'format-spec)
-  (require 'shell)
-  ;; Introduced in Emacs 23.2.
-  (require 'ucs-normalize nil 'noerror)
-
-  (require 'trampver)
-  (require 'tramp-loaddefs)
-
-  ;; As long as password.el is not part of (X)Emacs, it shouldn't be
-  ;; mandatory.
-  (if (featurep 'xemacs)
-      (load "password" 'noerror)
-    (or (require 'password-cache nil 'noerror)
-       (require 'password nil 'noerror))) ; Part of contrib.
-
-  ;; auth-source is relatively new.
-  (if (featurep 'xemacs)
-      (load "auth-source" 'noerror)
-    (require 'auth-source nil 'noerror))
-
-  ;; Load the appropriate timer package.
-  (if (featurep 'xemacs)
-      (require 'timer-funcs)
-    (require 'timer))
-
-  ;; 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.
-  ;; Note that it was removed altogether in Emacs 24.1.
-  (when (boundp 'directory-sep-char)
-    (defvar byte-compile-not-obsolete-var nil)
-    (setq byte-compile-not-obsolete-var 'directory-sep-char)
-    ;; Emacs 23.2.
-    (defvar byte-compile-not-obsolete-vars nil)
-    (setq byte-compile-not-obsolete-vars '(directory-sep-char)))
-
-  ;; `remote-file-name-inhibit-cache' has been introduced with Emacs 24.1.
-  ;; Besides t, nil, and integer, we use also timestamps (as
-  ;; returned by `current-time') internally.
-  (unless (boundp 'remote-file-name-inhibit-cache)
-    (defvar remote-file-name-inhibit-cache nil))
-
-  ;; For not existing functions, or functions with a changed argument
-  ;; list, there are compiler warnings.  We want to avoid them in
-  ;; cases we know what we do.
-  (defmacro tramp-compat-funcall (function &rest arguments)
-    (if (featurep 'xemacs)
-       `(funcall (symbol-function ,function) ,@arguments)
-      `(when (or (subrp ,function) (functionp ,function))
-        (with-no-warnings (funcall ,function ,@arguments)))))
-
-  ;; `set-buffer-multibyte' comes from Emacs Leim.
-  (unless (fboundp 'set-buffer-multibyte)
-    (defalias 'set-buffer-multibyte 'ignore))
-
-  ;; The following functions cannot be aliases of the corresponding
-  ;; `tramp-handle-*' functions, because this would bypass the locking
-  ;; mechanism.
-
-  ;; `process-file' does not exist in XEmacs.
-  (unless (fboundp 'process-file)
-    (defalias 'process-file
-      (lambda (program &optional infile buffer display &rest args)
-       (when (tramp-tramp-file-p default-directory)
-         (apply
-          'tramp-file-name-handler
-          'process-file program infile buffer display args)))))
-
-  ;; `start-file-process' is new in Emacs 23.
-  (unless (fboundp 'start-file-process)
-    (defalias 'start-file-process
-      (lambda (name buffer program &rest program-args)
-       (when (tramp-tramp-file-p default-directory)
-         (apply
-          'tramp-file-name-handler
-          'start-file-process name buffer program program-args)))))
-
-  ;; `set-file-times' is also new in Emacs 23.
-  (unless (fboundp 'set-file-times)
-    (defalias 'set-file-times
-      (lambda (filename &optional time)
-       (when (tramp-tramp-file-p filename)
-         (tramp-compat-funcall
-          'tramp-file-name-handler 'set-file-times filename time)))))
-
-  ;; We currently use "[" and "]" in the filename format for IPv6
-  ;; hosts of GNU Emacs.  This means that Emacs wants to expand
-  ;; wildcards if `find-file-wildcards' is non-nil, and then barfs
-  ;; because no expansion could be found.  We detect this situation
-  ;; and do something really awful: we have `file-expand-wildcards'
-  ;; return the original filename if it can't expand anything.  Let's
-  ;; just hope that this doesn't break anything else.
-  ;; It is not needed anymore since GNU Emacs 23.2.
-  (unless (or (featurep 'xemacs)
-             ;; `featurep' has only one argument in XEmacs.
-             (funcall 'featurep 'files 'remote-wildcards))
-    (defadvice file-expand-wildcards
+(require 'auth-source)
+(require 'advice)
+(require 'custom)
+(require 'format-spec)
+(require 'password-cache)
+(require 'shell)
+(require 'timer)
+(require 'ucs-normalize)
+
+(require 'trampver)
+(require 'tramp-loaddefs)
+
+;; `remote-file-name-inhibit-cache' has been introduced with Emacs
+;; 24.1.  Besides t, nil, and integer, we use also timestamps (as
+;; returned by `current-time') internally.
+(unless (boundp 'remote-file-name-inhibit-cache)
+  (defvar remote-file-name-inhibit-cache nil))
+
+;; For not existing functions, or functions with a changed argument
+;; list, there are compiler warnings.  We want to avoid them in cases
+;; we know what we do.
+(defmacro tramp-compat-funcall (function &rest arguments)
+  `(when (or (subrp ,function) (functionp ,function))
+     (with-no-warnings (funcall ,function ,@arguments))))
+
+;; We currently use "[" and "]" in the filename format for IPv6 hosts
+;; of GNU Emacs.  This means that Emacs wants to expand wildcards if
+;; `find-file-wildcards' is non-nil, and then barfs because no
+;; expansion could be found.  We detect this situation and do
+;; something really awful: we have `file-expand-wildcards' return the
+;; original filename if it can't expand anything.  Let's just hope
+;; that this doesn't break anything else.  It is not needed anymore
+;; since GNU Emacs 23.2.
+(unless (featurep 'files 'remote-wildcards)
+  (defadvice file-expand-wildcards
       (around tramp-advice-file-expand-wildcards activate)
-      (let ((name (ad-get-arg 0)))
-       ;; If it's a Tramp file, look if wildcards need to be expanded
-       ;; at all.
-       (if (and
-            (tramp-tramp-file-p name)
-            (not (string-match
-                  "[[*?]" (tramp-compat-funcall
-                           'file-remote-p name 'localname))))
-           (setq ad-return-value (list name))
-         ;; Otherwise, just run the original function.
-         ad-do-it)))
-    (add-hook
-     'tramp-unload-hook
-     (lambda ()
-       (ad-remove-advice
-       'file-expand-wildcards 'around 'tramp-advice-file-expand-wildcards)
-       (ad-activate 'file-expand-wildcards))))
-
-  ;; `redisplay' does not exist in XEmacs.
-  (unless (fboundp 'redisplay)
-    (defalias 'redisplay 'ignore)))
-
-;; `with-temp-message' does not exist in XEmacs.
-(if (fboundp 'with-temp-message)
-    (defalias 'tramp-compat-with-temp-message 'with-temp-message)
-  (defmacro tramp-compat-with-temp-message (_message &rest body)
-    "Display MESSAGE temporarily if non-nil while BODY is evaluated."
-    `(progn ,@body)))
+    (let ((name (ad-get-arg 0)))
+      ;; If it's a Tramp file, look if wildcards need to be expanded
+      ;; at all.
+      (if (and
+          (tramp-tramp-file-p name)
+          (not (string-match "[[*?]" (file-remote-p name 'localname))))
+         (setq ad-return-value (list name))
+       ;; Otherwise, just run the original function.
+       ad-do-it)))
+  (add-hook
+   'tramp-unload-hook
+   (lambda ()
+     (ad-remove-advice
+      'file-expand-wildcards 'around 'tramp-advice-file-expand-wildcards)
+     (ad-activate 'file-expand-wildcards))))
 
 ;; `condition-case-unless-debug' is introduced with Emacs 24.
 (if (fboundp 'condition-case-unless-debug)
               (funcall ,bodysym)
             ,@handlers))))))
 
-;; `font-lock-add-keywords' does not exist in XEmacs.
-(defun tramp-compat-font-lock-add-keywords (mode keywords &optional how)
-  "Add highlighting KEYWORDS for MODE."
-  (ignore-errors
-    (tramp-compat-funcall 'font-lock-add-keywords mode keywords how)))
-
 (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'."
-  (let (file-name-handler-alist)
-    ;; We must return a local directory.  If it is remote, we could
-    ;; run into an infloop.
-    (cond
-     ((and (boundp 'temporary-file-directory)
-          (eval (car (get 'temporary-file-directory 'standard-value)))))
-     ((fboundp 'temp-directory) (tramp-compat-funcall '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.  On XEmacs, we use our own
-;; implementation with `make-temp-name', creating the temporary file
-;; immediately in order to avoid a security hole.
+  "Return name of directory for temporary files.
+It is the default value of `temporary-file-directory'."
+  ;; We must return a local directory.  If it is remote, we could run
+  ;; into an infloop.
+  (eval (car (get 'temporary-file-directory 'standard-value))))
+
 (defsubst tramp-compat-make-temp-file (f &optional dir-flag)
-  "Create a temporary file (compat function).
+  "Create a local temporary file (compat function).
 Add the extension of F, if existing."
   (let* (file-name-handler-alist
         (prefix (expand-file-name
                  (symbol-value 'tramp-temp-name-prefix)
                  (tramp-compat-temporary-file-directory)))
-        (extension (file-name-extension f t))
-        result)
-    (condition-case nil
-       (setq result
-             (tramp-compat-funcall 'make-temp-file prefix dir-flag extension))
-      (error
-       ;; We use our own implementation, taken from files.el.
-       (while
-          (condition-case ()
-              (progn
-                (setq result (concat (make-temp-name prefix) extension))
-                (if dir-flag
-                    (make-directory result)
-                  (write-region "" nil result nil 'silent))
-                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' does not exist in XEmacs.
-(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.
-   (t 134217727)))
-
-(defun tramp-compat-decimal-to-octal (i)
-  "Return a string consisting of the octal digits of I.
-Not actually used.  Use `(format \"%o\" i)' instead?"
-  (cond ((< i 0) (error "Cannot convert negative number to octal"))
-        ((not (integerp i)) (error "Cannot convert non-integer to octal"))
-        ((zerop i) "0")
-        (t (concat (tramp-compat-decimal-to-octal (/ i 8))
-                   (number-to-string (% i 8))))))
-
-;; Kudos to Gerd Moellmann for this suggestion.
-(defun tramp-compat-octal-to-decimal (ostr)
-  "Given a string of octal digits, return a decimal number."
-  (let ((x (or ostr "")))
-    ;; `save-match' is in `tramp-mode-string-to-int' which calls this.
-    (unless (string-match "\\`[0-7]*\\'" x)
-      (error "Non-octal junk in string `%s'" x))
-    (string-to-number ostr 8)))
-
-;; ID-FORMAT does not exist in XEmacs.
-(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))
-   ((tramp-tramp-file-p filename)
-    (tramp-compat-funcall
-     'tramp-file-name-handler 'file-attributes filename id-format))
-   (t (condition-case nil
-         (tramp-compat-funcall 'file-attributes filename id-format)
-       (wrong-number-of-arguments (file-attributes filename))))))
-
-;; PRESERVE-UID-GID does not exist in XEmacs.
+        (extension (file-name-extension f t)))
+    (make-temp-file prefix dir-flag extension)))
+
 ;; PRESERVE-EXTENDED-ATTRIBUTES has been introduced with Emacs 24.1
 ;; (as PRESERVE-SELINUX-CONTEXT), and renamed in Emacs 24.3.
 (defun tramp-compat-copy-file
@@ -320,21 +130,13 @@ Not actually used.  Use `(format \"%o\" i)' instead?"
         'copy-file filename newname ok-if-already-exists keep-date
         preserve-uid-gid preserve-extended-attributes)
       (wrong-number-of-arguments
-       (tramp-compat-copy-file
+       (copy-file
        filename newname ok-if-already-exists keep-date preserve-uid-gid))))
-   (preserve-uid-gid
-    (condition-case nil
-       (tramp-compat-funcall
-        'copy-file filename newname ok-if-already-exists keep-date
-        preserve-uid-gid)
-      (wrong-number-of-arguments
-       (tramp-compat-copy-file
-       filename newname ok-if-already-exists keep-date))))
    (t
-    (copy-file filename newname ok-if-already-exists keep-date))))
+    (copy-file
+     filename newname ok-if-already-exists keep-date preserve-uid-gid))))
 
-;; `copy-directory' is a new function in Emacs 23.2.  Implementation
-;; is taken from there.
+;; COPY-CONTENTS has been introduced with Emacs 24.1.
 (defun tramp-compat-copy-directory
   (directory newname &optional keep-time parents copy-contents)
   "Make a copy of DIRECTORY (compat function)."
@@ -401,12 +203,10 @@ Not actually used.  Use `(format \"%o\" i)' instead?"
       (cond
        (trash
        (tramp-compat-funcall 'delete-directory directory recursive trash))
-       (recursive
-       (tramp-compat-funcall 'delete-directory directory recursive))
        (t
-       (delete-directory directory)))
-    ;; This Emacs version does not support the RECURSIVE or TRASH flag.  We
-    ;; use the implementation from Emacs 23.2.
+       (delete-directory directory recursive)))
+    ;; This Emacs version does not support the TRASH flag.  We use the
+    ;; implementation from Emacs 23.2.
     (wrong-number-of-arguments
      (setq directory (directory-file-name (expand-file-name directory)))
      (if (not (file-symlink-p directory))
@@ -418,42 +218,6 @@ Not actually used.  Use `(format \"%o\" i)' instead?"
                directory 'full "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*")))
      (delete-directory directory))))
 
-;; MUST-SUFFIX doesn't exist on XEmacs.
-(defun tramp-compat-load (file &optional noerror nomessage nosuffix must-suffix)
-  "Like `load' for Tramp files (compat function)."
-  (if must-suffix
-      (tramp-compat-funcall 'load file noerror nomessage nosuffix must-suffix)
-    (load file noerror nomessage nosuffix)))
-
-;; `number-sequence' does not exist in XEmacs.  Implementation is
-;; taken from Emacs 23.
-(defun tramp-compat-number-sequence (from &optional to inc)
-  "Return a sequence of numbers from FROM to TO as a list (compat function)."
-  (if (or (subrp 'number-sequence) (symbol-file 'number-sequence))
-      (tramp-compat-funcall 'number-sequence from to inc)
-    (if (or (not to) (= from to))
-       (list from)
-      (or inc (setq inc 1))
-      (when (zerop inc) (error "The increment can not be zero"))
-      (let (seq (n 0) (next from))
-       (if (> inc 0)
-           (while (<= next to)
-             (setq seq (cons next seq)
-                   n (1+ n)
-                   next (+ from (* n inc))))
-         (while (>= next to)
-           (setq seq (cons next seq)
-                 n (1+ n)
-                 next (+ from (* n inc)))))
-       (nreverse seq)))))
-
-(defun tramp-compat-split-string (string pattern)
-  "Like `split-string' but omit empty strings.
-In Emacs, (split-string \"/foo/bar\" \"/\") returns (\"foo\" \"bar\").
-This is, the first, empty, element is omitted.  In XEmacs, the first
-element is not omitted."
-  (delete "" (split-string string pattern)))
-
 (defun tramp-compat-process-running-p (process-name)
   "Returns t if system process PROCESS-NAME is running for `user-login-name'."
   (when (stringp process-name)
@@ -466,7 +230,7 @@ element is not omitted."
      ((and (fboundp 'list-system-processes) (fboundp 'process-attributes))
       (let (result)
        (dolist (pid (tramp-compat-funcall 'list-system-processes) result)
-         (let ((attributes (tramp-compat-funcall 'process-attributes pid)))
+         (let ((attributes (process-attributes pid)))
            (when (and (string-equal
                         (cdr (assoc 'user attributes)) (user-login-name))
                        (let ((comm (cdr (assoc 'comm attributes))))
@@ -476,135 +240,16 @@ element is not omitted."
                          (and comm (string-match
                                     (concat "^" (regexp-quote comm))
                                     process-name))))
-             (setq result t))))))
-
-     ;; Fallback, if there is no Lisp support yet.
-     (t (let ((default-directory
-               (if (tramp-tramp-file-p default-directory)
-                   (tramp-compat-temporary-file-directory)
-                 default-directory))
-             (unix95 (getenv "UNIX95"))
-             result)
-         (setenv "UNIX95" "1")
-         (when (member
-                (user-login-name)
-                (tramp-compat-split-string
-                 (shell-command-to-string
-                  (format "ps -C %s -o user=" process-name))
-                 "[ \f\t\n\r\v]+"))
-           (setq result t))
-         (setenv "UNIX95" unix95)
-         result)))))
-
-;; The following functions do not exist in XEmacs.  We ignore this;
-;; they are used for checking a remote tty.
-(defun tramp-compat-process-get (process propname)
-  "Return the value of PROCESS' PROPNAME property.
-This is the last value stored with `(process-put PROCESS PROPNAME VALUE)'."
-  (ignore-errors (tramp-compat-funcall 'process-get process propname)))
-
-(defun tramp-compat-process-put (process propname value)
-  "Change PROCESS' PROPNAME property to VALUE.
-It can be retrieved with `(process-get PROCESS PROPNAME)'."
-  (ignore-errors (tramp-compat-funcall 'process-put process propname value)))
-
-(defun tramp-compat-set-process-query-on-exit-flag (process flag)
-  "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."
-  (if (fboundp 'set-process-query-on-exit-flag)
-      (tramp-compat-funcall 'set-process-query-on-exit-flag process flag)
-    (tramp-compat-funcall 'process-kill-without-query process flag)))
-
-;; There exist different implementations for this function.
-(defun tramp-compat-coding-system-change-eol-conversion (coding-system eol-type)
-  "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)
-         (tramp-compat-funcall
-         'coding-system-change-eol-conversion coding-system eol-type))
-        ((fboundp 'subsidiary-coding-system)
-         (tramp-compat-funcall
-         '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 `dos', `unix', or `mac'"
-                   eol-type)))))
-        (t (error "Can't change EOL conversion -- is MULE missing?"))))
-
-;; `replace-regexp-in-string' does not exist in XEmacs.
-;; Implementation is taken from Emacs 24.
-(if (fboundp 'replace-regexp-in-string)
-    (defalias 'tramp-compat-replace-regexp-in-string 'replace-regexp-in-string)
-  (defun tramp-compat-replace-regexp-in-string
-    (regexp rep string &optional fixedcase literal subexp start)
-    "Replace all matches for REGEXP with REP in STRING.
-
-Return a new string containing the replacements.
-
-Optional arguments FIXEDCASE, LITERAL and SUBEXP are like the
-arguments with the same names of function `replace-match'.  If START
-is non-nil, start replacements at that index in STRING.
-
-REP is either a string used as the NEWTEXT arg of `replace-match' or a
-function.  If it is a function, it is called with the actual text of each
-match, and its value is used as the replacement text.  When REP is called,
-the match data are the result of matching REGEXP against a substring
-of STRING.
-
-To replace only the first match (if any), make REGEXP match up to \\'
-and replace a sub-expression, e.g.
-  (replace-regexp-in-string \"\\\\(foo\\\\).*\\\\'\" \"bar\" \" foo foo\" nil nil 1)
-    => \" bar foo\""
-
-    (let ((l (length string))
-         (start (or start 0))
-         matches str mb me)
-      (save-match-data
-       (while (and (< start l) (string-match regexp string start))
-         (setq mb (match-beginning 0)
-               me (match-end 0))
-         ;; If we matched the empty string, make sure we advance by one char
-         (when (= me mb) (setq me (min l (1+ mb))))
-         ;; Generate a replacement for the matched substring.
-         ;; Operate only on the substring to minimize string consing.
-         ;; Set up match data for the substring for replacement;
-         ;; presumably this is likely to be faster than munging the
-         ;; match data directly in Lisp.
-         (string-match regexp (setq str (substring string mb me)))
-         (setq matches
-               (cons (replace-match (if (stringp rep)
-                                        rep
-                                      (funcall rep (match-string 0 str)))
-                                    fixedcase literal str subexp)
-                     (cons (substring string start mb) ; unmatched prefix
-                           matches)))
-         (setq start me))
-       ;; Reconstruct a string from the pieces.
-       (setq matches (cons (substring string start l) matches)) ; leftover
-       (apply #'concat (nreverse matches))))))
+             (setq result t)))))))))
 
 ;; `default-toplevel-value' has been declared in Emacs 24.
 (unless (fboundp 'default-toplevel-value)
   (defalias 'default-toplevel-value 'symbol-value))
 
-;; `format-message' is new in Emacs 25, and does not exist in XEmacs.
+;; `format-message' is new in Emacs 25.
 (unless (fboundp 'format-message)
   (defalias 'format-message 'format))
 
-;; `delete-dups' does not exist in XEmacs 21.4.
-(if (fboundp 'delete-dups)
-    (defalias 'tramp-compat-delete-dups 'delete-dups)
-  (defun tramp-compat-delete-dups (list)
-  "Destructively remove `equal' duplicates from LIST.
-Store the result in LIST and return it.  LIST must be a proper list.
-Of several `equal' occurrences of an element in LIST, the first
-one is kept."
-  (tramp-compat-funcall
-   'cl-delete-duplicates list '(:test equal :from-end) nil)))
-
 (add-hook 'tramp-unload-hook
          (lambda ()
            (unload-feature 'tramp-loaddefs 'force)
index 902b0a4ed86f975a040fc0093bf1f2d1df806b65..caca3c0cb4c6d5c2d932f35796b39489b49ce98e 100644 (file)
 (defvar ange-ftp-name-format)
 
 ;; Disable Ange-FTP from file-name-handler-alist.
-;; To handle EFS, the following functions need to be dealt with:
-;;
-;; * dired-before-readin-hook contains efs-dired-before-readin
-;; * file-name-handler-alist contains efs-file-handler-function
-;;   and efs-root-handler-function and efs-sifn-handler-function
-;; * find-file-hooks contains efs-set-buffer-mode
-;;
-;; But it won't happen for EFS since the XEmacs maintainers
-;; don't want to use a unified filename syntax.
 (defun tramp-disable-ange-ftp ()
   "Turn Ange-FTP off.
 This is useful for unified remoting.  See
@@ -104,14 +95,15 @@ present for backward compatibility."
 
 ;; ... and add it to the method list.
 ;;;###tramp-autoload
-(unless (featurep 'xemacs)
-  (add-to-list 'tramp-methods (cons tramp-ftp-method nil))
+(add-to-list 'tramp-methods (cons tramp-ftp-method nil))
 
-  ;; Add some defaults for `tramp-default-method-alist'.
-  (add-to-list 'tramp-default-method-alist
-              (list "\\`ftp\\." nil tramp-ftp-method))
-  (add-to-list 'tramp-default-method-alist
-              (list nil "\\`\\(anonymous\\|ftp\\)\\'" tramp-ftp-method)))
+;; Add some defaults for `tramp-default-method-alist'.
+;;;###tramp-autoload
+(add-to-list 'tramp-default-method-alist
+            (list "\\`ftp\\." nil tramp-ftp-method))
+;;;###tramp-autoload
+(add-to-list 'tramp-default-method-alist
+            (list nil "\\`\\(anonymous\\|ftp\\)\\'" tramp-ftp-method))
 
 ;; Add completion function for FTP method.
 ;;;###tramp-autoload
@@ -195,9 +187,8 @@ pass to the OPERATION."
           tramp-ftp-method))
 
 ;;;###tramp-autoload
-(unless (featurep 'xemacs)
-  (add-to-list 'tramp-foreign-file-name-handler-alist
-              (cons 'tramp-ftp-file-name-p 'tramp-ftp-file-name-handler)))
+(add-to-list 'tramp-foreign-file-name-handler-alist
+            (cons 'tramp-ftp-file-name-p 'tramp-ftp-file-name-handler))
 
 (add-hook 'tramp-unload-hook
          (lambda ()
index dee8333e5477ccf83fb85593ca993020a7da4dcb..098d40e7cc0f4944c4f62e7b3ad2c40bb2852140 100644 (file)
@@ -422,7 +422,6 @@ Every entry is a list (NAME ADDRESS).")
     (directory-files . tramp-handle-directory-files)
     (directory-files-and-attributes
      . tramp-handle-directory-files-and-attributes)
-    (dired-call-process . ignore)
     (dired-compress-file . ignore)
     (dired-uncache . tramp-handle-dired-uncache)
     (expand-file-name . tramp-gvfs-handle-expand-file-name)
@@ -474,7 +473,7 @@ Every entry is a list (NAME ADDRESS).")
     (shell-command . ignore)
     (start-file-process . ignore)
     (substitute-in-file-name . tramp-handle-substitute-in-file-name)
-    (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+    (unhandled-file-name-directory . ignore)
     (vc-registered . ignore)
     (verify-visited-file-modtime . tramp-handle-verify-visited-file-modtime)
     (write-region . tramp-gvfs-handle-write-region))
@@ -562,8 +561,7 @@ will be traced by Tramp with trace level 6."
 
 (put 'with-tramp-dbus-call-method 'lisp-indent-function 2)
 (put 'with-tramp-dbus-call-method 'edebug-form-spec '(form symbolp body))
-(tramp-compat-font-lock-add-keywords
- 'emacs-lisp-mode '("\\<with-tramp-dbus-call-method\\>"))
+(font-lock-add-keywords 'emacs-lisp-mode '("\\<with-tramp-dbus-call-method\\>"))
 
 (defvar tramp-gvfs-dbus-event-vector nil
   "Current Tramp file name to be used, as vector.
@@ -623,19 +621,19 @@ file names."
                (and t2 (not (tramp-gvfs-file-name-p newname))))
 
            ;; We cannot copy or rename directly.
+           ;; PRESERVE-EXTENDED-ATTRIBUTES has been introduced with
+           ;; Emacs 24.1 (as PRESERVE-SELINUX-CONTEXT), and renamed
+           ;; in Emacs 24.3.
            (let ((tmpfile (tramp-compat-make-temp-file filename)))
              (cond
               (preserve-extended-attributes
-               (tramp-compat-funcall
+               (funcall
                 file-operation
                 filename tmpfile t keep-date preserve-uid-gid
                 preserve-extended-attributes))
-              (preserve-uid-gid
-               (tramp-compat-funcall
-                file-operation filename tmpfile t keep-date preserve-uid-gid))
               (t
-               (tramp-compat-funcall
-                file-operation filename tmpfile t keep-date)))
+               (funcall
+                file-operation filename tmpfile t keep-date preserve-uid-gid)))
              (rename-file tmpfile newname ok-if-already-exists))
 
          ;; Direct action.
@@ -693,19 +691,18 @@ file names."
     (tramp-gvfs-do-copy-or-rename-file
      'copy filename newname ok-if-already-exists keep-date
      preserve-uid-gid preserve-extended-attributes))
-   ;; Compat section.
+   ;; Compat section.  PRESERVE-EXTENDED-ATTRIBUTES has been
+   ;; introduced with Emacs 24.1 (as PRESERVE-SELINUX-CONTEXT), and
+   ;; renamed in Emacs 24.3.
    (preserve-extended-attributes
     (tramp-run-real-handler
      'copy-file
      (list filename newname ok-if-already-exists keep-date
           preserve-uid-gid preserve-extended-attributes)))
-   (preserve-uid-gid
-    (tramp-run-real-handler
-     'copy-file
-     (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)))))
+     'copy-file
+     (list filename newname ok-if-already-exists keep-date preserve-uid-gid)))))
 
 (defun tramp-gvfs-handle-delete-directory (directory &optional recursive trash)
   "Like `delete-directory' for Tramp files."
@@ -923,7 +920,7 @@ file names."
        (tramp-error
         v 'file-error
         "Cannot make local copy of non-existing file `%s'" filename))
-      (copy-file filename tmpfile t t)
+      (copy-file filename tmpfile 'ok-if-already-exists 'keep-time)
       tmpfile)))
 
 (defun tramp-gvfs-handle-file-name-all-completions (filename directory)
@@ -960,7 +957,7 @@ file names."
                  (when cache-hit (list cache-hit))))
              ;; We cannot use a length of 0, because file properties
              ;; for "foo" and "foo/" are identical.
-             (tramp-compat-number-sequence (length filename) 1 -1)))))
+             (number-sequence (length filename) 1 -1)))))
 
          ;; Cache expired or no matching cache entry found so we need
          ;; to perform a remote operation.
@@ -1024,9 +1021,9 @@ file names."
        (tramp-message
         v 6 "Run `%s', %S" (mapconcat 'identity (process-command p) " ") p)
        (tramp-set-connection-property p "vector" v)
-       (tramp-compat-process-put p 'events events)
-       (tramp-compat-process-put p 'watch-name localname)
-       (tramp-compat-set-process-query-on-exit-flag p nil)
+       (process-put p 'events events)
+       (process-put p 'watch-name localname)
+       (set-process-query-on-exit-flag p nil)
        (set-process-filter p 'tramp-gvfs-monitor-file-process-filter)
        ;; There might be an error if the monitor is not supported.
        ;; Give the filter a chance to read the output.
@@ -1039,7 +1036,7 @@ file names."
 (defun tramp-gvfs-monitor-file-process-filter (proc string)
   "Read output from \"gvfs-monitor-file\" and add corresponding \
 file-notify events."
-  (let* ((rest-string (tramp-compat-process-get proc 'rest-string))
+  (let* ((rest-string (process-get proc 'rest-string))
         (dd (with-current-buffer (process-buffer proc) default-directory))
         (ddu (regexp-quote (tramp-gvfs-url-file-name dd))))
     (when rest-string
@@ -1047,7 +1044,7 @@ file-notify events."
     (tramp-message proc 6 "%S\n%s" proc string)
     (setq string (concat rest-string string)
          ;; Attribute change is returned in unused wording.
-         string (tramp-compat-replace-regexp-in-string
+         string (replace-regexp-in-string
                  "ATTRIB CHANGED" "ATTRIBUTE_CHANGED" string))
     (when (string-match "Monitoring not supported" string)
       (delete-process proc))
@@ -1060,7 +1057,7 @@ file-notify events."
            string)
       (let ((file (match-string 1 string))
            (action (intern-soft
-                    (tramp-compat-replace-regexp-in-string
+                    (replace-regexp-in-string
                      "_" "-" (downcase (match-string 2 string))))))
        (setq string (replace-match "" nil nil string))
        ;; File names are returned as URL paths.  We must convert them.
@@ -1079,12 +1076,12 @@ file-notify events."
     ;; Save rest of the string.
     (when (zerop (length string)) (setq string nil))
     (when string (tramp-message proc 10 "Rest string:\n%s" string))
-    (tramp-compat-process-put proc 'rest-string string)))
+    (process-put proc 'rest-string string)))
 
 (defun tramp-gvfs-handle-file-readable-p (filename)
   "Like `file-readable-p' for Tramp files."
   (with-parsed-tramp-file-name filename nil
-    (with-tramp-file-property v localname "file-executable-p"
+    (with-tramp-file-property v localname "file-readable-p"
       (tramp-check-cached-permissions v ?r))))
 
 (defun tramp-gvfs-handle-file-writable-p (filename)
@@ -1125,7 +1122,8 @@ file-notify events."
   (if (or (tramp-tramp-file-p filename)
           (tramp-tramp-file-p newname))
       (tramp-gvfs-do-copy-or-rename-file
-       'rename filename newname ok-if-already-exists t t)
+       'rename filename newname ok-if-already-exists
+       'keep-date 'preserve-uid-gid)
     (tramp-run-real-handler
      'rename-file (list filename newname ok-if-already-exists))))
 
@@ -1133,8 +1131,7 @@ file-notify events."
   (start end filename &optional append visit lockname confirm)
   "Like `write-region' for Tramp files."
   (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))
+    (when (and 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")))
 
@@ -1203,8 +1200,7 @@ file-notify events."
 (defun tramp-gvfs-file-name (object-path)
   "Retrieve file name from D-Bus OBJECT-PATH."
   (dbus-unescape-from-identifier
-   (tramp-compat-replace-regexp-in-string
-    "^.*/\\([^/]+\\)$" "\\1" object-path)))
+   (replace-regexp-in-string "^.*/\\([^/]+\\)$" "\\1" object-path)))
 
 (defun tramp-bluez-address (device)
   "Return bluetooth device address from a given bluetooth DEVICE name."
@@ -1293,7 +1289,7 @@ ADDRESS can have the form \"xx:xx:xx:xx:xx:xx\" or \"[xx:xx:xx:xx:xx:xx]\"."
            ;; host signature.
            (with-temp-buffer
              ;; Preserve message for `progress-reporter'.
-             (tramp-compat-with-temp-message ""
+             (with-temp-message ""
                (insert message)
                (pop-to-buffer (current-buffer))
                (setq choice (if (yes-or-no-p (concat (car choices) " ")) 0 1))
@@ -1533,7 +1529,7 @@ connection if a previous connection has died for some reason."
              :name (tramp-buffer-name vec)
              :buffer (tramp-get-connection-buffer vec)
              :server t :host 'local :service t)))
-      (tramp-compat-set-process-query-on-exit-flag p nil)))
+      (set-process-query-on-exit-flag p nil)))
 
   (unless (tramp-gvfs-connection-mounted-p vec)
     (let* ((method (tramp-file-name-method vec))
@@ -1755,7 +1751,7 @@ This uses \"avahi-browse\" in case D-Bus is not enabled in Avahi."
            'split-string
            (shell-command-to-string (format "avahi-browse -trkp %s" service))
            "[\n\r]+" 'omit "^\\+;.*$"))))
-    (tramp-compat-delete-dups
+    (delete-dups
      (mapcar
       (lambda (x)
        (let* ((list (split-string x ";"))
index f868bead09a776d28e83bfdc7168733bbf857f32..a1ddceb4682b7d2b8e4af884bd0a94323edb8c80 100644 (file)
      tramp-gw-vector 4
      "Opening auxiliary process `%s', speaking with process `%s'"
      proc tramp-gw-gw-proc)
-    (tramp-compat-set-process-query-on-exit-flag proc nil)
+    (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 0))
@@ -158,7 +158,7 @@ instead of the host name declared in TARGET-VEC."
             :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-compat-set-process-query-on-exit-flag tramp-gw-aux-proc nil)
+      (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))))
@@ -204,7 +204,7 @@ instead of the host name declared in TARGET-VEC."
           (tramp-file-name-port target-vec)))
     (set-process-sentinel tramp-gw-gw-proc 'tramp-gw-gw-proc-sentinel)
     (set-process-coding-system tramp-gw-gw-proc 'binary 'binary)
-    (tramp-compat-set-process-query-on-exit-flag tramp-gw-gw-proc nil)
+    (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"))
@@ -235,14 +235,14 @@ authentication is requested from proxy server, provide it."
       (setq proc (open-network-stream
                  name buffer (nth 1 socks-server) (nth 2 socks-server)))
       (set-process-coding-system proc 'binary 'binary)
-      (tramp-compat-set-process-query-on-exit-flag proc nil)
+      (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
-       (tramp-compat-replace-regexp-in-string ;; no password in trace!
+       (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,
index 4d529f7aa323c811c6fbe8d088878d9513563c5c..071ec576652b2c9439f13bf826e6aa634e1f0ecc 100644 (file)
@@ -32,7 +32,6 @@
 (eval-when-compile
   (require 'cl)
   (require 'dired))
-(defvar directory-sep-char)
 (defvar tramp-gw-tunnel-method)
 (defvar tramp-gw-socks-method)
 (defvar vc-handled-backends)
@@ -118,7 +117,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
   "Which ssh Control* arguments to use.
 
 If it is a string, it should have the form
-\"-o ControlMaster=auto -o ControlPath='tramp.%%r@%%h:%%p'
+\"-o ControlMaster=auto -o ControlPath=\\='tramp.%%r@%%h:%%p\\='
 -o ControlPersist=no\".  Percent characters in the ControlPath
 spec must be doubled, because the string is used as format string.
 
@@ -285,6 +284,15 @@ The string is used in `tramp-methods'.")
     (tramp-remote-shell-args    ("-c"))
     (tramp-connection-timeout   10)))
 ;;;###tramp-autoload
+(add-to-list
+ 'tramp-methods
+ '("sg"
+   (tramp-login-program        "sg")
+   (tramp-login-args           (("-") ("%u")))
+   (tramp-remote-shell         "/bin/sh")
+   (tramp-remote-shell-args    ("-c"))
+   (tramp-connection-timeout   10)))
+;;;###tramp-autoload
 (add-to-list 'tramp-methods
   '("sudo"
     (tramp-login-program        "sudo")
@@ -299,6 +307,14 @@ The string is used in `tramp-methods'.")
     (tramp-remote-shell-args    ("-c"))
     (tramp-connection-timeout   10)))
 ;;;###tramp-autoload
+(add-to-list 'tramp-methods
+  '("doas"
+    (tramp-login-program        "doas")
+    (tramp-login-args           (("-u" "%u") ("-s")))
+    (tramp-remote-shell         "/bin/sh")
+    (tramp-remote-shell-args    ("-c"))
+    (tramp-connection-timeout   10)))
+;;;###tramp-autoload
 (add-to-list 'tramp-methods
   '("ksu"
     (tramp-login-program        "ksu")
@@ -380,9 +396,8 @@ The string is used in `tramp-methods'.")
     (tramp-remote-shell-args    ("-c"))
     (tramp-copy-program         "pscp")
     (tramp-copy-args            (("-l" "%u") ("-P" "%p") ("-sftp") ("-p" "%k")
-                                ("-q") ("-r")))
-    (tramp-copy-keep-date       t)
-    (tramp-copy-recursive       t)))
+                                ("-q")))
+    (tramp-copy-keep-date       t)))
 ;;;###tramp-autoload
 (add-to-list 'tramp-methods
   '("fcp"
@@ -401,7 +416,7 @@ The string is used in `tramp-methods'.")
 
 ;;;###tramp-autoload
 (add-to-list 'tramp-default-user-alist
-            `(,(concat "\\`" (regexp-opt '("su" "sudo" "ksu")) "\\'")
+            `(,(concat "\\`" (regexp-opt '("su" "sudo" "doas" "ksu")) "\\'")
               nil "root"))
 ;; Do not add "ssh" based methods, otherwise ~/.ssh/config would be ignored.
 ;; Do not add "plink" based methods, they ask interactively for the user.
@@ -446,13 +461,18 @@ The string is used in `tramp-methods'.")
   '((tramp-parse-passwd "/etc/passwd"))
   "Default list of (FUNCTION FILE) pairs to be examined for su methods.")
 
+;;;###tramp-autoload
+(defconst tramp-completion-function-alist-sg
+  '((tramp-parse-etc-group "/etc/group"))
+  "Default list of (FUNCTION FILE) pairs to be examined for sg methods.")
+
 ;;;###tramp-autoload
 (defconst tramp-completion-function-alist-putty
   `((tramp-parse-putty
      ,(if (memq system-type '(windows-nt))
          "HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions"
        "~/.putty/sessions")))
 "Default list of (FUNCTION REGISTRY) pairs to be examined for putty sessions.")
+ "Default list of (FUNCTION REGISTRY) pairs to be examined for putty sessions.")
 
 ;;;###tramp-autoload
 (eval-after-load 'tramp
@@ -471,7 +491,9 @@ The string is used in `tramp-methods'.")
      (tramp-set-completion-function "nc" tramp-completion-function-alist-telnet)
      (tramp-set-completion-function "su" tramp-completion-function-alist-su)
      (tramp-set-completion-function "sudo" tramp-completion-function-alist-su)
+     (tramp-set-completion-function "doas" tramp-completion-function-alist-su)
      (tramp-set-completion-function "ksu" tramp-completion-function-alist-su)
+     (tramp-set-completion-function "sg" tramp-completion-function-alist-sg)
      (tramp-set-completion-function
       "krlogin" tramp-completion-function-alist-rsh)
      (tramp-set-completion-function "plink" tramp-completion-function-alist-ssh)
@@ -484,7 +506,7 @@ The string is used in `tramp-methods'.")
 ;; "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
-;; GNU/Linux (Debian, Suse): /bin:/usr/bin
+;; GNU/Linux (Debian, Suse, RHEL): /bin:/usr/bin
 ;; FreeBSD: /usr/bin:/bin:/usr/sbin:/sbin: - beware trailing ":"!
 ;; Darwin: /usr/bin:/bin:/usr/sbin:/sbin
 ;; IRIX64: /usr/bin
@@ -986,10 +1008,7 @@ of command line.")
     (directory-files . tramp-handle-directory-files)
     (directory-files-and-attributes
      . tramp-sh-handle-directory-files-and-attributes)
-    ;; `dired-call-process' performed by default handler.
     (dired-compress-file . tramp-sh-handle-dired-compress-file)
-    (dired-recursive-delete-directory
-     . tramp-sh-handle-dired-recursive-delete-directory)
     (dired-uncache . tramp-handle-dired-uncache)
     (expand-file-name . tramp-sh-handle-expand-file-name)
     (file-accessible-directory-p . tramp-handle-file-accessible-directory-p)
@@ -1025,8 +1044,6 @@ of command line.")
     ;; `get-file-buffer' performed by default handler.
     (insert-directory . tramp-sh-handle-insert-directory)
     (insert-file-contents . tramp-handle-insert-file-contents)
-    (insert-file-contents-literally
-     . tramp-sh-handle-insert-file-contents-literally)
     (load . tramp-handle-load)
     (make-auto-save-file-name . tramp-handle-make-auto-save-file-name)
     (make-directory . tramp-sh-handle-make-directory)
@@ -1041,7 +1058,7 @@ of command line.")
     (shell-command . tramp-handle-shell-command)
     (start-file-process . tramp-sh-handle-start-file-process)
     (substitute-in-file-name . tramp-handle-substitute-in-file-name)
-    (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+    (unhandled-file-name-directory . ignore)
     (vc-registered . tramp-sh-handle-vc-registered)
     (verify-visited-file-modtime . tramp-sh-handle-verify-visited-file-modtime)
     (write-region . tramp-sh-handle-write-region))
@@ -1148,10 +1165,8 @@ target of the symlink differ."
                   (format "tramp_perl_file_truename %s"
                           (tramp-shell-quote-argument localname)))))
 
-          ;; Do it yourself.  We bind `directory-sep-char' here for
-          ;; XEmacs on Windows, which would otherwise use backslash.
-          (t (let ((directory-sep-char ?/)
-                   (steps (tramp-compat-split-string localname "/"))
+          ;; Do it yourself.
+          (t (let ((steps (split-string localname "/" 'omit))
                    (thisstep nil)
                    (numchase 0)
                    ;; Don't make the following value larger than
@@ -1200,9 +1215,8 @@ target of the symlink differ."
                              symlink-target))
                           (setq symlink-target localname))
                         (setq steps
-                              (append (tramp-compat-split-string
-                                       symlink-target "/")
-                                      steps)))
+                              (append
+                               (split-string symlink-target "/" 'omit) steps)))
                        (t
                         ;; It's a file.
                         (setq result (cons thisstep result)))))
@@ -1355,8 +1369,8 @@ target of the symlink differ."
            res-gid
            ;; 4. Last access time, as a list of integers.  Normally
            ;; this would be in the same format as `current-time', but
-           ;; the subseconds part is not currently implemented, and (0
-           ;; 0) denotes an unknown time.
+           ;; the subseconds part is not currently implemented, and
+          ;; (0 0) denotes an unknown time.
            ;; 5. Last modification time, likewise.
            ;; 6. Last status change time, likewise.
            '(0 0) '(0 0) '(0 0)                ;CCC how to find out?
@@ -1370,8 +1384,7 @@ target of the symlink differ."
            ;; 10. Inode number.
            res-inode
            ;; 11. Device number.  Will be replaced by a virtual device number.
-           -1
-           ))))))
+           -1))))))
 
 (defun tramp-do-file-attributes-with-perl
   (vec localname &optional id-format)
@@ -1428,8 +1441,7 @@ target of the symlink differ."
               (attr (file-attributes f))
               ;; '(-1 65535) means file doesn't exists yet.
               (modtime (or (nth 5 attr) '(-1 65535))))
-         (when (boundp 'last-coding-system-used)
-           (setq coding-system-used (symbol-value 'last-coding-system-used)))
+         (setq coding-system-used last-coding-system-used)
          ;; We use '(0 0) as a don't-know value.  See also
          ;; `tramp-do-file-attributes-with-ls'.
          (if (not (equal modtime '(0 0)))
@@ -1443,8 +1455,7 @@ target of the symlink differ."
              (setq attr (buffer-substring (point) (point-at-eol))))
            (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))
+         (setq last-coding-system-used coding-system-used)
          nil)))))
 
 ;; This function makes the same assumption as
@@ -1463,7 +1474,7 @@ of."
       ;; connection.
       (if (or (not f)
              (eq (visited-file-modtime) 0)
-             (not (tramp-file-name-handler 'file-remote-p f nil 'connected)))
+             (not (file-remote-p f nil 'connected)))
          t
        (with-parsed-tramp-file-name f nil
          (let* ((remote-file-name-inhibit-cache t)
@@ -1508,48 +1519,26 @@ of."
     ;; FIXME: extract the proper text from chmod's stderr.
     (tramp-barf-unless-okay
      v
-     (format "chmod %s %s"
-            (tramp-compat-decimal-to-octal mode)
-            (tramp-shell-quote-argument localname))
+     (format "chmod %o %s" mode (tramp-shell-quote-argument localname))
      "Error while changing file's mode %s" filename)))
 
 (defun tramp-sh-handle-set-file-times (filename &optional time)
   "Like `set-file-times' for Tramp files."
-  (if (tramp-tramp-file-p filename)
-      (with-parsed-tramp-file-name filename nil
-       (when (tramp-get-remote-touch v)
-         (tramp-flush-file-property v (file-name-directory localname))
-         (tramp-flush-file-property v localname)
-         (let ((time (if (or (null time) (equal time '(0 0)))
-                         (current-time)
-                       time))
-               ;; With GNU Emacs, `format-time-string' has an
-               ;; optional parameter ZONE.  This is preferred,
-               ;; because we could handle the case when the remote
-               ;; host is located in a different time zone as the
-               ;; local host.
-               (utc (not (featurep 'xemacs))))
-           (tramp-send-command-and-check
-            v (format
-               "%s %s %s %s"
-               (if utc "env TZ=UTC" "")
-               (tramp-get-remote-touch v)
-               (if (tramp-get-connection-property v "touch-t" nil)
-                   (format "-t %s"
-                           (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.
-    (zerop
-     (tramp-call-process
-      nil "touch" nil nil nil "-t"
-      (format-time-string "%Y%m%d%H%M.%S" time)
-      (tramp-shell-quote-argument filename)))))
+  (with-parsed-tramp-file-name filename nil
+    (when (tramp-get-remote-touch v)
+      (tramp-flush-file-property v (file-name-directory localname))
+      (tramp-flush-file-property v localname)
+      (let ((time (if (or (null time) (equal time '(0 0)))
+                     (current-time)
+                   time)))
+       (tramp-send-command-and-check
+        v (format
+           "env TZ=UTC %s %s %s"
+           (tramp-get-remote-touch v)
+           (if (tramp-get-connection-property v "touch-t" nil)
+               (format "-t %s" (format-time-string "%Y%m%d%H%M.%S" time t))
+             "")
+           (tramp-shell-quote-argument localname)))))))
 
 (defun tramp-set-file-uid-gid (filename &optional uid gid)
   "Set the ownership for FILENAME.
@@ -1653,8 +1642,7 @@ be non-negative integers."
          (goto-char (point-max))
          (delete-blank-lines)
          (when (> (point-max) (point-min))
-           (tramp-compat-funcall
-            'substring-no-properties (buffer-string))))))))
+           (substring-no-properties (buffer-string))))))))
 
 (defun tramp-sh-handle-set-file-acl (filename acl-string)
   "Like `set-file-acl' for Tramp files."
@@ -1905,7 +1893,7 @@ be non-negative integers."
                  (when cache-hit (list cache-hit))))
              ;; We cannot use a length of 0, because file properties
              ;; for "foo" and "foo/" are identical.
-             (tramp-compat-number-sequence (length filename) 1 -1)))))
+             (number-sequence (length filename) 1 -1)))))
 
          ;; Cache expired or no matching cache entry found so we need
          ;; to perform a remote operation.
@@ -1928,14 +1916,7 @@ be non-negative integers."
                   (format "tramp_perl_file_name_all_completions %s %s %d"
                           (tramp-shell-quote-argument localname)
                           (tramp-shell-quote-argument filename)
-                          (if (symbol-value
-                              ;; `read-file-name-completion-ignore-case'
-                              ;; is introduced with Emacs 22.1.
-                              (if (boundp
-                                   'read-file-name-completion-ignore-case)
-                                  'read-file-name-completion-ignore-case
-                                'completion-ignore-case))
-                             1 0)))
+                          (if read-file-name-completion-ignore-case 1 0)))
 
               (format (concat
                        "(cd %s 2>&1 && (%s -a %s 2>/dev/null"
@@ -2058,19 +2039,18 @@ tramp-sh-handle-file-name-all-completions: internal error accessing `%s': `%s'"
     (tramp-do-copy-or-rename-file
      'copy filename newname ok-if-already-exists keep-date
      preserve-uid-gid preserve-extended-attributes))
-   ;; Compat section.
+   ;; Compat section.  PRESERVE-EXTENDED-ATTRIBUTES has been
+   ;; introduced with Emacs 24.1 (as PRESERVE-SELINUX-CONTEXT), and
+   ;; renamed in Emacs 24.3.
    (preserve-extended-attributes
     (tramp-run-real-handler
      'copy-file
      (list filename newname ok-if-already-exists keep-date
           preserve-uid-gid preserve-extended-attributes)))
-   (preserve-uid-gid
-    (tramp-run-real-handler
-     'copy-file
-     (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)))))
+     'copy-file
+     (list filename newname ok-if-already-exists keep-date preserve-uid-gid)))))
 
 (defun tramp-sh-handle-copy-directory
   (dirname newname &optional keep-date parents copy-contents)
@@ -2125,7 +2105,8 @@ tramp-sh-handle-file-name-all-completions: internal error accessing `%s': `%s'"
   (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 t t)
+       'rename filename newname ok-if-already-exists
+       'keep-time 'preserve-uid-gid)
     (tramp-run-real-handler
      'rename-file (list filename newname ok-if-already-exists))))
 
@@ -2291,11 +2272,11 @@ the uid and gid from FILENAME."
                            op))))
             (localname1
              (if t1
-                 (tramp-file-name-handler 'file-remote-p filename 'localname)
+                 (file-remote-p filename 'localname)
                filename))
             (localname2
              (if t2
-                 (tramp-file-name-handler 'file-remote-p newname 'localname)
+                 (file-remote-p newname 'localname)
                newname))
             (prefix (file-remote-p (if t1 filename newname)))
              cmd-result)
@@ -2333,12 +2314,12 @@ the uid and gid from FILENAME."
                       (zerop
                        (logand
                         (file-modes (file-name-directory localname1))
-                        (tramp-compat-octal-to-decimal "1000"))))
+                        (string-to-number "1000" 8))))
                   (file-writable-p (file-name-directory localname2))
                   (or (file-directory-p localname2)
                       (file-writable-p localname2))))
            (if (eq op 'copy)
-               (tramp-compat-copy-file
+               (copy-file
                 localname1 localname2 ok-if-already-exists
                 keep-date preserve-uid-gid)
              (tramp-run-real-handler
@@ -2378,15 +2359,14 @@ the uid and gid from FILENAME."
                      ;; Since this does not work reliable, we also
                      ;; give read permissions.
                      (set-file-modes
-                      (concat prefix tmpfile)
-                      (tramp-compat-octal-to-decimal "0777"))
+                      (concat prefix tmpfile) (string-to-number "0777" 8))
                      (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
+                         (copy-file
                           localname1 tmpfile t
                           keep-date preserve-uid-gid)
                        (tramp-run-real-handler
@@ -2395,8 +2375,7 @@ the uid and gid from FILENAME."
                      ;; We must change the ownership as local user.
                      ;; Since this does not work reliable, we also
                      ;; give read permissions.
-                     (set-file-modes
-                      tmpfile (tramp-compat-octal-to-decimal "0777"))
+                     (set-file-modes tmpfile (string-to-number "0777" 8))
                      (tramp-set-file-uid-gid
                       tmpfile
                       (tramp-get-remote-uid v 'integer)
@@ -2455,7 +2434,7 @@ The method used must be an out-of-band method."
              ;; Save exit.
              (ignore-errors
                (if dir-flag
-                   (tramp-compat-delete-directory
+                   (delete-directory
                     (expand-file-name ".." tmpfile) 'recursive)
                  (delete-file tmpfile)))))
 
@@ -2628,7 +2607,7 @@ The method used must be an out-of-band method."
                   orig-vec 6 "%s"
                   (mapconcat 'identity (process-command p) " "))
                  (tramp-set-connection-property p "vector" orig-vec)
-                 (tramp-compat-set-process-query-on-exit-flag p nil)
+                 (set-process-query-on-exit-flag p nil)
 
                  ;; We must adapt `tramp-local-end-of-line' for
                  ;; sending the password.
@@ -2676,7 +2655,7 @@ The method used must be an out-of-band method."
       (unless (eq op 'copy)
        (if (file-regular-p filename)
            (delete-file filename)
-         (tramp-compat-delete-directory filename 'recursive))))))
+         (delete-directory filename 'recursive))))))
 
 (defun tramp-sh-handle-make-directory (dir &optional parents)
   "Like `make-directory' for Tramp files."
@@ -2716,51 +2695,16 @@ The method used must be an out-of-band method."
 
 ;; Dired.
 
-;; CCC: This does not seem to be enough. Something dies when
-;;      we try and delete two directories under Tramp :/
-(defun tramp-sh-handle-dired-recursive-delete-directory (filename)
-  "Recursively delete the directory given.
-This is like `dired-recursive-delete-directory' for Tramp files."
-  (with-parsed-tramp-file-name filename nil
-    ;; Run a shell command 'rm -r <localname>'.
-    ;; Code shamelessly stolen from the dired implementation and, um, hacked :)
-    (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
-     v
-     (format "rm -rf %s" (tramp-shell-quote-argument localname))
-     ;; Don't read the output, do it explicitly.
-     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 (tramp-get-connection-process v) 120)
-    ;; Make sure that it worked...
-    (tramp-flush-file-property v (file-name-directory localname))
-    (tramp-flush-directory-property v localname)
-    (and (file-exists-p filename)
-        (tramp-error
-         v 'file-error "Failed to recursively delete %s" filename))))
+(defvar dired-compress-file-suffixes)
+(declare-function dired-remove-file "dired-aux")
 
-(defun tramp-sh-handle-dired-compress-file (file &rest _ok-flag)
+(defun tramp-sh-handle-dired-compress-file (file)
   "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))
-                ;; Emacs case
-                (symbol-value 'dired-compress-file-suffixes)
-              ;; XEmacs has `dired-compression-method-alist', which is
-              ;; transformed into `dired-compress-file-suffixes' structure.
-              (mapcar
-               (lambda (x)
-                 (list (concat (regexp-quote (nth 1 x)) "\\'")
-                       nil
-                       (mapconcat 'identity (nth 3 x) " ")))
-               (symbol-value 'dired-compression-method-alist))))
+      (let ((suffixes dired-compress-file-suffixes)
            suffix)
        ;; See if any suffix rule matches this file name.
        (while suffixes
@@ -2778,8 +2722,7 @@ This is like `dired-recursive-delete-directory' for Tramp files."
                 (when (tramp-send-command-and-check
                        v (concat (nth 2 suffix) " "
                                  (tramp-shell-quote-argument localname)))
-                  ;; `dired-remove-file' is not defined in XEmacs.
-                  (tramp-compat-funcall 'dired-remove-file file)
+                  (dired-remove-file file)
                   (string-match (car suffix) file)
                   (concat (substring file 0 (match-beginning 0))))))
              (t
@@ -2789,8 +2732,7 @@ This is like `dired-recursive-delete-directory' for Tramp files."
                 (when (tramp-send-command-and-check
                        v (concat "gzip -f "
                                  (tramp-shell-quote-argument localname)))
-                  ;; `dired-remove-file' is not defined in XEmacs.
-                  (tramp-compat-funcall 'dired-remove-file file)
+                  (dired-remove-file file)
                   (cond ((file-exists-p (concat file ".gz"))
                          (concat file ".gz"))
                         ((file-exists-p (concat file ".z"))
@@ -2900,9 +2842,7 @@ This is like `dired-recursive-delete-directory' for Tramp files."
          ;; Decode the output, it could be multibyte.
          (decode-coding-region
           beg (point-max)
-          (or file-name-coding-system
-              (and (boundp 'default-file-name-coding-system)
-                   (symbol-value 'default-file-name-coding-system))))
+          (or file-name-coding-system default-file-name-coding-system))
 
          ;; The inserted file could be from somewhere else.
          (when (and (not wildcard) (not full-directory-p))
@@ -2929,9 +2869,10 @@ the result will be a local, non-Tramp, file name."
   ;; 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 connection is not established yet, run the real handler.
   (if (not (tramp-connectable-p name))
-      (tramp-run-real-handler 'expand-file-name (list name nil))
+      (tramp-drop-volume-letter
+       (tramp-run-real-handler 'expand-file-name (list name nil)))
     ;; Dissect NAME.
     (with-parsed-tramp-file-name name nil
       (unless (tramp-run-real-handler 'file-name-absolute-p (list localname))
@@ -2965,13 +2906,10 @@ the result will be a local, non-Tramp, file name."
       (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.
-      (let ((directory-sep-char ?/)
-           (default-directory (tramp-compat-temporary-file-directory)))
+      ;; `expand-file-name' (this does "/./" and "/../").
+      ;; `default-directory' is bound, because on Windows there would
+      ;; be problems with UNC shares or Cygwin mounts.
+      (let ((default-directory (tramp-compat-temporary-file-directory)))
        (tramp-make-tramp-file-name
         method user host
         (tramp-drop-volume-letter
@@ -3093,7 +3031,7 @@ the result will be a local, non-Tramp, file name."
                        ;; Send the command.
                        (tramp-send-command v command nil t) ; nooutput
                      ;; Check, whether a pty is associated.
-                     (unless (tramp-compat-process-get
+                     (unless (process-get
                               (tramp-get-connection-process v) 'remote-tty)
                        (tramp-error
                         v 'file-error
@@ -3103,7 +3041,7 @@ the result will be a local, non-Tramp, file name."
                    ;; process.  We ignore errors, because the process
                    ;; could have finished already.
                    (ignore-errors
-                     (tramp-compat-set-process-query-on-exit-flag p t)
+                     (set-process-query-on-exit-flag p t)
                      (set-marker (process-mark p) (point)))
                    ;; Return process.
                    p))))
@@ -3227,12 +3165,7 @@ the result will be a local, non-Tramp, file name."
       ;; because the remote process could have changed them.
       (when tmpinput (delete-file tmpinput))
 
-      ;; `process-file-side-effects' has been introduced with GNU
-      ;; Emacs 23.2.  If set to nil, no remote file will be changed
-      ;; by `program'.  If it doesn't exist, we assume its default
-      ;; value t.
-      (unless (and (boundp 'process-file-side-effects)
-                  (not (symbol-value 'process-file-side-effects)))
+      (unless process-file-side-effects
         (tramp-flush-directory-property v ""))
 
       ;; Return exit status.
@@ -3258,7 +3191,7 @@ the result will be a local, non-Tramp, file name."
           ;; `copy-file' handles direct copy and out-of-band methods.
           ((or (tramp-local-host-p v)
                (tramp-method-out-of-band-p v size))
-           (copy-file filename tmpfile t t))
+           (copy-file filename tmpfile 'ok-if-already-exists 'keep-time))
 
           ;; Use inline encoding for file transfer.
           (rem-enc
@@ -3319,30 +3252,6 @@ the result will be a local, non-Tramp, file name."
       (run-hooks 'tramp-handle-file-local-copy-hook)
       tmpfile)))
 
-;; This is needed for XEmacs only.  Code stolen from files.el.
-(defun tramp-sh-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
-        '(epa-file-handler image-file-handler jka-compr-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))
-      ;; Save exit.
-      (if find-buffer-file-type-function
-         (fset 'find-buffer-file-type find-buffer-file-type-function)
-       (fmakunbound 'find-buffer-file-type)))))
-
 ;; CCC grok LOCKNAME
 (defun tramp-sh-handle-write-region
   (start end filename &optional append visit lockname confirm)
@@ -3359,14 +3268,13 @@ the result will be a local, non-Tramp, file name."
     ;;    (error
     ;;     "tramp-sh-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))
+    (when (and 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))
+    (let ((uid (or (nth 2 (file-attributes filename 'integer))
                   (tramp-get-remote-uid v 'integer)))
-         (gid (or (nth 3 (tramp-compat-file-attributes filename 'integer))
+         (gid (or (nth 3 (file-attributes filename 'integer))
                   (tramp-get-remote-gid v 'integer))))
 
       (if (and (tramp-local-host-p v)
@@ -3424,9 +3332,7 @@ the result will be a local, non-Tramp, file name."
               (signal (car err) (cdr err))))
 
            ;; 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))))
+           (setq coding-system-used last-coding-system-used))
 
          ;; The permissions of the temporary file should be set.  If
          ;; FILENAME does not exist (eq modes nil) it has been
@@ -3436,7 +3342,7 @@ the result will be a local, non-Tramp, file name."
          (when modes
            (set-file-modes
             tmpfile
-            (logior (or modes 0) (tramp-compat-octal-to-decimal "0400"))))
+            (logior (or modes 0) (string-to-number "0400" 8))))
 
          ;; This is a bit lengthy due to the different methods
          ;; possible for file transfer.  First, we check whether the
@@ -3576,7 +3482,7 @@ the result will be a local, non-Tramp, file name."
       (let (last-coding-system-used (need-chown t))
        ;; Set file modification time.
        (when (or (eq visit t) (stringp visit))
-          (let ((file-attr (tramp-compat-file-attributes filename 'integer)))
+          (let ((file-attr (file-attributes filename 'integer)))
             (set-visited-file-modtime
              ;; We must pass modtime explicitly, because FILENAME can
              ;; be different from (buffer-file-name), f.e. if
@@ -3611,7 +3517,7 @@ the result will be a local, non-Tramp, file name."
 ;; any other remote command.
 (defun tramp-sh-handle-vc-registered (file)
   "Like `vc-registered' for Tramp files."
-  (tramp-compat-with-temp-message ""
+  (with-temp-message ""
     (with-parsed-tramp-file-name file nil
       (with-tramp-progress-reporter
          v 3 (format-message "Checking `vc-registered' for %s" file)
@@ -3768,7 +3674,12 @@ Fall back to normal file name handler if no Tramp handler exists."
                (concat "create,modify,move,moved_from,moved_to,move_self,"
                        "delete,delete_self,ignored"))
               ((memq 'attribute-change flags) "attrib,ignored"))
-             sequence `(,command "-mq" "-e" ,events ,localname)))
+             sequence `(,command "-mq" "-e" ,events ,localname)
+             ;; Make events a list of symbols.
+             events
+             (mapcar
+              (lambda (x) (intern-soft (replace-regexp-in-string "_" "-" x)))
+              (split-string events "," 'omit))))
        ;; None.
        (t (tramp-error
           v 'file-notify-error
@@ -3789,10 +3700,10 @@ Fall back to normal file name handler if no Tramp handler exists."
           (mapconcat 'identity sequence " "))
        (tramp-message v 6 "Run `%s', %S" (mapconcat 'identity sequence " ") p)
        (tramp-set-connection-property p "vector" v)
-       ;; Needed for `tramp-sh-gvfs-monitor-dir-process-filter'.
-       (tramp-compat-process-put p 'events events)
-       (tramp-compat-process-put p 'watch-name localname)
-       (tramp-compat-set-process-query-on-exit-flag p nil)
+       ;; Needed for process filter.
+       (process-put p 'events events)
+       (process-put p 'watch-name localname)
+       (set-process-query-on-exit-flag p nil)
        (set-process-filter p filter)
        ;; There might be an error if the monitor is not supported.
        ;; Give the filter a chance to read the output.
@@ -3805,16 +3716,17 @@ Fall back to normal file name handler if no Tramp handler exists."
 (defun tramp-sh-gvfs-monitor-dir-process-filter (proc string)
   "Read output from \"gvfs-monitor-dir\" and add corresponding \
 file-notify events."
-  (let ((remote-prefix
+  (let ((events (process-get proc 'events))
+       (remote-prefix
         (with-current-buffer (process-buffer proc)
           (file-remote-p default-directory)))
-       (rest-string (tramp-compat-process-get proc 'rest-string)))
+       (rest-string (process-get proc 'rest-string)))
     (when rest-string
       (tramp-message proc 10 "Previous string:\n%s" rest-string))
     (tramp-message proc 6 "%S\n%s" proc string)
     (setq string (concat rest-string string)
          ;; Attribute change is returned in unused wording.
-         string (tramp-compat-replace-regexp-in-string
+         string (replace-regexp-in-string
                  "ATTRIB CHANGED" "ATTRIBUTE_CHANGED" string))
     (when (string-match "Monitoring not supported" string)
       (delete-process proc))
@@ -3831,59 +3743,65 @@ file-notify events."
             (object
              (list
               proc
-              (intern-soft
-               (tramp-compat-replace-regexp-in-string
-                "_" "-" (downcase (match-string 4 string))))
+              (list
+               (intern-soft
+                (replace-regexp-in-string
+                 "_" "-" (downcase (match-string 4 string)))))
               ;; File names are returned as absolute paths.  We must
               ;; add the remote prefix.
               (concat remote-prefix file)
               (when file1 (concat remote-prefix file1)))))
        (setq string (replace-match "" nil nil string))
        ;; Remove watch when file or directory to be watched is deleted.
-       (when (and (member (cadr object) '(moved deleted))
-                  (string-equal
-                   file (tramp-compat-process-get proc 'watch-name)))
+       (when (and (member (caadr object) '(moved deleted))
+                  (string-equal file (process-get proc 'watch-name)))
          (delete-process proc))
        ;; Usually, we would add an Emacs event now.  Unfortunately,
        ;; `unread-command-events' does not accept several events at
-       ;; once.  Therefore, we apply the callback directly.
-       (when (member (cadr object) (tramp-compat-process-get proc 'events))
-         (tramp-compat-funcall 'file-notify-callback object))))
+       ;; once.  Therefore, we apply the handler directly.
+       (when (member (caadr object) events)
+         (tramp-compat-funcall
+          'file-notify-handle-event
+          `(file-notify ,object file-notify-callback)))))
 
     ;; Save rest of the string.
     (when (zerop (length string)) (setq string nil))
     (when string (tramp-message proc 10 "Rest string:\n%s" string))
-    (tramp-compat-process-put proc 'rest-string string)))
+    (process-put proc 'rest-string string)))
 
 (defun tramp-sh-inotifywait-process-filter (proc string)
   "Read output from \"inotifywait\" and add corresponding file-notify events."
-  (tramp-message proc 6 "%S\n%s" proc string)
-  (dolist (line (split-string string "[\n\r]+" 'omit-nulls))
-    ;; Check, whether there is a problem.
-    (unless
-       (string-match
-        (concat "^[^[:blank:]]+"
-                "[[:blank:]]+\\([^[:blank:]]+\\)+"
-                "\\([[:blank:]]+\\([^\n\r]+\\)\\)?")
-        line)
-      (tramp-error proc 'file-notify-error "%s" line))
-
-    (let ((object
-          (list
-           proc
-           (mapcar
-            (lambda (x)
-              (intern-soft
-               (tramp-compat-replace-regexp-in-string "_" "-" (downcase x))))
-            (split-string (match-string 1 line) "," 'omit-nulls))
-           (match-string 3 line))))
-      ;; Remove watch when file or directory to be watched is deleted.
-      (when (equal (cadr object) 'ignored)
-       (delete-process proc))
-      ;; Usually, we would add an Emacs event now.  Unfortunately,
-      ;; `unread-command-events' does not accept several events at
-      ;; once.  Therefore, we apply the callback directly.
-      (tramp-compat-funcall 'file-notify-callback object))))
+  (let ((events (process-get proc 'events)))
+    (tramp-message proc 6 "%S\n%s" proc string)
+    (dolist (line (split-string string "[\n\r]+" 'omit))
+      ;; Check, whether there is a problem.
+      (unless
+         (string-match
+          (concat "^[^[:blank:]]+"
+                  "[[:blank:]]+\\([^[:blank:]]+\\)+"
+                  "\\([[:blank:]]+\\([^\n\r]+\\)\\)?")
+          line)
+       (tramp-error proc 'file-notify-error "%s" line))
+
+      (let ((object
+            (list
+             proc
+             (mapcar
+              (lambda (x)
+                (intern-soft
+                 (replace-regexp-in-string "_" "-" (downcase x))))
+              (split-string (match-string 1 line) "," 'omit))
+             (match-string 3 line))))
+       ;; Remove watch when file or directory to be watched is deleted.
+       (when (member (caadr object) '(move-self delete-self ignored))
+         (delete-process proc))
+       ;; Usually, we would add an Emacs event now.  Unfortunately,
+       ;; `unread-command-events' does not accept several events at
+       ;; once.  Therefore, we apply the handler directly.
+       (when (member (caadr object) events)
+         (tramp-compat-funcall
+          'file-notify-handle-event
+          `(file-notify ,object file-notify-callback)))))))
 
 ;;; Internal Functions:
 
@@ -3899,7 +3817,7 @@ Only send the definition if it has not already been done."
          vec 5 (format-message "Sending script `%s'" name)
        ;; In bash, leading TABs like in `tramp-vc-registered-read-file-names'
        ;; could result in unwanted command expansion.  Avoid this.
-       (setq script (tramp-compat-replace-regexp-in-string
+       (setq script (replace-regexp-in-string
                      (make-string 1 ?\t) (make-string 8 ? ) script))
        ;; The script could contain a call of Perl.  This is masked with `%s'.
        (when (and (string-match "%s" script)
@@ -3972,8 +3890,7 @@ This function expects to be in the right *tramp* buffer."
            (setq result (concat "\\" progname))))
       (unless result
        (when ignore-tilde
-         ;; Remove all ~/foo directories from dirlist.  In XEmacs,
-         ;; `remove' is in CL, and we want to avoid CL dependencies.
+         ;; Remove all ~/foo directories from dirlist.
          (let (newdl d)
            (while dirlist
              (setq d (car dirlist))
@@ -4216,45 +4133,36 @@ process to set up.  VEC specifies the connection."
   ;; CCC this can't be the right way to do it.  Hm.
   (tramp-message vec 5 "Determining coding system")
   (with-current-buffer (process-buffer proc)
-    (if (featurep 'mule)
-       ;; Use MULE to select the right EOL convention for communicating
-       ;; with the process.
-       (let ((cs (or (and (memq 'utf-8 (coding-system-list))
-                          (string-match "utf-?8" (tramp-get-remote-locale vec))
-                          (cons 'utf-8 'utf-8))
-                     (tramp-compat-funcall 'process-coding-system proc)
-                     (cons 'undecided 'undecided)))
-             cs-decode cs-encode)
-         (when (symbolp cs) (setq cs (cons cs cs)))
-         (setq cs-decode (or (car cs) 'undecided)
-                cs-encode (or (cdr cs) 'undecided))
-         (setq cs-encode
-               (tramp-compat-coding-system-change-eol-conversion
-                cs-encode
-                (if (string-match
-                     "^Darwin" (tramp-get-connection-property vec "uname" ""))
-                    'mac 'unix)))
-         (tramp-send-command vec "echo foo ; echo bar" t)
-         (goto-char (point-min))
-         (when (search-forward "\r" nil t)
-           (setq cs-decode (tramp-compat-coding-system-change-eol-conversion
-                            cs-decode 'dos)))
-          ;; Special setting for Mac OS X.
-          (when (and (string-match
-                      "^Darwin" (tramp-get-connection-property vec "uname" ""))
-                     (memq 'utf-8-hfs (coding-system-list)))
-            (setq cs-decode 'utf-8-hfs
-                  cs-encode 'utf-8-hfs))
-          (tramp-compat-funcall
-          'set-buffer-process-coding-system cs-decode cs-encode)
-         (tramp-message
-          vec 5 "Setting coding system to `%s' and `%s'" cs-decode cs-encode))
-      ;; Look for ^M and do something useful if found.
+    ;; Use MULE to select the right EOL convention for communicating
+    ;; with the process.
+    (let ((cs (or (and (memq 'utf-8 (coding-system-list))
+                      (string-match "utf-?8" (tramp-get-remote-locale vec))
+                      (cons 'utf-8 'utf-8))
+                 (process-coding-system proc)
+                 (cons 'undecided 'undecided)))
+         cs-decode cs-encode)
+      (when (symbolp cs) (setq cs (cons cs cs)))
+      (setq cs-decode (or (car cs) 'undecided)
+           cs-encode (or (cdr cs) 'undecided)
+           cs-encode
+           (coding-system-change-eol-conversion
+            cs-encode
+            (if (string-match
+                 "^Darwin" (tramp-get-connection-property vec "uname" ""))
+                'mac 'unix)))
+      (tramp-send-command vec "echo foo ; echo bar" t)
+      (goto-char (point-min))
       (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.
-       (tramp-send-command vec "stty -onlcr" t))))
+       (setq cs-decode (coding-system-change-eol-conversion cs-decode 'dos)))
+      ;; Special setting for Mac OS X.
+      (when (and (string-match
+                 "^Darwin" (tramp-get-connection-property vec "uname" ""))
+                (memq 'utf-8-hfs (coding-system-list)))
+       (setq cs-decode 'utf-8-hfs
+             cs-encode 'utf-8-hfs))
+      (set-buffer-process-coding-system cs-decode cs-encode)
+      (tramp-message
+       vec 5 "Setting coding system to `%s' and `%s'" cs-decode cs-encode)))
 
   (tramp-send-command vec "set +o vi +o emacs" t)
 
@@ -4311,7 +4219,7 @@ process to set up.  VEC specifies the connection."
   ;; Set `remote-tty' process property.
   (let ((tty (tramp-send-command-and-read vec "echo \\\"`tty`\\\"" 'noerror)))
     (unless (zerop (length tty))
-      (tramp-compat-process-put proc 'remote-tty tty)))
+      (process-put proc 'remote-tty tty)))
 
   ;; Dump stty settings in the traces.
   (when (>= tramp-verbose 9)
@@ -4324,7 +4232,7 @@ process to set up.  VEC specifies the connection."
                     (copy-sequence tramp-remote-process-environment)))
        unset vars item)
     (while env
-      (setq item (tramp-compat-split-string (car env) "="))
+      (setq item (split-string (car env) "=" 'omit))
       (setcdr item (mapconcat 'identity (cdr item) "="))
       (if (and (stringp (cdr item)) (not (string-equal (cdr item) "")))
          (push (format "%s %s" (car item) (cdr item)) vars)
@@ -4514,8 +4422,7 @@ Goes through the list `tramp-local-coding-commands' and
                               value
                               (format-spec-make
                                ?t
-                               (tramp-file-name-handler
-                                'file-remote-p tmpfile 'localname)))))
+                               (file-remote-p tmpfile 'localname)))))
                      (tramp-maybe-send-script vec value name)
                      (setq rem-dec name)))
                  (tramp-message
@@ -4711,7 +4618,7 @@ Gateway hops are already opened."
        (push
         (vector
          (tramp-file-name-method hop) (tramp-file-name-user hop)
-         (tramp-compat-funcall 'tramp-gw-open-connection vec gw hop) nil nil)
+         (tramp-gw-open-connection vec gw hop) nil nil)
         target-alist)
        ;; For the password prompt, we need the correct values.
        ;; Therefore, we must remember the gateway vector.  But we
@@ -4845,6 +4752,7 @@ connection if a previous connection has died for some reason."
        (unless (and p (processp p) (memq (process-status p) '(run open)))
 
          ;; If `non-essential' is non-nil, don't reopen a new connection.
+         ;; This variable has been introduced with Emacs 24.1.
          (when (and (boundp 'non-essential) (symbol-value 'non-essential))
            (throw 'non-essential 'non-essential))
 
@@ -4899,7 +4807,7 @@ connection if a previous connection has died for some reason."
                ;; Set sentinel and query flag.
                (tramp-set-connection-property p "vector" vec)
                (set-process-sentinel p 'tramp-process-sentinel)
-               (tramp-compat-set-process-query-on-exit-flag p nil)
+               (set-process-query-on-exit-flag p nil)
                (setq tramp-current-connection
                      (cons (butlast (append vec nil) 2) (current-time))
                      tramp-current-host (system-name))
@@ -5198,12 +5106,12 @@ Return ATTR."
     (when (and (numberp (nth 2 attr)) (< (nth 2 attr) 0))
       (setcar (nthcdr 2 attr) -1))
     (when (and (floatp (nth 2 attr))
-               (<= (nth 2 attr) (tramp-compat-most-positive-fixnum)))
+               (<= (nth 2 attr) most-positive-fixnum))
       (setcar (nthcdr 2 attr) (round (nth 2 attr))))
     (when (and (numberp (nth 3 attr)) (< (nth 3 attr) 0))
       (setcar (nthcdr 3 attr) -1))
     (when (and (floatp (nth 3 attr))
-               (<= (nth 3 attr) (tramp-compat-most-positive-fixnum)))
+               (<= (nth 3 attr) most-positive-fixnum))
       (setcar (nthcdr 3 attr) (round (nth 3 attr))))
     ;; Convert last access time.
     (unless (listp (nth 4 attr))
@@ -5224,7 +5132,7 @@ Return ATTR."
     (when (< (nth 7 attr) 0)
       (setcar (nthcdr 7 attr) -1))
     (when (and (floatp (nth 7 attr))
-               (<= (nth 7 attr) (tramp-compat-most-positive-fixnum)))
+               (<= (nth 7 attr) most-positive-fixnum))
       (setcar (nthcdr 7 attr) (round (nth 7 attr))))
     ;; Convert file mode bits to string.
     (unless (stringp (nth 8 attr))
@@ -5356,7 +5264,7 @@ Return ATTR."
       (when elt1
        (setcdr elt1
                (append
-                (tramp-compat-split-string (or default-remote-path "") ":")
+                 (split-string (or default-remote-path "") ":" 'omit)
                 (cdr elt1)))
        (setq remote-path (delq 'tramp-default-remote-path remote-path)))
 
@@ -5364,7 +5272,7 @@ Return ATTR."
       (when elt2
        (setcdr elt2
                (append
-                (tramp-compat-split-string (or own-remote-path "") ":")
+                 (split-string (or own-remote-path "") ":" 'omit)
                 (cdr elt2)))
        (setq remote-path (delq 'tramp-own-remote-path remote-path)))
 
@@ -5568,7 +5476,7 @@ Return ATTR."
           "%s -t %s %s"
           result
           (format-time-string "%Y%m%d%H%M.%S")
-          (tramp-file-name-handler 'file-remote-p tmpfile 'localname))))
+          (file-remote-p tmpfile 'localname))))
        (delete-file tmpfile))
       result)))
 
index 509e2e388b8915f17ef112975e1f7ee328157fc0..c4dde050c8338a76817cf0995dd64b66b6d1c9d2 100644 (file)
@@ -224,7 +224,6 @@ See `tramp-actions-before-shell' for more info.")
     (directory-files . tramp-smb-handle-directory-files)
     (directory-files-and-attributes
      . tramp-handle-directory-files-and-attributes)
-    (dired-call-process . ignore)
     (dired-compress-file . ignore)
     (dired-uncache . tramp-handle-dired-uncache)
     (expand-file-name . tramp-smb-handle-expand-file-name)
@@ -276,7 +275,7 @@ See `tramp-actions-before-shell' for more info.")
     (shell-command . tramp-handle-shell-command)
     (start-file-process . tramp-smb-handle-start-file-process)
     (substitute-in-file-name . tramp-smb-handle-substitute-in-file-name)
-    (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+    (unhandled-file-name-directory . ignore)
     (vc-registered . ignore)
     (verify-visited-file-modtime . tramp-handle-verify-visited-file-modtime)
     (write-region . tramp-smb-handle-write-region))
@@ -419,12 +418,11 @@ pass to the OPERATION."
              (unwind-protect
                  (progn
                    (make-directory tmpdir)
-                   (tramp-compat-copy-directory
-                    dirname tmpdir keep-date 'parents)
-                   (tramp-compat-copy-directory
+                   (copy-directory dirname tmpdir keep-date 'parents)
+                   (copy-directory
                     (expand-file-name (file-name-nondirectory dirname) tmpdir)
                     newname keep-date parents))
-               (tramp-compat-delete-directory tmpdir 'recursive))))
+               (delete-directory tmpdir 'recursive))))
 
           ;; We can copy recursively.
           ((or t1 t2)
@@ -448,7 +446,7 @@ pass to the OPERATION."
                   (port      (tramp-file-name-port v))
                   (share     (tramp-smb-get-share v))
                   (localname (file-name-as-directory
-                              (tramp-compat-replace-regexp-in-string
+                              (replace-regexp-in-string
                                "\\\\" "/" (tramp-smb-get-localname v))))
                   (tmpdir    (make-temp-name
                               (expand-file-name
@@ -510,7 +508,7 @@ pass to the OPERATION."
                      (tramp-message
                       v 6 "%s" (mapconcat 'identity (process-command p) " "))
                      (tramp-set-connection-property p "vector" v)
-                     (tramp-compat-set-process-query-on-exit-flag p nil)
+                     (set-process-query-on-exit-flag p nil)
                      (tramp-process-actions p v nil tramp-smb-actions-with-tar)
 
                      (while (memq (process-status p) '(run open))
@@ -520,7 +518,7 @@ pass to the OPERATION."
                ;; Reset the transfer process properties.
                (tramp-set-connection-property v "process-name" nil)
                (tramp-set-connection-property v "process-buffer" nil)
-               (when t1 (tramp-compat-delete-directory tmpdir 'recurse))))
+               (when t1 (delete-directory tmpdir 'recurse))))
 
            ;; Handle KEEP-DATE argument.
            (when keep-date
@@ -555,7 +553,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
       0 (format "Copying %s to %s" filename newname)
 
     (if (file-directory-p filename)
-       (tramp-compat-copy-directory filename newname keep-date t t)
+       (tramp-compat-copy-directory
+        filename newname keep-date 'parents 'copy-contents)
 
       (let ((tmpfile (file-local-copy filename)))
        (if tmpfile
@@ -601,7 +600,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
        (mapc
         (lambda (file)
           (if (file-directory-p file)
-              (tramp-compat-delete-directory file recursive)
+              (delete-directory file recursive)
             (delete-file file)))
         ;; We do not want to delete "." and "..".
         (directory-files
@@ -665,7 +664,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
     ;; Sort them if necessary.
     (unless nosort (setq result (sort result 'string-lessp)))
     ;; Remove double entries.
-    (tramp-compat-delete-dups result)))
+    (delete-dups result)))
 
 (defun tramp-smb-handle-expand-file-name (name &optional dir)
   "Like `expand-file-name' for Tramp files."
@@ -730,7 +729,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
               (domain    (tramp-file-name-domain v))
               (port      (tramp-file-name-port v))
               (share     (tramp-smb-get-share v))
-              (localname (tramp-compat-replace-regexp-in-string
+              (localname (replace-regexp-in-string
                           "\\\\" "/" (tramp-smb-get-localname v)))
               (args      (list (concat "//" real-host "/" share) "-E")))
 
@@ -765,11 +764,10 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
                  (tramp-message
                   v 6 "%s" (mapconcat 'identity (process-command p) " "))
                  (tramp-set-connection-property p "vector" v)
-                 (tramp-compat-set-process-query-on-exit-flag p nil)
+                 (set-process-query-on-exit-flag p nil)
                  (tramp-process-actions p v nil tramp-smb-actions-get-acl)
                  (when (> (point-max) (point-min))
-                   (tramp-compat-funcall
-                    'substring-no-properties (buffer-string)))))
+                   (substring-no-properties (buffer-string)))))
 
            ;; Reset the transfer process properties.
            (tramp-set-connection-property v "process-name" nil)
@@ -1068,9 +1066,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
          (tramp-smb-send-command
           v
           (if (tramp-smb-get-cifs-capabilities v)
-              (format
-               "posix_mkdir \"%s\" %s"
-               file (tramp-compat-decimal-to-octal (default-file-modes)))
+              (format "posix_mkdir \"%s\" %o" file (default-file-modes))
             (format "mkdir \"%s\"" file)))
          ;; We must also flush the cache of the directory, because
          ;; `file-attributes' reads the values from there.
@@ -1240,12 +1236,7 @@ target of the symlink differ."
       (unless outbuf
        (kill-buffer (tramp-get-connection-property v "process-buffer" nil)))
 
-      ;; `process-file-side-effects' has been introduced with GNU
-      ;; Emacs 23.2.  If set to nil, no remote file will be changed
-      ;; by `program'.  If it doesn't exist, we assume its default
-      ;; value t.
-      (unless (and (boundp 'process-file-side-effects)
-                  (not (symbol-value 'process-file-side-effects)))
+      (unless process-file-side-effects
        (tramp-flush-directory-property v ""))
 
       ;; Return exit status.
@@ -1296,9 +1287,10 @@ target of the symlink differ."
              (tramp-error v2 'file-error "Cannot rename `%s'" filename))))
 
       ;; We must rename via copy.
-      (tramp-compat-copy-file filename newname ok-if-already-exists t t t)
+      (copy-file
+       filename newname ok-if-already-exists 'keep-time 'preserve-uid-gid)
       (if (file-directory-p filename)
-         (tramp-compat-delete-directory filename 'recursive)
+         (delete-directory filename 'recursive)
        (delete-file filename)))))
 
 (defun tramp-smb-action-set-acl (proc vec)
@@ -1325,10 +1317,10 @@ target of the symlink differ."
               (domain    (tramp-file-name-domain v))
               (port      (tramp-file-name-port v))
               (share     (tramp-smb-get-share v))
-              (localname (tramp-compat-replace-regexp-in-string
+              (localname (replace-regexp-in-string
                           "\\\\" "/" (tramp-smb-get-localname v)))
               (args      (list (concat "//" real-host "/" share) "-E" "-S"
-                               (tramp-compat-replace-regexp-in-string
+                               (replace-regexp-in-string
                                 "\n" "," acl-string))))
 
          (if (not (zerop (length real-user)))
@@ -1364,7 +1356,7 @@ target of the symlink differ."
                  (tramp-message
                   v 6 "%s" (mapconcat 'identity (process-command p) " "))
                  (tramp-set-connection-property p "vector" v)
-                 (tramp-compat-set-process-query-on-exit-flag p nil)
+                 (set-process-query-on-exit-flag p nil)
                  (tramp-process-actions p v nil tramp-smb-actions-set-acl)
                  (goto-char (point-max))
                  (unless (re-search-backward "tramp_exit_status [0-9]+" nil t)
@@ -1387,9 +1379,7 @@ target of the symlink differ."
     (when (tramp-smb-get-cifs-capabilities v)
       (tramp-flush-file-property v localname)
       (unless (tramp-smb-send-command
-              v (format "chmod \"%s\" %s"
-                        (tramp-smb-get-localname v)
-                        (tramp-compat-decimal-to-octal mode)))
+              v (format "chmod \"%s\" %o" (tramp-smb-get-localname v) mode))
        (tramp-error
         v 'file-error "Error while changing file's mode %s" filename)))))
 
@@ -1460,9 +1450,7 @@ errors for shares like \"C$/\", which are common in Microsoft Windows."
   "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))
+    (when (and 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")))
@@ -1575,10 +1563,6 @@ Result is a list of (LOCALNAME MODE SIZE MONTH DAY TIME YEAR)."
          ;; Add directory itself.
          (push '("" "drwxrwxrwx" 0 (0 0)) res)
 
-         ;; 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))
-
          ;; Return entries.
          (delq nil res))))))
 
@@ -1738,7 +1722,7 @@ Result is the list (LOCALNAME MODE SIZE MTIME)."
                (member
                 "pathnames"
                 (split-string
-                 (buffer-substring (point) (point-at-eol)) nil t)))))))))
+                 (buffer-substring (point) (point-at-eol)) nil 'omit)))))))))
 
 (defun tramp-smb-get-stat-capability (vec)
   "Check, whether the SMB server supports the STAT command."
@@ -1878,7 +1862,7 @@ If ARGUMENT is non-nil, use it as argument for
              (tramp-message
               vec 6 "%s" (mapconcat 'identity (process-command p) " "))
              (tramp-set-connection-property p "vector" vec)
-             (tramp-compat-set-process-query-on-exit-flag p nil)
+             (set-process-query-on-exit-flag p nil)
 
              ;; Set variables for computing the prompt for reading password.
              (setq tramp-current-method tramp-smb-method
index 26672d1fabb1732059f5aa74043f75b4124d02ad..4edca5a5998cd5f4e37372c932bf5318379a81e1 100644 (file)
@@ -34,9 +34,7 @@
 ;; Notes:
 ;; -----
 ;;
-;; This package only works for Emacs 22.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 package only works for Emacs 23.1 and higher.
 ;;
 ;; Also see the todo list at the bottom of this file.
 ;;
 ;; Pacify byte-compiler.
 (eval-when-compile
   (require 'cl))
-(defvar bkup-backup-directory-info)
-(defvar directory-sep-char)
 (defvar eshell-path-env)
-(defvar ls-lisp-use-insert-directory-program)
-(defvar outline-regexp)
 
 ;;; User Customizable Internal Variables:
 
@@ -102,11 +96,8 @@ Any level x includes messages for all levels 1 .. x-1.  The levels are
   :group 'tramp
   :type 'integer)
 
-;; Emacs case.
-(eval-and-compile
-  (when (boundp 'backup-directory-alist)
-    (defcustom tramp-backup-directory-alist nil
-      "Alist of filename patterns and backup directory names.
+(defcustom tramp-backup-directory-alist nil
+  "Alist of filename patterns and backup directory names.
 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
@@ -116,34 +107,9 @@ name prefix \(method, user, host) of file.
 
 gives the same backup policy for Tramp files on their hosts like the
 policy for local files."
-      :group 'tramp
-      :type '(repeat (cons (regexp :tag "Regexp matching filename")
-                          (directory :tag "Backup directory name"))))))
-
-;; XEmacs case.  We cannot check for `bkup-backup-directory-info', because
-;; the package "backup-dir" might not be loaded yet.
-(eval-and-compile
-  (when (featurep 'xemacs)
-    (defcustom tramp-bkup-backup-directory-info nil
-      "Alist of (FILE-REGEXP BACKUP-DIR OPTIONS ...))
-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
-\(method, user, host) of file.
-
-\(setq tramp-bkup-backup-directory-info bkup-backup-directory-info)
-
-gives the same backup policy for Tramp files on their hosts like the
-policy for local files."
-      :type '(repeat
-             (list (regexp :tag "File regexp")
-                   (string :tag "Backup Dir")
-                   (set :inline t
-                        (const ok-create)
-                        (const full-path)
-                        (const prepend-name)
-                        (const search-upward))))
-      :group 'tramp)))
+  :group 'tramp
+  :type '(repeat (cons (regexp :tag "Regexp matching filename")
+                      (directory :tag "Backup directory name"))))
 
 (defcustom tramp-auto-save-directory nil
   "Put auto-save files in this directory, if set.
@@ -154,8 +120,8 @@ This setting has precedence over `auto-save-file-name-transforms'."
                 (directory :tag "Auto save directory name")))
 
 (defcustom tramp-encoding-shell
-  (if (memq system-type '(windows-nt))
-      (getenv "COMSPEC")
+  (if (boundp 'w32-shell-name)
+      (symbol-value 'w32-shell-name)
     "/bin/sh")
   "Use this program for encoding and decoding commands on the local host.
 This shell is used to execute the encoding and decoding command on the
@@ -179,17 +145,14 @@ use for the remote host."
   :group 'tramp
   :type '(file :must-match t))
 
-(defcustom tramp-encoding-command-switch
-  (if (string-match "cmd\\.exe" (or tramp-encoding-shell ""))
-      "/c"
-    "-c")
+(defcustom tramp-encoding-command-switch (if (boundp 'w32-shell-name) "/c" "-c")
   "Use this switch together with `tramp-encoding-shell' for local commands.
 See the variable `tramp-encoding-shell' for more information."
   :group 'tramp
   :type 'string)
 
 (defcustom tramp-encoding-command-interactive
-  (unless (string-match "cmd\\.exe" (or tramp-encoding-shell "")) "-i")
+  (unless (boundp 'w32-shell-name) "-i")
   "Use this switch together with `tramp-encoding-shell' for interactive shells.
 See the variable `tramp-encoding-shell' for more information."
   :version "24.1"
@@ -329,25 +292,9 @@ useful only in combination with `tramp-default-proxies-alist'.")
    ;; PuTTY is installed.  We don't take it, if it is installed on a
    ;; non-windows system, or pscp from the pssh (parallel ssh) package
    ;; is found.
-   ((and (eq system-type 'windows-nt)
-        (executable-find "pscp"))
-    (if        (or (fboundp 'password-read)
-           (fboundp 'auth-source-user-or-password)
-           (fboundp 'auth-source-search)
-           ;; Pageant is running.
-           (tramp-compat-process-running-p "Pageant"))
-       "pscp"
-      "plink"))
+   ((and (eq system-type 'windows-nt) (executable-find "pscp")) "pscp")
    ;; There is an ssh installation.
-   ((executable-find "scp")
-    (if        (or (fboundp 'password-read)
-           (fboundp 'auth-source-user-or-password)
-           (fboundp 'auth-source-search)
-           ;; ssh-agent is running.
-           (getenv "SSH_AUTH_SOCK")
-           (getenv "SSH_AGENT_PID"))
-       "scp"
-      "ssh"))
+   ((executable-find "scp") "scp")
    ;; Fallback.
    (t "ftp"))
   "Default method to use for transferring files.
@@ -482,6 +429,7 @@ names from FILE for completion.  The following predefined FUNCTIONs exists:
  * `tramp-parse-sknownhosts' for \"~/.ssh2/knownhosts/*\" like files,
  * `tramp-parse-hosts'       for \"/etc/hosts\" like files,
  * `tramp-parse-passwd'      for \"/etc/passwd\" like files.
+ * `tramp-parse-etc-group'   for \"/etc/group\" like files.
  * `tramp-parse-netrc'       for \"~/.netrc\" like files.
  * `tramp-parse-putty'       for PuTTY registered sessions.
 
@@ -541,7 +489,7 @@ Sometimes the prompt is reported to look like \"login as:\"."
   ;; regexp works only for GNU Emacs.
   ;; Allow also [] style prompts.  They can appear only during
   ;; connection initialization; Tramp redefines the prompt afterwards.
-  (concat (if (featurep 'xemacs) "" "\\(?:^\\|\r\\)")
+  (concat "\\(?:^\\|\r\\)"
          "[^]#$%>\n]*#?[]#$%>] *\\(\e\\[[0-9;]*[a-zA-Z] *\\)*")
   "Regexp to match prompts from remote shell.
 Normally, Tramp expects you to configure `shell-prompt-pattern'
@@ -559,6 +507,7 @@ This regexp must match both `tramp-initial-end-of-output' and
 
 (defcustom tramp-password-prompt-regexp
   (format "^.*\\(%s\\).*:\^@? *"
+         ;; `password-word-equivalents' has been introduced with Emacs 24.4.
          (if (boundp 'password-word-equivalents)
              (regexp-opt (symbol-value 'password-word-equivalents))
            "password\\|passphrase"))
@@ -677,28 +626,17 @@ Useful for \"rsync\" like methods.")
 (make-variable-buffer-local 'tramp-temp-buffer-file-name)
 (put 'tramp-temp-buffer-file-name 'permanent-local t)
 
-;; 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.
-
-;; Currently, we have the choice between 'ftp and 'sep.
 ;;;###autoload
-(defcustom tramp-syntax
-  (if (featurep 'xemacs) 'sep 'ftp)
+(defcustom tramp-syntax '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."
+  `ftp' -- Ange-FTP like syntax
+  `sep' -- Syntax as defined for XEmacs originally."
   :group 'tramp
   :version "24.4"
-  :type `(choice (const :tag  ,(if (featurep 'xemacs) "EFS" "Ange-FTP") ftp)
+  :type '(choice (const :tag "Ange-FTP" ftp)
                 (const :tag "XEmacs" sep)))
 
 (defconst tramp-prefix-format
@@ -883,15 +821,13 @@ See also `tramp-file-name-regexp'.")
       "\\`/\\(\\[.*\\]\\|[^/|:]\\{2,\\}[^/|]*\\):"
     "\\`/[^/|:][^/|]*:")
   "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' for more explanations.
+See `tramp-file-name-structure' for more explanations.
 
 On W32 systems, the volume letter must be ignored.")
 
 ;;;###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' for more explanations.")
 
 ;;;###autoload
@@ -919,7 +855,6 @@ Also see `tramp-file-name-structure'.")
   (if (memq system-type '(cygwin windows-nt))
       "\\`/[^/]\\{2,\\}\\'" "\\`/[^/]*\\'")
   "Value for `tramp-completion-file-name-regexp' for unified remoting.
-GNU Emacs uses a unified filename syntax for Tramp and Ange-FTP.
 See `tramp-file-name-structure' for more explanations.
 
 On W32 systems, the volume letter must be ignored.")
@@ -928,7 +863,6 @@ On W32 systems, the volume letter must be ignored.")
 (defconst tramp-completion-file-name-regexp-separate
   "\\`/\\([[][^]]*\\)?\\'"
   "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' for more explanations.")
 
 ;;;###autoload
@@ -951,10 +885,7 @@ Also see `tramp-file-name-structure'.")
 ;; 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
 ;; when `tramp-chunksize' is zero or nil.
-(defcustom tramp-chunksize
-  (when (and (not (featurep 'xemacs))
-            (memq system-type '(hpux)))
-    500)
+(defcustom tramp-chunksize (when (memq system-type '(hpux)) 500)
 ;; Parentheses in docstring starting at beginning of line are escaped.
 ;; Fontification is messed up when
 ;; `open-paren-in-column-0-is-defun-start' set to t.
@@ -1111,11 +1042,10 @@ If VEC is a vector, check first in connection properties.
 Afterwards, check in `tramp-methods'.  If the `tramp-methods'
 entry does not exist, return nil."
   (let ((hash-entry
-        (tramp-compat-replace-regexp-in-string
-         "^tramp-" "" (symbol-name param))))
+        (replace-regexp-in-string "^tramp-" "" (symbol-name param))))
     (if (tramp-connection-property-p vec hash-entry)
        ;; We use the cached property.
-       (tramp-get-connection-property  vec hash-entry nil)
+       (tramp-get-connection-property vec hash-entry nil)
       ;; Use the static value from `tramp-methods'.
       (let ((methods-entry
             (assoc param (assoc (tramp-file-name-method vec) tramp-methods))))
@@ -1230,11 +1160,10 @@ their replacement."
       ;; This works with the current set of `tramp-obsolete-methods'.
       ;; Must be improved, if their are more sophisticated replacements.
       (setq result (substring result 0 -1)))
-    ;; We must mark, whether a default value has been used.  Not
-    ;; applicable for XEmacs.
-    (if (or method (null result) (null (functionp 'propertize)))
+    ;; We must mark, whether a default value has been used.
+    (if (or method (null result))
        result
-      (tramp-compat-funcall 'propertize result 'tramp-default t))))
+      (propertize result 'tramp-default t))))
 
 (defun tramp-find-user (method user host)
   "Return the right user string to use.
@@ -1252,11 +1181,10 @@ This is USER, if non-nil. Otherwise, do a lookup in
                   (setq choices nil)))
               luser)
             tramp-default-user)))
-    ;; We must mark, whether a default value has been used.  Not
-    ;; applicable for XEmacs.
-    (if (or user (null result) (null (functionp 'propertize)))
+    ;; We must mark, whether a default value has been used.
+    (if (or user (null result))
        result
-      (tramp-compat-funcall 'propertize result 'tramp-default t))))
+      (propertize result 'tramp-default t))))
 
 (defun tramp-find-host (method user host)
   "Return the right host string to use.
@@ -1447,8 +1375,7 @@ ARGUMENTS to actually emit the message (if applicable)."
     (when (bobp)
       (insert
        (format
-       ";; %sEmacs: %s Tramp: %s -*- mode: outline; -*-"
-       (if (featurep 'sxemacs) "SX" (if (featurep 'xemacs) "X" "GNU "))
+       ";; Emacs: %s Tramp: %s -*- mode: outline; -*-"
        emacs-version tramp-version))
       (when (>= tramp-verbose 10)
        (insert
@@ -1481,7 +1408,6 @@ ARGUMENTS to actually emit the message (if applicable)."
                     '("tramp-backtrace"
                       "tramp-compat-condition-case-unless-debug"
                       "tramp-compat-funcall"
-                      "tramp-compat-with-temp-message"
                       "tramp-condition-case-unless-debug"
                       "tramp-debug-message"
                       "tramp-error"
@@ -1651,14 +1577,13 @@ If VAR is nil, then we bind `v' to the structure and `method', `user',
 
 (put 'with-parsed-tramp-file-name 'lisp-indent-function 2)
 (put 'with-parsed-tramp-file-name 'edebug-form-spec '(form symbolp body))
-(tramp-compat-font-lock-add-keywords
- 'emacs-lisp-mode '("\\<with-parsed-tramp-file-name\\>"))
+(font-lock-add-keywords 'emacs-lisp-mode '("\\<with-parsed-tramp-file-name\\>"))
 
 (defun tramp-progress-reporter-update (reporter &optional value)
   (let* ((parameters (cdr reporter))
         (message (aref parameters 3)))
     (when (string-match message (or (current-message) ""))
-      (tramp-compat-funcall 'progress-reporter-update reporter value))))
+      (progress-reporter-update reporter value))))
 
 (defmacro with-tramp-progress-reporter (vec level message &rest body)
   "Executes BODY, spinning a progress reporter with MESSAGE.
@@ -1675,19 +1600,18 @@ without a visible progress reporter."
                        ;; Display only when there is a minimum level.
                        (<= ,level (min tramp-verbose 3)))
               (ignore-errors
-                (let ((pr (tramp-compat-funcall
-                           #'make-progress-reporter ,message)))
+                (let ((pr (make-progress-reporter ,message nil nil)))
                   (when pr
-                    (run-at-time 3 0.1
-                                 #'tramp-progress-reporter-update pr)))))))
+                    (run-at-time
+                    3 0.1 #'tramp-progress-reporter-update pr)))))))
        (unwind-protect
            ;; Execute the body.
            (prog1 (progn ,@body) (setq cookie "done"))
          ;; Stop progress reporter.
-         (if tm (tramp-compat-funcall 'cancel-timer tm))
+         (if tm (cancel-timer tm))
          (tramp-message ,vec ,level "%s...%s" ,message cookie)))))
 
-(tramp-compat-font-lock-add-keywords
+(font-lock-add-keywords
  'emacs-lisp-mode '("\\<with-tramp-progress-reporter\\>"))
 
 (defmacro with-tramp-file-property (vec file property &rest body)
@@ -1706,8 +1630,7 @@ FILE must be a local file name on a connection identified via VEC."
 
 (put 'with-tramp-file-property 'lisp-indent-function 3)
 (put 'with-tramp-file-property 'edebug-form-spec t)
-(tramp-compat-font-lock-add-keywords
- 'emacs-lisp-mode '("\\<with-tramp-file-property\\>"))
+(font-lock-add-keywords 'emacs-lisp-mode '("\\<with-tramp-file-property\\>"))
 
 (defmacro with-tramp-connection-property (key property &rest body)
   "Check in Tramp for property PROPERTY, otherwise executes BODY and set."
@@ -1722,7 +1645,7 @@ FILE must be a local file name on a connection identified via VEC."
 
 (put 'with-tramp-connection-property 'lisp-indent-function 2)
 (put 'with-tramp-connection-property 'edebug-form-spec t)
-(tramp-compat-font-lock-add-keywords
+(font-lock-add-keywords
  'emacs-lisp-mode '("\\<with-tramp-connection-property\\>"))
 
 (defun tramp-drop-volume-letter (name)
@@ -1806,28 +1729,22 @@ 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
-         (tramp-compat-funcall
-          'make-overlay
-          (tramp-compat-funcall 'minibuffer-prompt-end)
-          (tramp-compat-funcall 'minibuffer-prompt-end)))
+         (make-overlay (minibuffer-prompt-end) (minibuffer-prompt-end)))
     ;; Copy rfn-eshadow-overlay properties.
-    (let ((props (tramp-compat-funcall
-                 'overlay-properties (symbol-value 'rfn-eshadow-overlay))))
+    (let ((props (overlay-properties (symbol-value 'rfn-eshadow-overlay))))
       (while props
        ;; The `field' property prevents correct minibuffer
        ;; completion; we exclude it.
        (if (not (eq (car props) 'field))
-           (tramp-compat-funcall
-            'overlay-put tramp-rfn-eshadow-overlay (pop props) (pop props))
+            (overlay-put tramp-rfn-eshadow-overlay (pop props) (pop props))
          (pop props) (pop props))))))
 
-(when (boundp 'rfn-eshadow-setup-minibuffer-hook)
-  (add-hook 'rfn-eshadow-setup-minibuffer-hook
-           'tramp-rfn-eshadow-setup-minibuffer)
-  (add-hook 'tramp-unload-hook
-           (lambda ()
-             (remove-hook 'rfn-eshadow-setup-minibuffer-hook
-                          'tramp-rfn-eshadow-setup-minibuffer))))
+(add-hook 'rfn-eshadow-setup-minibuffer-hook
+         'tramp-rfn-eshadow-setup-minibuffer)
+(add-hook 'tramp-unload-hook
+         (lambda ()
+           (remove-hook 'rfn-eshadow-setup-minibuffer-hook
+                        'tramp-rfn-eshadow-setup-minibuffer)))
 
 (defconst tramp-rfn-eshadow-update-overlay-regexp
   (format "[^%s/~]*\\(/\\|~\\)" tramp-postfix-host-format))
@@ -1839,15 +1756,13 @@ This is intended to be used as a minibuffer `post-command-hook' for
 been set up by `rfn-eshadow-setup-minibuffer'."
   ;; In remote files name, there is a shadowing just for the local part.
   (ignore-errors
-    (let ((end (or (tramp-compat-funcall
-                   'overlay-end (symbol-value 'rfn-eshadow-overlay))
-                  (tramp-compat-funcall 'minibuffer-prompt-end)))
+    (let ((end (or (overlay-end (symbol-value 'rfn-eshadow-overlay))
+                  (minibuffer-prompt-end)))
          ;; We do not want to send any remote command.
          (non-essential t))
       (when
          (tramp-tramp-file-p
-          (tramp-compat-funcall
-           'buffer-substring-no-properties end (point-max)))
+          (buffer-substring-no-properties end (point-max)))
        (save-excursion
          (save-restriction
            (narrow-to-region
@@ -1859,17 +1774,15 @@ been set up by `rfn-eshadow-setup-minibuffer'."
            (let ((rfn-eshadow-overlay tramp-rfn-eshadow-overlay)
                  (rfn-eshadow-update-overlay-hook nil)
                  file-name-handler-alist)
-             (tramp-compat-funcall
-              'move-overlay rfn-eshadow-overlay (point-max) (point-max))
-             (tramp-compat-funcall 'rfn-eshadow-update-overlay))))))))
-
-(when (boundp 'rfn-eshadow-update-overlay-hook)
-  (add-hook 'rfn-eshadow-update-overlay-hook
-           'tramp-rfn-eshadow-update-overlay)
-  (add-hook 'tramp-unload-hook
-           (lambda ()
-             (remove-hook 'rfn-eshadow-update-overlay-hook
-                          'tramp-rfn-eshadow-update-overlay))))
+             (move-overlay rfn-eshadow-overlay (point-max) (point-max))
+             (rfn-eshadow-update-overlay))))))))
+
+(add-hook 'rfn-eshadow-update-overlay-hook
+         'tramp-rfn-eshadow-update-overlay)
+(add-hook 'tramp-unload-hook
+         (lambda ()
+           (remove-hook 'rfn-eshadow-update-overlay-hook
+                        'tramp-rfn-eshadow-update-overlay)))
 
 ;; Inodes don't exist for some file systems.  Therefore we must
 ;; generate virtual ones.  Used in `find-buffer-visiting'.  The method
@@ -1892,12 +1805,13 @@ been set up by `rfn-eshadow-setup-minibuffer'."
 If the file modes of FILENAME cannot be determined, return the
 value of `default-file-modes', without execute permissions."
   (or (file-modes filename)
-      (logand (default-file-modes) (tramp-compat-octal-to-decimal "0666"))))
+      (logand (default-file-modes) (string-to-number "0666" 8))))
 
 (defun tramp-replace-environment-variables (filename)
  "Replace environment variables in FILENAME.
 Return the string with the replaced variables."
  (or (ignore-errors
+       ;; Optional arg has been introduced with Emacs 24 (?).
        (tramp-compat-funcall 'substitute-env-vars filename 'only-defined))
      ;; We need an own implementation.
      (save-match-data
@@ -1912,35 +1826,6 @@ Return the string with the replaced variables."
                  t nil filename)))
         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)))
-     (eval
-      `(add-hook
-       'tramp-unload-hook
-       (lambda ()
-         (ad-remove-advice ',x 'around ',(intern (format "tramp-advice-%s" x)))
-         (ad-activate ',x)))))
-
-   '(minibuffer-electric-separator
-     minibuffer-electric-tilde)))
-
 (defun tramp-find-file-name-coding-system-alist (filename tmpname)
   "Like `find-operation-coding-system' for Tramp filenames.
 Tramp's `insert-file-contents' and `write-region' work over
@@ -2000,49 +1885,35 @@ ARGS are the arguments OPERATION has been called with."
   (cond
    ;; FILE resp DIRECTORY.
    ((member operation
-           (list 'access-file 'byte-compiler-base-file-name 'delete-directory
-                 'delete-file 'diff-latest-backup-file 'directory-file-name
-                 'directory-files 'directory-files-and-attributes
-                 'dired-compress-file 'dired-uncache
-                 'file-accessible-directory-p 'file-attributes
-                 'file-directory-p 'file-executable-p 'file-exists-p
-                 'file-local-copy 'file-modes
-                 'file-name-as-directory 'file-name-directory
-                 'file-name-nondirectory 'file-name-sans-versions
-                 'file-ownership-preserved-p 'file-readable-p
-                 'file-regular-p 'file-remote-p 'file-symlink-p 'file-truename
-                 'file-writable-p 'find-backup-file-name 'find-file-noselect
-                 'get-file-buffer 'insert-directory 'insert-file-contents
-                 '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
-                 ;; Emacs 24+ only.
-                 'file-acl 'file-notify-add-watch
-                 'file-selinux-context 'set-file-acl 'set-file-selinux-context
-                 ;; XEmacs only.
-                 'abbreviate-file-name 'create-file-buffer
-                 'dired-file-modtime 'dired-make-compressed-filename
-                 'dired-recursive-delete-directory 'dired-set-file-modtime
-                 'dired-shell-unhandle-file-name 'dired-uucode-file
-                 'insert-file-contents-literally 'make-temp-name 'recover-file
-                 'vm-imap-check-mail 'vm-pop-check-mail 'vm-spool-check-mail))
+           '(access-file byte-compiler-base-file-name delete-directory
+             delete-file diff-latest-backup-file directory-file-name
+             directory-files directory-files-and-attributes
+             dired-compress-file dired-uncache
+             file-accessible-directory-p file-attributes
+             file-directory-p file-executable-p file-exists-p
+             file-local-copy file-modes
+             file-name-as-directory file-name-directory
+             file-name-nondirectory file-name-sans-versions
+             file-ownership-preserved-p file-readable-p
+             file-regular-p file-remote-p file-symlink-p file-truename
+             file-writable-p find-backup-file-name find-file-noselect
+             get-file-buffer insert-directory insert-file-contents
+             load make-directory make-directory-internal
+             set-file-modes set-file-times substitute-in-file-name
+             unhandled-file-name-directory vc-registered
+             ;; Emacs 24+ only.
+             file-acl file-notify-add-watch file-selinux-context
+             set-file-acl set-file-selinux-context))
     (if (file-name-absolute-p (nth 0 args))
        (nth 0 args)
       (expand-file-name (nth 0 args))))
    ;; FILE DIRECTORY resp FILE1 FILE2.
    ((member operation
-           (list 'add-name-to-file 'copy-file 'expand-file-name
-                 'file-name-all-completions 'file-name-completion
-                 'file-newer-than-file-p 'make-symbolic-link 'rename-file
-                 ;; Emacs 23+ only.
-                 'copy-directory
-                 ;; Emacs 24+ only.
-                 'file-equal-p 'file-in-directory-p
-                 ;; XEmacs only.
-                 'dired-make-relative-symlink
-                 'vm-imap-move-mail 'vm-pop-move-mail 'vm-spool-move-mail))
+           '(add-name-to-file copy-directory copy-file expand-file-name
+             file-name-all-completions file-name-completion
+             file-newer-than-file-p make-symbolic-link rename-file
+             ;; Emacs 24+ only.
+             file-equal-p file-in-directory-p))
     (save-match-data
       (cond
        ((tramp-tramp-file-p (nth 0 args)) (nth 0 args))
@@ -2053,28 +1924,20 @@ ARGS are the arguments OPERATION has been called with."
     (nth 2 args))
    ;; BUFFER.
    ((member operation
-           (list 'set-visited-file-modtime 'verify-visited-file-modtime
-                  ;; Emacs 22+ only.
-                 'make-auto-save-file-name
-                 ;; XEmacs only.
-                 'backup-buffer))
+           '(make-auto-save-file-name
+             set-visited-file-modtime verify-visited-file-modtime))
     (buffer-file-name
      (if (bufferp (nth 0 args)) (nth 0 args) (current-buffer))))
    ;; COMMAND.
    ((member operation
-           (list ;; not in Emacs 23+.
-                 'dired-call-process
-                  ;; Emacs only.
-                 'shell-command
-                  ;; Emacs 22+ only.
-                  'process-file
-                  ;; Emacs 23+ only.
-                  'start-file-process
-                 ;; XEmacs only.
-                 'dired-print-file 'dired-shell-call-process))
+           '(process-file shell-command start-file-process))
     default-directory)
    ;; PROC.
-   ((member operation (list 'file-notify-rm-watch 'file-notify-valid-p))
+   ((member operation
+           '(;; Emacs 24+ only.
+             file-notify-rm-watch
+             ;; Emacs 25+ only.
+             file-notify-valid-p))
     (when (processp (nth 0 args))
       (with-current-buffer (process-buffer (nth 0 args))
        default-directory)))
@@ -2121,13 +1984,13 @@ Falls back to normal file name handler if no Tramp file name handler exists."
                (tramp-replace-environment-variables
                 (apply 'tramp-file-name-for-operation operation args)))
               (completion (tramp-completion-mode-p))
-              (foreign (tramp-find-foreign-file-name-handler filename)))
+              (foreign (tramp-find-foreign-file-name-handler filename))
+              result)
          (with-parsed-tramp-file-name filename nil
            ;; Call the backend function.
            (if foreign
                (tramp-condition-case-unless-debug err
-                   (let ((sf (symbol-function foreign))
-                         result)
+                   (let ((sf (symbol-function foreign)))
                      ;; Some packages set the default directory to a
                      ;; remote path, before respective Tramp packages
                      ;; are already loaded.  This results in
@@ -2191,8 +2054,13 @@ Falls back to normal file name handler if no Tramp file name handler exists."
                    ;; Propagate the error.
                    (t (signal (car err) (cdr err))))))
 
-             ;; Nothing to do for us.
-             (tramp-run-real-handler operation args)))))
+             ;; Nothing to do for us.  However, since we are in
+             ;; `tramp-mode', we must suppress the volume letter on
+             ;; MS Windows.
+             (setq result (tramp-run-real-handler operation args))
+             (if (stringp result)
+                 (tramp-drop-volume-letter result)
+               result)))))
 
     ;; When `tramp-mode' is not enabled, we don't do anything.
     (tramp-run-real-handler operation args)))
@@ -2228,10 +2096,7 @@ preventing reentrant calls of Tramp.")
 (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."
-  ;; We bind `directory-sep-char' here for XEmacs on Windows, which
-  ;; would otherwise use backslash.
-  (let ((directory-sep-char ?/)
-       (fn (assoc operation tramp-completion-file-name-handler-alist)))
+  (let ((fn (assoc operation tramp-completion-file-name-handler-alist)))
     (if (and
         ;; When `tramp-mode' is not enabled, we don't do anything.
          fn tramp-mode
@@ -2242,8 +2107,7 @@ Falls back to normal file name handler if no Tramp file name handler exists."
          ;; indicated his interest in using a fancier completion system.
          (or (eq tramp-syntax 'sep)
              (featurep 'tramp) ;; If it's loaded, we may as well use it.
-            ;; `partial-completion-mode' does not exist in XEmacs.
-            ;; It is obsoleted with Emacs 24.1.
+            ;; `partial-completion-mode' is obsoleted with Emacs 24.1.
              (and (boundp 'partial-completion-mode)
                  (symbol-value 'partial-completion-mode))
              ;; FIXME: These may have been loaded even if the user never
@@ -2256,9 +2120,8 @@ Falls back to normal file name handler if no Tramp file name handler exists."
 ;;;###autoload
 (progn (defun tramp-autoload-file-name-handler (operation &rest args)
   "Load Tramp file name handler, and perform OPERATION."
-  ;; Avoid recursive loading of tramp.el.  `temporary-file-directory'
-  ;; does not exist in XEmacs, so we must use something else.
-  (let ((default-directory "/"))
+  ;; Avoid recursive loading of tramp.el.
+  (let ((default-directory temporary-file-directory))
     (load "tramp" nil t))
   (apply operation args)))
 
@@ -2361,7 +2224,7 @@ should never be set globally, the intention is to let-bind it.")
 ;; 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 ...
+;; syntax in order to avoid ambiguities.
 ;;;###tramp-autoload
 (defun tramp-completion-mode-p ()
   "Check, whether method / user name / host name completion is active."
@@ -2369,7 +2232,6 @@ should never be set globally, the intention is to let-bind it.")
    ;; Signal from outside.  `non-essential' has been introduced in Emacs 24.
    (and (boundp 'non-essential) (symbol-value 'non-essential))
    tramp-completion-mode
-   ;; Emacs.
    (equal last-input-event 'tab)
    (and (natnump last-input-event)
        (or
@@ -2377,24 +2239,7 @@ should never be set globally, the intention is to let-bind it.")
         (equal last-input-event ?\t)
         (and (not (event-modifiers last-input-event))
              (or (equal last-input-event ?\?)
-                 (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.
-       (tramp-compat-funcall 'event-to-character last-input-event)
-       (or
-        ;; ?\t has event-modifier 'control.
-        (equal
-         (tramp-compat-funcall 'event-to-character last-input-event) ?\t)
-        (and (not (event-modifiers last-input-event))
-             (or (equal
-                  (tramp-compat-funcall 'event-to-character last-input-event)
-                  ?\?)
-                 (equal
-                  (tramp-compat-funcall 'event-to-character last-input-event)
-                  ?\ )))))))
+                 (equal last-input-event ?\ )))))))
 
 (defun tramp-connectable-p (filename)
   "Check, whether it is possible to connect the remote host w/o side-effects.
@@ -2781,17 +2626,18 @@ User is always nil."
    (tramp-parse-group
     (concat "^\\(" tramp-ipv6-regexp "\\|" tramp-host-regexp "\\)") 1 " \t"))
 
-;; 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 use `tramp-current-user' as indication,
-;; assuming it is set in `tramp-completion-handle-file-name-all-completions'.
 ;;;###tramp-autoload
 (defun tramp-parse-passwd (filename)
   "Return a list of (user host) tuples allowed to access.
 Host is always \"localhost\"."
-  (if (zerop (length tramp-current-user))
-      '(("root" nil))
-    (tramp-parse-file filename 'tramp-parse-passwd-group)))
+  (with-tramp-connection-property nil "parse-passwd"
+    (if (executable-find "getent")
+       (with-temp-buffer
+         (when (zerop (tramp-call-process nil "getent" nil t nil "passwd"))
+           (goto-char (point-min))
+           (loop while (not (eobp)) collect
+                 (tramp-parse-etc-group-group))))
+      (tramp-parse-file filename 'tramp-parse-passwd-group))))
 
 (defun tramp-parse-passwd-group ()
    "Return a (user host) tuple allowed to access.
@@ -2803,6 +2649,29 @@ Host is always \"localhost\"."
      (forward-line 1)
      result))
 
+;;;###tramp-autoload
+(defun tramp-parse-etc-group (filename)
+  "Return a list of (group host) tuples allowed to access.
+Host is always \"localhost\"."
+  (with-tramp-connection-property nil "parse-group"
+    (if (executable-find "getent")
+       (with-temp-buffer
+         (when (zerop (tramp-call-process nil "getent" nil t nil "group"))
+           (goto-char (point-min))
+           (loop while (not (eobp)) collect
+                 (tramp-parse-etc-group-group))))
+      (tramp-parse-file filename 'tramp-parse-etc-group-group))))
+
+(defun tramp-parse-etc-group-group ()
+   "Return a (group host) tuple allowed to access.
+Host is always \"localhost\"."
+   (let ((result)
+        (split (split-string (buffer-substring (point) (point-at-eol)) ":")))
+     (when (member (user-login-name) (split-string (nth 3 split) "," 'omit))
+       (setq result (list (nth 0 split) "localhost")))
+     (forward-line 1)
+     result))
+
 ;;;###tramp-autoload
 (defun tramp-parse-netrc (filename)
   "Return a list of (user host) tuples allowed to access.
@@ -2827,12 +2696,13 @@ User may be nil."
   "Return a list of (user host) tuples allowed to access.
 User is always nil."
   (if (memq system-type '(windows-nt))
-      (with-temp-buffer
-       (when (zerop (tramp-call-process
-                     nil "reg" nil t nil "query" registry-or-dirname))
-         (goto-char (point-min))
-         (loop while (not (eobp)) collect
-               (tramp-parse-putty-group registry-or-dirname))))
+      (with-tramp-connection-property nil "parse-putty"
+       (with-temp-buffer
+         (when (zerop (tramp-call-process
+                       nil "reg" nil t nil "query" registry-or-dirname))
+           (goto-char (point-min))
+           (loop while (not (eobp)) collect
+                 (tramp-parse-putty-group registry-or-dirname)))))
     ;; UNIX case.
     (tramp-parse-shostkeys-sknownhosts
      registry-or-dirname (concat "^\\(" tramp-host-regexp "\\)$"))))
@@ -2868,10 +2738,8 @@ User is always nil."
        (substring directory 0 -1)
       directory)))
 
-(defun tramp-handle-directory-files
-  (directory &optional full match nosort files-only)
+(defun tramp-handle-directory-files (directory &optional full match nosort)
   "Like `directory-files' for Tramp files."
-  ;; FILES-ONLY is valid for XEmacs only.
   (when (file-directory-p directory)
     (setq directory (file-name-as-directory (expand-file-name directory)))
     (let ((temp (nreverse (file-name-all-completions "" directory)))
@@ -2879,12 +2747,7 @@ User is always nil."
 
       (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)))
+       (when (or (null match) (string-match match item))
          (push (if full (concat directory item) item)
                result)))
       (if nosort result (sort result 'string<)))))
@@ -2894,15 +2757,14 @@ User is always nil."
   "Like `directory-files-and-attributes' for Tramp files."
   (mapcar
    (lambda (x)
-     (cons x (tramp-compat-file-attributes
+     (cons x (file-attributes
              (if full x (expand-file-name x directory)) id-format)))
    (directory-files directory full match nosort)))
 
-(defun tramp-handle-dired-uncache (dir &optional dir-p)
+(defun tramp-handle-dired-uncache (dir)
   "Like `dired-uncache' for Tramp files."
-  ;; DIR-P is valid for XEmacs only.
   (with-parsed-tramp-file-name
-      (if (or dir-p (file-directory-p dir)) dir (file-name-directory dir)) nil
+      (if (file-directory-p dir) dir (file-name-directory dir)) nil
     (tramp-flush-directory-property v localname)))
 
 (defun tramp-handle-file-accessible-directory-p (filename)
@@ -3035,43 +2897,19 @@ User is always nil."
 (defun tramp-handle-find-backup-file-name (filename)
   "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.
     (let ((backup-directory-alist
-          ;; Emacs case.
-          (when (boundp 'backup-directory-alist)
-            (if (symbol-value 'tramp-backup-directory-alist)
-                (mapcar
-                 (lambda (x)
-                   (cons
-                    (car x)
-                    (if (and (stringp (cdr x))
-                             (file-name-absolute-p (cdr x))
-                             (not (tramp-file-name-p (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))))
-
-         (bkup-backup-directory-info
-          ;; XEmacs case.
-          (when (boundp 'bkup-backup-directory-info)
-            (if (symbol-value 'tramp-bkup-backup-directory-info)
-                (mapcar
-                 (lambda (x)
-                   (nconc
-                    (list (car x))
-                    (list
-                     (if (and (stringp (car (cdr x)))
-                              (file-name-absolute-p (car (cdr x)))
-                              (not (tramp-file-name-p (car (cdr x)))))
-                         (tramp-make-tramp-file-name
-                          method user host (car (cdr x)))
-                       (car (cdr x))))
-                    (cdr (cdr x))))
-                 (symbol-value 'tramp-bkup-backup-directory-info))
-              (symbol-value 'bkup-backup-directory-info)))))
-
+          (if tramp-backup-directory-alist
+              (mapcar
+               (lambda (x)
+                 (cons
+                  (car x)
+                  (if (and (stringp (cdr x))
+                           (file-name-absolute-p (cdr x))
+                           (not (tramp-file-name-p (cdr x))))
+                      (tramp-make-tramp-file-name method user host (cdr x))
+                    (cdr x))))
+               tramp-backup-directory-alist)
+            backup-directory-alist)))
       (tramp-run-real-handler 'find-backup-file-name (list filename)))))
 
 (defun tramp-handle-insert-directory
@@ -3182,8 +3020,7 @@ User is always nil."
                    ;; When the file is not readable for the owner, it
                    ;; cannot be inserted, even if it is readable for the
                    ;; group or for everybody.
-                   (set-file-modes
-                    local-copy (tramp-compat-octal-to-decimal "0600"))
+                   (set-file-modes local-copy (string-to-number "0600" 8))
 
                    (when (and (null remote-copy)
                               (tramp-get-method-parameter
@@ -3193,9 +3030,7 @@ User is always nil."
                      (setq tramp-temp-buffer-file-name local-copy))
 
                    ;; We must ensure that `file-coding-system-alist'
-                   ;; matches `local-copy'.  We must also use `visit',
-                   ;; otherwise there might be an error in the
-                   ;; `revert-buffer' function under XEmacs.
+                   ;; matches `local-copy'.
                    (let ((file-coding-system-alist
                           (tramp-find-file-name-coding-system-alist
                            filename local-copy)))
@@ -3251,7 +3086,7 @@ User is always nil."
        (with-tramp-progress-reporter v 0 (format "Loading %s" file)
          (let ((local-copy (file-local-copy file)))
            (unwind-protect
-               (tramp-compat-load local-copy noerror t nosuffix must-suffix)
+               (load local-copy noerror t nosuffix must-suffix)
              (delete-file local-copy)))))
       t)))
 
@@ -3345,9 +3180,7 @@ User is always nil."
                                     (current-buffer))))
          ;; There's some output, display it.
          (when (with-current-buffer output-buffer (> (point-max) (point-min)))
-           (if (functionp 'display-message-or-buffer)
-               (tramp-compat-funcall 'display-message-or-buffer output-buffer)
-             (pop-to-buffer output-buffer))))))))
+           (display-message-or-buffer output-buffer)))))))
 
 (defun tramp-handle-substitute-in-file-name (filename)
   "Like `substitute-in-file-name' for Tramp files.
@@ -3367,14 +3200,6 @@ User is always nil."
     (let (process-environment)
       (tramp-run-real-handler 'substitute-in-file-name (list filename)))))
 
-(defun tramp-handle-unhandled-file-name-directory (_filename)
-  "Like `unhandled-file-name-directory' for Tramp files."
-  ;; Starting with Emacs 23, we must simply return nil.  But we must
-  ;; keep backward compatibility, also with XEmacs.  "~/" cannot be
-  ;; returned, because there might be machines without a HOME
-  ;; directory (like hydra).
-  (and (< emacs-major-version 23) "/"))
-
 (defun tramp-handle-set-visited-file-modtime (&optional time-list)
   "Like `set-visited-file-modtime' for Tramp files."
   (unless (buffer-file-name)
@@ -3403,7 +3228,7 @@ of."
       ;; connection.
       (if (or (not f)
              (eq (visited-file-modtime) 0)
-             (not (tramp-file-name-handler 'file-remote-p f nil 'connected)))
+             (not (file-remote-p f nil 'connected)))
          t
        (with-parsed-tramp-file-name f nil
          (let* ((remote-file-name-inhibit-cache t)
@@ -3454,7 +3279,7 @@ of."
        (with-current-buffer (process-buffer proc)
         (file-exists-p
          (concat (file-remote-p default-directory)
-                 (tramp-compat-process-get proc 'watch-name))))))
+                 (process-get proc 'watch-name))))))
 
 ;;; Functions for establishing connection:
 
@@ -3657,9 +3482,7 @@ for process communication also."
       ;; Under Windows XP, accept-process-output doesn't return
       ;; sometimes.  So we add an additional timeout.
       (with-timeout ((or timeout 1))
-       (if (featurep 'xemacs)
-           (accept-process-output p timeout timeout-msecs)
-         (accept-process-output p timeout timeout-msecs (and proc t))))
+       (accept-process-output p timeout timeout-msecs (and proc t)))
       (tramp-message proc 10 "%s %s %s\n%s"
                     proc (process-status proc) p (buffer-string)))))
 
@@ -3684,11 +3507,10 @@ Erase echoed commands if exists."
     (when (or (not (tramp-get-connection-property proc "check-remote-echo" nil))
              ;; Sometimes, the echo string is suppressed on the remote side.
              (not (string-equal
-                   (tramp-compat-funcall
-                    'substring-no-properties tramp-echo-mark-marker
+                   (substring-no-properties
+                    tramp-echo-mark-marker
                     0 (min tramp-echo-mark-marker-length (1- (point-max))))
-                   (tramp-compat-funcall
-                    'buffer-substring-no-properties
+                   (buffer-substring-no-properties
                     (point-min)
                     (min (+ (point-min) tramp-echo-mark-marker-length)
                          (point-max))))))
@@ -3706,22 +3528,15 @@ 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."
   (with-current-buffer (process-buffer proc)
-    (let ((found (tramp-check-for-regexp proc regexp))
-         (start-time (current-time)))
+    (let ((found (tramp-check-for-regexp proc regexp)))
       (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))))))
+            (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)
@@ -3761,9 +3576,8 @@ the remote host use line-endings as defined in the variable
       (let (buffer-read-only) (delete-region (point-min) (point-max)))
       ;; Replace "\n" by `tramp-rsh-end-of-line'.
       (setq string
-           (mapconcat 'identity
-                      (tramp-compat-split-string string "\n")
-                      tramp-rsh-end-of-line))
+           (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)))
@@ -3827,57 +3641,47 @@ would yield t.  On the other hand, the following check results in nil:
     (save-match-data
       (logior
        (cond
-       ((char-equal owner-read ?r) (tramp-compat-octal-to-decimal "00400"))
+       ((char-equal owner-read ?r) (string-to-number "00400" 8))
        ((char-equal owner-read ?-) 0)
        (t (error "Second char `%c' must be one of `r-'" owner-read)))
        (cond
-       ((char-equal owner-write ?w) (tramp-compat-octal-to-decimal "00200"))
+       ((char-equal owner-write ?w) (string-to-number "00200" 8))
        ((char-equal owner-write ?-) 0)
        (t (error "Third char `%c' must be one of `w-'" owner-write)))
        (cond
-       ((char-equal owner-execute-or-setid ?x)
-        (tramp-compat-octal-to-decimal "00100"))
-       ((char-equal owner-execute-or-setid ?S)
-        (tramp-compat-octal-to-decimal "04000"))
-       ((char-equal owner-execute-or-setid ?s)
-        (tramp-compat-octal-to-decimal "04100"))
+       ((char-equal owner-execute-or-setid ?x) (string-to-number "00100" 8))
+       ((char-equal owner-execute-or-setid ?S) (string-to-number "04000" 8))
+       ((char-equal owner-execute-or-setid ?s) (string-to-number "04100" 8))
        ((char-equal owner-execute-or-setid ?-) 0)
        (t (error "Fourth char `%c' must be one of `xsS-'"
                  owner-execute-or-setid)))
        (cond
-       ((char-equal group-read ?r) (tramp-compat-octal-to-decimal "00040"))
+       ((char-equal group-read ?r) (string-to-number "00040" 8))
        ((char-equal group-read ?-) 0)
        (t (error "Fifth char `%c' must be one of `r-'" group-read)))
        (cond
-       ((char-equal group-write ?w) (tramp-compat-octal-to-decimal "00020"))
+       ((char-equal group-write ?w) (string-to-number "00020" 8))
        ((char-equal group-write ?-) 0)
        (t (error "Sixth char `%c' must be one of `w-'" group-write)))
        (cond
-       ((char-equal group-execute-or-setid ?x)
-        (tramp-compat-octal-to-decimal "00010"))
-       ((char-equal group-execute-or-setid ?S)
-        (tramp-compat-octal-to-decimal "02000"))
-       ((char-equal group-execute-or-setid ?s)
-        (tramp-compat-octal-to-decimal "02010"))
+       ((char-equal group-execute-or-setid ?x) (string-to-number "00010" 8))
+       ((char-equal group-execute-or-setid ?S) (string-to-number "02000" 8))
+       ((char-equal group-execute-or-setid ?s) (string-to-number "02010" 8))
        ((char-equal group-execute-or-setid ?-) 0)
        (t (error "Seventh char `%c' must be one of `xsS-'"
                  group-execute-or-setid)))
        (cond
-       ((char-equal other-read ?r)
-        (tramp-compat-octal-to-decimal "00004"))
+       ((char-equal other-read ?r) (string-to-number "00004" 8))
        ((char-equal other-read ?-) 0)
        (t (error "Eighth char `%c' must be one of `r-'" other-read)))
        (cond
-         ((char-equal other-write ?w) (tramp-compat-octal-to-decimal "00002"))
-        ((char-equal other-write ?-) 0)
-         (t (error "Ninth char `%c' must be one of `w-'" other-write)))
+       ((char-equal other-write ?w) (string-to-number "00002" 8))
+       ((char-equal other-write ?-) 0)
+       (t (error "Ninth char `%c' must be one of `w-'" other-write)))
        (cond
-       ((char-equal other-execute-or-sticky ?x)
-        (tramp-compat-octal-to-decimal "00001"))
-       ((char-equal other-execute-or-sticky ?T)
-        (tramp-compat-octal-to-decimal "01000"))
-       ((char-equal other-execute-or-sticky ?t)
-        (tramp-compat-octal-to-decimal "01001"))
+       ((char-equal other-execute-or-sticky ?x) (string-to-number "00001" 8))
+       ((char-equal other-execute-or-sticky ?T) (string-to-number "01000" 8))
+       ((char-equal other-execute-or-sticky ?t) (string-to-number "01001" 8))
        ((char-equal other-execute-or-sticky ?-) 0)
        (t (error "Tenth char `%c' must be one of `xtT-'"
                  other-execute-or-sticky)))))))
@@ -3935,9 +3739,10 @@ This is used internally by `tramp-file-mode-from-int'."
 
 ;;;###tramp-autoload
 (defun tramp-get-local-gid (id-format)
+  ;; `group-gid' has been introduced with Emacs 24.4.
   (if (and (fboundp 'group-gid) (equal id-format 'integer))
       (tramp-compat-funcall 'group-gid)
-    (nth 3 (tramp-compat-file-attributes "~/" id-format))))
+    (nth 3 (file-attributes "~/" id-format))))
 
 (defun tramp-get-local-locale (&optional vec)
   ;; We use key nil for local connection properties.
@@ -3979,7 +3784,7 @@ be granted."
                (tramp-get-file-property
                 vec (tramp-file-name-localname vec)
                 (concat "file-attributes-" suffix) nil)
-               (tramp-compat-file-attributes
+               (file-attributes
                 (tramp-make-tramp-file-name
                  (tramp-file-name-method vec)
                  (tramp-file-name-user vec)
@@ -4050,7 +3855,7 @@ be granted."
              (or (tramp-get-method-parameter vec 'tramp-tmpdir) "/tmp"))))
     (with-tramp-connection-property vec "tmpdir"
       (or (and (file-directory-p dir) (file-writable-p dir)
-              (tramp-file-name-handler 'file-remote-p dir 'localname))
+              (file-remote-p dir 'localname))
          (tramp-error vec 'file-error "Directory %s not accessible" dir)))
     dir))
 
@@ -4071,7 +3876,7 @@ Return the local name of the temporary file."
          (setq result nil)
        ;; This creates the file by side effect.
        (set-file-times result)
-       (set-file-modes result (tramp-compat-octal-to-decimal "0700"))))
+       (set-file-modes result (string-to-number "0700" 8))))
 
     ;; Return the local part.
     (with-parsed-tramp-file-name result nil localname)))
@@ -4087,9 +3892,6 @@ Return the local name of the temporary file."
            (remove-hook 'kill-buffer-hook
                         'tramp-delete-temp-file-function)))
 
-;;; Auto saving to a special directory:
-(defvar auto-save-file-name-transforms)
-
 (defun tramp-handle-make-auto-save-file-name ()
   "Like `make-auto-save-file-name' for Tramp files.
 Returns a file name in `tramp-auto-save-directory' for autosaving
@@ -4104,9 +3906,8 @@ this file, if that variable is non-nil."
 
   (let ((system-type 'not-windows)
        (auto-save-file-name-transforms
-        (if (and (null tramp-auto-save-directory)
-                 (boundp 'auto-save-file-name-transforms))
-            (symbol-value 'auto-save-file-name-transforms)))
+        (if (null tramp-auto-save-directory)
+            auto-save-file-name-transforms))
        (buffer-file-name
         (if (null tramp-auto-save-directory)
             buffer-file-name
@@ -4120,61 +3921,8 @@ this file, if that variable is non-nil."
               ("]" . "_r"))
             (buffer-file-name))
            tramp-auto-save-directory))))
-    ;; 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)))))
-
-(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."
-    (if (tramp-tramp-file-p (buffer-file-name))
-       ;; We cannot call `tramp-handle-make-auto-save-file-name'
-       ;; directly, because this would bypass the locking mechanism.
-       (setq ad-return-value
-             (tramp-file-name-handler 'make-auto-save-file-name))
-      ad-do-it))
-  (add-hook
-   'tramp-unload-hook
-   (lambda ()
-     (ad-remove-advice
-      'make-auto-save-file-name
-      'around 'tramp-advice-make-auto-save-file-name)
-     (ad-activate 'make-auto-save-file-name))))
-
-;; In XEmacs < 21.5, autosaved remote files have permission 0666 minus
-;; umask. This is a security threat.
-
-(defun tramp-set-auto-save-file-modes ()
-  "Set permissions of autosaved remote files to the original permissions."
-  (let ((bfn (buffer-file-name)))
-    (when (and (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)
-       (write-region "" nil buffer-auto-save-file-name))
-      ;; Permissions should be set always, because there might be an old
-      ;; auto-saved file belonging to another original file.  This could
-      ;; be a security threat.
-      (set-file-modes
-       buffer-auto-save-file-name
-       (or (file-modes bfn) (tramp-compat-octal-to-decimal "0600"))))))
-
-(unless (and (featurep 'xemacs)
-            (= emacs-major-version 21)
-            (> emacs-minor-version 4))
-  (add-hook 'auto-save-hook 'tramp-set-auto-save-file-modes)
-  (add-hook 'tramp-unload-hook
-           (lambda ()
-             (remove-hook 'auto-save-hook 'tramp-set-auto-save-file-modes))))
+    ;; Run plain `make-auto-save-file-name'.
+    (tramp-run-real-handler 'make-auto-save-file-name nil)))
 
 (defun tramp-subst-strs-in-string (alist string)
   "Replace all occurrences of the string FROM with TO in STRING.
@@ -4268,27 +4016,24 @@ Invokes `password-read' if available, `read-passwd' else."
                (tramp-check-for-regexp proc tramp-password-prompt-regexp)
                (format "%s for %s " (capitalize (match-string 1)) key))))
         ;; We suspend the timers while reading the password.
-         (stimers (and (functionp 'with-timeout-suspend)
-                      (tramp-compat-funcall 'with-timeout-suspend)))
+         (stimers (with-timeout-suspend))
         auth-info auth-passwd)
 
     (unwind-protect
        (with-parsed-tramp-file-name key nil
          (prog1
              (or
-              ;; See if auth-sources contains something useful, if
-              ;; it's bound.  `auth-source-user-or-password' is an
-              ;; obsoleted function, it has been replaced by
+              ;; See if auth-sources contains something useful.
+              ;; `auth-source-user-or-password' is an obsoleted
+              ;; function since Emacs 24.1, it has been replaced by
               ;; `auth-source-search'.
               (ignore-errors
-                (and (boundp 'auth-sources)
-                     (tramp-get-connection-property
+                (and (tramp-get-connection-property
                       v "first-password-request" nil)
                      ;; Try with Tramp's current method.
                      (if (fboundp 'auth-source-search)
                          (setq auth-info
-                               (tramp-compat-funcall
-                                'auth-source-search
+                               (auth-source-search
                                 :max 1
                                 :user (or tramp-current-user t)
                                 :host tramp-current-host
@@ -4298,21 +4043,17 @@ Invokes `password-read' if available, `read-passwd' else."
                                auth-passwd (if (functionp auth-passwd)
                                                (funcall auth-passwd)
                                              auth-passwd))
-                       (tramp-compat-funcall
-                        'auth-source-user-or-password
+                       (tramp-compat-funcall 'auth-source-user-or-password
                         "password" tramp-current-host tramp-current-method))))
               ;; Try the password cache.
-              (when (functionp 'password-read)
-                (let ((password
-                       (tramp-compat-funcall 'password-read pw-prompt key)))
-                  (tramp-compat-funcall 'password-cache-add key password)
-                  password))
+              (let ((password (password-read pw-prompt key)))
+                (password-cache-add key password)
+                password)
               ;; Else, get the password interactively.
               (read-passwd pw-prompt))
            (tramp-set-connection-property v "first-password-request" nil)))
       ;; Reenable the timers.
-      (and (functionp 'with-timeout-unsuspend)
-          (tramp-compat-funcall 'with-timeout-unsuspend stimers)))))
+      (with-timeout-unsuspend stimers))))
 
 ;;;###tramp-autoload
 (defun tramp-clear-passwd (vec)
@@ -4324,11 +4065,10 @@ Invokes `password-read' if available, `read-passwd' else."
        (tramp-dissect-file-name
        (concat
         tramp-prefix-format
-        (tramp-compat-replace-regexp-in-string
+        (replace-regexp-in-string
          (concat tramp-postfix-hop-regexp "$")
          tramp-postfix-host-format hop))))))
-  (tramp-compat-funcall
-   'password-cache-remove
+  (password-cache-remove
    (tramp-make-tramp-file-name
     (tramp-file-name-method vec)
     (tramp-file-name-user vec)
@@ -4351,24 +4091,7 @@ Invokes `password-read' if available, `read-passwd' else."
 (defun tramp-time-diff (t1 t2)
   "Return the difference between the two times, in seconds.
 T1 and T2 are time values (as returned by `current-time' for example)."
-  (cond ((and (fboundp 'subtract-time)
-             (fboundp 'float-time))
-         (tramp-compat-funcall
-         'float-time (tramp-compat-funcall 'subtract-time t1 t2)))
-       ((and (fboundp 'subtract-time)
-             (fboundp 'time-to-seconds))
-         (tramp-compat-funcall
-         'time-to-seconds (tramp-compat-funcall 'subtract-time t1 t2)))
-        ((fboundp 'itimer-time-difference)
-        (tramp-compat-funcall
-         'itimer-time-difference
-         (if (< (length t1) 3) (append t1 '(0)) t1)
-         (if (< (length t2) 3) (append t2 '(0)) t2)))
-        (t
-        (let ((time (time-subtract t1 t2)))
-          (+ (* (car time) 65536.0)
-             (cadr time)
-             (/ (or (nth 2 time) 0) 1000000.0))))))
+  (float-time (subtract-time t1 t2)))
 
 ;; Currently (as of Emacs 20.5), the function `shell-quote-argument'
 ;; does not deal well with newline characters.  Newline is replaced by
@@ -4463,7 +4186,6 @@ Only works for Bourne-like shells."
 ;; * In Emacs 21, `insert-directory' shows total number of bytes used
 ;;   by the files in that directory.  Add this here.
 ;; * Avoid screen blanking when hitting `g' in dired.  (Eli Tziperman)
-;; * abbreviate-file-name
 ;; * Better error checking.  At least whenever we see something
 ;;   strange when doing zerop, we should kill the process and start
 ;;   again.  (Greg Stark)
index fc65c0a1081afbccd2356ca2fb6a282486c3e495..64cc47e26a5244470581989ba4586a83e1efe94d 100644 (file)
@@ -6,7 +6,7 @@
 ;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
 ;; Keywords: comm, processes
 ;; Package: tramp
-;; Version: 2.2.13.25.1
+;; Version: 2.3.0-pre
 
 ;; This file is part of GNU Emacs.
 
 
 ;; In the Tramp GIT repository, the version number and the bug report
 ;; address are auto-frobbed from configure.ac, so you should edit that
-;; file and run "autoconf && ./configure" to change them.  (X)Emacs
+;; file and run "autoconf && ./configure" to change them.  Emacs
 ;; version check is defined in macro AC_EMACS_INFO of aclocal.m4;
 ;; should be changed only there.
 
 ;;;###tramp-autoload
-(defconst tramp-version "2.2.13.25.1"
+(defconst tramp-version "2.3.0-pre"
   "This version of Tramp.")
 
 ;;;###tramp-autoload
 (defconst tramp-bug-report-address "tramp-devel@gnu.org"
   "Email address to send bug reports to.")
 
-;; `locate-dominating-file' does not exist in XEmacs. But it is not used here.
-(autoload 'locate-dominating-file "files")
-(autoload 'tramp-compat-replace-regexp-in-string "tramp-compat")
-
 (defun tramp-repository-get-version ()
   "Try to return as a string the repository revision of the Tramp sources."
-  (unless (featurep 'xemacs)
-    (let ((dir (locate-dominating-file (locate-library "tramp") ".git")))
-      (when dir
-       (with-temp-buffer
-         (let ((default-directory (file-name-as-directory dir)))
-           (and (zerop
-                 (ignore-errors
-                   (call-process "git" nil '(t nil) nil "rev-parse" "HEAD")))
-                (not (zerop (buffer-size)))
-                (tramp-compat-replace-regexp-in-string
-                 "\n" "" (buffer-string)))))))))
-
-;; Check for (X)Emacs version.
-(let ((x (if (or (>= emacs-major-version 22)
-                (and (featurep 'xemacs)
-                     (= emacs-major-version 21)
-                     (>= emacs-minor-version 4)))
-            "ok"
-          (format "Tramp 2.2.13.25.1 is not fit for %s"
-                  (when (string-match "^.*$" (emacs-version))
-                    (match-string 0 (emacs-version)))))))
+  (let ((dir (locate-dominating-file (locate-library "tramp") ".git")))
+    (when dir
+      (with-temp-buffer
+       (let ((default-directory (file-name-as-directory dir)))
+         (and (zerop
+               (ignore-errors
+                 (call-process "git" nil '(t nil) nil "rev-parse" "HEAD")))
+              (not (zerop (buffer-size)))
+              (replace-regexp-in-string "\n" "" (buffer-string))))))))
+
+;; Check for Emacs version.
+(let ((x (if (>= emacs-major-version 23)
+    "ok"
+  (format "Tramp 2.3.0-pre is not fit for %s"
+         (when (string-match "^.*$" (emacs-version))
+           (match-string 0 (emacs-version)))))))
   (unless (string-match "\\`ok\\'" x) (error "%s" x)))
 
 (add-hook 'tramp-unload-hook
index bcee0882aa282b73a29f495090bb1aa285063e5d..6406f57ff63abcc2ae814054b47ead6b9d0be4e9 100644 (file)
@@ -1,4 +1,4 @@
-;;; nxml-enc.el --- XML encoding auto-detection
+;;; nxml-enc.el --- XML encoding auto-detection  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
@@ -68,7 +68,7 @@
     (and nxml-non-xml-set-auto-coding-function
         (funcall nxml-non-xml-set-auto-coding-function file-name size))))
 
-(defun nxml-set-xml-coding (file-name size)
+(defun nxml-set-xml-coding (_file-name size)
   "Function to use as `set-auto-coding-function' when file is known to be XML."
   (nxml-detect-coding-system (+ (point) (min size 1024))))
 
diff --git a/lisp/nxml/nxml-glyph.el b/lisp/nxml/nxml-glyph.el
deleted file mode 100644 (file)
index 4a51821..0000000
+++ /dev/null
@@ -1,423 +0,0 @@
-;;; nxml-glyph.el --- glyph-handling for nxml-mode
-
-;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
-
-;; Author: James Clark
-;; Keywords: wp, hypermedia, languages, XML
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; The entry point to this file is `nxml-glyph-display-string'.
-;; The current implementation is heuristic due to a lack of
-;; Emacs primitives necessary to implement it properly.  The user
-;; can tweak the heuristics using `nxml-glyph-set-functions'.
-
-;;; Code:
-
-(defconst nxml-ascii-glyph-set
-  [(#x0020 . #x007E)])
-
-(defconst nxml-latin1-glyph-set
-  [(#x0020 . #x007E)
-   (#x00A0 . #x00FF)])
-
-;; These were generated by using nxml-insert-target-repertoire-glyph-set
-;; on the TARGET[123] files in
-;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
-
-(defconst nxml-misc-fixed-1-glyph-set
-  [(#x0020 . #x007E)
-   (#x00A0 . #x00FF)
-   (#x0100 . #x017F)
-   #x018F #x0192
-   (#x0218 . #x021B)
-   #x0259
-   (#x02C6 . #x02C7)
-   (#x02D8 . #x02DD)
-   (#x0374 . #x0375)
-   #x037A #x037E
-   (#x0384 . #x038A)
-   #x038C
-   (#x038E . #x03A1)
-   (#x03A3 . #x03CE)
-   (#x0401 . #x040C)
-   (#x040E . #x044F)
-   (#x0451 . #x045C)
-   (#x045E . #x045F)
-   (#x0490 . #x0491)
-   (#x05D0 . #x05EA)
-   (#x1E02 . #x1E03)
-   (#x1E0A . #x1E0B)
-   (#x1E1E . #x1E1F)
-   (#x1E40 . #x1E41)
-   (#x1E56 . #x1E57)
-   (#x1E60 . #x1E61)
-   (#x1E6A . #x1E6B)
-   (#x1E80 . #x1E85)
-   (#x1EF2 . #x1EF3)
-   (#x2010 . #x2022)
-   #x2026 #x2030
-   (#x2039 . #x203A)
-   #x20AC #x2116 #x2122 #x2126
-   (#x215B . #x215E)
-   (#x2190 . #x2193)
-   #x2260
-   (#x2264 . #x2265)
-   (#x23BA . #x23BD)
-   (#x2409 . #x240D)
-   #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C #x2592 #x25C6 #x266A #xFFFD]
-  "Glyph set for TARGET1 glyph repertoire of misc-fixed-* font.
-This repertoire is supported for the bold and oblique fonts.")
-
-(defconst nxml-misc-fixed-2-glyph-set
-  [(#x0020 . #x007E)
-   (#x00A0 . #x00FF)
-   (#x0100 . #x017F)
-   #x018F #x0192
-   (#x01FA . #x01FF)
-   (#x0218 . #x021B)
-   #x0259
-   (#x02C6 . #x02C7)
-   #x02C9
-   (#x02D8 . #x02DD)
-   (#x0300 . #x0311)
-   (#x0374 . #x0375)
-   #x037A #x037E
-   (#x0384 . #x038A)
-   #x038C
-   (#x038E . #x03A1)
-   (#x03A3 . #x03CE)
-   #x03D1
-   (#x03D5 . #x03D6)
-   #x03F1
-   (#x0401 . #x040C)
-   (#x040E . #x044F)
-   (#x0451 . #x045C)
-   (#x045E . #x045F)
-   (#x0490 . #x0491)
-   (#x05D0 . #x05EA)
-   (#x1E02 . #x1E03)
-   (#x1E0A . #x1E0B)
-   (#x1E1E . #x1E1F)
-   (#x1E40 . #x1E41)
-   (#x1E56 . #x1E57)
-   (#x1E60 . #x1E61)
-   (#x1E6A . #x1E6B)
-   (#x1E80 . #x1E85)
-   (#x1EF2 . #x1EF3)
-   (#x2010 . #x2022)
-   #x2026 #x2030
-   (#x2032 . #x2034)
-   (#x2039 . #x203A)
-   #x203C #x203E #x2044
-   (#x2070 . #x2071)
-   (#x2074 . #x208E)
-   (#x20A3 . #x20A4)
-   #x20A7 #x20AC
-   (#x20D0 . #x20D7)
-   #x2102 #x2105 #x2113
-   (#x2115 . #x2116)
-   #x211A #x211D #x2122 #x2124 #x2126 #x212E
-   (#x215B . #x215E)
-   (#x2190 . #x2195)
-   (#x21A4 . #x21A8)
-   (#x21D0 . #x21D5)
-   (#x2200 . #x2209)
-   (#x220B . #x220C)
-   #x220F
-   (#x2211 . #x2213)
-   #x2215
-   (#x2218 . #x221A)
-   (#x221D . #x221F)
-   #x2221
-   (#x2224 . #x222B)
-   #x222E #x223C #x2243 #x2245
-   (#x2248 . #x2249)
-   #x2259
-   (#x225F . #x2262)
-   (#x2264 . #x2265)
-   (#x226A . #x226B)
-   (#x2282 . #x228B)
-   #x2295 #x2297
-   (#x22A4 . #x22A7)
-   (#x22C2 . #x22C3)
-   #x22C5 #x2300 #x2302
-   (#x2308 . #x230B)
-   #x2310
-   (#x2320 . #x2321)
-   (#x2329 . #x232A)
-   (#x23BA . #x23BD)
-   (#x2409 . #x240D)
-   #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C
-   (#x254C . #x2573)
-   (#x2580 . #x25A1)
-   (#x25AA . #x25AC)
-   (#x25B2 . #x25B3)
-   #x25BA #x25BC #x25C4 #x25C6
-   (#x25CA . #x25CB)
-   #x25CF
-   (#x25D8 . #x25D9)
-   #x25E6
-   (#x263A . #x263C)
-   #x2640 #x2642 #x2660 #x2663
-   (#x2665 . #x2666)
-   (#x266A . #x266B)
-   (#xFB01 . #xFB02)
-   #xFFFD]
-  "Glyph set for TARGET2 glyph repertoire of the misc-fixed-* fonts.
-This repertoire is supported for the following fonts:
-5x7.bdf 5x8.bdf 6x9.bdf 6x10.bdf 6x12.bdf 7x13.bdf 7x14.bdf clR6x12.bdf")
-
-(defconst nxml-misc-fixed-3-glyph-set
-  [(#x0020 . #x007E)
-   (#x00A0 . #x00FF)
-   (#x0100 . #x01FF)
-   (#x0200 . #x0220)
-   (#x0222 . #x0233)
-   (#x0250 . #x02AD)
-   (#x02B0 . #x02EE)
-   (#x0300 . #x034F)
-   (#x0360 . #x036F)
-   (#x0374 . #x0375)
-   #x037A #x037E
-   (#x0384 . #x038A)
-   #x038C
-   (#x038E . #x03A1)
-   (#x03A3 . #x03CE)
-   (#x03D0 . #x03F6)
-   (#x0400 . #x0486)
-   (#x0488 . #x04CE)
-   (#x04D0 . #x04F5)
-   (#x04F8 . #x04F9)
-   (#x0500 . #x050F)
-   (#x0531 . #x0556)
-   (#x0559 . #x055F)
-   (#x0561 . #x0587)
-   (#x0589 . #x058A)
-   (#x05B0 . #x05B9)
-   (#x05BB . #x05C4)
-   (#x05D0 . #x05EA)
-   (#x05F0 . #x05F4)
-   (#x10D0 . #x10F8)
-   #x10FB
-   (#x1E00 . #x1E9B)
-   (#x1EA0 . #x1EF9)
-   (#x1F00 . #x1F15)
-   (#x1F18 . #x1F1D)
-   (#x1F20 . #x1F45)
-   (#x1F48 . #x1F4D)
-   (#x1F50 . #x1F57)
-   #x1F59 #x1F5B #x1F5D
-   (#x1F5F . #x1F7D)
-   (#x1F80 . #x1FB4)
-   (#x1FB6 . #x1FC4)
-   (#x1FC6 . #x1FD3)
-   (#x1FD6 . #x1FDB)
-   (#x1FDD . #x1FEF)
-   (#x1FF2 . #x1FF4)
-   (#x1FF6 . #x1FFE)
-   (#x2000 . #x200A)
-   (#x2010 . #x2027)
-   (#x202F . #x2052)
-   #x2057
-   (#x205F . #x2063)
-   (#x2070 . #x2071)
-   (#x2074 . #x208E)
-   (#x20A0 . #x20B1)
-   (#x20D0 . #x20EA)
-   (#x2100 . #x213A)
-   (#x213D . #x214B)
-   (#x2153 . #x2183)
-   (#x2190 . #x21FF)
-   (#x2200 . #x22FF)
-   (#x2300 . #x23CE)
-   (#x2400 . #x2426)
-   (#x2440 . #x244A)
-   (#x2500 . #x25FF)
-   (#x2600 . #x2613)
-   (#x2616 . #x2617)
-   (#x2619 . #x267D)
-   (#x2680 . #x2689)
-   (#x27E6 . #x27EB)
-   (#x27F5 . #x27FF)
-   (#x2A00 . #x2A06)
-   #x2A1D #x2A3F #x303F
-   (#xFB00 . #xFB06)
-   (#xFB13 . #xFB17)
-   (#xFB1D . #xFB36)
-   (#xFB38 . #xFB3C)
-   #xFB3E
-   (#xFB40 . #xFB41)
-   (#xFB43 . #xFB44)
-   (#xFB46 . #xFB4F)
-   (#xFE20 . #xFE23)
-   (#xFF61 . #xFF9F)
-   #xFFFD]
-  "Glyph set for TARGET3 glyph repertoire of the misc-fixed-* fonts.
-This repertoire is supported for the following fonts:
-6x13.bdf 8x13.bdf 9x15.bdf 9x18.bdf 10x20.bdf")
-
-(defconst nxml-wgl4-glyph-set
-  [(#x0020 . #x007E)
-   (#x00A0 . #x017F)
-   #x0192
-   (#x01FA . #x01FF)
-   (#x02C6 . #x02C7)
-   #x02C9
-   (#x02D8 . #x02DB)
-   #x02DD
-   (#x0384 . #x038A)
-   #x038C
-   (#x038E . #x03A1)
-   (#x03A3 . #x03CE)
-   (#x0401 . #x040C)
-   (#x040E . #x044F)
-   (#x0451 . #x045C)
-   (#x045E . #x045F)
-   (#x0490 . #x0491)
-   (#x1E80 . #x1E85)
-   (#x1EF2 . #x1EF3)
-   (#x2013 . #x2015)
-   (#x2017 . #x201E)
-   (#x2020 . #x2022)
-   #x2026 #x2030
-   (#x2032 . #x2033)
-   (#x2039 . #x203A)
-   #x203C #x203E #x2044 #x207F
-   (#x20A3 . #x20A4)
-   #x20A7 #x20AC #x2105 #x2113 #x2116 #x2122 #x2126 #x212E
-   (#x215B . #x215E)
-   (#x2190 . #x2195)
-   #x21A8 #x2202 #x2206 #x220F
-   (#x2211 . #x2212)
-   #x2215
-   (#x2219 . #x221A)
-   (#x221E . #x221F)
-   #x2229 #x222B #x2248
-   (#x2260 . #x2261)
-   (#x2264 . #x2265)
-   #x2302 #x2310
-   (#x2320 . #x2321)
-   #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524
-   #x252C #x2534 #x253C
-   (#x2550 . #x256C)
-   #x2580 #x2584 #x2588 #x258C
-   (#x2590 . #x2593)
-   (#x25A0 . #x25A1)
-   (#x25AA . #x25AC)
-   #x25B2 #x25BA #x25BC #x25C4
-   (#x25CA . #x25CB)
-   #x25CF
-   (#x25D8 . #x25D9)
-   #x25E6
-   (#x263A . #x263C)
-   #x2640 #x2642 #x2660 #x2663
-   (#x2665 . #x2666)
-   (#x266A . #x266B)
-   (#xFB01 . #xFB02)]
-  "Glyph set corresponding to Windows Glyph List 4.")
-
-(defvar nxml-glyph-set-functions nil
-  "Abnormal hook for determining the set of glyphs in a face.
-Each function in this hook is called in turn, unless one of them
-returns non-nil.  Each function is called with a single argument
-FACE.  If it can determine the set of glyphs representable by
-FACE, it must set the variable `nxml-glyph-set' and return
-non-nil.  Otherwise, it must return nil.
-
-The constants `nxml-ascii-glyph-set', `nxml-latin1-glyph-set',
-`nxml-misc-fixed-1-glyph-set', `nxml-misc-fixed-2-glyph-set',
-`nxml-misc-fixed-3-glyph-set' and `nxml-wgl4-glyph-set' are
-predefined for use by `nxml-glyph-set-functions'.")
-
-(define-obsolete-variable-alias 'nxml-glyph-set-hook
-  'nxml-glyph-set-functions "24.3")
-
-(defvar nxml-glyph-set nil
-  "Used by `nxml-glyph-set-functions' to return set of glyphs in a FACE.
-This should dynamically bound by any function that runs
-`nxml-glyph-set-functions'.  The value must be either nil representing an
-empty set or a vector. Each member of the vector is either a single
-integer or a cons (FIRST . LAST) representing the range of integers
-from FIRST to LAST.  An integer represents a glyph with that Unicode
-code-point.  The vector must be ordered.")
-
-(defun nxml-x-set-glyph-set (face)
-  (setq nxml-glyph-set
-       (if (equal (face-attribute face :family) "misc-fixed")
-           nxml-misc-fixed-3-glyph-set
-         nxml-wgl4-glyph-set)))
-
-(defun nxml-w32-set-glyph-set (face)
-  (setq nxml-glyph-set nxml-wgl4-glyph-set))
-
-(defun nxml-window-system-set-glyph-set (face)
-  (setq nxml-glyph-set nxml-latin1-glyph-set))
-
-(defun nxml-terminal-set-glyph-set (face)
-  (setq nxml-glyph-set nxml-ascii-glyph-set))
-
-(add-hook 'nxml-glyph-set-functions
-         (or (cdr (assq window-system
-                        '((x . nxml-x-set-glyph-set)
-                          (w32 . nxml-w32-set-glyph-set)
-                          (nil . nxml-terminal-set-glyph-set))))
-             'nxml-window-system-set-glyph-set)
-         t)
-
-;;;###autoload
-(defun nxml-glyph-display-string (n face)
-  "Return a string that can display a glyph for Unicode code-point N.
-FACE gives the face that will be used for displaying the string.
-Return nil if the face cannot display a glyph for N."
-  (let ((nxml-glyph-set nil))
-    (run-hook-with-args-until-success 'nxml-glyph-set-functions face)
-    (and nxml-glyph-set
-        (nxml-glyph-set-contains-p n nxml-glyph-set)
-        (let ((ch (decode-char 'ucs n)))
-          (and ch (string ch))))))
-
-(defun nxml-glyph-set-contains-p (n v)
-  (let ((start 0)
-       (end (length v))
-       found mid mid-val mid-start-val mid-end-val)
-    (while (> end start)
-      (setq mid (+ start
-                  (/ (- end start) 2)))
-      (setq mid-val (aref v mid))
-      (if (consp mid-val)
-         (setq mid-start-val (car mid-val)
-               mid-end-val (cdr mid-val))
-       (setq mid-start-val mid-val
-             mid-end-val mid-val))
-      (cond ((and (<= mid-start-val n)
-                 (<= n mid-end-val))
-            (setq found t)
-            (setq start end))
-           ((< n mid-start-val)
-            (setq end mid))
-           (t
-            (setq start
-                  (if (eq start mid)
-                      end
-                    mid)))))
-    found))
-
-(provide 'nxml-glyph)
-
-;;; nxml-glyph.el ends here
index b81e3113efb92bc7cbf1ada9e042377e023824a0..5d24d9b313818664d94bf0150e687645fc116464 100644 (file)
@@ -1,4 +1,4 @@
-;;; nxml-maint.el --- commands for maintainers of nxml-*.el
+;;; nxml-maint.el --- commands for maintainers of nxml-*.el  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
 
 ;;; Code:
 
-;;; Generating files with Unicode char names.
-
-(require 'nxml-uchnm)
-
-(defun nxml-create-unicode-char-name-sets (file)
-  "Generate files containing char names from Unicode standard."
-  (interactive "fUnicodeData file: ")
-  (mapc (lambda (block)
-          (let ((nameset (nxml-unicode-block-char-name-set (nth 0 block))))
-            (save-excursion
-              (find-file (concat (get nameset 'nxml-char-name-set-file)
-                                 ".el"))
-              (erase-buffer)
-              (insert "(nxml-define-char-name-set '")
-              (prin1 nameset (current-buffer))
-              (insert "\n  '())\n")
-              (goto-char (- (point) 3)))))
-        nxml-unicode-blocks)
-  (save-excursion
-    (find-file file)
-    (goto-char (point-min))
-    (let ((blocks nxml-unicode-blocks)
-         code name)
-      (while (re-search-forward "^\\([0-9A-F]+\\);\\([^<;][^;]*\\);"
-                               nil
-                               t)
-       (setq code (string-to-number (match-string 1) 16))
-       (setq name (match-string 2))
-       (while (and blocks
-                   (> code (nth 2 (car blocks))))
-         (setq blocks (cdr blocks)))
-       (when (and (<= (nth 1 (car blocks)) code)
-                  (<= code (nth 2 (car blocks))))
-         (save-excursion
-           (find-file (concat (get (nxml-unicode-block-char-name-set
-                                    (nth 0 (car blocks)))
-                                   'nxml-char-name-set-file)
-                              ".el"))
-           (insert "(")
-           (prin1 name (current-buffer))
-           (insert (format " #x%04X)\n    " code))))))))
-
 ;;; Parsing target repertoire files from ucs-fonts.
 ;; This is for converting the TARGET? files in
 ;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
index 324350f591c4098f1d42c2b6bb4447bcd7225a38..edc7414bfbf1aafa9b7102ebfa5295ba287f30ab 100644 (file)
 
 ;;; Code:
 
-(when (featurep 'mucs)
-  (error "nxml-mode is not compatible with Mule-UCS"))
-
 (eval-when-compile (require 'cl-lib))
 
 (require 'xmltok)
 (require 'nxml-enc)
-(require 'nxml-glyph)
 (require 'nxml-util)
 (require 'nxml-rap)
 (require 'nxml-outln)
@@ -41,6 +37,7 @@
 ;; So we might as well just require it and silence the compiler.
 (provide 'nxml-mode)                   ; avoid recursive require
 (require 'rng-nxml)
+(require 'sgml-mode)
 
 ;;; Customization
 
@@ -55,9 +52,7 @@
 
 (defcustom nxml-char-ref-display-glyph-flag t
   "Non-nil means display glyph following character reference.
-The glyph is displayed in face `nxml-glyph'.  The abnormal hook
-`nxml-glyph-set-functions' can be used to change the characters
-for which glyphs are displayed."
+The glyph is displayed in face `nxml-glyph'."
   :group 'nxml
   :type 'boolean)
 
@@ -153,16 +148,6 @@ This is not used directly, but only via inheritance by other faces."
   "Face used to highlight text."
   :group 'nxml-faces)
 
-(defface nxml-comment-content
-  '((t (:inherit font-lock-comment-face)))
-  "Face used to highlight the content of comments."
-  :group 'nxml-faces)
-
-(defface nxml-comment-delimiter
-  '((t (:inherit font-lock-comment-delimiter-face)))
-  "Face used for the delimiters of comments, i.e., <!-- and -->."
-  :group 'nxml-faces)
-
 (defface nxml-processing-instruction-delimiter
   '((t (:inherit nxml-delimiter)))
   "Face used for the delimiters of processing instructions, i.e., <? and ?>."
@@ -280,15 +265,6 @@ This includes ths `x' in hex references."
   "Face used for the delimiters of attribute values."
   :group 'nxml-faces)
 
-(defface nxml-namespace-attribute-value
-  '((t (:inherit nxml-attribute-value)))
-  "Face used for the value of namespace attributes."
-  :group 'nxml-faces)
-
-(defface nxml-namespace-attribute-value-delimiter
-  '((t (:inherit nxml-attribute-value-delimiter)))
-  "Face used for the delimiters of namespace attribute values."
-  :group 'nxml-faces)
 
 (defface nxml-prolog-literal-delimiter
   '((t (:inherit nxml-delimited-data)))
@@ -342,22 +318,19 @@ The delimiters are <! and >."
 
 ;;; Global variables
 
-(defvar nxml-parent-document nil
+(defvar-local nxml-parent-document nil
   "The parent document for a part of a modular document.
 Use `nxml-parent-document-set' to set it.")
-(make-variable-buffer-local 'nxml-parent-document)
 (put 'nxml-parent-document 'safe-local-variable 'stringp)
 
-(defvar nxml-prolog-regions nil
+(defvar-local nxml-prolog-regions nil
   "List of regions in the prolog to be fontified.
 See the function `xmltok-forward-prolog' for more information.")
-(make-variable-buffer-local 'nxml-prolog-regions)
 
-(defvar nxml-degraded nil
+(defvar-local nxml-degraded nil
   "Non-nil if currently operating in degraded mode.
 Degraded mode is enabled when an internal error is encountered in the
 fontification or after-change functions.")
-(make-variable-buffer-local 'nxml-degraded)
 
 (defvar nxml-completion-hook nil
   "Hook run by `nxml-complete'.
@@ -375,13 +348,12 @@ one of the functions returns nil.")
 (defvar nxml-end-tag-indent-scan-distance 4000
   "Maximum distance from point to scan backwards when indenting end-tag.")
 
-(defvar nxml-char-ref-extra-display t
+(defvar-local nxml-char-ref-extra-display t
   "Non-nil means display extra information for character references.
 The extra information consists of a tooltip with the character name
 and, if `nxml-char-ref-display-glyph-flag' is non-nil, a glyph
 corresponding to the referenced character following the character
 reference.")
-(make-variable-buffer-local 'nxml-char-ref-extra-display)
 
 (defvar nxml-mode-map
   (let ((map (make-sparse-keymap)))
@@ -415,7 +387,9 @@ reference.")
 
 (defsubst nxml-set-face (start end face)
   (when (and face (< start end))
-    (font-lock-append-text-property start end 'face face)))
+    ;; Prepend, so the character reference highlighting takes precedence over
+    ;; the string highlighting applied syntactically.
+    (font-lock-prepend-text-property start end 'face face)))
 
 (defun nxml-parent-document-set (parent-document)
   "Set `nxml-parent-document' and inherit the DTD &c."
@@ -519,53 +493,39 @@ Many aspects this mode can be customized using
   ;; FIXME: Use the fact that we're parsing the document already
   ;; rather than using regex-based filtering.
   (setq-local tildify-foreach-region-function
-              (apply-partially 'tildify-foreach-ignore-environments
+              (apply-partially #'tildify-foreach-ignore-environments
                                '(("<! *--" . "-- *>") ("<" . ">"))))
-  (set (make-local-variable 'mode-line-process) '((nxml-degraded "/degraded")))
+  (setq-local mode-line-process '((nxml-degraded "/degraded")))
   ;; We'll determine the fill prefix ourselves
-  (make-local-variable 'adaptive-fill-mode)
-  (setq adaptive-fill-mode nil)
-  (make-local-variable 'forward-sexp-function)
-  (setq forward-sexp-function 'nxml-forward-balanced-item)
-  (make-local-variable 'indent-line-function)
-  (setq indent-line-function 'nxml-indent-line)
-  (make-local-variable 'fill-paragraph-function)
-  (setq fill-paragraph-function 'nxml-do-fill-paragraph)
+  (setq-local adaptive-fill-mode nil)
+  (setq-local forward-sexp-function #'nxml-forward-balanced-item)
+  (setq-local indent-line-function #'nxml-indent-line)
+  (setq-local fill-paragraph-function #'nxml-do-fill-paragraph)
   ;; Comment support
   ;; This doesn't seem to work too well;
   ;; I think we should probably roll our own nxml-comment-dwim function.
-  (make-local-variable 'comment-indent-function)
-  (setq comment-indent-function 'nxml-indent-line)
-  (make-local-variable 'comment-start)
-  (setq comment-start "<!--")
-  (make-local-variable 'comment-start-skip)
-  (setq comment-start-skip "<!--[ \t\r\n]*")
-  (make-local-variable 'comment-end)
-  (setq comment-end "-->")
-  (make-local-variable 'comment-end-skip)
-  (setq comment-end-skip "[ \t\r\n]*-->")
-  (make-local-variable 'comment-line-break-function)
-  (setq comment-line-break-function 'nxml-newline-and-indent)
-  (setq-local comment-quote-nested-function 'nxml-comment-quote-nested)
-  (use-local-map nxml-mode-map)
+  (setq-local comment-indent-function #'nxml-indent-line)
+  (setq-local comment-start "<!--")
+  (setq-local comment-start-skip "<!--[ \t\r\n]*")
+  (setq-local comment-end "-->")
+  (setq-local comment-end-skip "[ \t\r\n]*-->")
+  (setq-local comment-line-break-function #'nxml-newline-and-indent)
+  (setq-local comment-quote-nested-function #'nxml-comment-quote-nested)
   (save-excursion
     (save-restriction
       (widen)
-      (setq nxml-scan-end (copy-marker (point-min) nil))
       (with-silent-modifications
-        (nxml-clear-inside (point-min) (point-max))
        (nxml-with-invisible-motion
          (nxml-scan-prolog)))))
-  (add-hook 'completion-at-point-functions
-            #'nxml-completion-at-point-function nil t)
-  (setq-local syntax-propertize-function #'nxml-after-change)
-  (add-hook 'change-major-mode-hook 'nxml-cleanup nil t)
+  (setq-local syntax-ppss-table sgml-tag-syntax-table)
+  (setq-local syntax-propertize-function sgml-syntax-propertize-function)
+  (add-hook 'change-major-mode-hook #'nxml-cleanup nil t)
 
   ;; Emacs 23 handles the encoding attribute on the xml declaration
   ;; transparently to nxml-mode, so there is no longer a need for the below
   ;; hook. The hook also had the drawback of overriding explicit user
   ;; instruction to save as some encoding other than utf-8.
-  ;;(add-hook 'write-contents-hooks 'nxml-prepare-to-save)
+  ;;(add-hook 'write-contents-hooks #'nxml-prepare-to-save)
   (when (not (and (buffer-file-name) (file-exists-p (buffer-file-name))))
     (when (and nxml-default-buffer-file-coding-system
               (not (local-variable-p 'buffer-file-coding-system)))
@@ -575,16 +535,14 @@ Many aspects this mode can be customized using
 
   (setq font-lock-defaults
         '(nxml-font-lock-keywords
-          t    ; keywords-only; we highlight comments and strings here
+          nil  ; highlight comments and strings based on syntax-tables
           nil  ; font-lock-keywords-case-fold-search. XML is case sensitive
           nil  ; no special syntax table
-          nil  ; no automatic syntactic fontification
           (font-lock-extend-region-functions . (nxml-extend-region))
           (jit-lock-contextually . t)
           (font-lock-unfontify-region-function . nxml-unfontify-region)))
 
-  (rng-nxml-mode-init)
-  (nxml-enable-unicode-char-name-sets))
+  (with-demoted-errors (rng-nxml-mode-init)))
 
 (defun nxml-cleanup ()
   "Clean up after nxml-mode."
@@ -596,7 +554,7 @@ Many aspects this mode can be customized using
     (with-silent-modifications
       (nxml-with-invisible-motion
        (remove-text-properties (point-min) (point-max) '(face)))))
-  (remove-hook 'change-major-mode-hook 'nxml-cleanup t))
+  (remove-hook 'change-major-mode-hook #'nxml-cleanup t))
 
 (defun nxml-degrade (context err)
   (message "Internal nXML mode error in %s (%s), degrading"
@@ -604,12 +562,7 @@ Many aspects this mode can be customized using
           (error-message-string err))
   (ding)
   (setq nxml-degraded t)
-  (setq nxml-prolog-end 1)
-  (save-excursion
-    (save-restriction
-      (widen)
-      (with-silent-modifications
-       (nxml-clear-inside (point-min) (point-max))))))
+  (setq nxml-prolog-end 1))
 
 ;;; Change management
 
@@ -622,41 +575,6 @@ Many aspects this mode can be customized using
     (goto-char font-lock-beg)
     (set-mark font-lock-end)))
 
-(defun nxml-after-change (start end)
-  ;; Called via syntax-propertize-function.
-  (unless nxml-degraded
-    (nxml-with-degradation-on-error 'nxml-after-change
-      (save-restriction
-        (widen)
-        (nxml-with-invisible-motion
-         (nxml-after-change1 start end))))))
-
-(defun nxml-after-change1 (start end)
-  "After-change bookkeeping.
-Returns a cons cell containing a possibly-enlarged change region.
-You must call `nxml-extend-region' on this expanded region to obtain
-the full extent of the area needing refontification.
-
-For bookkeeping, call this function even when fontification is
-disabled."
-  ;; If the prolog might have changed, rescan the prolog.
-  (when (<= start
-            ;; Add 2 so as to include the < and following char that
-            ;; start the instance (document element), since changing
-            ;; these can change where the prolog ends.
-            (+ nxml-prolog-end 2))
-    (nxml-scan-prolog)
-    (setq start (point-min)))
-
-  (when (> end nxml-prolog-end)
-    (goto-char start)
-    (nxml-move-tag-backwards (point-min))
-    (setq start (point))
-    (setq end (max (nxml-scan-after-change start end)
-                   end)))
-
-  (nxml-debug-change "nxml-after-change1" start end))
-
 ;;; Encodings
 
 (defun nxml-insert-xml-declaration ()
@@ -982,11 +900,11 @@ faces appropriately."
        [1 -1 nxml-entity-ref-name]
        [-1 nil nxml-entity-ref-delimiter]))
 
-(put 'comment
-     'nxml-fontify-rule
-     '([nil 4 nxml-comment-delimiter]
-       [4 -3 nxml-comment-content]
-       [-3 nil nxml-comment-delimiter]))
+;; (put 'comment
+;;      'nxml-fontify-rule
+;;      '([nil 4 nxml-comment-delimiter]
+;;        [4 -3 nxml-comment-content]
+;;        [-3 nil nxml-comment-delimiter]))
 
 (put 'processing-instruction
      'nxml-fontify-rule
@@ -1018,7 +936,7 @@ faces appropriately."
      'nxml-fontify-rule
      '([nil nil nxml-attribute-local-name]))
 
-(put 'xml-declaration-attribute-value
+(put 'xml-declaration-attribute-value   ;FIXME: What is this for?
      'nxml-fontify-rule
      '([nil 1 nxml-attribute-value-delimiter]
        [1 -1 nxml-attribute-value]
@@ -1137,28 +1055,11 @@ faces appropriately."
                        'nxml-attribute-prefix
                        'nxml-attribute-colon
                        'nxml-attribute-local-name))
-  (let ((start (xmltok-attribute-value-start att))
-       (end (xmltok-attribute-value-end att))
-       (refs (xmltok-attribute-refs att))
-       (delimiter-face (if namespace-declaration
-                           'nxml-namespace-attribute-value-delimiter
-                         'nxml-attribute-value-delimiter))
-       (value-face (if namespace-declaration
-                       'nxml-namespace-attribute-value
-                     'nxml-attribute-value)))
-    (when start
-      (nxml-set-face (1- start) start delimiter-face)
-      (nxml-set-face end (1+ end) delimiter-face)
-      (while refs
-       (let* ((ref (car refs))
-              (ref-type (aref ref 0))
-              (ref-start (aref ref 1))
-              (ref-end (aref ref 2)))
-         (nxml-set-face start ref-start value-face)
-         (nxml-apply-fontify-rule ref-type ref-start ref-end)
-         (setq start ref-end))
-       (setq refs (cdr refs)))
-      (nxml-set-face start end value-face))))
+  (dolist (ref (xmltok-attribute-refs att))
+    (let* ((ref-type (aref ref 0))
+           (ref-start (aref ref 1))
+           (ref-end (aref ref 2)))
+      (nxml-apply-fontify-rule ref-type ref-start ref-end))))
 
 (defun nxml-fontify-qname (start
                           colon
@@ -1599,30 +1500,7 @@ of the line.  This expects the xmltok-* variables to be set up as by
        (t (back-to-indentation)))
   (current-column))
 
-;;; Completion
-
-(defun nxml-complete ()
-  "Perform completion on the symbol preceding point.
-
-Inserts as many characters as can be completed.  However, if not even
-one character can be completed, then a buffer with the possibilities
-is popped up and the symbol is read from the minibuffer with
-completion.  If the symbol is complete, then any characters that must
-follow the symbol are also inserted.
-
-The name space used for completion and what is treated as a symbol
-depends on the context.  The contexts in which completion is performed
-depend on `nxml-completion-hook'."
-  (interactive)
-  (unless (run-hook-with-args-until-success 'nxml-completion-hook)
-    ;; Eventually we will complete on entity names here.
-    (ding)
-    (message "Cannot complete in this context")))
-
-(defun nxml-completion-at-point-function ()
-  "Call `nxml-complete' to perform completion at point."
-  (when nxml-bind-meta-tab-to-complete-flag
-    #'nxml-complete))
+(define-obsolete-function-alias 'nxml-complete #'completion-at-point "26.1")
 
 ;;; Movement
 
@@ -1674,7 +1552,7 @@ single name.  A character reference contains a character number."
                           (t end)))))
     (nxml-scan-error
      (goto-char (cadr err))
-     (apply 'error (cddr err)))))
+     (apply #'error (cddr err)))))
 
 (defun nxml-backward-single-balanced-item ()
   (condition-case err
@@ -1696,7 +1574,7 @@ single name.  A character reference contains a character number."
                           (t xmltok-start)))))
     (nxml-scan-error
      (goto-char (cadr err))
-     (apply 'error (cddr err)))))
+     (apply #'error (cddr err)))))
 
 (defun nxml-scan-forward-within (end)
   (setq end (- end (nxml-end-delimiter-length xmltok-type)))
@@ -1880,7 +1758,7 @@ single name.  A character reference contains a character number."
          (setq arg (1- arg)))
       (nxml-scan-error
        (goto-char (cadr err))
-       (apply 'error (cddr err))))))
+       (apply #'error (cddr err))))))
 
 (defun nxml-backward-up-element (&optional arg)
   (interactive "p")
@@ -1909,7 +1787,7 @@ single name.  A character reference contains a character number."
          (setq arg (1- arg)))
       (nxml-scan-error
        (goto-char (cadr err))
-       (apply 'error (cddr err))))))
+       (apply #'error (cddr err))))))
 
 (defun nxml-down-element (&optional arg)
   "Move forward down into the content of an element.
@@ -1974,7 +1852,7 @@ Negative ARG means move backward."
          (setq arg (1- arg)))
     (nxml-scan-error
      (goto-char (cadr err))
-     (apply 'error (cddr err))))))
+     (apply #'error (cddr err))))))
 
 (defun nxml-backward-element (&optional arg)
   "Move backward over one element.
@@ -1996,7 +1874,7 @@ Negative ARG means move forward."
          (setq arg (1- arg)))
     (nxml-scan-error
      (goto-char (cadr err))
-     (apply 'error (cddr err))))))
+     (apply #'error (cddr err))))))
 
 (defun nxml-mark-token-after ()
   (interactive)
@@ -2477,116 +2355,15 @@ and attempts to find another possible way to do the markup."
 
 ;;; Character names
 
-(defvar nxml-char-name-ignore-case t)
-
-(defvar nxml-char-name-alist nil
-  "Alist of character names.
-Each member of the list has the form (NAME CODE . NAMESET),
-where NAME is a string naming a character, NAMESET is a symbol
-identifying a set of names and CODE is an integer specifying the
-Unicode scalar value of the named character.
-The NAME will only be used for completion if NAMESET has
-a non-nil `nxml-char-name-set-enabled' property.
-If NAMESET does does not have `nxml-char-name-set-defined' property,
-then it must have a `nxml-char-name-set-file' property and `load'
-will be applied to the value of this property if the nameset
-is enabled.")
-
-(defvar nxml-char-name-table (make-hash-table :test 'eq)
-  "Hash table for mapping char codes to names.
-Each key is a Unicode scalar value.
-Each value is a list of pairs of the form (NAMESET . NAME),
-where NAMESET is a symbol identifying a set of names,
-and NAME is a string naming a character.")
-
-(defvar nxml-autoload-char-name-set-list nil
-  "List of char namesets that can be autoloaded.")
-
-(defun nxml-enable-char-name-set (nameset)
-  (put nameset 'nxml-char-name-set-enabled t))
-
-(defun nxml-disable-char-name-set (nameset)
-  (put nameset 'nxml-char-name-set-enabled nil))
-
-(defun nxml-char-name-set-enabled-p (nameset)
-  (get nameset 'nxml-char-name-set-enabled))
-
-(defun nxml-autoload-char-name-set (nameset file)
-  (unless (memq nameset nxml-autoload-char-name-set-list)
-    (setq nxml-autoload-char-name-set-list
-         (cons nameset nxml-autoload-char-name-set-list)))
-  (put nameset 'nxml-char-name-set-file file))
-
-(defun nxml-define-char-name-set (nameset alist)
-  "Define a set of character names.
-NAMESET is a symbol identifying the set.
-ALIST is a list where each member has the form (NAME CODE),
-where NAME is a string naming a character and code is an
-integer giving the Unicode scalar value of the character."
-  (when (get nameset 'nxml-char-name-set-defined)
-    (error "Nameset `%s' already defined" nameset))
-  (let ((iter alist))
-    (while iter
-      (let* ((name-code (car iter))
-            (name (car name-code))
-            (code (cadr name-code)))
-       (puthash code
-                (cons (cons nameset name)
-                      (gethash code nxml-char-name-table))
-                nxml-char-name-table))
-      (setcdr (cdr (car iter)) nameset)
-      (setq iter (cdr iter))))
-  (setq nxml-char-name-alist
-       (nconc alist nxml-char-name-alist))
-  (put nameset 'nxml-char-name-set-defined t))
-
-(defun nxml-get-char-name (code)
-  (mapc 'nxml-maybe-load-char-name-set nxml-autoload-char-name-set-list)
-  (let ((names (gethash code nxml-char-name-table))
-       name)
-    (while (and names (not name))
-      (if (nxml-char-name-set-enabled-p (caar names))
-         (setq name (cdar names))
-       (setq names (cdr names))))
-    name))
-
-(defvar nxml-named-char-history nil)
-
 (defun nxml-insert-named-char (arg)
   "Insert a character using its name.
 The name is read from the minibuffer.
 Normally, inserts the character as a numeric character reference.
 With a prefix argument, inserts the character directly."
   (interactive "*P")
-  (mapc 'nxml-maybe-load-char-name-set nxml-autoload-char-name-set-list)
-  (let ((name
-        (let ((completion-ignore-case nxml-char-name-ignore-case))
-          (completing-read "Character name: "
-                           nxml-char-name-alist
-                           (lambda (member)
-                             (get (cddr member) 'nxml-char-name-set-enabled))
-                           t
-                           nil
-                           'nxml-named-char-history)))
-       (alist nxml-char-name-alist)
-       elt code)
-    (while (and alist (not code))
-      (setq elt (assoc name alist))
-      (if (get (cddr elt) 'nxml-char-name-set-enabled)
-         (setq code (cadr elt))
-       (setq alist (cdr (member elt alist)))))
+  (let ((code (read-char-by-name "Character name: ")))
     (when code
-      (insert (if arg
-                 (or (decode-char 'ucs code)
-                     (error "Character %x is not supported by Emacs"
-                            code))
-               (format "&#x%X;" code))))))
-
-(defun nxml-maybe-load-char-name-set (sym)
-  (when (and (get sym 'nxml-char-name-set-enabled)
-            (not (get sym 'nxml-char-name-set-defined))
-            (stringp (get sym 'nxml-char-name-set-file)))
-    (load (get sym 'nxml-char-name-set-file))))
+      (insert (if arg code (format "&#x%X;" code))))))
 
 (defun nxml-toggle-char-ref-extra-display (arg)
   "Toggle the display of extra information for character references."
@@ -2602,9 +2379,11 @@ With a prefix argument, inserts the character directly."
 
 (defun nxml-char-ref-display-extra (start end n)
   (when nxml-char-ref-extra-display
-    (let ((name (nxml-get-char-name n))
+    (let ((name (or (get-char-code-property n 'name)
+                    (get-char-code-property n 'old-name)))
          (glyph-string (and nxml-char-ref-display-glyph-flag
-                            (nxml-glyph-display-string n 'nxml-glyph)))
+                             (char-displayable-p n)
+                             (string n)))
          ov)
     (when (or name glyph-string)
       (setq ov (make-overlay start end nil t))
index 962160cb435cdf703b739ce27b0987a373d50757..289816a1bba8282febf01ae76ff636852b19912f 100644 (file)
@@ -1,4 +1,4 @@
-;;; nxml-outln.el --- outline support for nXML mode
+;;; nxml-outln.el --- outline support for nXML mode  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2004, 2007-2016 Free Software Foundation, Inc.
 
@@ -248,6 +248,16 @@ customize which elements are recognized as sections and headings."
   (interactive)
   (nxml-transform-subtree-outline '((hide-children . t))))
 
+;; These variables are dynamically bound.  They are use to pass information to
+;; nxml-section-tag-transform-outline-state.
+
+(defvar nxml-outline-state-transform-exceptions nil)
+(defvar nxml-target-section-pos nil)
+(defvar nxml-depth-in-target-section nil)
+(defvar nxml-outline-state-transform-alist nil)
+
+(defvar nxml-outline-display-section-tag-function nil)
+
 (defun nxml-hide-other ()
   "Hide text content other than that directly in the section containing point.
 Hide headings other than those of ancestors of that section and their
@@ -275,14 +285,6 @@ customize which elements are recognized as sections and headings."
     (nxml-transform-buffer-outline '((nil . hide-children)
                                     (t . hide-children)))))
 
-;; These variables are dynamically bound.  They are use to pass information to
-;; nxml-section-tag-transform-outline-state.
-
-(defvar nxml-outline-state-transform-exceptions nil)
-(defvar nxml-target-section-pos nil)
-(defvar nxml-depth-in-target-section nil)
-(defvar nxml-outline-state-transform-alist nil)
-
 (defun nxml-transform-buffer-outline (alist)
   (let ((nxml-target-section-pos nil)
        (nxml-depth-in-target-section 0)
@@ -350,7 +352,7 @@ customize which elements are recognized as sections and headings."
 (defun nxml-section-tag-transform-outline-state (startp
                                                 section-start-pos
                                                 &optional
-                                                heading-start-pos)
+                                                _heading-start-pos)
   (if (not startp)
       (setq nxml-depth-in-target-section
            (and nxml-depth-in-target-section
@@ -427,8 +429,6 @@ customize which elements are recognized as sections and headings."
       (nxml-outline-error
        (nxml-report-outline-error "Cannot display outline: %s" err)))))
 
-(defvar nxml-outline-display-section-tag-function nil)
-
 (defun nxml-outline-display-rest (outline-state start-tag-indent tag-qnames)
   "Display up to and including the end of the current element.
 OUTLINE-STATE can be nil, t, hide-children.  START-TAG-INDENT is the
@@ -789,7 +789,7 @@ no new overlay will be created."
 (defun nxml-end-of-heading ()
   "Move from the start of the content of the heading to the end.
 Do not move past the end of the line."
-  (let ((pos (condition-case err
+  (let ((pos (condition-case nil
                 (and (nxml-scan-element-forward (point) t)
                      xmltok-start)
               (nxml-scan-error nil))))
@@ -888,7 +888,7 @@ Point is at the end of the tag.  `xmltok-start' is the start."
                      (nxml-ensure-scan-up-to-date)
                      (let ((pos (nxml-inside-start (point))))
                        (when pos
-                         (goto-char (1- pos))
+                         (goto-char pos)
                          t))))
                   ((progn
                      (xmltok-forward)
index 41b2e8ee513d87a38334b22cee45d5710902ad0a..edf012921a9223aeb6775214da1cd10ec7dd775a 100644 (file)
@@ -1,4 +1,4 @@
-;;; nxml-parse.el --- XML parser, sharing infrastructure with nxml-mode
+;;; nxml-parse.el --- XML parser, sharing infrastructure with nxml-mode  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
index 47b23da62ada8021831a50a35e76b40c5caeadf7..e66289d042a830c9ec9f2a464eb8d5672c3fa6e9 100644 (file)
@@ -1,4 +1,4 @@
-;;; nxml-rap.el --- low-level support for random access parsing for nXML mode
+;;; nxml-rap.el --- low-level support for random access parsing for nXML mode  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003-2004, 2007-2016 Free Software Foundation, Inc.
 
@@ -46,8 +46,7 @@
 ;; look like it scales to large numbers of overlays in a buffer.
 ;;
 ;; We don't in fact track all these constructs, but only track them in
-;; some initial part of the instance. The variable `nxml-scan-end'
-;; contains the limit of where we have scanned up to for them.
+;; some initial part of the instance.
 ;;
 ;; Thus to parse some random point in the file we first ensure that we
 ;; have scanned up to that point.  Then we search backwards for a
 
 (require 'xmltok)
 (require 'nxml-util)
+(require 'sgml-mode)
 
-(defvar nxml-prolog-end nil
+(defvar-local nxml-prolog-end nil
   "Integer giving position following end of the prolog.")
-(make-variable-buffer-local 'nxml-prolog-end)
-
-(defvar nxml-scan-end nil
-  "Marker giving position up to which we have scanned.
-nxml-scan-end must be >= nxml-prolog-end.  Furthermore, nxml-scan-end
-must not be an inside position in the following sense.  A position is
-inside if the following character is a part of, but not the first
-character of, a CDATA section, comment or processing instruction.
-Furthermore all positions >= nxml-prolog-end and < nxml-scan-end that
-are inside positions must have a non-nil `nxml-inside' property whose
-value is a symbol specifying what it is inside.  Any characters with a
-non-nil `fontified' property must have position < nxml-scan-end and
-the correct face.  Dependent regions must also be established for any
-unclosed constructs starting before nxml-scan-end.
-There must be no `nxml-inside' properties after nxml-scan-end.")
-(make-variable-buffer-local 'nxml-scan-end)
 
 (defsubst nxml-get-inside (pos)
-  (get-text-property pos 'nxml-inside))
-
-(defsubst nxml-clear-inside (start end)
-  (nxml-debug-clear-inside start end)
-  (remove-text-properties start end '(nxml-inside nil)))
-
-(defsubst nxml-set-inside (start end type)
-  (nxml-debug-set-inside start end)
-  (put-text-property start end 'nxml-inside type))
+  (save-excursion (nth 8 (syntax-ppss pos))))
 
 (defun nxml-inside-end (pos)
   "Return the end of the inside region containing POS.
 Return nil if the character at POS is not inside."
-  (if (nxml-get-inside pos)
-      (or (next-single-property-change pos 'nxml-inside)
-         (point-max))
-    nil))
+  (save-excursion
+    (let ((ppss (syntax-ppss pos)))
+      (when (nth 8 ppss)
+        (goto-char (nth 8 ppss))
+        (with-syntax-table sgml-tag-syntax-table
+          (if (nth 3 ppss)
+              (progn (forward-comment 1) (point))
+            (or (scan-sexps (point) 1) (point-max))))))))
 
 (defun nxml-inside-start (pos)
   "Return the start of the inside region containing POS.
 Return nil if the character at POS is not inside."
-  (if (nxml-get-inside pos)
-      (or (previous-single-property-change (1+ pos) 'nxml-inside)
-         (point-min))
-    nil))
+  (save-excursion (nth 8 (syntax-ppss pos))))
 
 ;;; Change management
 
-(defun nxml-scan-after-change (start end)
-  "Restore `nxml-scan-end' invariants after a change.
-The change happened between START and END.
-Return position after which lexical state is unchanged.
-END must be > `nxml-prolog-end'.  START must be outside
-any “inside” regions and at the beginning of a token."
-  (if (>= start nxml-scan-end)
-      nxml-scan-end
-    (let ((inside-remove-start start)
-         xmltok-errors)
-      (while (or (when (xmltok-forward-special (min end nxml-scan-end))
-                  (when (memq xmltok-type
-                              '(comment
-                                cdata-section
-                                processing-instruction))
-                    (nxml-clear-inside inside-remove-start
-                                       (1+ xmltok-start))
-                    (nxml-set-inside (1+ xmltok-start)
-                                     (point)
-                                     xmltok-type)
-                    (setq inside-remove-start (point)))
-                  (if (< (point) (min end nxml-scan-end))
-                      t
-                    (setq end (point))
-                    nil))
-                ;; The end of the change was inside but is now outside.
-                ;; Imagine something really weird like
-                ;; <![CDATA[foo <!-- bar ]]> <![CDATA[ stuff --> <!-- ]]> -->
-                ;; and suppose we deleted "<![CDATA[f"
-                (let ((inside-end (nxml-inside-end end)))
-                  (when inside-end
-                    (setq end inside-end)
-                    t))))
-      (nxml-clear-inside inside-remove-start end))
-    (when (> end nxml-scan-end)
-      (set-marker nxml-scan-end end))
-    end))
-
 ;; n-s-p only called from nxml-mode.el, where this variable is defined.
 (defvar nxml-prolog-regions)
 
@@ -169,10 +108,7 @@ any “inside” regions and at the beginning of a token."
   (let (xmltok-dtd
        xmltok-errors)
     (setq nxml-prolog-regions (xmltok-forward-prolog))
-    (setq nxml-prolog-end (point))
-    (nxml-clear-inside (point-min) nxml-prolog-end))
-  (when (< nxml-scan-end nxml-prolog-end)
-    (set-marker nxml-scan-end nxml-prolog-end)))
+    (setq nxml-prolog-end (point))))
 
 
 ;;; Random access parsing
@@ -223,14 +159,7 @@ Sets variables like `nxml-token-after'."
 
 (defun nxml-tokenize-forward ()
   (let (xmltok-errors)
-    (when (and (xmltok-forward)
-              (> (point) nxml-scan-end))
-      (cond ((memq xmltok-type '(comment
-                                cdata-section
-                                processing-instruction))
-            (with-silent-modifications
-              (nxml-set-inside (1+ xmltok-start) (point) xmltok-type))))
-      (set-marker nxml-scan-end (point)))
+    (xmltok-forward)
     xmltok-type))
 
 (defun nxml-move-tag-backwards (bound)
@@ -253,32 +182,12 @@ As a precondition, point must be >= BOUND."
 Leave point unmoved if it is not inside anything special."
   (let ((start (nxml-inside-start (point))))
     (when start
-      (goto-char (1- start))
+      (goto-char start)
       (when (nxml-get-inside (point))
-       (error "Char before inside-start at %s had nxml-inside property %s"
-              (point)
-              (nxml-get-inside (point)))))))
+       (error "Char before inside-start at %s is still \"inside\"" (point))))))
 
 (defun nxml-ensure-scan-up-to-date ()
-  (let ((pos (point)))
-    (when (< nxml-scan-end pos)
-      (save-excursion
-       (goto-char nxml-scan-end)
-       (let (xmltok-errors)
-         (while (when (xmltok-forward-special pos)
-                  (when (memq xmltok-type
-                              '(comment
-                                processing-instruction
-                                cdata-section))
-                    (with-silent-modifications
-                      (nxml-set-inside (1+ xmltok-start)
-                                       (point)
-                                       xmltok-type)))
-                  (if (< (point) pos)
-                      t
-                    (setq pos (point))
-                    nil)))
-         (set-marker nxml-scan-end pos))))))
+  (syntax-propertize (point)))
 
 ;;; Element scanning
 
diff --git a/lisp/nxml/nxml-uchnm.el b/lisp/nxml/nxml-uchnm.el
deleted file mode 100644 (file)
index 7d7d785..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-;;; nxml-uchnm.el --- support for Unicode standard cha names in nxml-mode
-
-;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
-
-;; Author: James Clark
-;; Keywords: wp, hypermedia, languages, XML
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This enables the use of the character names defined in the Unicode
-;; Standard.  The use of the names can be controlled on a per-block
-;; basis, so as both to reduce memory usage and loading time,
-;; and to make completion work better.
-
-;;; Code:
-
-(require 'nxml-mode)
-
-(defconst nxml-unicode-blocks
-  '(("Basic Latin" #x0000 #x007F)
-    ("Latin-1 Supplement" #x0080 #x00FF)
-    ("Latin Extended-A" #x0100 #x017F)
-    ("Latin Extended-B" #x0180 #x024F)
-    ("IPA Extensions" #x0250 #x02AF)
-    ("Spacing Modifier Letters" #x02B0 #x02FF)
-    ("Combining Diacritical Marks" #x0300 #x036F)
-    ("Greek and Coptic" #x0370 #x03FF)
-    ("Cyrillic" #x0400 #x04FF)
-    ("Cyrillic Supplementary" #x0500 #x052F)
-    ("Armenian" #x0530 #x058F)
-    ("Hebrew" #x0590 #x05FF)
-    ("Arabic" #x0600 #x06FF)
-    ("Syriac" #x0700 #x074F)
-    ("Thaana" #x0780 #x07BF)
-    ("Devanagari" #x0900 #x097F)
-    ("Bengali" #x0980 #x09FF)
-    ("Gurmukhi" #x0A00 #x0A7F)
-    ("Gujarati" #x0A80 #x0AFF)
-    ("Oriya" #x0B00 #x0B7F)
-    ("Tamil" #x0B80 #x0BFF)
-    ("Telugu" #x0C00 #x0C7F)
-    ("Kannada" #x0C80 #x0CFF)
-    ("Malayalam" #x0D00 #x0D7F)
-    ("Sinhala" #x0D80 #x0DFF)
-    ("Thai" #x0E00 #x0E7F)
-    ("Lao" #x0E80 #x0EFF)
-    ("Tibetan" #x0F00 #x0FFF)
-    ("Myanmar" #x1000 #x109F)
-    ("Georgian" #x10A0 #x10FF)
-    ("Hangul Jamo" #x1100 #x11FF)
-    ("Ethiopic" #x1200 #x137F)
-    ("Cherokee" #x13A0 #x13FF)
-    ("Unified Canadian Aboriginal Syllabics" #x1400 #x167F)
-    ("Ogham" #x1680 #x169F)
-    ("Runic" #x16A0 #x16FF)
-    ("Tagalog" #x1700 #x171F)
-    ("Hanunoo" #x1720 #x173F)
-    ("Buhid" #x1740 #x175F)
-    ("Tagbanwa" #x1760 #x177F)
-    ("Khmer" #x1780 #x17FF)
-    ("Mongolian" #x1800 #x18AF)
-    ("Latin Extended Additional" #x1E00 #x1EFF)
-    ("Greek Extended" #x1F00 #x1FFF)
-    ("General Punctuation" #x2000 #x206F)
-    ("Superscripts and Subscripts" #x2070 #x209F)
-    ("Currency Symbols" #x20A0 #x20CF)
-    ("Combining Diacritical Marks for Symbols" #x20D0 #x20FF)
-    ("Letterlike Symbols" #x2100 #x214F)
-    ("Number Forms" #x2150 #x218F)
-    ("Arrows" #x2190 #x21FF)
-    ("Mathematical Operators" #x2200 #x22FF)
-    ("Miscellaneous Technical" #x2300 #x23FF)
-    ("Control Pictures" #x2400 #x243F)
-    ("Optical Character Recognition" #x2440 #x245F)
-    ("Enclosed Alphanumerics" #x2460 #x24FF)
-    ("Box Drawing" #x2500 #x257F)
-    ("Block Elements" #x2580 #x259F)
-    ("Geometric Shapes" #x25A0 #x25FF)
-    ("Miscellaneous Symbols" #x2600 #x26FF)
-    ("Dingbats" #x2700 #x27BF)
-    ("Miscellaneous Mathematical Symbols-A" #x27C0 #x27EF)
-    ("Supplemental Arrows-A" #x27F0 #x27FF)
-    ("Braille Patterns" #x2800 #x28FF)
-    ("Supplemental Arrows-B" #x2900 #x297F)
-    ("Miscellaneous Mathematical Symbols-B" #x2980 #x29FF)
-    ("Supplemental Mathematical Operators" #x2A00 #x2AFF)
-    ("CJK Radicals Supplement" #x2E80 #x2EFF)
-    ("Kangxi Radicals" #x2F00 #x2FDF)
-    ("Ideographic Description Characters" #x2FF0 #x2FFF)
-    ("CJK Symbols and Punctuation" #x3000 #x303F)
-    ("Hiragana" #x3040 #x309F)
-    ("Katakana" #x30A0 #x30FF)
-    ("Bopomofo" #x3100 #x312F)
-    ("Hangul Compatibility Jamo" #x3130 #x318F)
-    ("Kanbun" #x3190 #x319F)
-    ("Bopomofo Extended" #x31A0 #x31BF)
-    ("Katakana Phonetic Extensions" #x31F0 #x31FF)
-    ("Enclosed CJK Letters and Months" #x3200 #x32FF)
-    ("CJK Compatibility" #x3300 #x33FF)
-    ("CJK Unified Ideographs Extension A" #x3400 #x4DBF)
-    ;;("CJK Unified Ideographs" #x4E00 #x9FFF)
-    ("Yi Syllables" #xA000 #xA48F)
-    ("Yi Radicals" #xA490 #xA4CF)
-    ;;("Hangul Syllables" #xAC00 #xD7AF)
-    ;;("High Surrogates" #xD800 #xDB7F)
-    ;;("High Private Use Surrogates" #xDB80 #xDBFF)
-    ;;("Low Surrogates" #xDC00 #xDFFF)
-    ;;("Private Use Area" #xE000 #xF8FF)
-    ;;("CJK Compatibility Ideographs" #xF900 #xFAFF)
-    ("Alphabetic Presentation Forms" #xFB00 #xFB4F)
-    ("Arabic Presentation Forms-A" #xFB50 #xFDFF)
-    ("Variation Selectors" #xFE00 #xFE0F)
-    ("Combining Half Marks" #xFE20 #xFE2F)
-    ("CJK Compatibility Forms" #xFE30 #xFE4F)
-    ("Small Form Variants" #xFE50 #xFE6F)
-    ("Arabic Presentation Forms-B" #xFE70 #xFEFF)
-    ("Halfwidth and Fullwidth Forms" #xFF00 #xFFEF)
-    ("Specials" #xFFF0 #xFFFF)
-    ("Old Italic" #x10300 #x1032F)
-    ("Gothic" #x10330 #x1034F)
-    ("Deseret" #x10400 #x1044F)
-    ("Byzantine Musical Symbols" #x1D000 #x1D0FF)
-    ("Musical Symbols" #x1D100 #x1D1FF)
-    ("Mathematical Alphanumeric Symbols" #x1D400 #x1D7FF)
-    ;;("CJK Unified Ideographs Extension B" #x20000 #x2A6DF)
-    ;;("CJK Compatibility Ideographs Supplement" #x2F800 #x2FA1F)
-    ("Tags" #xE0000 #xE007F)
-    ;;("Supplementary Private Use Area-A" #xF0000 #xFFFFF)
-    ;;("Supplementary Private Use Area-B" #x100000 #x10FFFF)
-    )
-  "List of Unicode blocks.
-For each block there is a list (NAME FIRST LAST), where
-NAME is a string giving the official name of the block,
-FIRST is the first code-point and LAST is the last code-point.
-Blocks containing only characters with algorithmic names or no names
-are omitted.")
-
-(defun nxml-unicode-block-char-name-set (name)
-  "Return a symbol for a block whose official Unicode name is NAME.
-The symbol is generated by downcasing and replacing each space
-by a hyphen."
-  (intern (replace-regexp-in-string " " "-" (downcase name))))
-
-;; This is intended to be a superset of the coverage
-;; of existing standard entity sets.
-(defvar nxml-enabled-unicode-blocks-default
-  '(basic-latin
-    latin-1-supplement
-    latin-extended-a
-    latin-extended-b
-    ipa-extensions
-    spacing-modifier-letters
-    combining-diacritical-marks
-    greek-and-coptic
-    cyrillic
-    general-punctuation
-    superscripts-and-subscripts
-    currency-symbols
-    combining-diacritical-marks-for-symbols
-    letterlike-symbols
-    number-forms
-    arrows
-    mathematical-operators
-    miscellaneous-technical
-    control-pictures
-    optical-character-recognition
-    enclosed-alphanumerics
-    box-drawing
-    block-elements
-    geometric-shapes
-    miscellaneous-symbols
-    dingbats
-    miscellaneous-mathematical-symbols-a
-    supplemental-arrows-a
-    supplemental-arrows-b
-    miscellaneous-mathematical-symbols-b
-    supplemental-mathematical-operators
-    cjk-symbols-and-punctuation
-    alphabetic-presentation-forms
-    variation-selectors
-    small-form-variants
-    specials
-    mathematical-alphanumeric-symbols)
-  "Default value for `nxml-enabled-unicode-blocks'.")
-
-(mapc (lambda (block)
-        (nxml-autoload-char-name-set
-         (nxml-unicode-block-char-name-set (car block))
-         (expand-file-name
-          (format "nxml/%05X-%05X"
-                  (nth 1 block)
-                  (nth 2 block))
-          data-directory)))
-      nxml-unicode-blocks)
-
-;; Internal flag to control whether customize reloads the character tables.
-;; Should be set the first time the
-(defvar nxml-internal-unicode-char-name-sets-enabled nil)
-
-(defcustom nxml-enabled-unicode-blocks nxml-enabled-unicode-blocks-default
-  "List of Unicode blocks for which Unicode character names are enabled.
-Each block is identified by a symbol derived from the name
-of the block by downcasing and replacing each space by a hyphen."
-  :group 'nxml
-  :set (lambda (sym value)
-        (set-default 'nxml-enabled-unicode-blocks value)
-        (when nxml-internal-unicode-char-name-sets-enabled
-          (nxml-enable-unicode-char-name-sets)))
-  :type (cons 'set
-             (mapcar (lambda (block)
-                       `(const :tag ,(format "%s (%04X-%04X)"
-                                             (nth 0 block)
-                                             (nth 1 block)
-                                             (nth 2 block))
-                               ,(nxml-unicode-block-char-name-set
-                                 (nth 0 block))))
-                     nxml-unicode-blocks)))
-
-;;;###autoload
-(defun nxml-enable-unicode-char-name-sets ()
-  "Enable the use of Unicode standard names for characters.
-The Unicode blocks for which names are enabled is controlled by
-the variable `nxml-enabled-unicode-blocks'."
-  (interactive)
-  (setq nxml-internal-unicode-char-name-sets-enabled t)
-  (mapc (lambda (block)
-          (nxml-disable-char-name-set
-           (nxml-unicode-block-char-name-set (car block))))
-        nxml-unicode-blocks)
-  (mapc (lambda (nameset)
-          (nxml-enable-char-name-set nameset))
-        nxml-enabled-unicode-blocks))
-
-(provide 'nxml-uchnm)
-
-;;; nxml-uchnm.el ends here
index 14b887ea085b11d8567396cbf00827568407df16..282d4952bf75bc3c18f2667c68dd5ae5fabe8d5e 100644 (file)
     `(nxml-debug "%s: %S" ,name
                 (buffer-substring-no-properties ,start ,end))))
 
-(defmacro nxml-debug-set-inside (start end)
-  (when nxml-debug
-    `(let ((overlay (make-overlay ,start ,end)))
-       (overlay-put overlay 'face '(:background "red"))
-       (overlay-put overlay 'nxml-inside-debug t)
-       (nxml-debug-change "nxml-set-inside" ,start ,end))))
-
-(defmacro nxml-debug-clear-inside (start end)
-  (when nxml-debug
-    `(cl-loop for overlay in (overlays-in ,start ,end)
-           if (overlay-get overlay 'nxml-inside-debug)
-           do (delete-overlay overlay)
-           finally (nxml-debug-change "nxml-clear-inside" ,start ,end))))
-
 (defun nxml-make-namespace (str)
   "Return a symbol for the namespace URI STR.
 STR must be a string.  If STR is the empty string, return nil.
index 39aee9780ff658fa4cd8613fa1d6391144ed4d89..ed88dfa98e96b3b5554e4e650530fb1852237108 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-cmpct.el --- parsing of RELAX NG Compact Syntax schemas
+;;; rng-cmpct.el --- parsing of RELAX NG Compact Syntax schemas  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
@@ -674,13 +674,7 @@ the primary expression."
      (substring rng-c-current-token n (- n)))))
 
 (defun rng-c-fix-escaped-newlines (str)
-  (let ((pos 0))
-    (while (progn
-            (let ((n (string-match "\C-@" str pos)))
-              (and n
-                   (aset str n ?\n)
-                   (setq pos (1+ n)))))))
-  str)
+  (subst-char-in-string ?\C-@ ?\n str))
 
 (defun rng-c-parse-identifier-or-keyword ()
   (cond ((rng-c-current-token-ncname-p)
index 07166e38feab207f29915ea5fa81e6294026b65f..a3cb8bc6aa50de369ec2fdd4002e1c80603a944a 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-dt.el --- datatype library interface for RELAX NG
+;;; rng-dt.el --- datatype library interface for RELAX NG  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
@@ -57,7 +57,7 @@ a datatype library.")
        (t
         (rng-dt-error "There is no built-in datatype %s" name))))
 
-(put (rng-make-datatypes-uri "") 'rng-dt-compile 'rng-dt-builtin-compile)
+(put (rng-make-datatypes-uri "") 'rng-dt-compile #'rng-dt-builtin-compile)
 
 (provide 'rng-dt)
 
index 553d8ca359d8cda9a2781a3c354d5ad20472e19f..376e9169d375cd934e342586006f7d4e18fd1fa5 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-loc.el --- locate the schema to use for validation
+;;; rng-loc.el --- Locate the schema to use for validation  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
 (require 'rng-util)
 (require 'xmltok)
 
-(defvar rng-current-schema-file-name nil
+(defvar-local rng-current-schema-file-name nil
   "Filename of schema being used for current buffer.
 It is nil if using a vacuous schema.")
-(make-variable-buffer-local 'rng-current-schema-file-name)
 
 (defvar rng-schema-locating-files-default
   (list "schemas.xml" (expand-file-name "schema/schemas.xml" data-directory))
@@ -233,11 +232,11 @@ or nil."
                                 rules))))))))
     best-so-far))
 
-(put 'documentElement 'rng-rule-matcher 'rng-match-document-element-rule)
-(put 'namespace 'rng-rule-matcher 'rng-match-namespace-rule)
-(put 'uri 'rng-rule-matcher 'rng-match-uri-rule)
-(put 'transformURI 'rng-rule-matcher 'rng-match-transform-uri-rule)
-(put 'default 'rng-rule-matcher 'rng-match-default-rule)
+(put 'documentElement 'rng-rule-matcher #'rng-match-document-element-rule)
+(put 'namespace 'rng-rule-matcher #'rng-match-namespace-rule)
+(put 'uri 'rng-rule-matcher #'rng-match-uri-rule)
+(put 'transformURI 'rng-rule-matcher #'rng-match-transform-uri-rule)
+(put 'default 'rng-rule-matcher #'rng-match-default-rule)
 
 (defun rng-match-document-element-rule (props)
   (let ((document-element (rng-document-element))
index 165ca8930a4bea1764847d0bc86e4d6752e5be11..32a041e0c1775db8203e8dbb3553722ec8032874 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-maint.el --- commands for RELAX NG maintainers
+;;; rng-maint.el --- commands for RELAX NG maintainers  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
index df9c01925579ed0811bbd75f18e15bcb2bdaca42..d2b629e8d83350e749feb70fed9222d289f2d7b4 100644 (file)
@@ -56,9 +56,8 @@ Used to detect invalid recursive references.")
 ;;; Inline functions
 
 (defsubst rng-update-match-state (new-state)
-  (if (and (eq new-state rng-not-allowed-ipattern)
-          (not (eq rng-match-state rng-not-allowed-ipattern)))
-      nil
+  (if (eq new-state rng-not-allowed-ipattern)
+      (eq rng-match-state rng-not-allowed-ipattern)
     (setq rng-match-state new-state)
     t))
 
index fe90dffb555967f8746f77dd4fa0eb127cfe19d2..954a1eb959967723baf42b7e0e39c276e1e4d67b 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-nxml.el --- make nxml-mode take advantage of rng-validate-mode
+;;; rng-nxml.el --- make nxml-mode take advantage of rng-validate-mode  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
@@ -33,6 +33,7 @@
 (require 'rng-valid)
 (require 'nxml-mode)
 (require 'rng-loc)
+(require 'sgml-mode)
 
 (defcustom rng-nxml-auto-validate-flag t
   "Non-nil means automatically turn on validation with nxml-mode."
@@ -65,6 +66,9 @@ Complete on start-tag names regardless.")
     ["Validation" rng-validate-mode
      :style toggle
      :selected rng-validate-mode]
+    ["Electric Pairs" sgml-electric-tag-pair-mode
+     :style toggle
+     :selected sgml-electric-tag-pair-mode]
     "---"
     ("Set Schema"
      ["Automatically" rng-auto-set-schema]
@@ -107,25 +111,15 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil."
                'append)
   (cond (rng-nxml-auto-validate-flag
         (rng-validate-mode 1)
-        (add-hook 'nxml-completion-hook 'rng-complete nil t)
-        (add-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p nil t))
+        (add-hook 'completion-at-point-functions #'rng-completion-at-point nil t)
+        (add-hook 'nxml-in-mixed-content-hook #'rng-in-mixed-content-p nil t))
        (t
         (rng-validate-mode 0)
-        (remove-hook 'nxml-completion-hook 'rng-complete t)
-        (remove-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p t))))
-
-(defvar rng-tag-history nil)
-(defvar rng-attribute-name-history nil)
-(defvar rng-attribute-value-history nil)
-
-(defvar rng-complete-target-names nil)
-(defvar rng-complete-name-attribute-flag nil)
-(defvar rng-complete-extra-strings nil)
+        (remove-hook 'completion-at-point-functions #'rng-completion-at-point t)
+        (remove-hook 'nxml-in-mixed-content-hook #'rng-in-mixed-content-p t))))
 
-(defun rng-complete ()
-  "Complete the string before point using the current schema.
-Return non-nil if in a context it understands."
-  (interactive)
+(defun rng-completion-at-point ()
+  "Return completion data for the string before point using the current schema."
   (and rng-validate-mode
        (let ((lt-pos (save-excursion (search-backward "<" nil t)))
             xmltok-dtd)
@@ -145,53 +139,48 @@ Return non-nil if in a context it understands."
    t))
 
 (defun rng-complete-tag (lt-pos)
-  (let (rng-complete-extra-strings)
-    (when (and (= lt-pos (1- (point)))
-              rng-complete-end-tags-after-<
-              rng-open-elements
-              (not (eq (car rng-open-elements) t))
-              (or rng-collecting-text
-                  (rng-match-save
-                    (rng-match-end-tag))))
-      (setq rng-complete-extra-strings
-           (cons (concat "/"
-                         (if (caar rng-open-elements)
-                             (concat (caar rng-open-elements)
-                                     ":"
-                                     (cdar rng-open-elements))
-                           (cdar rng-open-elements)))
-                 rng-complete-extra-strings)))
+  (let ((extra-strings
+         (when (and (= lt-pos (1- (point)))
+                    rng-complete-end-tags-after-<
+                    rng-open-elements
+                    (not (eq (car rng-open-elements) t))
+                    (or rng-collecting-text
+                        (rng-match-save
+                          (rng-match-end-tag))))
+           (list (concat "/"
+                         (if (caar rng-open-elements)
+                             (concat (caar rng-open-elements)
+                                     ":"
+                                     (cdar rng-open-elements))
+                           (cdar rng-open-elements)))))))
     (when (save-excursion
            (re-search-backward rng-in-start-tag-name-regex
                                lt-pos
                                t))
       (and rng-collecting-text (rng-flush-text))
-      (let ((completion
-            (let ((rng-complete-target-names
-                   (rng-match-possible-start-tag-names))
-                  (rng-complete-name-attribute-flag nil))
-              (rng-complete-before-point (1+ lt-pos)
-                                         'rng-complete-qname-function
-                                         "Tag: "
-                                         nil
-                                         'rng-tag-history)))
-           name)
-       (when completion
-         (cond ((rng-qname-p completion)
-                (setq name (rng-expand-qname completion
-                                             t
-                                             'rng-start-tag-expand-recover))
-                (when (and name
-                           (rng-match-start-tag-open name)
-                           (or (not (rng-match-start-tag-close))
-                               ;; need a namespace decl on the root element
-                               (and (car name)
-                                    (not rng-open-elements))))
-                  ;; attributes are required
-                  (insert " ")))
-               ((member completion rng-complete-extra-strings)
-                (insert ">")))))
-      t)))
+      (let ((target-names (rng-match-possible-start-tag-names)))
+        `(,(1+ lt-pos)
+          ,(save-excursion (skip-chars-forward "[[:alnum:]_.-:]") (point))
+          ,(apply-partially #'rng-complete-qname-function
+                            target-names nil extra-strings)
+          :exit-function
+          ,(lambda (completion status)
+             (cond
+              ((not (eq status 'finished)) nil)
+              ((rng-qname-p completion)
+               (let ((name (rng-expand-qname completion
+                                             t
+                                             #'rng-start-tag-expand-recover)))
+                 (when (and name
+                            (rng-match-start-tag-open name)
+                            (or (not (rng-match-start-tag-close))
+                                ;; need a namespace decl on the root element
+                                (and (car name)
+                                     (not rng-open-elements))))
+                   ;; attributes are required
+                   (insert " "))))
+              ((member completion extra-strings)
+               (insert ">")))))))))
 
 (defconst rng-in-end-tag-name-regex
   (replace-regexp-in-string
@@ -216,29 +205,18 @@ Return non-nil if in a context it understands."
                      (concat (caar rng-open-elements)
                              ":"
                              (cdar rng-open-elements))
-                   (cdar rng-open-elements)))
-                (end-tag-name
-                 (buffer-substring-no-properties (+ (match-beginning 0) 2)
-                                                 (point))))
-            (cond ((or (> (length end-tag-name)
-                          (length start-tag-name))
-                       (not (string= (substring start-tag-name
-                                                0
-                                                (length end-tag-name))
-                                     end-tag-name)))
-                   (message "Expected end-tag %s"
-                            (rng-quote-string
-                             (concat "</" start-tag-name ">")))
-                   (ding))
-                  (t
-                   (delete-region (- (point) (length end-tag-name))
-                                  (point))
-                   (insert start-tag-name ">")
-                   (when (not (or rng-collecting-text
-                                  (rng-match-end-tag)))
-                     (message "Element %s is incomplete"
-                              (rng-quote-string start-tag-name))))))))
-    t))
+                   (cdar rng-open-elements))))
+             `(,(+ (match-beginning 0) 2)
+               ,(save-excursion (skip-chars-forward "[[:alnum:]_.-:]") (point))
+               ,(list start-tag-name)   ;Sole completion candidate.
+               :exit-function
+               ,(lambda (_completion status)
+                  (when (eq status 'finished)
+                    (unless (eq (char-after) ?>) (insert ">"))
+                    (when (not (or rng-collecting-text
+                                   (rng-match-end-tag)))
+                      (message "Element \"%s\" is incomplete"
+                               start-tag-name))))))))))
 
 (defconst rng-in-attribute-regex
   (replace-regexp-in-string
@@ -260,22 +238,24 @@ Return non-nil if in a context it understands."
          rng-undeclared-prefixes)
       (and (rng-adjust-state-for-attribute lt-pos
                                           attribute-start)
-          (let ((rng-complete-target-names
+          (let ((target-names
                  (rng-match-possible-attribute-names))
-                (rng-complete-extra-strings
+                (extra-strings
                  (mapcar (lambda (prefix)
                            (if prefix
                                (concat "xmlns:" prefix)
                              "xmlns"))
-                         rng-undeclared-prefixes))
-                (rng-complete-name-attribute-flag t))
-            (rng-complete-before-point attribute-start
-                                       'rng-complete-qname-function
-                                       "Attribute: "
-                                       nil
-                                       'rng-attribute-name-history))
-          (insert "=\"")))
-    t))
+                         rng-undeclared-prefixes)))
+             `(,attribute-start
+               ,(save-excursion (skip-chars-forward "[[:alnum:]_.-:]") (point))
+               ,(apply-partially #'rng-complete-qname-function
+                                 target-names t extra-strings)
+               :exit-function
+               ,(lambda (_completion status)
+                  (when (and (eq status 'finished)
+                             (not (looking-at "=")))
+                    (insert "=\"\"")
+                    (forward-char -1)))))))))
 
 (defconst rng-in-attribute-value-regex
   (replace-regexp-in-string
@@ -292,43 +272,40 @@ Return non-nil if in a context it understands."
 (defun rng-complete-attribute-value (lt-pos)
   (when (save-excursion
          (re-search-backward rng-in-attribute-value-regex lt-pos t))
-    (let ((name-start (match-beginning 1))
-         (name-end (match-end 1))
-         (colon (match-beginning 2))
-         (value-start (1+ (match-beginning 3))))
+    (let* ((name-start (match-beginning 1))
+           (name-end (match-end 1))
+           (colon (match-beginning 2))
+           (value-start (1+ (match-beginning 3)))
+           (exit-function
+            (lambda (_completion status)
+              (when (eq status 'finished)
+                (let ((delim (char-before value-start)))
+                  (unless (eq (char-after) delim) (insert delim)))))))
       (and (rng-adjust-state-for-attribute lt-pos
                                           name-start)
           (if (string= (buffer-substring-no-properties name-start
                                                        (or colon name-end))
                        "xmlns")
-              (rng-complete-before-point
-               value-start
-               (rng-strings-to-completion-alist
-                (rng-possible-namespace-uris
-                 (and colon
-                      (buffer-substring-no-properties (1+ colon) name-end))))
-               "Namespace URI: "
-               nil
-               'rng-namespace-uri-history)
+               `(,value-start ,(point)
+                 ,(rng-strings-to-completion-table
+                   (rng-possible-namespace-uris
+                    (and colon
+                         (buffer-substring-no-properties (1+ colon) name-end))))
+                 :exit-function ,exit-function)
             (rng-adjust-state-for-attribute-value name-start
                                                   colon
                                                   name-end)
-            (rng-complete-before-point
-             value-start
-             (rng-strings-to-completion-alist
-              (rng-match-possible-value-strings))
-             "Value: "
-             nil
-             'rng-attribute-value-history))
-          (insert (char-before value-start))))
-    t))
+             `(,value-start ,(point)
+               ,(rng-strings-to-completion-table
+                 (rng-match-possible-value-strings))
+               :exit-function ,exit-function))))))
 
 (defun rng-possible-namespace-uris (prefix)
   (let ((ns (if prefix (nxml-ns-get-prefix prefix)
              (nxml-ns-get-default))))
     (if (and ns (memq prefix (nxml-ns-changed-prefixes)))
        (list (nxml-namespace-name ns))
-      (mapcar 'nxml-namespace-name
+      (mapcar #'nxml-namespace-name
              (delq nxml-xml-namespace-uri
                    (rng-match-possible-namespace-uris))))))
 
@@ -349,7 +326,7 @@ Return non-nil if in a context it understands."
                (recover-fun (funcall recover-fun prefix (cdr qname)))))
       (cons (and defaultp (nxml-ns-get-default)) (cdr qname)))))
 
-(defun rng-start-tag-expand-recover (prefix local-name)
+(defun rng-start-tag-expand-recover (_prefix local-name)
   (let ((ns (rng-match-infer-start-tag-namespace local-name)))
     (and ns
         (cons ns local-name))))
@@ -386,7 +363,7 @@ set `xmltok-dtd'.  Returns the position of the end of the token."
     (save-restriction
       (widen)
       (nxml-with-invisible-motion
-       (if (= pos 1)
+       (if (= pos (point-min))
            (rng-set-initial-state)
          (let ((state (get-text-property (1- pos) 'rng-state)))
            (cond (state
@@ -501,24 +478,21 @@ set `xmltok-dtd'.  Returns the position of the end of the token."
     (and (or (not prefix) ns)
         (rng-match-attribute-name (cons ns local-name)))))
 
-(defun rng-complete-qname-function (string predicate flag)
-  (let ((alist (mapcar (lambda (name) (cons name nil))
-                      (rng-generate-qname-list string))))
-    (cond ((not flag)
-          (try-completion string alist predicate))
-         ((eq flag t)
-          (all-completions string alist predicate))
-         ((eq flag 'lambda)
-          (and (assoc string alist) t)))))
-
-(defun rng-generate-qname-list (&optional string)
+(defun rng-complete-qname-function (candidates attributes-flag extra-strings
+                                               string predicate flag)
+  (complete-with-action flag
+                        (rng-generate-qname-list
+                         string candidates attributes-flag extra-strings)
+                        string predicate))
+
+(defun rng-generate-qname-list (&optional string candidates attribute-flag extra-strings)
   (let ((forced-prefix (and string
                            (string-match ":" string)
                            (> (match-beginning 0) 0)
                            (substring string
                                       0
                                       (match-beginning 0))))
-       (namespaces (mapcar 'car rng-complete-target-names))
+       (namespaces (mapcar #'car candidates))
        ns-prefixes-alist ns-prefixes iter ns prefer)
     (while namespaces
       (setq ns (car namespaces))
@@ -526,7 +500,7 @@ set `xmltok-dtd'.  Returns the position of the end of the token."
        (setq ns-prefixes-alist
              (cons (cons ns (nxml-ns-prefixes-for
                              ns
-                             rng-complete-name-attribute-flag))
+                             attribute-flag))
                    ns-prefixes-alist)))
       (setq namespaces (delq ns (cdr namespaces))))
     (setq iter ns-prefixes-alist)
@@ -546,12 +520,12 @@ set `xmltok-dtd'.  Returns the position of the end of the token."
            (setcdr ns-prefixes (list prefer)))
          ;; Unless it's an attribute with a non-nil namespace,
          ;; allow no prefix for this namespace.
-         (unless rng-complete-name-attribute-flag
+         (unless attribute-flag
            (setcdr ns-prefixes (cons nil (cdr ns-prefixes))))))
       (setq iter (cdr iter)))
     (rng-uniquify-equal
-     (sort (apply 'append
-                 (cons rng-complete-extra-strings
+     (sort (apply #'append
+                 (cons extra-strings
                        (mapcar (lambda (name)
                                  (if (car name)
                                      (mapcar (lambda (prefix)
@@ -563,7 +537,7 @@ set `xmltok-dtd'.  Returns the position of the end of the token."
                                        (cdr (assoc (car name)
                                                    ns-prefixes-alist)))
                                    (list (cdr name))))
-                               rng-complete-target-names)))
+                               candidates)))
           'string<))))
 
 (defun rng-get-preferred-unused-prefix (ns)
@@ -582,10 +556,8 @@ set `xmltok-dtd'.  Returns the position of the end of the token."
            nil))))
     prefix))
 
-(defun rng-strings-to-completion-alist (strings)
-  (mapcar (lambda (s) (cons s s))
-         (rng-uniquify-equal (sort (mapcar 'rng-escape-string strings)
-                                   'string<))))
+(defun rng-strings-to-completion-table (strings)
+  (mapcar #'rng-escape-string strings))
 
 (provide 'rng-nxml)
 
index cde749db6725974606e3ad625435e3a6965b4c28..3ae4b5cc9c451087c62b77ff9477b5c73617ef2b 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-parse.el --- parse an XML file and validate it against a schema
+;;; rng-parse.el --- parse an XML file and validate it against a schema  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
index f358d3c87d4aefcc7c922d80bf9e1452f3a89ec0..e847f5e02a85b45d1681fe118474c920002855f8 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-pttrn.el --- RELAX NG patterns
+;;; rng-pttrn.el --- RELAX NG patterns  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
index 75cf23f888db6dd37a4bf1ab3fdb4020c1d62de8..8fc0a01e2936170e8288da72aea4b9f96d51da93 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-uri.el --- URI parsing and manipulation
+;;; rng-uri.el --- URI parsing and manipulation  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
index 4c14e2b6597fa40c1a411137bb18e935759f854b..c5d4b6567ed7462278647420b3512898ed719460 100644 (file)
@@ -82,69 +82,6 @@ LIST is not modified."
                                    (cons item nil))))))))
         list)))
 
-(defun rng-complete-before-point (start table prompt &optional predicate hist)
-  "Complete text between START and point.
-Replaces the text between START and point with a string chosen using a
-completion table and, when needed, input read from the user with the
-minibuffer.
-Returns the new string if either a complete and unique completion was
-determined automatically or input was read from the user.  Otherwise,
-returns nil.
-TABLE is an alist, a symbol bound to a function or an obarray as with
-the function `completing-read'.
-PROMPT is the string to prompt with if user input is needed.
-PREDICATE is nil or a function as with `completing-read'.
-HIST, if non-nil, specifies a history list as with `completing-read'."
-  (let* ((orig (buffer-substring-no-properties start (point)))
-        (completion (try-completion orig table predicate)))
-    (cond ((not completion)
-          (if (string= orig "")
-              (message "No completions available")
-            (message "No completion for %s" (rng-quote-string orig)))
-          (ding)
-          nil)
-         ((eq completion t) orig)
-         ((not (string= completion orig))
-          (delete-region start (point))
-          (insert completion)
-          (cond ((not (rng-completion-exact-p completion table predicate))
-                 (message "Incomplete")
-                 nil)
-                ((eq (try-completion completion table predicate) t)
-                 completion)
-                (t
-                 (message "Complete but not unique")
-                 nil)))
-         (t
-          (setq completion
-                (let ((saved-minibuffer-setup-hook
-                       (default-value 'minibuffer-setup-hook)))
-                  (add-hook 'minibuffer-setup-hook
-                            'minibuffer-completion-help
-                            t)
-                  (unwind-protect
-                      (completing-read prompt
-                                       table
-                                       predicate
-                                       nil
-                                       orig
-                                       hist)
-                    (setq-default minibuffer-setup-hook
-                                  saved-minibuffer-setup-hook))))
-          (delete-region start (point))
-          (insert completion)
-          completion))))
-
-(defun rng-completion-exact-p (string table predicate)
-  (cond ((symbolp table)
-        (funcall table string predicate 'lambda))
-       ((vectorp table)
-        (intern-soft string table))
-       (t (assoc string table))))
-
-(defun rng-quote-string (s)
-  (concat "\"" s "\""))
-
 (defun rng-escape-string (s)
   (replace-regexp-in-string "[&\"<>]"
                            (lambda (match)
index 1020cad2089965daec9bf31f9e1987ede5935efd..946bf791ff8d2e49f9af5e3bed92f2929e5b47c5 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-valid.el --- real-time validation of XML using RELAX NG
+;;; rng-valid.el --- real-time validation of XML using RELAX NG  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
@@ -430,13 +430,13 @@ The schema is set like `rng-auto-set-schema'."
   (when (buffer-live-p buffer)         ; bug#13999
     (with-current-buffer buffer
       (if rng-validate-mode
-         (if (let ((rng-validate-display-point (point))
-                   (rng-validate-display-modified-p (buffer-modified-p)))
-               (rng-do-some-validation 'rng-validate-while-idle-continue-p))
-             (force-mode-line-update)
-           (rng-validate-done))
-       ;; must have done kill-all-local-variables
-       (rng-kill-timers)))))
+          (if (let ((rng-validate-display-point (point))
+                    (rng-validate-display-modified-p (buffer-modified-p)))
+                (rng-do-some-validation 'rng-validate-while-idle-continue-p))
+              (force-mode-line-update)
+            (rng-validate-done))
+        ;; Must have done kill-all-local-variables.
+        (rng-kill-timers)))))
 
 (defun rng-validate-quick-while-idle (buffer)
   (when (buffer-live-p buffer)         ; bug#13999
@@ -709,7 +709,7 @@ Return t if there is work to do, nil otherwise."
 
 ;; If we don't do this, then the front delimiter can move
 ;; past the end delimiter.
-(defun rng-error-modified (overlay after-p beg end &optional pre-change-len)
+(defun rng-error-modified (overlay after-p _beg _end &optional _pre-change-len)
   (when (and after-p
             (overlay-start overlay)    ; check not deleted
             (>= (overlay-start overlay)
@@ -1138,9 +1138,8 @@ as empty-element."
                (rng-match-start-tag-open required)
                (rng-match-after)
                (rng-match-start-tag-open name))
-          (rng-mark-invalid (concat "Missing element "
-                                    (rng-quote-string
-                                     (rng-name-to-string required)))
+          (rng-mark-invalid (format "Missing element \"%s\""
+                                     (rng-name-to-string required))
                             xmltok-start
                             (1+ xmltok-start)))
          ((and (rng-match-optionalize-elements)
@@ -1177,16 +1176,14 @@ as empty-element."
     (cond ((not required-attributes)
           "Required attributes missing")
          ((not (cdr required-attributes))
-          (concat "Missing attribute "
-                  (rng-quote-string
-                   (rng-name-to-string (car required-attributes) t))))
+          (format "Missing attribute \"%s\""
+                   (rng-name-to-string (car required-attributes) t)))
          (t
-          (concat "Missing attributes "
+          (format "Missing attributes \"%s\""
                   (mapconcat (lambda (nm)
-                               (rng-quote-string
-                                (rng-name-to-string nm t)))
+                                (rng-name-to-string nm t))
                              required-attributes
-                             ""))))))
+                             "\", \""))))))
 
 (defun rng-process-end-tag (&optional partial)
   (cond ((not rng-open-elements)
@@ -1229,8 +1226,7 @@ as empty-element."
 (defun rng-missing-element-message ()
   (let ((element (rng-match-required-element-name)))
     (if element
-       (concat "Missing element "
-               (rng-quote-string (rng-name-to-string element)))
+       (format "Missing element \"%s\"" (rng-name-to-string element))
       "Required child elements missing")))
 
 (defun rng-recover-mismatched-end-tag ()
@@ -1258,17 +1254,16 @@ as empty-element."
 
 (defun rng-mark-missing-end-tags (missing)
   (rng-mark-not-well-formed
-   (format "Missing end-tag%s %s"
+   (format "Missing end-tag%s \"%s\""
           (if (null (cdr missing)) "" "s")
           (mapconcat (lambda (name)
-                       (rng-quote-string
-                        (if (car name)
-                            (concat (car name)
-                                    ":"
-                                    (cdr name))
-                          (cdr name))))
+                        (if (car name)
+                            (concat (car name)
+                                    ":"
+                                    (cdr name))
+                          (cdr name)))
                      missing
-                     ""))
+                     "\", \""))
    xmltok-start
    (+ xmltok-start 2)))
 
index 378319851a078a5c195e23c66bbb71791cc7390b..c0989ae10736ff75906b99373bfafadac5f37849 100644 (file)
@@ -1,4 +1,4 @@
-;;; rng-xsd.el --- W3C XML Schema datatypes library for RELAX NG
+;;; rng-xsd.el --- W3C XML Schema datatypes library for RELAX NG  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
@@ -42,7 +42,7 @@
 ;;;###autoload
 (put 'http://www.w3.org/2001/XMLSchema-datatypes
      'rng-dt-compile
-     'rng-xsd-compile)
+     #'rng-xsd-compile)
 
 ;;;###autoload
 (defun rng-xsd-compile (name params)
@@ -50,9 +50,9 @@
 NAME is a symbol giving the local name of the datatype.  PARAMS is a
 list of pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol
 giving the name of the parameter and PARAM-VALUE is a string giving
-its value.  If NAME or PARAMS are invalid, it calls rng-dt-error
+its value.  If NAME or PARAMS are invalid, it calls `rng-dt-error'
 passing it arguments in the same style as format; the value from
-rng-dt-error will be returned.  Otherwise, it returns a list.  The
+`rng-dt-error' will be returned.  Otherwise, it returns a list.  The
 first member of the list is t if any string is a legal value for the
 datatype and nil otherwise.  The second argument is a symbol; this
 symbol will be called as a function passing it a string followed by
index 8fc66c99a454f3af332fecd3e25e2a455b0f8ac2..f12905a86d0dc6f3e7043290ed4af2e19f128fc3 100644 (file)
 ;; preceding part of the instance.  This allows the instance to be
 ;; parsed incrementally.  The main entry point is `xmltok-forward':
 ;; this can be called at any point in the instance provided it is
-;; between tokens.  The other entry point is `xmltok-forward-special'
-;; which skips over tokens other comments, processing instructions or
-;; CDATA sections (i.e. the constructs in an instance that can contain
-;; less than signs that don't start a token).
+;; between tokens.
 ;;
 ;; This is a non-validating XML 1.0 processor.  It does not resolve
 ;; parameter entities (including the external DTD subset) and it does
@@ -262,11 +259,10 @@ and VALUE-END, otherwise a STRING giving the value."
   (vector message start end))
 
 (defun xmltok-add-error (message &optional start end)
-  (setq xmltok-errors
-       (cons (xmltok-make-error message
-                                (or start xmltok-start)
-                                (or end (point)))
-             xmltok-errors)))
+  (push (xmltok-make-error message
+                           (or start xmltok-start)
+                           (or end (point)))
+        xmltok-errors))
 
 (defun xmltok-forward ()
   (setq xmltok-start (point))
@@ -308,18 +304,6 @@ and VALUE-END, otherwise a STRING giving the value."
           (goto-char (point-max))
           (setq xmltok-type 'data)))))
 
-(defun xmltok-forward-special (bound)
-  "Scan forward past the first special token starting at or after point.
-Return nil if there is no special token that starts before BOUND.
-CDATA sections, processing instructions and comments (and indeed
-anything starting with < following by ? or !) count as special.
-Return the type of the token."
-  (when (re-search-forward "<[?!]" (1+ bound) t)
-    (setq xmltok-start (match-beginning 0))
-    (goto-char (1+ xmltok-start))
-    (let ((case-fold-search nil))
-      (xmltok-scan-after-lt))))
-
 (eval-when-compile
 
   ;; A symbolic regexp is represented by a list whose CAR is the string
@@ -739,19 +723,10 @@ Return the type of the token."
   (setq xmltok-type 'processing-instruction))
 
 (defun xmltok-scan-after-comment-open ()
-  (let ((found-- (search-forward "--" nil 'move)))
-    (setq xmltok-type
-          (cond ((or (eq (char-after) ?>) (not found--))
-                 (goto-char (1+ (point)))
-                 'comment)
-                (t
-                 ;; just include the <!-- in the token
-                 (goto-char (+ xmltok-start 4))
-                 ;; Need do this after the goto-char because
-                 ;; marked error should just apply to <!--
-                 (xmltok-add-error "First following `--' not followed by `>'")
-                 (goto-char (point-max))
-                 'comment)))))
+  (while (and (re-search-forward "--\\(>\\)?" nil 'move)
+              (not (match-end 1)))
+    (xmltok-add-error "`--' not followed by `>'" (match-beginning 0)))
+  (setq xmltok-type 'comment))
 
 (defun xmltok-scan-attributes ()
   (let ((recovering nil)
index e91e6b77a7d5babf03b0d864f978240700800a4d..a3f476d00be6b2322f8e22b17dba9e76ba9edea1 100644 (file)
@@ -1,4 +1,4 @@
-;;; xsd-regexp.el --- translate W3C XML Schema regexps to Emacs regexps
+;;; xsd-regexp.el --- translate W3C XML Schema regexps to Emacs regexps  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
 
@@ -147,7 +147,7 @@ ranges are merged wherever possible."
 (defun xsdre-range-list-difference (orig subtract)
   "Return a range-list for the difference of two range-lists."
   (when orig
-    (let (new head next first last)
+    (let (new head first last)
       (while orig
        (setq head (car orig))
        (setq first (xsdre-range-first head))
@@ -745,7 +745,7 @@ Code is inserted into the current buffer."
             (save-excursion
               (goto-char start)
               (down-list 2)
-              (while (condition-case err
+              (while (condition-case nil
                          (progn
                            (forward-sexp)
                            t)
diff --git a/lisp/obsolete/awk-mode.el b/lisp/obsolete/awk-mode.el
deleted file mode 100644 (file)
index b9e4e40..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-;;; awk-mode.el --- AWK code editing commands for Emacs
-
-;; Copyright (C) 1988, 1994, 1996, 2000-2016 Free Software Foundation,
-;; Inc.
-
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: unix, languages
-;; Obsolete-since: 22.1
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Sets up C-mode with support for awk-style #-comments and a lightly
-;; hacked syntax table.
-
-;;; Code:
-
-(defvar awk-mode-syntax-table
-  (let ((st (make-syntax-table)))
-  (modify-syntax-entry ?\\ "\\" st)
-  (modify-syntax-entry ?\n ">   " st)
-  (modify-syntax-entry ?\f ">   " st)
-  (modify-syntax-entry ?\# "<   " st)
-  ;; / can delimit regexes or be a division operator.  We assume that it is
-  ;; more commonly used for regexes and fix the remaining cases with
-  ;; `font-lock-syntactic-keywords'.
-  (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)
-  (modify-syntax-entry ?\' "\"" st)
-  st)
-  "Syntax table in use in `awk-mode' buffers.")
-
-;; Regexps written with help from Peter Galbraith <galbraith@mixing.qc.dfo.ca>.
-(defconst awk-font-lock-keywords
-  (eval-when-compile
-    (list
-     ;;
-     ;; Function names.
-     '("^[ \t]*\\(function\\)\\>[ \t]*\\(\\sw+\\)?"
-       (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t))
-     ;;
-     ;; Variable names.
-     (cons (regexp-opt
-           '("ARGC" "ARGIND" "ARGV" "CONVFMT" "ENVIRON" "ERRNO"
-             "FIELDWIDTHS" "FILENAME" "FNR" "FS" "IGNORECASE" "NF" "NR"
-             "OFMT" "OFS" "ORS" "RLENGTH" "RS" "RSTART" "SUBSEP") 'words)
-          'font-lock-variable-name-face)
-     ;;
-     ;; Keywords.
-     (regexp-opt
-      '("BEGIN" "END" "break" "continue" "delete" "do" "exit" "else" "for"
-       "getline" "if" "next" "print" "printf" "return" "while") 'words)
-     ;;
-     ;; Builtins.
-     (list (regexp-opt
-           '("atan2" "close" "cos" "ctime" "exp" "gsub" "index" "int"
-             "length" "log" "match" "rand" "sin" "split" "sprintf"
-             "sqrt" "srand" "sub" "substr" "system" "time"
-             "tolower" "toupper") 'words)
-          1 'font-lock-builtin-face)
-     ;;
-     ;; Operators.  Is this too much?
-     (cons (regexp-opt '("&&" "||" "<=" "<" ">=" ">" "==" "!=" "!~" "~"))
-          'font-lock-constant-face)
-     ))
- "Default expressions to highlight in AWK mode.")
-
-(require 'syntax)
-
-(defconst awk-font-lock-syntactic-keywords
-  ;; `/' is mostly used for /.../ regular expressions, but is also
-  ;; used as a division operator.  Distinguishing between the two is
-  ;; a pain in the youknowwhat.
-  ;; '(("\\(^\\|[<=>-+*%/!^,~(?:|&]\\)\\s-*\\(/\\)\\([^/\n\\]\\|\\\\.\\)*\\(/\\)"
-  ;;    (2 "\"") (4 "\"")))
-  '(("[^<=>-+*%/!^,~(?:|& \t\n\f]\\s-*\\(/\\)"
-     (1 (unless (nth 3 (syntax-ppss (match-beginning 1))) "."))))
-  "Syntactic keywords for `awk-mode'.")
-
-;; No longer autoloaded since it might clobber the autoload directive in CC Mode.
-(define-derived-mode awk-mode c-mode "AWK"
-  "Major mode for editing AWK 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
-indentation.  It has its own abbrev table and its own syntax table.
-
-Turning on AWK mode runs `awk-mode-hook'."
-  (set (make-local-variable 'paragraph-start) (concat "$\\|" page-delimiter))
-  (set (make-local-variable 'paragraph-separate) paragraph-start)
-  (set (make-local-variable 'comment-start) "# ")
-  (set (make-local-variable 'comment-end) "")
-  (set (make-local-variable 'comment-start-skip) "#+ *")
-  (setq font-lock-defaults '(awk-font-lock-keywords
-                            nil nil ((?_ . "w")) nil
-                            (parse-sexp-lookup-properties . t)
-                            (font-lock-syntactic-keywords
-                             . awk-font-lock-syntactic-keywords))))
-
-(provide 'awk-mode)
-
-;;; awk-mode.el ends here
diff --git a/lisp/obsolete/iso-acc.el b/lisp/obsolete/iso-acc.el
deleted file mode 100644 (file)
index 7bec92c..0000000
+++ /dev/null
@@ -1,489 +0,0 @@
-;;; iso-acc.el --- minor mode providing electric accent keys
-
-;; Copyright (C) 1993-1994, 1996, 2001-2016 Free Software Foundation,
-;; Inc.
-
-;; Author: Johan Vromans
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: i18n
-;; Obsolete-since: 22.1
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Function `iso-accents-mode' activates a minor mode in which
-;; typewriter "dead keys" are emulated.  The purpose of this emulation
-;; is to provide a simple means for inserting accented characters
-;; according to the ISO-8859-1...3 character sets.
-;;
-;; In `iso-accents-mode', pseudo accent characters are used to
-;; introduce accented keys.  The pseudo-accent characters are:
-;;
-;;   '  (minute)    -> acute accent
-;;   `  (backtick)  -> grave accent
-;;   "  (second)    -> diaeresis
-;;   ^  (caret)     -> circumflex
-;;   ~  (tilde)     -> tilde over the character
-;;   /  (slash)     -> slash through the character.
-;;                     Also:  /A is A-with-ring and /E is AE ligature.
-;; These two are enabled only if you set iso-accents-enable
-;; to include them:
-;;   .  (period)    -> dot over the character (some languages only)
-;;   ,  (cedilla)   -> cedilla under the character (some languages only)
-;;
-;; The action taken depends on the key that follows the pseudo accent.
-;; In general:
-;;
-;;   pseudo-accent + appropriate letter -> accented letter
-;;   pseudo-accent + space -> pseudo-accent (except comma and period)
-;;   pseudo-accent + pseudo-accent -> accent (if available)
-;;   pseudo-accent + other -> pseudo-accent + other
-;;
-;; If the pseudo-accent is followed by anything else than a
-;; self-insert-command, the dead-key code is terminated, the
-;; pseudo-accent inserted ‘as is’ and the bell is rung to signal this.
-;;
-;; Function `iso-accents-mode' can be used to enable the iso accents
-;; minor mode, or disable it.
-
-;; If you want only some of these characters to serve as accents,
-;; add a language to `iso-languages' which specifies the accent characters
-;; that you want, then select the language with `iso-accents-customize'.
-\f
-;;; Code:
-
-(provide 'iso-acc)
-
-(defgroup iso-acc nil
-  "Minor mode providing electric accent keys."
-  :prefix "iso-accents-"
-  :group 'i18n)
-
-(defcustom iso-accents-insert-offset nonascii-insert-offset
-  "Offset added by ISO Accents mode to character codes 0200 and above."
-  :type 'integer
-  :group 'iso-acc)
-
-(defvar iso-languages
-  '(("catalan"
-     ;; Note this includes some extra characters used in Spanish,
-     ;; on the idea that someone who uses Catalan is likely to use Spanish
-     ;; as well.
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-        (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
-        (?\  . ?'))
-     (?` (?A . ?\300) (?E . ?\310) (?O . ?\322)
-        (?a . ?\340) (?e . ?\350) (?o . ?\362)
-        (?\  . ?`))
-     (?\" (?I . ?\317) (?U . ?\334) (?i . ?\357) (?u . ?\374)
-         (?\  . ?\"))
-     (?~ (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361)
-        (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277)
-        (?\  . ?\~)))
-
-    ("esperanto"
-     (?^ (?H . ?\246) (?J . ?\254) (?h . ?\266) (?j . ?\274) (?C . ?\306)
-        (?G . ?\330) (?S . ?\336) (?c . ?\346) (?g . ?\370) (?s . ?\376)
-        (?^ . ?^) (?\  . ?^))
-     (?~ (?U . ?\335) (?u . ?\375) (?\  . ?~)))
-
-    ("french"
-     (?' (?E . ?\311) (?C . ?\307) (?e . ?\351) (?c . ?\347)
-        (?\  . ?'))
-     (?` (?A . ?\300) (?E . ?\310) (?U . ?\331)
-         (?a . ?\340) (?e . ?\350) (?u . ?\371)
-        (?\  . ?`))
-     (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333)
-        (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373)
-        (?\  . ?^))
-     (?\" (?E . ?\313) (?I . ?\317)
-          (?e . ?\353) (?i . ?\357)
-         (?\  . ?\"))
-     (?~ (?< . ?\253) (?> . ?\273) (?C . ?\307) (?c . ?\347)
-        (?\  . ?~))
-     (?, (?C . ?\307) (?c . ?\347) (?\  . ?\,)))
-
-    ("german"
-     (?\" (?A . ?\304) (?O . ?\326) (?U . ?\334)
-         (?a . ?\344) (?o . ?\366) (?u . ?\374) (?s . ?\337) (?\  . ?\")))
-
-    ("irish"
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-        (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
-        (?\  . ?')))
-
-    ("portuguese"
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-        (?C . ?\307) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363)
-        (?u . ?\372) (?c . ?\347)
-        (?\  . ?'))
-     (?` (?A . ?\300) (?a . ?\340)
-        (?\  . ?`))
-     (?^ (?A . ?\302) (?E . ?\312) (?O . ?\324)
-        (?a . ?\342) (?e . ?\352) (?o . ?\364)
-        (?\  . ?^))
-     (?\" (?U . ?\334) (?u . ?\374)
-         (?\  . ?\"))
-     (?~ (?A . ?\303) (?O . ?\325) (?a . ?\343) (?o . ?\365)
-         (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361)
-        (?\  . ?~))
-     (?, (?c . ?\347) (?C . ?\307) (?, . ?,)))
-
-    ("spanish"
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-        (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
-        (?\  . ?'))
-     (?\" (?U . ?\334) (?u . ?\374) (?\  . ?\"))
-     (?\~ (?N . ?\321) (?n . ?\361) (?> . ?\273) (?< . ?\253) (?! . ?\241)
-          (?? . ?\277) (?\  . ?\~)))
-
-    ("latin-1"
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-        (?Y . ?\335) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363)
-        (?u . ?\372) (?y . ?\375) (?' . ?\264)
-        (?\  . ?'))
-     (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331)
-        (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371)
-        (?` . ?`) (?\  . ?`))
-     (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333)
-        (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373)
-        (?^ . ?^) (?\  . ?^))
-     (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334)
-         (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?s . ?\337)
-         (?u . ?\374) (?y . ?\377)
-         (?\" . ?\250) (?\  . ?\"))
-     (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325)
-        (?T . ?\336) (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361)
-        (?o . ?\365) (?t . ?\376)
-        (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277)
-        (?\~ . ?\270) (?\  . ?~))
-     (?/ (?A . ?\305) (?E . ?\306) (?O . ?\330) (?a . ?\345) (?e . ?\346)
-        (?o . ?\370)
-        (?/ . ?\260) (?\  . ?/)))
-
-    ("latin-2" latin-iso8859-2
-     (?' (?A . ?\301) (?C . ?\306) (?D . ?\320) (?E . ?\311) (?I . ?\315)
-        (?L . ?\305) (?N . ?\321) (?O . ?\323) (?R . ?\300) (?S . ?\246)
-        (?U . ?\332) (?Y . ?\335) (?Z . ?\254)
-        (?a . ?\341) (?c . ?\346) (?d . ?\360) (?e . ?\351) (?i . ?\355)
-        (?l . ?\345) (?n . ?\361) (?o . ?\363) (?r . ?\340) (?s . ?\266)
-        (?u . ?\372) (?y . ?\375) (?z . ?\274)
-        (?' . ?\264) (?\  . ?'))
-     (?` (?A . ?\241) (?C . ?\307) (?E . ?\312) (?L . ?\243) (?S . ?\252)
-        (?T . ?\336) (?Z . ?\257)
-        (?a . ?\261) (?l . ?\263) (?c . ?\347) (?e . ?\352) (?s . ?\272)
-        (?t . ?\376) (?z . ?\277)
-        (?` . ?\252)
-        (?. . ?\377) (?\  . ?`))
-     (?^ (?A . ?\302) (?I . ?\316) (?O . ?\324)
-        (?a . ?\342) (?i . ?\356) (?o . ?\364)
-        (?^ . ?^)                      ; no special code?
-        (?\  . ?^))
-     (?\" (?A . ?\304) (?E . ?\313) (?O . ?\326) (?U . ?\334)
-         (?a . ?\344) (?e . ?\353) (?o . ?\366) (?s . ?\337) (?u . ?\374)
-         (?\" . ?\250)
-         (?\  . ?\"))
-     (?~ (?A . ?\303) (?C . ?\310) (?D . ?\317) (?L . ?\245) (?N . ?\322)
-        (?O . ?\325) (?R . ?\330) (?S . ?\251) (?T . ?\253) (?U . ?\333)
-        (?Z . ?\256)
-        (?a . ?\343) (?c . ?\350) (?d . ?\357) (?l . ?\265) (?n . ?\362)
-        (?o . ?\365) (?r . ?\370) (?s . ?\271) (?t . ?\273) (?u . ?\373)
-        (?z . ?\276)
-        (?v . ?\242)                   ; v accent
-        (?\~ . ?\242)                  ; v accent
-        (?\. . ?\270)                  ; cedilla accent
-        (?\  . ?~)))
-
-    ("latin-3" latin-iso8859-3
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-        (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
-        (?' . ?\264) (?\  . ?'))
-     (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331)
-        (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371)
-        (?` . ?`) (?\  . ?`))
-     (?^ (?A . ?\302) (?C . ?\306) (?E . ?\312) (?G . ?\330) (?H . ?\246)
-        (?I . ?\316) (?J . ?\254) (?O . ?\324) (?S . ?\336) (?U . ?\333)
-        (?a . ?\342) (?c . ?\346) (?e . ?\352) (?g . ?\370) (?h . ?\266)
-        (?i . ?\356) (?j . ?\274) (?o . ?\364) (?s . ?\376) (?u . ?\373)
-        (?^ . ?^) (?\  . ?^))
-     (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334)
-         (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?u . ?\374)
-         (?s . ?\337)
-         (?\" . ?\250) (?\  . ?\"))
-     (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325)
-        (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361) (?o . ?\365)
-        (?$ . ?\245) (?S . ?\252) (?s . ?\272) (?G . ?\253) (?g . ?\273)
-        (?U . ?\335) (?u . ?\375) (?` . ?\242)
-        (?~ . ?\270) (?\  . ?~))
-     (?/ (?C . ?\305) (?G . ?\325) (?H . ?\241) (?I . ?\251) (?Z . ?\257)
-        (?c . ?\345) (?g . ?\365) (?h . ?\261) (?i . ?\271) (?z . ?\277)
-        (?r . ?\256)
-        (?. . ?\377) (?# . ?\243) (?$ . ?\244)
-        (?/ . ?\260) (?\  . ?/))
-     (?. (?C . ?\305) (?G . ?\325) (?I . ?\251) (?Z . ?\257)
-        (?c . ?\345) (?g . ?\365) (?z . ?\277))))
-  "List of language-specific customizations for the ISO Accents mode.
-
-Each element of the list is of the form
-
-    (LANGUAGE [CHARSET]
-     (PSEUDO-ACCENT MAPPINGS)
-     (PSEUDO-ACCENT MAPPINGS)
-     ...)
-
-LANGUAGE is a string naming the language.
-CHARSET (which may be omitted) is the symbol name
- of the character set used in this language.
- If CHARSET is omitted, latin-iso8859-1 is the default.
-PSEUDO-ACCENT is a char specifying an accent key.
-MAPPINGS are cons cells of the form (CHAR . ISO-CHAR).
-
-The net effect is that the key sequence PSEUDO-ACCENT CHAR is mapped
-to ISO-CHAR on input.")
-
-(defvar iso-language nil
-  "Language for which ISO Accents mode is currently customized.
-Change it with the `iso-accents-customize' function.")
-
-(defvar iso-accents-list nil
-  "Association list for ISO accent combinations, for the chosen language.")
-
-(defcustom iso-accents-mode nil
-  "Non-nil enables ISO Accents mode.
-Setting this variable makes it local to the current buffer.
-See the function `iso-accents-mode'."
-  :type 'boolean
-  :group 'iso-acc)
-(make-variable-buffer-local 'iso-accents-mode)
-
-(defcustom iso-accents-enable '(?' ?` ?^ ?\" ?~ ?/)
-  "List of accent keys that become prefixes in ISO Accents mode.
-The default is (?\\=' ?\\=` ?^ ?\" ?~ ?/), which contains all the supported
-accent keys.  If you set this variable to a list in which some of those
-characters are missing, the missing ones do not act as accents.
-
-Note that if you specify a language with `iso-accents-customize',
-that can also turn off certain prefixes (whichever ones are not needed in
-the language you choose)."
-  :type '(repeat character)
-  :group 'iso-acc)
-
-(defun iso-accents-accent-key (prompt)
-  "Modify the following character by adding an accent to it."
-  ;; Pick up the accent character.
-  (if (and iso-accents-mode
-          (memq last-input-event iso-accents-enable))
-      (iso-accents-compose prompt)
-    (vector last-input-event)))
-
-
-;; The iso-accents-compose function is called deep inside Emacs' read
-;; key sequence machinery, so the call to read-event below actually
-;; recurses into that machinery.  Doing that does not cause any
-;; problem on its own, but read-event will have marked the window's
-;; display matrix to be accurate -- which is broken by the subsequent
-;; call to delete-region.  Therefore, we must call force-window-update
-;; after delete-region to explicitly clear the accurate state of the
-;; window's display matrix.
-
-(defun iso-accents-compose (prompt)
-  (let* ((first-char last-input-event)
-        (list (assq first-char iso-accents-list))
-        ;; Wait for the second key and look up the combination.
-        (second-char (if (or prompt
-                             (not (eq (key-binding "a")
-                                      'self-insert-command))
-                             ;; Not at start of a key sequence.
-                             (> (length (this-single-command-keys)) 1)
-                             ;; Called from anything but the command loop.
-                             this-command)
-                         (progn
-                           (message "%s%c"
-                                    (or prompt "Compose with ")
-                                    first-char)
-                           (read-event))
-                       (insert first-char)
-                       (prog1 (read-event)
-                         (delete-region (1- (point)) (point))
-                         ;; Display is no longer up-to-date.
-                         (force-window-update (selected-window)))))
-        (entry (cdr (assq second-char list))))
-    (if entry
-       ;; Found it: return the mapped char
-       (vector
-        (if (and enable-multibyte-characters
-                 (>= entry ?\200))
-            (+ iso-accents-insert-offset entry)
-          entry))
-      ;; Otherwise, advance and schedule the second key for execution.
-      (push second-char unread-command-events)
-      (vector first-char))))
-
-;; It is a matter of taste if you want the minor mode indicated
-;; in the mode line...
-;; If so, uncomment the next four lines.
-;; (or (assq 'iso-accents-mode minor-mode-alist)
-;;     (setq minor-mode-alist
-;;       (append minor-mode-alist
-;;               '((iso-accents-mode " ISO-Acc")))))
-
-;;;###autoload
-(defun iso-accents-mode (&optional arg)
-  "Toggle ISO Accents mode, in which accents modify the following letter.
-This permits easy insertion of accented characters according to ISO-8859-1.
-When Iso-accents mode is enabled, accent character keys
-\(\\=`, \\=', \", ^, / and ~) do not self-insert; instead, they modify the following
-letter key so that it inserts an ISO accented letter.
-
-You can customize ISO Accents mode to a particular language
-with the command `iso-accents-customize'.
-
-Special combinations: ~c gives a c with cedilla,
-~d gives an Icelandic eth (d with dash).
-~t gives an Icelandic thorn.
-\"s gives German sharp s.
-/a gives a with ring.
-/e gives an a-e ligature.
-~< and ~> give guillemots.
-~! gives an inverted exclamation mark.
-~? gives an inverted question mark.
-
-With an argument, a positive argument enables ISO Accents mode,
-and a negative argument disables it."
-
-  (interactive "P")
-
-  (if (if arg
-         ;; Negative arg means switch it off.
-         (<= (prefix-numeric-value arg) 0)
-       ;; No arg means toggle.
-       iso-accents-mode)
-      (setq iso-accents-mode nil)
-
-    ;; Enable electric accents.
-    (setq iso-accents-mode t)))
-
-(defun iso-accents-customize (language)
-  "Customize the ISO accents machinery for a particular language.
-It selects the customization based on the specifications in the
-`iso-languages' variable."
-  (interactive (list (completing-read "Language: " iso-languages nil t)))
-  (let ((table (cdr (assoc language iso-languages)))
-       all-accents tail)
-    (if (not table)
-       (error "Unknown language `%s'" language)
-      (setq iso-accents-insert-offset (- (make-char (if (symbolp (car table))
-                                                       (car table)
-                                                     'latin-iso8859-1))
-                                        128))
-      (if (symbolp (car table))
-         (setq table (cdr table)))
-      (setq iso-language language
-           iso-accents-list table)
-      (if key-translation-map
-         (substitute-key-definition
-          'iso-accents-accent-key nil key-translation-map)
-       (setq key-translation-map (make-sparse-keymap)))
-      ;; Set up translations for all the characters that are used as
-      ;; accent prefixes in this language.
-      (setq tail iso-accents-list)
-      (while tail
-       (define-key key-translation-map (vector (car (car tail)))
-         'iso-accents-accent-key)
-       (setq tail (cdr tail))))))
-
-(defun iso-accentuate (start end)
-  "Convert two-character sequences in region into accented characters.
-Noninteractively, this operates on text from START to END.
-This uses the same conversion that ISO Accents mode uses for type-in."
-  (interactive "r")
-  (save-excursion
-    (save-restriction
-      (narrow-to-region start end)
-      (goto-char start)
-      (forward-char 1)
-      (let (entry)
-       (while (< (point) end)
-         (if (and (memq (preceding-char) iso-accents-enable)
-                  (setq entry (cdr (assq (following-char) (assq (preceding-char) iso-accents-list)))))
-             (progn
-               (forward-char -1)
-               (delete-char 2)
-               (insert entry)
-               (setq end (1- end)))
-           (forward-char 1)))))))
-
-(defun iso-accent-rassoc-unit (value alist)
-  (let (elt acc)
-    (while (and alist (not elt))
-      (setq acc (car (car alist))
-           elt (car (rassq value (cdr (car alist))))
-           alist (cdr alist)))
-    (if elt
-       (cons acc elt))))
-
-(defun iso-unaccentuate (start end)
-  "Convert accented characters in the region into two-character sequences.
-Noninteractively, this operates on text from START to END.
-This uses the opposite of the conversion done by ISO Accents mode for type-in."
-  (interactive "r")
-  (save-excursion
-    (save-restriction
-      (narrow-to-region start end)
-      (goto-char start)
-      (let (entry)
-       (while (< (point) end)
-         (if (and (> (following-char) 127)
-                  (setq entry (iso-accent-rassoc-unit (following-char)
-                                                      iso-accents-list)))
-             (progn
-               (delete-char 1)
-               (insert (car entry) (cdr entry))
-               (setq end (1+ end)))
-           (forward-char 1)))))))
-
-(defun iso-deaccentuate (start end)
-  "Convert accented characters in the region into unaccented characters.
-Noninteractively, this operates on text from START to END."
-  (interactive "r")
-  (save-excursion
-    (save-restriction
-      (narrow-to-region start end)
-      (goto-char start)
-      (let (entry)
-       (while (< (point) end)
-         (if (and (> (following-char) 127)
-                  (setq entry (iso-accent-rassoc-unit (following-char)
-                                                      iso-accents-list)))
-             (progn
-               (delete-char 1)
-               (insert (cdr entry)))
-           (forward-char 1)))))))
-
-;; Set up the default settings.
-(iso-accents-customize "latin-1")
-
-;; Use Iso-Accents mode in the minibuffer
-;; if it was in use in the previous buffer.
-(defun iso-acc-minibuf-setup ()
-  (setq iso-accents-mode
-       (with-current-buffer (window-buffer minibuffer-scroll-window)
-         iso-accents-mode)))
-
-(add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup)
-
-;;; iso-acc.el ends here
diff --git a/lisp/obsolete/iso-insert.el b/lisp/obsolete/iso-insert.el
deleted file mode 100644 (file)
index dcb9e3d..0000000
+++ /dev/null
@@ -1,630 +0,0 @@
-;;; iso-insert.el --- insert functions for ISO 8859/1
-
-;; Copyright (C) 1987, 1994, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: Howard Gayle
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: i18n
-;; Obsolete-since: 22.1
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Provides keys for inserting ISO Latin-1 characters.  They use the
-;; prefix key C-x 8.  Type C-x 8 C-h for a list.
-
-;;; Code:
-
-(defun insert-no-break-space ()
-   (interactive "*")
-   (insert ?\ )
-)
-
-(defun insert-inverted-exclamation-mark ()
-   (interactive "*")
-   (insert ?\¡)
-)
-
-(defun insert-cent-sign ()
-   (interactive "*")
-   (insert ?\¢)
-)
-
-(defun insert-pound-sign ()
-   (interactive "*")
-   (insert ?\£)
-)
-
-(defun insert-general-currency-sign ()
-   (interactive "*")
-   (insert ?\¤)
-)
-
-(defun insert-yen-sign ()
-   (interactive "*")
-   (insert ?\¥)
-)
-
-(defun insert-broken-vertical-line ()
-   (interactive "*")
-   (insert ?\¦)
-)
-
-(defun insert-section-sign ()
-   (interactive "*")
-   (insert ?\§)
-)
-
-(defun insert-diaeresis ()
-   (interactive "*")
-   (insert ?\¨)
-)
-
-(defun insert-copyright-sign ()
-   (interactive "*")
-   (insert ?\©)
-)
-
-(defun insert-ordinal-indicator-feminine ()
-   (interactive "*")
-   (insert ?\ª)
-)
-
-(defun insert-angle-quotation-mark-left ()
-   (interactive "*")
-   (insert ?\«)
-)
-
-(defun insert-not-sign ()
-   (interactive "*")
-   (insert ?\¬)
-)
-
-(defun insert-soft-hyphen ()
-   (interactive "*")
-   (insert ?\­)
-)
-
-(defun insert-registered-sign ()
-   (interactive "*")
-   (insert ?\®)
-)
-
-(defun insert-macron ()
-   (interactive "*")
-   (insert ?\¯)
-)
-
-(defun insert-degree-sign ()
-   (interactive "*")
-   (insert ?\°)
-)
-
-(defun insert-plus-or-minus-sign ()
-   (interactive "*")
-   (insert ?\±)
-)
-
-(defun insert-superscript-two ()
-   (interactive "*")
-   (insert ?\²)
-)
-
-(defun insert-superscript-three ()
-   (interactive "*")
-   (insert ?\³)
-)
-
-(defun insert-acute-accent ()
-   (interactive "*")
-   (insert ?\´)
-)
-
-(defun insert-micro-sign ()
-   (interactive "*")
-   (insert ?\µ)
-)
-
-(defun insert-pilcrow ()
-   (interactive "*")
-   (insert ?\¶)
-)
-
-(defun insert-middle-dot ()
-   (interactive "*")
-   (insert ?\·)
-)
-
-(defun insert-cedilla ()
-   (interactive "*")
-   (insert ?\¸)
-)
-
-(defun insert-superscript-one ()
-   (interactive "*")
-   (insert ?\¹)
-)
-
-(defun insert-ordinal-indicator-masculine ()
-   (interactive "*")
-   (insert ?\º)
-)
-
-(defun insert-angle-quotation-mark-right ()
-   (interactive "*")
-   (insert ?\»)
-)
-
-(defun insert-fraction-one-quarter ()
-   (interactive "*")
-   (insert ?\¼)
-)
-
-(defun insert-fraction-one-half ()
-   (interactive "*")
-   (insert ?\½)
-)
-
-(defun insert-fraction-three-quarters ()
-   (interactive "*")
-   (insert ?\¾)
-)
-
-(defun insert-inverted-question-mark ()
-   (interactive "*")
-   (insert ?\¿)
-)
-
-(defun insert-A-grave ()
-   (interactive "*")
-   (insert ?\À)
-)
-
-(defun insert-A-acute ()
-   (interactive "*")
-   (insert ?\Á)
-)
-
-(defun insert-A-circumflex ()
-   (interactive "*")
-   (insert ?\Â)
-)
-
-(defun insert-A-tilde ()
-   (interactive "*")
-   (insert ?\Ã)
-)
-
-(defun insert-A-umlaut ()
-   (interactive "*")
-   (insert ?\Ä)
-)
-
-(defun insert-A-ring ()
-   (interactive "*")
-   (insert ?\Å)
-)
-
-(defun insert-AE ()
-   (interactive "*")
-   (insert ?\Æ)
-)
-
-(defun insert-C-cedilla ()
-   (interactive "*")
-   (insert ?\Ç)
-)
-
-(defun insert-E-grave ()
-   (interactive "*")
-   (insert ?\È)
-)
-
-(defun insert-E-acute ()
-   (interactive "*")
-   (insert ?\É)
-)
-
-(defun insert-E-circumflex ()
-   (interactive "*")
-   (insert ?\Ê)
-)
-
-(defun insert-E-umlaut ()
-   (interactive "*")
-   (insert ?\Ë)
-)
-
-(defun insert-I-grave ()
-   (interactive "*")
-   (insert ?\Ì)
-)
-
-(defun insert-I-acute ()
-   (interactive "*")
-   (insert ?\Í)
-)
-
-(defun insert-I-circumflex ()
-   (interactive "*")
-   (insert ?\Î)
-)
-
-(defun insert-I-umlaut ()
-   (interactive "*")
-   (insert ?\Ï)
-)
-
-(defun insert-D-stroke ()
-   (interactive "*")
-   (insert ?\Ð)
-)
-
-(defun insert-N-tilde ()
-   (interactive "*")
-   (insert ?\Ñ)
-)
-
-(defun insert-O-grave ()
-   (interactive "*")
-   (insert ?\Ò)
-)
-
-(defun insert-O-acute ()
-   (interactive "*")
-   (insert ?\Ó)
-)
-
-(defun insert-O-circumflex ()
-   (interactive "*")
-   (insert ?\Ô)
-)
-
-(defun insert-O-tilde ()
-   (interactive "*")
-   (insert ?\Õ)
-)
-
-(defun insert-O-umlaut ()
-   (interactive "*")
-   (insert ?\Ö)
-)
-
-(defun insert-multiplication-sign ()
-   (interactive "*")
-   (insert ?\×)
-)
-
-(defun insert-O-slash ()
-   (interactive "*")
-   (insert ?\Ø)
-)
-
-(defun insert-U-grave ()
-   (interactive "*")
-   (insert ?\Ù)
-)
-
-(defun insert-U-acute ()
-   (interactive "*")
-   (insert ?\Ú)
-)
-
-(defun insert-U-circumflex ()
-   (interactive "*")
-   (insert ?\Û)
-)
-
-(defun insert-U-umlaut ()
-   (interactive "*")
-   (insert ?\Ü)
-)
-
-(defun insert-Y-acute ()
-   (interactive "*")
-   (insert ?\Ý)
-)
-
-(defun insert-THORN ()
-   (interactive "*")
-   (insert ?\Þ)
-)
-
-(defun insert-ss ()
-   (interactive "*")
-   (insert ?\ß)
-)
-
-(defun insert-a-grave ()
-   (interactive "*")
-   (insert ?\à)
-)
-
-(defun insert-a-acute ()
-   (interactive "*")
-   (insert ?\á)
-)
-
-(defun insert-a-circumflex ()
-   (interactive "*")
-   (insert ?\â)
-)
-
-(defun insert-a-tilde ()
-   (interactive "*")
-   (insert ?\ã)
-)
-
-(defun insert-a-umlaut ()
-   (interactive "*")
-   (insert ?\ä)
-)
-
-(defun insert-a-ring ()
-   (interactive "*")
-   (insert ?\å)
-)
-
-(defun insert-ae ()
-   (interactive "*")
-   (insert ?\æ)
-)
-
-(defun insert-c-cedilla ()
-   (interactive "*")
-   (insert ?\ç)
-)
-
-(defun insert-e-grave ()
-   (interactive "*")
-   (insert ?\è)
-)
-
-(defun insert-e-acute ()
-   (interactive "*")
-   (insert ?\é)
-)
-
-(defun insert-e-circumflex ()
-   (interactive "*")
-   (insert ?\ê)
-)
-
-(defun insert-e-umlaut ()
-   (interactive "*")
-   (insert ?\ë)
-)
-
-(defun insert-i-grave ()
-   (interactive "*")
-   (insert ?\ì)
-)
-
-(defun insert-i-acute ()
-   (interactive "*")
-   (insert ?\í)
-)
-
-(defun insert-i-circumflex ()
-   (interactive "*")
-   (insert ?\î)
-)
-
-(defun insert-i-umlaut ()
-   (interactive "*")
-   (insert ?\ï)
-)
-
-(defun insert-d-stroke ()
-   (interactive "*")
-   (insert ?\ð)
-)
-
-(defun insert-n-tilde ()
-   (interactive "*")
-   (insert ?\ñ)
-)
-
-(defun insert-o-grave ()
-   (interactive "*")
-   (insert ?\ò)
-)
-
-(defun insert-o-acute ()
-   (interactive "*")
-   (insert ?\ó)
-)
-
-(defun insert-o-circumflex ()
-   (interactive "*")
-   (insert ?\ô)
-)
-
-(defun insert-o-tilde ()
-   (interactive "*")
-   (insert ?\õ)
-)
-
-(defun insert-o-umlaut ()
-   (interactive "*")
-   (insert ?\ö)
-)
-
-(defun insert-division-sign ()
-   (interactive "*")
-   (insert ?\÷)
-)
-
-(defun insert-o-slash ()
-   (interactive "*")
-   (insert ?\ø)
-)
-
-(defun insert-u-grave ()
-   (interactive "*")
-   (insert ?\ù)
-)
-
-(defun insert-u-acute ()
-   (interactive "*")
-   (insert ?\ú)
-)
-
-(defun insert-u-circumflex ()
-   (interactive "*")
-   (insert ?\û)
-)
-
-(defun insert-u-umlaut ()
-   (interactive "*")
-   (insert ?\ü)
-)
-
-(defun insert-y-acute ()
-   (interactive "*")
-   (insert ?\ý)
-)
-
-(defun insert-thorn ()
-   (interactive "*")
-   (insert ?\þ)
-)
-
-(defun insert-y-umlaut ()
-   (interactive "*")
-   (insert ?\ÿ)
-)
-
-(defvar 8859-1-map nil "Keymap for ISO 8859/1 character insertion.")
-(if 8859-1-map nil
-   (setq 8859-1-map (make-keymap))
-   (define-key 8859-1-map " "    'insert-no-break-space)
-   (define-key 8859-1-map "!"    'insert-inverted-exclamation-mark)
-   (define-key 8859-1-map "\""   (make-sparse-keymap))
-   (define-key 8859-1-map "\"\"" 'insert-diaeresis)
-   (define-key 8859-1-map "\"A"  'insert-A-umlaut)
-   (define-key 8859-1-map "\"E"  'insert-E-umlaut)
-   (define-key 8859-1-map "\"I"  'insert-I-umlaut)
-   (define-key 8859-1-map "\"O"  'insert-O-umlaut)
-   (define-key 8859-1-map "\"U"  'insert-U-umlaut)
-   (define-key 8859-1-map "\"a"  'insert-a-umlaut)
-   (define-key 8859-1-map "\"e"  'insert-e-umlaut)
-   (define-key 8859-1-map "\"i"  'insert-i-umlaut)
-   (define-key 8859-1-map "\"o"  'insert-o-umlaut)
-   (define-key 8859-1-map "\"u"  'insert-u-umlaut)
-   (define-key 8859-1-map "\"y"  'insert-y-umlaut)
-   (define-key 8859-1-map "'"    (make-sparse-keymap))
-   (define-key 8859-1-map "''"   'insert-acute-accent)
-   (define-key 8859-1-map "'A"   'insert-A-acute)
-   (define-key 8859-1-map "'E"   'insert-E-acute)
-   (define-key 8859-1-map "'I"   'insert-I-acute)
-   (define-key 8859-1-map "'O"   'insert-O-acute)
-   (define-key 8859-1-map "'U"   'insert-U-acute)
-   (define-key 8859-1-map "'Y"   'insert-Y-acute)
-   (define-key 8859-1-map "'a"   'insert-a-acute)
-   (define-key 8859-1-map "'e"   'insert-e-acute)
-   (define-key 8859-1-map "'i"   'insert-i-acute)
-   (define-key 8859-1-map "'o"   'insert-o-acute)
-   (define-key 8859-1-map "'u"   'insert-u-acute)
-   (define-key 8859-1-map "'y"   'insert-y-acute)
-   (define-key 8859-1-map "$"    'insert-general-currency-sign)
-   (define-key 8859-1-map "+"    'insert-plus-or-minus-sign)
-   (define-key 8859-1-map ","    (make-sparse-keymap))
-   (define-key 8859-1-map ",,"   'insert-cedilla)
-   (define-key 8859-1-map ",C"   'insert-C-cedilla)
-   (define-key 8859-1-map ",c"   'insert-c-cedilla)
-   (define-key 8859-1-map "-"    'insert-soft-hyphen)
-   (define-key 8859-1-map "."    'insert-middle-dot)
-   (define-key 8859-1-map "/"    (make-sparse-keymap))
-   (define-key 8859-1-map "//"   'insert-division-sign)
-   (define-key 8859-1-map "/O"   'insert-O-slash)
-   (define-key 8859-1-map "/o"   'insert-o-slash)
-   (define-key 8859-1-map "1"    (make-sparse-keymap))
-   (define-key 8859-1-map "1/"   (make-sparse-keymap))
-   (define-key 8859-1-map "1/2"  'insert-fraction-one-half)
-   (define-key 8859-1-map "1/4"  'insert-fraction-one-quarter)
-   (define-key 8859-1-map "3"    (make-sparse-keymap))
-   (define-key 8859-1-map "3/"   (make-sparse-keymap))
-   (define-key 8859-1-map "3/4"  'insert-fraction-three-quarters)
-   (define-key 8859-1-map "<"    'insert-angle-quotation-mark-left)
-   (define-key 8859-1-map "="    'insert-macron)
-   (define-key 8859-1-map ">"    'insert-angle-quotation-mark-right)
-   (define-key 8859-1-map "?"    'insert-inverted-question-mark)
-   (define-key 8859-1-map "A"    'insert-A-ring)
-   (define-key 8859-1-map "E"    'insert-AE)
-   (define-key 8859-1-map "C"    'insert-copyright-sign)
-   (define-key 8859-1-map "D"    'insert-D-stroke)
-   (define-key 8859-1-map "L"    'insert-pound-sign)
-   (define-key 8859-1-map "P"    'insert-pilcrow)
-   (define-key 8859-1-map "R"    'insert-registered-sign)
-   (define-key 8859-1-map "S"    'insert-section-sign)
-   (define-key 8859-1-map "T"    'insert-THORN)
-   (define-key 8859-1-map "Y"    'insert-yen-sign)
-   (define-key 8859-1-map "^"    (make-sparse-keymap))
-   (define-key 8859-1-map "^1"   'insert-superscript-one)
-   (define-key 8859-1-map "^2"   'insert-superscript-two)
-   (define-key 8859-1-map "^3"   'insert-superscript-three)
-   (define-key 8859-1-map "^A"   'insert-A-circumflex)
-   (define-key 8859-1-map "^E"   'insert-E-circumflex)
-   (define-key 8859-1-map "^I"   'insert-I-circumflex)
-   (define-key 8859-1-map "^O"   'insert-O-circumflex)
-   (define-key 8859-1-map "^U"   'insert-U-circumflex)
-   (define-key 8859-1-map "^a"   'insert-a-circumflex)
-   (define-key 8859-1-map "^e"   'insert-e-circumflex)
-   (define-key 8859-1-map "^i"   'insert-i-circumflex)
-   (define-key 8859-1-map "^o"   'insert-o-circumflex)
-   (define-key 8859-1-map "^u"   'insert-u-circumflex)
-   (define-key 8859-1-map "_"    (make-sparse-keymap))
-   (define-key 8859-1-map "_a"   'insert-ordinal-indicator-feminine)
-   (define-key 8859-1-map "_o"   'insert-ordinal-indicator-masculine)
-   (define-key 8859-1-map "`"    (make-sparse-keymap))
-   (define-key 8859-1-map "`A"   'insert-A-grave)
-   (define-key 8859-1-map "`E"   'insert-E-grave)
-   (define-key 8859-1-map "`I"   'insert-I-grave)
-   (define-key 8859-1-map "`O"   'insert-O-grave)
-   (define-key 8859-1-map "`U"   'insert-U-grave)
-   (define-key 8859-1-map "`a"   'insert-a-grave)
-   (define-key 8859-1-map "`e"   'insert-e-grave)
-   (define-key 8859-1-map "`i"   'insert-i-grave)
-   (define-key 8859-1-map "`o"   'insert-o-grave)
-   (define-key 8859-1-map "`u"   'insert-u-grave)
-   (define-key 8859-1-map "a"    'insert-a-ring)
-   (define-key 8859-1-map "e"    'insert-ae)
-   (define-key 8859-1-map "c"    'insert-cent-sign)
-   (define-key 8859-1-map "d"    'insert-d-stroke)
-   (define-key 8859-1-map "o"    'insert-degree-sign)
-   (define-key 8859-1-map "s"    'insert-ss)
-   (define-key 8859-1-map "t"    'insert-thorn)
-   (define-key 8859-1-map "u"    'insert-micro-sign)
-   (define-key 8859-1-map "x"    'insert-multiplication-sign)
-   (define-key 8859-1-map "|"    'insert-broken-vertical-line)
-   (define-key 8859-1-map "~"    (make-sparse-keymap))
-   (define-key 8859-1-map "~A"   'insert-A-tilde)
-   (define-key 8859-1-map "~N"   'insert-N-tilde)
-   (define-key 8859-1-map "~O"   'insert-O-tilde)
-   (define-key 8859-1-map "~a"   'insert-a-tilde)
-   (define-key 8859-1-map "~n"   'insert-n-tilde)
-   (define-key 8859-1-map "~o"   'insert-o-tilde)
-   (define-key 8859-1-map "~~"   'insert-not-sign)
-   (if (not (lookup-key global-map "\C-x8"))
-      (define-key global-map "\C-x8" 8859-1-map))
-)
-(defalias '8859-1-map 8859-1-map)
-
-(provide 'iso-insert)
-
-;;; iso-insert.el ends here
diff --git a/lisp/obsolete/iso-swed.el b/lisp/obsolete/iso-swed.el
deleted file mode 100644 (file)
index bae69d2..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-;;; iso-swed.el --- set up char tables for ISO 8859/1 for Swedish/Finnish ttys
-
-;; Copyright (C) 1987, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: Howard Gayle
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: i18n
-;; Obsolete-since: 22.1
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Written by Howard Gayle.  See case-table.el for details.
-
-;;; Code:
-
-;; This code sets up to display ISO 8859/1 characters on
-;; terminals that have ASCII in the G0 set and a Swedish/Finnish
-;; version of ISO 646 in the G1 set.  The G1 set differs from
-;; ASCII as follows:
-;;
-;; ASCII G1
-;;     $ general currency sign
-;;     @ capital E with acute accent
-;;     [ capital A with diaeresis or umlaut mark
-;;     \ capital O with diaeresis or umlaut mark
-;;     ] capital A with ring
-;;     ^ capital U with diaeresis or umlaut mark
-;;     ` small e with acute accent
-;;     { small a with diaeresis or umlaut mark
-;;     | small o with diaeresis or umlaut mark
-;;     } small a with ring
-;;     ~ small u with diaeresis or umlaut mark
-
-(require 'disp-table)
-
-(standard-display-ascii 160 "{_}")   ; NBSP (no-break space)
-(standard-display-ascii 161 "{!}")   ; inverted exclamation mark
-(standard-display-ascii 162 "{c}")   ; cent sign
-(standard-display-ascii 163 "{GBP}") ; pound sign
-(standard-display-g1    164 ?$)      ; general currency sign
-(standard-display-ascii 165 "{JPY}") ; yen sign
-(standard-display-ascii 166 "{|}")   ; broken vertical line
-(standard-display-ascii 167 "{S}")   ; section sign
-(standard-display-ascii 168 "{\"}")  ; diaeresis
-(standard-display-ascii 169 "{C}")   ; copyright sign
-(standard-display-ascii 170 "{_a}")  ; ordinal indicator, feminine
-(standard-display-ascii 171 "{<<}")  ; left angle quotation mark
-(standard-display-ascii 172 "{~}")   ; not sign
-(standard-display-ascii 173 "{-}")   ; soft hyphen
-(standard-display-ascii 174 "{R}")   ; registered sign
-(standard-display-ascii 175 "{=}")   ; macron
-(standard-display-ascii 176 "{o}")   ; degree sign
-(standard-display-ascii 177 "{+-}")  ; plus or minus sign
-(standard-display-ascii 178 "{2}")   ; superscript two
-(standard-display-ascii 179 "{3}")   ; superscript three
-(standard-display-ascii 180 "{'}")   ; acute accent
-(standard-display-ascii 181 "{u}")   ; micro sign
-(standard-display-ascii 182 "{P}")   ; pilcrow
-(standard-display-ascii 183 "{.}")   ; middle dot
-(standard-display-ascii 184 "{,}")   ; cedilla
-(standard-display-ascii 185 "{1}")   ; superscript one
-(standard-display-ascii 186 "{_o}")  ; ordinal indicator, masculine
-(standard-display-ascii 187 "{>>}")  ; right angle quotation mark
-(standard-display-ascii 188 "{1/4}") ; fraction one-quarter
-(standard-display-ascii 189 "{1/2}") ; fraction one-half
-(standard-display-ascii 190 "{3/4}") ; fraction three-quarters
-(standard-display-ascii 191 "{?}")   ; inverted question mark
-(standard-display-ascii 192 "{`A}")  ; A with grave accent
-(standard-display-ascii 193 "{'A}")  ; A with acute accent
-(standard-display-ascii 194 "{^A}")  ; A with circumflex accent
-(standard-display-ascii 195 "{~A}")  ; A with tilde
-(standard-display-g1    196 ?[)      ; A with diaeresis or umlaut mark
-(standard-display-g1    197 ?])      ; A with ring
-(standard-display-ascii 198 "{AE}")  ; AE diphthong
-(standard-display-ascii 199 "{,C}")  ; C with cedilla
-(standard-display-ascii 200 "{`E}")  ; E with grave accent
-(standard-display-g1    201 ?@)      ; E with acute accent
-(standard-display-ascii 202 "{^E}")  ; E with circumflex accent
-(standard-display-ascii 203 "{\"E}") ; E with diaeresis or umlaut mark
-(standard-display-ascii 204 "{`I}")  ; I with grave accent
-(standard-display-ascii 205 "{'I}")  ; I with acute accent
-(standard-display-ascii 206 "{^I}")  ; I with circumflex accent
-(standard-display-ascii 207 "{\"I}") ; I with diaeresis or umlaut mark
-(standard-display-ascii 208 "{-D}")  ; D with stroke, Icelandic eth
-(standard-display-ascii 209 "{~N}")  ; N with tilde
-(standard-display-ascii 210 "{`O}")  ; O with grave accent
-(standard-display-ascii 211 "{'O}")  ; O with acute accent
-(standard-display-ascii 212 "{^O}")  ; O with circumflex accent
-(standard-display-ascii 213 "{~O}")  ; O with tilde
-(standard-display-g1    214 ?\\)     ; O with diaeresis or umlaut mark
-(standard-display-ascii 215 "{x}")   ; multiplication sign
-(standard-display-ascii 216 "{/O}")  ; O with slash
-(standard-display-ascii 217 "{`U}")  ; U with grave accent
-(standard-display-ascii 218 "{'U}")  ; U with acute accent
-(standard-display-ascii 219 "{^U}")  ; U with circumflex accent
-(standard-display-g1    220 ?^)      ; U with diaeresis or umlaut mark
-(standard-display-ascii 221 "{'Y}")  ; Y with acute accent
-(standard-display-ascii 222 "{TH}")  ; capital thorn, Icelandic
-(standard-display-ascii 223 "{ss}")  ; small sharp s, German
-(standard-display-ascii 224 "{`a}")  ; a with grave accent
-(standard-display-ascii 225 "{'a}")  ; a with acute accent
-(standard-display-ascii 226 "{^a}")  ; a with circumflex accent
-(standard-display-ascii 227 "{~a}")  ; a with tilde
-(standard-display-g1    228 ?{)      ; a with diaeresis or umlaut mark
-(standard-display-g1    229 ?})      ; a with ring
-(standard-display-ascii 230 "{ae}")  ; ae diphthong
-(standard-display-ascii 231 "{,c}")  ; c with cedilla
-(standard-display-ascii 232 "{`e}")  ; e with grave accent
-(standard-display-g1    233 ?`)      ; e with acute accent
-(standard-display-ascii 234 "{^e}")  ; e with circumflex accent
-(standard-display-ascii 235 "{\"e}") ; e with diaeresis or umlaut mark
-(standard-display-ascii 236 "{`i}")  ; i with grave accent
-(standard-display-ascii 237 "{'i}")  ; i with acute accent
-(standard-display-ascii 238 "{^i}")  ; i with circumflex accent
-(standard-display-ascii 239 "{\"i}") ; i with diaeresis or umlaut mark
-(standard-display-ascii 240 "{-d}")  ; d with stroke, Icelandic eth
-(standard-display-ascii 241 "{~n}")  ; n with tilde
-(standard-display-ascii 242 "{`o}")  ; o with grave accent
-(standard-display-ascii 243 "{'o}")  ; o with acute accent
-(standard-display-ascii 244 "{^o}")  ; o with circumflex accent
-(standard-display-ascii 245 "{~o}")  ; o with tilde
-(standard-display-g1    246 ?|)      ; o with diaeresis or umlaut mark
-(standard-display-ascii 247 "{/}")   ; division sign
-(standard-display-ascii 248 "{/o}")  ; o with slash
-(standard-display-ascii 249 "{`u}")  ; u with grave accent
-(standard-display-ascii 250 "{'u}")  ; u with acute accent
-(standard-display-ascii 251 "{^u}")  ; u with circumflex accent
-(standard-display-g1    252 ?~)      ; u with diaeresis or umlaut mark
-(standard-display-ascii 253 "{'y}")  ; y with acute accent
-(standard-display-ascii 254 "{th}")  ; small thorn, Icelandic
-(standard-display-ascii 255 "{\"y}") ; small y with diaeresis or umlaut mark
-
-(provide 'iso-swed)
-
-;;; iso-swed.el ends here
diff --git a/lisp/obsolete/resume.el b/lisp/obsolete/resume.el
deleted file mode 100644 (file)
index b7f699d..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-;;; resume.el --- process command line args from within a suspended Emacs job
-
-;; Copyright (C) 1992, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: Joe Wells <jbw@bucsf.bu.edu>
-;; Adapted-By: ESR
-;; Keywords: processes
-;; Obsolete-since: 23.1
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; The purpose of this library is to handle command line arguments
-;; when you resume an existing Emacs job.
-
-;; In order to use it, you must put this code in your .emacs file.
-
-;; (add-hook 'suspend-hook 'resume-suspend-hook)
-;; (add-hook 'suspend-resume-hook 'resume-process-args)
-
-;; You can't get the benefit of this library by using the `emacs' command,
-;; since that always starts a new Emacs job.  Instead you must use a
-;; command called `edit' which knows how to resume an existing Emacs job
-;; if you have one, or start a new Emacs job if you don't have one.
-
-;; To define the `edit' command, run the script etc/emacs.csh (if you use CSH),
-;; or etc/emacs.bash if you use BASH.  You would normally do this in your
-;; login script.
-
-;; Stephan Gildea suggested bug fix (gildea@bbn.com).
-;; Ideas from Michael DeCorte and other people.
-
-;;; Code:
-
-(defvar resume-emacs-args-file (expand-file-name "~/.emacs_args")
-  "This file is where arguments are placed for a suspended Emacs job.")
-
-(defvar resume-emacs-args-buffer " *Command Line Args*"
-  "Buffer that is used by `resume-process-args'.")
-
-(defun resume-process-args ()
-  "Handler for command line args given when Emacs is resumed."
-  (let ((start-buffer (current-buffer))
-       (args-buffer (get-buffer-create resume-emacs-args-buffer))
-       length args
-       (command-line-default-directory default-directory))
-    (unwind-protect
-       (progn
-         (set-buffer args-buffer)
-         (erase-buffer)
-         ;; get the contents of resume-emacs-args-file
-         (condition-case ()
-             (let ((result (insert-file-contents resume-emacs-args-file)))
-               (setq length (car (cdr result))))
-           ;; the file doesn't exist, ergo no arguments
-           (file-error
-             (erase-buffer)
-             (setq length 0)))
-         (if (<= length 0)
-             (setq args nil)
-           ;; get the arguments from the buffer
-           (goto-char (point-min))
-           (while (not (eobp))
-             (skip-chars-forward " \t\n")
-             (let ((begin (point)))
-               (skip-chars-forward "^ \t\n")
-               (setq args (cons (buffer-substring begin (point)) args)))
-             (skip-chars-forward " \t\n"))
-           ;; arguments are now in reverse order
-           (setq args (nreverse args))
-           ;; make sure they're not read again
-           (erase-buffer))
-         (resume-write-buffer-to-file (current-buffer) resume-emacs-args-file)
-         ;; if nothing was in buffer, args will be null
-         (or (null args)
-             (setq command-line-default-directory
-                   (file-name-as-directory (car args))
-                   args (cdr args)))
-         ;; actually process the arguments
-         (command-line-1 args))
-      ;; If the command line args don't result in a find-file, the
-      ;; buffer will be left in args-buffer.  So we change back to the
-      ;; original buffer.  The reason I don't just use
-      ;; (let ((default-directory foo))
-      ;;    (command-line-1 args))
-      ;; in the context of the original buffer is because let does not
-      ;; work properly with buffer-local variables.
-      (if (eq (current-buffer) args-buffer)
-         (set-buffer start-buffer)))))
-
-;;;###autoload
-(defun resume-suspend-hook ()
-  "Clear out the file used for transmitting args when Emacs resumes."
-  (with-current-buffer (get-buffer-create resume-emacs-args-buffer)
-    (erase-buffer)
-    (resume-write-buffer-to-file (current-buffer) resume-emacs-args-file)))
-
-(defun resume-write-buffer-to-file (buffer file)
-  "Writes the contents of BUFFER into FILE, if permissions allow."
-  (if (not (file-writable-p file))
-      (error "No permission to write file %s" file))
-  (with-current-buffer buffer
-    (clear-visited-file-modtime)
-    (save-restriction
-      (widen)
-      (write-region (point-min) (point-max) file nil 'quiet))
-    (set-buffer-modified-p nil)))
-
-(provide 'resume)
-
-;;; resume.el ends here
diff --git a/lisp/obsolete/scribe.el b/lisp/obsolete/scribe.el
deleted file mode 100644 (file)
index c354e65..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-;;; scribe.el --- scribe mode, and its idiosyncratic commands
-
-;; Copyright (C) 1985, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: William Sommerfeld
-;; (according to ack.texi)
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: wp
-;; Obsolete-since: 22.1
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; A major mode for editing source in written for the Scribe text formatter.
-;; Knows about Scribe syntax and standard layout rules.  The command to
-;; run Scribe on a buffer is bogus; someone interested should fix it.
-
-;;; Code:
-
-(defvar compile-command)
-
-(defgroup scribe nil
-  "Scribe mode."
-  :prefix "scribe-"
-  :group 'wp)
-
-(defvar scribe-mode-syntax-table nil
-  "Syntax table used while in scribe mode.")
-
-(defvar scribe-mode-abbrev-table nil
-  "Abbrev table used while in scribe mode.")
-
-(defcustom scribe-fancy-paragraphs nil
-  "Non-nil makes Scribe mode use a different style of paragraph separation."
-  :type 'boolean
-  :group 'scribe)
-
-(defcustom scribe-electric-quote nil
-  "Non-nil makes insert of double quote use \\=`\\=` or \\='\\=' depending on context."
-  :type 'boolean
-  :group 'scribe)
-
-(defcustom scribe-electric-parenthesis nil
-  "Non-nil makes parenthesis char ( (]}> ) automatically insert its close
-if typed after an @Command form."
-  :type 'boolean
-  :group 'scribe)
-
-(defconst scribe-open-parentheses "[({<"
-  "Open parenthesis characters for Scribe.")
-
-(defconst scribe-close-parentheses "])}>"
-  "Close parenthesis characters for Scribe.
-These should match up with `scribe-open-parenthesis'.")
-
-(if (null scribe-mode-syntax-table)
-    (let ((st (syntax-table)))
-      (unwind-protect
-       (progn
-       (setq scribe-mode-syntax-table (copy-syntax-table
-                                       text-mode-syntax-table))
-       (set-syntax-table scribe-mode-syntax-table)
-       (modify-syntax-entry ?\" "    ")
-       (modify-syntax-entry ?\\ "    ")
-       (modify-syntax-entry ?@ "w   ")
-       (modify-syntax-entry ?< "(>  ")
-       (modify-syntax-entry ?> ")<  ")
-       (modify-syntax-entry ?[ "(]  ")
-       (modify-syntax-entry ?] ")[  ")
-       (modify-syntax-entry ?{ "(}  ")
-       (modify-syntax-entry ?} "){  ")
-       (modify-syntax-entry ?' "w   "))
-       (set-syntax-table st))))
-
-(defvar scribe-mode-map nil)
-
-(if scribe-mode-map
-    nil
-  (setq scribe-mode-map (make-sparse-keymap))
-  (define-key scribe-mode-map "\t" 'scribe-tab)
-  (define-key scribe-mode-map "\e\t" 'tab-to-tab-stop)
-  (define-key scribe-mode-map "\es" 'center-line)
-  (define-key scribe-mode-map "\e}" 'up-list)
-  (define-key scribe-mode-map "\eS" 'center-paragraph)
-  (define-key scribe-mode-map "\"" 'scribe-insert-quote)
-  (define-key scribe-mode-map "(" 'scribe-parenthesis)
-  (define-key scribe-mode-map "[" 'scribe-parenthesis)
-  (define-key scribe-mode-map "{" 'scribe-parenthesis)
-  (define-key scribe-mode-map "<" 'scribe-parenthesis)
-  (define-key scribe-mode-map "\C-c\C-c" 'scribe-chapter)
-  (define-key scribe-mode-map "\C-c\C-t" 'scribe-section)
-  (define-key scribe-mode-map "\C-c\C-s" 'scribe-subsection)
-  (define-key scribe-mode-map "\C-c\C-v" 'scribe-insert-environment)
-  (define-key scribe-mode-map "\C-c\C-e" 'scribe-bracket-region-be)
-  (define-key scribe-mode-map "\C-c[" 'scribe-begin)
-  (define-key scribe-mode-map "\C-c]" 'scribe-end)
-  (define-key scribe-mode-map "\C-c\C-i" 'scribe-italicize-word)
-  (define-key scribe-mode-map "\C-c\C-b" 'scribe-bold-word)
-  (define-key scribe-mode-map "\C-c\C-u" 'scribe-underline-word))
-
-;;;###autoload
-(define-derived-mode scribe-mode text-mode "Scribe"
-  "Major mode for editing files of Scribe (a text formatter) source.
-Scribe-mode is similar to text-mode, with a few extra commands added.
-\\{scribe-mode-map}
-
-Interesting variables:
-
-`scribe-fancy-paragraphs'
-  Non-nil makes Scribe mode use a different style of paragraph separation.
-
-`scribe-electric-quote'
-  Non-nil makes insert of double quote use \\=`\\=` or \\='\\=' depending on context.
-
-`scribe-electric-parenthesis'
-  Non-nil makes an open-parenthesis char (one of `([<{')
-  automatically insert its close if typed after an @Command form."
-  (set (make-local-variable 'comment-start) "@Comment[")
-  (set (make-local-variable 'comment-start-skip) (concat "@Comment[" scribe-open-parentheses "]"))
-  (set (make-local-variable 'comment-column) 0)
-  (set (make-local-variable 'comment-end) "]")
-  (set (make-local-variable 'paragraph-start)
-       (concat "\\([\n\f]\\)\\|\\(@\\w+["
-              scribe-open-parentheses
-              "].*["
-              scribe-close-parentheses
-              "]$\\)"))
-  (set (make-local-variable 'paragraph-separate)
-       (if scribe-fancy-paragraphs paragraph-start "$"))
-  (set (make-local-variable 'sentence-end)
-       "\\([.?!]\\|@:\\)[]\"')}]*\\($\\| $\\|\t\\|  \\)[ \t\n]*")
-  (set (make-local-variable 'compile-command)
-       (concat "scribe "
-              (if buffer-file-name
-                  (shell-quote-argument (buffer-file-name))))))
-
-(defun scribe-tab ()
-  (interactive)
-  (insert "@\\"))
-
-;; This algorithm could probably be improved somewhat.
-;;  Right now, it loses seriously...
-
-(defun scribe ()
-  "Run Scribe on the current buffer."
-  (interactive)
-  (call-interactively 'compile))
-
-(defun scribe-envelop-word (string count)
-  "Surround current word with Scribe construct @STRING[...].
-COUNT specifies how many words to surround.  A negative count means
-to skip backward."
-  (let ((spos (point)) (epos (point)) (ccoun 0) noparens)
-    (if (not (zerop count))
-       (progn (if (= (char-syntax (preceding-char)) ?w)
-                  (forward-sexp (min -1 count)))
-              (setq spos (point))
-              (if (looking-at (concat "@\\w[" scribe-open-parentheses "]"))
-                  (forward-char 2)
-                (goto-char epos)
-                (skip-chars-backward "\\W")
-                (forward-char -1))
-              (forward-sexp (max count 1))
-              (setq epos (point))))
-    (goto-char spos)
-    (while (and (< ccoun (length scribe-open-parentheses))
-               (save-excursion
-                 (or (search-forward (char-to-string
-                                      (aref scribe-open-parentheses ccoun))
-                                     epos t)
-                     (search-forward (char-to-string
-                                      (aref scribe-close-parentheses ccoun))
-                                     epos t)))
-               (setq ccoun (1+ ccoun))))
-    (if (>= ccoun (length scribe-open-parentheses))
-       (progn (goto-char epos)
-              (insert "@end(" string ")")
-              (goto-char spos)
-              (insert "@begin(" string ")"))
-      (goto-char epos)
-      (insert (aref scribe-close-parentheses ccoun))
-      (goto-char spos)
-      (insert "@" string (aref scribe-open-parentheses ccoun))
-      (goto-char epos)
-      (forward-char 3)
-      (skip-chars-forward scribe-close-parentheses))))
-
-(defun scribe-underline-word (count)
-  "Underline COUNT words around point by means of Scribe constructs."
-  (interactive "p")
-  (scribe-envelop-word "u" count))
-
-(defun scribe-bold-word (count)
-  "Boldface COUNT words around point by means of Scribe constructs."
-  (interactive "p")
-  (scribe-envelop-word "b" count))
-
-(defun scribe-italicize-word (count)
-  "Italicize COUNT words around point by means of Scribe constructs."
-  (interactive "p")
-  (scribe-envelop-word "i" count))
-
-(defun scribe-begin ()
-  (interactive)
-  (insert "\n")
-  (forward-char -1)
-  (scribe-envelop-word "Begin" 0)
-  (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-end ()
-  (interactive)
-  (insert "\n")
-  (forward-char -1)
-  (scribe-envelop-word "End" 0)
-  (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-chapter ()
-  (interactive)
-  (insert "\n")
-  (forward-char -1)
-  (scribe-envelop-word "Chapter" 0)
-  (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-section ()
-  (interactive)
-  (insert "\n")
-  (forward-char -1)
-  (scribe-envelop-word "Section" 0)
-  (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-subsection ()
-  (interactive)
-  (insert "\n")
-  (forward-char -1)
-  (scribe-envelop-word "SubSection" 0)
-  (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-bracket-region-be (env min max)
-  (interactive "sEnvironment: \nr")
-  (save-excursion
-    (goto-char max)
-    (insert "@end(" env ")\n")
-    (goto-char min)
-    (insert "@begin(" env ")\n")))
-
-(defun scribe-insert-environment (env)
-  (interactive "sEnvironment: ")
-  (scribe-bracket-region-be env (point) (point))
-  (forward-line 1)
-  (insert ?\n)
-  (forward-char -1))
-
-(defun scribe-insert-quote (count)
-  "Insert \\=`\\=`, \\='\\=' or \" according to preceding character.
-If `scribe-electric-quote' is non-nil, insert \\=`\\=`, \\='\\=' or \" according
-to preceding character.  With numeric arg N, always insert N \" characters.
-Else just insert \"."
-  (interactive "P")
-  (if (or count (not scribe-electric-quote))
-      (self-insert-command (prefix-numeric-value count))
-    (let (lastfore lastback lastquote)
-      (insert
-       (cond
-       ((= (preceding-char) ?\\) ?\")
-       ((bobp) "``")
-       (t
-        (setq lastfore (save-excursion (and (search-backward
-                                             "``" (- (point) 1000) t)
-                                            (point)))
-              lastback (save-excursion (and (search-backward
-                                             "''" (- (point) 1000) t)
-                                            (point)))
-              lastquote (save-excursion (and (search-backward
-                                              "\"" (- (point) 100) t)
-                                             (point))))
-        (if (not lastquote)
-            (cond ((not lastfore) "``")
-                  ((not lastback) "''")
-                  ((> lastfore lastback) "''")
-                  (t "``"))
-          (cond ((and (not lastback) (not lastfore)) "\"")
-                ((and lastback (not lastfore) (> lastquote lastback)) "\"")
-                ((and lastback (not lastfore) (> lastback lastquote)) "``")
-                ((and lastfore (not lastback) (> lastquote lastfore)) "\"")
-                ((and lastfore (not lastback) (> lastfore lastquote)) "''")
-                ((and (> lastquote lastfore) (> lastquote lastback)) "\"")
-                ((> lastfore lastback) "''")
-                (t "``")))))))))
-
-(defun scribe-parenthesis (count)
-  "If scribe-electric-parenthesis is non-nil, insertion of an open-parenthesis
-character inserts the following close parenthesis character if the
-preceding text is of the form @Command."
-  (interactive "P")
-  (self-insert-command (prefix-numeric-value count))
-  (let (at-command paren-char point-save)
-    (if (or count (not scribe-electric-parenthesis))
-       nil
-      (save-excursion
-       (forward-char -1)
-       (setq point-save (point))
-       (skip-chars-backward (concat "^ \n\t\f" scribe-open-parentheses))
-       (setq at-command (and (equal (following-char) ?@)
-                             (/= (point) (1- point-save)))))
-      (if (and at-command
-              (setq paren-char
-                    (string-match (regexp-quote
-                                   (char-to-string (preceding-char)))
-                                  scribe-open-parentheses)))
-         (save-excursion
-           (insert (aref scribe-close-parentheses paren-char)))))))
-
-(provide 'scribe)
-
-;;; scribe.el ends here
diff --git a/lisp/obsolete/spell.el b/lisp/obsolete/spell.el
deleted file mode 100644 (file)
index 03047e9..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-;;; spell.el --- spelling correction interface for Emacs
-
-;; Copyright (C) 1985, 2001-2016 Free Software Foundation, Inc.
-
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: wp, unix
-;; Obsolete-since: 23.1
-;;   (not in obsolete/ directory then, but all functions marked obsolete)
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This mode provides an Emacs interface to the UNIX spell(1) program.
-;; Entry points are `spell-buffer', `spell-word', `spell-region' and
-;; `spell-string'.
-
-;; See also ispell.el for an interface to the ispell program.
-
-;;; Code:
-
-(defgroup spell nil
-  "Interface to the UNIX spell(1) program."
-  :prefix "spell-"
-  :group 'applications)
-
-(defcustom spell-command "spell"
-  "Command to run the spell program."
-  :type 'string
-  :group 'spell)
-
-(defcustom spell-filter nil
-  "Filter function to process text before passing it to spell program.
-This function might remove text-processor commands.
-nil means don't alter the text before checking it."
-  :type '(choice (const nil) function)
-  :group 'spell)
-
-;;;###autoload
-(put 'spell-filter 'risky-local-variable t)
-
-;;;###autoload
-(defun spell-buffer ()
-  "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.
-If you do not want to change a word, just give the same word
-as its \"correct\" spelling; then the query replace is skipped."
-  (interactive)
-  ;; Don't warn about spell-region being obsolete.
-  (with-no-warnings
-    (spell-region (point-min) (point-max) "buffer")))
-;;;###autoload
-(make-obsolete 'spell-buffer 'ispell-buffer "23.1")
-
-;;;###autoload
-(defun spell-word ()
-  "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."
-  (interactive)
-  (let (beg end spell-filter)
-    (save-excursion
-     (if (not (looking-at "\\<"))
-        (forward-word -1))
-     (setq beg (point))
-     (forward-word 1)
-     (setq end (point)))
-    ;; Don't warn about spell-region being obsolete.
-    (with-no-warnings
-      (spell-region beg end (buffer-substring beg end)))))
-;;;###autoload
-(make-obsolete 'spell-word 'ispell-word "23.1")
-
-;;;###autoload
-(defun spell-region (start end &optional description)
-  "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:
-for example, \"word\"."
-  (interactive "r")
-  (let ((filter spell-filter)
-       (buf (get-buffer-create " *temp*")))
-    (with-current-buffer buf
-     (widen)
-     (erase-buffer))
-    (message "Checking spelling of %s..." (or description "region"))
-    (if (and (null filter) (= ?\n (char-after (1- end))))
-       (if (string= "spell" spell-command)
-           (call-process-region start end "spell" nil buf)
-         (call-process-region start end shell-file-name
-                              nil buf nil "-c" spell-command))
-      (let ((oldbuf (current-buffer)))
-       (with-current-buffer buf
-          (insert-buffer-substring oldbuf start end)
-          (or (bolp) (insert ?\n))
-          (if filter (funcall filter))
-          (if (string= "spell" spell-command)
-              (call-process-region (point-min) (point-max) "spell" t buf)
-            (call-process-region (point-min) (point-max) shell-file-name
-                                 t buf nil "-c" spell-command)))))
-    (message "Checking spelling of %s...%s"
-            (or description "region")
-            (if (with-current-buffer buf
-                   (> (buffer-size) 0))
-                "not correct"
-              "correct"))
-    (let (word newword
-         (case-fold-search t)
-         (case-replace t))
-      (while (with-current-buffer buf
-               (> (buffer-size) 0))
-       (with-current-buffer buf
-          (goto-char (point-min))
-          (setq word (downcase
-                      (buffer-substring (point)
-                                        (progn (end-of-line) (point)))))
-          (forward-char 1)
-          (delete-region (point-min) (point))
-          (setq newword
-                (read-string (concat "`" word
-                                     "' not recognized; edit a replacement: ")
-                             word))
-          (flush-lines (concat "^" (regexp-quote word) "$")))
-       (if (not (equal word newword))
-           (progn
-            (goto-char (point-min))
-            (query-replace-regexp (concat "\\b" (regexp-quote word) "\\b")
-                                  newword)))))))
-;;;###autoload
-(make-obsolete 'spell-region 'ispell-region "23.1")
-
-;;;###autoload
-(defun spell-string (string)
-  "Check spelling of string supplied as argument."
-  (interactive "sSpell string: ")
-  (with-temp-buffer
-    (widen)
-    (erase-buffer)
-    (insert string "\n")
-    (if (string= "spell" spell-command)
-        (call-process-region (point-min) (point-max) "spell"
-                             t t)
-      (call-process-region (point-min) (point-max) shell-file-name
-                           t t nil "-c" spell-command))
-    (if (= 0 (buffer-size))
-        (message "%s is correct" string)
-      (goto-char (point-min))
-      (while (search-forward "\n" nil t)
-        (replace-match " "))
-      (message "%sincorrect" (buffer-substring 1 (point-max))))))
-;;;###autoload
-(make-obsolete 'spell-string "The `spell' package is obsolete - use `ispell'."
-               "23.1")
-
-(provide 'spell)
-
-;;; spell.el ends here
diff --git a/lisp/obsolete/swedish.el b/lisp/obsolete/swedish.el
deleted file mode 100644 (file)
index 38dce00..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-;;; swedish.el --- miscellaneous functions for dealing with Swedish
-
-;; Copyright (C) 1988, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: Howard Gayle
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: i18n
-;; Obsolete-since: 22.1
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Fixme: Is this actually used?  if so, it should be in language,
-;; possibly as a feature property of Swedish, probably defining a
-;; `swascii' coding system.
-
-;;; Code:
-
-;; Written by Howard Gayle.  See case-table.el for details.
-
-;; See iso-swed.el for a description of the character set.
-
-(defvar mail-send-hook)
-(defvar news-group-hook-alist)
-(defvar news-inews-hook)
-
-(defvar swedish-re
-  "[ \t\n]\\(och\\|att\\|en\\|{r\\|\\[R\\|p}\\|P\\]\\|som\\|det\\|av\\|den\\|f|r\\|F\\\\R\\)[ \t\n.,?!:;'\")}]"
-  "Regular expression for common Swedish words.")
-
-(defvar swascii-to-8859-trans
-  (let ((string (make-string 256 ? ))
-       (i 0))
-    (while (< i 256)
-      (aset string i i)
-      (setq i (1+ i)))
-    (aset string ?\[ 196)
-    (aset string ?\] 197)
-    (aset string ?\\ 214)
-    (aset string ?^ 220)
-    (aset string ?\{ 228)
-    (aset string ?\} 229)
-    (aset string ?\` 233)
-    (aset string ?\| 246)
-    (aset string ?~ 252)
-    string)
-  "Trans table from SWASCII to 8859.")
-
-; $ is not converted because it almost always means US
-; dollars, not general currency sign.  @ is not converted
-; because it is more likely to be an at sign in a mail address
-; than an E with acute accent.
-
-(defun swascii-to-8859-buffer ()
-  "Convert characters in buffer from Swedish/Finnish-ascii to ISO 8859/1.
-Works even on read-only buffers.  `$' and `@' are not converted."
-  (interactive)
-  (let  ((buffer-read-only nil))
-    (translate-region (point-min) (point-max) swascii-to-8859-trans)))
-
-(defun swascii-to-8859-buffer-maybe ()
-  "Call swascii-to-8859-buffer if the buffer looks like Swedish-ascii.
-Leaves point just after the word that looks Swedish."
-  (interactive)
-  (let ((case-fold-search t))
-    (if (re-search-forward swedish-re nil t)
-       (swascii-to-8859-buffer))))
-
-(setq rmail-show-message-hook 'swascii-to-8859-buffer-maybe)
-
-(setq news-group-hook-alist
-      (append '(("^swnet." . swascii-to-8859-buffer-maybe))
-             (bound-and-true-p news-group-hook-alist)))
-
-(defvar 8859-to-swascii-trans
-  (let ((string (make-string 256 ? ))
-       (i 0))
-    (while (< i 256)
-      (aset string i i)
-      (setq i (1+ i)))
-    (aset string 164 ?$)
-    (aset string 196 ?\[)
-    (aset string 197 ?\])
-    (aset string 201 ?@)
-    (aset string 214 ?\\)
-    (aset string 220 ?^)
-    (aset string 228 ?\{)
-    (aset string 229 ?\})
-    (aset string 233 ?\`)
-    (aset string 246 ?\|)
-    (aset string 252 ?~)
-    string)
-  "8859 to SWASCII trans table.")
-
-(defun 8859-to-swascii-buffer ()
-   "Convert characters in buffer from ISO 8859/1 to Swedish/Finnish-ascii."
-   (interactive "*")
-   (translate-region (point-min) (point-max) 8859-to-swascii-trans))
-
-(setq mail-send-hook  '8859-to-swascii-buffer)
-(setq news-inews-hook '8859-to-swascii-buffer)
-
-;; It's not clear what purpose is served by a separate
-;; Swedish mode that differs from Text mode only in having
-;; a separate abbrev table.  Nothing says that the abbrevs you
-;; define in Text mode have to be English!
-
-;(defvar swedish-mode-abbrev-table nil
-;   "Abbrev table used while in swedish mode.")
-;(define-abbrev-table 'swedish-mode-abbrev-table ())
-
-;(defun swedish-mode ()
-;   "Major mode for editing Swedish text intended for humans to
-;read.  Special commands:\\{text-mode-map}
-;Turning on swedish-mode calls the value of the variable
-;text-mode-hook, if that value is non-nil."
-;   (interactive)
-;   (kill-all-local-variables)
-;   (use-local-map text-mode-map)
-;   (setq mode-name "Swedish")
-;   (setq major-mode 'swedish-mode)
-;   (setq local-abbrev-table swedish-mode-abbrev-table)
-;   (set-syntax-table text-mode-syntax-table)
-;   (run-mode-hooks 'text-mode-hook))
-
-;(defun indented-swedish-mode ()
-;   "Major mode for editing indented Swedish text intended for
-;humans to read.\\{indented-text-mode-map}
-;Turning on indented-swedish-mode calls the value of the
-;variable text-mode-hook, if that value is non-nil."
-;   (interactive)
-;   (kill-all-local-variables)
-;   (use-local-map text-mode-map)
-;   (define-abbrev-table 'swedish-mode-abbrev-table ())
-;   (setq local-abbrev-table swedish-mode-abbrev-table)
-;   (set-syntax-table text-mode-syntax-table)
-;   (make-local-variable 'indent-line-function)
-;   (setq indent-line-function 'indent-relative-maybe)
-;   (use-local-map indented-text-mode-map)
-;   (setq mode-name "Indented Swedish")
-;   (setq major-mode 'indented-swedish-mode)
-;   (run-mode-hooks 'text-mode-hook))
-
-(provide 'swedish)
-
-;;; swedish.el ends here
diff --git a/lisp/obsolete/sym-comp.el b/lisp/obsolete/sym-comp.el
deleted file mode 100644 (file)
index c2eab2c..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-;;; sym-comp.el --- mode-dependent symbol completion
-
-;; Copyright (C) 2004, 2008-2016 Free Software Foundation, Inc.
-
-;; Author: Dave Love <fx@gnu.org>
-;; Keywords: extensions
-;; URL: http://www.loveshack.ukfsn.org/emacs
-;; Obsolete-since: 23.2
-
-;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This defines `symbol-complete', which is a generalization of the
-;; old `lisp-complete-symbol'.  It provides the following hooks to
-;; allow major modes to set up completion appropriate for the mode:
-;; `symbol-completion-symbol-function',
-;; `symbol-completion-completions-function',
-;; `symbol-completion-predicate-function',
-;; `symbol-completion-transform-function'.  Typically it is only
-;; necessary for a mode to set
-;; `symbol-completion-completions-function' locally and to bind
-;; `symbol-complete' appropriately.
-
-;; It's unfortunate that there doesn't seem to be a good way of
-;; combining this with `complete-symbol'.
-
-;; There is also `symbol-completion-try-complete', for use with
-;; Hippie-exp.
-
-;;; Code:
-
-;;;; Mode-dependent symbol completion.
-
-(defun symbol-completion-symbol ()
-  "Default `symbol-completion-symbol-function'.
-Uses `current-word' with the buffer narrowed to the part before
-point."
-  (save-restriction
-    ;; Narrow in case point is in the middle of a symbol -- we want
-    ;; just the preceding part.
-    (narrow-to-region (point-min) (point))
-    (current-word)))
-
-(defvar symbol-completion-symbol-function 'symbol-completion-symbol
-  "Function to return a partial symbol before point for completion.
-The value it returns should be a string (or nil).
-Major modes may set this locally if the default isn't appropriate.
-
-Beware: the length of the string STR returned need to be equal to the length
-of text before point that's subject to completion.  Typically, this amounts
-to saying that STR is equal to
-\(buffer-substring (- (point) (length STR)) (point)).")
-
-(defvar symbol-completion-completions-function nil
-  "Function to return possible symbol completions.
-It takes an argument which is the string to be completed and
-returns a value suitable for the second argument of
-`try-completion'.  This value need not use the argument, i.e. it
-may be all possible completions, such as `obarray' in the case of
-Emacs Lisp.
-
-Major modes may set this locally to allow them to support
-`symbol-complete'.  See also `symbol-completion-symbol-function',
-`symbol-completion-predicate-function' and
-`symbol-completion-transform-function'.")
-
-(defvar symbol-completion-predicate-function nil
-  "If non-nil, function to return a predicate for selecting symbol completions.
-The function gets two args, the positions of the beginning and
-end of the symbol to be completed.
-
-Major modes may set this locally if the default isn't
-appropriate.  This is a function returning a predicate so that
-the predicate can be context-dependent, e.g. to select only
-function names if point is at a function call position.  The
-function's args may be useful for determining the context.")
-
-(defvar symbol-completion-transform-function nil
-  "If non-nil, function to transform symbols in the symbol-completion buffer.
-E.g., for Lisp, it may annotate the symbol as being a function,
-not a variable.
-
-The function takes the symbol name as argument.  If it needs to
-annotate this, it should return a value suitable as an element of
-the list passed to `display-completion-list'.
-
-The predicate being used for selecting completions (from
-`symbol-completion-predicate-function') is available
-dynamically-bound as `symbol-completion-predicate' in case the
-transform needs it.")
-
-(defvar symbol-completion-predicate)
-
-;;;###autoload
-(defun symbol-complete (&optional predicate)
-  "Perform completion of the symbol preceding point.
-This is done in a way appropriate to the current major mode,
-perhaps by interrogating an inferior interpreter.  Compare
-`complete-symbol'.
-If no characters can be completed, display a list of possible completions.
-Repeating the command at that point scrolls the list.
-
-When called from a program, optional arg PREDICATE is a predicate
-determining which symbols are considered.
-
-This function requires `symbol-completion-completions-function'
-to be set buffer-locally.  Variables `symbol-completion-symbol-function',
-`symbol-completion-predicate-function' and
-`symbol-completion-transform-function' are also consulted."
-  (interactive)
-  ;; Fixme: Punt to `complete-symbol' in this case?
-  (unless (functionp symbol-completion-completions-function)
-    (error "symbol-completion-completions-function not defined"))
-  (let* ((pattern (or (funcall symbol-completion-symbol-function)
-                      (error "No preceding symbol to complete")))
-         ;; FIXME: We assume below that `pattern' holds the text just
-         ;; before point.  This is a problem in the way
-         ;; symbol-completion-symbol-function was defined.
-         (predicate (or predicate
-                        (if symbol-completion-predicate-function
-                            (funcall symbol-completion-predicate-function
-                                     (- (point) (length pattern))
-                                     (point)))))
-         (completions (funcall symbol-completion-completions-function
-                               pattern))
-         ;; In case the transform needs to access it.
-         (symbol-completion-predicate predicate)
-         (completion-extra-properties
-          (if (functionp symbol-completion-transform-function)
-              '(:annotation-function
-                (lambda (str)
-                  (car-safe (cdr-safe
-                             (funcall symbol-completion-transform-function
-                                      str))))))))
-    (completion-in-region (- (point) (length pattern)) (point)
-                          completions predicate)))
-\f
-(defvar he-search-string)
-(defvar he-tried-table)
-(defvar he-expand-list)
-(declare-function he-init-string "hippie-exp" (beg end))
-(declare-function he-string-member "hippie-exp" (str lst &optional trans-case))
-(declare-function he-substitute-string "hippie-exp" (str &optional trans-case))
-(declare-function he-reset-string "hippie-exp" ())
-
-;;;###autoload
-(defun symbol-completion-try-complete (old)
-  "Completion function for use with `hippie-expand'.
-Uses `symbol-completion-symbol-function' and
-`symbol-completion-completions-function'.  It is intended to be
-used something like this in a major mode which provides symbol
-completion:
-
-  (if (featurep \\='hippie-exp)
-      (set (make-local-variable \\='hippie-expand-try-functions-list)
-          (cons \\='symbol-completion-try-complete
-                 hippie-expand-try-functions-list)))"
-  (when (and symbol-completion-symbol-function
-            symbol-completion-completions-function)
-    (unless old
-      (let ((symbol (funcall symbol-completion-symbol-function)))
-       (he-init-string (- (point) (length symbol)) (point))
-       (if (not (he-string-member he-search-string he-tried-table))
-           (push he-search-string he-tried-table))
-       (setq he-expand-list
-             (and symbol
-                  (funcall symbol-completion-completions-function symbol)))))
-    (while (and he-expand-list
-               (he-string-member (car he-expand-list) he-tried-table))
-      (pop he-expand-list))
-    (if he-expand-list
-       (progn
-         (he-substitute-string (pop he-expand-list))
-         t)
-      (if old (he-reset-string))
-      nil)))
-\f
-;;; Emacs Lisp symbol completion.
-
-(defun lisp-completion-symbol ()
-  "`symbol-completion-symbol-function' for Lisp."
-  (let ((end (point))
-       (beg (with-syntax-table emacs-lisp-mode-syntax-table
-              (save-excursion
-                (backward-sexp 1)
-                (while (= (char-syntax (following-char)) ?\')
-                  (forward-char 1))
-                (point)))))
-    (buffer-substring-no-properties beg end)))
-
-(defun lisp-completion-predicate (beg end)
-  "`symbol-completion-predicate-function' for Lisp."
-  (save-excursion
-    (goto-char beg)
-    (if (not (eq (char-before) ?\())
-       (lambda (sym)                   ;why not just nil ?   -sm
-                                       ;To avoid interned symbols with
-                                       ;no slots.  -- fx
-         (or (boundp sym) (fboundp sym)
-             (symbol-plist sym)))
-      ;; Looks like a funcall position.  Let's double check.
-      (if (condition-case nil
-             (progn (up-list -2) (forward-char 1)
-                    (eq (char-after) ?\())
-           (error nil))
-         ;; If the first element of the parent list is an open
-         ;; parenthesis we are probably not in a funcall position.
-         ;; Maybe a `let' varlist or something.
-         nil
-       ;; Else, we assume that a function name is expected.
-       'fboundp))))
-
-(defun lisp-symbol-completion-transform ()
-  "`symbol-completion-transform-function' for Lisp."
-  (lambda (elt)
-    (if (and (not (eq 'fboundp symbol-completion-predicate))
-            (fboundp (intern elt)))
-       (list elt " <f>")
-      elt)))
-
-(provide 'sym-comp)
-
-;;; sym-comp.el ends here
index 8c118ec7dd0bb9e10a961e3e46eb40a55ad75e7a..9b6702f01eddad8361639d37c49bf4a2f2387843 100644 (file)
        * ox-html.el (org-html-link): Don't skip the link description when
        it matches the name of the headline it targets.
 
-       * ox-ascii.el (ascii): Remove inexistant function.
+       * ox-ascii.el (ascii): Remove nonexistent function.
 
        * ox-icalendar.el (icalendar): Ignore footnotes.
        (org-icalendar--combine-files): Small refactoring.
        (pcomplete/org-mode/file-option/email)
        (pcomplete/org-mode/file-option/date): Use the new macro to offer
        completion over default values for #+OPTIONS, #+TITLE, #+AUTHOR,
-       #+EMAIL and #+DATE.
+       #+EMAIL and #+DATE.
 
        * org-agenda.el (org-agenda-write): Fix bug when writing agenda to
        an external file while `org-agenda-sticky' is non-nil.
index ff83162a2d85b4cc30ca21c736c7596b6ff88245..d0a0d9b6d555aa8726a6da814292b366e8412525 100644 (file)
@@ -309,6 +309,8 @@ name of the code block."
                                   org-confirm-babel-evaluate)))
            (code-block      (if ,info (format  " %s "  ,lang) " "))
            (block-name      (if ,name (format " (%s) " ,name) " ")))
+       ;; Silence byte-compiler is `body' doesn't use those vars.
+       (ignore noeval query)
        ,@body)))
 
 (defsubst org-babel-check-evaluate (info)
@@ -546,6 +548,8 @@ multiple blocks are being executed (e.g., in chained execution
 through use of the :var header argument) this marker points to
 the outer-most code block.")
 
+(defvar *this*)
+
 ;;;###autoload
 (defun org-babel-execute-src-block (&optional arg info params)
   "Execute the current source code block.
@@ -589,7 +593,8 @@ block."
            (end-of-line 1) (forward-char 1)
            (let ((result (org-babel-read-result)))
              (message (replace-regexp-in-string
-                       "%" "%%" (format "%S" result))) result)))
+                       "%" "%%" (format "%S" result)))
+              result)))
         ((org-babel-confirm-evaluate
           (let ((i info)) (setf (nth 2 i) merged-params) i))
          (let* ((lang (nth 0 info))
@@ -685,7 +690,7 @@ org-babel-expand-body:lang function."
               "\n")))
 
 ;;;###autoload
-(defun org-babel-expand-src-block (&optional arg info params)
+(defun org-babel-expand-src-block (&optional _arg info params)
   "Expand the current source code block.
 Expand according to the source code block's header
 arguments and pop open the results in a preview buffer."
@@ -739,8 +744,7 @@ arguments and pop open the results in a preview buffer."
   (let ((results (copy-sequence original)))
     (dolist (new-list others)
       (dolist (arg-pair new-list)
-       (let ((header (car arg-pair))
-             (args (cdr arg-pair)))
+       (let ((header (car arg-pair)))
          (setq results
                (cons arg-pair (org-remove-if
                                (lambda (pair) (equal header (car pair)))
@@ -827,7 +831,7 @@ arguments and pop open the results in a preview buffer."
 (add-hook 'org-tab-first-hook 'org-babel-header-arg-expand)
 
 ;;;###autoload
-(defun org-babel-load-in-session (&optional arg info)
+(defun org-babel-load-in-session (&optional _arg info)
   "Load the body of the current source-code block.
 Evaluate the header arguments for the source block before
 entering the session.  After loading the body this pops open the
@@ -896,7 +900,7 @@ with a prefix argument then this is passed on to
 (defvar org-src-window-setup)
 
 ;;;###autoload
-(defun org-babel-switch-to-session-with-code (&optional arg info)
+(defun org-babel-switch-to-session-with-code (&optional arg _info)
   "Switch to code buffer and display session."
   (interactive "P")
   (let ((swap-windows
@@ -1021,7 +1025,13 @@ end-body --------- point at the end of the body"
                   (body (match-string 5))
                   (beg-body (match-beginning 5))
                   (end-body (match-end 5)))
-              ,@body
+               ;; Silence byte-compiler in case `body' doesn't use all
+               ;; those variables.
+               (ignore full-block beg-block end-block lang
+                       beg-lang end-lang switches beg-switches
+                       end-switches header-args beg-header-args
+                       end-header-args body beg-body end-body)
+               ,@body
               (goto-char end-block)))))
        (unless visited-p (kill-buffer to-be-removed))
        (goto-char point))))
@@ -1532,7 +1542,7 @@ Note: this function removes any hlines in TABLE."
         (rownames (funcall (lambda ()
                              (let ((tp table))
                                (mapcar
-                                (lambda (row)
+                                (lambda (_row)
                                   (prog1
                                       (pop (car tp))
                                     (setq tp (cdr tp))))
@@ -1686,7 +1696,7 @@ NAME, or nil if no such block exists.  Set match data according to
 org-babel-named-src-block-regexp."
   (save-excursion
     (let ((case-fold-search t)
-         (regexp (org-babel-named-src-block-regexp-for-name name)) msg)
+         (regexp (org-babel-named-src-block-regexp-for-name name)))
       (goto-char (point-min))
       (when (or (re-search-forward regexp nil t)
                (re-search-backward regexp nil t))
@@ -1724,7 +1734,8 @@ buffer or nil if no such result exists."
       (catch 'is-a-code-block
        (when (re-search-forward
               (concat org-babel-result-regexp
-                      "[ \t]" (regexp-quote name) "[ \t]*[\n\f\v\r]") nil t)
+                      "[ \t]" (regexp-quote name) "[ \t]*[\n\f\v\r]")
+               nil t)
          (when (and (string= "name" (downcase (match-string 1)))
                     (or (beginning-of-line 1)
                         (looking-at org-babel-src-block-regexp)
index 8e06aaa04c6b11e83b7b29c797a64e4c723f718b..f0d393f8e8b0e9622b15194dba6c27a07c9c275e 100644 (file)
@@ -232,6 +232,8 @@ There is a mode hook, and keybindings for `org-edit-src-exit' and
 `org-edit-src-save'")
 
 (defvar org-edit-src-code-timer nil)
+(defvar org-inhibit-startup)
+
 (defun org-edit-src-code (&optional context code edit-buffer-name)
   "Edit the source CODE block at point.
 The code is copied to a separate buffer and the appropriate mode
@@ -265,7 +267,7 @@ the display of windows containing the Org buffer and the code buffer."
           ;; just one empty line, i.e. beg == end.
           (end (copy-marker (make-marker) t))
           (allow-write-back-p (null code))
-          block-nindent total-nindent ovl lang lang-f single lfmt buffer msg
+          block-nindent total-nindent ovl lang lang-f single buffer msg
           begline markline markcol line col transmitted-variables)
       (setq beg (move-marker beg (nth 0 info))
            end (move-marker end (nth 1 info))
@@ -471,7 +473,6 @@ the fragment in the Org-mode buffer."
        (org-mode-p (derived-mode-p 'org-mode))
        (beg (make-marker))
        (end (make-marker))
-       (preserve-indentation org-src-preserve-indentation)
        block-nindent ovl beg1 end1 code begline buffer)
     (beginning-of-line 1)
     (if (looking-at "[ \t]*[^:\n \t]")
@@ -928,6 +929,8 @@ fontification of code blocks see `org-src-fontify-block' and
           '(font-lock-fontified t fontified t font-lock-multiline t))
          (set-buffer-modified-p modified)))))
 
+(defvar org-src-fontify-natively)
+
 (defun org-src-fontify-block ()
   "Fontify code block at point."
   (interactive)
index 61bcb451d70af10cc3ccc25835d825df5706a9d9..1921a59bbd051147a4cff71f4f4c2ca581c37e04 100644 (file)
@@ -17459,8 +17459,7 @@ When SUPPRESS-TMP-DELAY is non-nil, suppress delays like \"--2d\"."
                         (+ (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)))
+                        (+ (if (eq org-ts-what 'year) n 0)   (nth 5 time0))))
       (when (and (member org-ts-what '(hour minute))
                 extra
                 (string-match "-\\([012][0-9]\\):\\([0-5][0-9]\\)" extra))
@@ -22673,8 +22672,10 @@ When optional argument END is non-nil, use end of date-range or
 time-range, if possible.
 
 The optional ZONE is omitted or nil for Emacs local time, t for
-Universal Time, `wall' for system wall clock time, or a string as in
-the TZ environment variable."
+Universal Time, `wall' for system wall clock time, or a string as
+in the TZ environment variable.  It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time')
+applied without consideration for daylight saving time."
   (format-time-string
    format
    (apply 'encode-time
index f84a1ceba4199c2321f689f241c2034adeb6164a..e4e8f3a2c533d8e92e29b624b8fcbbb5ffde4009 100644 (file)
              (pcomplete-entries))
            nil 'identity))))
 
+;;;###autoload
+
+(defun pcomplete/find ()
+  "Completion for the GNU find utility."
+  (let ((prec (pcomplete-arg 'last -1)))
+    (cond ((and (pcomplete-match "^-" 'last)
+                (string= "find" prec))
+           (pcomplete-opt "HLPDO"))
+          ((pcomplete-match "^-" 'last)
+           (while (pcomplete-here
+                   '("-amin" "-anewer" "-atime" "-cmin" "-cnewer" "-context"
+                     "-ctime" "-daystart" "-delete" "-depth" "-empty" "-exec"
+                     "-execdir" "-executable" "-false" "-fls" "-follow"
+                     "-fprint" "-fprint0" "-fprintf" "-fstype" "-gid" "-group"
+                     "-help" "-ignore_readdir_race" "-ilname" "-iname"
+                     "-inum" "-ipath" "-iregex" "-iwholename"
+                     "-links" "-lname" "-ls" "-maxdepth"
+                     "-mindepth" "-mmin" "-mount" "-mtime"
+                     "-name" "-newer" "-nogroup" "-noignore_readdir_race"
+                     "-noleaf" "-nouser" "-nowarn" "-ok"
+                     "-okdir" "-path" "-perm" "-print"
+                     "-print0" "-printf" "-prune" "-quit"
+                     "-readable" "-regex" "-regextype" "-samefile"
+                     "-size" "-true" "-type" "-uid"
+                     "-used" "-user" "-version" "-warn"
+                     "-wholename" "-writable" "-xdev" "-xtype"))))
+          ((string= "-type" prec)
+           (while (pcomplete-here (list "b" "c" "d" "p" "f" "l" "s" "D"))))
+          ((string= "-xtype" prec)
+           (while (pcomplete-here (list "b" "c" "d" "p" "f" "l" "s"))))
+          ((or (string= prec "-exec")
+               (string= prec "-execdir"))
+           (while (pcomplete-here* (funcall pcomplete-command-completion-function)
+                                   (pcomplete-arg 'last) t))))
+    (while (pcomplete-here (pcomplete-dirs) nil 'identity))))
+
 ;;;###autoload
 (defalias 'pcomplete/gdb 'pcomplete/xargs)
 
index 25fa3f66ef1ac35ea1fec6e6e962981ac2f1e933..4871c459023f17e57ff4e24644e559dd797e112a 100644 (file)
@@ -302,6 +302,19 @@ specifies the file to choose the fortune from."
                            (split-string fortune-program-options)
                          fortune-program-options) (list fort-file)))))))
 
+;;;###autoload
+(defun fortune-message (&optional file)
+  "Display a fortune cookie to the mini-buffer.
+If called with a prefix, it has the same behavior as `fortune'.
+Optional FILE is a fortune file from which a cookie will be selected."
+  (interactive (list (if current-prefix-arg
+                         (fortune-ask-file)
+                       fortune-file)))
+  (with-temp-buffer
+    (let ((fortune-buffer-name (current-buffer)))
+      (fortune-in-buffer t file)
+      (message "%s" (buffer-string)))))
+
 ;;;###autoload
 (defun fortune (&optional file)
   "Display a fortune cookie.
index 243f0190ee07b5e470fa8a3cd9df210e11c07d6e..371c7133c743b2233dbf0069b24841be6b37ad55 100644 (file)
 (defvar snake-velocity-x 1)
 (defvar snake-velocity-y 0)
 (defvar snake-positions nil)
-(defvar snake-cycle 0)
 (defvar snake-score 0)
 (defvar snake-paused nil)
 (defvar snake-moved-p nil)
@@ -164,7 +163,6 @@ and then start moving it leftwards.")
 (make-variable-buffer-local 'snake-velocity-x)
 (make-variable-buffer-local 'snake-velocity-y)
 (make-variable-buffer-local 'snake-positions)
-(make-variable-buffer-local 'snake-cycle)
 (make-variable-buffer-local 'snake-score)
 (make-variable-buffer-local 'snake-paused)
 (make-variable-buffer-local 'snake-moved-p)
@@ -237,7 +235,6 @@ and then start moving it leftwards.")
        snake-velocity-x        snake-initial-velocity-x
        snake-velocity-y        snake-initial-velocity-y
        snake-positions         nil
-       snake-cycle             1
        snake-score             0
        snake-paused            nil
        snake-moved-p           nil
@@ -251,6 +248,14 @@ and then start moving it leftwards.")
       (cl-incf y snake-velocity-y)))
   (snake-update-score))
 
+(defun snake-set-dot ()
+  (let ((x (random snake-width))
+       (y (random snake-height)))
+    (while (not (= (gamegrid-get-cell x y) snake-blank))
+      (setq x (random snake-width))
+      (setq y (random snake-height)))
+    (gamegrid-set-cell x y snake-dot)))
+
 (defun snake-update-game (snake-buffer)
   "Called on each clock tick.
 Advances the snake one square, testing for collision.
@@ -268,23 +273,20 @@ Argument SNAKE-BUFFER is the name of the buffer."
        (cond ((= c snake-dot)
               (cl-incf snake-length)
               (cl-incf snake-score)
-              (snake-update-score))
+              (snake-update-score)
+              (snake-set-dot))
              (t
               (let* ((last-cons (nthcdr (- snake-length 2)
                                         snake-positions))
                      (tail-pos (cadr last-cons))
                      (x0 (aref tail-pos 0))
                      (y0 (aref tail-pos 1)))
-                (gamegrid-set-cell x0 y0
-                                   (if (= (% snake-cycle 5) 0)
-                                       snake-dot
-                                     snake-blank))
-                (cl-incf snake-cycle)
+                (gamegrid-set-cell x0 y0 snake-blank)
                 (setcdr last-cons nil))))
        (gamegrid-set-cell x y snake-snake)
        (setq snake-positions
              (cons (vector x y) snake-positions))
-         (setq snake-moved-p nil)))))
+       (setq snake-moved-p nil)))))
 
 (defun snake-update-velocity ()
   (unless snake-moved-p
@@ -339,6 +341,7 @@ Argument SNAKE-BUFFER is the name of the buffer."
   "Start a new game of Snake."
   (interactive)
   (snake-reset-game)
+  (snake-set-dot)
   (use-local-map snake-mode-map)
   (gamegrid-start-timer snake-tick-period 'snake-update-game))
 
similarity index 97%
rename from lisp/gnus/plstore.el
rename to lisp/plstore.el
index e327bbd48465b280c9ea1ce1e9d45e2d9e9c7d09..62c50c0f4a184beebcc1c8b960a57f8bf137c434 100644 (file)
@@ -422,7 +422,7 @@ SECRET-KEYS is a plist containing secret data."
              ((listp plstore-encrypt-to) plstore-encrypt-to)
              ((stringp plstore-encrypt-to) (list plstore-encrypt-to))))
            cipher)
-       (epg-context-set-armor context t)
+       (setf (epg-context-armor context) t)
        (epg-context-set-passphrase-callback
         context
         (cons #'plstore-passphrase-callback-function
@@ -554,18 +554,6 @@ If no one is selected, symmetric encryption will be performed.  "
       (plstore-mode-original)
     (plstore-mode-decoded)))
 
-(eval-when-compile
-  (defmacro plstore-called-interactively-p (kind)
-    (condition-case nil
-        (progn
-          (eval '(called-interactively-p 'any))
-          ;; Emacs >=23.2
-          `(called-interactively-p ,kind))
-      ;; Emacs <23.2
-      (wrong-number-of-arguments '(called-interactively-p))
-      ;; XEmacs
-      (void-function '(interactive-p)))))
-
 ;;;###autoload
 (define-derived-mode plstore-mode emacs-lisp-mode "PLSTORE"
   "Major mode for editing PLSTORE files."
@@ -573,7 +561,7 @@ If no one is selected, symmetric encryption will be performed.  "
   (add-hook 'write-contents-functions #'plstore--write-contents-functions)
   (define-key plstore-mode-map "\C-c\C-c" #'plstore-mode-toggle-display)
   ;; to create a new file with plstore-mode, mark it as already decoded
-  (if (plstore-called-interactively-p 'any)
+  (if (called-interactively-p 'any)
       (setq plstore-encoded t)
     (plstore-mode-decoded)))
 
index 91b50cea340d2fcc7e44a2142833b1fc5f77ae57..db45e202088d25268d3b2fa3fce1db7943911c09 100644 (file)
@@ -78,9 +78,6 @@ the external command (usually \"kill\")."
     ("KILL" . "  (9.  Kill - cannot be caught or ignored)")
     ("ALRM" . "  (14. Alarm Clock)")
     ("TERM" . "  (15. Termination)")
-    ;; POSIX 1003.1-2001
-    ;; Which systems do not support these signals so that we can
-    ;; exclude them from `proced-signal-list'?
     ("CONT" . "  (Continue executing)")
     ("STOP" . "  (Stop executing / pause - cannot be caught or ignored)")
     ("TSTP" . "  (Terminal stop / pause)"))
@@ -644,6 +641,10 @@ mode line, using \"+\" or \"-\" for ascending or descending sort order.
 Type \\[proced-toggle-tree] to toggle whether the listing is
 displayed as process tree.
 
+Type \\[proced-toggle-auto-update] to automatically update the
+process list.  The time interval for updates can be configured
+via `proced-auto-update-interval'.
+
 An existing Proced listing can be refined by typing \\[proced-refine].
 Refining an existing listing does not update the variable `proced-filter'.
 
index 4c78bc3975c397c8bcb013537741cf7d5e64243e..64e57017174b570f7615d4badd5016a83b4d3691 100644 (file)
@@ -206,7 +206,7 @@ This variant works around bugs in `eval-when-compile' in various
 (eval-and-compile
   (defmacro c--macroexpand-all (form &optional environment)
     ;; Macro to smooth out the renaming of `cl-macroexpand-all' in Emacs 24.3.
-    (if (eq c--mapcan-status 'cl-mapcan)
+    (if (fboundp 'macroexpand-all)
        `(macroexpand-all ,form ,environment)
       `(cl-macroexpand-all ,form ,environment)))
 
@@ -493,19 +493,21 @@ must not be within a `c-save-buffer-state', since the user then
 wouldn't be able to undo them.
 
 The return value is the value of the last form in BODY."
-  `(let* ((modified (buffer-modified-p)) (buffer-undo-list t)
-         (inhibit-read-only t) (inhibit-point-motion-hooks t)
-         before-change-functions after-change-functions
-         deactivate-mark
-         buffer-file-name buffer-file-truename ; Prevent primitives checking
-                                               ; for file modification
-         ,@varlist)
-     (unwind-protect
-        (progn ,@body)
-       (and (not modified)
-           (buffer-modified-p)
-           (set-buffer-modified-p nil)))))
-(put 'c-save-buffer-state 'lisp-indent-function 1)
+  (declare (debug t) (indent 1))
+  (if (fboundp 'with-silent-modifications)
+      `(with-silent-modifications (let* ,varlist ,@body))
+    `(let* ((modified (buffer-modified-p)) (buffer-undo-list t)
+           (inhibit-read-only t) (inhibit-point-motion-hooks t)
+           before-change-functions after-change-functions
+           deactivate-mark
+           buffer-file-name buffer-file-truename ; Prevent primitives checking
+                                                 ; for file modification
+           ,@varlist)
+       (unwind-protect
+          (progn ,@body)
+        (and (not modified)
+             (buffer-modified-p)
+             (set-buffer-modified-p nil))))))
 
 (defmacro c-tentative-buffer-changes (&rest body)
   "Eval BODY and optionally restore the buffer contents to the state it
index 2010515ce5c0ed0091136c30a8fee54c409a4ff0..76a0b201816743235973542e30ec6eb25b5e2aab 100644 (file)
@@ -1543,7 +1543,7 @@ comment at the start of cc-engine.el for more info."
 ;;    two newlines with horizontal whitespace between them.
 ;;
 ;;    The reason to include the first following char is to cope with
-;;    "rung positions" that doesn't have any ordinary whitespace.  If
+;;    "rung positions" that don't have any ordinary whitespace.  If
 ;;    `c-is-sws' is put on a token character it does not have
 ;;    `c-in-sws' set simultaneously.  That's the only case when that
 ;;    can occur, and the reason for not extending the `c-in-sws'
@@ -1714,7 +1714,9 @@ comment at the start of cc-engine.el for more info."
     ;; if it's anything that can't start syntactic ws, so we can bail out
     ;; early in the majority of cases when there just are a few ws chars.
     (skip-chars-forward " \t\n\r\f\v")
-    (when (looking-at c-syntactic-ws-start)
+    (when (or (looking-at c-syntactic-ws-start)
+             (and c-opt-cpp-prefix
+                  (looking-at c-noise-macro-name-re)))
 
       (setq rung-end-pos (min (1+ (point)) (point-max)))
       (if (setq rung-is-marked (text-property-any rung-pos rung-end-pos
@@ -1733,6 +1735,10 @@ comment at the start of cc-engine.el for more info."
       (with-silent-modifications
       (while
          (progn
+           ;; In the following while form, we move over a "ladder" and
+           ;; following simple WS each time round the loop, appending the WS
+           ;; onto the ladder, joining adjacent ladders, and terminating when
+           ;; there is no more WS or we reach EOB.
            (while
                (when (and rung-is-marked
                           (get-text-property (point) 'c-in-sws))
@@ -1776,6 +1782,7 @@ comment at the start of cc-engine.el for more info."
                            (setq rung-pos (point)
                                  last-put-in-sws-pos rung-pos)))
 
+           ;; Now move over any comments (x)or a CPP construct.
            (setq simple-ws-end (point))
            (c-forward-comments)
 
@@ -1801,6 +1808,13 @@ comment at the start of cc-engine.el for more info."
              (forward-line 1)
              (setq safe-start t)
              ;; Don't cache at eob in case the buffer is narrowed.
+             (not (eobp)))
+
+            ((and c-opt-cpp-prefix
+                  (looking-at c-noise-macro-name-re))
+             ;; Skip over a noise macro.
+             (goto-char (match-end 1))
+             (setq safe-start t)
              (not (eobp)))))
 
        ;; We've searched over a piece of non-white syntactic ws.  See if this
@@ -1907,8 +1921,11 @@ comment at the start of cc-engine.el for more info."
     (when (and (not (bobp))
               (save-excursion
                 (backward-char)
-                (looking-at c-syntactic-ws-end)))
-
+                (or (looking-at c-syntactic-ws-end)
+                    (and c-opt-cpp-prefix
+                         (looking-at c-symbol-char-key)
+                         (progn (c-beginning-of-current-token)
+                                (looking-at c-noise-macro-name-re))))))
       ;; Try to find a rung position in the simple ws preceding point, so that
       ;; we can get a cache hit even if the last bit of the simple ws has
       ;; changed recently.
@@ -1927,6 +1944,9 @@ comment at the start of cc-engine.el for more info."
       (with-silent-modifications
       (while
          (progn
+           ;; Each time round the next while form, we move back over a ladder
+           ;; and append any simple WS preceding it, if possible joining with
+           ;; the previous ladder.
            (while
                (when (and rung-is-marked
                           (not (bobp))
@@ -2035,6 +2055,15 @@ comment at the start of cc-engine.el for more info."
              ;; narrowed out, and we can't risk marking the simple ws
              ;; at the end of it.
              (goto-char next-rung-pos)
+             t)
+
+            ((and c-opt-cpp-prefix
+                  (save-excursion
+                    (and (< (skip-syntax-backward "w_") 0)
+                         (progn (setq next-rung-pos (point))
+                                (looking-at c-noise-macro-name-re)))))
+             ;; Skipped over a noise macro
+             (goto-char next-rung-pos)
              t)))
 
        ;; We've searched over a piece of non-white syntactic ws.  See if this
@@ -5811,13 +5840,16 @@ comment at the start of cc-engine.el for more info."
                               `(c-forward-type)
                             `(c-forward-name)))
                nil
-             (and (looking-at c-keywords-regexp)
-                  (c-forward-keyword-clause 1))))
+             (cond ((looking-at c-keywords-regexp)
+                    (c-forward-keyword-clause 1))
+                   ((and c-opt-cpp-prefix
+                         (looking-at c-noise-macro-with-parens-name-re))
+                    (c-forward-noise-clause)))))
      (when (memq res '(t known found prefix maybe))
        (when c-record-type-identifiers
-        ,(if (eq type 'type)
-             `(c-record-type-id c-last-identifier-range)
-           `(c-record-ref-id c-last-identifier-range)))
+        ,(if (eq type 'type)
+             `(c-record-type-id c-last-identifier-range)
+           `(c-record-ref-id c-last-identifier-range)))
        t)))
 
 (defmacro c-forward-id-comma-list (type update-safe-pos)
@@ -5835,6 +5867,17 @@ comment at the start of cc-engine.el for more info."
                 (c-forward-syntactic-ws)
                 (c-forward-keyword-prefixed-id ,type)))))
 
+(defun c-forward-noise-clause ()
+  ;; Point is at a c-noise-macro-with-parens-names macro identifier.  Go
+  ;; forward over this name, any parenthesis expression which follows it, and
+  ;; any syntactic WS, ending up at the next token.  If there is an unbalanced
+  ;; paren expression, leave point at it.  Always Return t.
+  (c-forward-token-2)
+  (if (and (eq (char-after) ?\()
+          (c-go-list-forward))
+      (c-forward-syntactic-ws))
+  t)
+
 (defun c-forward-keyword-clause (match)
   ;; Submatch MATCH in the current match data is assumed to surround a
   ;; token.  If it's a keyword, move over it and any immediately
@@ -5984,7 +6027,6 @@ comment at the start of cc-engine.el for more info."
                  ;; `nconc' doesn't mind that the tail of
                  ;; `c-record-found-types' is t.
                  (nconc c-record-found-types c-record-type-identifiers)))
-           (if (c-major-mode-is 'java-mode) (c-fontify-recorded-types-and-refs))
          t)
 
       (goto-char start)
@@ -6030,28 +6072,31 @@ comment at the start of cc-engine.el for more info."
                (progn
                  (c-forward-syntactic-ws)
                  (when (or (and c-record-type-identifiers all-types)
-                           (c-major-mode-is 'java-mode))
-                   ;; All encountered identifiers are types, so set the
-                   ;; promote flag and parse the type.
-                   (progn
-                     (c-forward-syntactic-ws)
-                     (if (looking-at "\\?")
-                         (forward-char)
-                       (when (looking-at c-identifier-start)
+                           (not (equal c-inside-<>-type-key "\\(\\<\\>\\)")))
+                   (c-forward-syntactic-ws)
+                   (cond
+                    ((eq (char-after) ??)
+                     (forward-char))
+                    ((and (looking-at c-identifier-start)
+                          (not (looking-at c-keywords-regexp)))
+                     (if (or (and all-types c-record-type-identifiers)
+                             (c-major-mode-is 'java-mode))
+                         ;; All encountered identifiers are types, so set the
+                         ;; promote flag and parse the type.
                          (let ((c-promote-possible-types t)
                                (c-record-found-types t))
-                           (c-forward-type))))
+                           (c-forward-type))
+                       (c-forward-token-2))))
 
-                     (c-forward-syntactic-ws)
+                   (c-forward-syntactic-ws)
 
-                     (when (or (looking-at "extends")
-                               (looking-at "super"))
-                       (forward-word-strictly)
-                       (c-forward-syntactic-ws)
-                       (let ((c-promote-possible-types t)
-                             (c-record-found-types t))
-                         (c-forward-type)
-                         (c-forward-syntactic-ws)))))
+                   (when (looking-at c-inside-<>-type-key)
+                     (goto-char (match-end 1))
+                     (c-forward-syntactic-ws)
+                     (let ((c-promote-possible-types t)
+                           (c-record-found-types t))
+                       (c-forward-type))
+                     (c-forward-syntactic-ws)))
 
                  (setq pos (point))    ; e.g. first token inside the '<'
 
@@ -6372,9 +6417,7 @@ comment at the start of cc-engine.el for more info."
              ((and c-recognize-<>-arglists
                    (eq (char-after) ?<))
               ;; Maybe an angle bracket arglist.
-              (when (let ((c-record-type-identifiers t)
-                          (c-record-found-types t)
-                          (c-last-identifier-range))
+              (when (let (c-last-identifier-range)
                       (c-forward-<>-arglist nil))
 
                 (c-forward-syntactic-ws)
@@ -6468,6 +6511,14 @@ comment at the start of cc-engine.el for more info."
                                     ; "typedef".
       (goto-char (match-end 1))
       (c-forward-syntactic-ws)
+
+      (while (cond
+             ((looking-at c-decl-hangon-key)
+              (c-forward-keyword-clause 1))
+             ((and c-opt-cpp-prefix
+                   (looking-at c-noise-macro-with-parens-name-re))
+              (c-forward-noise-clause))))
+
       (setq pos (point))
 
       (setq name-res (c-forward-name))
@@ -6875,31 +6926,39 @@ comment at the start of cc-engine.el for more info."
           ;; of the while.  These are, e.g. "*" in "int *foo" or "(" and
           ;; "*" in "int (*foo) (void)" (Note similar code in
           ;; `c-forward-decl-or-cast-1'.)
-          (while (and (looking-at c-type-decl-prefix-key)
-                      (if (and (c-major-mode-is 'c++-mode)
-                               (match-beginning 3))
-                          ;; If the third submatch matches in C++ then
-                          ;; we're looking at an identifier that's a
-                          ;; prefix only if it specifies a member pointer.
-                          (progn
-                            (setq id-start (point))
-                            (c-forward-name)
-                            (if (looking-at "\\(::\\)")
-                                ;; We only check for a trailing "::" and
-                                ;; let the "*" that should follow be
-                                ;; matched in the next round.
-                                t
-                              ;; It turned out to be the real identifier,
-                              ;; so flag that and stop.
-                              (setq got-identifier t)
-                              nil))
-                        t))
-            (if (eq (char-after) ?\()
-                (progn
-                  (setq paren-depth (1+ paren-depth))
-                  (forward-char))
-              (goto-char (match-end 1)))
-            (c-forward-syntactic-ws))
+             (while
+                 (cond
+                  ((looking-at c-decl-hangon-key)
+                   (c-forward-keyword-clause 1))
+                  ((and c-opt-cpp-prefix
+                        (looking-at c-noise-macro-with-parens-name-re))
+                   (c-forward-noise-clause))
+                  ((and (looking-at c-type-decl-prefix-key)
+                        (if (and (c-major-mode-is 'c++-mode)
+                                 (match-beginning 3))
+                            ;; If the third submatch matches in C++ then
+                            ;; we're looking at an identifier that's a
+                            ;; prefix only if it specifies a member pointer.
+                            (progn
+                              (setq id-start (point))
+                              (c-forward-name)
+                              (if (looking-at "\\(::\\)")
+                                  ;; We only check for a trailing "::" and
+                                  ;; let the "*" that should follow be
+                                  ;; matched in the next round.
+                                  t
+                                ;; It turned out to be the real identifier,
+                                ;; so flag that and stop.
+                                (setq got-identifier t)
+                                nil))
+                          t))
+                   (if (eq (char-after) ?\()
+                       (progn
+                         (setq paren-depth (1+ paren-depth))
+                         (forward-char))
+                     (goto-char (match-end 1)))
+                   (c-forward-syntactic-ws)
+                   t)))
 
           ;; If we haven't passed the identifier already, do it now.
           (unless got-identifier
@@ -6924,9 +6983,13 @@ comment at the start of cc-engine.el for more info."
 
         ;; Skip over any trailing bit, such as "__attribute__".
         (progn
-          (when (looking-at c-decl-hangon-key)
-            (c-forward-keyword-clause 1))
-          (<= (point) limit))
+             (while (cond
+                     ((looking-at c-decl-hangon-key)
+                      (c-forward-keyword-clause 1))
+                     ((and c-opt-cpp-prefix
+                           (looking-at c-noise-macro-with-parens-name-re))
+                      (c-forward-noise-clause))))
+             (<= (point) limit))
 
         ;; Search syntactically to the end of the declarator (";",
         ;; ",", a closing paren, eob etc) or to the beginning of an
@@ -7090,6 +7153,9 @@ comment at the start of cc-engine.el for more info."
        cast-end
        ;; Have we got a new-style C++11 "auto"?
        new-style-auto
+       ;; Set when the symbol before `preceding-token-end' is known to
+       ;; terminate the previous construct, or when we're at point-min.
+       at-decl-start
        ;; Save `c-record-type-identifiers' and
        ;; `c-record-ref-identifiers' since ranges are recorded
        ;; speculatively and should be thrown away if it turns out
@@ -7097,6 +7163,15 @@ comment at the start of cc-engine.el for more info."
        (save-rec-type-ids c-record-type-identifiers)
        (save-rec-ref-ids c-record-ref-identifiers))
 
+    (save-excursion
+      (goto-char preceding-token-end)
+      (setq at-decl-start
+           (or (bobp)
+               (let ((tok-end (point)))
+                 (c-backward-token-2)
+                 (member (buffer-substring-no-properties (point) tok-end)
+                         c-pre-start-tokens)))))
+
     (while (c-forward-annotation)
       (c-forward-syntactic-ws))
 
@@ -7105,18 +7180,25 @@ comment at the start of cc-engine.el for more info."
     ;; macros like __INLINE__, so we recognize both types and known
     ;; specifiers after them too.
     (while
-       (let* ((start (point)) kwd-sym kwd-clause-end found-type)
+       (let* ((start (point)) kwd-sym kwd-clause-end found-type noise-start)
 
+         (cond
          ;; Look for a specifier keyword clause.
-         (when (or (looking-at c-prefix-spec-kwds-re) ;FIXME!!! includes auto
-                   (and (c-major-mode-is 'java-mode)
-                        (looking-at "@[A-Za-z0-9]+")))
-           (if (save-match-data (looking-at c-typedef-key))
-               (setq at-typedef t))
+          ((or (looking-at c-prefix-spec-kwds-re)
+               (and (c-major-mode-is 'java-mode)
+                (looking-at "@[A-Za-z0-9]+")))
+           (save-match-data
+             (if (looking-at c-typedef-key)
+                 (setq at-typedef t)))
            (setq kwd-sym (c-keyword-sym (match-string 1)))
            (save-excursion
              (c-forward-keyword-clause 1)
              (setq kwd-clause-end (point))))
+          ((and c-opt-cpp-prefix
+                (looking-at c-noise-macro-with-parens-name-re))
+           (setq noise-start (point))
+           (c-forward-noise-clause)
+           (setq kwd-clause-end (point))))
 
          (when (setq found-type (c-forward-type t)) ; brace-block-too
            ;; Found a known or possible type or a prefix of a known type.
@@ -7154,16 +7236,17 @@ comment at the start of cc-engine.el for more info."
                  backup-at-type-decl nil
                  backup-maybe-typeless nil))
 
-         (if kwd-sym
+         (if (or kwd-sym noise-start)
              (progn
                ;; Handle known specifier keywords and
                ;; `c-decl-hangon-kwds' which can occur after known
                ;; types.
 
-               (if (c-keyword-member kwd-sym 'c-decl-hangon-kwds)
-                   ;; It's a hang-on keyword that can occur anywhere.
+               (if (or (c-keyword-member kwd-sym 'c-decl-hangon-kwds)
+                       noise-start)
+                   ;; It's a hang-on keyword or noise clause that can occur
+                   ;; anywhere.
                    (progn
-                     (setq at-decl-or-cast t)
                      (if at-type
                          ;; Move the identifier start position if
                          ;; we've passed a type.
@@ -7215,8 +7298,12 @@ comment at the start of cc-engine.el for more info."
       ;; If a known type was found, we still need to skip over any
       ;; hangon keyword clauses after it.  Otherwise it has already
       ;; been done in the loop above.
-      (while (looking-at c-decl-hangon-key)
-       (c-forward-keyword-clause 1))
+      (while
+         (cond ((looking-at c-decl-hangon-key)
+                (c-forward-keyword-clause 1))
+               ((and c-opt-cpp-prefix
+                     (looking-at c-noise-macro-with-parens-name-re))
+                (c-forward-noise-clause))))
       (setq id-start (point)))
 
      ((eq at-type 'prefix)
@@ -7347,36 +7434,42 @@ comment at the start of cc-engine.el for more info."
               (setq got-identifier (c-forward-name))
               (setq name-start pos)))
 
-      ;; Skip over type decl suffix operators.
-      (while (if (looking-at c-type-decl-suffix-key)
+      ;; Skip over type decl suffix operators and trailing noise macros.
+      (while
+         (cond
+          ((and c-opt-cpp-prefix
+                (looking-at c-noise-macro-with-parens-name-re))
+           (c-forward-noise-clause))
+
+          ((looking-at c-type-decl-suffix-key)
+           (if (eq (char-after) ?\))
+               (when (> paren-depth 0)
+                 (setq paren-depth (1- paren-depth))
+                 (forward-char)
+                 t)
+             (when (if (save-match-data (looking-at "\\s("))
+                       (c-safe (c-forward-sexp 1) t)
+                     (goto-char (match-end 1))
+                     t)
+               (when (and (not got-suffix-after-parens)
+                          (= paren-depth 0))
+                 (setq got-suffix-after-parens (match-beginning 0)))
+               (setq got-suffix t))))
 
-                (if (eq (char-after) ?\))
-                    (when (> paren-depth 0)
-                      (setq paren-depth (1- paren-depth))
-                      (forward-char)
-                      t)
-                  (when (if (save-match-data (looking-at "\\s("))
-                            (c-safe (c-forward-sexp 1) t)
-                          (goto-char (match-end 1))
-                          t)
-                    (when (and (not got-suffix-after-parens)
-                               (= paren-depth 0))
-                      (setq got-suffix-after-parens (match-beginning 0)))
-                    (setq got-suffix t)))
-
-              ;; No suffix matched.  We might have matched the
-              ;; identifier as a type and the open paren of a
-              ;; function arglist as a type decl prefix.  In that
-              ;; case we should "backtrack": Reinterpret the last
-              ;; type as the identifier, move out of the arglist and
-              ;; continue searching for suffix operators.
-              ;;
-              ;; Do this even if there's no preceding type, to cope
-              ;; with old style function declarations in K&R C,
-              ;; (con|de)structors in C++ and `c-typeless-decl-kwds'
-              ;; style declarations.  That isn't applicable in an
-              ;; arglist context, though.
-              (when (and (= paren-depth 1)
+          (t
+           ;; No suffix matched.  We might have matched the
+           ;; identifier as a type and the open paren of a
+           ;; function arglist as a type decl prefix.  In that
+           ;; case we should "backtrack": Reinterpret the last
+           ;; type as the identifier, move out of the arglist and
+           ;; continue searching for suffix operators.
+           ;;
+           ;; Do this even if there's no preceding type, to cope
+           ;; with old style function declarations in K&R C,
+           ;; (con|de)structors in C++ and `c-typeless-decl-kwds'
+           ;; style declarations.  That isn't applicable in an
+           ;; arglist context, though.
+           (when (and (= paren-depth 1)
                          (not got-prefix-before-parens)
                          (not (eq at-type t))
                          (or backup-at-type
@@ -7388,7 +7481,7 @@ comment at the start of cc-engine.el for more info."
                          (eq (char-before pos) ?\)))
                 (c-fdoc-shift-type-backward)
                 (goto-char pos)
-                t))
+                t)))
 
        (c-forward-syntactic-ws))
 
@@ -7697,12 +7790,15 @@ comment at the start of cc-engine.el for more info."
                          at-type
                          (or at-decl-end (looking-at "=[^=]"))
                          (not context)
-                         (not got-suffix))
-                ;; Got something like "foo * bar;".  Since we're not inside an
-                ;; arglist it would be a meaningless expression because the
-                ;; result isn't used.  We therefore choose to recognize it as
-                ;; a declaration.  Do not allow a suffix since it could then
-                ;; be a function call.
+                         (or (not got-suffix)
+                             at-decl-start))
+                ;; Got something like "foo * bar;".  Since we're not inside
+                ;; an arglist it would be a meaningless expression because
+                ;; the result isn't used.  We therefore choose to recognize
+                ;; it as a declaration.  We only allow a suffix (which makes
+                ;; the construct look like a function call) when
+                ;; `at-decl-start' provides additional evidence that we do
+                ;; have a declaration.
                 (throw 'at-decl-or-cast t))
 
               ;; CASE 17
@@ -8986,6 +9082,12 @@ comment at the start of cc-engine.el for more info."
           t)
          ((looking-at c-after-brace-list-key) t)
          ((looking-at c-brace-list-key) nil)
+         ((eq (char-after) ?\()
+          (and (eq (c-backward-token-2) 0)
+               (or (looking-at c-decl-hangon-key)
+                   (and c-opt-cpp-prefix
+                        (looking-at c-noise-macro-with-parens-name-re)))))
+
          ((and c-recognize-<>-arglists
                (eq (char-after) ?<)
                (looking-at "\\s("))
@@ -10246,9 +10348,12 @@ comment at the start of cc-engine.el for more info."
           ;; CASE 5A.3: brace list open
           ((save-excursion
              (c-beginning-of-decl-1 lim)
-             (while (looking-at c-specifier-key)
-               (goto-char (match-end 1))
-               (c-forward-syntactic-ws indent-point))
+             (while (cond
+                     ((looking-at c-specifier-key)
+                      (c-forward-keyword-clause 1))
+                     ((and c-opt-cpp-prefix
+                           (looking-at c-noise-macro-with-parens-name-re))
+                      (c-forward-noise-clause))))
              (setq placeholder (c-point 'boi))
              (or (consp special-brace-list)
                  (and (or (save-excursion
@@ -10300,9 +10405,12 @@ comment at the start of cc-engine.el for more info."
           (t
            (save-excursion
              (c-beginning-of-decl-1 lim)
-             (while (looking-at c-specifier-key)
-               (goto-char (match-end 1))
-               (c-forward-syntactic-ws indent-point))
+             (while (cond
+                     ((looking-at c-specifier-key)
+                      (c-forward-keyword-clause 1))
+                     ((and c-opt-cpp-prefix
+                           (looking-at c-noise-macro-with-parens-name-re))
+                      (c-forward-noise-clause))))
              (c-add-syntax 'defun-open (c-point 'boi))
              ;; Bogus to use bol here, but it's the legacy.  (Resolved,
              ;; 2007-11-09)
@@ -10933,9 +11041,12 @@ comment at the start of cc-engine.el for more info."
            (c-beginning-of-statement-1
             (c-safe-position (1- containing-sexp) paren-state))
            (c-forward-token-2 0)
-           (while (looking-at c-specifier-key)
-             (goto-char (match-end 1))
-             (c-forward-syntactic-ws))
+           (while (cond
+                   ((looking-at c-specifier-key)
+                    (c-forward-keyword-clause 1))
+                   ((and c-opt-cpp-prefix
+                         (looking-at c-noise-macro-with-parens-name-re))
+                    (c-forward-noise-clause))))
            (c-add-syntax 'brace-list-open (c-point 'boi))))
 
         ;; CASE 9B: brace-list-close brace
index d864367719210786c2f68e8a9b8ecf8323e6caf1..6c348514915444b7616e10f5bcd59724ee40ef06 100644 (file)
@@ -1205,8 +1205,20 @@ casts and declarations are fontified.  Used on level 2 and higher."
                           'font-lock-keyword-face)
                       (looking-at c-not-decl-init-keywords))
                  (and c-macro-with-semi-re
-                      (looking-at c-macro-with-semi-re))) ; 2008-11-04
-             ;; Don't do anything more if we're looking at a keyword that
+                      (looking-at c-macro-with-semi-re)) ; 2008-11-04
+                 (save-excursion ; A construct after a ; in a `for' statement
+                                 ; can't be a declaration.
+                   (and (c-go-up-list-backward)
+                        (eq (char-after) ?\()
+                        (progn (c-backward-syntactic-ws)
+                               (c-simple-skip-symbol-backward))
+                        (looking-at c-paren-stmt-key)
+                        (progn (goto-char match-pos)
+                               (while (and (eq (char-before) ?\))
+                                           (c-go-list-backward))
+                                 (c-backward-syntactic-ws))
+                               (eq (char-before) ?\;)))))
+             ;; Don't do anything more if we're looking at something that
              ;; can't start a declaration.
              t
 
@@ -1699,10 +1711,18 @@ on level 2 only and so aren't combined with `c-complex-decl-matchers'."
                        (unless (c-skip-comments-and-strings limit)
                          (c-forward-syntactic-ws)
                          ;; Handle prefix declaration specifiers.
-                         (when (or (looking-at c-prefix-spec-kwds-re)
-                                   (and (c-major-mode-is 'java-mode)
-                                        (looking-at "@[A-Za-z0-9]+")))
-                           (c-forward-keyword-clause 1))
+                         (while
+                             (or
+                              (when (or (looking-at c-prefix-spec-kwds-re)
+                                        (and (c-major-mode-is 'java-mode)
+                                             (looking-at "@[A-Za-z0-9]+")))
+                                (c-forward-keyword-clause 1)
+                                t)
+                              (when (and c-opt-cpp-prefix
+                                         (looking-at
+                                          c-noise-macro-with-parens-name-re))
+                                (c-forward-noise-clause)
+                                t)))
                          ,(if (c-major-mode-is 'c++-mode)
                               `(when (and (c-forward-type)
                                           (eq (char-after) ?=))
@@ -1828,7 +1848,7 @@ higher."
                "\\)\\>"
                ;; Disallow various common punctuation chars that can't come
                ;; before the '{' of the enum list, to avoid searching too far.
-               "[^][{}();/#=]*"
+               "[^][{};/#=]*"
                "{")
               '((c-font-lock-declarators limit t nil)
                 (save-match-data
index dd1bccf3d96286a0692f54cf42ee37351cc54df8..705f723d55dc790d6509c999bb23ef5f710eb8ad 100644 (file)
@@ -619,6 +619,11 @@ This is of the form that fits inside [ ] in a regexp."
   objc (concat c-alnum "_$@"))
 (c-lang-defvar c-symbol-chars (c-lang-const c-symbol-chars))
 
+(c-lang-defconst c-symbol-char-key
+  "Regexp matching a sequence of at least one identifier character."
+  t (concat "[" (c-lang-const c-symbol-chars) "]+"))
+(c-lang-defvar c-symbol-char-key (c-lang-const c-symbol-char-key))
+
 (c-lang-defconst c-symbol-key
   "Regexp matching identifiers and keywords (with submatch 0).  Assumed
 to match if `c-symbol-start' matches on the same position."
@@ -1325,6 +1330,14 @@ operators."
 (c-lang-defconst c-haskell-op-re
   t (c-make-keywords-re nil (c-lang-const c-haskell-op)))
 (c-lang-defvar c-haskell-op-re (c-lang-const c-haskell-op-re))
+
+(c-lang-defconst c-pre-start-tokens
+  "List of operators following which an apparent declaration \(e.g.
+\"t1 *fn (t2 *b);\") is most likely to be an actual declaration
+\(as opposed to an arithmetic expression)."
+  t '(";" "{" "}"))
+(c-lang-defvar c-pre-start-tokens (c-lang-const c-pre-start-tokens))
+
 \f
 ;;; Syntactic whitespace.
 
@@ -2297,6 +2310,15 @@ assumed to be set if this isn't nil."
   t (c-make-keywords-re t (c-lang-const c-<>-sexp-kwds)))
 (c-lang-defvar c-opt-<>-sexp-key (c-lang-const c-opt-<>-sexp-key))
 
+(c-lang-defconst c-inside-<>-type-kwds
+  "Keywords which, used inside a C++ style template arglist, introduce a type."
+  t nil
+  java '("extends" "super"))
+
+(c-lang-defconst c-inside-<>-type-key
+  t (c-make-keywords-re t (c-lang-const c-inside-<>-type-kwds)))
+(c-lang-defvar c-inside-<>-type-key (c-lang-const c-inside-<>-type-key))
+
 (c-lang-defconst c-brace-id-list-kwds
   "Keywords that may be followed by a brace block containing a comma
 separated list of identifier definitions, i.e. like the list of
@@ -3064,7 +3086,7 @@ is in effect or not."
 
 (c-lang-defconst c-special-brace-lists
 "List of open- and close-chars that makes up a pike-style brace list,
-i.e. for a ([ ]) list there should be a cons (?\\[ . ?\\]) in this
+i.e., for a ([ ]) list there should be a cons (?\\[ . ?\\]) in this
 list."
   t    nil
   pike '((?{ . ?}) (?\[ . ?\]) (?< . ?>)))
index 738870b727ae802dbebd1069f5041a2c1bfb193a..2ab1d6b0d709213be439e0cdd7f840407ed2cc49 100644 (file)
 ;; derived-mode-ex.el>.
 
 (defun c-leave-cc-mode-mode ()
-  (setq c-buffer-is-cc-mode nil))
+  (when c-buffer-is-cc-mode
+    (save-restriction
+      (widen)
+      (c-save-buffer-state ()
+       (c-clear-char-properties (point-min) (point-max) 'category)
+       (c-clear-char-properties (point-min) (point-max) 'syntax-table)
+       (c-clear-char-properties (point-min) (point-max) 'c-is-sws)
+       (c-clear-char-properties (point-min) (point-max) 'c-in-sws)
+       (c-clear-char-properties (point-min) (point-max) 'c-type)
+       (if (c-major-mode-is 'awk-mode)
+           (c-clear-char-properties (point-min) (point-max) 'c-awk-NL-prop))))
+    (setq c-buffer-is-cc-mode nil)))
 
 (defun c-init-language-vars-for (mode)
   "Initialize the language variables for one of the language modes
@@ -585,6 +596,7 @@ that requires a literal mode spec at compile time."
                                     (not (string-equal c-indentation-style
                                                        style)))))))
   (c-setup-paragraph-variables)
+  (c-make-noise-macro-regexps)
 
   ;; we have to do something special for c-offsets-alist so that the
   ;; buffer local value has its own alist structure.
@@ -674,9 +686,8 @@ compatible with old code; callers should always specify it."
                (funcall fn (point-min) (point-max)))
              c-get-state-before-change-functions)
        (mapc (lambda (fn)
-               (if (not (eq fn 'c-restore-<>-properties))
-                   (funcall fn (point-min) (point-max)
-                            (- (point-max) (point-min)))))
+               (funcall fn (point-min) (point-max)
+                        (- (point-max) (point-min))))
              c-before-font-lock-functions))))
 
   (set (make-local-variable 'outline-regexp) "[^#\n\^M]")
index 8cee733ec8e3461b56f92daa08e0b91c928e69d1..98195da94568c94d4bde8922ede9abe3033a791e 100644 (file)
@@ -1619,6 +1619,49 @@ names)."))
   :type 'c-extra-types-widget
   :group 'c)
 
+(defvar c-noise-macro-with-parens-name-re "\\<\\>")
+(defvar c-noise-macro-name-re "\\<\\>")
+
+(defcustom c-noise-macro-names nil
+  "A list of names of macros which expand to nothing, or compiler extensions
+like \"????\" which are syntactic noise.  Such a macro/extension is complete in
+itself, never having parentheses.  All these names must be syntactically valid
+identifiers.
+
+If you change this variable's value, call the function
+`c-make-noise-macro-regexps' to set the necessary internal variables (or do
+this implicitly by reinitializing C/C++/Objc Mode on any buffer)."
+  :type '(repeat :tag "List of names" string)
+  :group 'c)
+
+(defcustom c-noise-macro-with-parens-names nil
+  "A list of names of macros \(or compiler extensions like \"__attribute__\")
+which optionally have arguments in parentheses, and which expand to nothing.
+These are recognized by CC Mode only in declarations."
+  :type '(regexp :tag "List of names (possibly empty)" string)
+  :group 'c)
+
+(defun c-make-noise-macro-regexps ()
+  ;; Convert `c-noise-macro-names' and `c-noise-macro-with-parens-names' into
+  ;; `c-noise-macro-name-re' and `c-noise-macro-with-parens-name-re'.
+  (setq c-noise-macro-with-parens-name-re
+       (cond ((null c-noise-macro-with-parens-names) "\\<\\>")
+             ((consp c-noise-macro-with-parens-names)
+              (concat (regexp-opt c-noise-macro-with-parens-names t)
+                      "\\([^[:alnum:]_$]\\|$\\)"))
+             ((stringp c-noise-macro-with-parens-names)
+              (copy-sequence c-noise-macro-with-parens-names))
+             (t (error "c-make-noise-macro-regexps: \
+c-noise-macro-with-parens-names is invalid: %s" c-noise-macro-with-parens-names))))
+  (setq c-noise-macro-name-re
+       (cond ((null c-noise-macro-names) "\\<\\>")
+             ((consp c-noise-macro-names)
+              (concat (regexp-opt c-noise-macro-names t)
+                      "\\([^[:alnum:]_$]\\|$\\)"))
+             ((stringp c-noise-macro-names)
+              (copy-sequence c-noise-macro-names))
+             (t (error "c-make-noise-macro-regexps: \
+c-noise-macro-names is invalid: %s" c-noise-macro-names)))))
 \f
 ;; Non-customizable variables, still part of the interface to CC Mode
 (defvar c-macro-with-semi-re nil
index dbda8a9d5b8cdb9176c512eb4f1a12b6c24bbedd..f2e397a4136ba9ba149891c7d5701ac0e44650cd 100644 (file)
@@ -161,6 +161,13 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
 \\(?: characters? \\([0-9]+\\)-?\\([0-9]+\\)?:\\)?\\([ \n]Warning\\(?: [0-9]+\\)?:\\)?\\)"
      2 (3 . 4) (5 . 6) (7))
 
+    (cmake
+     "^CMake \\(?:Error\\|\\(Warning\\)\\) at \\(.*\\):\\([1-9][0-9]*\\) ([^)]+):$"
+     2 3 nil (1))
+    (cmake-info
+     "^  \\(?: \\*\\)?\\(.*\\):\\([1-9][0-9]*\\) ([^)]+)$"
+     1 2 nil 0)
+
     (comma
      "^\"\\([^,\" \n\t]+\\)\", line \\([0-9]+\\)\
 \\(?:[(. pos]+\\([0-9]+\\))?\\)?[:.,; (-]\\( warning:\\|[-0-9 ]*(W)\\)?" 1 2 3 (4))
@@ -2753,7 +2760,9 @@ FILE should be (FILENAME) or (RELATIVE-FILENAME . DIRNAME).
 In the former case, FILENAME may be relative or absolute.
 
 The file-structure looks like this:
-  ((FILENAME [DIR-FROM-PREV-MSG]) FMT LINE-STRUCT...)"
+  ((FILENAME [TRUE-DIRNAME]) FMT ...)
+
+TRUE-DIRNAME is the `file-truename' of DIRNAME, if given."
   (or (gethash file compilation-locs)
       ;; File was not previously encountered, at least not in the form passed.
       ;; Let's normalize it and look again.
@@ -2808,7 +2817,7 @@ The file-structure looks like this:
   (let ((fs (compilation-get-file-structure file)))
     (cl-assert (eq fs (gethash file compilation-locs)))
     (cl-assert (eq fs (gethash (cons (caar fs) (cadr (car fs)))
-                            compilation-locs)))
+                               compilation-locs)))
     (maphash (lambda (k v)
                (if (eq v fs) (remhash k compilation-locs)))
              compilation-locs)))
index fc4501d0cbeb83173786a2d30d151dc1ece615d1..ca85980c28e12e95fc8dff9695956cdb9fdd8825 100644 (file)
@@ -245,11 +245,8 @@ Blank lines separate paragraphs.  Semicolons start comments.
 ;; Font-locking support.
 
 (defun elisp--font-lock-flush-elisp-buffers (&optional file)
-  ;; FIXME: Aren't we only ever called from after-load-functions?
-  ;; Don't flush during load unless called from after-load-functions.
-  ;; In that case, FILE is non-nil.  It's somehow strange that
-  ;; load-in-progress is t when an after-load-function is called since
-  ;; that should run *after* the load...
+  ;; We're only ever called from after-load-functions, load-in-progress can
+  ;; still be t in case of nested loads.
   (when (or (not load-in-progress) file)
     ;; FIXME: If the loaded file did not define any macros, there shouldn't
     ;; be any need to font-lock-flush all the Elisp buffers.
index f04a7226d1865d0ca569453b0379c5cec5abf287..2b44b58f245e162e45ce6de4f7ca95989e619d5e 100644 (file)
@@ -227,6 +227,22 @@ to determine whether cdr should not be excluded."
                 (const :tag "No ignored files" nil))
   :group 'grep)
 
+(defcustom grep-save-buffers 'ask
+  "If non-nil, save buffers before running the grep commands.
+If `ask', ask before saving.  If a function, call it with no arguments
+with each buffer current, as a predicate to determine whether that
+buffer should be saved or not.  E.g., one can set this to
+  (lambda ()
+    (string-prefix-p my-grep-root (file-truename (buffer-file-name))))
+to limit saving to files located under `my-grep-root'."
+  :version "25.2"
+  :type '(choice
+          (const :tag "Ask before saving" ask)
+          (const :tag "Don't save buffers" nil)
+          function
+          (other :tag "Save all buffers" t))
+  :group 'grep)
+
 (defcustom grep-error-screen-columns nil
   "If non-nil, column numbers in grep hits are screen columns.
 See `compilation-error-screen-columns'"
@@ -728,6 +744,12 @@ This function is called from `compilation-filter-hook'."
        grep-error-screen-columns)
   (add-hook 'compilation-filter-hook 'grep-filter nil t))
 
+(defun grep--save-buffers ()
+  (when grep-save-buffers
+    (save-some-buffers (and (not (eq grep-save-buffers 'ask))
+                            (not (functionp grep-save-buffers)))
+                       (and (functionp grep-save-buffers)
+                            grep-save-buffers))))
 
 ;;;###autoload
 (defun grep (command-args)
@@ -759,6 +781,7 @@ list is empty)."
                                  'grep-history
                                  (if current-prefix-arg nil default))))))
 
+  (grep--save-buffers)
   ;; Setting process-setup-function makes exit-message-function work
   ;; even when async processes aren't supported.
   (compilation-start (if (and grep-use-null-device null-device)
@@ -952,6 +975,7 @@ This command shares argument histories with \\[rgrep] and \\[grep]."
        (let ((default-directory dir))
          ;; Setting process-setup-function makes exit-message-function work
          ;; even when async processes aren't supported.
+          (grep--save-buffers)
          (compilation-start (if (and grep-use-null-device null-device)
                                 (concat command " " null-device)
                               command)
@@ -1014,6 +1038,7 @@ to specify a command to run."
                    (read-from-minibuffer "Confirm: "
                                          command nil nil 'grep-find-history))
            (add-to-history 'grep-find-history command))
+          (grep--save-buffers)
          (let ((default-directory dir))
            (compilation-start command 'grep-mode))
          ;; Set default-directory if we started rgrep in the *grep* buffer.
index 356cd3e05329a90f0b72836f21d2b944606ce787..9bf739463edce7cd8035e19fca1891f9cab8ff41 100644 (file)
@@ -1182,36 +1182,30 @@ containing the executable being debugged."
 ;; correct line number, but life's too short.
 ;;   d.love@dl.ac.uk (Dave Love) can be blamed for this
 
-(defvar gud-irix-p
-  (and (string-match "^mips-[^-]*-irix" system-configuration)
-       (not (string-match "irix[6-9]\\.[1-9]" system-configuration)))
+(defvar gud-irix-p nil
   "Non-nil to assume the interface appropriate for IRIX dbx.
 This works in IRIX 4, 5 and 6, but `gud-dbx-use-stopformat-p' provides
 a better solution in 6.1 upwards.")
-(defvar gud-dbx-use-stopformat-p
-  (string-match "irix[6-9]\\.[1-9]" system-configuration)
+(defvar gud-dbx-use-stopformat-p nil
   "Non-nil to use the dbx feature present at least from Irix 6.1
 whereby $stopformat=1 produces an output format compatible with
 `gud-dbx-marker-filter'.")
-;; [Irix dbx seems to be a moving target.  The dbx output changed
+;; [Irix dbx seemed to be a moving target.  The dbx output changed
 ;; subtly sometime between OS v4.0.5 and v5.2 so that, for instance,
 ;; the output from `up' is no longer spotted by gud (and it's probably
 ;; not distinctive enough to try to match it -- use C-<, C->
 ;; exclusively) .  For 5.3 and 6.0, the $curline variable changed to
 ;; `long long'(why?!), so the printf stuff needed changing.  The line
 ;; number was cast to `long' as a compromise between the new `long
-;; long' and the original `int'.  This is reported not to work in 6.2,
+;; long' and the original `int'.  This was reported not to work in 6.2,
 ;; so it's changed back to int -- don't make your sources too long.
-;; From Irix6.1 (but not 6.0?) dbx supports an undocumented feature
+;; From Irix6.1 (but not 6.0?) dbx supported an undocumented feature
 ;; whereby `set $stopformat=1' reportedly produces output compatible
 ;; with `gud-dbx-marker-filter', which we prefer.
 
 ;; The process filter is also somewhat
 ;; unreliable, sometimes not spotting the markers; I don't know
-;; whether there's anything that can be done about that.  It would be
-;; much better if SGI could be persuaded to (re?)instate the MIPS
-;; -emacs flag for gdb-like output (which ought to be possible as most
-;; of the communication I've had over it has been from sgi.com).]
+;; whether there's anything that can be done about that.]
 
 ;; this filter is influenced by the xdb one rather than the gdb one
 (defun gud-irixdbx-marker-filter (string)
index e5460009a5609376a0ca70855a84942ba18992cb..cabdf45458a4211076705336b0a12d6cb25d1029 100644 (file)
@@ -351,6 +351,10 @@ Use the command `hs-minor-mode' to toggle or set this variable.")
     (define-key map "\C-c@\C-\M-s"    'hs-show-all)
     (define-key map "\C-c@\C-l"              'hs-hide-level)
     (define-key map "\C-c@\C-c"              'hs-toggle-hiding)
+    (define-key map "\C-c@\C-a"       'hs-show-all)
+    (define-key map "\C-c@\C-t"       'hs-hide-all)
+    (define-key map "\C-c@\C-d"       'hs-hide-block)
+    (define-key map "\C-c@\C-e"       'hs-toggle-hiding)
     (define-key map [(shift mouse-2)] 'hs-mouse-toggle-hiding)
     map)
   "Keymap for hideshow minor mode.")
index 3f25a0c0647aed8b47dc05cd8f9cfe55a2ec8a6c..718b33932eda18d0267fb0ce2842674989fa646d 100644 (file)
     map)
   "Keymap used for programming modes.")
 
+(defvar prog-indentation-context nil
+  "When non-nil, provides context for indenting embedded code chunks.
+
+There are languages where part of the code is actually written in
+a sub language, e.g., a Yacc/Bison or ANTLR grammar also consists
+of plain C code.  This variable enables the major mode of the
+main language to use the indentation engine of the sub-mode for
+lines in code chunks written in the sub-mode's language.
+
+When a major mode of such a main language decides to delegate the
+indentation of a line/region to the indentation engine of the sub
+mode, it should bind this variable to non-nil around the call.
+
+The non-nil value should be a list of the form:
+
+   (FIRST-COLUMN (START . END) PREVIOUS-CHUNKS)
+
+FIRST-COLUMN is the column the indentation engine of the sub-mode
+should use for top-level language constructs inside the code
+chunk (instead of 0).
+
+START and END specify the region of the code chunk.  END can be
+nil, which stands for the value of `point-max'.  The function
+`prog-widen' uses this to restore restrictions imposed by the
+sub-mode's indentation engine.
+
+PREVIOUS-CHUNKS, if non-nil, provides the indentation engine of
+the sub-mode with the virtual context of the code chunk.  Valid
+values are:
+
+ - A string containing text which the indentation engine can
+   consider as standing in front of the code chunk.  To cache the
+   string's calculated syntactic information for repeated calls
+   with the same string, the sub-mode can add text-properties to
+   the string.
+
+   A typical use case is for grammars with code chunks which are
+   to be indented like function bodies -- the string would contain
+   the corresponding function preamble.
+
+ - A function, to be called with the start position of the current
+   chunk.  It should return either the region of the previous chunk
+   as (PREV-START . PREV-END), or nil if there is no previous chunk.
+
+   A typical use case are literate programming sources -- the
+   function would successively return the previous code chunks.")
+
 (defun prog-indent-sexp (&optional defun)
   "Indent the expression after point.
 When interactively called with prefix, indent the enclosing defun
@@ -62,6 +109,27 @@ instead."
          (end (progn (forward-sexp 1) (point))))
       (indent-region start end nil))))
 
+(defun prog-first-column ()
+  "Return the indentation column normally used for top-level constructs."
+  (or (car prog-indentation-context) 0))
+
+(defun prog-widen ()
+  "Remove restrictions (narrowing) from current code chunk or buffer.
+This function should be used instead of `widen' in any function used
+by the indentation engine to make it respect the value of
+`prog-indentation-context'.
+
+This function (like `widen') is useful inside a
+`save-restriction' to make the indentation correctly work when
+narrowing is in effect."
+  (let ((chunk (cadr prog-indentation-context)))
+    (if chunk
+        ;; No call to `widen' is necessary here, as narrow-to-region
+        ;; changes (not just narrows) the existing restrictions
+        (narrow-to-region (car chunk) (or (cdr chunk) (point-max)))
+      (widen))))
+
+
 (defvar-local prettify-symbols-alist nil
   "Alist of symbol prettifications.
 Each element looks like (SYMBOL . CHARACTER), where the symbol
index 2fc0d29ec9b607e14b2b9193fd1339f07b2fe176..3b0694541b1ca8f0ecd16bc722906135007e8885 100644 (file)
@@ -113,7 +113,7 @@ When the figure is finished these values should be replaced."
 (defcustom ps-mode-print-function
   (lambda ()
      (let ((lpr-switches nil)
-          (lpr-command (if (memq system-type '(usg-unix-v hpux irix))
+          (lpr-command (if (memq system-type '(usg-unix-v hpux))
                            "lp" "lpr")))
        (lpr-buffer)))
   "Lisp function to print current buffer as PostScript."
index 2d22bb2ce88901972476f16279f23d998a23c6de..1e7a15d382a15c5ab635b95b85b71d6b428d7456 100644 (file)
   :version "24.3"
   :link '(emacs-commentary-link "python"))
 
+
+;;; 24.x Compat
+\f
+
+(unless (fboundp 'prog-widen)
+  (defun prog-widen ()
+    (widen)))
+
+(unless (fboundp 'prog-first-column)
+  (defun prog-first-column ()
+    0))
+
 \f
 ;;; Bindings
 
@@ -549,23 +561,32 @@ The type returned can be `comment', `string' or `paren'."
     ;; Builtin Exceptions
     (,(rx symbol-start
           (or
+           ;; Python 2 and 3:
            "ArithmeticError" "AssertionError" "AttributeError" "BaseException"
-           "DeprecationWarning" "EOFError" "EnvironmentError" "Exception"
-           "FloatingPointError" "FutureWarning" "GeneratorExit" "IOError"
-           "ImportError" "ImportWarning" "IndexError" "KeyError"
-           "KeyboardInterrupt" "LookupError" "MemoryError" "NameError"
-           "NotImplementedError" "OSError" "OverflowError"
-           "PendingDeprecationWarning" "ReferenceError" "RuntimeError"
-           "RuntimeWarning" "StopIteration" "SyntaxError" "SyntaxWarning"
-           "SystemError" "SystemExit" "TypeError" "UnboundLocalError"
-           "UnicodeDecodeError" "UnicodeEncodeError" "UnicodeError"
-           "UnicodeTranslateError" "UnicodeWarning" "UserWarning" "VMSError"
-           "ValueError" "Warning" "WindowsError" "ZeroDivisionError"
+           "BufferError" "BytesWarning" "DeprecationWarning" "EOFError"
+           "EnvironmentError" "Exception" "FloatingPointError" "FutureWarning"
+           "GeneratorExit" "IOError" "ImportError" "ImportWarning"
+           "IndentationError" "IndexError" "KeyError" "KeyboardInterrupt"
+           "LookupError" "MemoryError" "NameError" "NotImplementedError"
+           "OSError" "OverflowError" "PendingDeprecationWarning"
+           "ReferenceError" "RuntimeError" "RuntimeWarning" "StopIteration"
+           "SyntaxError" "SyntaxWarning" "SystemError" "SystemExit" "TabError"
+           "TypeError" "UnboundLocalError" "UnicodeDecodeError"
+           "UnicodeEncodeError" "UnicodeError" "UnicodeTranslateError"
+           "UnicodeWarning" "UserWarning" "ValueError" "Warning"
+           "ZeroDivisionError"
            ;; Python 2:
            "StandardError"
            ;; Python 3:
-           "BufferError" "BytesWarning" "IndentationError" "ResourceWarning"
-           "TabError")
+           "BlockingIOError" "BrokenPipeError" "ChildProcessError"
+           "ConnectionAbortedError" "ConnectionError" "ConnectionRefusedError"
+           "ConnectionResetError" "FileExistsError" "FileNotFoundError"
+           "InterruptedError" "IsADirectoryError" "NotADirectoryError"
+           "PermissionError" "ProcessLookupError" "RecursionError"
+           "ResourceWarning" "StopAsyncIteration" "TimeoutError"
+           ;; OS specific
+           "VMSError" "WindowsError"
+           )
           symbol-end) . font-lock-type-face)
     ;; Builtins
     (,(rx symbol-start
@@ -759,7 +780,7 @@ work on `python-indent-calculate-indentation' instead."
   (interactive)
   (save-excursion
     (save-restriction
-      (widen)
+      (prog-widen)
       (goto-char (point-min))
       (let ((block-end))
         (while (and (not block-end)
@@ -858,7 +879,7 @@ keyword
  - Point is on a line starting a dedenter block.
  - START is the position where the dedenter block starts."
   (save-restriction
-    (widen)
+    (prog-widen)
     (let ((ppss (save-excursion
                   (beginning-of-line)
                   (syntax-ppss))))
@@ -1005,10 +1026,10 @@ current context or a list of integers.  The latter case is only
 happening for :at-dedenter-block-start context since the
 possibilities can be narrowed to specific indentation points."
   (save-restriction
-    (widen)
+    (prog-widen)
     (save-excursion
       (pcase (python-indent-context)
-        (`(:no-indent . ,_) 0)
+        (`(:no-indent . ,_) (prog-first-column)) ; usually 0
         (`(,(or :after-line
                 :after-comment
                 :inside-string
@@ -1046,7 +1067,7 @@ possibilities can be narrowed to specific indentation points."
          (let ((opening-block-start-points
                 (python-info-dedenter-opening-block-positions)))
            (if (not opening-block-start-points)
-                ; if not found default to first column
+               (prog-first-column) ; if not found default to first column
              (mapcar (lambda (pos)
                        (save-excursion
                          (goto-char pos)
@@ -1064,7 +1085,7 @@ integers.  Levels are returned in ascending order, and in the
 case INDENTATION is a list, this order is enforced."
   (if (listp indentation)
       (sort (copy-sequence indentation) #'<)
-    (nconc (number-sequence 0 (1- indentation)
+    (nconc (number-sequence (prog-first-column) (1- indentation)
                             python-indent-offset)
            (list indentation))))
 
@@ -1089,7 +1110,7 @@ minimum."
         (python-indent--previous-level levels (current-indentation))
       (if levels
           (apply #'max levels)
-        0))))
+        (prog-first-column)))))
 
 (defun python-indent-line (&optional previous)
   "Internal implementation of `python-indent-line-function'.
@@ -2042,8 +2063,8 @@ virtualenv."
 (defun python-shell-calculate-pythonpath ()
   "Calculate the PYTHONPATH using `python-shell-extra-pythonpaths'."
   (let ((pythonpath
-         (tramp-compat-split-string
-          (or (getenv "PYTHONPATH") "") path-separator)))
+         (split-string
+          (or (getenv "PYTHONPATH") "") path-separator 'omit)))
     (python-shell--add-to-path-with-priority
      pythonpath python-shell-extra-pythonpaths)
     (mapconcat 'identity pythonpath path-separator)))
@@ -2114,7 +2135,7 @@ appends `python-shell-remote-exec-path' instead of `exec-path'."
            (md5 tramp-end-of-output)))
        unset vars item)
     (while env
-      (setq item (tramp-compat-split-string (car env) "="))
+      (setq item (split-string (car env) "=" 'omit))
       (setcdr item (mapconcat 'identity (cdr item) "="))
       (if (and (stringp (cdr item)) (not (string-equal (cdr item) "")))
          (push (format "%s %s" (car item) (cdr item)) vars)
@@ -4477,7 +4498,7 @@ Optional argument INCLUDE-TYPE indicates to include the type of the defun.
 This function can be used as the value of `add-log-current-defun-function'
 since it returns nil if point is not inside a defun."
   (save-restriction
-    (widen)
+    (prog-widen)
     (save-excursion
       (end-of-line 1)
       (let ((names)
@@ -4660,7 +4681,7 @@ likely an invalid python file."
   (let ((point (python-info-dedenter-opening-block-position)))
     (when point
       (save-restriction
-        (widen)
+        (prog-widen)
         (message "Closes %s" (save-excursion
                                (goto-char point)
                                (buffer-substring
@@ -4681,7 +4702,7 @@ statement."
 With optional argument LINE-NUMBER, check that line instead."
   (save-excursion
     (save-restriction
-      (widen)
+      (prog-widen)
       (when line-number
         (python-util-goto-line line-number))
       (while (and (not (eobp))
@@ -4697,7 +4718,7 @@ With optional argument LINE-NUMBER, check that line instead."
 Optional argument LINE-NUMBER forces the line number to check against."
   (save-excursion
     (save-restriction
-      (widen)
+      (prog-widen)
       (when line-number
         (python-util-goto-line line-number))
       (when (python-info-line-ends-backslash-p)
@@ -4714,7 +4735,7 @@ When current line is continuation of another return the point
 where the continued line ends."
   (save-excursion
     (save-restriction
-      (widen)
+      (prog-widen)
       (let* ((context-type (progn
                              (back-to-indentation)
                              (python-syntax-context-type)))
index 27ce60bde446811d9f5d0f5242db4bc1199c4957..1cb71fa773afd30c5800441a4923a484a3284c44 100644 (file)
@@ -54,7 +54,7 @@
 
 (defvar scheme-mode-syntax-table
   (let ((st (make-syntax-table))
-       (i 0))
+        (i 0))
     ;; Symbol constituents
     ;; We used to treat chars 128-256 as symbol-constituent, but they
     ;; should be valid word constituents (Bug#8843).  Note that valid
 
 (defvar scheme-imenu-generic-expression
       '((nil
-        "^(define\\(\\|-\\(generic\\(\\|-procedure\\)\\|method\\)\\)*\\s-+(?\\(\\sw+\\)" 4)
-       ("Types"
-        "^(define-class\\s-+(?\\(\\sw+\\)" 1)
-       ("Macros"
-        "^(\\(defmacro\\|define-macro\\|define-syntax\\)\\s-+(?\\(\\sw+\\)" 2))
+         "^(define\\(\\|-\\(generic\\(\\|-procedure\\)\\|method\\)\\)*\\s-+(?\\(\\sw+\\)" 4)
+        ("Types"
+         "^(define-class\\s-+(?\\(\\sw+\\)" 1)
+        ("Macros"
+         "^(\\(defmacro\\|define-macro\\|define-syntax\\)\\s-+(?\\(\\sw+\\)" 2))
   "Imenu generic expression for Scheme mode.  See `imenu-generic-expression'.")
 
 (defun scheme-mode-variables ()
   (setq-local imenu-syntax-alist '(("+-*/.<>=?!$%_&~^:" . "w")))
   (setq-local syntax-propertize-function #'scheme-syntax-propertize)
   (setq font-lock-defaults
-       '((scheme-font-lock-keywords
-          scheme-font-lock-keywords-1 scheme-font-lock-keywords-2)
-         nil t (("+-*/.<>=!?$%_&~^:" . "w") (?#. "w 14"))
-         beginning-of-defun
-         (font-lock-mark-block-function . mark-defun)))
+        '((scheme-font-lock-keywords
+           scheme-font-lock-keywords-1 scheme-font-lock-keywords-2)
+          nil t (("+-*/.<>=!?$%_&~^:" . "w") (?#. "w 14"))
+          beginning-of-defun
+          (font-lock-mark-block-function . mark-defun)))
+  (setq-local prettify-symbols-alist lisp-prettify-symbols-alist)
   (setq-local lisp-doc-string-elt-property 'scheme-doc-string-elt))
 
 (defvar scheme-mode-line-process "")
 
 (defvar scheme-mode-map
   (let ((smap (make-sparse-keymap))
-       (map (make-sparse-keymap "Scheme")))
+        (map (make-sparse-keymap "Scheme")))
     (set-keymap-parent smap lisp-mode-shared-map)
     (define-key smap [menu-bar scheme] (cons "Scheme" map))
     (define-key map [run-scheme] '("Run Inferior Scheme" . run-scheme))
@@ -270,25 +271,25 @@ See `run-hooks'."
      ;; Declarations.  Hannes Haug <hannes.haug@student.uni-tuebingen.de> says
      ;; this works for SOS, STklos, SCOOPS, Meroon and Tiny CLOS.
      (list (concat "(\\(define\\*?\\("
-                  ;; Function names.
-                  "\\(\\|-public\\|-method\\|-generic\\(-procedure\\)?\\)\\|"
-                  ;; Macro names, as variable names.  A bit dubious, this.
-                  "\\(-syntax\\|-macro\\)\\|"
-                  ;; Class names.
-                  "-class"
+                   ;; Function names.
+                   "\\(\\|-public\\|-method\\|-generic\\(-procedure\\)?\\)\\|"
+                   ;; Macro names, as variable names.  A bit dubious, this.
+                   "\\(-syntax\\|-macro\\)\\|"
+                   ;; Class names.
+                   "-class"
                    ;; Guile modules.
                    "\\|-module"
-                  "\\)\\)\\>"
-                  ;; Any whitespace and declared object.
-                  ;; The "(*" is for curried definitions, e.g.,
-                  ;;  (define ((sum a) b) (+ a b))
-                  "[ \t]*(*"
-                  "\\(\\sw+\\)?")
-          '(1 font-lock-keyword-face)
-          '(6 (cond ((match-beginning 3) font-lock-function-name-face)
-                    ((match-beginning 5) font-lock-variable-name-face)
-                    (t font-lock-type-face))
-              nil t))
+                   "\\)\\)\\>"
+                   ;; Any whitespace and declared object.
+                   ;; The "(*" is for curried definitions, e.g.,
+                   ;;  (define ((sum a) b) (+ a b))
+                   "[ \t]*(*"
+                   "\\(\\sw+\\)?")
+           '(1 font-lock-keyword-face)
+           '(6 (cond ((match-beginning 3) font-lock-function-name-face)
+                     ((match-beginning 5) font-lock-variable-name-face)
+                     (t font-lock-type-face))
+               nil t))
      ))
   "Subdued expressions to highlight in Scheme modes.")
 
@@ -300,21 +301,30 @@ See `run-hooks'."
       ;; Control structures.
       (cons
        (concat
-       "(" (regexp-opt
-            '("begin" "call-with-current-continuation" "call/cc"
-              "call-with-input-file" "call-with-output-file" "case" "cond"
-              "do" "else" "for-each" "if" "lambda" "λ"
-              "let" "let*" "let-syntax" "letrec" "letrec-syntax"
-              ;; R6RS library subforms.
-              "export" "import"
-              ;; SRFI 11 usage comes up often enough.
-              "let-values" "let*-values"
-              ;; Hannes Haug <hannes.haug@student.uni-tuebingen.de> wants:
-              "and" "or" "delay" "force"
-              ;; Stefan Monnier <stefan.monnier@epfl.ch> says don't bother:
-              ;;"quasiquote" "quote" "unquote" "unquote-splicing"
-              "map" "syntax" "syntax-rules") t)
-       "\\>") 1)
+        "(" (regexp-opt
+             '("begin" "call-with-current-continuation" "call/cc"
+               "call-with-input-file" "call-with-output-file" "case" "cond"
+               "do" "else" "for-each" "if" "lambda" "λ"
+               "let" "let*" "let-syntax" "letrec" "letrec-syntax"
+               ;; R6RS library subforms.
+               "export" "import"
+               ;; SRFI 11 usage comes up often enough.
+               "let-values" "let*-values"
+               ;; Hannes Haug <hannes.haug@student.uni-tuebingen.de> wants:
+               "and" "or" "delay" "force"
+               ;; Stefan Monnier <stefan.monnier@epfl.ch> says don't bother:
+               ;;"quasiquote" "quote" "unquote" "unquote-splicing"
+              "map" "syntax" "syntax-rules"
+              ;; For R7RS
+              "when" "unless" "letrec*" "include" "include-ci" "cond-expand"
+              "delay-force" "parameterize" "guard" "case-lambda"
+              "syntax-error" "only" "except" "prefix" "rename" "define-values"
+              "define-record-type" "define-library"
+              "include-library-declarations"
+              ;; SRFI-8
+              "receive"
+              ) t)
+        "\\>") 1)
       ;;
       ;; It wouldn't be Scheme w/o named-let.
       '("(let\\s-+\\(\\sw+\\)"
@@ -327,8 +337,8 @@ See `run-hooks'."
       '("\\<#?:\\sw+\\>" . font-lock-builtin-face)
       ;; R6RS library declarations.
       '("(\\(\\<library\\>\\)\\s-*(?\\(\\sw+\\)?"
-       (1 font-lock-keyword-face)
-       (2 font-lock-type-face))
+        (1 font-lock-keyword-face)
+        (2 font-lock-type-face))
       )))
   "Gaudy expressions to highlight in Scheme modes.")
 
@@ -393,9 +403,9 @@ that variable's value is a string."
        (not buffer-read-only)
        (insert dsssl-sgml-declaration))
   (setq font-lock-defaults '(dsssl-font-lock-keywords
-                            nil t (("+-*/.<>=?$%_&~^:" . "w"))
-                            beginning-of-defun
-                            (font-lock-mark-block-function . mark-defun)))
+                             nil t (("+-*/.<>=?$%_&~^:" . "w"))
+                             beginning-of-defun
+                             (font-lock-mark-block-function . mark-defun)))
   (setq-local add-log-current-defun-function #'lisp-current-defun-name)
   (setq-local imenu-case-fold-search nil)
   (setq imenu-generic-expression dsssl-imenu-generic-expression)
@@ -415,22 +425,22 @@ that variable's value is a string."
   (eval-when-compile
     (list
      ;; Similar to Scheme
-     (list "(\\(define\\(-\\w+\\)?\\)\\>[      ]*\\((?\\)\\(\\sw+\\)\\>"
-          '(1 font-lock-keyword-face)
-          '(4 font-lock-function-name-face))
+     (list "(\\(define\\(-\\w+\\)?\\)\\>[       ]*\\((?\\)\\(\\sw+\\)\\>"
+           '(1 font-lock-keyword-face)
+           '(4 font-lock-function-name-face))
      (cons
       (concat "(\\("
-             ;; (make-regexp '("case" "cond" "else" "if" "lambda"
-             ;; "let" "let*" "letrec" "and" "or" "map" "with-mode"))
-             "and\\|c\\(ase\\|ond\\)\\|else\\|if\\|"
-             "l\\(ambda\\|et\\(\\|*\\|rec\\)\\)\\|map\\|or\\|with-mode"
-             "\\)\\>")
+              ;; (make-regexp '("case" "cond" "else" "if" "lambda"
+              ;; "let" "let*" "letrec" "and" "or" "map" "with-mode"))
+              "and\\|c\\(ase\\|ond\\)\\|else\\|if\\|"
+              "l\\(ambda\\|et\\(\\|*\\|rec\\)\\)\\|map\\|or\\|with-mode"
+              "\\)\\>")
       1)
      ;; DSSSL syntax
-     '("(\\(element\\|mode\\|declare-\\w+\\)\\>[       ]*\\(\\sw+\\)"
+     '("(\\(element\\|mode\\|declare-\\w+\\)\\>[        ]*\\(\\sw+\\)"
        (1 font-lock-keyword-face)
        (2 font-lock-type-face))
-     '("(\\(element\\)\\>[     ]*(\\(\\S)+\\))"
+     '("(\\(element\\)\\>[      ]*(\\(\\S)+\\))"
        (1 font-lock-keyword-face)
        (2 font-lock-type-face))
      '("\\<\\sw+:\\>" . font-lock-constant-face) ; trailing `:' c.f. scheme
@@ -467,7 +477,7 @@ indentation."
               (progn (goto-char calculate-lisp-indent-last-sexp)
                      (beginning-of-line)
                      (parse-partial-sexp (point)
-                                        calculate-lisp-indent-last-sexp 0 t)))
+                                         calculate-lisp-indent-last-sexp 0 t)))
           ;; Indent under the list or under the first sexp on the same
           ;; line as calculate-lisp-indent-last-sexp.  Note that first
           ;; thing on that line has to be complete sexp since we are
@@ -475,20 +485,20 @@ indentation."
           (backward-prefix-chars)
           (current-column))
       (let ((function (buffer-substring (point)
-                                       (progn (forward-sexp 1) (point))))
-           method)
-       (setq method (or (get (intern-soft function) 'scheme-indent-function)
-                        (get (intern-soft function) 'scheme-indent-hook)))
-       (cond ((or (eq method 'defun)
-                  (and (null method)
-                       (> (length function) 3)
-                       (string-match "\\`def" function)))
-              (lisp-indent-defform state indent-point))
-             ((integerp method)
-              (lisp-indent-specform method state
-                                    indent-point normal-indent))
-             (method
-               (funcall method state indent-point normal-indent)))))))
+                                        (progn (forward-sexp 1) (point))))
+            method)
+        (setq method (or (get (intern-soft function) 'scheme-indent-function)
+                         (get (intern-soft function) 'scheme-indent-hook)))
+        (cond ((or (eq method 'defun)
+                   (and (null method)
+                        (> (length function) 3)
+                        (string-match "\\`def" function)))
+               (lisp-indent-defform state indent-point))
+              ((integerp method)
+               (lisp-indent-specform method state
+                                     indent-point normal-indent))
+              (method
+                (funcall method state indent-point normal-indent)))))))
 
 \f
 ;;; Let is different in Scheme
@@ -546,6 +556,18 @@ indentation."
 (put 'call-with-values 'scheme-indent-function 1) ; r5rs?
 (put 'dynamic-wind 'scheme-indent-function 3) ; r5rs?
 \f
+;; R7RS
+(put 'when 'scheme-indent-function 1)
+(put 'unless 'scheme-indent-function 1)
+(put 'letrec* 'scheme-indent-function 1)
+(put 'parameterize 'scheme-indent-function 1)
+(put 'define-values 'scheme-indent-function 1)
+(put 'define-record-type 'scheme-indent-function 1) ;; is 1 correct?
+(put 'define-library 'scheme-indent-function 1)
+
+;; SRFI-8
+(put 'receive 'scheme-indent-function 2)
+\f
 ;;;; MIT Scheme specific indentation.
 
 (if scheme-mit-dialect
index 4f160e1ad6ddbae6d3b6d06505b4ce8e950438ff..4fe47f026b6a0e0772ecae8e05bc805bc74fb23b 100644 (file)
@@ -1662,7 +1662,12 @@ with your script for an edit-interpret-debug cycle."
   (setq-local skeleton-filter-function 'sh-feature)
   (setq-local skeleton-newline-indent-rigidly t)
   (setq-local defun-prompt-regexp
-             (concat "^\\(function[ \t]\\|[[:alnum:]]+[ \t]+()[ \t]+\\)"))
+              (concat
+               "^\\("
+               "\\(function[ \t]\\)?[ \t]*[[:alnum:]]+[ \t]*([ \t]*)"
+               "\\|"
+               "function[ \t]+[[:alnum:]]+[ \t]*\\(([ \t]*)\\)?"
+               "\\)[ \t]*"))
   (setq-local add-log-current-defun-function #'sh-current-defun-name)
   (add-hook 'completion-at-point-functions
             #'sh-completion-at-point-function nil t)
index fd59f4687c6cf7d0205cb849d580e96f4b063f8b..be7c4ddccf25c1f91d5082eacc66079737767076 100644 (file)
@@ -462,9 +462,9 @@ file.  Since that is a plaintext file, this could be dangerous."
      :list-all ("\\d+" . "\\dS+")
      :list-table ("\\d+ %s" . "\\dS+ %s")
      :completion-object sql-postgres-completion-object
-     :prompt-regexp "^\\w*=[#>] "
+     :prompt-regexp "^[[:alnum:]_]*=[#>] "
      :prompt-length 5
-     :prompt-cont-regexp "^\\w*[-(][#>] "
+     :prompt-cont-regexp "^[[:alnum:]_]*[-(][#>] "
      :input-filter sql-remove-tabs-filter
      :terminator ("\\(^\\s-*\\\\g$\\|;\\)" . "\\g"))
 
@@ -514,9 +514,9 @@ file.  Since that is a plaintext file, this could be dangerous."
      :sqli-comint-func sql-comint-vertica
      :list-all ("\\d" . "\\dS")
      :list-table "\\d %s"
-     :prompt-regexp "^\\w*=[#>] "
+     :prompt-regexp "^[[:alnum:]_]*=[#>] "
      :prompt-length 5
-     :prompt-cont-regexp "^\\w*[-(][#>] ")
+     :prompt-cont-regexp "^[[:alnum:]_]*[-(][#>] ")
     )
   "An alist of product specific configuration settings.
 
index 8e0133006d6babc714878b75b5f8d0a6bb226576..fd2e96af48b572643010af9c23d7a8bdcf0ee26e 100644 (file)
 ;;
 
 ;; This variable will always hold the version number of the mode
-(defconst verilog-mode-version "2015-09-18-314cf1d-vpo-GNU"
+(defconst verilog-mode-version "2016-03-22-7547e76-vpo-GNU"
   "Version of this Verilog mode.")
 (defconst verilog-mode-release-emacs t
   "If non-nil, this version of Verilog mode was released with Emacs itself.")
@@ -230,10 +230,9 @@ STRING should be given if the last search was by `string-match' on STRING."
         `(customize ,var))
       )
 
-    (unless (boundp 'inhibit-point-motion-hooks)
-      (defvar inhibit-point-motion-hooks nil))
-    (unless (boundp 'deactivate-mark)
-      (defvar deactivate-mark nil))
+    (defvar inhibit-modification-hooks)
+    (defvar inhibit-point-motion-hooks)
+    (defvar deactivate-mark)
     )
   ;;
   ;; OK, do this stuff if we are NOT XEmacs:
@@ -326,6 +325,14 @@ wherever possible, since it is slow."
                 (looking-at (concat "\\(?:"  regexp "\\)\\'")))))
         (not (null pos)))))))
 
+(eval-and-compile
+  (cond
+   ((fboundp 'restore-buffer-modified-p)
+    ;; Faster, as does not update mode line when nothing changes
+    (defalias 'verilog-restore-buffer-modified-p 'restore-buffer-modified-p))
+   (t
+    (defalias 'verilog-restore-buffer-modified-p 'set-buffer-modified-p))))
+
 (eval-and-compile
   ;; Both xemacs and emacs
   (condition-case nil
@@ -342,6 +349,11 @@ wherever possible, since it is slow."
   (condition-case nil
       (unless (fboundp 'prog-mode)
        (define-derived-mode prog-mode fundamental-mode "Prog"))
+    (error nil))
+  ;; Added in Emacs 25.1
+  (condition-case nil
+      (unless (fboundp 'forward-word-strictly)
+        (defalias 'forward-word-strictly 'forward-word))
     (error nil)))
 
 (eval-when-compile
@@ -827,6 +839,10 @@ Function takes three arguments, the original buffer, the
 difference buffer, and the point in original buffer with the
 first difference.")
 
+(defvar verilog-diff-ignore-regexp nil
+  "Non-nil specifies regexp which `verilog-diff-auto' will ignore.
+This is typically nil.")
+
 ;;; Compile support:
 ;;
 
@@ -1310,8 +1326,13 @@ See also `verilog-case-fold'."
   :type 'hook)
 
 (defvar verilog-imenu-generic-expression
-  '((nil "^\\s-*\\(\\(m\\(odule\\|acromodule\\)\\)\\|primitive\\)\\s-+\\([a-zA-Z0-9_.:]+\\)" 4)
-    ("*Vars*" "^\\s-*\\(reg\\|wire\\)\\s-+\\(\\|\\[[^]]+\\]\\s-+\\)\\([A-Za-z0-9_]+\\)" 3))
+  '((nil            "^\\s-*\\(?:m\\(?:odule\\|acromodule\\)\\|p\\(?:rimitive\\|rogram\\|ackage\\)\\)\\s-+\\([a-zA-Z0-9_.:]+\\)" 1)
+    ("*Variables*"  "^\\s-*\\(reg\\|wire\\|logic\\)\\s-+\\(\\|\\[[^]]+\\]\\s-+\\)\\([A-Za-z0-9_]+\\)" 3)
+    ("*Classes*"    "^\\s-*\\(?:\\(?:virtual\\|interface\\)\\s-+\\)?class\\s-+\\([A-Za-z_][A-Za-z0-9_]+\\)" 1)
+    ("*Tasks*"      "^\\s-*\\(?:\\(?:static\\|pure\\|virtual\\|local\\|protected\\)\\s-+\\)*task\\s-+\\(?:\\(?:static\\|automatic\\)\\s-+\\)?\\([A-Za-z_][A-Za-z0-9_:]+\\)" 1)
+    ("*Functions*"  "^\\s-*\\(?:\\(?:static\\|pure\\|virtual\\|local\\|protected\\)\\s-+\\)*function\\s-+\\(?:\\(?:static\\|automatic\\)\\s-+\\)?\\(?:\\w+\\s-+\\)?\\([A-Za-z_][A-Za-z0-9_:]+\\)" 1)
+    ("*Interfaces*" "^\\s-*interface\\s-+\\([a-zA-Z_0-9]+\\)" 1)
+    ("*Types*"      "^\\s-*typedef\\s-+.*\\s-+\\([a-zA-Z_0-9]+\\)\\s-*;" 1))
   "Imenu expression for Verilog mode.  See `imenu-generic-expression'.")
 
 ;;
@@ -1363,7 +1384,7 @@ If set will become buffer local.")
     (define-key map "\C-c\C-i" 'verilog-pretty-declarations)
     (define-key map "\C-c="    'verilog-pretty-expr)
     (define-key map "\C-c\C-b" 'verilog-submit-bug-report)
-    (define-key map "\M-*"     'verilog-star-comment)
+    (define-key map "\C-c/"    'verilog-star-comment)
     (define-key map "\C-c\C-c" 'verilog-comment-region)
     (define-key map "\C-c\C-u" 'verilog-uncomment-region)
     (when (featurep 'xemacs)
@@ -2937,8 +2958,6 @@ find the errors."
     (modify-syntax-entry ?> "." table)
     (modify-syntax-entry ?& "." table)
     (modify-syntax-entry ?| "." table)
-    ;; FIXME: This goes against Emacs conventions.  Use "_" syntax instead and
-    ;; then use regexps with things like "\\_<...\\_>".
     (modify-syntax-entry ?` "w" table)  ; ` is part of definition symbols in Verilog
     (modify-syntax-entry ?_ "w" table)
     (modify-syntax-entry ?\' "." table)
@@ -3017,7 +3036,7 @@ See also `verilog-font-lock-extra-types'.")
   "Font lock mode face used to highlight AMS keywords."
   :group 'font-lock-highlighting-faces)
 
-(defvar verilog-font-grouping-keywords-face
+(defvar verilog-font-lock-grouping-keywords-face
   'verilog-font-lock-grouping-keywords-face
   "Font to use for Verilog Grouping Keywords (such as begin..end).")
 (defface verilog-font-lock-grouping-keywords-face
@@ -3225,56 +3244,63 @@ A change is considered significant if it affects the buffer text
 in any way that isn't completely restored again.  Any
 user-visible changes to the buffer must not be within a
 `verilog-save-buffer-state'."
-  ;; From c-save-buffer-state
-  `(let* ((modified (buffer-modified-p))
-         (buffer-undo-list t)
-         (inhibit-read-only t)
-         (inhibit-point-motion-hooks t)
-         (verilog-no-change-functions t)
-         before-change-functions
-         after-change-functions
-         deactivate-mark
-         buffer-file-name ; Prevent primitives checking
-         buffer-file-truename) ; for file modification
-     (unwind-protect
-        (progn ,@body)
-       (and (not modified)
-           (buffer-modified-p)
-           (set-buffer-modified-p nil)))))
+  `(let ((inhibit-point-motion-hooks t)
+         (verilog-no-change-functions t))
+     ,(if (fboundp 'with-silent-modifications)
+          `(with-silent-modifications ,@body)
+        ;; Backward compatible version of with-silent-modifications
+        `(let* ((modified (buffer-modified-p))
+                (buffer-undo-list t)
+                (inhibit-read-only t)
+                (inhibit-modification-hooks t)
+                ;; XEmacs ignores inhibit-modification-hooks.
+                before-change-functions after-change-functions
+                deactivate-mark
+                buffer-file-name        ; Prevent primitives checking
+                buffer-file-truename)  ; for file modification
+           (unwind-protect
+               (progn ,@body)
+             (and (not modified)
+                  (buffer-modified-p)
+                  (verilog-restore-buffer-modified-p nil)))))))
 
-(defmacro verilog-save-no-change-functions (&rest body)
-  "Execute BODY forms, disabling all change hooks in BODY.
-For insignificant changes, see instead `verilog-save-buffer-state'."
-  `(let* ((inhibit-point-motion-hooks t)
-         (verilog-no-change-functions t)
-         before-change-functions
-         after-change-functions)
-     (progn ,@body)))
 
 (defvar verilog-save-font-mod-hooked nil
-  "Local variable when inside a `verilog-save-font-mods' block.")
+  "Local variable when inside a `verilog-save-font-no-change-functions' block.")
 (make-variable-buffer-local 'verilog-save-font-mod-hooked)
 
-(defmacro verilog-save-font-mods (&rest body)
 "Execute BODY forms, disabling text modifications to allow performing BODY.
+(defmacro verilog-save-font-no-change-functions (&rest body)
"Execute BODY forms, disabling all change hooks in BODY.
 Includes temporary disabling of `font-lock' to restore the buffer
 to full text form for parsing.  Additional actions may be specified with
-`verilog-before-save-font-hook' and `verilog-after-save-font-hook'."
-  ;; Before version 20, match-string with font-lock returns a
-  ;; vector that is not equal to the string.  IE if on "input"
-  ;; nil==(equal "input" (progn (looking-at "input") (match-string 0)))
-  `(let* ((hooked (unless verilog-save-font-mod-hooked
-                   (verilog-run-hooks 'verilog-before-save-font-hook)
-                   t))
-         (verilog-save-font-mod-hooked t)
-         (fontlocked (when (and (boundp 'font-lock-mode) font-lock-mode)
-                       (font-lock-mode 0)
-                       t)))
-     (unwind-protect
-         (progn ,@body)
-       ;; Unwind forms
-       (when fontlocked (font-lock-mode t))
-       (when hooked (verilog-run-hooks 'verilog-after-save-font-hook)))))
+`verilog-before-save-font-hook' and `verilog-after-save-font-hook'.
+For insignificant changes, see instead `verilog-save-buffer-state'."
+ `(if verilog-save-font-mod-hooked ; Short-circuit a recursive call
+      (progn ,@body)
+    ;; Before version 20, match-string with font-lock returns a
+    ;; vector that is not equal to the string.  IE if on "input"
+    ;; nil==(equal "input" (progn (looking-at "input") (match-string 0)))
+    ;; Therefore we must remove and restore font-lock mode
+    (verilog-run-hooks 'verilog-before-save-font-hook)
+    (let* ((verilog-save-font-mod-hooked (- (point-max) (point-min)))
+           ;; Significant speed savings with no font-lock properties
+           (fontlocked (when (and (boundp 'font-lock-mode) font-lock-mode)
+                         (font-lock-mode 0)
+                         t)))
+      (run-hook-with-args 'before-change-functions (point-min) (point-max))
+      (unwind-protect
+          ;; Must inhibit and restore hooks before restoring font-lock
+          (let* ((inhibit-point-motion-hooks t)
+                 (inhibit-modification-hooks t)
+                 (verilog-no-change-functions t)
+                 ;; XEmacs and pre-Emacs 21 ignore inhibit-modification-hooks.
+                 before-change-functions after-change-functions)
+            (progn ,@body))
+        ;; Unwind forms
+        (run-hook-with-args 'after-change-functions (point-min) (point-max)
+                            verilog-save-font-mod-hooked) ; old length
+        (when fontlocked (font-lock-mode t))
+        (verilog-run-hooks 'verilog-after-save-font-hook)))))
 
 ;;
 ;; Comment detection and caching
@@ -3854,6 +3880,25 @@ Key bindings specific to `verilog-mode-map' are:
   (add-hook 'write-contents-hooks 'verilog-auto-save-check nil 'local)
   ;; verilog-mode-hook call added by define-derived-mode
   )
+
+;;; Integration with the speedbar
+;;
+
+(declare-function speedbar-add-supported-extension "speedbar" (extension))
+
+(defun verilog-speedbar-initialize ()
+  "Initialize speedbar to understand `verilog-mode'."
+  ;; Set Verilog file extensions (extracted from `auto-mode-alist')
+  (let ((mode-alist auto-mode-alist))
+    (while mode-alist
+      (when (eq (cdar mode-alist) 'verilog-mode)
+        (speedbar-add-supported-extension (caar mode-alist)))
+      (setq mode-alist (cdr mode-alist)))))
+
+;; If the speedbar is loaded, execute initialization instructions right away,
+;; otherwise add the initialization instructions to the speedbar loader.
+(eval-after-load "speedbar" '(verilog-speedbar-initialize))
+
 \f
 ;;; Electric functions:
 ;;
@@ -8074,7 +8119,7 @@ Duplicate signals are also removed.  For example A[2] and A[1] become A[2:1]."
             (when (and sv-busstring
                        (not (equal sv-busstring (verilog-sig-bits sig))))
                (when nil  ; Debugging
-                (message (concat "Warning, can't merge into single bus %s%s"
+                (message (concat "Warning, can't merge into single bus `%s%s'"
                                  ", the AUTOs may be wrong")
                          sv-name bus))
               (setq buswarn ", Couldn't Merge"))
@@ -8377,18 +8422,18 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                 (setcar (cdr (cdr (cdr newsig)))
                         (if (verilog-sig-memory newsig)
                             (concat (verilog-sig-memory newsig) (match-string 1))
-                          (match-string 1))))
+                          (match-string-no-properties 1))))
                 (vec  ; Multidimensional
                 (setq multidim (cons vec multidim))
                 (setq vec (verilog-string-replace-matches
-                           "\\s-+" "" nil nil (match-string 1))))
+                           "\\s-+" "" nil nil (match-string-no-properties 1))))
                 (t  ; Bit width
                 (setq vec (verilog-string-replace-matches
-                           "\\s-+" "" nil nil (match-string 1))))))
+                           "\\s-+" "" nil nil (match-string-no-properties 1))))))
         ;; Normal or escaped identifier -- note we remember the \ if escaped
         ((looking-at "\\s-*\\([a-zA-Z0-9`_$]+\\|\\\\[^ \t\n\f]+\\)")
          (goto-char (match-end 0))
-         (setq keywd (match-string 1))
+         (setq keywd (match-string-no-properties 1))
          (when (string-match "^\\\\" (match-string 1))
             (setq keywd (concat keywd " ")))  ; Escaped ID needs space at end
          ;; Add any :: package names to same identifier
@@ -8573,11 +8618,12 @@ Return an array of [outputs inouts inputs wire reg assign const]."
   (defvar sigs-out-unk)
   (defvar sigs-temp)
   ;; These are known to be from other packages and may not be defined
-  (defvar diff-command nil)
+  (defvar diff-command)
   ;; There are known to be from newer versions of Emacs
-  (defvar create-lockfiles))
+  (defvar create-lockfiles)
+  (defvar which-func-modes))
 
-(defun verilog-read-sub-decls-sig (submoddecls comment port sig vec multidim)
+(defun verilog-read-sub-decls-sig (submoddecls comment port sig vec multidim mem)
   "For `verilog-read-sub-decls-line', add a signal."
   ;; sig eq t to indicate .name syntax
   ;;(message "vrsds: %s(%S)" port sig)
@@ -8588,6 +8634,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
       (setq sig  (if dotname port (verilog-symbol-detick-denumber sig)))
       (if vec (setq vec  (verilog-symbol-detick-denumber vec)))
       (if multidim (setq multidim  (mapcar `verilog-symbol-detick-denumber multidim)))
+      (if mem (setq mem (verilog-symbol-detick-denumber mem)))
       (unless (or (not sig)
                   (equal sig ""))  ; Ignore .foo(1'b1) assignments
        (cond ((or (setq portdata (assoc port (verilog-decls-get-inouts submoddecls)))
@@ -8597,7 +8644,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To/From " comment)
-                           (verilog-sig-memory portdata)
+                            mem
                            nil
                            (verilog-sig-signed portdata)
                            (unless (member (verilog-sig-type portdata) '("wire" "reg"))
@@ -8611,7 +8658,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "From " comment)
-                           (verilog-sig-memory portdata)
+                           mem
                            nil
                            (verilog-sig-signed portdata)
                            ;; Though ok in SV, in V2K code, propagating the
@@ -8630,7 +8677,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To " comment)
-                           (verilog-sig-memory portdata)
+                           mem
                            nil
                            (verilog-sig-signed portdata)
                            (unless (member (verilog-sig-type portdata) '("wire" "reg"))
@@ -8643,7 +8690,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To/From " comment)
-                           (verilog-sig-memory portdata)
+                           mem
                            nil
                            (verilog-sig-signed portdata)
                            (verilog-sig-type portdata)
@@ -8656,7 +8703,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To/From " comment)
-                           (verilog-sig-memory portdata)
+                           mem
                            nil
                            (verilog-sig-signed portdata)
                            (verilog-sig-type portdata)
@@ -8669,7 +8716,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
   "For `verilog-read-sub-decls-line', parse a subexpression and add signals."
   ;;(message "vrsde: `%s'" expr)
   ;; Replace special /*[....]*/ comments inserted by verilog-auto-inst-port
-  (setq expr (verilog-string-replace-matches "/\\*\\(\\[[^*]+\\]\\)\\*/" "\\1" nil nil expr))
+  (setq expr (verilog-string-replace-matches "/\\*\\(\\.?\\[[^*]+\\]\\)\\*/" "\\1" nil nil expr))
   ;; Remove front operators
   (setq expr (verilog-string-replace-matches "^\\s-*[---+~!|&]+\\s-*" "" nil nil expr))
   ;;
@@ -8683,7 +8730,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
        (while (setq mstr (pop mlst))
          (verilog-read-sub-decls-expr submoddecls comment port mstr)))))
    (t
-    (let (sig vec multidim)
+    (let (sig vec multidim mem)
       ;; Remove leading reduction operators, etc
       (setq expr (verilog-string-replace-matches "^\\s-*[---+~!|&]+\\s-*" "" nil nil expr))
       ;;(message "vrsde-ptop: `%s'" expr)
@@ -8703,10 +8750,15 @@ Return an array of [outputs inouts inputs wire reg assign const]."
        (when vec (setq multidim (cons vec multidim)))
        (setq vec (match-string 1 expr)
              expr (substring expr (match-end 0))))
+      ;; Find .[unpacked_memory] or .[unpacked][unpacked]...
+      (while (string-match "^\\s-*\\.\\(\\[[^]]+\\]\\)" expr)
+       ;;(message "vrsde-m: `%s'" (match-string 1 expr))
+       (setq mem (match-string 1 expr)
+             expr (substring expr (match-end 0))))
       ;; If found signal, and nothing unrecognized, add the signal
       ;;(message "vrsde-rem: `%s'" expr)
       (when (and sig (string-match "^\\s-*$" expr))
-       (verilog-read-sub-decls-sig submoddecls comment port sig vec multidim))))))
+       (verilog-read-sub-decls-sig submoddecls comment port sig vec multidim mem))))))
 
 (defun verilog-read-sub-decls-line (submoddecls comment)
   "For `verilog-read-sub-decls', read lines of port defs until none match.
@@ -8717,23 +8769,23 @@ Inserts the list of signals found, using submodi to look up each port."
       (while (not done)
        ;; Get port name
        (cond ((looking-at "\\s-*\\.\\s-*\\([a-zA-Z0-9`_$]*\\)\\s-*(\\s-*")
-              (setq port (match-string 1))
+              (setq port (match-string-no-properties 1))
               (goto-char (match-end 0)))
              ;; .\escaped (
              ((looking-at "\\s-*\\.\\s-*\\(\\\\[^ \t\n\f]*\\)\\s-*(\\s-*")
-               (setq port (concat (match-string 1) " "))  ; escaped id's need trailing space
+               (setq port (concat (match-string-no-properties 1) " "))  ; escaped id's need trailing space
               (goto-char (match-end 0)))
              ;; .name
              ((looking-at "\\s-*\\.\\s-*\\([a-zA-Z0-9`_$]*\\)\\s-*[,)/]")
               (verilog-read-sub-decls-sig
-               submoddecls comment (match-string 1) t ; sig==t for .name
-               nil nil) ; vec multidim
+               submoddecls comment (match-string-no-properties 1) t ; sig==t for .name
+               nil nil nil) ; vec multidim mem
               (setq port nil))
              ;; .\escaped_name
              ((looking-at "\\s-*\\.\\s-*\\(\\\\[^ \t\n\f]*\\)\\s-*[,)/]")
               (verilog-read-sub-decls-sig
-               submoddecls comment (concat (match-string 1) " ") t ; sig==t for .name
-               nil nil) ; vec multidim
+               submoddecls comment (concat (match-string-no-properties 1) " ") t ; sig==t for .name
+               nil nil nil) ; vec multidim mem
               (setq port nil))
              ;; random
              ((looking-at "\\s-*\\.[^(]*(")
@@ -8748,20 +8800,20 @@ Inserts the list of signals found, using submodi to look up each port."
          (cond ((looking-at "\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\s-*)")
                 (verilog-read-sub-decls-sig
                  submoddecls comment port
-                 (verilog-string-remove-spaces (match-string 1)) ; sig
-                 nil nil)) ; vec multidim
+                 (verilog-string-remove-spaces (match-string-no-properties 1)) ; sig
+                 nil nil nil)) ; vec multidim mem
                ;;
                ((looking-at "\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\s-*\\(\\[[^]]+\\]\\)\\s-*)")
                 (verilog-read-sub-decls-sig
                  submoddecls comment port
-                 (verilog-string-remove-spaces (match-string 1)) ; sig
-                 (match-string 2) nil)) ; vec multidim
+                 (verilog-string-remove-spaces (match-string-no-properties 1)) ; sig
+                 (match-string-no-properties 2) nil nil)) ; vec multidim mem
                ;; Fastpath was above looking-at's.
                ;; For something more complicated invoke a parser
                ((looking-at "[^)]+")
                 (verilog-read-sub-decls-expr
                  submoddecls comment port
-                 (buffer-substring
+                 (buffer-substring-no-properties
                   (point) (1- (progn (search-backward "(") ; start at (
                                      (verilog-forward-sexp-ign-cmt 1)
                                      (point)))))))) ; expr
@@ -8993,7 +9045,8 @@ IGNORE-NEXT is true to ignore next token, fake from inside case statement."
            ;;(if dbg (setq dbg (concat dbg (format "\tif-check-else-other %s\n" keywd))))
            (setq gotend t))
           ;; Final statement?
-          ((and exit-keywd (equal keywd exit-keywd))
+          ((and exit-keywd (and (equal keywd exit-keywd)
+                                 (not (looking-at "::"))))
            (setq gotend t)
            (forward-char (length keywd)))
           ;; Standard tokens...
@@ -9009,7 +9062,9 @@ IGNORE-NEXT is true to ignore next token, fake from inside case statement."
                (goto-char (match-end 0))
              (forward-char 1)))
            ((equal keywd ":")  ; Case statement, begin/end label, x?y:z
-            (cond ((equal "endcase" exit-keywd)  ; case x: y=z; statement next
+            (cond ((looking-at "::")
+                   (forward-char 1))  ; Another forward-char below
+                  ((equal "endcase" exit-keywd)  ; case x: y=z; statement next
                   (setq ignore-next nil rvalue nil))
                   ((equal "?" exit-keywd)  ; x?y:z rvalue
                    )  ; NOP
@@ -9104,7 +9159,7 @@ IGNORE-NEXT is true to ignore next token, fake from inside case statement."
       (verilog-read-always-signals-recurse nil nil nil)
       (setq sigs-out-i (append sigs-out-i sigs-out-unk)
            sigs-out-unk nil)
-      ;;(if dbg (with-current-buffer (get-buffer-create "*vl-dbg*")) (delete-region (point-min) (point-max)) (insert dbg) (setq dbg ""))
+      ;;(if dbg (with-current-buffer (get-buffer-create "*vl-dbg*") (delete-region (point-min) (point-max)) (insert dbg) (setq dbg "")))
       ;; Return what was found
       (verilog-alw-new sigs-out-d sigs-out-i sigs-temp sigs-in))))
 
@@ -9894,7 +9949,7 @@ Return modi if successful, else print message unless IGNORE-ERROR is true."
               (or mif ignore-error
                   (error
                    (concat
-                    "%s: Can't locate %s module definition%s"
+                    "%s: Can't locate `%s' module definition%s"
                     "\n    Check the verilog-library-directories variable."
                     "\n    I looked in (if not listed, doesn't exist):\n\t%s")
                    (verilog-point-text) module
@@ -9959,9 +10014,9 @@ Cache the output of function so next call may have faster access."
            (t
             ;; Read from file
             ;; Clear then restore any highlighting to make emacs19 happy
-            (let (func-returns)
-              (verilog-save-font-mods
-               (setq func-returns (funcall function)))
+             (let ((func-returns
+                    (verilog-save-font-no-change-functions
+                     (funcall function))))
               ;; Cache for next time
               (setq verilog-modi-cache-list
                     (cons (list (list modi function)
@@ -10003,7 +10058,7 @@ Report errors unless optional IGNORE-ERROR."
   (let* ((realname (verilog-symbol-detick name t))
         (modport (assoc name (verilog-decls-get-modports (verilog-modi-get-decls modi)))))
     (or modport ignore-error
-       (error "%s: Can't locate %s modport definition%s"
+       (error "%s: Can't locate `%s' modport definition%s"
                (verilog-point-text) name
                (if (not (equal name realname))
                    (concat " (Expanded macro to " realname ")")
@@ -10193,7 +10248,7 @@ When MODI is non-null, also add to modi-cache, for tracking."
          ((equal direction "parameter")
           (verilog-modi-cache-add-gparams modi sigs))
          (t
-          (error "Unsupported verilog-insert-definition direction: %s" direction))))
+          (error "Unsupported verilog-insert-definition direction: `%s'" direction))))
   (or dont-sort
       (setq sigs (sort (copy-alist sigs) `verilog-signals-sort-compare)))
   (while sigs
@@ -10224,7 +10279,7 @@ When MODI is non-null, also add to modi-cache, for tracking."
 
 (eval-when-compile
   (if (not (boundp 'indent-pt))
-      (defvar indent-pt nil "Local used by insert-indent")))
+      (defvar indent-pt nil "Local used by `verilog-insert-indent'.")))
 
 (defun verilog-insert-indent (&rest stuff)
   "Indent to position stored in local `indent-pt' variable, then insert STUFF.
@@ -10510,6 +10565,41 @@ removed."
          (re-search-backward ",")
          (delete-char 1))))))
 
+(defun verilog-delete-auto-buffer ()
+  "Perform `verilog-delete-auto' on the current buffer.
+Intended for internal use inside a `verilog-save-font-no-change-functions' block."
+  ;; Allow user to customize
+  (verilog-run-hooks 'verilog-before-delete-auto-hook)
+
+  ;; Remove those that have multi-line insertions, possibly with parameters
+  ;; We allow anything beginning with AUTO, so that users can add their own
+  ;; patterns
+  (verilog-auto-re-search-do
+   (concat "/\\*AUTO[A-Za-z0-9_]+"
+           ;; Optional parens or quoted parameter or .* for (((...)))
+           "\\(\\|([^)]*)\\|(\"[^\"]*\")\\).*?"
+           "\\*/")
+   'verilog-delete-autos-lined)
+  ;; Remove those that are in parenthesis
+  (verilog-auto-re-search-do
+   (concat "/\\*"
+           (eval-when-compile
+             (verilog-regexp-words
+              `("AS" "AUTOARG" "AUTOCONCATWIDTH" "AUTOINST" "AUTOINSTPARAM"
+                "AUTOSENSE")))
+           "\\*/")
+   'verilog-delete-to-paren)
+  ;; Do .* instantiations, but avoid removing any user pins by looking for our magic comments
+  (verilog-auto-re-search-do "\\.\\*"
+                             'verilog-delete-auto-star-all)
+  ;; Remove template comments ... anywhere in case was pasted after AUTOINST removed
+  (goto-char (point-min))
+  (while (re-search-forward "\\s-*// \\(Templated\\|Implicit \\.\\*\\)\\([ \tLT0-9]*\\| LHS: .*\\)?$" nil t)
+    (replace-match ""))
+
+  ;; Final customize
+  (verilog-run-hooks 'verilog-delete-auto-hook))
+
 (defun verilog-delete-auto ()
   "Delete the automatic outputs, regs, and wires created by \\[verilog-auto].
 Use \\[verilog-auto] to re-insert the updated AUTOs.
@@ -10520,39 +10610,10 @@ called before and after this function, respectively."
   (save-excursion
     (if (buffer-file-name)
         (find-file-noselect (buffer-file-name)))  ; To check we have latest version
-    (verilog-save-no-change-functions
+    (verilog-save-font-no-change-functions
      (verilog-save-scan-cache
-      ;; Allow user to customize
-      (verilog-run-hooks 'verilog-before-delete-auto-hook)
-
-      ;; Remove those that have multi-line insertions, possibly with parameters
-      ;; We allow anything beginning with AUTO, so that users can add their own
-      ;; patterns
-      (verilog-auto-re-search-do
-       (concat "/\\*AUTO[A-Za-z0-9_]+"
-              ;; Optional parens or quoted parameter or .* for (((...)))
-              "\\(\\|([^)]*)\\|(\"[^\"]*\")\\).*?"
-              "\\*/")
-       'verilog-delete-autos-lined)
-      ;; Remove those that are in parenthesis
-      (verilog-auto-re-search-do
-       (concat "/\\*"
-              (eval-when-compile
-                (verilog-regexp-words
-                 `("AS" "AUTOARG" "AUTOCONCATWIDTH" "AUTOINST" "AUTOINSTPARAM"
-                   "AUTOSENSE")))
-              "\\*/")
-       'verilog-delete-to-paren)
-      ;; Do .* instantiations, but avoid removing any user pins by looking for our magic comments
-      (verilog-auto-re-search-do "\\.\\*"
-                                'verilog-delete-auto-star-all)
-      ;; Remove template comments ... anywhere in case was pasted after AUTOINST removed
-      (goto-char (point-min))
-      (while (re-search-forward "\\s-*// \\(Templated\\|Implicit \\.\\*\\)\\([ \tLT0-9]*\\| LHS: .*\\)?$" nil t)
-       (replace-match ""))
+      (verilog-delete-auto-buffer)))))
 
-      ;; Final customize
-      (verilog-run-hooks 'verilog-delete-auto-hook)))))
 \f
 ;;; Auto inject:
 ;;
@@ -10679,10 +10740,11 @@ Typing \\[verilog-inject-auto] will make this into:
 ;; Auto diff:
 ;;
 
-(defun verilog-diff-buffers-p (b1 b2 &optional whitespace)
+(defun verilog-diff-buffers-p (b1 b2 &optional whitespace regexp)
   "Return nil if buffers B1 and B2 have same contents.
 Else, return point in B1 that first mismatches.
-If optional WHITESPACE true, ignore whitespace."
+If optional WHITESPACE true, ignore whitespace.
+If optional REGEXP, ignore differences matching it."
   (save-excursion
     (let* ((case-fold-search nil)  ; compare-buffer-substrings cares
           (p1 (with-current-buffer b1 (goto-char (point-min))))
@@ -10703,6 +10765,15 @@ If optional WHITESPACE true, ignore whitespace."
            (goto-char p2)
            (skip-chars-forward " \t\n\r\f\v")
            (setq p2 (point))))
+       (when regexp
+         (with-current-buffer b1
+           (goto-char p1)
+           (when (looking-at regexp)
+              (setq p1 (match-end 0))))
+         (with-current-buffer b2
+           (goto-char p2)
+           (when (looking-at regexp)
+              (setq p2 (match-end 0)))))
        (setq size (min (- maxp1 p1) (- maxp2 p2)))
        (setq progress (compare-buffer-substrings b2 p2 (+ size p2)
                                                  b1 p1 (+ size p1)))
@@ -10723,7 +10794,7 @@ Ignores WHITESPACE if t, and writes output to stdout if SHOW."
   ;; call `diff' as `diff' has different calling semantics on different
   ;; versions of Emacs.
   (if (not (file-exists-p f1))
-      (message "Buffer %s has no associated file on disc" (buffer-name b2))
+      (message "Buffer `%s' has no associated file on disk" (buffer-name b2))
     (with-temp-buffer "*Verilog-Diff*"
                       (let ((outbuf (current-buffer))
                             (f2 (make-temp-file "vm-diff-auto-")))
@@ -10791,7 +10862,7 @@ or `diff' in batch mode."
            ;; Restore name if unwind
            (with-current-buffer b1 (setq buffer-file-name name1)))))
       ;;
-      (setq diffpt (verilog-diff-buffers-p b1 b2 t))
+      (setq diffpt (verilog-diff-buffers-p b1 b2 t verilog-diff-ignore-regexp))
       (cond ((not diffpt)
             (unless noninteractive (message "AUTO expansion identical"))
              (kill-buffer newname))  ; Nice to cleanup after oneself
@@ -11054,6 +11125,7 @@ If PAR-VALUES replace final strings with these parameter values."
         (vl-name (verilog-sig-name port-st))
         (vl-width (verilog-sig-width port-st))
         (vl-modport (verilog-sig-modport port-st))
+        (vl-memory (verilog-sig-memory port-st))
         (vl-mbits (if (verilog-sig-multidim port-st)
                        (verilog-sig-multidim-string port-st) ""))
         (vl-bits (if (or verilog-auto-inst-vector
@@ -11078,15 +11150,25 @@ If PAR-VALUES replace final strings with these parameter values."
                        (concat "\\<" (nth 0 (car check-values)) "\\>")
                        (concat "(" (nth 1 (car check-values)) ")")
                        t t vl-mbits)
+             vl-memory (when vl-memory
+                          (verilog-string-replace-matches
+                           (concat "\\<" (nth 0 (car check-values)) "\\>")
+                           (concat "(" (nth 1 (car check-values)) ")")
+                           t t vl-memory))
              check-values (cdr check-values)))
       (setq vl-bits (verilog-simplify-range-expression vl-bits)
            vl-mbits (verilog-simplify-range-expression vl-mbits)
+           vl-memory (when vl-memory (verilog-simplify-range-expression vl-memory))
            vl-width (verilog-make-width-expression vl-bits))) ; Not in the loop for speed
     ;; Default net value if not found
-    (setq dflt-bits (if (and (verilog-sig-bits port-st)
-                            (or (verilog-sig-multidim port-st)
-                                (verilog-sig-memory port-st)))
-                       (concat "/*" vl-mbits vl-bits "*/")
+    (setq dflt-bits (if (or (and (verilog-sig-bits port-st)
+                                 (verilog-sig-multidim port-st))
+                            (verilog-sig-memory port-st))
+                       (concat "/*" vl-mbits vl-bits
+                                ;; .[ used to separate packed from unpacked
+                                (if vl-memory "." "")
+                                (if vl-memory vl-memory "")
+                                "*/")
                      (concat vl-bits))
          tpl-net (concat port
                          (if (and vl-modport
@@ -11157,7 +11239,7 @@ If PAR-VALUES replace final strings with these parameter values."
          (for-star
           (indent-to (+ (if (< verilog-auto-inst-column 48) 24 16)
                         verilog-auto-inst-column))
-          (verilog-insert " // Implicit .\*\n")) ;For some reason the . or * must be escaped...
+          (verilog-insert " // Implicit .*\n"))
          (t
           (insert "\n")))))
 ;;(verilog-auto-inst-port (list "foo" "[5:0]") 10 (list (list "foo" "a@\"(% (+ @ 1) 4)\"a")) "3")
@@ -13316,13 +13398,16 @@ Typing \\[verilog-auto] will make this into:
           (sig-list-all  (verilog-decls-get-iovars moddecls))
           ;;
           (undecode-sig (or (assoc undecode-name sig-list-all)
-                            (error "%s: Signal %s not found in design" (verilog-point-text) undecode-name)))
+                            (error "%s: Signal `%s' not found in design"
+                                    (verilog-point-text) undecode-name)))
           (undecode-enum (or (verilog-sig-enum undecode-sig)
-                             (error "%s: Signal %s does not have an enum tag" (verilog-point-text) undecode-name)))
+                             (error "%s: Signal `%s' does not have an enum tag"
+                                     (verilog-point-text) undecode-name)))
           ;;
           (enum-sigs (verilog-signals-not-in
                       (or (verilog-signals-matching-enum sig-list-consts undecode-enum)
-                          (error "%s: No state definitions for %s" (verilog-point-text) undecode-enum))
+                          (error "%s: No state definitions for `%s'"
+                                  (verilog-point-text) undecode-enum))
                       nil))
           ;;
           (one-hot (or
@@ -13518,120 +13603,115 @@ Wilson Snyder (wsnyder@wsnyder.org)."
   (unless noninteractive (message "Updating AUTOs..."))
   (if (fboundp 'dinotrace-unannotate-all)
       (dinotrace-unannotate-all))
-  (verilog-save-font-mods
+  ;; Disable change hooks for speed
+  ;; This let can't be part of above let; must restore
+  ;; after-change-functions before font-lock resumes
+  (verilog-save-font-no-change-functions
    (let ((oldbuf (if (not (buffer-modified-p))
-                    (buffer-string)))
-        (case-fold-search verilog-case-fold)
-        ;; Cache directories; we don't write new files, so can't change
-        (verilog-dir-cache-preserving t)
-        ;; Cache current module
-        (verilog-modi-cache-current-enable t)
-        (verilog-modi-cache-current-max (point-min)) ; IE it's invalid
-        verilog-modi-cache-current)
-     (unwind-protect
-        ;; Disable change hooks for speed
-        ;; This let can't be part of above let; must restore
-        ;; after-change-functions before font-lock resumes
-        (verilog-save-no-change-functions
-         (verilog-save-scan-cache
-          (save-excursion
-            ;; Wipe cache; otherwise if we AUTOed a block above this one,
-            ;; we'll misremember we have generated IOs, confusing AUTOOUTPUT
-            (setq verilog-modi-cache-list nil)
-            ;; Local state
-            (verilog-read-auto-template-init)
-            ;; If we're not in verilog-mode, change syntax table so parsing works right
-            (unless (eq major-mode `verilog-mode) (verilog-mode))
-            ;; Allow user to customize
-            (verilog-run-hooks 'verilog-before-auto-hook)
-            ;; Try to save the user from needing to revert-file to reread file local-variables
-            (verilog-auto-reeval-locals)
-            (verilog-read-auto-lisp-present)
-            (verilog-read-auto-lisp (point-min) (point-max))
-            (verilog-getopt-flags)
-            ;; From here on out, we can cache anything we read from disk
-            (verilog-preserve-dir-cache
-             ;; These two may seem obvious to do always, but on large includes it can be way too slow
-             (when verilog-auto-read-includes
-               (verilog-read-includes)
-               (verilog-read-defines nil nil t))
-             ;; Setup variables due to SystemVerilog expansion
-             (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic-setup)
-             ;; This particular ordering is important
-             ;; INST: Lower modules correct, no internal dependencies, FIRST
-             (verilog-preserve-modi-cache
-              ;; Clear existing autos else we'll be screwed by existing ones
-              (verilog-delete-auto)
-              ;; Injection if appropriate
-              (when inject
-                (verilog-inject-inst)
-                (verilog-inject-sense)
-                (verilog-inject-arg))
-              ;;
-              ;; Do user inserts first, so their code can insert AUTOs
-              (verilog-auto-re-search-do "/\\*AUTOINSERTLISP(.*?)\\*/"
-                                         'verilog-auto-insert-lisp)
-              ;; Expand instances before need the signals the instances input/output
-              (verilog-auto-re-search-do "/\\*AUTOINSTPARAM\\*/" 'verilog-auto-inst-param)
-              (verilog-auto-re-search-do "/\\*AUTOINST\\*/" 'verilog-auto-inst)
-              (verilog-auto-re-search-do "\\.\\*" 'verilog-auto-star)
-              ;; Doesn't matter when done, but combine it with a common changer
-              (verilog-auto-re-search-do "/\\*\\(AUTOSENSE\\|AS\\)\\*/" 'verilog-auto-sense)
-              (verilog-auto-re-search-do "/\\*AUTORESET\\*/" 'verilog-auto-reset)
-              ;; Must be done before autoin/out as creates a reg
-              (verilog-auto-re-search-do "/\\*AUTOASCIIENUM(.*?)\\*/" 'verilog-auto-ascii-enum)
-              ;;
-              ;; first in/outs from other files
-              (verilog-auto-re-search-do "/\\*AUTOINOUTMODPORT(.*?)\\*/" 'verilog-auto-inout-modport)
-              (verilog-auto-re-search-do "/\\*AUTOINOUTMODULE(.*?)\\*/" 'verilog-auto-inout-module)
-              (verilog-auto-re-search-do "/\\*AUTOINOUTCOMP(.*?)\\*/" 'verilog-auto-inout-comp)
-              (verilog-auto-re-search-do "/\\*AUTOINOUTIN(.*?)\\*/" 'verilog-auto-inout-in)
-              (verilog-auto-re-search-do "/\\*AUTOINOUTPARAM(.*?)\\*/" 'verilog-auto-inout-param)
-              ;; next in/outs which need previous sucked inputs first
-              (verilog-auto-re-search-do "/\\*AUTOOUTPUT\\((.*?)\\)?\\*/" 'verilog-auto-output)
-              (verilog-auto-re-search-do "/\\*AUTOINPUT\\((.*?)\\)?\\*/" 'verilog-auto-input)
-              (verilog-auto-re-search-do "/\\*AUTOINOUT\\((.*?)\\)?\\*/" 'verilog-auto-inout)
-              ;; Then tie off those in/outs
-              (verilog-auto-re-search-do "/\\*AUTOTIEOFF\\*/" 'verilog-auto-tieoff)
-              ;; These can be anywhere after AUTOINSERTLISP
-              (verilog-auto-re-search-do "/\\*AUTOUNDEF\\((.*?)\\)?\\*/" 'verilog-auto-undef)
-              ;; Wires/regs must be after inputs/outputs
-              (verilog-auto-re-search-do "/\\*AUTOASSIGNMODPORT(.*?)\\*/" 'verilog-auto-assign-modport)
-              (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic)
-              (verilog-auto-re-search-do "/\\*AUTOWIRE\\*/" 'verilog-auto-wire)
-              (verilog-auto-re-search-do "/\\*AUTOREG\\*/" 'verilog-auto-reg)
-              (verilog-auto-re-search-do "/\\*AUTOREGINPUT\\*/" 'verilog-auto-reg-input)
-              ;; outputevery needs AUTOOUTPUTs done first
-              (verilog-auto-re-search-do "/\\*AUTOOUTPUTEVERY\\((.*?)\\)?\\*/" 'verilog-auto-output-every)
-              ;; After we've created all new variables
-              (verilog-auto-re-search-do "/\\*AUTOUNUSED\\*/" 'verilog-auto-unused)
-              ;; Must be after all inputs outputs are generated
-              (verilog-auto-re-search-do "/\\*AUTOARG\\*/" 'verilog-auto-arg)
-              ;; User inserts
-              (verilog-auto-re-search-do "/\\*AUTOINSERTLAST(.*?)\\*/" 'verilog-auto-insert-last)
-              ;; Fix line numbers (comments only)
-              (when verilog-auto-inst-template-numbers
-                (verilog-auto-templated-rel))
-              (when verilog-auto-template-warn-unused
-                (verilog-auto-template-lint))))
-            ;;
-            (verilog-run-hooks 'verilog-auto-hook)
-            ;;
-            (when verilog-auto-delete-trailing-whitespace
-              (verilog-delete-trailing-whitespace))
-            ;;
-            (set (make-local-variable 'verilog-auto-update-tick) (buffer-chars-modified-tick))
-            ;;
-            ;; If end result is same as when started, clear modified flag
-            (cond ((and oldbuf (equal oldbuf (buffer-string)))
-                   (set-buffer-modified-p nil)
-                   (unless noninteractive (message "Updating AUTOs...done (no changes)")))
-                  (t (unless noninteractive (message "Updating AUTOs...done"))))
-            ;; End of after-change protection
-            )))
-       ;; Unwind forms
-       ;; Currently handled in verilog-save-font-mods
-       ))))
+                     (buffer-string)))
+         (case-fold-search verilog-case-fold)
+         ;; Cache directories; we don't write new files, so can't change
+         (verilog-dir-cache-preserving t)
+         ;; Cache current module
+         (verilog-modi-cache-current-enable t)
+         (verilog-modi-cache-current-max (point-min)) ; IE it's invalid
+         verilog-modi-cache-current)
+     (verilog-save-scan-cache
+      (save-excursion
+        ;; Wipe cache; otherwise if we AUTOed a block above this one,
+        ;; we'll misremember we have generated IOs, confusing AUTOOUTPUT
+        (setq verilog-modi-cache-list nil)
+        ;; Local state
+        (verilog-read-auto-template-init)
+        ;; If we're not in verilog-mode, change syntax table so parsing works right
+        (unless (eq major-mode `verilog-mode) (verilog-mode))
+        ;; Allow user to customize
+        (verilog-run-hooks 'verilog-before-auto-hook)
+        ;; Try to save the user from needing to revert-file to reread file local-variables
+        (verilog-auto-reeval-locals)
+        (verilog-read-auto-lisp-present)
+        (verilog-read-auto-lisp (point-min) (point-max))
+        (verilog-getopt-flags)
+        ;; From here on out, we can cache anything we read from disk
+        (verilog-preserve-dir-cache
+         ;; These two may seem obvious to do always, but on large includes it can be way too slow
+         (when verilog-auto-read-includes
+           (verilog-read-includes)
+           (verilog-read-defines nil nil t))
+         ;; Setup variables due to SystemVerilog expansion
+         (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic-setup)
+         ;; This particular ordering is important
+         ;; INST: Lower modules correct, no internal dependencies, FIRST
+         (verilog-preserve-modi-cache
+          ;; Clear existing autos else we'll be screwed by existing ones
+          (verilog-delete-auto-buffer)
+          ;; Injection if appropriate
+          (when inject
+            (verilog-inject-inst)
+            (verilog-inject-sense)
+            (verilog-inject-arg))
+          ;;
+          ;; Do user inserts first, so their code can insert AUTOs
+          (verilog-auto-re-search-do "/\\*AUTOINSERTLISP(.*?)\\*/"
+                                     'verilog-auto-insert-lisp)
+          ;; Expand instances before need the signals the instances input/output
+          (verilog-auto-re-search-do "/\\*AUTOINSTPARAM\\*/" 'verilog-auto-inst-param)
+          (verilog-auto-re-search-do "/\\*AUTOINST\\*/" 'verilog-auto-inst)
+          (verilog-auto-re-search-do "\\.\\*" 'verilog-auto-star)
+          ;; Doesn't matter when done, but combine it with a common changer
+          (verilog-auto-re-search-do "/\\*\\(AUTOSENSE\\|AS\\)\\*/" 'verilog-auto-sense)
+          (verilog-auto-re-search-do "/\\*AUTORESET\\*/" 'verilog-auto-reset)
+          ;; Must be done before autoin/out as creates a reg
+          (verilog-auto-re-search-do "/\\*AUTOASCIIENUM(.*?)\\*/" 'verilog-auto-ascii-enum)
+          ;;
+          ;; first in/outs from other files
+          (verilog-auto-re-search-do "/\\*AUTOINOUTMODPORT(.*?)\\*/" 'verilog-auto-inout-modport)
+          (verilog-auto-re-search-do "/\\*AUTOINOUTMODULE(.*?)\\*/" 'verilog-auto-inout-module)
+          (verilog-auto-re-search-do "/\\*AUTOINOUTCOMP(.*?)\\*/" 'verilog-auto-inout-comp)
+          (verilog-auto-re-search-do "/\\*AUTOINOUTIN(.*?)\\*/" 'verilog-auto-inout-in)
+          (verilog-auto-re-search-do "/\\*AUTOINOUTPARAM(.*?)\\*/" 'verilog-auto-inout-param)
+          ;; next in/outs which need previous sucked inputs first
+          (verilog-auto-re-search-do "/\\*AUTOOUTPUT\\((.*?)\\)?\\*/" 'verilog-auto-output)
+          (verilog-auto-re-search-do "/\\*AUTOINPUT\\((.*?)\\)?\\*/" 'verilog-auto-input)
+          (verilog-auto-re-search-do "/\\*AUTOINOUT\\((.*?)\\)?\\*/" 'verilog-auto-inout)
+          ;; Then tie off those in/outs
+          (verilog-auto-re-search-do "/\\*AUTOTIEOFF\\*/" 'verilog-auto-tieoff)
+          ;; These can be anywhere after AUTOINSERTLISP
+          (verilog-auto-re-search-do "/\\*AUTOUNDEF\\((.*?)\\)?\\*/" 'verilog-auto-undef)
+          ;; Wires/regs must be after inputs/outputs
+          (verilog-auto-re-search-do "/\\*AUTOASSIGNMODPORT(.*?)\\*/" 'verilog-auto-assign-modport)
+          (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic)
+          (verilog-auto-re-search-do "/\\*AUTOWIRE\\*/" 'verilog-auto-wire)
+          (verilog-auto-re-search-do "/\\*AUTOREG\\*/" 'verilog-auto-reg)
+          (verilog-auto-re-search-do "/\\*AUTOREGINPUT\\*/" 'verilog-auto-reg-input)
+          ;; outputevery needs AUTOOUTPUTs done first
+          (verilog-auto-re-search-do "/\\*AUTOOUTPUTEVERY\\((.*?)\\)?\\*/" 'verilog-auto-output-every)
+          ;; After we've created all new variables
+          (verilog-auto-re-search-do "/\\*AUTOUNUSED\\*/" 'verilog-auto-unused)
+          ;; Must be after all inputs outputs are generated
+          (verilog-auto-re-search-do "/\\*AUTOARG\\*/" 'verilog-auto-arg)
+          ;; User inserts
+          (verilog-auto-re-search-do "/\\*AUTOINSERTLAST(.*?)\\*/" 'verilog-auto-insert-last)
+          ;; Fix line numbers (comments only)
+          (when verilog-auto-inst-template-numbers
+            (verilog-auto-templated-rel))
+          (when verilog-auto-template-warn-unused
+            (verilog-auto-template-lint))))
+        ;;
+        (verilog-run-hooks 'verilog-auto-hook)
+        ;;
+        (when verilog-auto-delete-trailing-whitespace
+          (verilog-delete-trailing-whitespace))
+        ;;
+        (set (make-local-variable 'verilog-auto-update-tick) (buffer-chars-modified-tick))
+        ;;
+        ;; If end result is same as when started, clear modified flag
+        (cond ((and oldbuf (equal oldbuf (buffer-string)))
+               (verilog-restore-buffer-modified-p nil)
+               (unless noninteractive (message "Updating AUTOs...done (no changes)")))
+              (t (unless noninteractive (message "Updating AUTOs...done"))))
+        ;; End of save-cache
+        )))))
 \f
 ;;; Skeletons:
 ;;
index d883d4fc4dd0e54e3bf33f255a1d11df739860a2..2fc24a8cb3d873cbab2522f9fe0c1b7691f5f38b 100644 (file)
@@ -1,4 +1,4 @@
-;;; which-func.el --- print current function in mode line
+;;; which-func.el --- print current function in mode line  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1994, 1997-1998, 2001-2016 Free Software Foundation,
 ;; Inc.
@@ -80,7 +80,6 @@
   "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."
-  :group 'which-func
   :version "24.3"                       ; explicit list -> t
   :type '(choice (const :tag "All modes" t)
                 (repeat (symbol :tag "Major mode"))))
@@ -91,13 +90,11 @@ This means that Which Function mode won't really do anything
 until you use Imenu, in these modes.  Note that files
 larger than `which-func-maxout' behave in this way too;
 Which Function mode doesn't do anything until you use Imenu."
-  :group 'which-func
   :type '(repeat (symbol :tag "Major mode")))
 
 (defcustom which-func-maxout 500000
   "Don't automatically compute the Imenu menu if buffer is this big or bigger.
 Zero means compute the Imenu menu regardless of size."
-  :group 'which-func
   :type 'integer)
 
 (defvar which-func-keymap
@@ -137,8 +134,7 @@ Zero means compute the Imenu menu regardless of size."
      :foreground "Blue1")
     (t
      :foreground "LightSkyBlue"))
-  "Face used to highlight mode line function names."
-  :group 'which-func)
+  "Face used to highlight mode line function names.")
 
 (defcustom which-func-format
   `("["
@@ -152,7 +148,6 @@ mouse-3: go to end")
     "]")
   "Format for displaying the function in the mode line."
   :version "24.2"                  ; added mouse-face; 24point2 is correct
-  :group 'which-func
   :type 'sexp)
 ;;;###autoload (put 'which-func-format 'risky-local-variable t)
 
@@ -193,14 +188,16 @@ This makes a difference only if `which-function-mode' is non-nil.")
 
 (add-hook 'find-file-hook 'which-func-ff-hook t)
 
+(defun which-func-try-to-enable ()
+  (unless (or (not which-function-mode)
+              (local-variable-p 'which-func-mode))
+    (setq which-func-mode (or (eq which-func-modes t)
+                              (member major-mode which-func-modes)))))
+
 (defun which-func-ff-hook ()
   "File find hook for Which Function mode.
 It creates the Imenu index for the buffer, if necessary."
-  (unless (local-variable-p 'which-func-mode)
-    (setq which-func-mode
-          (and which-function-mode
-               (or (eq which-func-modes t)
-                   (member major-mode which-func-modes)))))
+  (which-func-try-to-enable)
 
   (condition-case err
       (if (and which-func-mode
@@ -239,6 +236,13 @@ It creates the Imenu index for the buffer, if necessary."
 
 (defvar which-func-update-timer nil)
 
+(unless (or (assq 'which-func-mode mode-line-misc-info)
+            (assq 'which-function-mode mode-line-misc-info))
+  (add-to-list 'mode-line-misc-info
+               '(which-function-mode    ;Only display if mode is enabled.
+                 (which-func-mode       ;Only display if buffer supports it.
+                  ("" which-func-format " ")))))
+
 ;; This is the name people would normally expect.
 ;;;###autoload
 (define-minor-mode which-function-mode
@@ -254,17 +258,12 @@ in certain major modes."
   (when (timerp which-func-update-timer)
     (cancel-timer which-func-update-timer))
   (setq which-func-update-timer nil)
-  (if which-function-mode
-      ;;Turn it on
-      (progn
-        (setq which-func-update-timer
-              (run-with-idle-timer idle-update-delay t #'which-func-update))
-        (dolist (buf (buffer-list))
-          (with-current-buffer buf
-            (unless (local-variable-p 'which-func-mode)
-              (setq which-func-mode
-                    (or (eq which-func-modes t)
-                        (member major-mode which-func-modes)))))))))
+  (when which-function-mode
+    ;;Turn it on.
+    (setq which-func-update-timer
+          (run-with-idle-timer idle-update-delay t #'which-func-update))
+    (dolist (buf (buffer-list))
+      (with-current-buffer buf (which-func-try-to-enable)))))
 
 (defvar which-function-imenu-failed nil
   "Locally t in a buffer if `imenu--make-index-alist' found nothing there.")
index f8a11544121fbc5496054753ec97e893728b54c0..f14cd0d81cd580163848e710968c4b75cf0e6be5 100644 (file)
@@ -1232,7 +1232,7 @@ V%s 0 /%s-latin1 /%s Latin1Encoding put\n"
 (provide 'ps-mule)
 
 ;; Local Variables:
-;; generated-autoload-file: "ps-print.el"
+;; generated-autoload-file: "ps-print-loaddefs.el"
 ;; End:
 
 ;;; ps-mule.el ends here
index 1167b9c0530179b9bf1b88d88f484e42930c8330..2ea0919c6866779f4bd91e8c34f73a58697442b1 100644 (file)
@@ -1475,6 +1475,8 @@ Please send all bug fixes and enhancements to
 ;; Load XEmacs/Emacs definitions
 (require 'ps-def)
 
+;; autoloads for secondary file
+(require 'ps-print-loaddefs)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; User Variables:
@@ -6588,79 +6590,6 @@ If FACE is not a valid face name, use default face."
 (unless noninteractive
   (add-hook 'kill-emacs-hook #'ps-kill-emacs-check))
 
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; To make this file smaller, some commands go in a separate file.
-;; But autoload them here to make the separation invisible.
-\f
-;;;### (autoloads nil "ps-mule" "ps-mule.el" "4a263b7a727e853f2e6672922c4e5755")
-;;; 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;
-                         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-initialize "ps-mule" "\
-Initialize global data for printing multi-byte characters.
-
-\(fn)" nil nil)
-
-(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.
-
-\(fn FROM TO)" nil nil)
-
-(autoload 'ps-mule-end-job "ps-mule" "\
-Finish printing job for multi-byte chars.
-
-\(fn)" nil nil)
-
-;;;***
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 (provide 'ps-print)
 
 ;;; ps-print.el ends here
index 6aa7b8b585b6642892edb3a908706168be9d9039..8803a47215fece267148c9c78ba5ab1338ac728d 100644 (file)
@@ -370,7 +370,7 @@ no text on the right side of the rectangle."
   "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
-rectangle, all continuous whitespace starting at that column is deleted.
+rectangle, all contiguous whitespace starting at that column is deleted.
 
 When called from a program the rectangle's corners are START and END.
 With a prefix (or a FILL) argument, also fill too short lines."
@@ -476,10 +476,15 @@ Called from a program, takes three args; START, END and STRING."
                              #'rectangle--string-erase-preview nil t)
                    (add-hook 'post-command-hook
                              #'rectangle--string-preview nil t))
-          (read-string (format "String rectangle (default %s): "
-                               (or (car string-rectangle-history) ""))
-                       nil 'string-rectangle-history
+               (read-string (format "String rectangle (default %s): "
+                                    (or (car string-rectangle-history) ""))
+                            nil 'string-rectangle-history
                             (car string-rectangle-history)))))))
+  ;; If we undo this change, we want to have the point back where we
+  ;; are now, and not after the first line in the rectangle (which is
+  ;; the first line to be changed by the following command).
+  (unless (eq buffer-undo-list t)
+    (push (point) buffer-undo-list))
   (goto-char
    (apply-on-rectangle 'string-rectangle-line start end string t)))
 
similarity index 92%
rename from lisp/gnus/registry.el
rename to lisp/registry.el
index 9e6babcc355c0a6914671095744c529a9f4a17bd..e8bc6f5545a16ee067d956a1f847a0f7480a4fe6 100644 (file)
          :type hash-table
          :documentation "The data hashtable.")))
 
-(defmethod initialize-instance :BEFORE ((this registry-db) slots)
+(cl-defmethod initialize-instance :before ((this registry-db) slots)
   "Check whether a registry object needs to be upgraded."
   ;; Hardcoded upgrade routines.  Version 0.1 to 0.2 requires the
   ;; :max-soft slot to disappear, and the :max-hard slot to be renamed
       (cl-remf slots :max-hard)
       (cl-remf slots :max-soft))))
 
-(defmethod initialize-instance :AFTER ((this registry-db) slots)
+(cl-defmethod initialize-instance :after ((this registry-db) slots)
   "Set value of data slot of THIS after initialization."
   (with-slots (data tracker) this
     (unless (member :data slots)
     (unless (member :tracker slots)
       (setq tracker (make-hash-table :size 100 :rehash-size 2.0)))))
 
-(defmethod registry-lookup ((db registry-db) keys)
+(cl-defmethod registry-lookup ((db registry-db) keys)
   "Search for KEYS in the registry-db THIS.
 Returns an alist of the key followed by the entry in a list, not a cons cell."
   (let ((data (oref db data)))
@@ -166,7 +166,7 @@ Returns an alist of the key followed by the entry in a list, not a cons cell."
               (list k (gethash k data))))
           keys))))
 
-(defmethod registry-lookup-breaks-before-lexbind ((db registry-db) keys)
+(cl-defmethod registry-lookup-breaks-before-lexbind ((db registry-db) keys)
   "Search for KEYS in the registry-db THIS.
 Returns an alist of the key followed by the entry in a list, not a cons cell."
   (let ((data (oref db data)))
@@ -175,11 +175,11 @@ Returns an alist of the key followed by the entry in a list, not a cons cell."
                when (gethash key data)
                collect (list key (gethash key data))))))
 
-(defmethod registry-lookup-secondary ((db registry-db) tracksym
-                                     &optional create)
+(cl-defmethod registry-lookup-secondary ((db registry-db) tracksym
+                                        &optional create)
   "Search for TRACKSYM in the registry-db THIS.
 When CREATE is not nil, create the secondary index hashtable if needed."
-  (let ((h (gethash tracksym (oref db :tracker))))
+  (let ((h (gethash tracksym (oref db tracker))))
     (if h
        h
       (when create
@@ -188,8 +188,8 @@ When CREATE is not nil, create the secondary index hashtable if needed."
                 (oref db tracker))
        (gethash tracksym (oref db tracker))))))
 
-(defmethod registry-lookup-secondary-value ((db registry-db) tracksym val
-                                           &optional set)
+(cl-defmethod registry-lookup-secondary-value ((db registry-db) tracksym val
+                                              &optional set)
   "Search for TRACKSYM with value VAL in the registry-db THIS.
 When SET is not nil, set it for VAL (use t for an empty list)."
   ;; either we're asked for creation or there should be an existing index
@@ -220,7 +220,7 @@ When SET is not nil, set it for VAL (use t for an empty list)."
       (or found
           (registry--match mode entry (cdr-safe check-list))))))
 
-(defmethod registry-search ((db registry-db) &rest spec)
+(cl-defmethod registry-search ((db registry-db) &rest spec)
   "Search for SPEC across the registry-db THIS.
 For example calling with `:member \\='(a 1 2)' will match entry \((a 3 1)).
 Calling with `:all t' (any non-nil value) will match all.
@@ -241,7 +241,7 @@ The test order is to check :all first, then :member, then :regex."
                  (and regex (registry--match :regex v regex)))
            collect k))))
 
-(defmethod registry-delete ((db registry-db) keys assert &rest spec)
+(cl-defmethod registry-delete ((db registry-db) keys assert &rest spec)
   "Delete KEYS from the registry-db THIS.
 If KEYS is nil, use SPEC to do a search.
 Updates the secondary ('tracked') indices as well.
@@ -274,17 +274,17 @@ With assert non-nil, errors out if the key does not exist already."
        (remhash key data)))
     keys))
 
-(defmethod registry-size ((db registry-db))
+(cl-defmethod registry-size ((db registry-db))
   "Returns the size of the registry-db object THIS.
 This is the key count of the `data' slot."
   (hash-table-count (oref db data)))
 
-(defmethod registry-full ((db registry-db))
+(cl-defmethod registry-full ((db registry-db))
   "Checks if registry-db THIS is full."
   (>= (registry-size db)
       (oref db max-size)))
 
-(defmethod registry-insert ((db registry-db) key entry)
+(cl-defmethod registry-insert ((db registry-db) key entry)
   "Insert ENTRY under KEY into the registry-db THIS.
 Updates the secondary ('tracked') indices as well.
 Errors out if the key exists already."
@@ -308,7 +308,7 @@ Errors out if the key exists already."
        (registry-lookup-secondary-value db tr val value-keys))))
   entry)
 
-(defmethod registry-reindex ((db registry-db))
+(cl-defmethod registry-reindex ((db registry-db))
   "Rebuild the secondary indices of registry-db THIS."
   (let ((count 0)
        (expected (* (length (oref db tracked)) (registry-size db))))
@@ -327,7 +327,7 @@ Errors out if the key exists already."
               (registry-lookup-secondary-value db tr val value-keys))))
         (oref db data))))))
 
-(defmethod registry-prune ((db registry-db) &optional sortfunc)
+(cl-defmethod registry-prune ((db registry-db) &optional sortfunc)
   "Prunes the registry-db object DB.
 
 Attempts to prune the number of entries down to \(*
@@ -354,7 +354,8 @@ Returns the number of deleted entries."
          (length (registry-delete db candidates nil)))
       0)))
 
-(defmethod registry-collect-prune-candidates ((db registry-db) limit sortfunc)
+(cl-defmethod registry-collect-prune-candidates ((db registry-db)
+                                                limit sortfunc)
   "Collects pruning candidates from the registry-db object DB.
 
 Proposes only entries without the :precious keys, and attempts to
index a2344d9f7e74e125f75ba21414d27a25ddf48a03..169fc3f47013b4572f2e62bbab56624bd890ad84 100644 (file)
@@ -301,6 +301,10 @@ In Transient Mark mode, if the mark is active, operate on the contents
 of the region.  Otherwise, operate from point to the end of the buffer's
 accessible portion.
 
+In interactive use, the prefix arg (non-nil DELIMITED in
+non-interactive use), means replace only matches surrounded by
+word boundaries.  A negative prefix arg means replace backward.
+
 Use \\<minibuffer-local-map>\\[next-history-element] \
 to pull the last incremental search string to the minibuffer
 that reads FROM-STRING, or invoke replacements from
@@ -327,10 +331,6 @@ If `replace-character-fold' is non-nil, matching uses character folding,
 i.e. it ignores diacritics and other differences between equivalent
 character strings.
 
-Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
-only matches surrounded by word boundaries.  A negative prefix arg means
-replace backward.
-
 Fourth and fifth arg START and END specify the region to operate on.
 
 To customize possible responses, change the bindings in `query-replace-map'."
@@ -1835,6 +1835,8 @@ C-w to delete match and recursive edit,
 C-l to clear the screen, redisplay, and offer same replacement again,
 ! to replace all remaining matches in this buffer with no more questions,
 ^ to move point back to previous match,
+u to undo previous replacement,
+U to undo all replacements,
 E to edit the replacement string.
 In multi-buffer replacements type `Y' to replace all remaining
 matches in all remaining buffers with no more questions,
@@ -1864,6 +1866,8 @@ in the current buffer."
     (define-key map "\C-l" 'recenter)
     (define-key map "!" 'automatic)
     (define-key map "^" 'backup)
+    (define-key map "u" 'undo)
+    (define-key map "U" 'undo-all)
     (define-key map "\C-h" 'help)
     (define-key map [f1] 'help)
     (define-key map [help] 'help)
@@ -1889,7 +1893,7 @@ The valid answers include `act', `skip', `act-and-show',
 `act-and-exit', `exit', `exit-prefix', `recenter', `scroll-up',
 `scroll-down', `scroll-other-window', `scroll-other-window-down',
 `edit', `edit-replacement', `delete-and-edit', `automatic',
-`backup', `quit', and `help'.
+`backup', `undo', `undo-all', `quit', and `help'.
 
 This keymap is used by `y-or-n-p' as well as `query-replace'.")
 
@@ -1997,7 +2001,9 @@ but coerced to the correct value of INTEGERS."
 FIXEDCASE, LITERAL are passed to `replace-match' (which see).
 After possibly editing it (if `\\?' is present), NEWTEXT is also
 passed to `replace-match'.  If NOEDIT is true, no check for `\\?'
-is made (to save time).  MATCH-DATA is used for the replacement.
+is made (to save time).
+MATCH-DATA is used for the replacement, and is a data structure
+as returned from the `match-data' function.
 In case editing is done, it is changed to use markers.  BACKWARD is
 used to reverse the replacement direction.
 
@@ -2143,6 +2149,10 @@ It must return a string."
          (noedit nil)
          (keep-going t)
          (stack nil)
+         (search-string-replaced nil)    ; last string matching `from-string'
+         (next-replacement-replaced nil) ; replacement string
+                                         ; (substituted regexp)
+         (last-was-undo)
          (replace-count 0)
          (skip-read-only-count 0)
          (skip-filtered-count 0)
@@ -2339,8 +2349,28 @@ It must return a string."
                   (match-beginning 0) (match-end 0)
                   start end search-string
                   regexp-flag delimited-flag case-fold-search backward)
-                 ;; Bind message-log-max so we don't fill up the message log
-                 ;; with a bunch of identical messages.
+                  ;; Obtain the matched groups: needed only when
+                  ;; regexp-flag non nil.
+                  (when (and last-was-undo regexp-flag)
+                    (setq last-was-undo nil
+                          real-match-data
+                          (save-excursion
+                            (goto-char (match-beginning 0))
+                            (looking-at search-string)
+                            (match-data t real-match-data))))
+                  ;; Matched string and next-replacement-replaced
+                  ;; stored in stack.
+                  (setq search-string-replaced (buffer-substring-no-properties
+                                                (match-beginning 0)
+                                                (match-end 0))
+                        next-replacement-replaced
+                        (query-replace-descr
+                         (save-match-data
+                           (set-match-data real-match-data)
+                           (match-substitute-replacement
+                            next-replacement nocasify literal))))
+                 ;; Bind message-log-max so we don't fill up the
+                 ;; message log with a bunch of identical messages.
                  (let ((message-log-max nil)
                        (replacement-presentation
                         (if query-replace-show-replacement
@@ -2353,8 +2383,8 @@ It must return a string."
                              (query-replace-descr from-string)
                              (query-replace-descr replacement-presentation)))
                  (setq key (read-event))
-                 ;; Necessary in case something happens during read-event
-                 ;; that clobbers the match data.
+                 ;; Necessary in case something happens during
+                 ;; read-event that clobbers the match data.
                  (set-match-data real-match-data)
                  (setq key (vector key))
                  (setq def (lookup-key map key))
@@ -2365,7 +2395,8 @@ It must return a string."
                            (concat "Query replacing "
                                    (if delimited-flag
                                        (or (and (symbolp delimited-flag)
-                                                (get delimited-flag 'isearch-message-prefix))
+                                                (get delimited-flag
+                                                      'isearch-message-prefix))
                                            "word ") "")
                                    (if regexp-flag "regexp " "")
                                    (if backward "backward " "")
@@ -2392,6 +2423,73 @@ It must return a string."
                           (message "No previous match")
                           (ding 'no-terminate)
                           (sit-for 1)))
+                       ((or (eq def 'undo) (eq def 'undo-all))
+                        (if (null stack)
+                             (progn
+                               (message "Nothing to undo")
+                               (ding 'no-terminate)
+                               (sit-for 1))
+                          (let ((stack-idx         0)
+                                 (stack-len         (length stack))
+                                 (num-replacements  0)
+                                 search-string
+                                 next-replacement)
+                             (while (and (< stack-idx stack-len)
+                                         stack
+                                         (null replaced))
+                               (let* ((elt (nth stack-idx stack)))
+                                 (setq
+                                  stack-idx (1+ stack-idx)
+                                  replaced (nth 1 elt)
+                                  ;; Bind swapped values
+                                  ;; (search-string <--> replacement)
+                                  search-string (nth (if replaced 4 3) elt)
+                                  next-replacement (nth (if replaced 3 4) elt)
+                                  search-string-replaced search-string
+                                  next-replacement-replaced next-replacement)
+
+                                 (when (and (= stack-idx stack-len)
+                                            (null replaced)
+                                            (zerop num-replacements))
+                                          (message "Nothing to undo")
+                                          (ding 'no-terminate)
+                                          (sit-for 1))
+
+                                 (when replaced
+                                   (setq stack (nthcdr stack-idx stack))
+                                   (goto-char (nth 0 elt))
+                                   (set-match-data (nth 2 elt))
+                                   (setq real-match-data
+                                         (save-excursion
+                                           (goto-char (match-beginning 0))
+                                           (looking-at search-string)
+                                           (match-data t (nth 2 elt)))
+                                         noedit
+                                         (replace-match-maybe-edit
+                                          next-replacement nocasify literal
+                                          noedit real-match-data backward)
+                                         replace-count (1- replace-count)
+                                         real-match-data
+                                         (save-excursion
+                                           (goto-char (match-beginning 0))
+                                           (looking-at next-replacement)
+                                           (match-data t (nth 2 elt))))
+                                   ;; Set replaced nil to keep in loop
+                                   (when (eq def 'undo-all)
+                                     (setq replaced nil
+                                           stack-len (- stack-len stack-idx)
+                                           stack-idx 0
+                                           num-replacements
+                                           (1+ num-replacements))))))
+                             (when (and (eq def 'undo-all)
+                                        (null (zerop num-replacements)))
+                               (message "Undid %d %s" num-replacements
+                                        (if (= num-replacements 1)
+                                            "replacement"
+                                          "replacements"))
+                               (ding 'no-terminate)
+                               (sit-for 1)))
+                          (setq replaced nil last-was-undo t)))
                        ((eq def 'act)
                         (or replaced
                             (setq noedit
@@ -2514,9 +2612,12 @@ It must return a string."
                                 (match-beginning 0)
                                 (match-end 0)
                                 (current-buffer))
-                             (match-data t)))
-                     stack))))))
-
+                             (match-data t))
+                               search-string-replaced
+                               next-replacement-replaced)
+                     stack)
+                (setq next-replacement-replaced nil
+                      search-string-replaced    nil))))))
       (replace-dehighlight))
     (or unread-command-events
        (message "Replaced %d occurrence%s%s"
similarity index 100%
rename from lisp/gnus/rtree.el
rename to lisp/rtree.el
index 5cfa2c4353b75f7aee1cd724d97082219a9d17c9..838f9bf80cd1d717a4ea7974bf2cf61904e52e23 100644 (file)
@@ -148,8 +148,7 @@ created in the future."
   "Return non-nil when horizontal scroll bars are available on this system."
   (and (display-graphic-p)
        (boundp 'x-toolkit-scroll-bars)
-       x-toolkit-scroll-bars
-       (not (eq (window-system) 'ns))))
+       x-toolkit-scroll-bars))
 
 (define-minor-mode horizontal-scroll-bar-mode
   "Toggle horizontal scroll bars on all frames (Horizontal Scroll Bar mode).
index 524382073f81b745b708a27ac873a3a6f062d036..2a9729e9d1ff8ad6084095df3c459c94bb330cb5 100644 (file)
@@ -655,6 +655,7 @@ server or call `\\[server-force-delete]' to forcibly disconnect it."))
                       :noquery t
                       :sentinel #'server-sentinel
                       :filter #'server-process-filter
+                      :use-external-socket t
                       ;; We must receive file names without being decoded.
                       ;; Those are decoded by server-process-filter according
                       ;; to file-name-coding-system.  Also don't get
index 50101945f34ca258dae3bfa404f298552dedef6d..a87386e17307b5543c7fb7445c9acf3436303ad4 100644 (file)
@@ -1319,7 +1319,7 @@ printer signaled one (and \"%s\" is used as the default printer), else nil."
                           (and locprn
                                (ses--locprn-compiled locprn))))
                    printer)
-               (or value "")))
+               value))
        (if (stringp value)
            value
          (or (stringp (car-safe value))
@@ -1539,7 +1539,8 @@ Sets `ses-relocate-return' to `delete' if cell-references were removed."
        (if (setq rowcol (ses-sym-rowcol formula))
            (ses-relocate-symbol formula rowcol
                                 startrow startcol rowincr colincr)
-         formula) ; Pass through as-is.
+         ;; Constants pass through as-is.
+         formula)
       (dolist (cur formula)
        (setq rowcol (ses-sym-rowcol cur))
        (cond
index d7743eea5969cff3d4fb8e6682c7bfe3731e97ea..e2570625f3207d8604e297ca5a62039fa6404421 100644 (file)
@@ -145,18 +145,18 @@ nil means use goto-char using the second argument position.")
                               &optional avoid-current
                               extra-test-inclusive
                               extra-test-exclusive)
-  "Test if BUFFER is a `next-error' capable buffer.
-
-If AVOID-CURRENT is non-nil, treat the current buffer
-as an absolute last resort only.
-
-The function EXTRA-TEST-INCLUSIVE, if non-nil, is called in each buffer
-that normally would not qualify.  If it returns t, the buffer
-in question is treated as usable.
-
-The function EXTRA-TEST-EXCLUSIVE, if non-nil, is called in each buffer
-that would normally be considered usable.  If it returns nil,
-that buffer is rejected."
+  "Return non-nil if BUFFER is a `next-error' capable buffer.
+If AVOID-CURRENT is non-nil, and BUFFER is the current buffer,
+return nil.
+
+The function EXTRA-TEST-INCLUSIVE, if non-nil, is called if
+BUFFER would not normally qualify.  If it returns non-nil, BUFFER
+is considered `next-error' capable, anyway, and the function
+returns non-nil.
+
+The function EXTRA-TEST-EXCLUSIVE, if non-nil, is called if the
+buffer would normally qualify.  If it returns nil, BUFFER is
+rejected, and the function returns nil."
   (and (buffer-name buffer)            ;First make sure it's live.
        (not (and avoid-current (eq buffer (current-buffer))))
        (with-current-buffer buffer
@@ -1075,7 +1075,9 @@ that uses or sets the mark."
   (interactive)
   (push-mark (point))
   (push-mark (point-max) nil t)
-  (goto-char (point-min)))
+  ;; This is really `point-min' in most cases, but if we're in the
+  ;; minibuffer, this is at the end of the prompt.
+  (goto-char (minibuffer-prompt-end)))
 \f
 
 ;; Counting lines, one way or another.
@@ -1418,10 +1420,11 @@ If nil, don't change the value of `debug-on-error'."
   :version "21.1")
 
 (defun eval-expression-print-format (value)
-  "Format VALUE as a result of evaluated expression.
-Return a formatted string which is displayed in the echo area
-in addition to the value printed by prin1 in functions which
-display the result of expression evaluation."
+  "If VALUE in an integer, return a specially formatted string.
+This string will typically look like \" (#o1, #x1, ?\\C-a)\".
+If VALUE is not an integer, nil is returned.
+This function is used by functions like `prin1' that display the
+result of expression evaluation."
   (if (and (integerp value)
           (or (eq standard-output t)
               (zerop (prefix-numeric-value current-prefix-arg))))
@@ -1632,6 +1635,12 @@ If the value is non-nil and not a number, we wait 2 seconds."
                  (integer :tag "time" 2)
                  (other :tag "on")))
 
+(defcustom extended-command-suggest-shorter t
+  "If non-nil, show a shorter M-x invocation when there is one."
+  :group 'keyboard
+  :type 'boolean
+  :version "25.2")
+
 (defun execute-extended-command--shorter-1 (name length)
   (cond
    ((zerop length) (list ""))
@@ -1714,7 +1723,8 @@ invoking, give a prefix argument to `execute-extended-command'."
                         ((numberp suggest-key-bindings) suggest-key-bindings)
                         (t 2))))))
       (when (and waited (not (consp unread-command-events)))
-        (unless (or binding executing-kbd-macro (not (symbolp function))
+        (unless (or (not extended-command-suggest-shorter)
+                    binding executing-kbd-macro (not (symbolp function))
                     (<= (length (symbol-name function)) 2))
           ;; There's no binding for CMD.  Let's try and find the shortest
           ;; string to use in M-x.
@@ -3754,8 +3764,13 @@ support pty association, if PROGRAM is nil."
 (defun process-menu-delete-process ()
   "Kill process at point in a `list-processes' buffer."
   (interactive)
-  (delete-process (tabulated-list-get-id))
-  (revert-buffer))
+  (let ((pos (point)))
+    (delete-process (tabulated-list-get-id))
+    (revert-buffer)
+    (goto-char (min pos (point-max)))
+    (if (eobp)
+        (forward-line -1)
+      (beginning-of-line))))
 
 (defun list-processes--refresh ()
   "Recompute the list of processes for the Process List buffer.
@@ -5211,7 +5226,7 @@ This macro does what `save-excursion' did before Emacs 25.1."
 
 (defcustom use-empty-active-region nil
   "Whether \"region-aware\" commands should act on empty regions.
-If nil, region-aware commands treat empty regions as inactive.
+If nil, region-aware commands treat the empty region as inactive.
 If non-nil, region-aware commands treat the region as active as
 long as the mark is active, even if the region is empty.
 
@@ -5822,7 +5837,7 @@ The value is a floating-point number."
     (/ (float (- (nth 3 edges) (nth 1 edges))) dlh)))
 
 ;; Returns non-nil if partial move was done.
-(defun line-move-partial (arg noerror to-end)
+(defun line-move-partial (arg noerror &optional _to-end)
   (if (< arg 0)
       ;; Move backward (up).
       ;; If already vscrolled, reduce vscroll
@@ -5920,7 +5935,7 @@ The value is a floating-point number."
          ;; discrepancies between that and DLH.
          (if (and rowh rbot (>= (- (+ rowh rbot) winh) 1))
              (set-window-vscroll nil dlh t))
-         (line-move-1 arg noerror to-end)
+         (line-move-1 arg noerror)
          t)
         ;; If there are lines above the last line, scroll-up one line.
         ((and vpos (> vpos 0))
@@ -5937,7 +5952,7 @@ The value is a floating-point number."
 ;; scrolling with cursor motion.  But so far we don't have
 ;; a cleaner solution to the problem of making C-n do something
 ;; useful given a tall image.
-(defun line-move (arg &optional noerror to-end try-vscroll)
+(defun line-move (arg &optional noerror _to-end try-vscroll)
   "Move forward ARG lines.
 If NOERROR, don't signal an error if we can't move ARG lines.
 TO-END is unused.
@@ -5945,7 +5960,7 @@ TRY-VSCROLL controls whether to vscroll tall lines: if either
 `auto-window-vscroll' or TRY-VSCROLL is nil, this function will
 not vscroll."
   (if noninteractive
-      (line-move-1 arg noerror to-end)
+      (line-move-1 arg noerror)
     (unless (and auto-window-vscroll try-vscroll
                 ;; Only vscroll for single line moves
                 (= (abs arg) 1)
@@ -5955,7 +5970,7 @@ not vscroll."
                 ;; But don't vscroll in a keyboard macro.
                 (not defining-kbd-macro)
                 (not executing-kbd-macro)
-                (line-move-partial arg noerror to-end))
+                (line-move-partial arg noerror))
       (set-window-vscroll nil 0 t)
       (if (and line-move-visual
               ;; Display-based column are incompatible with goal-column.
@@ -5987,7 +6002,7 @@ not vscroll."
                  (set-window-vscroll
                   nil
                   (- lh dlh) t))))
-       (line-move-1 arg noerror to-end)))))
+       (line-move-1 arg noerror)))))
 
 ;; Display-based alternative to line-move-1.
 ;; Arg says how many lines to move.  The value is t if we can move the
index 536289c389144ed647ad601e0065f5e2b8a0496e..761e69e03b1da8a6d833cb56806d101b0533393b 100644 (file)
@@ -439,7 +439,7 @@ Warning Warning!!!  Pure space overflow    !!!Warning Warning
   :initialize #'custom-initialize-delay)
 
 (defun normal-top-level-add-subdirs-to-load-path ()
-  "Add all subdirectories of `default-directory' to `load-path'.
+  "Recursively add all subdirectories of `default-directory' to `load-path'.
 More precisely, this uses only the subdirectories whose names
 start with letters or digits; it excludes any subdirectory named `RCS'
 or `CVS', and any subdirectory that contains a file named `.nosearch'."
index 0fb4a2ec2564c92ad433402e8aac91339391c628..afc86a77f8d2e03fbd698f9f29cde07c08c2ff4c 100644 (file)
@@ -66,6 +66,7 @@ For more information, see Info node `(elisp)Declaring Functions'."
 ;;;; Basic Lisp macros.
 
 (defalias 'not 'null)
+(defalias 'sxhash 'sxhash-equal)
 
 (defmacro noreturn (form)
   "Evaluate FORM, expecting it not to return.
@@ -619,8 +620,10 @@ side-effects, and the argument LIST is not modified."
 
 (defun kbd (keys)
   "Convert KEYS to the internal Emacs key representation.
-KEYS should be a string constant in the format used for
-saving keyboard macros (see `edmacro-mode')."
+KEYS should be a string in the format returned by commands such
+as `C-h k' (`describe-key').
+This is the same format used for saving keyboard macros (see
+`edmacro-mode')."
   ;; Don't use a defalias, since the `pure' property is only true for
   ;; the calling convention of `kbd'.
   (read-kbd-macro keys))
@@ -846,7 +849,12 @@ above 127 (such as ISO Latin-1) can be included if you use a vector.
 Note that if KEY has a local binding in the current buffer,
 that local binding will continue to shadow any global binding
 that you make with this function."
-  (interactive "KSet key globally: \nCSet key %s to command: ")
+  (interactive
+   (let* ((menu-prompting nil)
+          (key (read-key-sequence "Set key globally: ")))
+     (list key
+           (read-command (format "Set key %s to command: "
+                                 (key-description key))))))
   (or (vectorp key) (stringp key)
       (signal 'wrong-type-argument (list 'arrayp key)))
   (define-key (current-global-map) key command))
@@ -1320,7 +1328,9 @@ is converted into a string by expressing it in decimal."
 ;; buffer-local.
 
 ;; Not used at all in Emacs, last time I checked:
-(make-obsolete-variable 'default-mode-line-format 'mode-line-format "23.2")
+(make-obsolete-variable 'default-mode-line-format
+                        "use (setq-default mode-line-format) or (default-value mode-line-format) instead"
+                        "23.2")
 (make-obsolete-variable 'default-header-line-format 'header-line-format "23.2")
 (make-obsolete-variable 'default-line-spacing 'line-spacing "23.2")
 (make-obsolete-variable 'default-abbrev-mode 'abbrev-mode "23.2")
@@ -2237,6 +2247,171 @@ keyboard-quit events while waiting for a valid input."
     (message "%s%s" prompt (char-to-string char))
     char))
 
+(defun read-multiple-choice (prompt choices)
+  "Ask user a multiple choice question.
+PROMPT should be a string that will be displayed as the prompt.
+
+CHOICES is an alist where the first element in each entry is a
+character to be entered, the second element is a short name for
+the entry to be displayed while prompting (if there's room, it
+might be shortened), and the third, optional entry is a longer
+explanation that will be displayed in a help buffer if the user
+requests more help.
+
+This function translates user input into responses by consulting
+the bindings in `query-replace-map'; see the documentation of
+that variable for more information.  In this case, the useful
+bindings are `recenter', `scroll-up', and `scroll-down'.  If the
+user enters `recenter', `scroll-up', or `scroll-down' responses,
+perform the requested window recentering or scrolling and ask
+again.
+
+The return value is the matching entry from the CHOICES list.
+
+Usage example:
+
+\(read-multiple-choice \"Continue connecting?\"
+                      '((?a \"always\")
+                        (?s \"session only\")
+                        (?n \"no\")))"
+  (let* ((altered-names nil)
+         (full-prompt
+          (format
+           "%s (%s): "
+           prompt
+           (mapconcat
+            (lambda (elem)
+              (let* ((name (cadr elem))
+                     (pos (seq-position name (car elem)))
+                     (altered-name
+                      (cond
+                       ;; Not in the name string.
+                       ((not pos)
+                        (format "[%c] %s" (car elem) name))
+                       ;; The prompt character is in the name, so highlight
+                       ;; it on graphical terminals...
+                       ((display-supports-face-attributes-p
+                         '(:underline t) (window-frame))
+                        (setq name (copy-sequence name))
+                        (put-text-property pos (1+ pos)
+                                           'face 'read-multiple-choice-face
+                                           name)
+                        name)
+                       ;; And put it in [bracket] on non-graphical terminals.
+                       (t
+                        (concat
+                         (substring name 0 pos)
+                         "["
+                         (upcase (substring name pos (1+ pos)))
+                         "]"
+                         (substring name (1+ pos)))))))
+                (push (cons (car elem) altered-name)
+                      altered-names)
+                altered-name))
+            (append choices '((?? "?")))
+            ", ")))
+         tchar buf wrong-char answer)
+    (save-window-excursion
+      (save-excursion
+       (while (not tchar)
+         (message "%s%s"
+                   (if wrong-char
+                       "Invalid choice.  "
+                     "")
+                   full-prompt)
+          (setq tchar
+                (if (and (display-popup-menus-p)
+                         last-input-event ; not during startup
+                         (listp last-nonmenu-event)
+                         use-dialog-box)
+                    (x-popup-dialog
+                     t
+                     (cons prompt
+                           (mapcar
+                            (lambda (elem)
+                              (cons (capitalize (cadr elem))
+                                    (car elem)))
+                            choices)))
+                  (condition-case nil
+                      (let ((cursor-in-echo-area t))
+                        (read-char))
+                    (error nil))))
+          (setq answer (lookup-key query-replace-map (vector tchar) t))
+          (setq tchar
+                (cond
+                 ((eq answer 'recenter)
+                  (recenter) t)
+                 ((eq answer 'scroll-up)
+                  (ignore-errors (scroll-up-command)) t)
+                 ((eq answer 'scroll-down)
+                  (ignore-errors (scroll-down-command)) t)
+                 ((eq answer 'scroll-other-window)
+                  (ignore-errors (scroll-other-window)) t)
+                 ((eq answer 'scroll-other-window-down)
+                  (ignore-errors (scroll-other-window-down)) t)
+                 (t tchar)))
+          (when (eq tchar t)
+            (setq wrong-char nil
+                  tchar nil))
+          ;; The user has entered an invalid choice, so display the
+          ;; help messages.
+          (when (and (not (eq tchar nil))
+                     (not (assq tchar choices)))
+           (setq wrong-char (not (memq tchar '(?? ?\C-h)))
+                  tchar nil)
+            (when wrong-char
+              (ding))
+            (with-help-window (setq buf (get-buffer-create
+                                         "*Multiple Choice Help*"))
+              (with-current-buffer buf
+                (erase-buffer)
+                (pop-to-buffer buf)
+                (insert prompt "\n\n")
+                (let* ((columns (/ (window-width) 25))
+                       (fill-column 21)
+                       (times 0)
+                       (start (point)))
+                  (dolist (elem choices)
+                    (goto-char start)
+                    (unless (zerop times)
+                      (if (zerop (mod times columns))
+                          ;; Go to the next "line".
+                          (goto-char (setq start (point-max)))
+                        ;; Add padding.
+                        (while (not (eobp))
+                          (end-of-line)
+                          (insert (make-string (max (- (* (mod times columns)
+                                                          (+ fill-column 4))
+                                                       (current-column))
+                                                    0)
+                                               ?\s))
+                          (forward-line 1))))
+                    (setq times (1+ times))
+                    (let ((text
+                           (with-temp-buffer
+                             (insert (format
+                                      "%c: %s\n"
+                                      (car elem)
+                                      (cdr (assq (car elem) altered-names))))
+                             (fill-region (point-min) (point-max))
+                             (when (nth 2 elem)
+                               (let ((start (point)))
+                                 (insert (nth 2 elem))
+                                 (unless (bolp)
+                                   (insert "\n"))
+                                 (fill-region start (point-max))))
+                             (buffer-string))))
+                      (goto-char start)
+                      (dolist (line (split-string text "\n"))
+                        (end-of-line)
+                        (if (bolp)
+                            (insert line "\n")
+                          (insert line))
+                        (forward-line 1)))))))))))
+    (when (buffer-live-p buf)
+      (kill-buffer buf))
+    (assq tchar choices)))
+
 (defun sit-for (seconds &optional nodisp obsolete)
   "Redisplay, then wait for SECONDS seconds.  Stop when input is available.
 SECONDS may be a floating-point value.
@@ -2310,7 +2485,8 @@ floating point support."
 (declare-function x-popup-dialog "menu.c" (position contents &optional header))
 
 (defun y-or-n-p (prompt)
-  "Ask user a \"y or n\" question.  Return t if answer is \"y\".
+  "Ask user a \"y or n\" question.
+Return t if answer is \"y\" and nil if it is \"n\".
 PROMPT is the string to display to ask the question.  It should
 end in a space; `y-or-n-p' adds \"(y or n) \" to it.
 
@@ -3286,6 +3462,8 @@ See also `with-temp-file' and `with-output-to-string'."
 
 (defmacro with-silent-modifications (&rest body)
   "Execute BODY, pretending it does not modify the buffer.
+This macro is Typically used around modifications of
+text-properties which do not really affect the buffer's content.
 If BODY performs real modifications to the buffer's text, other
 than cosmetic ones, undo data may become corrupted.
 
@@ -3293,10 +3471,7 @@ This macro will run BODY normally, but doesn't count its buffer
 modifications as being buffer modifications.  This affects things
 like `buffer-modified-p', checking whether the file is locked by
 someone else, running buffer modification hooks, and other things
-of that nature.
-
-Typically used around modifications of text-properties which do
-not really affect the buffer's content."
+of that nature."
   (declare (debug t) (indent 0))
   (let ((modified (make-symbol "modified")))
     `(let* ((,modified (buffer-modified-p))
@@ -4120,8 +4295,7 @@ and the function returns nil.  Field boundaries are not noticed if
 `inhibit-field-text-motion' is non-nil.
 
 This function is like `forward-word', but it is not affected
-by `find-word-boundary-function-table' (as set up by
-e.g. `subword-mode').  It is also not interactive."
+by `find-word-boundary-function-table'.  It is also not interactive."
   (let ((find-word-boundary-function-table
          (if (char-table-p word-move-empty-char-table)
              word-move-empty-char-table
@@ -4134,8 +4308,7 @@ With argument ARG, do this that many times.
 If ARG is omitted or nil, move point backward one word.
 
 This function is like `forward-word', but it is not affected
-by `find-word-boundary-function-table' (as set up by
-e.g. `subword-mode').  It is also not interactive."
+by `find-word-boundary-function-table'.  It is also not interactive."
   (let ((find-word-boundary-function-table
          (if (char-table-p word-move-empty-char-table)
              word-move-empty-char-table
diff --git a/lisp/svg.el b/lisp/svg.el
new file mode 100644 (file)
index 0000000..0b45c5c
--- /dev/null
@@ -0,0 +1,230 @@
+;;; svg.el --- SVG image creation functions -*- lexical-binding: t -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: image
+
+;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'xml)
+(require 'dom)
+
+(defun svg-create (width height &rest args)
+  "Create a new, empty SVG image with dimensions WIDTHxHEIGHT.
+ARGS can be used to provide `stroke' and `stroke-width' parameters to
+any further elements added."
+  (dom-node 'svg
+           `((width . ,width)
+             (height . ,height)
+             (version . "1.1")
+             (xmlsn . "http://www.w3.org/2000/svg")
+             ,@(svg--arguments nil args))))
+
+(defun svg-gradient (svg id type stops)
+  "Add a gradient with ID to SVG.
+TYPE is `linear' or `radial'.  STOPS is a list of percentage/color
+pairs."
+  (svg--def
+   svg
+   (apply
+    'dom-node
+    (if (eq type 'linear)
+       'linearGradient
+      'radialGradient)
+    `((id . ,id)
+      (x1 . 0)
+      (x2 . 0)
+      (y1 . 0)
+      (y2 . 1))
+    (mapcar
+     (lambda (stop)
+       (dom-node 'stop `((offset . ,(format "%s%%" (car stop)))
+                        (stop-color . ,(cdr stop)))))
+     stops))))
+
+(defun svg-rectangle (svg x y width height &rest args)
+  "Create a rectangle on SVG, starting at position X/Y, of WIDTH/HEIGHT.
+ARGS is a plist of modifiers.  Possible values are
+
+:stroke-width PIXELS.  The line width.
+:stroke-color COLOR.  The line color.
+:gradient ID.  The gradient ID to use."
+  (svg--append
+   svg
+   (dom-node 'rect
+            `((width . ,width)
+              (height . ,height)
+              (x . ,x)
+              (y . ,y)
+              ,@(svg--arguments svg args)))))
+
+(defun svg-circle (svg x y radius &rest args)
+  "Create a circle of RADIUS on SVG.
+X/Y denote the center of the circle."
+  (svg--append
+   svg
+   (dom-node 'circle
+            `((cx . ,x)
+              (cy . ,y)
+              (r . ,radius)
+              ,@(svg--arguments svg args)))))
+
+(defun svg-ellipse (svg x y x-radius y-radius &rest args)
+  "Create an ellipse of X-RADIUS/Y-RADIUS on SVG.
+X/Y denote the center of the ellipse."
+  (svg--append
+   svg
+   (dom-node 'ellipse
+            `((cx . ,x)
+              (cy . ,y)
+              (rx . ,x-radius)
+              (ry . ,y-radius)
+              ,@(svg--arguments svg args)))))
+
+(defun svg-line (svg x1 y1 x2 y2 &rest args)
+  "Create a line of starting in X1/Y1, ending at X2/Y2 in SVG."
+  (svg--append
+   svg
+   (dom-node 'line
+            `((x1 . ,x1)
+              (x2 . ,y1)
+              (y1 . ,x2)
+              (y2 . ,y2)
+              ,@(svg--arguments svg args)))))
+
+(defun svg-polyline (svg points &rest args)
+  "Create a polyline going through POINTS on SVG.
+POINTS is a list of x/y pairs."
+  (svg--append
+   svg
+   (dom-node
+    'polyline
+    `((points . ,(mapconcat (lambda (pair)
+                             (format "%s %s" (car pair) (cdr pair)))
+                           points
+                           ", "))
+      ,@(svg--arguments svg args)))))
+
+(defun svg-polygon (svg points &rest args)
+  "Create a polygon going through POINTS on SVG.
+POINTS is a list of x/y pairs."
+  (svg--append
+   svg
+   (dom-node
+    'polygon
+    `((points . ,(mapconcat (lambda (pair)
+                             (format "%s %s" (car pair) (cdr pair)))
+                           points
+                           ", "))
+      ,@(svg--arguments svg args)))))
+
+(defun svg--append (svg node)
+  (let ((old (and (dom-attr node 'id)
+                 (dom-by-id svg
+                             (concat "\\`" (regexp-quote (dom-attr node 'id))
+                                     "\\'")))))
+    (if old
+       (dom-set-attributes old (dom-attributes node))
+      (dom-append-child svg node)))
+  (svg-possibly-update-image svg))
+
+(defun svg--arguments (svg args)
+  (let ((stroke-width (or (plist-get args :stroke-width)
+                         (dom-attr svg 'stroke-width)))
+       (stroke-color (or (plist-get args :stroke-color)
+                          (dom-attr svg 'stroke-color)))
+        (fill-color (plist-get args :fill-color))
+       attr)
+    (when stroke-width
+      (push (cons 'stroke-width stroke-width) attr))
+    (when stroke-color
+      (push (cons 'stroke stroke-color) attr))
+    (when fill-color
+      (push (cons 'fill fill-color) attr))
+    (when (plist-get args :gradient)
+      (setq attr
+           (append
+            ;; We need a way to specify the gradient direction here...
+            `((x1 . 0)
+              (x2 . 0)
+              (y1 . 0)
+              (y2 . 1)
+              (fill . ,(format "url(#%s)"
+                               (plist-get args :gradient))))
+            attr)))
+    (cl-loop for (key value) on args by #'cddr
+            unless (memq key '(:stroke-color :stroke-width :gradient
+                                              :fill-color))
+            ;; Drop the leading colon.
+            do (push (cons (intern (substring (symbol-name key) 1) obarray)
+                           value)
+                     attr))
+    attr))
+
+(defun svg--def (svg def)
+  (dom-append-child
+   (or (dom-by-tag svg 'defs)
+       (let ((node (dom-node 'defs)))
+        (dom-add-child-before svg node)
+        node))
+   def)
+  svg)
+
+(defun svg-image (svg)
+  "Return an image object from SVG."
+  (create-image
+   (with-temp-buffer
+     (svg-print svg)
+     (buffer-string))
+   'svg t))
+
+(defun svg-insert-image (svg)
+  "Insert SVG as an image at point.
+If the SVG is later changed, the image will also be updated."
+  (let ((image (svg-image svg))
+       (marker (point-marker)))
+    (insert-image image)
+    (dom-set-attribute svg :image marker)))
+
+(defun svg-possibly-update-image (svg)
+  (let ((marker (dom-attr svg :image)))
+    (when (and marker
+              (buffer-live-p (marker-buffer marker)))
+      (with-current-buffer (marker-buffer marker)
+       (put-text-property marker (1+ marker) 'display (svg-image svg))))))
+
+(defun svg-print (dom)
+  "Convert DOM into a string containing the xml representation."
+  (insert (format "<%s" (car dom)))
+  (dolist (attr (nth 1 dom))
+    ;; Ignore attributes that start with a colon.
+    (unless (= (aref (format "%s" (car attr)) 0) ?:)
+      (insert (format " %s=\"%s\"" (car attr) (cdr attr)))))
+  (insert ">")
+  (dolist (elem (nthcdr 2 dom))
+    (insert " ")
+    (svg-print elem))
+  (insert (format "</%s>" (car dom))))
+
+(provide 'svg)
+
+;;; svg.el ends here
index 7e44c57228e6f5fdd964bc2af2d83ce14c31e365..28be8c8c5301018dde8c573e85042186ff2dd01d 100644 (file)
@@ -834,6 +834,10 @@ is buffer-local."
     (define-key map [down] 'term-send-down)
     (define-key map [right] 'term-send-right)
     (define-key map [left] 'term-send-left)
+    (define-key map [C-up] 'term-send-ctrl-up)
+    (define-key map [C-down] 'term-send-ctrl-down)
+    (define-key map [C-right] 'term-send-ctrl-right)
+    (define-key map [C-left] 'term-send-ctrl-left)
     (define-key map [delete] 'term-send-del)
     (define-key map [deletechar] 'term-send-del)
     (define-key map [backspace] 'term-send-backspace)
@@ -1204,6 +1208,10 @@ without any interpretation."
 (defun term-send-down  () (interactive) (term-send-raw-string "\eOB"))
 (defun term-send-right () (interactive) (term-send-raw-string "\eOC"))
 (defun term-send-left  () (interactive) (term-send-raw-string "\eOD"))
+(defun term-send-ctrl-up    () (interactive) (term-send-raw-string "\e[1;5A"))
+(defun term-send-ctrl-down  () (interactive) (term-send-raw-string "\e[1;5B"))
+(defun term-send-ctrl-right () (interactive) (term-send-raw-string "\e[1;5C"))
+(defun term-send-ctrl-left  () (interactive) (term-send-raw-string "\e[1;5D"))
 (defun term-send-home  () (interactive) (term-send-raw-string "\e[1~"))
 (defun term-send-insert() (interactive) (term-send-raw-string "\e[2~"))
 (defun term-send-end   () (interactive) (term-send-raw-string "\e[4~"))
@@ -3239,6 +3247,10 @@ See `term-prompt-regexp'."
    ;; \E[D - cursor left (terminfo: cub)
    ((eq char ?D)
     (term-move-columns (- (max 1 term-terminal-parameter))))
+   ;; \E[G - cursor motion to absolute column (terminfo: hpa)
+   ((eq char ?G)
+    (term-move-columns (- (max 0 (min term-width term-terminal-parameter))
+                          (term-current-column))))
    ;; \E[J - clear to end of screen (terminfo: ed, clear)
    ((eq char ?J)
     (term-erase-in-display term-terminal-parameter))
index 7f46f61c4fb6c7b43ec5e115ac32452eb0cb967b..63469422f768c7751a60afa1753651e26d617fd4 100644 (file)
@@ -54,4 +54,6 @@
     (define-key local-function-key-map [ALT] [27])
     ))
 
+(provide 'term/AT386)
+
 ;;; AT386.el ends here
index f26dc6b919875c2ce745e617c5f035ca289d38c2..a32da6ae8f237de1c1f386c74e5433fd28aa27eb 100644 (file)
@@ -5,4 +5,6 @@
   (keyboard-translate ?\177 ?\^h)
   (keyboard-translate ?\^h ?\177))
 
+(provide 'term/bobcat)
+
 ;;; bobcat.el ends here
index d69433a77c2b8c267cf0ca80dcf13fd11e1ee746..edc64b4404d552c7e257a773e75656f25ecb7681 100644 (file)
@@ -6,4 +6,6 @@
   "Terminal initialization function for cygwin."
   (tty-no-underline))
 
+(provide 'term/cygwin)
+
 ;;; cygwin.el ends here
index 6f4866b07957be29ed00dd13ad9832e3c6a6d762..0fd0f2237a59b890824d5508abdb5842a1d02b37 100644 (file)
@@ -606,4 +606,6 @@ list.  You can (and should) also run it if and when the value of
     (run-hooks 'dos-codepage-setup-hook)
     ))
 
+(provide 'term/internal)
+
 ;;; internal.el ends here
index ee638643949ba7c0c8524bc776060031f061e1aa..5217e42e3195478e23a1d5a7d95ad032ac232ffb 100644 (file)
     (set-keymap-parent m (keymap-parent input-decode-map))
     (set-keymap-parent input-decode-map m)))
 
+(provide 'term/iris-ansi)
+
 ;;; iris-ansi.el ends here
index 00bcdfdf5427d91550cc633561512ddc7544a88d..70730dc5844631d9ad4d64039517d6fdf39fa724 100644 (file)
@@ -19,4 +19,6 @@
   ;; The arg only matters in that it is not t or nil.
   (set-input-meta-mode 'iso-latin-1))
 
+(provide 'term/linux)
+
 ;;; linux.el ends here
index 6b9e1301003e804849843c47db2129efa28750e6..aab4110b3ae57582aeca73d3166e3ff293f0e85a 100644 (file)
@@ -80,4 +80,6 @@
     (set-keymap-parent m (keymap-parent input-decode-map))
     (set-keymap-parent input-decode-map m)))
 
+(provide 'term/lk201)
+
 ;;; lk201.el ends here
index b66e000e3b5651700cd4c84097a2568e38d4c791..5738644259e7624f2a09da3afbd9498dc8ac889f 100644 (file)
@@ -66,4 +66,6 @@
     (define-key news-fkey-prefix "x" [kp-8])
     ))
 
+(provide 'term/news)
+
 ;;; news.el ends here
index e737131d5bfc45666857b59a5effbebfb77b0cb4..5080ed0a8f7769c0fef14c996b8af0006eb9c39a 100644 (file)
@@ -717,60 +717,12 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
 
 ;;;; Scrollbar handling.
 
-(global-set-key [vertical-scroll-bar down-mouse-1] 'ns-handle-scroll-bar-event)
+(global-set-key [vertical-scroll-bar down-mouse-1] 'scroll-bar-toolkit-scroll)
+(global-set-key [horizontal-scroll-bar down-mouse-1] 'scroll-bar-toolkit-horizontal-scroll)
 (global-unset-key [vertical-scroll-bar mouse-1])
 (global-unset-key [vertical-scroll-bar drag-mouse-1])
-
-(declare-function scroll-bar-scale "scroll-bar" (num-denom whole))
-
-(defun ns-scroll-bar-move (event)
-  "Scroll the frame according to a Nextstep scroller event."
-  (interactive "e")
-  (let* ((pos (event-end event))
-         (window (nth 0 pos))
-         (scale (nth 2 pos)))
-    (with-current-buffer (window-buffer window)
-      (cond
-       ((eq (car scale) (cdr scale))
-       (goto-char (point-max)))
-       ((= (car scale) 0)
-       (goto-char (point-min)))
-       (t
-       (goto-char (+ (point-min) 1
-                     (scroll-bar-scale scale (- (point-max) (point-min)))))))
-      (beginning-of-line)
-      (set-window-start window (point))
-      (vertical-motion (/ (window-height window) 2) window))))
-
-(defun ns-handle-scroll-bar-event (event)
-  "Handle scroll bar EVENT to emulate Nextstep style scrolling."
-  (interactive "e")
-  (let* ((position (event-start event))
-        (bar-part (nth 4 position))
-        (window (nth 0 position))
-        (old-window (selected-window)))
-    (cond
-     ((eq bar-part 'ratio)
-      (ns-scroll-bar-move event))
-     ((eq bar-part 'handle)
-      (if (eq window (selected-window))
-         (track-mouse (ns-scroll-bar-move event))
-        ;; track-mouse faster for selected window, slower for unselected.
-       (ns-scroll-bar-move event)))
-     (t
-      (select-window window)
-      (cond
-       ((eq bar-part 'up)
-       (goto-char (window-start window))
-       (scroll-down 1))
-       ((eq bar-part 'above-handle)
-       (scroll-down))
-       ((eq bar-part 'below-handle)
-       (scroll-up))
-       ((eq bar-part 'down)
-       (goto-char (window-start window))
-       (scroll-up 1)))
-      (select-window old-window)))))
+(global-unset-key [horizontal-scroll-bar mouse-1])
+(global-unset-key [horizontal-scroll-bar drag-mouse-1])
 
 
 ;;;; Color support.
@@ -936,5 +888,6 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
   (ns-get-selection selection-symbol target-type))
 
 (provide 'ns-win)
+(provide 'term/ns-win)
 
 ;;; ns-win.el ends here
index 8ca98c6ec911a1851274e093a88a32ba35350698..031768cec2ccb1887454bd4690100c3e218da04e 100644 (file)
@@ -388,5 +388,6 @@ Errors out because it is not supposed to be called, ever."
 ;; ---------------------------------------------------------------------------
 
 (provide 'pc-win)
+(provide 'term/pc-win)
 
 ;;; pc-win.el ends here
index da26d30a682cff432151ca465777a8fd413e0b12..97d38659115ef0825e7ebd0c457b0ce19f7b300f 100644 (file)
             (* (apply '+ (car (cddr (nth 15 rxvt-standard-colors)))) 0.6))
          (set-terminal-parameter nil 'background-mode 'dark)))))
 
+(provide 'term/rxvt)
+
 ;;; rxvt.el ends here
index 7f681154d6ebc3159d0da58ed662a6802b1eedf4..d7ee77052084b3366497c21c22767322f49fb4e1 100644 (file)
@@ -20,4 +20,6 @@ it runs, which can change when the screen session is moved to another tty."
   (let ((xterm-extra-capabilities xterm-screen-extra-capabilities))
     (tty-run-terminal-initialization (selected-frame) "xterm")))
 
+(provide 'term/screen)
+
 ;; screen.el ends here
index 7fb8e7ed98426c102d42ceae744ddfe9212e1883..ef40db16d185b5a0bbc4b6d32fc1e9c721dbd1a6 100644 (file)
        (eval (car hooks))
        (setq hooks (cdr hooks))))))
 
+(provide 'term/sun)
+
 ;;; sun.el ends here
index 3ea26b8c3ede26b8e95f847ec1550f2f09a05ce3..a88695062b83fe8bbeca66f45da511370642000f 100644 (file)
@@ -1035,4 +1035,6 @@ A color is considered gray if the 3 components of its RGB value are equal."
       (setq colors (cdr colors)))
     count))
 
+(provide 'term/tty-colors)
+
 ;;; tty-colors.el ends here
index 1173f9f15dd5132cebdfc04290b7921e42c733b8..e25a3b616d522513d66841f7623ac13dc93d9d42 100644 (file)
@@ -115,4 +115,6 @@ which the keypad's keys act as ordinary digits."
   (send-string-to-terminal
    (if (terminal-parameter nil 'tvi970-keypad-numeric) "\e=" "\e>")))
 
+(provide 'term/tvi970)
+
 ;;; tvi970.el ends here
index fb46c9964913e7e09b906d725177d9dd764d6227..16a1c271b9a830a33cbfa47afe2637eda192253a 100644 (file)
@@ -48,4 +48,6 @@ switch to 132-column mode if ARG is omitted or nil."
   (send-string-to-terminal (if vt100-wide-mode "\e[?3h" "\e[?3l"))
   (set-frame-width terminal-frame (if vt100-wide-mode 132 80)))
 
+(provide 'term/vt100)
+
 ;;; vt100.el ends here
index 550266816e04dd70c778706c5258485294624344..dde2e2290684850c863deda021300eb4afaba1e7 100644 (file)
@@ -7,4 +7,6 @@
   (define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
   (define-key local-function-key-map [f11] [?\e]))
 
+(provide 'term/vt200)
+
 ;;; vt200.el ends here
index 134e3106b7bb76b03bf7cfb4e407b970e05ae5f2..8f3eaa2c029c6728f744bd637bfc98e14c27e388 100644 (file)
@@ -463,5 +463,6 @@ That includes all Windows systems except for 9X/Me."
   (getenv "SystemRoot"))
 
 (provide 'w32-win)
+(provide 'term/w32-win)
 
 ;;; w32-win.el ends here
index b7e0a22bfb3fc65eb3ea9381b1d8c594a537b556..bf1550f7c332a016773119b5eea6d159dd5895c6 100644 (file)
@@ -93,4 +93,6 @@
   (tty-set-up-initial-frame-faces)
   (run-hooks 'terminal-init-w32-hook))
 
+(provide 'term/w32console)
+
 ;;; w32console.el ends here
index 3e1055a18735325cb096d98d6c5cd836dff4f483..d3ee7a0a6cb36b7ef68085bd03f1d978df706b24 100644 (file)
@@ -155,4 +155,6 @@ M-r M-x move-to-window-line, Funct up-arrow or down-arrow are similar"
   ;;                   (nth 1 key-definition)))
   (fset 'enable-arrow-keys nil))
 
+(provide 'term/wyse50)
+
 ;;; wyse50.el ends here
index 59df14da93a053bc55784b42a26b09e635971397..c8e79e3f81a379d8f35f5c6afc8988171dccd048 100644 (file)
@@ -1487,5 +1487,6 @@ This uses `icon-map-list' to map icon file names to stock icon names."
 (global-set-key [XF86WakeUp] 'ignore)
 
 (provide 'x-win)
+(provide 'term/x-win)
 
 ;;; x-win.el ends here
index e06423ccfdddb85fe35d894fc230d9f6c94e0a3e..5a38ebe8e45715f23c4d89f7b88a8314a13e2cc2 100644 (file)
@@ -590,6 +590,19 @@ string bytes that can be copied is 3/4 of this value."
     (define-key map [f59] [M-f11])
     (define-key map [f60] [M-f12])
 
+    (define-key map [f61] [M-S-f1])
+    (define-key map [f62] [M-S-f2])
+    (define-key map [f63] [M-S-f3])
+    (define-key map [f64] [M-S-f4])
+    (define-key map [f65] [M-S-f5])
+    (define-key map [f66] [M-S-f6])
+    (define-key map [f67] [M-S-f7])
+    (define-key map [f68] [M-S-f8])
+    (define-key map [f69] [M-S-f9])
+    (define-key map [f70] [M-S-f10])
+    (define-key map [f71] [M-S-f11])
+    (define-key map [f72] [M-S-f12])
+
     map)
   "Keymap of possible alternative meanings for some keys.")
 
index b3a41d3822ca36b48ba9abc9f62df86b514cfe30..e30fb3e6d14128792bc54418a80994f64ceb3463 100644 (file)
 
 ;; - electric ; and }
 ;; - filling code with auto-fill-mode
-;; - attribute value completion
 ;; - fix font-lock errors with multi-line selectors
 
 ;;; Code:
 
+(require 'seq)
+(require 'smie)
+
 (defgroup css nil
   "Cascading Style Sheets (CSS) editing mode."
   :group 'languages)
   "Identifiers for pseudo-elements.")
 
 (defconst css-at-ids
-  '("charset" "font-face" "import" "media" "namespace" "page")
+  '("charset" "font-face" "import" "keyframes" "media" "namespace"
+    "page")
   "Identifiers that appear in the form @foo.")
 
+(defconst scss-at-ids
+  '("at-root" "content" "debug" "each" "else" "else if" "error" "extend"
+    "for" "function" "if" "import" "include" "mixin" "return" "warn"
+    "while")
+  "Additional identifiers that appear in the form @foo in SCSS.")
+
+(defvar css--at-ids css-at-ids
+  "List of at-rules for the current mode.")
+(make-variable-buffer-local 'css--at-ids)
+
 (defconst css-bang-ids
   '("important")
   "Identifiers that appear in the form !foo.")
   '("default" "global" "optional")
   "Additional identifiers that appear in the form !foo in SCSS.")
 
+(defvar css--bang-ids css-bang-ids
+  "List of bang-rules for the current mode.")
+(make-variable-buffer-local 'css--bang-ids)
+
 (defconst css-descriptor-ids
   '("ascent" "baseline" "bbox" "cap-height" "centerline" "definition-src"
     "descent" "font-family" "font-size" "font-stretch" "font-style"
     "visual")
   "Identifiers for types of media.")
 
-(defconst css-property-ids
-  '(;; CSS 2.1 properties (http://www.w3.org/TR/CSS21/propidx.html).
-    ;;
-    ;; Properties duplicated by any of the CSS3 modules below have
-    ;; been removed.
-    "azimuth" "border-collapse" "border-spacing" "bottom"
-    "caption-side" "clear" "clip" "content" "counter-increment"
-    "counter-reset" "cue" "cue-after" "cue-before" "direction" "display"
-    "elevation" "empty-cells" "float" "height" "left" "line-height"
-    "list-style" "list-style-image" "list-style-position"
-    "list-style-type" "margin" "margin-bottom" "margin-left"
-    "margin-right" "margin-top" "max-height" "max-width" "min-height"
-    "min-width" "orphans" "padding" "padding-bottom" "padding-left"
-    "padding-right" "padding-top" "page-break-after"
-    "page-break-before" "page-break-inside" "pause" "pause-after"
-    "pause-before" "pitch" "pitch-range" "play-during" "position"
-    "quotes" "richness" "right" "speak" "speak-header" "speak-numeral"
-    "speak-punctuation" "speech-rate" "stress" "table-layout" "top"
-    "unicode-bidi" "vertical-align" "visibility" "voice-family" "volume"
-    "widows" "width" "z-index"
+(defconst css-property-alist
+  ;; CSS 2.1 properties (http://www.w3.org/TR/CSS21/propidx.html).
+  ;;
+  ;; Properties duplicated by any of the CSS3 modules below have been
+  ;; removed.
+  '(("azimuth" angle "left-side" "far-left" "left" "center-left"
+     "center" "center-right" "right" "far-right" "right-side" "behind"
+     "leftwards" "rightwards")
+    ("border-collapse" "collapse" "separate")
+    ("border-spacing" length)
+    ("bottom" length percentage "auto")
+    ("caption-side" "top" "bottom")
+    ("clear" "none" "left" "right" "both")
+    ("clip" shape "auto")
+    ("content" "normal" "none" string uri counter "attr()"
+     "open-quote" "close-quote" "no-open-quote" "no-close-quote")
+    ("counter-increment" identifier integer "none")
+    ("counter-reset" identifier integer "none")
+    ("cue" cue-before cue-after)
+    ("cue-after" uri "none")
+    ("cue-before" uri "none")
+    ("direction" "ltr" "rtl")
+    ("display" "inline" "block" "list-item" "inline-block" "table"
+     "inline-table" "table-row-group" "table-header-group"
+     "table-footer-group" "table-row" "table-column-group"
+     "table-column" "table-cell" "table-caption" "none"
+     ;; CSS Flexible Box Layout Module Level 1
+     ;; (https://www.w3.org/TR/css3-flexbox/#valdef-display-flex)
+     "flex" "inline-flex")
+    ("elevation" angle "below" "level" "above" "higher" "lower")
+    ("empty-cells" "show" "hide")
+    ("float" "left" "right" "none")
+    ("height" length percentage "auto")
+    ("left" length percentage "auto")
+    ("line-height" "normal" number length percentage)
+    ("list-style" list-style-type list-style-position
+     list-style-image)
+    ("list-style-image" uri "none")
+    ("list-style-position" "inside" "outside")
+    ("list-style-type" "disc" "circle" "square" "decimal"
+     "decimal-leading-zero" "lower-roman" "upper-roman" "lower-greek"
+     "lower-latin" "upper-latin" "armenian" "georgian" "lower-alpha"
+     "upper-alpha" "none")
+    ("margin" margin-width)
+    ("margin-bottom" margin-width)
+    ("margin-left" margin-width)
+    ("margin-right" margin-width)
+    ("margin-top" margin-width)
+    ("max-height" length percentage "none")
+    ("max-width" length percentage "none")
+    ("min-height" length percentage)
+    ("min-width" length percentage)
+    ("padding" padding-width)
+    ("padding-bottom" padding-width)
+    ("padding-left" padding-width)
+    ("padding-right" padding-width)
+    ("padding-top" padding-width)
+    ("page-break-after" "auto" "always" "avoid" "left" "right")
+    ("page-break-before" "auto" "always" "avoid" "left" "right")
+    ("page-break-inside" "avoid" "auto")
+    ("pause" time percentage)
+    ("pause-after" time percentage)
+    ("pause-before" time percentage)
+    ("pitch" frequency "x-low" "low" "medium" "high" "x-high")
+    ("pitch-range" number)
+    ("play-during" uri "mix" "repeat" "auto" "none")
+    ("position" "static" "relative" "absolute" "fixed")
+    ("quotes" string "none")
+    ("richness" number)
+    ("right" length percentage "auto")
+    ("speak" "normal" "none" "spell-out")
+    ("speak-header" "once" "always")
+    ("speak-numeral" "digits" "continuous")
+    ("speak-punctuation" "code" "none")
+    ("speech-rate" number "x-slow" "slow" "medium" "fast" "x-fast"
+     "faster" "slower")
+    ("stress" number)
+    ("table-layout" "auto" "fixed")
+    ("top" length percentage "auto")
+    ("unicode-bidi" "normal" "embed" "bidi-override")
+    ("vertical-align" "baseline" "sub" "super" "top" "text-top"
+     "middle" "bottom" "text-bottom" percentage length)
+    ("visibility" "visible" "hidden" "collapse")
+    ("voice-family" specific-voice generic-voice specific-voice
+     generic-voice)
+    ("volume" number percentage "silent" "x-soft" "soft" "medium"
+     "loud" "x-loud")
+    ("width" length percentage "auto")
+    ("z-index" "auto" integer)
 
     ;; CSS Animations
     ;; (http://www.w3.org/TR/css3-animations/#property-index)
-    "animation" "animation-delay" "animation-direction"
-    "animation-duration" "animation-fill-mode"
-    "animation-iteration-count" "animation-name"
-    "animation-play-state" "animation-timing-function"
+    ("animation" single-animation-name time single-timing-function
+     single-animation-iteration-count single-animation-direction
+     single-animation-fill-mode single-animation-play-state)
+    ("animation-delay" time)
+    ("animation-direction" single-animation-direction)
+    ("animation-duration" time)
+    ("animation-fill-mode" single-animation-fill-mode)
+    ("animation-iteration-count" single-animation-iteration-count)
+    ("animation-name" single-animation-name)
+    ("animation-play-state" single-animation-play-state)
+    ("animation-timing-function" single-timing-function)
 
     ;; CSS Backgrounds and Borders Module Level 3
     ;; (http://www.w3.org/TR/css3-background/#property-index)
-    "background" "background-attachment" "background-clip"
-    "background-color" "background-image" "background-origin"
-    "background-position" "background-repeat" "background-size"
-    "border" "border-bottom" "border-bottom-color"
-    "border-bottom-left-radius" "border-bottom-right-radius"
-    "border-bottom-style" "border-bottom-width" "border-color"
-    "border-image" "border-image-outset" "border-image-repeat"
-    "border-image-slice" "border-image-source" "border-image-width"
-    "border-left" "border-left-color" "border-left-style"
-    "border-left-width" "border-radius" "border-right"
-    "border-right-color" "border-right-style" "border-right-width"
-    "border-style" "border-top" "border-top-color"
-    "border-top-left-radius" "border-top-right-radius"
-    "border-top-style" "border-top-width" "border-width" "box-shadow"
+    ("background" bg-layer final-bg-layer)
+    ("background-attachment" attachment)
+    ("background-clip" box)
+    ("background-color" color)
+    ("background-image" bg-image)
+    ("background-origin" box)
+    ("background-position" position)
+    ("background-repeat" repeat-style)
+    ("background-size" bg-size)
+    ("border" line-width line-style color)
+    ("border-bottom" line-width line-style color)
+    ("border-bottom-color" color)
+    ("border-bottom-left-radius" length percentage)
+    ("border-bottom-right-radius" length percentage)
+    ("border-bottom-style" line-style)
+    ("border-bottom-width" line-width)
+    ("border-color" color)
+    ("border-image" border-image-source border-image-slice
+     border-image-width border-image-outset border-image-repeat)
+    ("border-image-outset" length number)
+    ("border-image-repeat" "stretch" "repeat" "round" "space")
+    ("border-image-slice" number percentage "fill")
+    ("border-image-source" "none" image)
+    ("border-image-width" length percentage number "auto")
+    ("border-left" line-width line-style color)
+    ("border-left-color" color)
+    ("border-left-style" line-style)
+    ("border-left-width" line-width)
+    ("border-radius" length percentage)
+    ("border-right" line-width line-style color)
+    ("border-right-color" color)
+    ("border-right-style" line-style)
+    ("border-right-width" line-width)
+    ("border-style" line-style)
+    ("border-top" line-width line-style color)
+    ("border-top-color" color)
+    ("border-top-left-radius" length percentage)
+    ("border-top-right-radius" length percentage)
+    ("border-top-style" line-style)
+    ("border-top-width" line-width)
+    ("border-width" line-width)
+    ("box-shadow" "none" shadow)
 
     ;; CSS Basic User Interface Module Level 3 (CSS3 UI)
     ;; (http://www.w3.org/TR/css3-ui/#property-index)
-    "box-sizing" "caret-color" "cursor" "nav-down" "nav-left"
-    "nav-right" "nav-up" "outline" "outline-color" "outline-offset"
-    "outline-style" "outline-width" "resize" "text-overflow"
+    ("box-sizing" "content-box" "border-box")
+    ("caret-color" "auto" color)
+    ("cursor" uri x y "auto" "default" "none" "context-menu" "help"
+     "pointer" "progress" "wait" "cell" "crosshair" "text"
+     "vertical-text" "alias" "copy" "move" "no-drop" "not-allowed"
+     "grab" "grabbing" "e-resize" "n-resize" "ne-resize" "nw-resize"
+     "s-resize" "se-resize" "sw-resize" "w-resize" "ew-resize"
+     "ns-resize" "nesw-resize" "nwse-resize" "col-resize" "row-resize"
+     "all-scroll" "zoom-in" "zoom-out")
+    ("nav-down" "auto" id "current" "root" target-name)
+    ("nav-left" "auto" id "current" "root" target-name)
+    ("nav-right" "auto" id "current" "root" target-name)
+    ("nav-up" "auto" id "current" "root" target-name)
+    ("outline" outline-color outline-style outline-width)
+    ("outline-color" color "invert")
+    ("outline-offset" length)
+    ("outline-style" "auto" border-style)
+    ("outline-width" border-width)
+    ("resize" "none" "both" "horizontal" "vertical")
+    ("text-overflow" "clip" "ellipsis" string)
 
     ;; CSS Color Module Level 3
     ;; (http://www.w3.org/TR/css3-color/#property)
-    "color" "opacity"
+    ("color" color)
+    ("opacity" alphavalue)
 
     ;; CSS Flexible Box Layout Module Level 1
     ;; (http://www.w3.org/TR/css-flexbox-1/#property-index)
-    "align-content" "align-items" "align-self" "flex" "flex-basis"
-    "flex-direction" "flex-flow" "flex-grow" "flex-shrink" "flex-wrap"
-    "justify-content" "order"
+    ("align-content" "flex-start" "flex-end" "center" "space-between"
+     "space-around" "stretch")
+    ("align-items" "flex-start" "flex-end" "center" "baseline"
+     "stretch")
+    ("align-self" "auto" "flex-start" "flex-end" "center" "baseline"
+     "stretch")
+    ("flex" "none" flex-grow flex-shrink flex-basis)
+    ("flex-basis" "auto" "content" width)
+    ("flex-direction" "row" "row-reverse" "column" "column-reverse")
+    ("flex-flow" flex-direction flex-wrap)
+    ("flex-grow" number)
+    ("flex-shrink" number)
+    ("flex-wrap" "nowrap" "wrap" "wrap-reverse")
+    ("justify-content" "flex-start" "flex-end" "center"
+     "space-between" "space-around")
+    ("order" integer)
 
     ;; CSS Fonts Module Level 3
     ;; (http://www.w3.org/TR/css3-fonts/#property-index)
-    "font" "font-family" "font-feature-settings" "font-kerning"
-    "font-language-override" "font-size" "font-size-adjust"
-    "font-stretch" "font-style" "font-synthesis" "font-variant"
-    "font-variant-alternates" "font-variant-caps"
-    "font-variant-east-asian" "font-variant-ligatures"
-    "font-variant-numeric" "font-variant-position" "font-weight"
+    ("font" font-style font-variant-css21 font-weight font-stretch
+     font-size line-height font-family "caption" "icon" "menu"
+     "message-box" "small-caption" "status-bar")
+    ("font-family" family-name generic-family)
+    ("font-feature-settings" "normal" feature-tag-value)
+    ("font-kerning" "auto" "normal" "none")
+    ("font-language-override" "normal" string)
+    ("font-size" absolute-size relative-size length percentage)
+    ("font-size-adjust" "none" number)
+    ("font-stretch" "normal" "ultra-condensed" "extra-condensed"
+     "condensed" "semi-condensed" "semi-expanded" "expanded"
+     "extra-expanded" "ultra-expanded")
+    ("font-style" "normal" "italic" "oblique")
+    ("font-synthesis" "none" "weight" "style")
+    ("font-variant" "normal" "none" common-lig-values
+     discretionary-lig-values historical-lig-values
+     contextual-alt-values "stylistic()" "historical-forms"
+     "styleset()" "character-variant()" "swash()" "ornaments()"
+     "annotation()" "small-caps" "all-small-caps" "petite-caps"
+     "all-petite-caps" "unicase" "titling-caps" numeric-figure-values
+     numeric-spacing-values numeric-fraction-values "ordinal"
+     "slashed-zero" east-asian-variant-values east-asian-width-values
+     "ruby")
+    ("font-variant-alternates" "normal" "stylistic()"
+     "historical-forms" "styleset()" "character-variant()" "swash()"
+     "ornaments()" "annotation()")
+    ("font-variant-caps" "normal" "small-caps" "all-small-caps"
+     "petite-caps" "all-petite-caps" "unicase" "titling-caps")
+    ("font-variant-east-asian" "normal" east-asian-variant-values
+     east-asian-width-values "ruby")
+    ("font-variant-ligatures" "normal" "none" common-lig-values
+     discretionary-lig-values historical-lig-values
+     contextual-alt-values)
+    ("font-variant-numeric" "normal" numeric-figure-values
+     numeric-spacing-values numeric-fraction-values "ordinal"
+     "slashed-zero")
+    ("font-variant-position" "normal" "sub" "super")
+    ("font-weight" "normal" "bold" "bolder" "lighter" "100" "200"
+     "300" "400" "500" "600" "700" "800" "900")
+
+    ;; CSS Fragmentation Module Level 3
+    ;; (https://www.w3.org/TR/css-break-3/#property-index)
+    ("box-decoration-break" "slice" "clone")
+    ("break-after" "auto" "avoid" "avoid-page" "page" "left" "right"
+     "recto" "verso" "avoid-column" "column" "avoid-region" "region")
+    ("break-before" "auto" "avoid" "avoid-page" "page" "left" "right"
+     "recto" "verso" "avoid-column" "column" "avoid-region" "region")
+    ("break-inside" "auto" "avoid" "avoid-page" "avoid-column"
+     "avoid-region")
+    ("orphans" integer)
+    ("widows" integer)
+
+    ;; CSS Multi-column Layout Module
+    ;; (https://www.w3.org/TR/css3-multicol/#property-index)
+    ;; "break-after", "break-before", and "break-inside" are left out
+    ;; below, because they're already included in CSS Fragmentation
+    ;; Module Level 3.
+    ("column-count" integer "auto")
+    ("column-fill" "auto" "balance")
+    ("column-gap" length "normal")
+    ("column-rule" column-rule-width column-rule-style
+     column-rule-color "transparent")
+    ("column-rule-color" color)
+    ("column-rule-style" border-style)
+    ("column-rule-width" border-width)
+    ("column-span" "none" "all")
+    ("column-width" length "auto")
+    ("columns" column-width column-count)
 
     ;; CSS Overflow Module Level 3
     ;; (http://www.w3.org/TR/css-overflow-3/#property-index)
-    "max-lines" "overflow" "overflow-x" "overflow-y"
+    ("max-lines" "none" integer)
+    ("overflow" "visible" "hidden" "scroll" "auto" "paged-x" "paged-y"
+     "paged-x-controls" "paged-y-controls" "fragments")
+    ("overflow-x" "visible" "hidden" "scroll" "auto" "paged-x"
+     "paged-y" "paged-x-controls" "paged-y-controls" "fragments")
+    ("overflow-y" "visible" "hidden" "scroll" "auto" "paged-x"
+     "paged-y" "paged-x-controls" "paged-y-controls" "fragments")
 
     ;; CSS Text Decoration Module Level 3
     ;; (http://dev.w3.org/csswg/css-text-decor-3/#property-index)
-    "text-decoration" "text-decoration-color" "text-decoration-line"
-    "text-decoration-skip" "text-decoration-style" "text-emphasis"
-    "text-emphasis-color" "text-emphasis-position" "text-emphasis-style"
-    "text-shadow" "text-underline-position"
+    ("text-decoration" text-decoration-line text-decoration-style
+     text-decoration-color)
+    ("text-decoration-color" color)
+    ("text-decoration-line" "none" "underline" "overline"
+     "line-through" "blink")
+    ("text-decoration-skip" "none" "objects" "spaces" "ink" "edges"
+     "box-decoration")
+    ("text-decoration-style" "solid" "double" "dotted" "dashed"
+     "wavy")
+    ("text-emphasis" text-emphasis-style text-emphasis-color)
+    ("text-emphasis-color" color)
+    ("text-emphasis-position" "over" "under" "right" "left")
+    ("text-emphasis-style" "none" "filled" "open" "dot" "circle"
+     "double-circle" "triangle" "sesame" string)
+    ("text-shadow" "none" length color)
+    ("text-underline-position" "auto" "under" "left" "right")
 
     ;; CSS Text Module Level 3
     ;; (http://www.w3.org/TR/css3-text/#property-index)
-    "hanging-punctuation" "hyphens" "letter-spacing" "line-break"
-    "overflow-wrap" "tab-size" "text-align" "text-align-last"
-    "text-indent" "text-justify" "text-transform" "white-space"
-    "word-break" "word-spacing" "word-wrap"
+    ("hanging-punctuation" "none" "first" "force-end" "allow-end"
+     "last")
+    ("hyphens" "none" "manual" "auto")
+    ("letter-spacing" "normal" length)
+    ("line-break" "auto" "loose" "normal" "strict")
+    ("overflow-wrap" "normal" "break-word")
+    ("tab-size" integer length)
+    ("text-align" "start" "end" "left" "right" "center" "justify"
+     "match-parent")
+    ("text-align-last" "auto" "start" "end" "left" "right" "center"
+     "justify")
+    ("text-indent" length percentage)
+    ("text-justify" "auto" "none" "inter-word" "distribute")
+    ("text-transform" "none" "capitalize" "uppercase" "lowercase"
+     "full-width")
+    ("white-space" "normal" "pre" "nowrap" "pre-wrap" "pre-line")
+    ("word-break" "normal" "keep-all" "break-all")
+    ("word-spacing" "normal" length percentage)
+    ("word-wrap" "normal" "break-word")
 
     ;; CSS Transforms Module Level 1
     ;; (http://www.w3.org/TR/css3-2d-transforms/#property-index)
-    "backface-visibility" "perspective" "perspective-origin"
-    "transform" "transform-origin" "transform-style"
+    ("backface-visibility" "visible" "hidden")
+    ("perspective" "none" length)
+    ("perspective-origin" "left" "center" "right" "top" "bottom"
+     percentage length)
+    ("transform" "none" transform-list)
+    ("transform-origin" "left" "center" "right" "top" "bottom"
+     percentage length)
+    ("transform-style" "flat" "preserve-3d")
 
     ;; CSS Transitions
     ;; (http://www.w3.org/TR/css3-transitions/#property-index)
-    "transition" "transition-delay" "transition-duration"
-    "transition-property" "transition-timing-function"
+    ("transition" single-transition)
+    ("transition-delay" time)
+    ("transition-duration" time)
+    ("transition-property" "none" single-transition-property "all")
+    ("transition-timing-function" single-transition-timing-function)
 
     ;; Filter Effects Module Level 1
     ;; (http://www.w3.org/TR/filter-effects/#property-index)
-    "color-interpolation-filters" "filter" "flood-color"
-    "flood-opacity" "lighting-color")
+    ("color-interpolation-filters" "auto" "sRGB" "linearRGB")
+    ("filter" "none" filter-function-list)
+    ("flood-color" color)
+    ("flood-opacity" number percentage)
+    ("lighting-color" color))
+  "Identifiers for properties and their possible values.
+The CAR of each entry is the name of a property, while the CDR is
+a list of possible values for that property.  String values in
+the CDRs represent literal values, while symbols represent one of
+the value classes found in `css-value-class-alist'.  If a symbol
+is not found in `css-value-class-alist', it's interpreted as a
+reference back to one of the properties in this list.  Some
+symbols, such as `number' or `identifier', don't produce any
+further value candidates, since that list would be infinite.")
+
+(defconst css-property-ids
+  (mapcar #'car css-property-alist)
   "Identifiers for properties.")
 
+(defconst css-value-class-alist
+  '((absolute-size
+     "xx-small" "x-small" "small" "medium" "large" "x-large"
+     "xx-large")
+    (alphavalue number)
+    (angle "calc()")
+    (attachment "scroll" "fixed" "local")
+    (bg-image image "none")
+    (bg-layer bg-image position repeat-style attachment box)
+    (bg-size length percentage "auto" "cover" "contain")
+    (box "border-box" "padding-box" "content-box")
+    (color
+     "aqua" "black" "blue" "fuchsia" "gray" "green" "lime" "maroon"
+     "navy" "olive" "orange" "purple" "red" "silver" "teal" "white"
+     "yellow" "transparent")
+    (common-lig-values "common-ligatures" "no-common-ligatures")
+    (contextual-alt-values "contextual" "no-contextual")
+    (counter "counter()" "counters()")
+    (discretionary-lig-values
+     "discretionary-ligatures" "no-discretionary-ligatures")
+    (east-asian-variant-values
+     "jis78" "jis83" "jis90" "jis04" "simplified" "traditional")
+    (east-asian-width-values "full-width" "proportional-width")
+    (family-name "Courier" "Helvetica" "Times")
+    (feature-tag-value string integer "on" "off")
+    (filter-function
+     "blur()" "brightness()" "contrast()" "drop-shadow()"
+     "grayscale()" "hue-rotate()" "invert()" "opacity()" "sepia()"
+     "saturate()")
+    (filter-function-list filter-function uri)
+    (final-bg-layer
+     bg-image position repeat-style attachment box color)
+    (font-variant-css21 "normal" "small-caps")
+    (frequency "calc()")
+    (generic-family
+     "serif" "sans-serif" "cursive" "fantasy" "monospace")
+    (generic-voice "male" "female" "child")
+    (gradient
+     linear-gradient radial-gradient repeating-linear-gradient
+     repeating-radial-gradient)
+    (historical-lig-values
+     "historical-ligatures" "no-historical-ligatures")
+    (image uri image-list element-reference gradient)
+    (image-list "image()")
+    (integer "calc()")
+    (length "calc()" number)
+    (line-height "normal" number length percentage)
+    (line-style
+     "none" "hidden" "dotted" "dashed" "solid" "double" "groove"
+     "ridge" "inset" "outset")
+    (line-width length "thin" "medium" "thick")
+    (linear-gradient "linear-gradient()")
+    (margin-width "auto" length percentage)
+    (number "calc()")
+    (numeric-figure-values "lining-nums" "oldstyle-nums")
+    (numeric-fraction-values "diagonal-fractions" "stacked-fractions")
+    (numeric-spacing-values "proportional-nums" "tabular-nums")
+    (padding-width length percentage)
+    (position
+     "left" "center" "right" "top" "bottom" percentage length)
+    (radial-gradient "radial-gradient()")
+    (relative-size "larger" "smaller")
+    (repeat-style
+     "repeat-x" "repeat-y" "repeat" "space" "round" "no-repeat")
+    (repeating-linear-gradient "repeating-linear-gradient()")
+    (repeating-radial-gradient "repeating-radial-gradient()")
+    (shadow "inset" length color)
+    (shape "rect()")
+    (single-animation-direction
+     "normal" "reverse" "alternate" "alternate-reverse")
+    (single-animation-fill-mode "none" "forwards" "backwards" "both")
+    (single-animation-iteration-count "infinite" number)
+    (single-animation-name "none" identifier)
+    (single-animation-play-state "running" "paused")
+    (single-timing-function single-transition-timing-function)
+    (single-transition
+     "none" single-transition-property time
+     single-transition-timing-function)
+    (single-transition-property "all" identifier)
+    (single-transition-timing-function
+     "ease" "linear" "ease-in" "ease-out" "ease-in-out" "step-start"
+     "step-end" "steps()" "cubic-bezier()")
+    (specific-voice identifier)
+    (target-name string)
+    (time "calc()")
+    (transform-list
+     "matrix()" "translate()" "translateX()" "translateY()" "scale()"
+     "scaleX()" "scaleY()" "rotate()" "skew()" "skewX()" "skewY()"
+     "matrix3d()" "translate3d()" "translateZ()" "scale3d()"
+     "scaleZ()" "rotate3d()" "rotateX()" "rotateY()" "rotateZ()"
+     "perspective()")
+    (uri "url()")
+    (width length percentage "auto")
+    (x number)
+    (y number))
+  "Property value classes and their values.
+The format is similar to that of `css-property-alist', except
+that the CARs aren't actual CSS properties, but rather a name for
+a class of values, and that symbols in the CDRs always refer to
+other entries in this list, not to properties.
+
+The following classes have been left out above because they
+cannot be completed sensibly: `element-reference', `id',
+`identifier', `percentage', and `string'.")
+
 (defcustom css-electric-keys '(?\} ?\;) ;; '()
   "Self inserting keys which should trigger re-indentation."
   :version "22.2"
   "Face to use for vendor-specific properties.")
 
 (defun css--font-lock-keywords (&optional sassy)
-  `((,(concat "!\\s-*"
-              (regexp-opt (append (if sassy scss-bang-ids)
-                                  css-bang-ids)))
+  `((,(concat "!\\s-*" (regexp-opt css--bang-ids))
      (0 font-lock-builtin-face))
     ;; Atrules keywords.  IDs not in css-at-ids are valid (ignored).
     ;; In fact the regexp should probably be
   :type 'integer
   :safe 'integerp)
 
-(require 'smie)
-
 (defconst css-smie-grammar
   (smie-prec2->grammar
    (smie-precs->prec2 '((assoc ";") (assoc ",") (left ":")))))
         (when (memq (char-before) '(?\{ ?\;))
           (list start pos css-property-ids))))))
 
+(defun css--complete-bang-rule ()
+  "Complete bang-rule at point."
+  (save-excursion
+    (let ((pos (point)))
+      (skip-chars-backward "-[:alnum:]")
+      (when (eq (char-before) ?\!)
+        (list (point) pos css--bang-ids)))))
+
 (defun css--complete-pseudo-element-or-class ()
   "Complete pseudo-element or pseudo-class at point."
   (save-excursion
     (let ((pos (point)))
       (skip-chars-backward "-[:alnum:]")
       (when (eq (char-before) ?\@)
-        (list (point) pos css-at-ids)))))
+        (list (point) pos css--at-ids)))))
+
+(defvar css--property-value-cache
+  (make-hash-table :test 'equal :size (length css-property-alist))
+  "Cache of previously completed property values.")
+
+(defun css--value-class-lookup (value-class)
+  "Return a list of value completion candidates for VALUE-CLASS.
+Completion candidates are looked up in `css-value-class-alist' by
+the symbol VALUE-CLASS."
+  (seq-uniq
+   (seq-mapcat
+    (lambda (value)
+      (if (stringp value)
+          (list value)
+        (css--value-class-lookup value)))
+    (cdr (assq value-class css-value-class-alist)))))
+
+(defun css--property-values (property)
+  "Return a list of value completion candidates for PROPERTY.
+Completion candidates are looked up in `css-property-alist' by
+the string PROPERTY."
+  (or (gethash property css--property-value-cache)
+      (let ((values
+             (seq-uniq
+              (seq-mapcat
+               (lambda (value)
+                 (if (stringp value)
+                     (list value)
+                   (or (css--value-class-lookup value)
+                       (css--property-values (symbol-name value)))))
+               (cdr (assoc property css-property-alist))))))
+        (puthash property values css--property-value-cache))))
+
+(defun css--complete-property-value ()
+  "Complete property value at point."
+  (let ((property
+         (save-excursion
+           (re-search-backward ":[^/]" (line-beginning-position) t)
+           (let ((property-end (point)))
+             (skip-chars-backward "-[:alnum:]")
+             (let ((property (buffer-substring (point) property-end)))
+               (car (member property css-property-ids)))))))
+    (when property
+      (let ((end (point)))
+        (save-excursion
+          (skip-chars-backward "[:graph:]")
+          (list (point) end
+                (cons "inherit" (css--property-values property))))))))
 
 (defun css-completion-at-point ()
   "Complete current symbol at point.
-Currently supports completion of CSS properties, pseudo-elements,
-pseudo-classes, and at-rules."
+Currently supports completion of CSS properties, property values,
+pseudo-elements, pseudo-classes, at-rules, and bang-rules."
   (or (css--complete-property)
+      (css--complete-bang-rule)
+      (css--complete-property-value)
       (css--complete-pseudo-element-or-class)
       (css--complete-at-rule)))
 
@@ -533,9 +963,11 @@ pseudo-classes, and at-rules."
   (let ((st (make-syntax-table css-mode-syntax-table)))
     (modify-syntax-entry ?/ ". 124" st)
     (modify-syntax-entry ?\n ">" st)
+    ;; Variable names are prefixed by $.
+    (modify-syntax-entry ?$ "'" st)
     st))
 
-(defvar scss-font-lock-keywords
+(defun scss-font-lock-keywords ()
   (append `((,(concat "$" css-ident-re) (0 font-lock-variable-name-face)))
           (css--font-lock-keywords 'sassy)
           `((,(concat "@mixin[ \t]+\\(" css-ident-re "\\)[ \t]*(")
@@ -556,7 +988,10 @@ pseudo-classes, and at-rules."
   (setq-local comment-continue " *")
   (setq-local comment-start-skip "/[*/]+[ \t]*")
   (setq-local comment-end-skip "[ \t]*\\(?:\n\\|\\*+/\\)")
-  (setq-local font-lock-defaults '(scss-font-lock-keywords nil t)))
+  (setq-local css--at-ids (append css-at-ids scss-at-ids))
+  (setq-local css--bang-ids (append css-bang-ids scss-bang-ids))
+  (setq-local font-lock-defaults
+              (list (scss-font-lock-keywords) nil t)))
 
 (provide 'css-mode)
 ;;; css-mode.el ends here
index 100e2a24367b709031dbddcad3d5defabfe1ea3e..173d1c9d1966ae215fa2dd5ef61b7e800b68f3ff 100644 (file)
@@ -804,65 +804,75 @@ region, instead of just filling the current paragraph."
   (interactive (progn
                 (barf-if-buffer-read-only)
                 (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 (fill-forward-paragraph 1)))
-           ;; There's no paragraph at or after point: give up.
-           (setq fill-pfx "")
-         (let ((end (point))
-               (beg (progn (fill-forward-paragraph -1) (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)))
+  (let ((hash (and (not (buffer-modified-p))
+                   (buffer-hash))))
+    (prog1
+        (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 (fill-forward-paragraph 1)))
+                 ;; There's no paragraph at or after point: give up.
+                 (setq fill-pfx "")
+               (let ((end (point))
+                     (beg (progn (fill-forward-paragraph -1) (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))
+      ;; If we didn't change anything in the buffer (and the buffer
+      ;; was previously unmodified), then flip the modification status
+      ;; back to "unchanged".
+      (when (and hash
+                 (equal hash (buffer-hash)))
+        (set-buffer-modified-p nil)))))
 
 (declare-function comment-search-forward "newcomment" (limit &optional noerror))
 (declare-function comment-string-strip "newcomment" (str beforep afterp))
index 730b55fbd8ffb192bad05fef9949e8d8a939a761..042b7d40edc198b76a2c1c6ff4847d7532bb1460 100644 (file)
@@ -88,11 +88,34 @@ downcased before comparing with these exceptions."
   :version "24.1")
 
 (defcustom flyspell-sort-corrections nil
-  "Non-nil means, sort the corrections alphabetically before popping them."
+  "If non-nil, sort the corrections before popping them.
+The sorting is controlled by the `flyspell-sort-corrections-function'
+variable, and defaults to sorting alphabetically."
   :group 'flyspell
   :version "21.1"
   :type 'boolean)
 
+(defcustom flyspell-sort-corrections-function
+  'flyspell-sort-corrections-alphabetically
+  "The function used to sort corrections.
+This only happens if `flyspell-sort-corrections' is non-nil.  The
+function takes three parameters -- the two correction candidates
+to be sorted, and the third parameter is the word that's being
+corrected."
+  :version "25.2"
+  :type 'function
+  :group 'flyspell)
+
+(defun flyspell-sort-corrections-alphabetically (corr1 corr2 _)
+  (string< corr1 corr2))
+
+(defun flyspell-sort (corrs word)
+  (if flyspell-sort-corrections
+      (sort corrs
+            (lambda (c1 c2)
+              (funcall flyspell-sort-corrections-function c1 c2 word)))
+    corrs))
+
 (defcustom flyspell-duplicate-distance 400000
   "The maximum distance for finding duplicates of unrecognized words.
 This applies to the feature that when a word is not found in the dictionary,
@@ -1007,9 +1030,7 @@ Mostly we check word delimiters."
 (defun flyspell-notify-misspell (word poss)
   (let ((replacements (if (stringp poss)
                          poss
-                       (if flyspell-sort-corrections
-                           (sort (car (cdr (cdr poss))) 'string<)
-                         (car (cdr (cdr poss)))))))
+                       (flyspell-sort (car (cdr (cdr poss))) word))))
     (if flyspell-issue-message-flag
        (message "misspelling `%s'  %S" word replacements))))
 
@@ -1979,9 +2000,8 @@ This command proposes various successive corrections for the current word."
                   (error "Ispell: error in Ispell process"))
                  (t
                   ;; The word is incorrect, we have to propose a replacement.
-                  (let ((replacements (if flyspell-sort-corrections
-                                          (sort (car (cdr (cdr poss))) 'string<)
-                                        (car (cdr (cdr poss))))))
+                  (let ((replacements (flyspell-sort (car (cdr (cdr poss)))
+                                                     word)))
                     (setq flyspell-auto-correct-region nil)
                     (if (consp replacements)
                         (progn
@@ -2229,9 +2249,7 @@ If OPOINT is non-nil, restore point there after adjusting it for replacement."
        (setq event (list (list (car (cdr mouse-pos))
                                (1+ (cdr (cdr mouse-pos))))
                          (car mouse-pos)))))
-  (let* ((corrects   (if flyspell-sort-corrections
-                        (sort (car (cdr (cdr poss))) 'string<)
-                      (car (cdr (cdr poss)))))
+  (let* ((corrects   (flyspell-sort (car (cdr (cdr poss))) word))
         (cor-menu   (if (consp corrects)
                         (mapcar (lambda (correct)
                                   (list correct correct))
@@ -2262,9 +2280,7 @@ If OPOINT is non-nil, restore point there after adjusting it for replacement."
 ;;*---------------------------------------------------------------------*/
 (defun flyspell-xemacs-popup (poss word cursor-location start end save)
   "The XEmacs popup menu."
-  (let* ((corrects   (if flyspell-sort-corrections
-                        (sort (car (cdr (cdr poss))) 'string<)
-                      (car (cdr (cdr poss)))))
+  (let* ((corrects   (flyspell-sort (car (cdr (cdr poss))) word))
         (cor-menu   (if (consp corrects)
                         (mapcar (lambda (correct)
                                   (vector correct
index 0cedf86bb7324acbbe3ff25f32278e50cd0f5911..284fea4acd59f7b69e84b44b5f7951dba26d3a5a 100644 (file)
@@ -1,4 +1,4 @@
-;;; ispell.el --- interface to International Ispell Versions 3.1 and 3.2
+;;; ispell.el --- interface to International Ispell Versions 3.1 and 3.2  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1994-1995, 1997-2016 Free Software Foundation, Inc.
 
@@ -46,9 +46,9 @@
 ;; your own dictionaries.
 
 ;;  Depending on the mail system you use, you may want to include these:
-;;  (add-hook 'news-inews-hook 'ispell-message)
-;;  (add-hook 'mail-send-hook  'ispell-message)
-;;  (add-hook 'mh-before-send-letter-hook 'ispell-message)
+;;  (add-hook 'news-inews-hook #'ispell-message)
+;;  (add-hook 'mail-send-hook  #'ispell-message)
+;;  (add-hook 'mh-before-send-letter-hook #'ispell-message)
 
 ;;   Ispell has a TeX parser and a nroff parser (the default).
 ;; The parsing is controlled by the variable ispell-parser.  Currently
 ;; Fixed bug in returning to nroff mode from tex mode.
 
 ;;; Compatibility code for XEmacs and (not too) older emacsen:
-
-(eval-and-compile ;; Protect against declare-function undefined in XEmacs
-  (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
-
-(declare-function ispell-check-minver "ispell" (v1 v2))
-(declare-function ispell-looking-back "ispell"
-                 (regexp &optional limit &rest ignored))
-
-(if (fboundp 'version<=)
-    (defalias 'ispell-check-minver 'version<=)
-  (defun ispell-check-minver (minver version)
-    "Check if string VERSION is at least string MINVER.
+(defalias 'ispell-check-minver
+  (if (fboundp 'version<=) 'version<=
+    (lambda (minver version)
+      "Check if string VERSION is at least string MINVER.
 Both must be in [0-9]+.[0-9]+... format.  This is a fallback
 compatibility function in case `version<=' is not available."
-    (let ((pending t)
-         (return t)
-         start-ver start-mver)
-      ;; Loop until an absolute greater or smaller condition is reached
-      ;; or until no elements are left in any of version and minver. In
-      ;; this case version is exactly the minimal, so return OK.
-      (while pending
-       (let (ver mver)
-         (if (string-match "[0-9]+" version start-ver)
-             (setq start-ver (match-end 0)
-                   ver (string-to-number (match-string 0 version))))
-         (if (string-match "[0-9]+" minver start-mver)
-             (setq start-mver (match-end 0)
-                   mver (string-to-number (match-string 0 minver))))
-
-         (if (or ver mver)
-             (progn
-               (or ver  (setq ver 0))
-               (or mver (setq mver 0))
-               ;; If none of below conditions match, this element is the
-               ;; same. Go checking next element.
-               (if (> ver mver)
-                   (setq pending nil)
-                 (if (< ver mver)
-                     (setq pending nil
-                           return nil))))
-           (setq pending nil))))
-      return)))
+      (let ((pending t)
+            (return t)
+            start-ver start-mver)
+        ;; Loop until an absolute greater or smaller condition is reached
+        ;; or until no elements are left in any of version and minver. In
+        ;; this case version is exactly the minimal, so return OK.
+        (while pending
+          (let (ver mver)
+            (if (string-match "[0-9]+" version start-ver)
+                (setq start-ver (match-end 0)
+                      ver (string-to-number (match-string 0 version))))
+            (if (string-match "[0-9]+" minver start-mver)
+                (setq start-mver (match-end 0)
+                      mver (string-to-number (match-string 0 minver))))
+
+            (if (or ver mver)
+                (progn
+                  (or ver  (setq ver 0))
+                  (or mver (setq mver 0))
+                  ;; If none of below conditions match, this element is the
+                  ;; same. Go checking next element.
+                  (if (> ver mver)
+                      (setq pending nil)
+                    (if (< ver mver)
+                        (setq pending nil
+                              return nil))))
+              (setq pending nil))))
+        return))))
 
 ;; XEmacs does not have looking-back
-(if (fboundp 'looking-back)
-    (defalias 'ispell-looking-back 'looking-back)
-  (defun ispell-looking-back (regexp &optional limit &rest ignored)
-    "Return non-nil if text before point matches regular expression REGEXP.
+(defalias 'ispell-looking-back
+  (if (fboundp 'looking-back) 'looking-back
+    (lambda (regexp &optional limit &rest ignored)
+      "Return non-nil if text before point matches regular expression REGEXP.
 Like `looking-at' except matches before point, and is slower.
 LIMIT if non-nil speeds up the search by specifying a minimum
 starting position, to avoid checking matches that would start
@@ -251,8 +243,8 @@ before LIMIT.
 
 This is a stripped down compatibility function for use when
 full featured `looking-back' function is missing."
-    (save-excursion
-      (re-search-backward (concat "\\(?:" regexp "\\)\\=") limit t))))
+      (save-excursion
+        (re-search-backward (concat "\\(?:" regexp "\\)\\=") limit t)))))
 
 ;;; XEmacs21 does not have `with-no-warnings'. Taken from org mode.
 (defmacro ispell-with-no-warnings (&rest body)
@@ -260,6 +252,8 @@ full featured `looking-back' function is missing."
 
 ;;; Code:
 
+(eval-when-compile (require 'cl-lib))
+
 (defvar mail-yank-prefix)
 
 (defgroup ispell nil
@@ -942,6 +936,8 @@ Otherwise returns the library directory name, if that is defined."
       (setq default-directory (expand-file-name "~/")))
     (apply 'call-process-region args)))
 
+(defvar ispell-debug-buffer)
+
 (defun ispell-create-debug-buffer (&optional append)
   "Create an ispell debug buffer for debugging output.
 If APPEND is non-nil, append the info to previous buffer if exists,
@@ -1182,15 +1178,15 @@ all uninitialized dicts using that affix file."
                (if (cadr (assoc tmp-dict ispell-dictionary-alist))
                    (ispell-print-if-debug
                      "ispell-hfde: %s already expanded; skipping.\n" tmp-dict)
-                 (add-to-list 'use-for-dicts tmp-dict))))))
+                 (cl-pushnew tmp-dict use-for-dicts :test #'equal))))))
       (ispell-print-if-debug
        "ispell-hfde: Filling %s entry.  Use for %s.\n" dict use-for-dicts)
       ;; The final loop.
       (dolist (entry ispell-dictionary-alist)
-       (if (member (car entry) use-for-dicts)
-           (add-to-list 'newlist
-                        (append (list (car entry)) dict-args-cdr))
-         (add-to-list 'newlist entry)))
+       (cl-pushnew (if (member (car entry) use-for-dicts)
+                        (cons (car entry) dict-args-cdr)
+                      entry)
+                    newlist :test #'equal))
       (setq ispell-dictionary-alist newlist))))
 
 (defun ispell-parse-hunspell-affix-file (dict-key)
@@ -1235,7 +1231,7 @@ did."
                        (chars-list (append otherchars-string nil)))
                   (setq chars-list (delq ?\  chars-list))
                   (dolist (ch chars-list)
-                    (add-to-list 'otherchars-list ch)))))
+                    (cl-pushnew ch otherchars-list :test #'equal)))))
           ;; Cons the argument for the -d switch.
           (setq dict-arg (concat dict-arg
                                  (if (> (length dict-arg) 0) ",")
@@ -1246,7 +1242,7 @@ did."
           "[[:alpha:]]"
           "[^[:alpha:]]"
           (if otherchars-list
-              (regexp-opt (mapcar 'char-to-string otherchars-list))
+              (regexp-opt (mapcar #'char-to-string otherchars-list))
             "")
           t                   ; many-otherchars-p: We can't tell, set to t.
           (list "-d" dict-arg)
@@ -1268,7 +1264,7 @@ in the list must have an affix file where Hunspell affix files are kept."
     (or (assoc first-dict ispell-local-dictionary-alist)
         (assoc first-dict ispell-dictionary-alist)
         (error "Unknown dictionary: %s" first-dict)))
-  (add-to-list 'ispell-dictionary-alist (list dict '()))
+  (cl-pushnew (list dict '()) ispell-dictionary-alist :test #'equal)
   (ispell-hunspell-fill-dictionary-entry dict))
 
 (defun ispell-find-hunspell-dictionaries ()
@@ -1308,8 +1304,8 @@ entries if a specific dictionary was found."
                (ispell-print-if-debug
                  "++ ispell-fhd: dict-entry:%s name:%s basename:%s affix-file:%s\n"
                  dict full-name basename affix-file)
-               (add-to-list 'ispell-hunspell-dict-paths-alist
-                            (list basename affix-file)))
+               (cl-pushnew (list basename affix-file)
+                            ispell-hunspell-dict-paths-alist :test #'equal))
            (ispell-print-if-debug
              "-- ispell-fhd: Skipping entry: %s\n" dict)))))
     ;; Remove entry from aliases alist if explicit dict was found.
@@ -1319,7 +1315,7 @@ entries if a specific dictionary was found."
            (ispell-print-if-debug
              "-- ispell-fhd: Excluding %s alias.  Standalone dict found.\n"
              (car dict))
-         (add-to-list 'newlist dict)))
+         (cl-pushnew dict newlist :test #'equal)))
       (setq ispell-dicts-name2locale-equivs-alist newlist))
     ;; Add known hunspell aliases
     (dolist (dict-equiv ispell-dicts-name2locale-equivs-alist)
@@ -1337,22 +1333,20 @@ entries if a specific dictionary was found."
                                            ispell-hunspell-dict-paths-alist))))
              (ispell-print-if-debug "++ ispell-fhd: Adding alias %s -> %s.\n"
                                      dict-equiv-key affix-file)
-             (add-to-list
-              'ispell-hunspell-dict-paths-alist
-              (list dict-equiv-key affix-file))))))
+             (cl-pushnew (list dict-equiv-key affix-file)
+                          ispell-hunspell-dict-paths-alist :test #'equal)))))
     ;; Parse and set values for default dictionary.
     (setq hunspell-default-dict (car hunspell-default-dict))
     (setq hunspell-default-dict-entry
          (ispell-parse-hunspell-affix-file hunspell-default-dict))
     ;; Create an alist of found dicts with only names, except for default dict.
     (setq ispell-hunspell-dictionary-alist
-         (list (append (list nil) (cdr hunspell-default-dict-entry))))
-    (dolist (dict (mapcar 'car ispell-hunspell-dict-paths-alist))
-      (if (string= dict hunspell-default-dict)
-         (add-to-list 'ispell-hunspell-dictionary-alist
-                      hunspell-default-dict-entry)
-       (add-to-list 'ispell-hunspell-dictionary-alist
-                    (list dict))))))
+         (list (cons nil (cdr hunspell-default-dict-entry))))
+    (dolist (dict (mapcar #'car ispell-hunspell-dict-paths-alist))
+      (cl-pushnew (if (string= dict hunspell-default-dict)
+                      hunspell-default-dict-entry
+                    (list dict))
+                  ispell-hunspell-dictionary-alist :test #'equal))))
 
 ;; Set params according to the selected spellchecker
 
@@ -1443,17 +1437,17 @@ aspell is used along with Emacs).")
                      (setq skip-dict t)))
 
                (unless skip-dict
-                 (add-to-list 'tmp-dicts-alist
-                              (list
-                               dict-name      ; dict name
-                               (nth 1 adict)  ; casechars
-                               (nth 2 adict)  ; not-casechars
-                               (nth 3 adict)  ; otherchars
-                               (nth 4 adict)  ; many-otherchars-p
-                               ispell-args    ; ispell-args
-                               (nth 6 adict)  ; extended-character-mode
-                               (nth 7 adict)  ; dict encoding
-                               ))))
+                 (cl-pushnew (list
+                               dict-name      ; dict name
+                               (nth 1 adict)  ; casechars
+                               (nth 2 adict)  ; not-casechars
+                               (nth 3 adict)  ; otherchars
+                               (nth 4 adict)  ; many-otherchars-p
+                               ispell-args    ; ispell-args
+                               (nth 6 adict)  ; extended-character-mode
+                               (nth 7 adict)  ; dict encoding
+                               )
+                              tmp-dicts-alist :test #'equal)))
              (setq ispell-dictionary-base-alist tmp-dicts-alist))))
 
       (run-hooks 'ispell-initialize-spellchecker-hook)
@@ -1463,7 +1457,7 @@ aspell is used along with Emacs).")
                            ispell-base-dicts-override-alist
                            ispell-dictionary-base-alist))
        (unless (assoc (car dict) all-dicts-alist)
-         (add-to-list 'all-dicts-alist dict)))
+         (push dict all-dicts-alist)))
       (setq ispell-dictionary-alist all-dicts-alist))
 
     ;; If Emacs flavor supports [:alpha:] use it for global dicts.  If
@@ -1473,20 +1467,20 @@ aspell is used along with Emacs).")
     (if ispell-emacs-alpha-regexp
        (let (tmp-dicts-alist)
          (dolist (adict ispell-dictionary-alist)
-           (if (cadr adict) ;; Do not touch hunspell uninitialized entries
-               (add-to-list 'tmp-dicts-alist
-                            (list
-                             (nth 0 adict)  ; dict name
-                             "[[:alpha:]]"  ; casechars
-                             "[^[:alpha:]]" ; not-casechars
-                             (nth 3 adict)  ; otherchars
-                             (nth 4 adict)  ; many-otherchars-p
-                             (nth 5 adict)  ; ispell-args
-                             (nth 6 adict)  ; extended-character-mode
-                             (if ispell-encoding8-command
-                                 'utf-8
-                               (nth 7 adict))))
-             (add-to-list 'tmp-dicts-alist adict)))
+           (cl-pushnew (if (cadr adict) ;; Do not touch hunspell uninitialized entries
+                            (list
+                             (nth 0 adict)   ; dict name
+                             "[[:alpha:]]"   ; casechars
+                             "[^[:alpha:]]"  ; not-casechars
+                             (nth 3 adict)   ; otherchars
+                             (nth 4 adict)   ; many-otherchars-p
+                             (nth 5 adict)   ; ispell-args
+                             (nth 6 adict)   ; extended-character-mode
+                             (if ispell-encoding8-command
+                                 'utf-8
+                               (nth 7 adict)))
+                          adict)
+                        tmp-dicts-alist :test #'equal))
          (setq ispell-dictionary-alist tmp-dicts-alist)))))
 
 (defun ispell-valid-dictionary-list ()
@@ -1875,6 +1869,7 @@ Valid forms include:
      ("\\\\add\\(tocontents\\|vspace\\)" ispell-tex-arg-end)
      ("\\\\\\([aA]lph\\|arabic\\)"      ispell-tex-arg-end)
      ;;("\\\\author"                    ispell-tex-arg-end)
+     ("\\\\cref"                        ispell-tex-arg-end)
      ("\\\\bibliographystyle"           ispell-tex-arg-end)
      ("\\\\makebox"                     ispell-tex-arg-end 0)
      ("\\\\e?psfig"                     ispell-tex-arg-end)
@@ -2427,7 +2422,8 @@ Global `ispell-quit' set to start location to continue spell session."
                    nil)
                   ((or (= char ?a) (= char ?A)) ; accept word without insert
                    (ispell-send-string (concat "@" word "\n"))
-                   (add-to-list 'ispell-buffer-session-localwords word)
+                   (cl-pushnew word ispell-buffer-session-localwords
+                                :test #'equal)
                    (and (fboundp 'flyspell-unhighlight-at)
                         (flyspell-unhighlight-at start))
                    (or ispell-buffer-local-name ; session localwords might conflict
@@ -2760,7 +2756,7 @@ if defined."
 ;;   This is the case when a process dies or fails. The default behavior
 ;;   in this case treats the next input received as fresh input.
 
-(defun ispell-filter (process output)
+(defun ispell-filter (_process output)
   "Output filter function for ispell, grep, and look."
   (let ((start 0)
        (continue t)
@@ -3040,14 +3036,13 @@ Keeps argument list for future Ispell invocations for no async support."
       (ispell-send-string "\032\n")    ; so Ispell prints version and exits
       t)))
 
-
 (defun ispell-init-process ()
   "Check status of Ispell process and start if necessary."
   (let* (;; Basename of dictionary used by the spell-checker
         (dict-bname (or (car (cdr (member "-d" (ispell-get-ispell-args))))
                         ispell-current-dictionary))
         ;; The directory where process was started.
-        (current-ispell-directory default-directory)
+        (current-ispell-directory default-directory) ;FIXME: Unused?
         ;; The default directory for the process.
         ;; Use "~/" as default-directory unless using Ispell with per-dir
         ;; personal dictionaries and not in a minibuffer under XEmacs
@@ -3150,7 +3145,7 @@ Keeps argument list for future Ispell invocations for no async support."
             ;; Otherwise we get cool errors like "Can't open ".
             (sleep-for 1)
             (ispell-accept-output 3)
-            (error "%s" (mapconcat 'identity ispell-filter "\n"))))
+            (error "%s" (mapconcat #'identity ispell-filter "\n"))))
       (setq ispell-filter nil)         ; Discard version ID line
       (let ((extended-char-mode (ispell-get-extended-character-mode)))
        (if extended-char-mode          ; ~ extended character mode
@@ -3206,7 +3201,7 @@ By just answering RET you can find out what the current dictionary is."
    (list (completing-read
          "Use new dictionary (RET for current, SPC to complete): "
          (and (fboundp 'ispell-valid-dictionary-list)
-              (mapcar 'list (ispell-valid-dictionary-list)))
+              (mapcar #'list (ispell-valid-dictionary-list)))
          nil t)
         current-prefix-arg))
   (ispell-set-spellchecker-params) ; Initialize variables and dicts alists
@@ -3412,7 +3407,7 @@ ispell-region: Search for first region to skip after (ispell-begin-skip-region-r
 Includes `ispell-skip-region-alist' plus tex, tib, html, and comment keys.
 Must be called after `ispell-buffer-local-parsing' due to dependence on mode."
   (mapconcat
-   'identity
+   #'identity
    (delq nil
          (list
           ;; messages
@@ -3869,7 +3864,7 @@ Standard ispell choices are then available."
           (setq case-fold-search nil)  ; Try and respect case of word.
           (cond
            ((string-equal (upcase word) word)
-            (setq possibilities (mapcar 'upcase possibilities)))
+            (setq possibilities (mapcar #'upcase possibilities)))
            ((eq (upcase (aref word 0)) (aref word 0))
              (setq possibilities (mapcar (function
                                           (lambda (pos)
@@ -4103,10 +4098,10 @@ The `X' command aborts sending the message so that you can edit the buffer.
 
 To spell-check whenever a message is sent, include the appropriate lines
 in your init file:
-   (add-hook \\='message-send-hook \\='ispell-message)  ;; GNUS 5
-   (add-hook \\='news-inews-hook \\='ispell-message)    ;; GNUS 4
-   (add-hook \\='mail-send-hook  \\='ispell-message)
-   (add-hook \\='mh-before-send-letter-hook \\='ispell-message)
+   (add-hook \\='message-send-hook #\\='ispell-message)  ;; GNUS 5
+   (add-hook \\='news-inews-hook #\\='ispell-message)    ;; GNUS 4
+   (add-hook \\='mail-send-hook  #\\='ispell-message)
+   (add-hook \\='mh-before-send-letter-hook #\\='ispell-message)
 
 You can bind this to the key C-c i in GNUS or mail by adding to
 `news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
@@ -4428,6 +4423,7 @@ Both should not be used to define a buffer-local dictionary."
                          (insert comment-end)))))
              (insert (concat " " word))))))))
 
+;;FIXME: Use `user-error' instead!
 (add-to-list 'debug-ignored-errors "^No word found to check!$")
 
 (provide 'ispell)
index c3f39ecd327fe351e156a5e2af833ad398a69274..505df5d34243583a7047a73630d880cd9ab8a8f2 100644 (file)
@@ -237,5 +237,5 @@ of ENTRY-LIST is a list of cons cells (\"MACRONAME\" . LEVEL).  See
 ;;; reftex-auc.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 0a3e7a4835696fd88a07ab504eedd0ae1c88d2f6..b5b7d466e9c8a1ac33f3ef83664adced77efe891 100644 (file)
@@ -1262,5 +1262,5 @@ created files in the variables `reftex-create-bibtex-header' or
 ;;; reftex-cite.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 9d4ee086db11f4850d7d1f56130fd4ee955cb83f..f1d4d6fcba867fa5207a57855215a96f6324d163 100644 (file)
@@ -488,5 +488,5 @@ Calling this function several times find successive citation locations."
 ;;; reftex-dcr.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 7f27158d25719a9aac185d0087b27fd5f5cbf9ad..d2500510443dd98b200dae01938ee93e3814df37 100644 (file)
@@ -477,5 +477,5 @@ With no argument, this command toggles
 ;;; reftex-global.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index c5c3885b16785556dd657f604738d8702ab815cd..0ed6f26699a512b6e05162d6d448012c3dad31f3 100644 (file)
@@ -2119,5 +2119,5 @@ Does not do a save-excursion."
 ;;; reftex-index.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 5f969f4effdfdaf014814b50c7af4aaf779385c1..1d6fa311d5f67aa4bab6ac9125744634c7312012 100644 (file)
@@ -1131,5 +1131,5 @@ When LEVEL is non-nil, increase section numbers on that level."
 ;;; reftex-parse.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 32703591cada342d2897789681dbbc226ac4773f..f5a784bf63d0ae8160f6904fdd6a9a842df41fa4 100644 (file)
@@ -881,5 +881,5 @@ Optional prefix argument OTHER-WINDOW goes to the label in another window."
 ;;; reftex-ref.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index f46c2370d716c8fc0b2bb3d432657c59a56e07fe..02caa67e9a8ac20556f70e0665841f08fb094e4f 100644 (file)
@@ -745,5 +745,5 @@ Cycle in reverse order if optional argument REVERSE is non-nil."
 ;;; reftex-sel.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index e96e822fd0f9ec2b455c6bb571eb62ef603b090f..915acc8382d6e0434540ec4ec87e9b8c7ad5820a 100644 (file)
@@ -1111,5 +1111,5 @@ always show the current section in connection with the option
 ;;; reftex-toc.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index ae9db7de10a0eb65d02706b4294deff00b4c1106..a488ab14b1098a19163c8204fe406b7ffd75dc5f 100644 (file)
@@ -70,7 +70,8 @@
 (require 'reftex-vars)
 
 
-;;; Autoloads - see end for automatic autoloads
+;;; Autoloads to ensure loading of support files when necessary
+(require 'reftex-loaddefs)
 
 ;; We autoload tons of functions from these files, but some have
 ;; a single function that needs to be globally autoloaded.
@@ -2394,702 +2395,6 @@ Your bug report will be posted to the AUCTeX bug reporting list.
 
 (setq reftex-tables-dirty t)  ; in case this file is evaluated by hand
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "reftex-auc" "reftex-auc.el" "32dc44348a7eaf247f63c81b3ead2ba4")
-;;; Generated autoloads from reftex-auc.el
-
-(autoload 'reftex-arg-label "reftex-auc" "\
-Use `reftex-label', `reftex-reference' or AUCTeX's code to insert label arg.
-What is being used depends upon `reftex-plug-into-AUCTeX'.
-
-\(fn OPTIONAL &optional PROMPT DEFINITION)" nil nil)
-
-(autoload 'reftex-arg-cite "reftex-auc" "\
-Use `reftex-citation' or AUCTeX's code to insert a cite-key macro argument.
-What is being used depends upon `reftex-plug-into-AUCTeX'.
-
-\(fn OPTIONAL &optional PROMPT DEFINITION)" nil nil)
-
-(autoload 'reftex-arg-index-tag "reftex-auc" "\
-Prompt for an index tag with completion.
-This is the name of an index, not the entry.
-
-\(fn OPTIONAL &optional PROMPT &rest ARGS)" nil nil)
-
-(autoload 'reftex-arg-index "reftex-auc" "\
-Prompt for an index entry completing with known entries.
-Completion is specific for just one index, if the macro or a tag
-argument identify one of multiple indices.
-
-\(fn OPTIONAL &optional PROMPT &rest ARGS)" nil nil)
-
-(autoload 'reftex-plug-into-AUCTeX "reftex-auc" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-toggle-plug-into-AUCTeX "reftex-auc" "\
-Toggle Interface between AUCTeX and RefTeX on and off.
-
-\(fn)" t nil)
-
-(autoload 'reftex-add-label-environments "reftex-auc" "\
-Add label environment descriptions to `reftex-label-alist-style'.
-The format of ENTRY-LIST is exactly like `reftex-label-alist'.  See there
-for details.
-This function makes it possible to support RefTeX from AUCTeX style files.
-The entries in ENTRY-LIST will be processed after the user settings in
-`reftex-label-alist', and before the defaults (specified in
-`reftex-default-label-alist-entries').  Any changes made to
-`reftex-label-alist-style' will raise a flag to the effect that
-the label information is recompiled on next use.
-
-\(fn ENTRY-LIST)" nil nil)
-
-(defalias 'reftex-add-to-label-alist 'reftex-add-label-environments)
-
-(autoload 'reftex-add-section-levels "reftex-auc" "\
-Add entries to the value of `reftex-section-levels'.
-The added values are kept local to the current document.  The format
-of ENTRY-LIST is a list of cons cells (\"MACRONAME\" . LEVEL).  See
-`reftex-section-levels' for an example.
-
-\(fn ENTRY-LIST)" nil nil)
-
-(autoload 'reftex-notice-new-section "reftex-auc" "\
-
-
-\(fn)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-cite" "reftex-cite.el" "7ee48dcf194ffd3cce3b7a2eb990e300")
-;;; Generated autoloads from reftex-cite.el
-
-(autoload 'reftex-default-bibliography "reftex-cite" "\
-Return the expanded value of variable `reftex-default-bibliography'.
-The expanded value is cached.
-
-\(fn)" nil nil)
-
-(autoload 'reftex-bib-or-thebib "reftex-cite" "\
-Test if BibTeX or \begin{thebibliography} should be used for the citation.
-Find the bof of the current file
-
-\(fn)" nil nil)
-
-(autoload 'reftex-get-bibfile-list "reftex-cite" "\
-Return list of bibfiles for current document.
-When using the chapterbib or bibunits package you should either
-use the same database files everywhere, or separate parts using
-different databases into different files (included into the mater file).
-Then this function will return the applicable database files.
-
-\(fn)" nil nil)
-
-(autoload 'reftex-pop-to-bibtex-entry "reftex-cite" "\
-Find BibTeX KEY in any file in FILE-LIST in another window.
-If MARK-TO-KILL is non-nil, mark new buffer to kill.
-If HIGHLIGHT is non-nil, highlight the match.
-If ITEM in non-nil, search for bibitem instead of database entry.
-If RETURN is non-nil, just return the entry and restore point.
-
-\(fn KEY FILE-LIST &optional MARK-TO-KILL HIGHLIGHT ITEM RETURN)" nil nil)
-
-(autoload 'reftex-end-of-bib-entry "reftex-cite" "\
-
-
-\(fn ITEM)" nil nil)
-
-(autoload 'reftex-parse-bibtex-entry "reftex-cite" "\
-Parse BibTeX ENTRY.
-If ENTRY is nil then parse the entry in current buffer between FROM and TO.
-If RAW is non-nil, keep double quotes/curly braces delimiting fields.
-
-\(fn ENTRY &optional FROM TO RAW)" nil nil)
-
-(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
-matching entries for selection.  The selected entry is formatted according
-to `reftex-cite-format' and inserted into the buffer.
-
-If NO-INSERT is non-nil, nothing is inserted, only the selected key returned.
-
-FORMAT-KEY can be used to pre-select a citation format.
-
-When called with a `C-u' prefix, prompt for optional arguments in
-cite macros.  When called with a numeric prefix, make that many
-citations.  When called with point inside the braces of a `\\cite'
-command, it will add another key, ignoring the value of
-`reftex-cite-format'.
-
-The regular expression uses an expanded syntax: && is interpreted as `and'.
-Thus, `aaaa&&bbb' matches entries which contain both `aaaa' and `bbb'.
-While entering the regexp, completion on knows citation keys is possible.
-`=' is a good regular expression to match all entries in all files.
-
-\(fn &optional NO-INSERT FORMAT-KEY)" t nil)
-
-(autoload 'reftex-citep "reftex-cite" "\
-Call `reftex-citation' with a format selector `?p'.
-
-\(fn)" t nil)
-
-(autoload 'reftex-citet "reftex-cite" "\
-Call `reftex-citation' with a format selector `?t'.
-
-\(fn)" t nil)
-
-(autoload 'reftex-make-cite-echo-string "reftex-cite" "\
-Format a bibtex ENTRY for the echo area and cache the result.
-
-\(fn ENTRY DOCSTRUCT-SYMBOL)" nil nil)
-
-(autoload 'reftex-create-bibtex-file "reftex-cite" "\
-Create a new BibTeX database BIBFILE with all entries referenced in document.
-The command prompts for a filename and writes the collected
-entries to that file.  Only entries referenced in the current
-document with any \\cite-like macros are used.  The sequence in
-the new file is the same as it was in the old database.
-
-Entries referenced from other entries must appear after all
-referencing entries.
-
-You can define strings to be used as header or footer for the
-created files in the variables `reftex-create-bibtex-header' or
-`reftex-create-bibtex-footer' respectively.
-
-\(fn BIBFILE)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-dcr" "reftex-dcr.el" "8a1cb9d9c9190eefd4e22ab89d278e03")
-;;; Generated autoloads from reftex-dcr.el
-
-(autoload 'reftex-view-crossref "reftex-dcr" "\
-View cross reference of macro at point.  Point must be on the KEY
-argument.  When at a `\\ref' macro, show corresponding `\\label'
-definition, also in external documents (`xr').  When on a label, show
-a locations where KEY is referenced.  Subsequent calls find additional
-locations.  When on a `\\cite', show the associated `\\bibitem' macro or
-the BibTeX database entry.  When on a `\\bibitem', show a `\\cite' macro
-which uses this KEY. When on an `\\index', show other locations marked
-by the same index entry.
-To define additional cross referencing items, use the option
-`reftex-view-crossref-extra'.  See also `reftex-view-crossref-from-bibtex'.
-With one or two C-u prefixes, enforce rescanning of the document.
-With argument 2, select the window showing the cross reference.
-AUTO-HOW is only for the automatic crossref display and is handed through
-to the functions `reftex-view-cr-cite' and `reftex-view-cr-ref'.
-
-\(fn &optional ARG AUTO-HOW FAIL-QUIETLY)" t nil)
-
-(autoload 'reftex-mouse-view-crossref "reftex-dcr" "\
-View cross reference of \\ref or \\cite macro where you click.
-If the macro at point is a \\ref, show the corresponding label definition.
-If it is a \\cite, show the BibTeX database entry.
-If there is no such macro at point, search forward to find one.
-With argument, actually select the window showing the cross reference.
-
-\(fn EV)" t nil)
-
-(autoload 'reftex-toggle-auto-view-crossref "reftex-dcr" "\
-Toggle the automatic display of crossref information in the echo area.
-When active, leaving point idle in the argument of a \\ref or \\cite macro
-will display info in the echo area.
-
-\(fn)" t nil)
-
-(autoload 'reftex-view-crossref-from-bibtex "reftex-dcr" "\
-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
-prompts upon first use for a buffer in RefTeX mode.  To reset this
-link to a document, call the function with a prefix arg.
-Calling this function several times find successive citation locations.
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-global" "reftex-global.el" "a7a6a1872e4509da5b211972c2a588ad")
-;;; Generated autoloads from reftex-global.el
-
-(autoload 'reftex-create-tags-file "reftex-global" "\
-Create TAGS file by running `etags' on the current document.
-The TAGS file is also immediately visited with `visit-tags-table'.
-
-\(fn)" t nil)
-
-(autoload 'reftex-grep-document "reftex-global" "\
-Run grep query through all files related to this document.
-With prefix arg, force to rescan document.
-No active TAGS table is required.
-
-\(fn GREP-CMD)" t nil)
-
-(autoload 'reftex-search-document "reftex-global" "\
-Regexp search through all files of the current document.
-Starts always in the master file.  Stops when a match is found.
-To continue searching for next match, use command \\[tags-loop-continue].
-No active TAGS table is required.
-
-\(fn &optional REGEXP)" t nil)
-
-(autoload 'reftex-query-replace-document "reftex-global" "\
-Do `query-replace-regexp' of FROM with TO over the entire document.
-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
-with the command \\[tags-loop-continue].
-No active TAGS table is required.
-
-\(fn &optional FROM TO DELIMITED)" t nil)
-
-(autoload 'reftex-find-duplicate-labels "reftex-global" "\
-Produce a list of all duplicate labels in the document.
-
-\(fn)" t nil)
-
-(autoload 'reftex-change-label "reftex-global" "\
-Run `query-replace-regexp' of FROM with TO in all macro arguments.
-Works on the entire multifile document.
-If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue].
-No active TAGS table is required.
-
-\(fn &optional FROM TO)" t nil)
-
-(autoload 'reftex-renumber-simple-labels "reftex-global" "\
-Renumber all simple labels in the document to make them sequentially.
-Simple labels are the ones created by RefTeX, consisting only of the
-prefix and a number.  After the command completes, all these labels will
-have sequential numbers throughout the document.  Any references to
-the labels will be changed as well.  For this, RefTeX looks at the
-arguments of any macros which either start or end in the string `ref'.
-This command should be used with care, in particular in multifile
-documents.  You should not use it if another document refers to this
-one with the `xr' package.
-
-\(fn)" t nil)
-
-(autoload 'reftex-save-all-document-buffers "reftex-global" "\
-Save all documents associated with the current document.
-The function is useful after a global action like replacing or renumbering
-labels.
-
-\(fn)" t nil)
-
-(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 if ARG is positive, otherwise turn it off.
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-index" "reftex-index.el" "0e0eef2a199fb9de6f13b5eef601843f")
-;;; Generated autoloads from reftex-index.el
-
-(autoload 'reftex-index-selection-or-word "reftex-index" "\
-Put selection or the word near point into the default index macro.
-This uses the information in `reftex-index-default-macro' to make an index
-entry.  The phrase indexed is the current selection or the word near point.
-When called with one `C-u' prefix, let the user have a chance to edit the
-index entry.  When called with 2 `C-u' as prefix, also ask for the index
-macro and other stuff.
-When called inside TeX math mode as determined by the `texmathp.el' library
-which is part of AUCTeX, the string is first processed with the
-`reftex-index-math-format', which see.
-
-\(fn &optional ARG PHRASE)" t nil)
-
-(autoload 'reftex-index "reftex-index" "\
-Query for an index macro and insert it along with its arguments.
-The index macros available are those defined in `reftex-index-macro' or
-by a call to `reftex-add-index-macros', typically from an AUCTeX style file.
-RefteX provides completion for the index tag and the index key, and
-will prompt for other arguments.
-
-\(fn &optional CHAR KEY TAG SEL NO-INSERT)" t nil)
-
-(autoload 'reftex-index-complete-tag "reftex-index" "\
-
-
-\(fn &optional ITAG OPT-ARGS)" nil nil)
-
-(autoload 'reftex-index-select-tag "reftex-index" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-index-complete-key "reftex-index" "\
-
-
-\(fn &optional TAG OPTIONAL INITIAL)" nil nil)
-
-(autoload 'reftex-index-show-entry "reftex-index" "\
-
-
-\(fn DATA &optional NO-REVISIT)" nil nil)
-
-(autoload 'reftex-display-index "reftex-index" "\
-Display a buffer with an index compiled from the current document.
-When the document has multiple indices, first prompts for the correct one.
-When index support is turned off, offer to turn it on.
-With one or two `C-u' prefixes, rescan document first.
-With prefix 2, restrict index to current document section.
-With prefix 3, restrict index to region.
-
-\(fn &optional TAG OVERRIDING-RESTRICTION REDO &rest LOCATIONS)" t nil)
-
-(autoload 'reftex-index-phrase-selection-or-word "reftex-index" "\
-Add current selection or word at point to the phrases buffer.
-When you are in transient-mark-mode and the region is active, the
-selection will be used - otherwise the word at point.
-You get a chance to edit the entry in the phrases buffer - finish with
-`C-c C-c'.
-
-\(fn ARG)" t nil)
-
-(autoload 'reftex-index-visit-phrases-buffer "reftex-index" "\
-Switch to the phrases buffer, initialize if empty.
-
-\(fn)" t nil)
-
-(autoload 'reftex-index-phrases-mode "reftex-index" "\
-Major mode for managing the Index phrases of a LaTeX document.
-This buffer was created with RefTeX.
-
-To insert new phrases, use
- - `C-c \\' in the LaTeX document to copy selection or word
- - `\\[reftex-index-new-phrase]' in the phrases buffer.
-
-To index phrases use one of:
-
-\\[reftex-index-this-phrase]     index current phrase
-\\[reftex-index-next-phrase]     index next phrase (or N with prefix arg)
-\\[reftex-index-all-phrases]     index all phrases
-\\[reftex-index-remaining-phrases]     index current and following phrases
-\\[reftex-index-region-phrases]     index the phrases in the region
-
-You can sort the phrases in this buffer with \\[reftex-index-sort-phrases].
-To display information about the phrase at point, use \\[reftex-index-phrases-info].
-
-For more information see the RefTeX User Manual.
-
-Here are all local bindings.
-
-\\{reftex-index-phrases-mode-map}
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-parse" "reftex-parse.el" "9015d91c86a135c850f92b828eca6b62")
-;;; Generated autoloads from reftex-parse.el
-
-(autoload 'reftex-parse-one "reftex-parse" "\
-Re-parse this file.
-
-\(fn)" t nil)
-
-(autoload 'reftex-parse-all "reftex-parse" "\
-Re-parse entire document.
-
-\(fn)" t nil)
-
-(autoload 'reftex-do-parse "reftex-parse" "\
-Do a document rescan.
-When allowed, do only a partial scan from FILE.
-
-\(fn RESCAN &optional FILE)" nil nil)
-
-(autoload 'reftex-everything-regexp "reftex-parse" "\
-
-
-\(fn)" nil nil)
-
-(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.
-
-\(fn &optional RELATIVE)" nil nil)
-
-(autoload 'reftex-locate-bibliography-files "reftex-parse" "\
-Scan buffer for bibliography macros and return file list.
-
-\(fn MASTER-DIR &optional FILES)" nil nil)
-
-(autoload 'reftex-section-info "reftex-parse" "\
-Return a section entry for the current match.
-Careful: This function expects the match-data to be still in place!
-
-\(fn FILE)" nil nil)
-
-(autoload 'reftex-ensure-index-support "reftex-parse" "\
-When index support is turned off, ask to turn it on and
-set the current prefix argument so that `reftex-access-scan-info'
-will rescan the entire document.
-
-\(fn &optional ABORT)" nil nil)
-
-(autoload 'reftex-index-info-safe "reftex-parse" "\
-
-
-\(fn FILE)" nil nil)
-
-(autoload 'reftex-index-info "reftex-parse" "\
-Return an index entry for the current match.
-Careful: This function expects the match-data to be still in place!
-
-\(fn FILE)" nil nil)
-
-(autoload 'reftex-short-context "reftex-parse" "\
-Get about one line of useful context for the label definition at point.
-
-\(fn ENV PARSE &optional BOUND DERIVE)" nil nil)
-
-(autoload 'reftex-where-am-I "reftex-parse" "\
-Return the docstruct entry above point.
-Actually returns a cons cell in which the cdr is a flag indicating
-if the information is exact (t) or approximate (nil).
-
-\(fn)" nil nil)
-
-(autoload 'reftex-notice-new "reftex-parse" "\
-Hook to handshake with RefTeX after something new has been inserted.
-
-\(fn &optional N FORCE)" nil nil)
-
-(autoload 'reftex-what-macro-safe "reftex-parse" "\
-Call `reftex-what-macro' with special syntax table.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-what-macro "reftex-parse" "\
-Find out if point is within the arguments of any TeX-macro.
-The return value is either (\"\\macro\" . (point)) or a list of them.
-
-If WHICH is nil, immediately return nil.
-If WHICH is 1, return innermost enclosing macro.
-If WHICH is t, return list of all macros enclosing point.
-If WHICH is a list of macros, look only for those macros and return the
-  name of the first macro in this list found to enclose point.
-If the optional BOUND is an integer, bound backwards directed
-  searches to this point.  If it is nil, limit to nearest \\section -
-  like statement.
-
-This function is pretty stable, but can be fooled if the text contains
-things like \\macro{aa}{bb} where \\macro is defined to take only one
-argument.  As RefTeX cannot know this, the string \"bb\" would still be
-considered an argument of macro \\macro.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-what-environment "reftex-parse" "\
-Find out if point is inside a LaTeX environment.
-The return value is (e.g.) either (\"equation\" . (point)) or a list of
-them.
-
-If WHICH is nil, immediately return nil.
-If WHICH is 1, return innermost enclosing environment.
-If WHICH is t, return list of all environments enclosing point.
-If WHICH is a list of environments, look only for those environments and
-  return the name of the first environment in this list found to enclose
-  point.
-
-If the optional BOUND is an integer, bound backwards directed searches to
-this point.  If it is nil, limit to nearest \\section - like statement.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-what-special-env "reftex-parse" "\
-Run the special environment parsers and return the matches.
-
-The return value is (e.g.) either (\"my-parser-function\" . (point))
-or a list of them.
-
-If WHICH is nil, immediately return nil.
-If WHICH is 1, return innermost enclosing environment.
-If WHICH is t, return list of all environments enclosing point.
-If WHICH is a list of environments, look only for those environments and
-  return the name of the first environment in this list found to enclose
-  point.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-nth-arg "reftex-parse" "\
-Return the Nth following {} or [] parentheses content.
-OPT-ARGS is a list of argument numbers which are optional.
-
-\(fn N &optional OPT-ARGS)" nil nil)
-
-(autoload 'reftex-move-over-touching-args "reftex-parse" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-init-section-numbers "reftex-parse" "\
-Initialize the section numbers with zeros or with what is found in the TOC-ENTRY.
-
-\(fn &optional TOC-ENTRY APPENDIX)" nil nil)
-
-(autoload 'reftex-section-number "reftex-parse" "\
-Return a string with the current section number.
-When LEVEL is non-nil, increase section numbers on that level.
-
-\(fn &optional LEVEL STAR)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-ref" "reftex-ref.el" "b2ce366d12050904d89cc38b96b8058a")
-;;; Generated autoloads from reftex-ref.el
-
-(autoload 'reftex-label-location "reftex-ref" "\
-Return the environment or macro which determines the label type at point.
-If optional BOUND is an integer, limit backward searches to that point.
-
-\(fn &optional BOUND)" nil nil)
-
-(autoload 'reftex-label-info-update "reftex-ref" "\
-
-
-\(fn CELL)" nil nil)
-
-(autoload 'reftex-label-info "reftex-ref" "\
-
-
-\(fn LABEL &optional FILE BOUND DERIVE ENV-OR-MAC)" nil nil)
-
-(autoload 'reftex-label "reftex-ref" "\
-Insert a unique label.  Return the label.
-If ENVIRONMENT is given, don't bother to find out yourself.
-If NO-INSERT is non-nil, do not insert label into buffer.
-With prefix arg, force to rescan document first.
-When you are prompted to enter or confirm a label, and you reply with
-just the prefix or an empty string, no label at all will be inserted.
-A new label is also recorded into the label list.
-This function is controlled by the settings of reftex-insert-label-flags.
-
-\(fn &optional ENVIRONMENT NO-INSERT)" t nil)
-
-(autoload 'reftex-reference "reftex-ref" "\
-Make a LaTeX reference.  Look only for labels of a certain TYPE.
-With prefix arg, force to rescan buffer for labels.  This should only be
-necessary if you have recently entered labels yourself without using
-reftex-label.  Rescanning of the buffer can also be requested from the
-label selection menu.
-The function returns the selected label or nil.
-If NO-INSERT is non-nil, do not insert \\ref command, just return label.
-When called with 2 C-u prefix args, disable magic word recognition.
-
-\(fn &optional TYPE NO-INSERT CUT)" t nil)
-
-(autoload 'reftex-query-label-type "reftex-ref" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-show-label-location "reftex-ref" "\
-
-
-\(fn DATA FORWARD NO-REVISIT &optional STAY ERROR)" nil nil)
-
-(autoload 'reftex-goto-label "reftex-ref" "\
-Prompt for a label (with completion) and jump to the location of this label.
-Optional prefix argument OTHER-WINDOW goes to the label in another window.
-
-\(fn &optional OTHER-WINDOW)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-sel" "reftex-sel.el" "b5e68431056b461d8a0562e9e685a5f1")
-;;; Generated autoloads from reftex-sel.el
-
-(autoload 'reftex-select-label-mode "reftex-sel" "\
-Major mode for selecting a label in a LaTeX document.
-This buffer was created with RefTeX.
-It only has a meaningful keymap when you are in the middle of a
-selection process.
-To select a label, move the cursor to it and press RET.
-Press `?' for a summary of important key bindings.
-
-During a selection process, these are the local bindings.
-
-\\{reftex-select-label-mode-map}
-
-\(fn)" t nil)
-
-(autoload 'reftex-select-bib-mode "reftex-sel" "\
-Major mode for selecting a citation key in a LaTeX document.
-This buffer was created with RefTeX.
-It only has a meaningful keymap when you are in the middle of a
-selection process.
-In order to select a citation, move the cursor to it and press RET.
-Press `?' for a summary of important key bindings.
-
-During a selection process, these are the local bindings.
-
-\\{reftex-select-label-mode-map}
-
-\(fn)" t nil)
-
-(autoload 'reftex-get-offset "reftex-sel" "\
-
-
-\(fn BUF HERE-AM-I &optional TYPEKEY TOC INDEX FILE)" nil nil)
-
-(autoload 'reftex-insert-docstruct "reftex-sel" "\
-
-
-\(fn BUF TOC LABELS INDEX-ENTRIES FILES CONTEXT COUNTER SHOW-COMMENTED HERE-I-AM XR-PREFIX TOC-BUFFER)" nil nil)
-
-(autoload 'reftex-find-start-point "reftex-sel" "\
-
-
-\(fn FALLBACK &rest LOCATIONS)" nil nil)
-
-(autoload 'reftex-select-item "reftex-sel" "\
-
-
-\(fn REFTEX-SELECT-PROMPT HELP-STRING KEYMAP &optional OFFSET CALL-BACK CB-FLAG)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-toc" "reftex-toc.el" "af8f426ef3a0607322ca4c9742e177a8")
-;;; Generated autoloads from reftex-toc.el
-
-(autoload 'reftex-toc "reftex-toc" "\
-Show the table of contents for the current document.
-When called with a raw C-u prefix, rescan the document first.
-
-\(fn &optional REBUILD REUSE)" t nil)
-
-(autoload 'reftex-toc-recenter "reftex-toc" "\
-Display the TOC window and highlight line corresponding to current position.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'reftex-toggle-auto-toc-recenter "reftex-toc" "\
-Toggle the automatic recentering of the TOC window.
-When active, leaving point idle will make the TOC window jump to the correct
-section.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
 (provide 'reftex)
 
 ;;; reftex.el ends here
index 98a01e8d83f67b1e851728039e526d97d6a5ba0e..990c09bfda78ded7ddff84015cd46b726d289558 100644 (file)
@@ -842,6 +842,25 @@ Return non-nil if we skipped over matched tags."
       (setq arg (1- arg)))
     return))
 
+(defun sgml-forward-sexp (n)
+  ;; This function is needed in major-modes such as nxml-mode where
+  ;; forward-sexp-function is used to give a more dwimish behavior to
+  ;; the `forward-sexp' command.
+  ;; Without it, we can end up with backtraces like:
+  ;;    "get-text-property" (0xffffc0f0)
+  ;;    "nxml-token-after" (0xffffc2ac)
+  ;;    "nxml-forward-single-balanced-item" (0xffffc46c)
+  ;;    "nxml-forward-balanced-item" (0xffffc61c)
+  ;;    "forward-sexp" (0xffffc7f8)
+  ;;    "sgml-parse-tag-backward" (0xffffc9c8)
+  ;;    "sgml-lexical-context" (0xffffcba8)
+  ;;    "sgml-mode-flyspell-verify" (0xffffcd74)
+  ;;    "flyspell-word" (0xffffcf3c)
+  ;;    "flyspell-post-command-hook" (0xffffd108)
+  ;; FIXME: should we also set the sgml-tag-syntax-table?
+  (let ((forward-sexp-function nil))
+    (forward-sexp n)))
+
 (defvar sgml-electric-tag-pair-overlays nil)
 (defvar sgml-electric-tag-pair-timer nil)
 
@@ -862,11 +881,12 @@ Return non-nil if we skipped over matched tags."
                 (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))))
+                    (let ((forward-sexp-function nil))
+                      (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)
@@ -1066,9 +1086,9 @@ With prefix argument ARG, repeat this ARG times."
                  ((and (eq (char-before) ?>)
                        (or (not (eq (char-after) ?<))
                            (> x y)))
-                  (backward-sexp))
+                  (sgml-forward-sexp -1))
                  ((eq (char-after y) ?<)
-                  (forward-sexp)))
+                  (sgml-forward-sexp 1)))
                 (point))))
         (message "Invisible tag: %s"
                  ;; Strip properties, otherwise, the text is invisible.
@@ -1235,7 +1255,7 @@ You might want to turn on `auto-fill-mode' to get better results."
        (unless (or ;;(looking-at "</")
                    (progn (skip-chars-backward " \t") (bolp)))
          (reindent-then-newline-and-indent))
-       (forward-sexp 1)))
+       (sgml-forward-sexp 1)))
     ;; (indent-region beg end)
     ))
 
@@ -1281,7 +1301,7 @@ Leave point at the beginning of the tag."
          (let ((pos (point)))
            (condition-case nil
                 ;; FIXME: This does not correctly skip over PI an CDATA tags.
-               (forward-sexp)
+               (sgml-forward-sexp 1)
              (scan-error
               ;; This < seems to be just a spurious one, let's ignore it.
               (goto-char pos)
@@ -1315,7 +1335,7 @@ Leave point at the beginning of the tag."
                 (with-syntax-table sgml-tag-syntax-table
                   (goto-char tag-end)
                   (condition-case nil
-                      (backward-sexp)
+                      (sgml-forward-sexp -1)
                     (scan-error
                      ;; This > isn't really the end of a tag. Skip it.
                      (goto-char (1- tag-end))
@@ -1540,7 +1560,7 @@ LCON is the lexical context, if any."
 
     (`text
      (while (looking-at "</")
-       (forward-sexp 1)
+       (sgml-forward-sexp 1)
        (skip-chars-forward " \t"))
      (let* ((here (point))
            (unclosed (and ;; (not sgml-xml-mode)
@@ -1759,11 +1779,12 @@ This takes effect when first loading the library.")
   "Value of `sgml-display-text' for HTML mode.")
 
 \f
-;; should code exactly HTML 3 here when that is finished
 (defvar html-tag-alist
   (let* ((1-7 '(("1") ("2") ("3") ("4") ("5") ("6") ("7")))
         (1-9 `(,@1-7 ("8") ("9")))
         (align '(("align" ("left") ("center") ("right"))))
+         (ialign '(("align" ("top") ("middle") ("bottom") ("left")
+                    ("right"))))
         (valign '(("top") ("middle") ("bottom") ("baseline")))
         (rel '(("next") ("previous") ("parent") ("subdocument") ("made")))
         (href '("href" ("ftp:") ("file:") ("finger:") ("gopher:") ("http:")
@@ -1776,17 +1797,29 @@ This takes effect when first loading the library.")
                 ("title")))
         (list '((nil \n ("List item: " "<li>" str
                           (if sgml-xml-mode "</li>") \n))))
+         (shape '(("shape" ("rect") ("circle") ("poly") ("default"))))
         (cell `(t
                 ,@align
                 ("valign" ,@valign)
                 ("colspan" ,@1-9)
                 ("rowspan" ,@1-9)
-                ("nowrap" t))))
+                ("nowrap" t)))
+         (cellhalign '(("align" ("left") ("center") ("right")
+                        ("justify") ("char"))
+                       ("char") ("charoff")))
+         (cellvalign '(("valign" ("top") ("middle") ("bottom")
+                        ("baseline")))))
     ;; put ,-expressions first, else byte-compile chokes (as of V19.29)
     ;; and like this it's more efficient anyway
     `(("a" ,name ,@link)
+      ("area" t ,@shape ("coords") ("href") ("nohref" "nohref") ("alt")
+       ("tabindex") ("accesskey") ("onfocus") ("onblur"))
       ("base" t ,@href)
+      ("col" t ,@cellhalign ,@cellvalign ("span") ("width"))
+      ("colgroup" \n ,@cellhalign ,@cellvalign ("span") ("width"))
       ("dir" ,@list)
+      ("figcaption")
+      ("figure" \n)
       ("font" nil "size" ("-1") ("+1") ("-2") ("+2") ,@1-7)
       ("form" (\n _ \n "<input type=\"submit\" value=\"\""
               (if sgml-xml-mode " />" ">"))
@@ -1798,6 +1831,9 @@ This takes effect when first loading the library.")
       ("h5" ,@align)
       ("h6" ,@align)
       ("hr" t ("size" ,@1-9) ("width") ("noshade" t) ,@align)
+      ("iframe" \n ,@ialign ("longdesc") ("name") ("src")
+       ("frameborder" ("1") ("0")) ("marginwidth") ("marginheight")
+       ("scrolling" ("yes") ("no") ("auto")) ("height") ("width"))
       ("img" t ("align" ,@valign ("texttop") ("absmiddle") ("absbottom"))
        ("src") ("alt") ("width" "1") ("height" "1")
        ("border" "1") ("vspace" "1") ("hspace" "1") ("ismap" t))
@@ -1819,14 +1855,17 @@ This takes effect when first loading the library.")
                     "<tr><" str ?> _
                     (if sgml-xml-mode (concat "<" str "></tr>")) \n))
        ("border" t ,@1-9) ("width" "10") ("cellpadding"))
+      ("tbody" \n ,@cellhalign ,@cellvalign)
       ("td" ,@cell)
       ("textarea" ,name ("rows" ,@1-9) ("cols" ,@1-9))
+      ("tfoot" \n ,@cellhalign ,@cellvalign)
       ("th" ,@cell)
+      ("thead" \n ,@cellhalign ,@cellvalign)
       ("ul" ,@list ("type" ("disc") ("circle") ("square")))
 
       ,@sgml-tag-alist
 
-      ("abbrev")
+      ("abbr")
       ("acronym")
       ("address")
       ("array" (nil \n
@@ -1835,20 +1874,33 @@ This takes effect when first loading the library.")
       ("article" \n)
       ("aside" \n)
       ("au")
+      ("audio" \n
+       ("src") ("crossorigin" ("anonymous") ("use-credentials"))
+       ("preload" ("none") ("metadata") ("auto"))
+       ("autoplay" "autoplay") ("mediagroup") ("loop" "loop")
+       ("muted" "muted") ("controls" "controls"))
       ("b")
+      ("bdi")
+      ("bdo" nil ("lang") ("dir" ("ltr") ("rtl")))
       ("big")
       ("blink")
-      ("blockquote" \n)
+      ("blockquote" \n ("cite"))
       ("body" \n ("background" ".gif") ("bgcolor" "#") ("text" "#")
        ("link" "#") ("alink" "#") ("vlink" "#"))
       ("box" (nil _ "<over>" _ (if sgml-xml-mode "</over>")))
       ("br" t ("clear" ("left") ("right")))
+      ("button" nil ("name") ("value")
+       ("type" ("submit") ("reset") ("button"))
+       ("disabled" "disabled")
+       ("tabindex") ("accesskey") ("onfocus") ("onblur"))
+      ("canvas" \n ("width") ("height"))
       ("caption" ("valign" ("top") ("bottom")))
       ("center" \n)
       ("cite")
       ("code" \n)
+      ("datalist" \n)
       ("dd" ,(not sgml-xml-mode))
-      ("del")
+      ("del" nil ("cite") ("datetime"))
       ("dfn")
       ("div")
       ("dl" (nil \n
@@ -1858,8 +1910,14 @@ This takes effect when first loading the library.")
       ("dt" (t _ (if sgml-xml-mode "</dt>")
              "<dd>" (if sgml-xml-mode "</dd>") \n))
       ("em")
+      ("embed" t ("src") ("type") ("width") ("height"))
+      ("fieldset" \n)
       ("fn" "id" "fn")  ;; Footnotes were deprecated in HTML 3.2
       ("footer" \n)
+      ("frame" t ("longdesc") ("name") ("src")
+       ("frameborder" ("1") ("0")) ("marginwidth") ("marginheight")
+       ("noresize" "noresize") ("scrolling" ("yes") ("no") ("auto")))
+      ("frameset" \n ("rows") ("cols") ("onload") ("onunload"))
       ("head" \n)
       ("header" \n)
       ("hgroup" \n)
@@ -1874,24 +1932,49 @@ This takes effect when first loading the library.")
               "</body>"
                ))
       ("i")
-      ("ins")
+      ("ins" nil ("cite") ("datetime"))
       ("isindex" t ("action") ("prompt"))
       ("kbd")
+      ("label" nil ("for") ("accesskey") ("onfocus") ("onblur"))
       ("lang")
+      ("legend" nil ("accesskey"))
       ("li" ,(not sgml-xml-mode))
+      ("main" \n)
+      ("map" \n ("name"))
+      ("mark")
       ("math" \n)
+      ("meta" t ("http-equiv") ("name") ("content") ("scheme"))
+      ("meter" nil ("value") ("min") ("max") ("low") ("high")
+       ("optimum"))
       ("nav" \n)
       ("nobr")
+      ("noframes" \n)
+      ("noscript" \n)
+      ("object" \n ("declare" "declare") ("classid") ("codebase")
+       ("data") ("type") ("codetype") ("archive") ("standby")
+       ("height") ("width") ("usemap") ("name") ("tabindex"))
+      ("optgroup" \n ("name") ("size") ("multiple" "multiple")
+       ("disabled" "disabled") ("tabindex") ("onfocus") ("onblur")
+       ("onchange"))
       ("option" t ("value") ("label") ("selected" t))
+      ("output" nil ("for") ("form") ("name"))
       ("over" t)
+      ("param" t ("name") ("value")
+       ("valuetype" ("data") ("ref") ("object")) ("type"))
       ("person") ;; Tag for person's name tag deprecated in HTML 3.2
       ("pre" \n)
-      ("q")
+      ("progress" nil ("value") ("max"))
+      ("q" nil ("cite"))
       ("rev")
+      ("rp" t)
+      ("rt" t)
+      ("ruby")
       ("s")
       ("samp")
+      ("script" nil ("charset") ("type") ("src") ("defer" "defer"))
       ("section" \n)
       ("small")
+      ("source" t ("src") ("type") ("media"))
       ("span" nil
        ("class"
         ("builtin")
@@ -1904,39 +1987,60 @@ This takes effect when first loading the library.")
         ("variable-name")
         ("warning")))
       ("strong")
+      ("style" \n ("type") ("media") ("title"))
       ("sub")
+      ("summary")
       ("sup")
+      ("time" nil ("datetime"))
       ("title")
       ("tr" t)
+      ("track" t
+       ("kind" ("subtitles") ("captions") ("descriptions")
+        ("chapters") ("metadata"))
+       ("src") ("srclang") ("label") ("default"))
       ("tt")
       ("u")
       ("var")
+      ("video" \n
+       ("src") ("crossorigin" ("anonymous") ("use-credentials"))
+       ("poster") ("preload" ("none") ("metadata") ("auto"))
+       ("autoplay" "autoplay") ("mediagroup") ("loop" "loop")
+       ("muted" "muted") ("controls" "controls") ("width") ("height"))
       ("wbr" t)))
   "Value of `sgml-tag-alist' for HTML mode.")
 
 (defvar html-tag-help
   `(,@sgml-tag-help
     ("a" . "Anchor of point or link elsewhere")
-    ("abbrev" . "Abbreviation")
+    ("abbr" . "Abbreviation")
     ("acronym" . "Acronym")
     ("address" . "Formatted mail address")
+    ("area" . "Region of an image map")
     ("array" . "Math array")
     ("article" . "An independent part of document or site")
     ("aside" . "Secondary content related to surrounding content (e.g. page or article)")
     ("au" . "Author")
+    ("audio" . "Sound or audio stream")
     ("b" . "Bold face")
     ("base" . "Base address for URLs")
+    ("bdi" . "Text isolated for bidirectional formatting")
+    ("bdo" . "Override text directionality")
     ("big" . "Font size")
     ("blink" . "Blinking text")
     ("blockquote" . "Indented quotation")
     ("body" . "Document body")
     ("box" . "Math fraction")
     ("br" . "Line break")
+    ("button" . "Clickable button")
+    ("canvas" . "Script generated graphics canvas")
     ("caption" . "Table caption")
     ("center" . "Centered text")
     ("changed" . "Change bars")
     ("cite" . "Citation of a document")
     ("code" . "Formatted source code")
+    ("col" . "Group of attribute specifications for table columns")
+    ("colgroup" . "Group of columns")
+    ("datalist" . "A set of predefined options")
     ("dd" . "Definition of term")
     ("del" . "Deleted text")
     ("dfn" . "Defining instance of a term")
@@ -1946,14 +2050,19 @@ This takes effect when first loading the library.")
     ("dt" . "Term to be defined")
     ("em" . "Emphasized")
     ("embed" . "Embedded data in foreign format")
+    ("fieldset" . "Group of related controls and labels")
     ("fig" . "Figure")
     ("figa" . "Figure anchor")
+    ("figcaption" . "Caption for a figure")
     ("figd" . "Figure description")
     ("figt" . "Figure text")
+    ("figure" . "Self-contained content, often with a caption")
     ("fn" . "Footnote")  ;; No one supports special footnote rendering.
     ("font" . "Font size")
     ("footer" . "Footer of a section")
     ("form" . "Form with input fields")
+    ("frame" . "Frame in which another HTML document can be displayed")
+    ("frameset" . "Container for frames")
     ("group" . "Document grouping")
     ("h1" . "Most important section headline")
     ("h2" . "Important section headline")
@@ -1967,50 +2076,78 @@ This takes effect when first loading the library.")
     ("hr" . "Horizontal rule")
     ("html" . "HTML Document")
     ("i" . "Italic face")
+    ("iframe" . "Inline frame with a nested browsing context")
     ("img" . "Graphic image")
     ("input" . "Form input field")
     ("ins" . "Inserted text")
     ("isindex" . "Input field for index search")
     ("kbd" . "Keyboard example face")
+    ("label" . "Caption for a user interface item")
     ("lang" . "Natural language")
+    ("legend" . "Caption for a fieldset")
     ("li" . "List item")
     ("link" . "Link relationship")
+    ("main" . "Main content of the document body")
+    ("map" . "Image map (a clickable link area")
+    ("mark" . "Highlighted text")
     ("math" . "Math formula")
     ("menu" . "List of commands")
+    ("meta" . "Document properties")
+    ("meter" . "Scalar measurement within a known range")
     ("mh" . "Form mail header")
     ("nav" . "Group of navigational links")
     ("nextid" . "Allocate new id")
     ("nobr" . "Text without line break")
+    ("noframes" . "Content for user agents that don't support frames")
+    ("noscript" . "Alternate content for when a script isn't executed")
+    ("object" . "External resource")
     ("ol" . "Ordered list")
+    ("optgroup" . "Group of options")
     ("option" . "Selection list item")
+    ("output" . "Result of a calculation or user action")
     ("over" . "Math fraction rule")
     ("p" . "Paragraph start")
     ("panel" . "Floating panel")
+    ("param" . "Parameters for an object")
     ("person" . "Person's name")
     ("pre" . "Preformatted fixed width text")
+    ("progress" . "Completion progress of a task")
     ("q" . "Quotation")
     ("rev" . "Reverse video")
+    ("rp" . "Fallback text for when ruby annotations aren't supported")
+    ("rt" . "Ruby text component of a ruby annotation")
+    ("ruby" . "Ruby annotation")
     ("s" . "Strikeout")
     ("samp" . "Sample text")
+    ("script" . "Executable script within a document")
     ("section" . "Section of a document")
     ("select" . "Selection list")
     ("small" . "Font size")
+    ("source" . "Media resource for media elements")
     ("sp" . "Nobreak space")
     ("span" . "Generic inline container")
     ("strong" . "Standout text")
+    ("style" . "Style information")
     ("sub" . "Subscript")
+    ("summary" . "Summary, caption, or legend")
     ("sup" . "Superscript")
     ("table" . "Table with rows and columns")
     ("tb" . "Table vertical break")
+    ("tbody" . "Table body")
     ("td" . "Table data cell")
     ("textarea" . "Form multiline edit area")
+    ("tfoot" . "Table foot")
     ("th" . "Table header cell")
+    ("thead" . "Table head")
+    ("time" . "Content with optional machine-readable timestamp")
     ("title" . "Document title")
     ("tr" . "Table row separator")
+    ("track" . "Timed text track for media elements")
     ("tt" . "Typewriter face")
     ("u" . "Underlined text")
     ("ul" . "Unordered list")
     ("var" . "Math variable face")
+    ("video" . "Video or movie")
     ("wbr" . "Enable <br> within <nobr>"))
   "Value of variable `sgml-tag-help' for HTML mode.")
 
index 3ac68bdf790a154bf92259369fca09d57521b6a0..973b2d373d5f6e37e3415ea066d6633cb1c152cb 100644 (file)
@@ -343,7 +343,7 @@ An alternative value is \" . \", if you use a font with a narrow period."
 (defun latex-imenu-create-index ()
   "Generate an alist for imenu from a LaTeX buffer."
   (let ((section-regexp
-        (concat "\\\\" (regexp-opt (mapcar 'car latex-section-alist) t)
+        (concat "\\\\" (regexp-opt (mapcar #'car latex-section-alist) t)
                 "\\*?[ \t]*{"))
        (metasection-regexp
         (concat "\\\\" (regexp-opt latex-metasection-list t)))
@@ -373,7 +373,7 @@ An alternative value is \" . \", if you use a font with a narrow period."
                ;; Using sexps allows some use of matching {...} inside
                ;; titles.
                (forward-sexp 1)
-               (push (cons (concat (apply 'concat
+               (push (cons (concat (apply #'concat
                                           (make-list
                                            (max 0 (- i i0))
                                            latex-imenu-indent-string))
@@ -413,7 +413,8 @@ An alternative value is \" . \", if you use a font with a narrow period."
 (defvar latex-outline-regexp
   (concat "\\\\"
          (regexp-opt (append latex-metasection-list
-                             (mapcar 'car latex-section-alist)) t)))
+                             (mapcar #'car latex-section-alist))
+                      t)))
 
 (defun latex-outline-level ()
   (if (looking-at latex-outline-regexp)
@@ -544,7 +545,8 @@ An alternative value is \" . \", if you use a font with a narrow period."
      (let* (;;
            ;; Names of commands whose arg should be fontified with fonts.
            (bold (regexp-opt '("textbf" "textsc" "textup"
-                               "boldsymbol" "pmb") t))
+                               "boldsymbol" "pmb")
+                              t))
            (italic (regexp-opt '("textit" "textsl" "emph") t))
            ;; FIXME: unimplemented yet.
            ;; (type (regexp-opt '("texttt" "textmd" "textrm" "textsf") t))
@@ -566,7 +568,8 @@ An alternative value is \" . \", if you use a font with a narrow period."
                         '("linebreak" "nolinebreak" "pagebreak" "nopagebreak"
                           "newline" "newpage" "clearpage" "cleardoublepage"
                           "displaybreak" "allowdisplaybreaks"
-                          "enlargethispage") t))
+                          "enlargethispage")
+                         t))
            (general "\\([a-zA-Z@]+\\**\\|[^ \t\n]\\)")
            ;;
            ;; Miscellany.
@@ -649,7 +652,7 @@ 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)))))
+     (lambda (x) (null (delq t (mapcar #'stringp x)))))
 
 (eval-when-compile
   (defconst tex-syntax-propertize-rules
@@ -1129,34 +1132,36 @@ subshell is initiated, `tex-shell-hook' is run."
        (concat "[ \t]*\\(\\$\\$\\|"
                "\\\\[][]\\|"
                "\\\\" (regexp-opt (append
-                                   (mapcar 'car latex-section-alist)
+                                   (mapcar #'car latex-section-alist)
                                    '("begin" "label" "end"
                                      "item" "bibitem" "newline" "noindent"
                                      "newpage" "footnote" "marginpar"
-                                     "parbox" "caption")) t)
+                                     "parbox" "caption"))
+                                   t)
                "\\>\\|\\\\[a-z]*" (regexp-opt '("space" "skip" "page") t)
                "\\>\\)"))
   (setq paragraph-separate
        (concat "[\f%]\\|[ \t]*\\($\\|"
                "\\\\[][]\\|"
                "\\\\" (regexp-opt (append
-                                   (mapcar 'car latex-section-alist)
-                                   '("begin" "label" "end" )) t)
+                                   (mapcar #'car latex-section-alist)
+                                   '("begin" "label" "end" ))
+                                   t)
                "\\>\\|\\\\\\(" (regexp-opt '("item" "bibitem" "newline"
                                              "noindent" "newpage" "footnote"
                                              "marginpar" "parbox" "caption"))
                "\\|\\$\\$\\|[a-z]*\\(space\\|skip\\|page[a-z]*\\)"
                "\\>\\)[ \t]*\\($\\|%\\)\\)"))
-  (setq-local imenu-create-index-function 'latex-imenu-create-index)
+  (setq-local imenu-create-index-function #'latex-imenu-create-index)
   (setq-local tex-face-alist tex-latex-face-alist)
-  (add-hook 'fill-nobreak-predicate 'latex-fill-nobreak-predicate nil t)
-  (setq-local indent-line-function 'latex-indent)
+  (add-hook 'fill-nobreak-predicate #'latex-fill-nobreak-predicate nil t)
+  (setq-local indent-line-function #'latex-indent)
   (setq-local fill-indent-according-to-mode t)
   (add-hook 'completion-at-point-functions
-            'latex-complete-data nil 'local)
+            #'latex-complete-data nil 'local)
   (setq-local outline-regexp latex-outline-regexp)
-  (setq-local outline-level 'latex-outline-level)
-  (setq-local forward-sexp-function 'latex-forward-sexp)
+  (setq-local outline-level #'latex-outline-level)
+  (setq-local forward-sexp-function #'latex-forward-sexp)
   (setq-local skeleton-end-hook nil))
 
 ;;;###autoload
@@ -1206,6 +1211,8 @@ Entering SliTeX mode runs the hook `text-mode-hook', then the hook
 
 (defvar tildify-space-string)
 (defvar tildify-foreach-region-function)
+(declare-function tildify-foreach-ignore-environments
+                  "tildify" (pairs callback _beg end))
 (defvar tex--prettify-symbols-alist)
 
 (defun tex-common-initialization ()
@@ -1217,7 +1224,7 @@ Entering SliTeX mode runs the hook `text-mode-hook', then the hook
   ;; rather than using regex-based filtering.
   (setq-local tildify-foreach-region-function
               (apply-partially
-               'tildify-foreach-ignore-environments
+               #'tildify-foreach-ignore-environments
                `(("\\\\\\\\" . "") ; do not remove this
                  (,(eval-when-compile
                      (concat "\\\\begin{\\("
@@ -1535,8 +1542,7 @@ a skeleton (see `skeleton-insert').")
 Puts point on a blank line between them."
   (let ((choice (completing-read (format "LaTeX block name [%s]: "
                                         latex-block-default)
-                                (append latex-block-names
-                                        latex-standard-block-names)
+                                 (latex-complete-envnames)
                                 nil nil nil nil latex-block-default)))
     (setq latex-block-default choice)
     (unless (or (member choice latex-standard-block-names)
@@ -1593,17 +1599,32 @@ Puts point on a blank line between them."
         (complete-with-action action keys key pred)))))
 
 (defun latex-complete-envnames ()
-  (append latex-block-names latex-standard-block-names))
+  (completion-table-in-turn
+   (append latex-block-names latex-standard-block-names)
+   (completion-table-dynamic
+    (lambda (str)
+      (with-current-buffer (if (and (minibufferp) (minibuffer-selected-window))
+                               (window-buffer (minibuffer-selected-window))
+                             (current-buffer))
+        (save-excursion
+          (let ((comps '())
+                (pos (point)))
+            (goto-char (point-min))
+            (while (re-search-forward (concat "\\\\begin{\\(" str "[^}\n ]*\\)")
+                                      nil t)
+              (unless (and (<= (match-beginning 0) pos)
+                           (>= (match-end 0) pos))
+                (push (match-string 1) comps)))
+            comps)))))))
 
 (defun latex-complete-refkeys ()
   (when (boundp 'reftex-docstruct-symbol)
     (symbol-value reftex-docstruct-symbol)))
 
 (defvar latex-complete-alist
-  ;; TODO: Add \begin, \end, \ref, ...
-  '(("\\`\\\\\\(short\\)?cite\\'" . latex-complete-bibtex-keys)
-    ("\\`\\\\\\(begin\\|end\\)\\'" . latex-complete-envnames)
-    ("\\`\\\\[vf]?ref\\'" . latex-complete-refkeys)))
+  `(("\\`\\\\\\(short\\)?cite\\'" . ,#'latex-complete-bibtex-keys)
+    ("\\`\\\\\\(begin\\|end\\)\\'" . ,#'latex-complete-envnames)
+    ("\\`\\\\[vf]?ref\\'" . ,#'latex-complete-refkeys)))
 
 (defun latex-complete-data ()
   "Get completion-data at point."
@@ -2186,7 +2207,7 @@ of the current buffer."
 
 (defun tex-summarize-command (cmd)
   (if (not (stringp cmd)) ""
-    (mapconcat 'identity
+    (mapconcat #'identity
               (mapcar (lambda (s) (car (split-string s)))
                       (split-string cmd "\\s-*\\(?:;\\|&&\\)\\s-*"))
               "&")))
@@ -2368,7 +2389,8 @@ Only applies the FSPEC to the args part of FORMAT."
       ;; Substitute and return.
       (if (and hist-cmd
               (string-match (concat "[' \t\"]" (format-spec "%r" fspec)
-                                    "\\([;&' \t\"]\\|\\'\\)") hist-cmd))
+                                    "\\([;&' \t\"]\\|\\'\\)")
+                             hist-cmd))
          ;; The history command was already applied to the same file,
          ;; so just reuse it.
          hist-cmd
@@ -2753,7 +2775,7 @@ Runs the shell command defined by `tex-show-queue-command'."
 (defvar tex-indent-item-re "\\\\\\(bib\\)?item\\>")
 (defvar latex-noindent-environments '("document"))
 (put 'latex-noindent-environments 'safe-local-variable
-     (lambda (x) (null (delq t (mapcar 'stringp x)))))
+     (lambda (x) (null (delq t (mapcar #'stringp x)))))
 
 (defvar tex-latex-indent-syntax-table
   (let ((st (make-syntax-table tex-mode-syntax-table)))
index c22f531440d8916bf53d5d067ec936e42a60b389..ed6022f9fbb40d98a21e401e031aa2a938000d3d 100644 (file)
@@ -368,8 +368,10 @@ Subexpression 1 is what goes into the corresponding `@end' statement.")
     ;; their arguments frequently include a @@, and we don't want that
     ;; to overwrite the normal fontification of the argument.
     ("@\\(file\\|email\\){\\([^}]+\\)" 2 font-lock-string-face keep)
-    ("@\\(samp\\|code\\|var\\|math\\|env\\|command\\|option\\){\\([^}]+\\)"
+    ("@\\(samp\\|code\\|var\\|env\\|command\\|option\\){\\([^}]+\\)"
      2 font-lock-variable-name-face keep)
+    ;; @math allows nested braces like @math{2^{12}}
+    ("@math{\\([^{}]*{?[^{}]*}?[^{}]*\\)}" 1 font-lock-variable-name-face)
     ("@\\(cite\\|x?ref\\|pxref\\|dfn\\|inforef\\){\\([^}]+\\)"
      2 font-lock-constant-face)
     ("@\\(anchor\\){\\([^}]+\\)" 2 font-lock-type-face)
index 9920fa06d0c86893b8cdcdeb16973e3216159079..df5c52d4d618a9b6351fa121694a0244085e9a48 100644 (file)
@@ -603,7 +603,10 @@ Signal an error if the entire string was not used."
 ;;;###autoload
 (defun number-at-point ()
   "Return the number at point, or nil if none is found."
-  (form-at-point 'sexp 'numberp))
+  (when (thing-at-point-looking-at "-?[0-9]+\\.?[0-9]*" 500)
+    (string-to-number
+     (buffer-substring (match-beginning 0) (match-end 0)))))
+
 (put 'number 'thing-at-point 'number-at-point)
 ;;;###autoload
 (defun list-at-point ()
index d4cddc92f9463b6438abd64cf903a5d7918716f6..c053ea6e924ae5c6bd8c2ac1dac195b18f9ee58f 100644 (file)
 
 (defcustom time-stamp-format "%:y-%02m-%02d %02H:%02M:%02S %u"
   "Format of the string inserted by \\[time-stamp].
-The value may be a string or a list.  Lists are supported only for
-backward compatibility; see variable `time-stamp-old-format-warn'.
-
-A string is used verbatim except for character sequences beginning
+This is a string, used verbatim except for character sequences beginning
 with %, as follows.  The values of non-numeric formatted items depend
 on the locale setting recorded in `system-time-locale' and
 `locale-coding-system'.  The examples here are for the default
@@ -107,17 +104,6 @@ otherwise would have been updated."
   :group 'time-stamp
   :version "19.29")
 
-(defcustom time-stamp-old-format-warn 'ask
-  "Action if `time-stamp-format' is an old-style list.
-If `error', the format is not used.  If `ask', the user is queried about
-using the time-stamp-format.  If `warn', a warning is displayed.
-If nil, no notification is given."
-  :type '(choice (const :tag "Don't use the format" error)
-                 (const ask)
-                 (const warn)
-                (const :tag "No notification" nil))
-  :group 'time-stamp)
-
 (defcustom time-stamp-time-zone nil
   "The time zone to be used by \\[time-stamp].
 Its format is that of the ZONE argument of the `format-time-string' function."
@@ -420,26 +406,14 @@ With ARG, turn time stamping on if and only if arg is positive."
   "Generate the new string to be inserted by \\[time-stamp].
 Optionally use format TS-FORMAT instead of `time-stamp-format' to
 format the string."
-  (or ts-format
-      (setq ts-format time-stamp-format))
-  (if (stringp ts-format)
-      (time-stamp--format (time-stamp-string-preprocess ts-format) nil)
-    ;; handle version 1 compatibility
-    (cond ((or (eq time-stamp-old-format-warn 'error)
-              (and (eq time-stamp-old-format-warn 'ask)
-                   (not (y-or-n-p "Use non-string time-stamp-format? "))))
-          (message "Warning: no time-stamp: time-stamp-format not a string")
-          (sit-for 1)
-          nil)
-         (t
-          (cond ((eq time-stamp-old-format-warn 'warn)
-                 (message "Obsolescent time-stamp-format type; should be string")
-                 (sit-for 1)))
-          (time-stamp-fconcat ts-format " ")))))
+  (if (stringp (or ts-format (setq ts-format time-stamp-format)))
+      (time-stamp--format (time-stamp-string-preprocess ts-format) nil)))
+
 
 (defconst time-stamp-no-file "(no file)"
   "String to use when the buffer is not associated with a file.")
 
+;;; FIXME This comment was written in 1996!
 ;;; time-stamp is transitioning to using the new, expanded capabilities
 ;;; of format-time-string.  During the process, this function implements
 ;;; intermediate, compatible formats and complains about old, soon to
@@ -676,28 +650,6 @@ otherwise the value of the function `system-name'."
           mail-host-address)
       (system-name)))
 
-;;; the rest of this file is for version 1 compatibility
-
-(defun time-stamp-fconcat (list sep)
-  "Similar to (mapconcat \\='funcall LIST SEP) but LIST allows literals.
-If an element of LIST is a symbol, it is funcalled to get the string to use;
-the separator SEP is used between two strings obtained by funcalling a
-symbol.  Otherwise the element itself is inserted; no separator is used
-around literals."
-  (let ((return-string "")
-       (insert-sep-p nil))
-    (while list
-      (cond ((symbolp (car list))
-            (if insert-sep-p
-                (setq return-string (concat return-string sep)))
-            (setq return-string (concat return-string (funcall (car list))))
-            (setq insert-sep-p t))
-           (t
-            (setq return-string (concat return-string (car list)))
-            (setq insert-sep-p nil)))
-      (setq list (cdr list)))
-    return-string))
-
 (provide 'time-stamp)
 
 ;;; time-stamp.el ends here
index e0d39b195869490b98984df9fe100be7e29e0290..ba5792441c4e617fe059f2a96031c23d31b241fc 100644 (file)
@@ -108,7 +108,10 @@ A value of nil means 1 <= hh <= 12, and an AM/PM suffix is used."
   :type 'boolean
   :group 'display-time)
 
-(defvar display-time-string nil)
+(defvar display-time-string nil
+  "String used in mode lines to display a time string.
+It should not be set directly, but is instead updated by the
+`display-time' function.")
 ;;;###autoload(put 'display-time-string 'risky-local-variable t)
 
 (defcustom display-time-hook nil
index 4c7366adc8e53ed93bf52dfeb515636d1c676333..6848230c28faffbd576fb85f818b67455a7cda4c 100644 (file)
@@ -353,6 +353,24 @@ to run the `url-cookie-setup-save-timer' function manually."
                                          url-cookie-save-interval
                                          #'url-cookie-write-file))))
 
+(defun url-cookie-delete-cookies (&optional regexp keep)
+  "Delete all cookies from the cookie store where the domain matches REGEXP.
+If REGEXP is nil, all cookies are deleted.  If KEEP is non-nil,
+instead delete all cookies that do not match REGEXP."
+  (dolist (variable '(url-cookie-secure-storage url-cookie-storage))
+    (let ((cookies (symbol-value variable)))
+      (dolist (elem cookies)
+        (when (or (and (null keep)
+                       (or (null regexp)
+                           (string-match regexp (car elem))))
+                  (and keep
+                       regexp
+                       (not (string-match regexp (car elem)))))
+          (setq cookies (delq elem cookies))))
+      (set variable cookies)))
+  (setq url-cookies-changed-since-last-save t)
+  (url-cookie-write-file))
+
 ;;; Mode for listing and editing cookies.
 
 (defun url-cookie-list ()
index 460ee0dd4264c7477b0279350523c9411915cc96..d898368cf9eb003ce7b0d59445326653cb27a695 100644 (file)
@@ -246,8 +246,8 @@ overriding the value of `url-gateway-method'."
                           :type gw-method
                           ;; Use non-blocking socket if we can.
                           :nowait (featurep 'make-network-process
-                                            '(:nowait t))))
-                        (`socks
+                                             '(:nowait t))))
+                         (`socks
                          (socks-open-network-stream name buffer host service))
                         (`telnet
                          (url-open-telnet name buffer host service))
index 717651df544860347d867eca7b04174a32373e92..d3be880b3822c5ef83228f8f360e8aead20a382b 100644 (file)
@@ -269,7 +269,8 @@ A prefix arg makes KEEP-TIME non-nil."
        (error "Opening input file: No such file or directory, %s" url))
     (with-current-buffer buffer
       (setq handle (mm-dissect-buffer t)))
-    (mm-save-part-to-file handle newname)
+    (let ((mm-attachment-file-modes (default-file-modes)))
+      (mm-save-part-to-file handle newname))
     (kill-buffer buffer)
     (mm-destroy-parts handle)))
 (put 'copy-file 'url-file-handlers 'url-copy-file)
index 5832e92c5a36a554edc18736db533fb5991ebc9f..d0f8364e8efe2c6138cd8433d5b55056516c4a46 100644 (file)
@@ -26,6 +26,8 @@
 ;;; Code:
 
 (require 'cl-lib)
+(require 'puny)
+(require 'nsm)
 (eval-when-compile
   (require 'subr-x))
 
@@ -135,6 +137,8 @@ request.")
     (507 insufficient-storage            "Insufficient storage"))
   "The HTTP return codes and their text.")
 
+(defconst url-https-default-port 443 "Default HTTPS port.")
+
 ;(eval-when-compile
 ;; These are all macros so that they are hidden from external sight
 ;; when the file is byte-compiled.
@@ -196,7 +200,14 @@ request.")
        ;; `url-open-stream' needs a buffer in which to do things
        ;; like authentication.  But we use another buffer afterwards.
        (unwind-protect
-           (let ((proc (url-open-stream host buf host port gateway-method)))
+            (let ((proc (url-open-stream host buf
+                                         (if url-using-proxy
+                                             (url-host url-using-proxy)
+                                           host)
+                                         (if url-using-proxy
+                                             (url-port url-using-proxy)
+                                           port)
+                                         gateway-method)))
              ;; url-open-stream might return nil.
              (when (processp proc)
                ;; Drop the temp buffer link before killing the buffer.
@@ -211,15 +222,36 @@ request.")
     (if connection
        (url-http-mark-connection-as-busy host port connection))))
 
+(defun url-http--user-agent-default-string ()
+  "Compute a default User-Agent string based on `url-privacy-level'."
+  (let ((package-info (when url-package-name
+                        (format "%s/%s" url-package-name url-package-version)))
+        (emacs-info (unless (and (listp url-privacy-level)
+                                 (memq 'emacs url-privacy-level))
+                      (format "Emacs/%s" emacs-version)))
+        (os-info (unless (and (listp url-privacy-level)
+                              (memq 'os url-privacy-level))
+                   (format "(%s; %s)" url-system-type url-os-type)))
+        (url-info (format "URL/%s" url-version)))
+    (string-join (delq nil (list package-info url-info
+                                 emacs-info os-info))
+                 " ")))
+
 ;; Building an HTTP request
 (defun url-http-user-agent-string ()
-  (if (or (eq url-privacy-level 'paranoid)
-         (and (listp url-privacy-level)
-              (memq 'agent url-privacy-level)))
-      ""
-    (if (functionp url-user-agent)
-        (funcall url-user-agent)
-      url-user-agent)))
+  "Compute a User-Agent string.
+The string is based on `url-privacy-level' and `url-user-agent'."
+  (let* ((hide-ua
+          (or (eq url-privacy-level 'paranoid)
+              (and (listp url-privacy-level)
+                   (memq 'agent url-privacy-level))))
+         (ua-string
+          (and (not hide-ua)
+               (cond
+                ((functionp url-user-agent) (funcall url-user-agent))
+                ((stringp url-user-agent) url-user-agent)
+                ((eq url-user-agent 'default) (url-http--user-agent-default-string))))))
+    (if ua-string (format "User-Agent: %s\r\n" (string-trim ua-string)) "")))
 
 (defun url-http-create-request (&optional ref-url)
   "Create an HTTP request for `url-http-target-url', referred to by REF-URL."
@@ -307,8 +339,9 @@ request.")
                      (url-scheme-get-property
                       (url-type url-http-target-url) 'default-port))
                  (format
-                  "Host: %s:%d\r\n" host (url-port url-http-target-url))
-               (format "Host: %s\r\n" host))
+                  "Host: %s:%d\r\n" (puny-encode-domain host)
+                  (url-port url-http-target-url))
+               (format "Host: %s\r\n" (puny-encode-domain host)))
              ;; Who its from
              (if url-personal-mail-address
                  (concat
@@ -475,6 +508,7 @@ work correctly."
   )
 
 (declare-function gnutls-peer-status "gnutls.c" (proc))
+(declare-function gnutls-negotiate "gnutls.el")
 
 (defun url-http-parse-headers ()
  "Parse and handle HTTP specific headers.
@@ -588,15 +622,7 @@ should be shown to the user."
            ;; We do not support agent-driven negotiation, so we just
            ;; redirect to the preferred URI if one is provided.
            nil)
-          ((or `moved-permanently `found `temporary-redirect) ; 301 302 307
-           ;; If the 301|302 status code is received in response to a
-           ;; request other than GET or HEAD, the user agent MUST NOT
-           ;; automatically redirect the request unless it can be
-           ;; confirmed by the user, since this might change the
-           ;; conditions under which the request was issued.
-           (unless (member url-http-method '("HEAD" "GET"))
-             (setq redirect-uri nil)))
-          (`see-other                  ; 303
+           (`see-other                 ; 303
            ;; The response to the request can be found under a different
            ;; URI and SHOULD be retrieved using a GET method on that
            ;; resource.
@@ -931,7 +957,13 @@ should be shown to the user."
               (erase-buffer)
                (let ((url-request-method url-http-method)
                      (url-request-extra-headers url-http-extra-headers)
-                     (url-request-data url-http-data))
+                     (url-request-data url-http-data)
+                     (url-using-proxy (url-find-proxy-for-url
+                                       url-current-object
+                                       (url-host url-current-object))))
+                 (when url-using-proxy
+                   (setq url-using-proxy
+                         (url-generic-parse-url url-using-proxy)))
                  (url-http url-current-object url-callback-function
                            url-callback-arguments (current-buffer)))))
            ((url-http-parse-headers)
@@ -1195,34 +1227,40 @@ the end of the document."
   "Retrieve URL via HTTP asynchronously.
 URL must be a parsed URL.  See `url-generic-parse-url' for details.
 
-When retrieval is completed, execute the function CALLBACK, passing it
-an updated value of CBARGS as arguments.  The first element in CBARGS
-should be a plist describing what has happened so far during the
-request, as described in the docstring of `url-retrieve' (if in
-doubt, specify nil).
+When retrieval is completed, execute the function CALLBACK,
+passing it an updated value of CBARGS as arguments.  The first
+element in CBARGS should be a plist describing what has happened
+so far during the request, as described in the docstring of
+`url-retrieve' (if in doubt, specify nil).  The current buffer
+then CALLBACK is executed is the retrieval buffer.
 
 Optional arg RETRY-BUFFER, if non-nil, specifies the buffer of a
 previous `url-http' call, which is being re-attempted.
 
 Optional arg GATEWAY-METHOD specifies the gateway to be used,
-overriding the value of `url-gateway-method'."
+overriding the value of `url-gateway-method'.
+
+The return value of this function is the retrieval buffer."
   (cl-check-type url vector "Need a pre-parsed URL.")
   (let* ((host (url-host (or url-using-proxy url)))
         (port (url-port (or url-using-proxy url)))
         (nsm-noninteractive (or url-request-noninteractive
                                 (and (boundp 'url-http-noninteractive)
                                      url-http-noninteractive)))
-        (connection (url-http-find-free-connection host port gateway-method))
+         (connection (url-http-find-free-connection (url-host url)
+                                                    (url-port url)
+                                                    gateway-method))
          (mime-accept-string url-mime-accept-string)
         (buffer (or retry-buffer
                     (generate-new-buffer
-                      (format " *http %s:%d*" host port)))))
+                      (format " *http %s:%d*" (url-host url) (url-port url))))))
     (if (not connection)
        ;; Failed to open the connection for some reason
        (progn
          (kill-buffer buffer)
          (setq buffer nil)
-         (error "Could not create connection to %s:%d" host port))
+          (error "Could not create connection to %s:%d" (url-host url)
+                 (url-port url)))
       (with-current-buffer buffer
        (mm-disable-multibyte)
        (setq url-current-object url
@@ -1278,13 +1316,72 @@ overriding the value of `url-gateway-method'."
            (set-process-sentinel connection 'url-http-async-sentinel))
           (`failed
            ;; Asynchronous connection failed
-           (error "Could not create connection to %s:%d" host port))
+           (error "Could not create connection to %s:%d" (url-host url)
+                  (url-port url)))
           (_
-           (set-process-sentinel connection
-                                 'url-http-end-of-document-sentinel)
-           (process-send-string connection (url-http-create-request))))))
+           (if (and url-http-proxy (string= "https"
+                                            (url-type url-current-object)))
+               (url-https-proxy-connect connection)
+             (set-process-sentinel connection
+                                   'url-http-end-of-document-sentinel)
+             (process-send-string connection (url-http-create-request)))))))
     buffer))
 
+(defun url-https-proxy-connect (connection)
+  (setq url-http-after-change-function 'url-https-proxy-after-change-function)
+  (process-send-string connection (format (concat "CONNECT %s:%d HTTP/1.1\r\n"
+                                                  "Host: %s\r\n"
+                                                  "\r\n")
+                                          (url-host url-current-object)
+                                          (or (url-port url-current-object)
+                                              url-https-default-port)
+                                          (url-host url-current-object))))
+
+(defun url-https-proxy-after-change-function (st nd length)
+  (let* ((process-buffer (current-buffer))
+         (proc (get-buffer-process process-buffer)))
+    (goto-char (point-min))
+    (when (re-search-forward "^\r?\n" nil t)
+      (backward-char 1)
+      ;; Saw the end of the headers
+      (setq url-http-end-of-headers (set-marker (make-marker) (point)))
+      (url-http-parse-response)
+      (cond
+       ((null url-http-response-status)
+        ;; We got back a headerless malformed response from the
+        ;; server.
+        (url-http-activate-callback)
+        (error "Malformed response from proxy, fail!"))
+       ((= url-http-response-status 200)
+        (if (gnutls-available-p)
+            (condition-case e
+                (let ((tls-connection (gnutls-negotiate
+                                       :process proc
+                                       :hostname (url-host url-current-object)
+                                       :verify-error nil)))
+                  ;; check certificate validity
+                  (setq tls-connection
+                        (nsm-verify-connection tls-connection
+                                               (url-host url-current-object)
+                                               (url-port url-current-object)))
+                  (with-current-buffer process-buffer (erase-buffer))
+                  (set-process-buffer tls-connection process-buffer)
+                  (setq url-http-after-change-function
+                        'url-http-wait-for-headers-change-function)
+                  (set-process-filter tls-connection 'url-http-generic-filter)
+                  (process-send-string tls-connection
+                                       (url-http-create-request)))
+              (gnutls-error
+               (url-http-activate-callback)
+               (error "gnutls-error: %s" e))
+              (error
+               (url-http-activate-callback)
+               (error "error: %s" e)))
+          (error "error: gnutls support needed!")))
+       (t
+        (message "error response: %d" url-http-response-status)
+        (url-http-activate-callback))))))
+
 (defun url-http-async-sentinel (proc why)
   ;; We are performing an asynchronous connection, and a status change
   ;; has occurred.
@@ -1296,11 +1393,13 @@ overriding the value of `url-gateway-method'."
        (url-http-end-of-document-sentinel proc why))
        ((string= (substring why 0 4) "open")
        (setq url-http-connection-opened t)
-       (condition-case error
-           (process-send-string proc (url-http-create-request))
-         (file-error
-          (setq url-http-connection-opened nil)
-          (message "HTTP error: %s" error))))
+        (if (and url-http-proxy (string= "https" (url-type url-current-object)))
+            (url-https-proxy-connect proc)
+          (condition-case error
+              (process-send-string proc (url-http-create-request))
+            (file-error
+             (setq url-http-connection-opened nil)
+             (message "HTTP error: %s" error)))))
        (t
        (setf (car url-callback-arguments)
              (nconc (list :error (list 'error 'connection-failed why
@@ -1461,7 +1560,6 @@ p3p
 ;; with url-http.el on systems with 8-character file names.
 (require 'tls)
 
-(defconst url-https-default-port 443 "Default HTTPS port.")
 (defconst url-https-asynchronous-p t "HTTPS retrievals are asynchronous.")
 
 ;; FIXME what is the point of this alias being an autoload?
index 0ff4ad1556c189d0edac17cdbfd98b88af8ab015..8972d0b056c73216947c67b588b9fda868f8069c 100644 (file)
@@ -1,4 +1,4 @@
-;;; url-queue.el --- Fetching web pages in parallel
+;;; url-queue.el --- Fetching web pages in parallel   -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2011-2016 Free Software Foundation, Inc.
 
@@ -47,6 +47,7 @@
 ;;; Internal variables.
 
 (defvar url-queue nil)
+(defvar url-queue-progress-timer nil)
 
 (cl-defstruct url-queue
   url callback cbargs silentp
@@ -90,7 +91,13 @@ The variable `url-queue-timeout' sets a timeout."
     (when (and waiting
               (< running url-queue-parallel-processes))
       (setf (url-queue-pre-triggered waiting) t)
-      (run-with-idle-timer 0.01 nil 'url-queue-run-queue))))
+      ;; We start fetching from this idle timer...
+      (run-with-idle-timer 0.01 nil #'url-queue-run-queue)
+      ;; And then we set up a separate timer to ensure progress when a
+      ;; web server is unresponsive.
+      (unless url-queue-progress-timer
+        (setq url-queue-progress-timer
+              (run-with-idle-timer 1 1 #'url-queue-check-progress))))))
 
 (defun url-queue-run-queue ()
   (url-queue-prune-old-entries)
@@ -107,6 +114,13 @@ The variable `url-queue-timeout' sets a timeout."
       (setf (url-queue-start-time waiting) (float-time))
       (url-queue-start-retrieve waiting))))
 
+(defun url-queue-check-progress ()
+  (when url-queue-progress-timer
+    (if url-queue
+        (url-queue-run-queue)
+      (cancel-timer url-queue-progress-timer)
+      (setq url-queue-progress-timer nil))))
+
 (defun url-queue-callback-function (status job)
   (setq url-queue (delq job url-queue))
   (when (and (eq (car status) :error)
index 1ae2213eee65b0280ba38869ba4af5287762b6a8..af18acd8b6a2f874100280354f4377461436921f 100644 (file)
@@ -468,7 +468,7 @@ should return it unchanged."
     (and host
         (not (string-match "\\`\\[.*\\]\\'" host))
         (setf (url-host obj)
-              (url-hexify-string host url-host-allowed-chars)))
+               (decode-coding-string (url-host obj) 'utf-8)))
 
     (if path
        (setq path (url-hexify-string path url-path-allowed-chars)))
index 960a04ad30fe2547c000c1c6e521697690189ce3..f6aae21a838ccf93f0c31d02ad19816dc75f726d 100644 (file)
@@ -116,6 +116,7 @@ If a list, this should be a list of symbols of what NOT to send.
 Valid symbols are:
 email    -- the email address
 os       -- the operating system info
+emacs    -- the version of Emacs
 lastloc  -- the last location
 agent    -- do not send the User-Agent string
 cookies  -- never accept HTTP cookies
@@ -143,6 +144,7 @@ variable."
                (checklist :tag "Custom"
                           (const :tag "Email address" :value email)
                           (const :tag "Operating system" :value os)
+                          (const :tag "Emacs version" :value emacs)
                           (const :tag "Last location" :value lastloc)
                           (const :tag "Browser identification" :value agent)
                           (const :tag "No cookies" :value cookie)))
@@ -357,16 +359,21 @@ Currently supported methods:
                (const :tag "Direct connection" :value native))
   :group 'url-hairy)
 
-(defcustom url-user-agent (format "User-Agent: %sURL/%s\r\n"
-                                 (if url-package-name
-                                     (concat url-package-name "/"
-                                             url-package-version " ")
-                                   "") url-version)
-  "User Agent used by the URL package for HTTP/HTTPS requests
-Should be a string or a function of no arguments returning a string."
-  :type '(choice (string :tag "A static User-Agent string")
-                 (function :tag "Call a function to get the User-Agent string"))
-  :version "25.1"
+(defcustom url-user-agent 'default
+  "User Agent used by the URL package for HTTP/HTTPS requests.
+Should be one of:
+* A string (not including the \"User-Agent:\" prefix)
+* A function of no arguments, returning a string
+* `default' (to compute a value according to `url-privacy-level')
+* nil (to omit the User-Agent header entirely)"
+  :type
+  '(choice
+    (string :tag "A static User-Agent string")
+    (function :tag "Call a function to get the User-Agent string")
+    (const :tag "No User-Agent at all" :value nil)
+    (const :tag "An string auto-generated according to `url-privacy-level'"
+           :value default))
+  :version "25.2"
   :group 'url)
 
 (defvar url-setup-done nil "Has setup configuration been done?")
index 91adada5e8575c30378db91d34ffe1d11855fd14..6d710e02d63e53b4a52e4845268cea4dfc12ab96 100644 (file)
@@ -221,17 +221,20 @@ URL-encoded before it's used."
     buffer))
 
 ;;;###autoload
-(defun url-retrieve-synchronously (url &optional silent inhibit-cookies)
+(defun url-retrieve-synchronously (url &optional silent inhibit-cookies timeout)
   "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
 no further processing).  URL is either a string or a parsed URL.
-If SILENT is non-nil, don't display progress reports and similar messages.
-If INHIBIT-COOKIES is non-nil, cookies will neither be stored nor sent
-to the server."
+
+If SILENT is non-nil, don't do any messaging while retrieving.
+If INHIBIT-COOKIES is non-nil, refuse to store cookies.  If
+TIMEOUT is passed, it should be a number that says (in seconds)
+how long to wait for a response before giving up."
   (url-do-setup)
 
   (let ((retrieval-done nil)
+       (start-time (current-time))
         (asynch-buffer nil))
     (setq asynch-buffer
          (url-retrieve url (lambda (&rest ignored)
@@ -253,7 +256,11 @@ to the server."
        ;; buffer-local variable so we can find the exact process that we
        ;; should be waiting for.  In the mean time, we'll just wait for any
        ;; process output.
-       (while (not retrieval-done)
+       (while (and (not retrieval-done)
+                    (or (not timeout)
+                        (< (float-time (time-subtract
+                                        (current-time) start-time))
+                           timeout)))
          (url-debug 'retrieval
                     "Spinning in url-retrieve-synchronously: %S (%S)"
                     retrieval-done asynch-buffer)
@@ -284,7 +291,7 @@ to the server."
             ;; `sleep-for' was tried but it lead to other forms of
             ;; hanging.  --Stef
             (unless (or (with-local-quit
-                         (accept-process-output proc))
+                         (accept-process-output proc 1))
                        (null proc))
               ;; accept-process-output returned nil, maybe because the process
               ;; exited (and may have been replaced with another).  If we got
index fa02a5a1f5efd370cec64413c949e17bae6bd0d3..9076d834c7c1f731dcbce4901463675e2c83fde8 100644 (file)
@@ -171,6 +171,14 @@ Note: The search is conducted only within 10%, at the beginning of the file."
   :type '(repeat regexp)
   :group 'change-log)
 
+(defcustom change-log-directory-files '(".bzr" ".git" ".hg" ".svn")
+  "List of files that cause `find-change-log' to stop in containing directory.
+This applies if no pre-existing ChangeLog is found.  If nil, then in such
+a case simply use the directory containing the changed file."
+  :version "25.2"
+  :type '(repeat file)
+  :group 'change-log)
+
 (defface change-log-date
   '((t (:inherit font-lock-string-face)))
   "Face used to highlight dates in date lines."
@@ -582,25 +590,14 @@ If a string, interpret as the ZONE argument of `format-time-string'.")
      (lambda (x) (or (booleanp x) (stringp x))))
 
 (defun add-log-iso8601-time-zone (&optional time zone)
-  (let* ((utc-offset (or (car (current-time-zone time zone)) 0))
-        (sign (if (< utc-offset 0) ?- ?+))
-        (sec (abs utc-offset))
-        (ss (% sec 60))
-        (min (/ sec 60))
-        (mm (% min 60))
-        (hh (/ min 60)))
-    (format (cond ((not (zerop ss)) "%c%02d:%02d:%02d")
-                 ((not (zerop mm)) "%c%02d:%02d")
-                 (t "%c%02d"))
-           sign hh mm ss)))
+  (declare (obsolete nil "25.2"))
+  (format-time-string "%:::z" time zone))
 
 (defvar add-log-iso8601-with-time-zone nil)
 
 (defun add-log-iso8601-time-string (&optional time zone)
-  (let ((date (format-time-string "%Y-%m-%d" time zone)))
-    (if add-log-iso8601-with-time-zone
-        (concat date " " (add-log-iso8601-time-zone time zone))
-      date)))
+  (format-time-string
+   (if add-log-iso8601-with-time-zone "%Y-%m-%d %:::z" "%Y-%m-%d") time zone))
 
 (defun change-log-name ()
   "Return (system-dependent) default name for a change log file."
@@ -690,7 +687,11 @@ If `change-log-default-name' is nil, behave as though it were \"ChangeLog\"
 
 If `change-log-default-name' contains a leading directory component, then
 simply find it in the current directory.  Otherwise, search in the current
-directory and its successive parents for a file so named.
+directory and its successive parents for a file so named.  Stop at the first
+such file that exists (or has a buffer visiting it), or the first directory
+that contains any of `change-log-directory-files'.  If no match is found,
+use the current directory.  To override the choice of this function,
+simply create an empty ChangeLog file first by hand in the desired place.
 
 Once a file is found, `change-log-default-name' is set locally in the
 current buffer to the complete file name.
@@ -723,24 +724,27 @@ Optional arg BUFFER-FILE overrides `buffer-file-name'."
          ;; for several related directories.
          (setq file-name (file-chase-links file-name))
          (setq file-name (expand-file-name file-name))
-         ;; Move up in the dir hierarchy till we find a change log file.
-         (let ((file1 file-name)
-               parent-dir)
-           (while (and (not (or (get-file-buffer file1) (file-exists-p file1)))
-                       (progn (setq parent-dir
-                                    (file-name-directory
-                                     (directory-file-name
-                                      (file-name-directory file1))))
-                              ;; Give up if we are already at the root dir.
-                              (not (string= (file-name-directory file1)
-                                            parent-dir))))
-             ;; Move up to the parent dir and try again.
-             (setq file1 (expand-file-name
-                          (file-name-nondirectory (change-log-name))
-                          parent-dir)))
-           ;; If we found a change log in a parent, use that.
-           (if (or (get-file-buffer file1) (file-exists-p file1))
-               (setq file-name file1)))))
+         (let* ((cbase (file-name-nondirectory (change-log-name)))
+                (root
+                 (locate-dominating-file
+                  file-name
+                  (lambda (dir)
+                    (or
+                     (let ((clog (expand-file-name cbase dir)))
+                       (or (get-file-buffer clog) (file-exists-p clog)))
+                     ;; Stop at VCS root?
+                     (and change-log-directory-files
+                          (let ((files change-log-directory-files)
+                                found)
+                            (while
+                                (and
+                                 (not
+                                  (setq found
+                                        (file-exists-p
+                                         (expand-file-name (car files) dir))))
+                                 (setq files (cdr files))))
+                            found)))))))
+           (if root (setq file-name (expand-file-name cbase root))))))
     ;; Make a local variable in this buffer so we needn't search again.
     (set (make-local-variable 'change-log-default-name) file-name))
   file-name)
@@ -895,8 +899,10 @@ non-nil, otherwise in local time."
                              "\\(\\s \\|[(),:]\\)")
                      bound t)))
              ;; Add to the existing item for the same file.
-             (re-search-forward "^\\s *$\\|^\\s \\*")
-             (goto-char (match-beginning 0))
+             (if (re-search-forward "^\\s *$\\|^\\s \\*" nil t)
+                 (goto-char (match-beginning 0))
+               (goto-char (point-max))
+               (insert "\n"))
              ;; Delete excess empty lines; make just 2.
              (while (and (not (eobp)) (looking-at "^\\s *$"))
                (delete-region (point) (line-beginning-position 2)))
index 5419d4778107114f7f23b810d5e85a0268753e46..c12602c71508a0733f2dfc2d0c4abe20624617ce 100644 (file)
@@ -1141,11 +1141,8 @@ of the current buffer."
        ))
 
 (defun ediff-file-compressed-p (file)
-  (condition-case nil
-      (require 'jka-compr)
-    (error))
-  (if (featurep 'jka-compr)
-      (string-match (jka-compr-build-file-regexp) file)))
+  (require 'jka-compr)
+  (string-match (jka-compr-build-file-regexp) file))
 
 
 (defun ediff-swap-buffers ()
@@ -1293,7 +1290,8 @@ which see."
 
   (cond ((eq ediff-window-setup-function 'ediff-setup-windows-multiframe)
         (setq ediff-multiframe nil)
-        (setq window-setup-func 'ediff-setup-windows-plain))
+        (setq window-setup-func 'ediff-setup-windows-plain)
+         (message "ediff is now in 'plain' mode"))
        ((eq ediff-window-setup-function 'ediff-setup-windows-plain)
         (if (ediff-in-control-buffer-p)
             (ediff-kill-bottom-toolbar))
@@ -1301,14 +1299,15 @@ which see."
                  (window-live-p ediff-control-window))
             (set-window-dedicated-p ediff-control-window nil))
         (setq ediff-multiframe t)
-        (setq window-setup-func 'ediff-setup-windows-multiframe))
+        (setq window-setup-func 'ediff-setup-windows-multiframe)
+         (message "ediff is now in 'multiframe' mode"))
        (t
         (if (and (ediff-buffer-live-p ediff-control-buffer)
                  (window-live-p ediff-control-window))
             (set-window-dedicated-p ediff-control-window nil))
         (setq ediff-multiframe t)
         (setq window-setup-func 'ediff-setup-windows-multiframe))
-       )
+         (message "ediff is now in 'multiframe' mode"))
 
   ;; change default
   (setq-default ediff-window-setup-function window-setup-func)
index 71099ab4d6e5c7e5ea5443033faa3ef1e4124576..a4244c941d217d0b249724e07baed8a6443ee267 100644 (file)
@@ -1367,7 +1367,8 @@ buffer. If odd -- assume it is in a file."
     (require 'ediff-ptch)
     (setq patch-buf
          (ediff-get-patch-buffer
-          (if arg (prefix-numeric-value arg)) patch-buf))
+          (and arg (prefix-numeric-value arg))
+           (and patch-buf (get-buffer patch-buf))))
     (setq source-dir (cond (ediff-use-last-dir ediff-last-dir-patch)
                           ((and (not ediff-patch-default-directory)
                                 (buffer-file-name patch-buf))
@@ -1401,9 +1402,8 @@ patch. If not given, the user is prompted according to the prefix argument."
         (if arg (prefix-numeric-value arg)) patch-buf))
   (ediff-patch-buffer-internal
    patch-buf
-   (read-buffer
-    "Which buffer to patch? "
-    (ediff-other-buffer patch-buf))))
+   (read-buffer "Which buffer to patch? " (ediff-other-buffer patch-buf)
+                'require-match)))
 
 
 ;;;###autoload
index 489ece81bec7eef668d60c6afa4f108a979c2c8e..5198624ea7f0c8c0bfb2db68def5a722d06ea836 100644 (file)
   (append '("-d" "-b")
          (if (listp diff-switches) diff-switches (list diff-switches)))
   "A list of strings specifying switches to be passed to diff.
-Used in `smerge-diff-base-mine' and related functions."
+Used in `smerge-diff-base-upper' and related functions."
   :type '(repeat string))
 
 (defcustom smerge-auto-leave t
   "Non-nil means to leave `smerge-mode' when the last conflict is resolved."
   :type 'boolean)
 
-(defface smerge-mine
+(defface smerge-upper
   '((((class color) (min-colors 88) (background light))
      :background "#ffdddd")
     (((class color) (min-colors 88) (background dark))
      :background "#553333")
     (((class color))
      :foreground "red"))
-  "Face for your code.")
-(define-obsolete-face-alias 'smerge-mine-face 'smerge-mine "22.1")
-(defvar smerge-mine-face 'smerge-mine)
+  "Face for the `upper' version of a conflict.")
+(define-obsolete-face-alias 'smerge-mine 'smerge-upper "25.2")
+(defvar smerge-upper-face 'smerge-upper)
 
-(defface smerge-other
+(defface smerge-lower
   '((((class color) (min-colors 88) (background light))
      :background "#ddffdd")
     (((class color) (min-colors 88) (background dark))
      :background "#335533")
     (((class color))
      :foreground "green"))
-  "Face for the other code.")
-(define-obsolete-face-alias 'smerge-other-face 'smerge-other "22.1")
-(defvar smerge-other-face 'smerge-other)
+  "Face for the `lower' version of a conflict.")
+(define-obsolete-face-alias 'smerge-other 'smerge-lower "25.2")
+(defvar smerge-lower-face 'smerge-lower)
 
 (defface smerge-base
   '((((class color) (min-colors 88) (background light))
@@ -149,16 +149,18 @@ Used in `smerge-diff-base-mine' and related functions."
     ("r" . smerge-resolve)
     ("a" . smerge-keep-all)
     ("b" . smerge-keep-base)
-    ("o" . smerge-keep-other)
-    ("m" . smerge-keep-mine)
+    ("o" . smerge-keep-lower)           ; for the obsolete keep-other
+    ("l" . smerge-keep-lower)
+    ("m" . smerge-keep-upper)           ; for the obsolete keep-mine
+    ("u" . smerge-keep-upper)
     ("E" . smerge-ediff)
     ("C" . smerge-combine-with-next)
     ("R" . smerge-refine)
     ("\C-m" . smerge-keep-current)
     ("=" . ,(make-sparse-keymap "Diff"))
-    ("=<" "base-mine" . smerge-diff-base-mine)
-    ("=>" "base-other" . smerge-diff-base-other)
-    ("==" "mine-other" . smerge-diff-mine-other))
+    ("=<" "base-upper" . smerge-diff-base-upper)
+    ("=>" "base-lower" . smerge-diff-base-lower)
+    ("==" "upper-lower" . smerge-diff-upper-lower))
   "The base keymap for `smerge-mode'.")
 
 (defcustom smerge-command-prefix "\C-c^"
@@ -196,19 +198,19 @@ Used in `smerge-diff-base-mine' and related functions."
     "--"
     ["Revert to Base" smerge-keep-base :help "Revert to base version"
      :active (smerge-check 2)]
-    ["Keep Other" smerge-keep-other :help "Keep `other' version"
-     :active (smerge-check 3)]
-    ["Keep Yours" smerge-keep-mine :help "Keep your version"
+    ["Keep Upper" smerge-keep-upper :help "Keep `upper' version"
      :active (smerge-check 1)]
+    ["Keep Lower" smerge-keep-lower :help "Keep `lower' version"
+     :active (smerge-check 3)]
     "--"
-    ["Diff Base/Mine" smerge-diff-base-mine
-     :help "Diff `base' and `mine' for current conflict"
+    ["Diff Base/Upper" smerge-diff-base-upper
+     :help "Diff `base' and `upper' for current conflict"
      :active (smerge-check 2)]
-    ["Diff Base/Other" smerge-diff-base-other
-     :help "Diff `base' and `other' for current conflict"
+    ["Diff Base/Lower" smerge-diff-base-lower
+     :help "Diff `base' and `lower' for current conflict"
      :active (smerge-check 2)]
-    ["Diff Mine/Other" smerge-diff-mine-other
-     :help "Diff `mine' and `other' for current conflict"
+    ["Diff Upper/Lower" smerge-diff-upper-lower
+     :help "Diff `upper' and `lower' for current conflict"
      :active (smerge-check 1)]
     "--"
     ["Invoke Ediff" smerge-ediff
@@ -223,7 +225,7 @@ Used in `smerge-diff-base-mine' and related functions."
     ))
 
 (easy-menu-define smerge-context-menu nil
-  "Context menu for mine area in `smerge-mode'."
+  "Context menu for upper area in `smerge-mode'."
   '(nil
     ["Keep Current" smerge-keep-current :help "Use current (at point) version"]
     ["Kill Current" smerge-kill-current :help "Remove current (at point) version"]
@@ -234,9 +236,9 @@ Used in `smerge-diff-base-mine' and related functions."
 
 (defconst smerge-font-lock-keywords
   '((smerge-find-conflict
-     (1 smerge-mine-face prepend t)
+     (1 smerge-upper-face prepend t)
      (2 smerge-base-face prepend t)
-     (3 smerge-other-face prepend t)
+     (3 smerge-lower-face prepend t)
      ;; FIXME: `keep' doesn't work right with syntactic fontification.
      (0 smerge-markers-face keep)
      (4 nil t t)
@@ -246,7 +248,7 @@ Used in `smerge-diff-base-mine' and related functions."
 (defconst smerge-begin-re "^<<<<<<< \\(.*\\)\n")
 (defconst smerge-end-re "^>>>>>>> \\(.*\\)\n")
 (defconst smerge-base-re "^||||||| \\(.*\\)\n")
-(defconst smerge-other-re "^=======\n")
+(defconst smerge-lower-re "^=======\n")
 
 (defvar smerge-conflict-style nil
   "Keep track of which style of conflict is in use.
@@ -267,7 +269,7 @@ Can be nil if the style is undecided, or else:
   (if diff-auto-refine-mode
       (condition-case nil (smerge-refine) (error nil))))
 
-(defconst smerge-match-names ["conflict" "mine" "base" "other"])
+(defconst smerge-match-names ["conflict" "upper" "base" "lower"])
 
 (defun smerge-ensure-match (n)
   (unless (match-end n)
@@ -570,7 +572,7 @@ major modes.  Uses `smerge-resolve-function' to do the actual work."
               (zerop (call-process diff-command nil buf nil "-bc" b m)))
             (set-match-data md)
            (smerge-keep-n 3))
-          ;; Try "diff -b BASE MINE | patch OTHER".
+          ;; Try "diff -b BASE UPPER | patch LOWER".
           ((when (and (not safe) m2e b
                        ;; If the BASE is empty, this would just concatenate
                        ;; the two, which is rarely right.
@@ -585,7 +587,7 @@ major modes.  Uses `smerge-resolve-function' to do the actual work."
              (narrow-to-region m0b m0e)
               (smerge-remove-props m0b m0e)
              (insert-file-contents o nil nil nil t)))
-          ;; Try "diff -b BASE OTHER | patch MINE".
+          ;; Try "diff -b BASE LOWER | patch UPPER".
           ((when (and (not safe) m2e b
                        ;; If the BASE is empty, this would just concatenate
                        ;; the two, which is rarely right.
@@ -685,22 +687,40 @@ major modes.  Uses `smerge-resolve-function' to do the actual work."
   (smerge-keep-n 2)
   (smerge-auto-leave))
 
-(defun smerge-keep-other ()
-  "Use \"other\" version."
+(defun smerge-keep-lower ()
+  "Keep the \"lower\" version of a merge conflict.
+In a conflict that looks like:
+  <<<<<<<
+  UUU
+  =======
+  LLL
+  >>>>>>>
+this keeps \"LLL\"."
   (interactive)
   (smerge-match-conflict)
   ;;(smerge-ensure-match 3)
   (smerge-keep-n 3)
   (smerge-auto-leave))
 
-(defun smerge-keep-mine ()
-  "Keep your version."
+(define-obsolete-function-alias 'smerge-keep-other 'smerge-keep-lower "25.2")
+
+(defun smerge-keep-upper ()
+  "Keep the \"upper\" version of a merge conflict.
+In a conflict that looks like:
+  <<<<<<<
+  UUU
+  =======
+  LLL
+  >>>>>>>
+this keeps \"UUU\"."
   (interactive)
   (smerge-match-conflict)
   ;;(smerge-ensure-match 1)
   (smerge-keep-n 1)
   (smerge-auto-leave))
 
+(define-obsolete-function-alias 'smerge-keep-mine 'smerge-keep-upper "25.2")
+
 (defun smerge-get-current ()
   (let ((i 3))
     (while (or (not (match-end i))
@@ -734,28 +754,37 @@ major modes.  Uses `smerge-resolve-function' to do the actual work."
          (smerge-keep-n (car left))
          (smerge-auto-leave))))))
 
-(defun smerge-diff-base-mine ()
-  "Diff `base' and `mine' version in current conflict region."
+(defun smerge-diff-base-upper ()
+  "Diff `base' and `upper' version in current conflict region."
   (interactive)
   (smerge-diff 2 1))
 
-(defun smerge-diff-base-other ()
-  "Diff `base' and `other' version in current conflict region."
+(define-obsolete-function-alias 'smerge-diff-base-mine
+  'smerge-diff-base-upper "25.2")
+
+(defun smerge-diff-base-lower ()
+  "Diff `base' and `lower' version in current conflict region."
   (interactive)
   (smerge-diff 2 3))
 
-(defun smerge-diff-mine-other ()
-  "Diff `mine' and `other' version in current conflict region."
+(define-obsolete-function-alias 'smerge-diff-base-other
+  'smerge-diff-base-lower "25.2")
+
+(defun smerge-diff-upper-lower ()
+  "Diff `upper' and `lower' version in current conflict region."
   (interactive)
   (smerge-diff 1 3))
 
+(define-obsolete-function-alias 'smerge-diff-mine-other
+  'smerge-diff-upper-lower "25.2")
+
 (defun smerge-match-conflict ()
   "Get info about the conflict.  Puts the info in the `match-data'.
 The submatches contain:
  0:  the whole conflict.
- 1:  your code.
- 2:  the base code.
- 3:  other code.
+ 1:  upper version of the code.
+ 2:  base version of the code.
+ 3:  lower version of the code.
 An error is raised if not inside a conflict."
   (save-excursion
     (condition-case nil
@@ -765,26 +794,26 @@ An error is raised if not inside a conflict."
               (_ (re-search-backward smerge-begin-re))
 
               (start (match-beginning 0))
-              (mine-start (match-end 0))
+              (upper-start (match-end 0))
               (filename (or (match-string 1) ""))
 
               (_ (re-search-forward smerge-end-re))
               (_ (cl-assert (< orig-point (match-end 0))))
 
-              (other-end (match-beginning 0))
+              (lower-end (match-beginning 0))
               (end (match-end 0))
 
-              (_ (re-search-backward smerge-other-re start))
+              (_ (re-search-backward smerge-lower-re start))
 
-              (mine-end (match-beginning 0))
-              (other-start (match-end 0))
+              (upper-end (match-beginning 0))
+              (lower-start (match-end 0))
 
               base-start base-end)
 
          ;; handle the various conflict styles
          (cond
           ((save-excursion
-             (goto-char mine-start)
+             (goto-char upper-start)
              (re-search-forward smerge-begin-re end t))
            ;; There's a nested conflict and we're after the beginning
            ;; of the outer one but before the beginning of the inner one.
@@ -797,8 +826,8 @@ An error is raised if not inside a conflict."
           ((re-search-backward smerge-base-re start t)
            ;; a 3-parts conflict
            (set (make-local-variable 'smerge-conflict-style) 'diff3-A)
-           (setq base-end mine-end)
-           (setq mine-end (match-beginning 0))
+           (setq base-end upper-end)
+           (setq upper-end (match-beginning 0))
            (setq base-start (match-end 0)))
 
           ((string= filename (file-name-nondirectory
@@ -811,17 +840,17 @@ An error is raised if not inside a conflict."
                     (equal filename "ANCESTOR")
                     (string-match "\\`[.0-9]+\\'" filename)))
            ;; a same-diff conflict
-           (setq base-start mine-start)
-           (setq base-end   mine-end)
-           (setq mine-start other-start)
-           (setq mine-end   other-end)))
+           (setq base-start upper-start)
+           (setq base-end   upper-end)
+           (setq upper-start lower-start)
+           (setq upper-end   lower-end)))
 
          (store-match-data (list start end
-                                 mine-start mine-end
+                                 upper-start upper-end
                                  base-start base-end
-                                 other-start other-end
+                                 lower-start lower-end
                                  (when base-start (1- base-start)) base-start
-                                 (1- other-start) other-start))
+                                 (1- lower-start) lower-start))
          t)
       (search-failed (user-error "Point not in conflict region")))))
 
@@ -1133,10 +1162,10 @@ repeating the command will highlight other two parts."
                           '((smerge . refine) (face . smerge-refined-added))))))
 
 (defun smerge-swap ()
-  "Swap the \"Mine\" and the \"Other\" chunks.
+  "Swap the \"Upper\" and the \"Lower\" chunks.
 Can be used before things like `smerge-keep-all' or `smerge-resolve' where the
 ordering can have some subtle influence on the result, such as preferring the
-spacing of the \"Other\" chunk."
+spacing of the \"Lower\" chunk."
   (interactive)
   (smerge-match-conflict)
   (goto-char (match-beginning 3))
@@ -1205,9 +1234,9 @@ spacing of the \"Other\" chunk."
       default)))
 
 ;;;###autoload
-(defun smerge-ediff (&optional name-mine name-other name-base)
+(defun smerge-ediff (&optional name-upper name-lower name-base)
   "Invoke ediff to resolve the conflicts.
-NAME-MINE, NAME-OTHER, and NAME-BASE, if non-nil, are used for the
+NAME-UPPER, NAME-LOWER, and NAME-BASE, if non-nil, are used for the
 buffer names."
   (interactive)
   (let* ((buf (current-buffer))
@@ -1215,18 +1244,18 @@ buffer names."
         ;;(ediff-default-variant 'default-B)
         (config (current-window-configuration))
         (filename (file-name-nondirectory (or buffer-file-name "-")))
-        (mine (generate-new-buffer
-               (or name-mine
+        (upper (generate-new-buffer
+               (or name-upper
                     (concat "*" filename " "
-                            (smerge--get-marker smerge-begin-re "MINE")
+                            (smerge--get-marker smerge-begin-re "UPPER")
                             "*"))))
-        (other (generate-new-buffer
-                (or name-other
+        (lower (generate-new-buffer
+                (or name-lower
                      (concat "*" filename " "
-                             (smerge--get-marker smerge-end-re "OTHER")
+                             (smerge--get-marker smerge-end-re "LOWER")
                              "*"))))
         base)
-    (with-current-buffer mine
+    (with-current-buffer upper
       (buffer-disable-undo)
       (insert-buffer-substring buf)
       (goto-char (point-min))
@@ -1237,7 +1266,7 @@ buffer names."
       (set-buffer-modified-p nil)
       (funcall mode))
 
-    (with-current-buffer other
+    (with-current-buffer lower
       (buffer-disable-undo)
       (insert-buffer-substring buf)
       (goto-char (point-min))
@@ -1269,9 +1298,9 @@ buffer names."
     ;; Fire up ediff.
     (set-buffer
      (if base
-        (ediff-merge-buffers-with-ancestor mine other base)
+        (ediff-merge-buffers-with-ancestor upper lower base)
          ;; nil 'ediff-merge-revisions-with-ancestor buffer-file-name)
-       (ediff-merge-buffers mine other)))
+       (ediff-merge-buffers upper lower)))
         ;; nil 'ediff-merge-revisions buffer-file-name)))
 
     ;; Ediff is now set up, and we are in the control buffer.
@@ -1313,21 +1342,21 @@ with a \\[universal-argument] prefix, makes up a 3-way conflict."
   (pcase-let ((`(,pt1 ,pt2 ,pt3 ,pt4)
                (sort `(,pt1 ,pt2 ,pt3 ,@(if pt4 (list pt4))) '>=)))
     (goto-char pt1) (beginning-of-line)
-    (insert ">>>>>>> OTHER\n")
+    (insert ">>>>>>> LOWER\n")
     (goto-char pt2) (beginning-of-line)
     (insert "=======\n")
     (goto-char pt3) (beginning-of-line)
     (when pt4
       (insert "||||||| BASE\n")
       (goto-char pt4) (beginning-of-line))
-    (insert "<<<<<<< MINE\n"))
+    (insert "<<<<<<< UPPER\n"))
   (if smerge-mode nil (smerge-mode 1))
   (smerge-refine))
 
 
 (defconst smerge-parsep-re
   (concat smerge-begin-re "\\|" smerge-end-re "\\|"
-          smerge-base-re "\\|" smerge-other-re "\\|"))
+          smerge-base-re "\\|" smerge-lower-re "\\|"))
 
 ;;;###autoload
 (define-minor-mode smerge-mode
index 59f2ae329ed8f64e2ef8c1fe554fdb0f3521bf31..a5515420a1bc3ce226eaab712b7d49989373c58b 100644 (file)
@@ -669,7 +669,7 @@ BACKEND, if non-nil, specifies a VC backend for the Log Edit buffer."
     (make-local-variable 'vc-log-after-operation-hook)
     (when after-hook
       (setq vc-log-after-operation-hook after-hook))
-    (setq vc-log-operation action)
+    (set (make-local-variable 'vc-log-operation) action)
     (when comment
       (erase-buffer)
       (when (stringp comment) (insert comment)))
@@ -711,6 +711,7 @@ the buffer contents as a comment."
       (funcall log-operation
               log-fileset
               log-entry))
+    (setq vc-log-operation nil)
 
     ;; Quit windows on logbuf.
     (cond
index f35c84d50c52efcbfcbecdb8fc35a6a55f764b28..16cbeef57eabbe9ba687e0f8e1421b4bd4a409fa 100644 (file)
@@ -1005,7 +1005,9 @@ or BRANCH^ (where \"^\" can be repeated)."
     (goto-char (point-min))
     (unless (eobp)
       ;; Indent the expanded log entry.
-      (indent-region (point-min) (point-max) 2)
+      (while (re-search-forward "^  " nil t)
+        (replace-match "")
+        (forward-line))
       (buffer-string))))
 
 (defun vc-git-region-history (file buffer lfrom lto)
index 2d8bab70598686447ecfb0c41e2ec2b4c282e978..5fb93bc0c8cb5b3aed7c6b343b9eb76523706659 100644 (file)
@@ -48,7 +48,7 @@
 ;; - dir-printer (fileinfo)                    OK
 ;; * working-revision (file)                   OK
 ;; * checkout-model (files)                    OK
-;; - mode-line-string (file)                   NOT NEEDED
+;; - mode-line-string (file)                   OK
 ;; STATE-CHANGING FUNCTIONS
 ;; * register (files &optional rev comment)    OK
 ;; * create-repo ()                            OK
@@ -197,6 +197,11 @@ highlighting the Log View buffer."
 
 (defun vc-hg-state (file)
   "Hg-specific version of `vc-state'."
+  (let ((state (vc-hg-state-fast file)))
+    (if (eq state 'unsupported) (vc-hg-state-slow file) state)))
+
+(defun vc-hg-state-slow (file)
+  "Determine status of FILE by running hg."
   (setq file (expand-file-name file))
   (let*
       ((status nil)
@@ -245,6 +250,130 @@ highlighting the Log View buffer."
                          "parent" "--template" "{rev}")))
       "0"))
 
+(defcustom vc-hg-symbolic-revision-styles
+  '(builtin-active-bookmark
+    "{if(bookmarks,sub(' ',',',bookmarks),if(phabdiff,phabdiff,shortest(node,6)))}")
+  "List of ways to present versions symbolically.  The version
+that we use is the first one that successfully produces a
+non-empty string.
+
+Each entry in the list can be either:
+
+- The symbol `builtin-active-bookmark', which indicates that we
+should use the active bookmark if one exists.  A template can
+supply this information as well, but `builtin-active-bookmark' is
+handled entirely inside Emacs and so is more efficient than using
+the generic Mercurial mechanism.
+
+- A string giving the Mercurial template to supply to \"hg
+parent\".  \"hg help template\" may be useful reading.
+
+- A function to call; it should accept two arguments (a revision
+and an optional path to which to limit history) and produce a
+string.  The function is called with `default-directory' set to
+within the repository.
+
+If no list entry produces a useful revision, return `nil'."
+  :type '(repeat (choice
+                  (const :tag "Active bookmark" 'bookmark)
+                  (string :tag "Hg template")
+                  (function :tag "Custom")))
+  :version "25.2"
+  :group 'vc-hg)
+
+(defcustom vc-hg-use-file-version-for-mode-line-version nil
+  "When enabled, the modeline contains revision information for the visited file.
+When not, the revision in the modeline is for the repository
+working copy.  `nil' is the much faster setting for
+large repositories."
+  :type 'boolean
+  :version "25.2"
+  :group 'vc-hg)
+
+(defun vc-hg--active-bookmark-internal (rev)
+  (when (equal rev ".")
+    (let* ((current-bookmarks-file ".hg/bookmarks.current"))
+      (when (file-exists-p current-bookmarks-file)
+        (ignore-errors
+          (with-temp-buffer
+            (insert-file-contents current-bookmarks-file)
+            (buffer-substring-no-properties
+             (point-min) (point-max))))))))
+
+(defun vc-hg--run-log (template rev path)
+  (ignore-errors
+    (with-output-to-string
+      (if path
+          (vc-hg-command
+           standard-output 0 nil
+           "log" "-f" "-l1" "--template" template path)
+        (vc-hg-command
+         standard-output 0 nil
+         "log" "-r" rev "-l1" "--template" template)))))
+
+(defun vc-hg--symbolic-revision (rev &optional path)
+  "Make a Mercurial revision human-readable.
+REV is a Mercurial revision.  `default-directory' is assumed to
+be in the repository root of interest.  PATH, if set, is a
+specific file to query."
+  (let ((symbolic-revision nil)
+        (styles vc-hg-symbolic-revision-styles))
+    (while (and (not symbolic-revision) styles)
+      (let ((style (pop styles)))
+        (setf symbolic-revision
+              (cond ((and (null path) (eq style 'builtin-active-bookmark))
+                     (vc-hg--active-bookmark-internal rev))
+                    ((stringp style)
+                     (vc-hg--run-log style rev path))
+                    ((functionp style)
+                     (funcall style rev path))))))
+    symbolic-revision))
+
+(defun vc-hg-mode-line-string (file)
+  "Hg-specific version of `vc-mode-line-string'."
+  (let* ((backend-name "Hg")
+         (truename (file-truename file))
+         (state (vc-state truename))
+         (state-echo nil)
+         (face nil)
+         (rev (and state
+                   (let ((default-directory
+                          (expand-file-name (vc-hg-root truename))))
+                     (vc-hg--symbolic-revision
+                      "."
+                      (and vc-hg-use-file-version-for-mode-line-version
+                           truename)))))
+         (rev (or rev "???")))
+    (propertize
+     (cond ((or (eq state 'up-to-date)
+                (eq state 'needs-update))
+            (setq state-echo "Up to date file")
+            (setq face 'vc-up-to-date-state)
+            (concat backend-name "-" rev))
+           ((eq state 'added)
+            (setq state-echo "Locally added file")
+            (setq face 'vc-locally-added-state)
+            (concat backend-name "@" rev))
+           ((eq state 'conflict)
+            (setq state-echo "File contains conflicts after the last merge")
+            (setq face 'vc-conflict-state)
+            (concat backend-name "!" rev))
+           ((eq state 'removed)
+            (setq state-echo "File removed from the VC system")
+            (setq face 'vc-removed-state)
+            (concat backend-name "!" rev))
+           ((eq state 'missing)
+            (setq state-echo "File tracked by the VC system, but missing from the file system")
+            (setq face 'vc-missing-state)
+            (concat backend-name "?" rev))
+           (t
+            (setq state-echo "Locally modified file")
+            (setq face 'vc-edited-state)
+            (concat backend-name ":" rev)))
+     'face face
+     'help-echo (concat state-echo " under the " backend-name
+                        " version control system"))))
+
 ;;; History functions
 
 (defcustom vc-hg-log-switches nil
@@ -435,6 +564,488 @@ Optional arg REVISION is a revision to annotate from."
     ;; TODO: update *vc-change-log* buffer so can see @ if --graph
     ))
 
+;;; Native data structure reading
+
+(defcustom vc-hg-parse-hg-data-structures t
+  "If true, try directly parsing Mercurial data structures
+directly instead of always running Mercurial.  We try to be safe
+against Mercurial data structure format changes and always fall
+back to running Mercurial directly."
+  :type 'boolean
+  :version "25.2"
+  :group 'vc-hg)
+
+(defsubst vc-hg--read-u8 ()
+  "Read and advance over an unsigned byte.
+Return a fixnum."
+  (prog1 (char-after)
+    (forward-char)))
+
+(defsubst vc-hg--read-u32-be ()
+  "Read and advance over a big-endian unsigned 32-bit integer.
+Return a fixnum; on overflow, result is undefined."
+  ;; Because elisp bytecode has an instruction for multiply and
+  ;; doesn't have one for lsh, it's somewhat counter-intuitively
+  ;; faster to multiply than to shift.
+  (+ (* (vc-hg--read-u8) (* 256 256 256))
+     (* (vc-hg--read-u8) (* 256 256))
+     (* (vc-hg--read-u8) 256)
+     (identity (vc-hg--read-u8))))
+
+(defun vc-hg--raw-dirstate-search (dirstate fname)
+  (with-temp-buffer
+    (set-buffer-multibyte nil)
+    (insert-file-contents-literally dirstate)
+    (let* ((result nil)
+           (flen (length fname))
+           (case-fold-search nil)
+           (inhibit-changing-match-data t)
+           ;; Find a conservative bound for the loop below by using
+           ;; Boyer-Moore on the raw dirstate without parsing it; we
+           ;; know we can't possibly find fname _after_ the last place
+           ;; it appears, so we can bail out early if we try to parse
+           ;; past it, which especially helps when the file we're
+           ;; trying to find isn't in dirstate at all.  There's no way
+           ;; to similarly bound the starting search position, since
+           ;; the file format is such that we need to parse it from
+           ;; the beginning to find record boundaries.
+           (search-limit
+            (progn
+              (goto-char (point-max))
+              (or (search-backward fname (+ (point-min) 40) t)
+                  (point-min)))))
+      ;; 40 is just after the header, which contains the working
+      ;; directory parents
+      (goto-char (+ (point-min) 40))
+      ;; Iterate over all dirstate entries; we might run this loop
+      ;; hundreds of thousands of times, so performance is important
+      ;; here
+      (while (< (point) search-limit)
+        ;; 1+4*4 is the length of the dirstate item header, which we
+        ;; spell as a literal for performance, since the elisp
+        ;; compiler lacks constant propagation
+        (forward-char (1+ (* 3 4)))
+        (let ((this-flen (vc-hg--read-u32-be)))
+          (if (and (or (eq this-flen flen)
+                       (and (> this-flen flen)
+                            (eq (char-after (+ (point) flen)) 0)))
+                   (search-forward fname (+ (point) flen) t))
+              (progn
+                (backward-char (+ flen (1+ (* 4 4))))
+                (setf result
+                      (list (vc-hg--read-u8)     ; status
+                            (vc-hg--read-u32-be) ; mode
+                            (vc-hg--read-u32-be) ; size (of file)
+                            (vc-hg--read-u32-be) ; mtime
+                            ))
+                (goto-char (point-max)))
+            (forward-char this-flen))))
+      result)))
+
+(define-error 'vc-hg-unsupported-syntax "unsupported hgignore syntax")
+
+(defconst vc-hg--pcre-c-escapes
+  '((?a . ?\a)
+    (?b . ?\b)
+    (?f . ?\f)
+    (?n . ?\n)
+    (?r . ?\r)
+    (?t . ?\t)
+    (?n . ?\n)
+    (?r . ?\r)
+    (?t . ?\t)
+    (?v . ?\v)))
+
+(defconst vc-hg--pcre-metacharacters
+  '(?. ?^ ?$ ?* ?+ ?? ?{ ?\\ ?\[ ?\| ?\())
+
+(defconst vc-hg--elisp-metacharacters
+  '(?. ?* ?+ ?? ?\[ ?$ ?\\))
+
+(defun vc-hg--escape-for-pcre (c)
+  (if (memq c vc-hg--pcre-metacharacters)
+      (string ?\\ c)
+    c))
+
+(defun vc-hg--parts-to-string (parts)
+  "Build a string from list PARTS.  Each element is a character or string."
+  (let ((parts2 nil))
+    (while parts
+      (let* ((partcell (prog1 parts (setf parts (cdr parts))))
+             (part (car partcell)))
+        (if (stringp part)
+            (setf parts2 (nconc (append part nil) parts2))
+          (setcdr partcell parts2)
+          (setf parts2 partcell))))
+    (apply #'string parts2)))
+
+(defun vc-hg--pcre-to-elisp-re (pcre prefix)
+  "Transform PCRE, a Mercurial file PCRE, into an elisp RE against PREFIX.
+PREFIX is the directory name of the directory against which these
+patterns are rooted.  We understand only a subset of PCRE syntax;
+if we don't understand a construct, we signal
+`vc-hg-unsupported-syntax'."
+  (cl-assert (string-match "^/\\(.*/\\)?$" prefix))
+  (let ((parts nil)
+        (i 0)
+        (anchored nil)
+        (state 'normal)
+        (pcrelen (length pcre)))
+    (while (< i pcrelen)
+      (let ((c (aref pcre i)))
+        (cond ((eq state 'normal)
+               (cond ((string-match
+                       (rx (| "}\\?" (: "(?" (not (any ":")))))
+                       pcre i)
+                      (signal 'vc-hg-unsupported-syntax (list pcre)))
+                     ((eq c ?\\)
+                      (setf state 'backslash))
+                     ((eq c ?\[)
+                      (setf state 'charclass-enter)
+                      (push c parts))
+                     ((eq c ?^)
+                      (if (eq i 0) (setf anchored t)
+                        (signal 'vc-hg-unsupported-syntax (list pcre))))
+                     ((eq c ?$)
+                      ;; Patterns can also match directories exactly,
+                      ;; ignoring everything under a matched directory
+                      (push "\\(?:$\\|/\\)" parts))
+                     ((memq c '(?| ?\( ?\)))
+                      (push ?\\ parts)
+                      (push c parts))
+                     (t (push c parts))))
+              ((eq state 'backslash)
+               (cond ((memq c '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9
+                                ?A ?b ?B ?d ?D ?s ?S ?w ?W ?Z ?x))
+                      (signal 'vc-hg-unsupported-syntax (list pcre)))
+                     ((memq c vc-hg--elisp-metacharacters)
+                      (push ?\\ parts)
+                      (push c parts))
+                     (t (push (or (cdr (assq c vc-hg--pcre-c-escapes)) c) parts)))
+               (setf state 'normal))
+              ((eq state 'charclass-enter)
+               (push c parts)
+               (setf state
+                     (if (eq c ?\\)
+                         'charclass
+                       'charclass-backslash)))
+              ((eq state 'charclass-backslash)
+               (if (memq c '(?0 ?x))
+                   (signal 'vc-hg-unsupported-syntax (list pcre)))
+               (push (or (cdr (assq c vc-hg--pcre-c-escapes)) c) parts)
+               (setf state 'charclass))
+              ((eq state 'charclass)
+               (push c parts)
+               (cond ((eq c ?\\) (setf state 'charclass-backslash))
+                     ((eq c ?\]) (setf state 'normal))))
+              (t (error "invalid state")))
+        (setf i (1+ i))))
+    (unless (eq state 'normal)
+      (signal 'vc-hg-unsupported-syntax (list pcre)))
+    (concat
+     "^"
+     prefix
+     (if anchored "" "\\(?:.*/\\)?")
+     (vc-hg--parts-to-string parts))))
+
+(defun vc-hg--glob-to-pcre (glob)
+  "Transform a glob pattern into a Mercurial file pattern regex."
+  (let ((parts nil) (i 0) (n (length glob)) (group 0) c)
+    (cl-macrolet ((peek () '(and (< i n) (aref glob i))))
+      (while (< i n)
+        (setf c (aref glob i))
+        (cl-incf i)
+        (cond ((not (memq c '(?* ?? ?\[ ?\{ ?\} ?, ?\\)))
+               (push (vc-hg--escape-for-pcre c) parts))
+              ((eq c ?*)
+               (cond ((eq (peek) ?*)
+                      (cl-incf i)
+                      (cond ((eq (peek) ?/)
+                             (cl-incf i)
+                             (push "(?:.*/)?" parts))
+                            (t
+                             (push ".*" parts))))
+                     (t (push "[^/]*" parts))))
+              ((eq c ??)
+               (push ?. parts))
+              ((eq c ?\[)
+               (let ((j i))
+                 (when (and (< j n) (memq (aref glob j) '(?! ?\])))
+                   (cl-incf j))
+                 (while (and (< j n) (not (eq (aref glob j) ?\])))
+                   (cl-incf j))
+                 (cond ((>= j n)
+                        (push "\\[" parts))
+                       (t
+                        (let ((x (substring glob i j)))
+                          (setf x (replace-regexp-in-string
+                                   "\\\\" "\\\\" x t t))
+                          (setf i (1+ j))
+                          (cond ((eq (aref x 0) ?!)
+                                 (setf (aref x 0) ?^))
+                                ((eq (aref x 0) ?^)
+                                 (setf x (concat "\\" x))))
+                          (push ?\[ parts)
+                          (push x parts)
+                          (push ?\] parts))))))
+              ((eq c ?\{)
+               (cl-incf group)
+               (push "(?:" parts))
+              ((eq c ?\})
+               (push ?\) parts)
+               (cl-decf group))
+              ((and (eq c ?,) (> group 0))
+               (push ?| parts))
+              ((eq c ?\\)
+               (if (eq i n)
+                   (push "\\\\" parts)
+                 (cl-incf i)
+                 (push ?\\ parts)
+                 (push c parts)))
+              (t
+               (push (vc-hg--escape-for-pcre c) parts)))))
+    (concat (vc-hg--parts-to-string parts) "$")))
+
+(defvar vc-hg--hgignore-patterns)
+(defvar vc-hg--hgignore-filenames)
+
+(defun vc-hg--hgignore-add-pcre (pcre prefix)
+  (push (vc-hg--pcre-to-elisp-re pcre prefix) vc-hg--hgignore-patterns))
+
+(defun vc-hg--hgignore-add-glob (glob prefix)
+  (push (vc-hg--pcre-to-elisp-re (vc-hg--glob-to-pcre glob) prefix)
+        vc-hg--hgignore-patterns))
+
+(defun vc-hg--hgignore-add-path (path prefix)
+  (let ((parts nil))
+    (dotimes (i (length path))
+      (push (vc-hg--escape-for-pcre (aref path i)) parts))
+    (vc-hg--hgignore-add-pcre
+     (concat "^" (vc-hg--parts-to-string parts) "$")
+     prefix)))
+
+(defun vc-hg--slurp-hgignore-1 (hgignore prefix)
+  (let ((default-syntax 'vc-hg--hgignore-add-glob))
+    (with-temp-buffer
+      (let ((attr (file-attributes hgignore)))
+        (when attr (insert-file-contents hgignore))
+        (push (list hgignore (nth 5 attr) (nth 7 attr))
+              vc-hg--hgignore-filenames))
+      (while (not (eobp))
+        ;; This list of pattern-file commands isn't complete, but it
+        ;; should cover the common cases.  Remember that we fall back
+        ;; to regular hg commands if we see something we don't like.
+        (save-restriction
+          (narrow-to-region (point) (point-at-eol))
+          (cond ((looking-at "[ \t]*\\(?:#.*\\)?$"))
+                ((looking-at "syntax:[ \t]*re[ \t]*$")
+                 (setf default-syntax 'vc-hg--hgignore-add-pcre))
+                ((looking-at "syntax:[ \t]*glob[ \t]*$")
+                 (setf default-syntax 'vc-hg--hgignore-add-glob))
+                ((looking-at "path:\\(.+?\\)[ \t]*$")
+                 (vc-hg--hgignore-add-path (match-string 1) prefix))
+                ((looking-at "glob:\\(.+?\\)[ \t]*$")
+                 (vc-hg--hgignore-add-glob (match-string 1) prefix))
+                ((looking-at "re:\\(.+?\\)[ \t]*$")
+                 (vc-hg--hgignore-add-pcre (match-string 1) prefix))
+                ((looking-at "\\(sub\\)?include:\\(.+?\\)[ \t]*$")
+                 (let* ((sub (equal (match-string 1) "sub"))
+                        (arg (match-string 2))
+                        (included-file
+                         (if (string-match "^/" arg) arg
+                           (concat (file-name-directory hgignore) arg))))
+                   (vc-hg--slurp-hgignore-1
+                    included-file
+                    (if sub (file-name-directory included-file) prefix))))
+                ((looking-at "[a-zA-Z0-9_]*:")
+                 (signal 'vc-hg-unsupported-syntax (list (match-string 0))))
+                ((looking-at ".*$")
+                 (funcall default-syntax (match-string 0) prefix))))
+        (forward-line 1)))))
+
+(cl-defstruct (vc-hg--ignore-patterns
+                (:copier nil)
+                (:constructor vc-hg--ignore-patterns-make))
+  repo
+  ignore-patterns
+  file-sources)
+
+(defun vc-hg--slurp-hgignore (repo)
+  "Read hg ignore patterns from REPO.
+REPO must be the directory name of an hg repository."
+  (cl-assert (string-match "^/\\(.*/\\)?$" repo))
+  (let* ((hgignore (concat repo ".hgignore"))
+         (vc-hg--hgignore-patterns nil)
+         (vc-hg--hgignore-filenames nil))
+    (vc-hg--slurp-hgignore-1 hgignore repo)
+    (vc-hg--ignore-patterns-make
+     :repo repo
+     :ignore-patterns (nreverse vc-hg--hgignore-patterns)
+     :file-sources (nreverse vc-hg--hgignore-filenames))))
+
+(defun vc-hg--ignore-patterns-valid-p (hgip)
+  "Return whether the cached ignore patterns in HGIP are still valid"
+  (let ((valid t)
+        (file-sources (vc-hg--ignore-patterns-file-sources hgip)))
+    (while (and file-sources valid)
+      (let* ((fs (pop file-sources))
+             (saved-mtime (nth 1 fs))
+             (saved-size (nth 2 fs))
+             (attr (file-attributes (nth 0 fs)))
+             (current-mtime (nth 5 attr))
+             (current-size (nth 7 attr)))
+        (unless (and (equal saved-mtime current-mtime)
+                     (equal saved-size current-size))
+          (setf valid nil))))
+    valid))
+
+(defun vc-hg--ignore-patterns-ignored-p (hgip filename)
+  "Test whether the ignore pattern set HGIP says to ignore FILENAME.
+FILENAME must be the file's true absolute name."
+  (let ((patterns (vc-hg--ignore-patterns-ignore-patterns hgip))
+        (inhibit-changing-match-data t)
+        (ignored nil))
+    (while (and patterns (not ignored))
+      (setf ignored (string-match (pop patterns) filename)))
+    ignored))
+
+(defun vc-hg--time-to-fixnum (ts)
+  (+ (* 65536 (car ts)) (cadr ts)))
+
+(defvar vc-hg--cached-ignore-patterns nil
+  "Cached pre-parsed hg ignore patterns.")
+
+(defun vc-hg--file-ignored-p (repo repo-relative-filename)
+  (let ((hgip vc-hg--cached-ignore-patterns))
+    (unless (and hgip
+                 (equal repo (vc-hg--ignore-patterns-repo hgip))
+                 (vc-hg--ignore-patterns-valid-p hgip))
+      (setf vc-hg--cached-ignore-patterns nil)
+      (setf hgip (vc-hg--slurp-hgignore repo))
+      (setf vc-hg--cached-ignore-patterns hgip))
+    (vc-hg--ignore-patterns-ignored-p
+     hgip
+     (concat repo repo-relative-filename))))
+
+(defun vc-hg--read-repo-requirements (repo)
+  (cl-assert (string-match "^/\\(.*/\\)?$" repo))
+  (let* ((requires-filename (concat repo ".hg/requires")))
+    (and (file-exists-p requires-filename)
+         (with-temp-buffer
+           (set-buffer-multibyte nil)
+           (insert-file-contents-literally requires-filename)
+           (split-string (buffer-substring-no-properties
+                          (point-min) (point-max)))))))
+
+(defconst vc-hg-supported-requirements
+  '("dotencode"
+    "fncache"
+    "generaldelta"
+    "lz4revlog"
+    "remotefilelog"
+    "revlogv1"
+    "store")
+  "List of Mercurial repository requirements we understand; if a
+repository requires features not present in this list, we avoid
+attempting to parse Mercurial data structures.")
+
+(defun vc-hg--requirements-understood-p (repo)
+  "Check that we understand the format of the given repository.
+REPO is the directory name of a Mercurial repository."
+  (null (cl-set-difference (vc-hg--read-repo-requirements repo)
+                           vc-hg-supported-requirements
+                           :test #'equal)))
+
+(defvar vc-hg--dirstate-scan-cache nil
+  "Cache of the last result of `vc-hg--raw-dirstate-search'.
+Avoids the need to repeatedly scan dirstate on repeated calls to
+`vc-hg-state', as we see during registration queries.")
+
+(defun vc-hg--cached-dirstate-search (dirstate dirstate-attr ascii-fname)
+  (let* ((mtime (nth 5 dirstate-attr))
+         (size (nth 7 dirstate-attr))
+         (cache vc-hg--dirstate-scan-cache)
+         )
+    (if (and cache
+             (equal dirstate (pop cache))
+             (equal mtime (pop cache))
+             (equal size (pop cache))
+             (equal ascii-fname (pop cache)))
+        (pop cache)
+      (let ((result (vc-hg--raw-dirstate-search dirstate ascii-fname)))
+        (setf vc-hg--dirstate-scan-cache
+              (list dirstate mtime size ascii-fname result))
+        result))))
+
+(defun vc-hg-state-fast (filename)
+  "Like `vc-hg-state', but parse internal data structures directly.
+Returns one of the usual `vc-state' enumeration values or
+`unsupported' if we need to take the slow path and run the
+hg binary."
+  (let* (truename
+         repo
+         dirstate
+         dirstate-attr
+         repo-relative-filename
+         ascii-fname)
+    (if (or
+         ;; Explicit user disable
+         (not vc-hg-parse-hg-data-structures)
+         ;; It'll probably be faster to run hg remotely
+         (file-remote-p filename)
+         (progn
+           (setf truename (file-truename filename))
+           (file-remote-p truename))
+         (not (setf repo (vc-hg-root truename)))
+         ;; dirstate must exist
+         (not (progn
+                (setf repo (expand-file-name repo))
+                (cl-assert (string-match "^/\\(.*/\\)?$" repo))
+                (setf dirstate (concat repo ".hg/dirstate"))
+                (setf dirstate-attr (file-attributes dirstate))))
+         ;; Repository must be in an understood format
+         (not (vc-hg--requirements-understood-p repo))
+         ;; Dirstate too small to be valid
+         (< (nth 7 dirstate-attr) 40)
+         ;; We want to store 32-bit unsigned values in fixnums
+         (< most-positive-fixnum 4294967295)
+         (progn
+           (setf repo-relative-filename
+                 (file-relative-name truename repo))
+           (setf ascii-fname
+                 (string-as-unibyte
+                  (let (last-coding-system-used)
+                    (encode-coding-string
+                     repo-relative-filename
+                     'us-ascii t))))
+           ;; We only try dealing with ASCII filenames
+           (not (equal ascii-fname repo-relative-filename))))
+        'unsupported
+      (let* ((dirstate-entry
+              (vc-hg--cached-dirstate-search
+               dirstate dirstate-attr ascii-fname))
+             (state (car dirstate-entry))
+             (stat (file-attributes
+                    (concat repo repo-relative-filename))))
+        (cond ((eq state ?r) 'removed)
+              ((and (not state) stat)
+               (condition-case nil
+                   (if (vc-hg--file-ignored-p repo repo-relative-filename)
+                       'ignored
+                     'unregistered)
+                 (vc-hg-unsupported-syntax 'unsupported)))
+              ((and state (not stat)) 'missing)
+              ((eq state ?n)
+               (let ((vc-hg-size (nth 2 dirstate-entry))
+                     (vc-hg-mtime (nth 3 dirstate-entry))
+                     (fs-size (nth 7 stat))
+                     (fs-mtime (vc-hg--time-to-fixnum (nth 5 stat))))
+                 (if (and (eql vc-hg-size fs-size) (eql vc-hg-mtime fs-mtime))
+                     'up-to-date
+                   'edited)))
+              ((eq state ?a) 'added)
+              (state 'unsupported))))))
+
 ;;; Miscellaneous
 
 (defun vc-hg-previous-revision (_file rev)
index b3644cc1ac5e9ae9eb51e8bc22ea2179a5b8331f..6b4cd6acd037cc31c782d984a3633ece0464e561 100644 (file)
@@ -206,17 +206,17 @@ VC commands are globally reachable under the prefix `\\[vc-prefix-map]':
           (not (memq property vc-touched-properties)))
       (setq vc-touched-properties (append (list property)
                                          vc-touched-properties)))
-  (put (intern file vc-file-prop-obarray) property value))
+  (put (intern (expand-file-name file) vc-file-prop-obarray) property value))
 
 (defun vc-file-getprop (file property)
   "Get per-file VC PROPERTY for FILE."
-  (get (intern file vc-file-prop-obarray) property))
+  (get (intern (expand-file-name file) vc-file-prop-obarray) property))
 
 (defun vc-file-clearprops (file)
   "Clear all VC properties of FILE."
   (if (boundp 'vc-parent-buffer)
       (kill-local-variable 'vc-parent-buffer))
-  (setplist (intern file vc-file-prop-obarray) nil))
+  (setplist (intern (expand-file-name file) vc-file-prop-obarray) nil))
 
 \f
 ;; We keep properties on each symbol naming a backend as follows:
@@ -468,16 +468,20 @@ status of this file.  Otherwise, the value returned is one of:
 
   `unregistered'     The file is not under version control."
 
-  ;; Note: in Emacs 22 and older, return of nil meant the file was
-  ;; unregistered.  This is potentially a source of
-  ;; backward-compatibility bugs.
+  ;; Note: we usually return nil here for unregistered files anyway
+  ;; when called with only one argument.  This doesn't seem to cause
+  ;; any problems.  But if we wanted to change that, we should
+  ;; probably opt for redefining the `registered' command to return
+  ;; non-nil even for unregistered files (maybe also rename it), and
+  ;; then make sure that all `state' implementations handle
+  ;; unregistered file appropriately.
 
   ;; FIXME: New (sub)states needed (?):
   ;; - `copied' and `moved' (might be handled by `removed' and `added')
   (or (vc-file-getprop file 'vc-state)
       (when (> (length file) 0)         ;Why??  --Stef
-       (setq backend (or backend (vc-backend file)))
-       (when backend
+        (setq backend (or backend (vc-backend file)))
+        (when backend
           (vc-state-refresh file backend)))))
 
 (defun vc-state-refresh (file backend)
@@ -495,10 +499,11 @@ status of this file.  Otherwise, the value returned is one of:
 If FILE is not registered, this function always returns nil."
   (or (vc-file-getprop file 'vc-working-revision)
       (progn
-       (setq backend (or backend (vc-backend file)))
-       (when backend
-         (vc-file-setprop file 'vc-working-revision
-                          (vc-call-backend backend 'working-revision file))))))
+        (setq backend (or backend (vc-backend file)))
+        (when backend
+          (vc-file-setprop file 'vc-working-revision
+                           (vc-call-backend
+                            backend 'working-revision file))))))
 
 ;; Backward compatibility.
 (define-obsolete-function-alias
@@ -807,15 +812,15 @@ In the latter case, VC mode is deactivated for this buffer."
     (add-hook 'vc-mode-line-hook 'vc-mode-line nil t)
     (let (backend)
       (cond
-       ((setq backend (with-demoted-errors (vc-backend buffer-file-name)))
+        ((setq backend (with-demoted-errors (vc-backend buffer-file-name)))
+         ;; Let the backend setup any buffer-local things he needs.
+         (vc-call-backend backend 'find-file-hook)
        ;; Compute the state and put it in the mode line.
        (vc-mode-line buffer-file-name backend)
        (unless vc-make-backup-files
          ;; Use this variable, not make-backup-files,
          ;; because this is for things that depend on the file name.
-         (set (make-local-variable 'backup-inhibited) t))
-       ;; Let the backend setup any buffer-local things he needs.
-       (vc-call-backend backend 'find-file-hook))
+          (set (make-local-variable 'backup-inhibited) t)))
        ((let* ((truename (and buffer-file-truename
                              (expand-file-name buffer-file-truename)))
               (link-type (and truename
index 8d58611cb5bc11aef28e01b0afda65cebbd03205..b972956b1096b297a192c717b4337dfea8e4fe56 100644 (file)
@@ -120,7 +120,9 @@ For a description of possible values, see `vc-check-master-templates'."
       (setq result (vc-file-getprop file 'vc-checkout-model)))
     (or result
         (progn (vc-rcs-fetch-master-state file)
-               (vc-file-getprop file 'vc-checkout-model)))))
+               (vc-file-getprop file 'vc-checkout-model))
+        ;; For non-existing files we assume strict locking.
+        'locking)))
 
 ;;;
 ;;; State-querying functions
index 77188a51ee3b03e5f5895b85a2a89fe406805937..dc228870d1ec8775dffb1530e93bdd0cd1f1a754 100644 (file)
@@ -38,13 +38,11 @@ This variable first existed in version 19.23.")
   "Minor version number of this version of Emacs.
 This variable first existed in version 19.23.")
 
-(defconst emacs-build-time (current-time)
-  "Time at which Emacs was dumped out.")
-
-;; I think this should be obsoleted/removed.  It's just one more meaningless
-;; difference between different builds.  It's usually not even an fqdn.
 (defconst emacs-build-system (system-name)
-  "Name of the system on which Emacs was built.")
+  "Name of the system on which Emacs was built, or nil if not available.")
+
+(defconst emacs-build-time (if emacs-build-system (current-time))
+  "Time at which Emacs was dumped out, or nil if not available.")
 
 (defvar motif-version-string)
 (defvar gtk-version-string)
@@ -58,9 +56,7 @@ Don't use this function in programs to choose actions according
 to the system configuration; look at `system-configuration' instead."
   (interactive "P")
   (let ((version-string
-         (format (if (not (called-interactively-p 'interactive))
-                    "GNU Emacs %s (%s%s%s%s)\n of %s"
-                  "GNU Emacs %s (%s%s%s%s) of %s")
+         (format "GNU Emacs %s (%s%s%s%s)%s"
                  emacs-version
                 system-configuration
                 (cond ((featurep 'motif)
@@ -79,7 +75,14 @@ to the system configuration; look at `system-configuration' instead."
                     (format ", %s scroll bars"
                             (capitalize (symbol-name x-toolkit-scroll-bars)))
                   "")
-                (format-time-string "%Y-%m-%d" emacs-build-time))))
+                (if emacs-build-time
+                    (format-time-string (concat
+                                         (if (called-interactively-p
+                                              'interactive)
+                                             "" "\n")
+                                         " of %Y-%m-%d")
+                                        emacs-build-time)
+                  ""))))
     (if here
         (insert version-string)
       (if (called-interactively-p 'interactive)
index 472355741b815ac1e640116592e77869ea1a046a..690a99020878aa3eaf61f1dd3f8a6091f005c507 100644 (file)
@@ -200,8 +200,7 @@ certain patterns.
 This function is called by `convert-standard-filename'.
 
 Replace invalid characters and turn Cygwin names into native
-names, and also turn slashes into backslashes if the shell
-requires it (see `w32-shell-dos-semantics')."
+names."
   (save-match-data
     (let ((name
           (if (string-match "\\`/cygdrive/\\([a-zA-Z]\\)/" filename)
@@ -216,13 +215,6 @@ requires it (see `w32-shell-dos-semantics')."
       (while (string-match "[?*:<>|\"\000-\037]" name start)
        (aset name (match-beginning 0) ?!)
        (setq start (match-end 0)))
-      ;; convert directory separators to Windows format
-      ;; (but only if the shell in use requires it)
-      (when (w32-shell-dos-semantics)
-       (setq start 0)
-       (while (string-match "/" name start)
-         (aset name (match-beginning 0) ?\\)
-         (setq start (match-end 0))))
       name)))
 
 (defun set-w32-system-coding-system (coding-system)
index 16ea67dba5651e00f653d63c7fcb2f86a451ae9f..2e68bec6fd74153be7f975a908ff00e6454ded07 100644 (file)
@@ -152,6 +152,16 @@ renamed by `dired-do-rename' and `dired-do-rename-regexp'."
   :version "24.3"
   :group 'wdired)
 
+(defcustom wdired-create-parent-directories t
+  "If non-nil, create parent directories of destination files.
+If non-nil, when you rename a file to a destination path within a
+nonexistent directory, wdired will create any parent directories
+necessary.  When nil, attempts to rename a file into a
+nonexistent directory will fail."
+  :version "25.2"
+  :type 'boolean
+  :group 'wdired)
+
 (defvar wdired-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "\C-x\C-s" 'wdired-finish-edit)
@@ -492,6 +502,8 @@ non-nil means return old filename."
               (require 'dired-aux)
               (condition-case err
                   (let ((dired-backup-overwrite nil))
+                    (and wdired-create-parent-directories
+                         (wdired-create-parentdirs file-new))
                     (dired-rename-file file-ori file-new
                                        overwrite))
                 (error
@@ -501,6 +513,11 @@ non-nil means return old filename."
                             err)))))))))
     errors))
 
+(defun wdired-create-parentdirs (file-new)
+  "Create parent directories for FILE-NEW if they don't exist."
+  (and (not (file-exists-p (file-name-directory file-new)))
+       (message "Creating directory for file %s" file-new)
+       (make-directory (file-name-directory file-new) t)))
 
 (defun wdired-exit ()
   "Exit wdired and return to dired mode.
index 53bf363daa4ce4e1f3435808a0cadb6a03fceec5..af906bab38fda4d35cc838f2a7568e0a590d411e 100644 (file)
@@ -528,14 +528,14 @@ these values is:
    2. space-before-tab::tab
    3. space-before-tab::space
 
-So, for example, if indentation and indentation::space are
-included in `whitespace-style' list, the indentation value is
-evaluated instead of indentation::space value.
-
-One reason for not visualize spaces via faces (if `face' is not
-included in `whitespace-style') is to use exclusively for
-cleaning up a buffer.  See `whitespace-cleanup' and
-`whitespace-cleanup-region' for documentation.
+For example, if `indentation' and `indentation::space' are
+included in `whitespace-style', the `indentation' value is used
+instead of the `indentation::space' value.
+
+One reason to not use faces to visualize spaces (i.e., not
+include `face' in `whitespace-style') is to use `whitespace-mode'
+only for cleaning up a buffer.  See `whitespace-cleanup' and
+`whitespace-cleanup-region'.
 
 See also `whitespace-display-mappings' for documentation."
   :type '(set :tag "Kind of Blank"
index f7a547b915a08a403479f8298b37fda98695def2..bd5275bffc9ad4ba47d1afbcfacb1c4501e5429b 100644 (file)
@@ -6746,6 +6746,71 @@ that frame."
        (unless (cdr (assq 'inhibit-switch-frame alist))
          (window--maybe-raise-frame (window-frame window)))))))
 
+(defun display-buffer-reuse-mode-window (buffer alist)
+  "Return a window based on the mode of the buffer it displays.
+Display BUFFER in the returned window.  Return nil if no usable
+window is found.
+
+If ALIST contains a `mode' entry, its value is a major mode (a
+symbol) or a list of modes.  A window is a candidate if it
+displays a buffer that derives from one of the given modes.  When
+ALIST contains no `mode' entry, the current major mode of BUFFER
+is used.
+
+The behaviour is also controlled by entries for
+`inhibit-same-window', `reusable-frames' and
+`inhibit-switch-frame' as is done in the function
+`display-buffer-reuse-window'."
+  (let* ((alist-entry (assq 'reusable-frames alist))
+         (alist-mode-entry (assq 'mode alist))
+        (frames (cond (alist-entry (cdr alist-entry))
+                      ((if (eq pop-up-frames 'graphic-only)
+                           (display-graphic-p)
+                         pop-up-frames)
+                       0)
+                      (display-buffer-reuse-frames 0)
+                      (t (last-nonminibuffer-frame))))
+         (inhibit-same-window-p (cdr (assq 'inhibit-same-window alist)))
+        (windows (window-list-1 nil 'nomini frames))
+         (buffer-mode (with-current-buffer buffer major-mode))
+         (allowed-modes (if alist-mode-entry
+                            (cdr alist-mode-entry)
+                          buffer-mode))
+         (curwin (selected-window))
+         (curframe (selected-frame)))
+    (unless (listp allowed-modes)
+      (setq allowed-modes (list allowed-modes)))
+    (let (same-mode-same-frame
+          same-mode-other-frame
+          derived-mode-same-frame
+          derived-mode-other-frame)
+      (dolist (window windows)
+        (let (mode? frame?)
+          (with-current-buffer (window-buffer window)
+            (setq mode?
+                  (cond ((memq major-mode allowed-modes)
+                         'same)
+                        ((derived-mode-p allowed-modes)
+                         'derived))))
+          (when (and mode?
+                     (not (and inhibit-same-window-p
+                               (eq window curwin))))
+            (if (eq curframe (window-frame window))
+                (if (eq mode? 'same)
+                    (push window same-mode-same-frame)
+                  (push window derived-mode-same-frame))
+              (if (eq mode? 'same)
+                  (push window same-mode-other-frame)
+                (push window derived-mode-other-frame))))))
+      (let ((window (car (nconc same-mode-same-frame
+                                same-mode-other-frame
+                                derived-mode-same-frame
+                                derived-mode-other-frame))))
+        (when (window-live-p window)
+          (prog1 (window--display-buffer buffer window 'reuse alist)
+            (unless (cdr (assq 'inhibit-switch-frame alist))
+              (window--maybe-raise-frame (window-frame window)))))))))
+
 (defun display-buffer--special-action (buffer)
   "Return special display action for BUFFER, if any.
 If `special-display-p' returns non-nil for BUFFER, return an
index 4b277008d7845d46a334c04fead04594f735e2d8..9a6f5d5190be1f82455003e6178120f73bb3bf7c 100644 (file)
@@ -346,7 +346,19 @@ You may want to include buffer names such as *Help*, *Apropos*,
 
 \f
 ;;;###autoload
-(define-minor-mode winner-mode nil :global t ; let d-m-m make the doc
+(define-minor-mode winner-mode
+  "Toggle Winner mode on or off.
+With a prefix argument ARG, enable Winner mode if ARG is
+positive, and disable it otherwise.  If called from Lisp, enable
+the mode if ARG is omitted or nil, and toggle it if ARG is ‘toggle’.
+
+Winner mode is a global minor mode that records the changes in
+the window configuration (i.e. how the frames are partitioned
+into windows) so that the changes can be \"undone\" using the
+command `winner-undo'.  By default this one is bound to the key
+sequence `C-c <left>'.  If you change your mind (while undoing),
+you can press `C-c <right>' (calling `winner-redo')."
+  :global t
   (if winner-mode
       (progn
         (add-hook 'window-configuration-change-hook 'winner-change-fun)
index cc863f3d21f138a24d9fc171f4769660a838e8bd..94af056ea624a296b9eacd5538f4b5add1c5b9bf 100644 (file)
@@ -44,6 +44,7 @@ RANLIB=@RANLIB@
 AR = @AR@
 ARFLAGS = @ARFLAGS@
 MKDIR_P = @MKDIR_P@
+EXEEXT = @EXEEXT@
 
 LUCID_OBJS = lwlib-Xlw.o xlwmenu.o lwlib-Xaw.o
 MOTIF_OBJS = lwlib-Xm.o
@@ -128,15 +129,17 @@ distclean: clean
 bootstrap-clean maintainer-clean: distclean
        rm -f TAGS
 
+ETAGS = ../lib-src/etags${EXEEXT}
 
-ETAGS = ../lib-src/etags
+${ETAGS}: FORCE
+       ${MAKE} -C ../lib-src $(notdir $@)
 
-ctagsfiles= $(srcdir)/*.[ch]
+ctagsfiles= $(wildcard ${srcdir}/*.[ch])
 
-TAGS: $(ctagsfiles)
-       "$(ETAGS)" $(ctagsfiles)
+FORCE:
+.PHONY: tags FORCE
 tags: TAGS
-.PHONY: tags
-
+TAGS: ${ETAGS} $(ctagsfiles)
+       ${ETAGS} $(ctagsfiles)
 
 ### Makefile.in ends here
index 547af6641a1742dd193ca66ac63d47887f30a9be..5a3fc98597ca02d0eafc953086244d9ba86fc215 100644 (file)
@@ -78,6 +78,7 @@ AC_DEFUN([gl_EARLY],
   # Code from module fdatasync:
   # Code from module fdopendir:
   # Code from module filemode:
+  # Code from module filevercmp:
   # Code from module fpending:
   # Code from module fstatat:
   # Code from module fsync:
@@ -126,6 +127,7 @@ AC_DEFUN([gl_EARLY],
   # Code from module ssize_t:
   # Code from module stat:
   # Code from module stat-time:
+  # Code from module std-gnu11:
   # Code from module stdalign:
   # Code from module stddef:
   # Code from module stdint:
@@ -888,6 +890,8 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/fdopendir.c
   lib/filemode.c
   lib/filemode.h
+  lib/filevercmp.c
+  lib/filevercmp.h
   lib/fpending.c
   lib/fpending.h
   lib/fstatat.c
@@ -1052,6 +1056,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/st_dm_mode.m4
   m4/stat-time.m4
   m4/stat.m4
+  m4/std-gnu11.m4
   m4/stdalign.m4
   m4/stddef_h.m4
   m4/stdint.m4
diff --git a/m4/std-gnu11.m4 b/m4/std-gnu11.m4
new file mode 100644 (file)
index 0000000..e8d3ebc
--- /dev/null
@@ -0,0 +1,824 @@
+# Prefer GNU C11 and C++11 to earlier versions.  -*- coding: utf-8 -*-
+
+# This implementation is taken from GNU Autoconf lib/autoconf/c.m4
+# commit 739cdc82b5325402231f3f5e1a38f681fcbd1db2
+# dated Tue Mar 15 09:34:11 2016 -0700.
+# This implementation will be obsolete once we can assume Autoconf 2.70
+# or later is installed everywhere a Gnulib program might be developed.
+
+
+# Copyright (C) 2001-2016 Free Software Foundation, Inc.
+
+# 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 <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Akim Demaille, Paul Eggert,
+# François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# AC_PROG_CC([COMPILER ...])
+# --------------------------
+# COMPILER ... is a space separated list of C compilers to search for.
+# This just gives the user an opportunity to specify an alternative
+# search list for the C compiler.
+AC_DEFUN_ONCE([AC_PROG_CC],
+[AC_LANG_PUSH(C)dnl
+AC_ARG_VAR([CC],     [C compiler command])dnl
+AC_ARG_VAR([CFLAGS], [C compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+m4_ifval([$1],
+      [AC_CHECK_TOOLS(CC, [$1])],
+[AC_CHECK_TOOL(CC, gcc)
+if test -z "$CC"; then
+  dnl Here we want:
+  dnl  AC_CHECK_TOOL(CC, cc)
+  dnl but without the check for a tool without the prefix.
+  dnl Until the check is removed from there, copy the code:
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(CC, [${ac_tool_prefix}cc], [${ac_tool_prefix}cc])
+  fi
+fi
+if test -z "$CC"; then
+  AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+fi
+if test -z "$CC"; then
+  AC_CHECK_TOOLS(CC, cl.exe)
+fi
+if test -z "$CC"; then
+  AC_CHECK_TOOL(CC, clang)
+fi
+])
+
+test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH])
+
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion -version; do
+  _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+_AC_PROG_CC_G
+dnl
+dnl Set ac_prog_cc_stdc to the supported C version.
+dnl Also set the documented variable ac_cv_prog_cc_stdc;
+dnl its name was chosen when it was cached, but it is no longer cached.
+_AC_PROG_CC_C11([ac_prog_cc_stdc=c11
+                ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11],
+  [_AC_PROG_CC_C99([ac_prog_cc_stdc=c99
+                   ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99],
+     [_AC_PROG_CC_C89([ac_prog_cc_stdc=c89
+                      ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89],
+                     [ac_prog_cc_stdc=no
+                      ac_cv_prog_cc_stdc=no])])])
+dnl
+AC_LANG_POP(C)dnl
+])# AC_PROG_CC
+
+
+
+# AC_PROG_CXX([LIST-OF-COMPILERS])
+# --------------------------------
+# LIST-OF-COMPILERS is a space separated list of C++ compilers to search
+# for (if not specified, a default list is used).  This just gives the
+# user an opportunity to specify an alternative search list for the C++
+# compiler.
+# aCC  HP-UX C++ compiler much better than `CC', so test before.
+# FCC   Fujitsu C++ compiler
+# KCC  KAI C++ compiler
+# RCC  Rational C++
+# xlC_r        AIX C Set++ (with support for reentrant code)
+# xlC  AIX C Set++
+AC_DEFUN([AC_PROG_CXX],
+[AC_LANG_PUSH(C++)dnl
+AC_ARG_VAR([CXX],      [C++ compiler command])dnl
+AC_ARG_VAR([CXXFLAGS], [C++ compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+_AC_ARG_VAR_PRECIOUS([CCC])dnl
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    AC_CHECK_TOOLS(CXX,
+                  [m4_default([$1],
+                              [g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++])],
+                  g++)
+  fi
+fi
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion; do
+  _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+_AC_PROG_CXX_G
+_AC_PROG_CXX_CXX11([ac_prog_cxx_stdcxx=cxx11
+                   ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
+                   ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11],
+   [_AC_PROG_CXX_CXX98([ac_prog_cxx_stdcxx=cxx98
+                       ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98],
+                      [ac_prog_cxx_stdcxx=no
+                       ac_cv_prog_cxx_stdcxx=no])])
+AC_LANG_POP(C++)dnl
+])# AC_PROG_CXX
+
+
+# _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST,
+#              ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE)
+# --------------------------------------------------------------
+# Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99')
+# by trying to compile a program of TEST-PROLOGUE and TEST-BODY.  If this fails,
+# try again with each compiler option in the space-separated OPTION-LIST; if one
+# helps, append it to CC.  If eventually successful, run ACTION-IF-AVAILABLE,
+# else ACTION-IF-UNAVAILABLE.
+AC_DEFUN([_AC_C_STD_TRY],
+[AC_MSG_CHECKING([for $CC option to enable ]m4_translit($1, [c], [C])[ features])
+AC_CACHE_VAL(ac_cv_prog_cc_$1,
+[ac_cv_prog_cc_$1=no
+ac_save_CC=$CC
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
+for ac_arg in '' $4
+do
+  CC="$ac_save_CC $ac_arg"
+  _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg])
+  test "x$ac_cv_prog_cc_$1" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+])# AC_CACHE_VAL
+ac_prog_cc_stdc_options=
+case "x$ac_cv_prog_cc_$1" in
+  x)
+    AC_MSG_RESULT([none needed]) ;;
+  xno)
+    AC_MSG_RESULT([unsupported]) ;;
+  *)
+    ac_prog_cc_stdc_options=" $ac_cv_prog_cc_$1"
+    CC=$CC$ac_prog_cc_stdc_options
+    AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;;
+esac
+AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6])
+])# _AC_C_STD_TRY
+
+# _AC_C_C99_TEST_HEADER
+# ---------------------
+# A C header suitable for testing for C99.
+AC_DEFUN([_AC_C_C99_TEST_HEADER],
+[[#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+  your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str = "";
+  int number = 0;
+  float fnumber = 0;
+
+  while (*format)
+    {
+      switch (*format++)
+       {
+       case 's': // string
+         str = va_arg (args_copy, const char *);
+         break;
+       case 'd': // int
+         number = va_arg (args_copy, int);
+         break;
+       case 'f': // float
+         fnumber = va_arg (args_copy, double);
+         break;
+       default:
+         break;
+       }
+    }
+  va_end (args_copy);
+  va_end (args);
+
+  return *str && number && fnumber;
+}]])# _AC_C_C99_TEST_HEADER
+
+# _AC_C_C99_TEST_BODY
+# -------------------
+# A C body suitable for testing for C99, assuming the corresponding header.
+AC_DEFUN([_AC_C_C99_TEST_BODY],
+[[
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  success &= test_varargs ("s, d' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+         || dynamic_array[ni.number - 1] != 543);
+]])
+
+# _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# ----------------------------------------------------------------
+# If the C compiler is not in ISO C99 mode by default, try to add an
+# option to output variable CC to make it so.  This macro tries
+# various options that select ISO C99 on some system or another.  It
+# considers the compiler to be in ISO C99 mode if it handles _Bool,
+# // comments, flexible array members, inline, long long int, mixed
+# code and declarations, named initialization of structs, restrict,
+# va_copy, varargs macros, variable declarations in for loops and
+# variable length arrays.
+AC_DEFUN([_AC_PROG_CC_C99],
+[_AC_C_STD_TRY([c99],
+[_AC_C_C99_TEST_HEADER],
+[_AC_C_C99_TEST_BODY],
+dnl Try
+dnl GCC                -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999)
+dnl IBM XL C   -qlanglvl=extc1x (V12.1; does not pass C11 test)
+dnl IBM XL C   -qlanglvl=extc99
+dnl            (pre-V12.1; unused restrictive mode: -qlanglvl=stdc99)
+dnl HP cc      -AC99
+dnl Intel ICC  -std=c99, -c99 (deprecated)
+dnl IRIX       -c99
+dnl Solaris    -D_STDC_C99=
+dnl            cc's -xc99 option uses linker magic to define the external
+dnl            symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99
+dnl            behavior for C library functions.  This is not wanted here,
+dnl            because it means that a single module compiled with -xc99
+dnl            alters C runtime behavior for the entire program, not for
+dnl            just the module.  Instead, define the (private) symbol
+dnl            _STDC_C99, which suppresses a bogus failure in <stdbool.h>.
+dnl            The resulting compiler passes the test case here, and that's
+dnl            good enough.  For more, please see the thread starting at:
+dnl            http://lists.gnu.org/archive/html/autoconf/2010-12/msg00059.html
+dnl Tru64      -c99
+dnl with extended modes being tried first.
+[[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99]], [$1], [$2])[]dnl
+])# _AC_PROG_CC_C99
+
+
+# _AC_PROG_CC_C11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# ----------------------------------------------------------------
+# If the C compiler is not in ISO C11 mode by default, try to add an
+# option to output variable CC to make it so.  This macro tries
+# various options that select ISO C11 on some system or another.  It
+# considers the compiler to be in ISO C11 mode if it handles _Alignas,
+# _Alignof, _Noreturn, _Static_assert, UTF-8 string literals,
+# duplicate typedefs, and anonymous structures and unions.
+AC_DEFUN([_AC_PROG_CC_C11],
+[_AC_C_STD_TRY([c11],
+[_AC_C_C99_TEST_HEADER[
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+  int_alignment = _Alignof (int),
+  int_array_alignment = _Alignof (int[100]),
+  char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+  int x;
+  _Static_assert (sizeof (int) <= sizeof (long int),
+                  "_Static_assert does not work in struct");
+  long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+  union {
+    struct { int i; int j; };
+    struct { int k; long int l; } w;
+  };
+  int m;
+} v1;
+]],
+[_AC_C_C99_TEST_BODY[
+  v1.i = 2;
+  v1.w.k = 5;
+  _Static_assert ((offsetof (struct anonymous, i)
+                  == offsetof (struct anonymous, w.k)),
+                 "Anonymous union alignment botch");
+]],
+dnl Try
+dnl GCC                -std=gnu11 (unused restrictive mode: -std=c11)
+dnl with extended modes being tried first.
+dnl
+dnl Do not try -qlanglvl=extc1x, because IBM XL C V12.1 (the latest version as
+dnl of September 2012) does not pass the C11 test.  For now, try extc1x when
+dnl compiling the C99 test instead, since it enables _Static_assert and
+dnl _Noreturn, which is a win.  If -qlanglvl=extc11 or -qlanglvl=extc1x passes
+dnl the C11 test in some future version of IBM XL C, we'll add it here,
+dnl preferably extc11.
+[[-std=gnu11]], [$1], [$2])[]dnl
+])# _AC_PROG_CC_C11
+
+
+# AC_PROG_CC_C89
+# --------------
+# Do not use AU_ALIAS here and in AC_PROG_CC_C99 and AC_PROG_CC_STDC,
+# as that'd be incompatible with how Automake redefines AC_PROG_CC.  See
+# <http://lists.gnu.org/archive/html/autoconf/2012-10/msg00048.html>.
+AU_DEFUN([AC_PROG_CC_C89],
+  [AC_REQUIRE([AC_PROG_CC])],
+  [$0 is obsolete; use AC_PROG_CC]
+)
+
+# AC_PROG_CC_C99
+# --------------
+AU_DEFUN([AC_PROG_CC_C99],
+  [AC_REQUIRE([AC_PROG_CC])],
+  [$0 is obsolete; use AC_PROG_CC]
+)
+
+# AC_PROG_CC_STDC
+# ---------------
+AU_DEFUN([AC_PROG_CC_STDC],
+  [AC_REQUIRE([AC_PROG_CC])],
+  [$0 is obsolete; use AC_PROG_CC]
+)
+
+
+# AC_C_PROTOTYPES
+# ---------------
+# Check if the C compiler supports prototypes, included if it needs
+# options.
+AC_DEFUN([AC_C_PROTOTYPES],
+[AC_REQUIRE([AC_PROG_CC])dnl
+if test "$ac_prog_cc_stdc" != no; then
+  AC_DEFINE(PROTOTYPES, 1,
+           [Define to 1 if the C compiler supports function prototypes.])
+  AC_DEFINE(__PROTOTYPES, 1,
+           [Define like PROTOTYPES; this can be used by system headers.])
+fi
+])# AC_C_PROTOTYPES
+
+
+# _AC_CXX_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST,
+#                ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE)
+# ----------------------------------------------------------------
+# Check whether the C++ compiler accepts features of STANDARD (e.g
+# `cxx98', `cxx11') by trying to compile a program of TEST-PROLOGUE
+# and TEST-BODY.  If this fails, try again with each compiler option
+# in the space-separated OPTION-LIST; if one helps, append it to CXX.
+# If eventually successful, run ACTION-IF-AVAILABLE, else
+# ACTION-IF-UNAVAILABLE.
+AC_DEFUN([_AC_CXX_STD_TRY],
+[AC_MSG_CHECKING([for $CXX option to enable ]m4_translit(m4_translit($1, [x], [+]), [a-z], [A-Z])[ features])
+AC_LANG_PUSH(C++)dnl
+AC_CACHE_VAL(ac_cv_prog_cxx_$1,
+[ac_cv_prog_cxx_$1=no
+ac_save_CXX=$CXX
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
+for ac_arg in '' $4
+do
+  CXX="$ac_save_CXX $ac_arg"
+  _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_$1=$ac_arg])
+  test "x$ac_cv_prog_cxx_$1" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+])# AC_CACHE_VAL
+ac_prog_cxx_stdcxx_options=
+case "x$ac_cv_prog_cxx_$1" in
+  x)
+    AC_MSG_RESULT([none needed]) ;;
+  xno)
+    AC_MSG_RESULT([unsupported]) ;;
+  *)
+    ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_$1"
+    CXX=$CXX$ac_prog_cxx_stdcxx_options
+    AC_MSG_RESULT([$ac_cv_prog_cxx_$1]) ;;
+esac
+AC_LANG_POP(C++)dnl
+AS_IF([test "x$ac_cv_prog_cxx_$1" != xno], [$5], [$6])
+])# _AC_CXX_STD_TRY
+
+# _AC_CXX_CXX98_TEST_HEADER
+# -------------------------
+# A C++ header suitable for testing for CXX98.
+AC_DEFUN([_AC_CXX_CXX98_TEST_HEADER],
+[[
+#include <algorithm>
+#include <cstdlib>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace test {
+  typedef std::vector<std::string> string_vec;
+  typedef std::pair<int,bool> map_value;
+  typedef std::map<std::string,map_value> map_type;
+  typedef std::set<int> set_type;
+
+  template<typename T>
+  class printer {
+  public:
+    printer(std::ostringstream& os): os(os) {}
+    void operator() (T elem) { os << elem << std::endl; }
+  private:
+    std::ostringstream& os;
+  };
+}
+]])# _AC_CXX_CXX98_TEST_HEADER
+
+# _AC_CXX_CXX98_TEST_BODY
+# -----------------------
+# A C++ body suitable for testing for CXX98, assuming the corresponding header.
+AC_DEFUN([_AC_CXX_CXX98_TEST_BODY],
+[[
+
+try {
+  // Basic string.
+  std::string teststr("ASCII text");
+  teststr += " string";
+
+  // Simple vector.
+  test::string_vec testvec;
+  testvec.push_back(teststr);
+  testvec.push_back("foo");
+  testvec.push_back("bar");
+  if (testvec.size() != 3) {
+    throw std::runtime_error("vector size is not 1");
+  }
+
+  // Dump vector into stringstream and obtain string.
+  std::ostringstream os;
+  for (test::string_vec::const_iterator i = testvec.begin();
+       i != testvec.end(); ++i) {
+    if (i + 1 != testvec.end()) {
+      os << teststr << '\n';
+    }
+  }
+  // Check algorithms work.
+  std::for_each(testvec.begin(), testvec.end(), test::printer<std::string>(os));
+  std::string os_out = os.str();
+
+  // Test pair and map.
+  test::map_type testmap;
+  testmap.insert(std::make_pair(std::string("key"),
+                                std::make_pair(53,false)));
+
+  // Test set.
+  int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  test::set_type testset(values, values + sizeof(values)/sizeof(values[0]));
+  std::list<int> testlist(testset.begin(), testset.end());
+  std::copy(testset.begin(), testset.end(), std::back_inserter(testlist));
+} catch (const std::exception& e) {
+  std::cerr << "Caught exception: " << e.what() << std::endl;
+
+  // Test fstream
+  std::ofstream of("test.txt");
+  of << "Test ASCII text\n" << std::flush;
+  of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl;
+  of.close();
+}
+std::exit(0);
+]])
+
+# _AC_CXX_CXX11_TEST_HEADER
+# -------------------------
+# A C++ header suitable for testing for CXX11.
+AC_DEFUN([_AC_CXX_CXX11_TEST_HEADER],
+[[
+#include <deque>
+#include <functional>
+#include <memory>
+#include <tuple>
+#include <array>
+#include <regex>
+#include <iostream>
+
+namespace cxx11test
+{
+  typedef std::shared_ptr<std::string> sptr;
+  typedef std::weak_ptr<std::string> wptr;
+
+  typedef std::tuple<std::string,int,double> tp;
+  typedef std::array<int, 20> int_array;
+
+  constexpr int get_val() { return 20; }
+
+  struct testinit
+  {
+    int i;
+    double d;
+  };
+
+  class delegate  {
+  public:
+    delegate(int n) : n(n) {}
+    delegate(): delegate(2354) {}
+
+    virtual int getval() { return this->n; };
+  protected:
+    int n;
+  };
+
+  class overridden : public delegate {
+  public:
+    overridden(int n): delegate(n) {}
+    virtual int getval() override final { return this->n * 2; }
+  };
+
+  class nocopy {
+  public:
+    nocopy(int i): i(i) {}
+    nocopy() = default;
+    nocopy(const nocopy&) = delete;
+    nocopy & operator=(const nocopy&) = delete;
+  private:
+    int i;
+  };
+}
+]])# _AC_CXX_CXX11_TEST_HEADER
+
+# _AC_CXX_CXX11_TEST_BODY
+# -----------------------
+# A C++ body suitable for testing for CXX11, assuming the corresponding header.
+AC_DEFUN([_AC_CXX_CXX11_TEST_BODY],
+[[
+{
+  // Test auto and decltype
+  std::deque<int> d;
+  d.push_front(43);
+  d.push_front(484);
+  d.push_front(3);
+  d.push_front(844);
+  int total = 0;
+  for (auto i = d.begin(); i != d.end(); ++i) { total += *i; }
+
+  auto a1 = 6538;
+  auto a2 = 48573953.4;
+  auto a3 = "String literal";
+
+  decltype(a2) a4 = 34895.034;
+}
+{
+  // Test constexpr
+  short sa[cxx11test::get_val()] = { 0 };
+}
+{
+  // Test initialiser lists
+  cxx11test::testinit il = { 4323, 435234.23544 };
+}
+{
+  // Test range-based for and lambda
+  cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  for (int &x : array) { x += 23; }
+  std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; });
+}
+{
+  using cxx11test::sptr;
+  using cxx11test::wptr;
+
+  sptr sp(new std::string("ASCII string"));
+  wptr wp(sp);
+  sptr sp2(wp);
+}
+{
+  cxx11test::tp tuple("test", 54, 45.53434);
+  double d = std::get<2>(tuple);
+  std::string s;
+  int i;
+  std::tie(s,i,d) = tuple;
+}
+{
+  static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$");
+  std::string testmatch("Test if this string matches");
+  bool match = std::regex_search(testmatch, filename_regex);
+}
+{
+  cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  cxx11test::int_array::size_type size = array.size();
+}
+{
+  // Test constructor delegation
+  cxx11test::delegate d1;
+  cxx11test::delegate d2();
+  cxx11test::delegate d3(45);
+}
+{
+  // Test override and final
+  cxx11test::overridden o1(55464);
+}
+{
+  // Test nullptr
+  char *c = nullptr;
+}
+{
+  // Test template brackets
+  std::vector<std::pair<int,char*>> v1;
+}
+{
+  // Unicode literals
+  char const *utf8 = u8"UTF-8 string \u2500";
+  char16_t const *utf16 = u"UTF-8 string \u2500";
+  char32_t const *utf32 = U"UTF-32 string \u2500";
+}
+]])
+
+# _AC_PROG_CXX_CXX98 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# -------------------------------------------------------------------
+
+# If the C++ compiler is not in ISO C++98 mode by default, try to add
+# an option to output variable CXX to make it so.  This macro tries
+# various options that select ISO C++98 on some system or another.  It
+# considers the compiler to be in ISO C++98 mode if it handles basic
+# features of the std namespace including: string, containers (list,
+# map, set, vector), streams (fstreams, iostreams, stringstreams,
+# iomanip), pair, exceptions and algorithms.
+
+
+AC_DEFUN([_AC_PROG_CXX_CXX98],
+[_AC_CXX_STD_TRY([cxx98],
+[_AC_CXX_CXX98_TEST_HEADER],
+[_AC_CXX_CXX98_TEST_BODY],
+dnl Try
+dnl GCC                -std=gnu++98 (unused restrictive mode: -std=c++98)
+dnl IBM XL C   -qlanglvl=extended
+dnl HP aC++    -AA
+dnl Intel ICC  -std=gnu++98
+dnl Solaris    N/A (default)
+dnl Tru64      N/A (default, but -std gnu could be used)
+dnl with extended modes being tried first.
+[[-std=gnu++98 -std=c++98 -qlanglvl=extended -AA]], [$1], [$2])[]dnl
+])# _AC_PROG_CXX_CXX98
+
+# _AC_PROG_CXX_CXX11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# -------------------------------------------------------------------
+# If the C++ compiler is not in ISO CXX11 mode by default, try to add
+# an option to output variable CXX to make it so.  This macro tries
+# various options that select ISO C++11 on some system or another.  It
+# considers the compiler to be in ISO C++11 mode if it handles all the
+# tests from the C++98 checks, plus the following: Language features
+# (auto, constexpr, decltype, default/deleted constructors, delegate
+# constructors, final, initialiser lists, lambda functions, nullptr,
+# override, range-based for loops, template brackets without spaces,
+# unicode literals) and library features (array, memory (shared_ptr,
+# weak_ptr), regex and tuple types).
+AC_DEFUN([_AC_PROG_CXX_CXX11],
+[_AC_CXX_STD_TRY([cxx11],
+[_AC_CXX_CXX11_TEST_HEADER
+_AC_CXX_CXX98_TEST_HEADER],
+[_AC_CXX_CXX11_TEST_BODY
+_AC_CXX_CXX98_TEST_BODY],
+dnl Try
+dnl GCC                -std=gnu++11 (unused restrictive mode: -std=c++11) [and 0x variants]
+dnl IBM XL C   -qlanglvl=extended0x
+dnl            (pre-V12.1; unused restrictive mode: -qlanglvl=stdcxx11)
+dnl HP aC++    -AA
+dnl Intel ICC  -std=c++11 -std=c++0x
+dnl Solaris    N/A (no support)
+dnl Tru64      N/A (no support)
+dnl with extended modes being tried first.
+[[-std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA]], [$1], [$2])[]dnl
+])# _AC_PROG_CXX_CXX11
index 1cd1a50d75a6a7ab420c9bfb7f8e64126dadea3e..c0b0a0466f28e1c191fbd77de78e565ee4df4c47 100755 (executable)
--- a/make-dist
+++ b/make-dist
@@ -284,7 +284,7 @@ echo "Creating top directory: '${tempdir}'"
 mkdir ${tempdir}
 
 if [ "$changelog" = yes ]; then
-  if test -d .git; then
+  if test -e .git; then
     echo "Making top-level ChangeLog"
     make ChangeLog CHANGELOG=${tempdir}/ChangeLog || \
       { x=$?; echo "make ChangeLog FAILED (try --no-changelog?)" >&2; exit $x; }
index 9f4ff83631853b6057b1e9fc8b263f0e006c8ec0..d1a6eaba5dea31a88d5313fc37e0acf3100c92df 100644 (file)
@@ -66,7 +66,7 @@
 /^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/
 /^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION VERSION/
 /^#undef PENDING_OUTPUT_COUNT/s/^.*$/#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_ptr - (FILE)->_base)/
-/^#undef VERSION/s/^.*$/#define VERSION "25.0.93"/
+/^#undef VERSION/s/^.*$/#define VERSION "25.1.50"/
 /^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/
 /^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/
 /^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/
index 2b528aa4bdf3e8586ae84e4abee2b7cb1e02b52d..28060febadd6f2ff0a918ddff29b56eec241333a 100644 (file)
@@ -225,9 +225,18 @@ extraclean: maintainer-clean
 check:
        @echo "We don't have any tests for the nt/ directory yet."
 
+ETAGS = ../lib-src/etags${EXEEXT}
+
+${ETAGS}: FORCE
+       ${MAKE} -C ../lib-src $(notdir $@)
+
+tagsfiles= $(wildcard ${srcdir}/*.[ch])
+
+FORCE:
+.PHONY: tags FORCE
 tags: TAGS
-TAGS: ${EXE_FILES:${EXEEXT}=.c}
-       ../lib-src/etags *.[ch]
+TAGS: ${ETAGS} ${tagsfiles}
+       ${ETAGS} ${tagsfiles}
 
 ## Build the programs
 addpm${EXEEXT}: ${srcdir}/addpm.c ../src/epaths.h
index 6884bf9f077a6dad72bb578c00916b66fdcbf558..fdbad17184edd548c1327498b37a8f9d81773ee7 100644 (file)
@@ -1,4 +1,4 @@
-## This file is an edited copy if ../lib/gnulib.mk.
+## This file is an edited copy of ../lib/gnulib.mk.
 ##
 ## The purpose of the edits is to avoid generating any headers
 ## which would conflict with either the headers we have in nt/inc,
@@ -43,7 +43,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings
+# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode filevercmp fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time std-gnu11 stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings
 
 
 MOSTLYCLEANFILES += core *.stackdump
@@ -334,6 +334,14 @@ EXTRA_DIST += filemode.h
 
 ## end   gnulib module filemode
 
+## begin gnulib module filevercmp
+
+libgnu_a_SOURCES += filevercmp.c
+
+EXTRA_DIST += filevercmp.h
+
+## end   gnulib module filevercmp
+
 ## begin gnulib module fpending
 
 
@@ -1082,6 +1090,7 @@ EXTRA_DIST += utimens.h
 
 ## begin gnulib module verify
 
+
 EXTRA_DIST += verify.h
 
 ## end   gnulib module verify
index d1534336c490c355133f1ce7c7af60644d081c07..5fd54e2f926d8ba7e8cfd277057cb96c540395f3 100644 (file)
@@ -185,6 +185,13 @@ extern struct tm * sys_localtime (const time_t *);
    supply the 2nd arg correctly, so don't use _setjmp directly in that
    case.  */
 #undef HAVE__SETJMP
+
+/* Unlike MS and mingw.org, MinGW64 doesn't define gai_strerror as an
+   inline function in a system header file, and instead seems to
+   require to link against ws2_32.a.  But we don't want to link with
+   -lws2_32, as that would make Emacs dependent on the respective DLL.
+   So MinGW64 is amply punished here by the following:  */
+#undef HAVE_GAI_STRERROR
 #endif
 
 /* The following is needed for recovery from C stack overflows.  */
index ad40fc9a231e0f2da579117052edb6a8774b9746..6b9f56f917c2e7b9c96d8f8c673a33b260abd5c5 100644 (file)
@@ -98,6 +98,8 @@ typedef unsigned short uint16_t;
 #define accept         sys_accept
 #define recvfrom       sys_recvfrom
 #define sendto         sys_sendto
+#define getaddrinfo    sys_getaddrinfo
+#define freeaddrinfo   sys_freeaddrinfo
 
 int sys_socket(int af, int type, int protocol);
 int sys_bind (int s, const struct sockaddr *addr, int namelen);
@@ -118,6 +120,9 @@ int sys_recvfrom (int s, char *buf, int len, int flags,
                  struct sockaddr *from, int * fromlen);
 int sys_sendto (int s, const char * buf, int len, int flags,
                const struct sockaddr *to, int tolen);
+int sys_getaddrinfo (const char * node, const char * service,
+                    const struct addrinfo * hints, struct addrinfo ** res);
+void sys_freeaddrinfo (struct addrinfo * ai);
 
 /* In addition to wrappers for the winsock functions, we also provide
    an fcntl function, for setting sockets to non-blocking mode.  */
index 05034fedd4889d8a9c93ce28b1b84c76b2fb112a..9d630087974d6fff1d60409d1acccfe3e1128db3 100644 (file)
@@ -40,6 +40,12 @@ gl_cv_sys_struct_timespec_in_pthread_h=no
 # Or at all...
 ac_cv_header_pthread_h=no
 
+# We don't want to check for these functions
+# because they are implemented in libwinpthread.
+ac_cv_search_clock_gettime="none required"
+ac_cv_func_clock_gettime=no
+ac_cv_func_clock_settime=no
+
 # ACL functions are implemented in w32.c
 ac_cv_search_acl_get_file="none required"
 ac_cv_func_acl_get_file=yes
@@ -68,6 +74,10 @@ ac_cv_func_getsockname=yes
 ac_cv_func_getpeername=yes
 # Implemented as sys_socket in w32.c
 ac_cv_func_socket=yes
+# Implemented as sys_getaddrinfo in w32.c
+ac_cv_func_getaddrinfo=yes
+# Implemented as an inline function in ws2tcpip.h
+ac_cv_func_gai_strerror=yes
 # Implemented in w32.c
 ac_cv_func_mkostemp=yes
 ac_cv_func_readlink=yes
index 6be115a4aba419d2d21d17fa741fc515b1c72598..a695e731578808a9f7500e8fc05c576818bdf04c 100644 (file)
@@ -58,12 +58,12 @@ CC=@CC@
 CFLAGS=@CFLAGS@
 CPPFLAGS = @CPPFLAGS@
 
-TAGS = etags
 RM = rm -f
 RANLIB = @RANLIB@
 AR = @AR@
 ARFLAGS = @ARFLAGS@
 MKDIR_P = @MKDIR_P@
+EXEEXT = @EXEEXT@
 
 OBJS =  Activate.o \
        AddPane.o \
@@ -152,8 +152,17 @@ clean mostlyclean:
 bootstrap-clean maintainer-clean distclean: clean
        rm -f Makefile
 
-.PHONY: tags
-tags:
-       $(TAGS) -t *.[ch]
+ETAGS = ../lib-src/etags${EXEEXT}
+
+${ETAGS}: FORCE
+       ${MAKE} -C ../lib-src $(notdir $@)
+
+tagsfiles = $(wildcard ${srcdir}/*.[ch])
+
+FORCE:
+.PHONY: tags FORCE
+tags: TAGS
+TAGS: ${ETAGS} ${tagsfiles}
+       ${ETAGS} ${tagsfiles}
 
 ### Makefile.in ends here
index d54670932d37f1bec121f48780d9cc6083e270d5..8639effde86c14a13556b67342be5a12c8b55c03 100644 (file)
@@ -236,6 +236,8 @@ IMAGEMAGICK_CFLAGS= @IMAGEMAGICK_CFLAGS@
 LIBXML2_LIBS = @LIBXML2_LIBS@
 LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
 
+GETADDRINFO_A_LIBS = @GETADDRINFO_A_LIBS@
+
 LIBZ = @LIBZ@
 
 ## system-specific libs for dynamic modules, else empty
@@ -255,7 +257,9 @@ XFIXES_CFLAGS = @XFIXES_CFLAGS@
 ## widget.o if USE_X_TOOLKIT, otherwise empty.
 WIDGET_OBJ=@WIDGET_OBJ@
 
-## sheap.o if CYGWIN, otherwise empty.
+HYBRID_MALLOC = @HYBRID_MALLOC@
+
+## cygw32.o if CYGWIN, otherwise empty.
 CYGWIN_OBJ=@CYGWIN_OBJ@
 
 ## fontset.o fringe.o image.o if we have any window system
@@ -299,20 +303,23 @@ CM_OBJ=@CM_OBJ@
 
 LIBGPM = @LIBGPM@
 
-## -lresolv, or empty.
-LIBRESOLV = @LIBRESOLV@
-
 LIBSELINUX_LIBS = @LIBSELINUX_LIBS@
 
 LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
 LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
 
+LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@
+LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@
+
 INTERVALS_H = dispextern.h intervals.h composite.h
 
 GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
 
 RUN_TEMACS = ./temacs
 
+# Whether builds should contain details. '--no-build-details' or empty.
+BUILD_DETAILS = @BUILD_DETAILS@
+
 UNEXEC_OBJ = @UNEXEC_OBJ@
 
 CANNOT_DUMP=@CANNOT_DUMP@
@@ -369,6 +376,7 @@ ALL_CFLAGS=-Demacs $(MYCPPFLAGS) -I. -I$(srcdir) \
   $(WEBKIT_CFLAGS) \
   $(SETTINGS_CFLAGS) $(FREETYPE_CFLAGS) $(FONTCONFIG_CFLAGS) \
   $(LIBOTF_CFLAGS) $(M17N_FLT_CFLAGS) $(DEPFLAGS) \
+  $(LIBSYSTEMD_CFLAGS) \
   $(LIBGNUTLS_CFLAGS) $(NOTIFY_CFLAGS) $(CAIRO_CFLAGS) \
   $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAGS)
 ALL_OBJC_CFLAGS=$(ALL_CFLAGS) $(GNU_OBJC_CFLAGS)
@@ -398,6 +406,8 @@ base_obj = dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
        doprnt.o intervals.o textprop.o composite.o xml.o $(NOTIFY_OBJ) \
        $(XWIDGETS_OBJ) \
        profiler.o decompress.o \
+       $(if $(HYBRID_MALLOC),sheap.o) \
+       $(SHEAP_OBJ) \
        $(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ) \
        $(W32_OBJ) $(WINDOW_SYSTEM_OBJ) $(XGSELOBJ)
 obj = $(base_obj) $(NS_OBJC_OBJ)
@@ -480,11 +490,11 @@ LIBES = $(LIBS) $(W32_LIBS) $(LIBS_GNUSTEP) $(LIBX_BASE) $(LIBIMAGE) \
    $(WEBKIT_LIBS) \
    $(LIB_EACCESS) $(LIB_FDATASYNC) $(LIB_TIMER_TIME) $(DBUS_LIBS) \
    $(LIB_EXECINFO) $(XRANDR_LIBS) $(XINERAMA_LIBS) $(XFIXES_LIBS) \
-   $(LIBXML2_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) $(CAIRO_LIBS) \
+   $(LIBXML2_LIBS) $(LIBGPM) $(LIBS_SYSTEM) $(CAIRO_LIBS) \
    $(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \
    $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
-   $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) \
-   $(NOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES)
+   $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) $(GETADDRINFO_A_LIBS) \
+   $(NOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES) $(LIBSYSTEMD_LIBS)
 
 $(leimdir)/leim-list.el: bootstrap-emacs$(EXEEXT)
        $(MAKE) -C ../leim leim-list.el EMACS="$(bootstrap_exe)"
@@ -532,7 +542,7 @@ emacs$(EXEEXT): temacs$(EXEEXT) \
 ifeq ($(CANNOT_DUMP),yes)
        ln -f temacs$(EXEEXT) $@
 else
-       LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump
+       LC_ALL=C $(RUN_TEMACS) -batch $(BUILD_DETAILS) -l loadup dump
   ifneq ($(PAXCTL_dumped),)
        $(PAXCTL_dumped) $@
   endif
@@ -584,7 +594,9 @@ globals.h: gl-stamp; @true
 
 $(ALLOBJS): globals.h
 
-$(lib)/libgnu.a: $(config_h)
+LIBEGNU_ARCHIVE = $(lib)/lib$(if $(HYBRID_MALLOC),e)gnu.a
+
+$(LIBEGNU_ARCHIVE): $(config_h)
        $(MAKE) -C $(lib) all
 
 ## We have to create $(etc) here because init_cmdargs tests its
@@ -592,9 +604,9 @@ $(lib)/libgnu.a: $(config_h)
 ## This goes on to affect various things, and the emacs binary fails
 ## to start if Vinstallation_directory has the wrong value.
 temacs$(EXEEXT): $(LIBXMENU) $(ALLOBJS) \
-                $(lib)/libgnu.a $(EMACSRES) ${charsets} ${charscript}
+                $(LIBEGNU_ARCHIVE) $(EMACSRES) ${charsets} ${charscript}
        $(AM_V_CCLD)$(CC) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \
-         -o temacs $(ALLOBJS) $(lib)/libgnu.a $(W32_RES_LINK) $(LIBES)
+         -o temacs $(ALLOBJS) $(LIBEGNU_ARCHIVE) $(W32_RES_LINK) $(LIBES)
        $(MKDIR_P) $(etc)
 ifneq ($(CANNOT_DUMP),yes)
   ifneq ($(PAXCTL_notdumped),)
@@ -667,32 +679,34 @@ extraclean: distclean
        -rm -f *~ \#*
 
 
-ETAGS = ../lib-src/etags
+ETAGS = ../lib-src/etags${EXEEXT}
+
+${ETAGS}: FORCE
+       ${MAKE} -C ../lib-src $(notdir $@)
 
-ctagsfiles1 = [xyzXYZ]*.[hc]
-ctagsfiles2 = [a-wA-W]*.[hc]
-ctagsfiles3 = [a-zA-Z]*.m
+ctagsfiles1 = $(wildcard ${srcdir}/*.[hc])
+ctagsfiles2 = $(wildcard ${srcdir}/*.m)
 
 ## FIXME? In out-of-tree builds, should TAGS be generated in srcdir?
 
 ## This does not need to depend on ../lisp and ../lwlib TAGS files,
 ## because etags "--include" only includes a pointer to the file,
 ## rather than the file contents.
-TAGS: $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) $(srcdir)/$(ctagsfiles3)
-       "$(ETAGS)" --include=../lisp/TAGS --include=$(lwlibdir)/TAGS \
+TAGS: ${ETAGS} $(ctagsfiles1) $(ctagsfiles2)
+       ${ETAGS} --include=../lisp/TAGS --include=$(lwlibdir)/TAGS \
          --regex='{c}/[        ]*DEFVAR_[A-Z_  (]+"\([^"]+\)"/\1/' \
          --regex='{c}/[        ]*DEFVAR_[A-Z_  (]+"[^"]+",[    ]\([A-Za-z0-9_]+\)/\1/' \
-         $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) \
+         $(ctagsfiles1) \
          --regex='{objc}/[     ]*DEFVAR_[A-Z_  (]+"\([^"]+\)"/\1/' \
          --regex='{objc}/[     ]*DEFVAR_[A-Z_  (]+"[^"]+",[    ]\([A-Za-z0-9_]+\)/\1/' \
-         $(srcdir)/$(ctagsfiles3)
+         $(ctagsfiles2)
 
 ## Arrange to make tags tables for ../lisp and ../lwlib,
 ## which the above TAGS file for the C files includes by reference.
-../lisp/TAGS:
+../lisp/TAGS: FORCE
        $(MAKE) -C ../lisp TAGS ETAGS="$(ETAGS)"
 
-$(lwlibdir)/TAGS:
+$(lwlibdir)/TAGS: FORCE
        $(MAKE) -C $(lwlibdir) TAGS ETAGS="$(ETAGS)"
 
 tags: TAGS ../lisp/TAGS $(lwlibdir)/TAGS
@@ -737,7 +751,7 @@ bootstrap-emacs$(EXEEXT): temacs$(EXEEXT)
 ifeq ($(CANNOT_DUMP),yes)
        ln -f temacs$(EXEEXT) $@
 else
-       $(RUN_TEMACS) --batch --load loadup bootstrap
+       $(RUN_TEMACS) --batch $(BUILD_DETAILS) --load loadup bootstrap
   ifneq ($(PAXCTL_dumped),)
        $(PAXCTL_dumped) emacs$(EXEEXT)
   endif
index 4c9cbf1072470d48ea1027addad256ae3d31ea39..c5a4f425f6e2b826635c1a78cc6bf3683a3506f5 100644 (file)
@@ -22,10 +22,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <stdio.h>
 #include <limits.h>            /* For CHAR_BIT.  */
-
-#ifdef ENABLE_CHECKING
-#include <signal.h>            /* For SIGABRT.  */
-#endif
+#include <signal.h>            /* For SIGABRT, SIGDANGER.  */
 
 #ifdef HAVE_PTHREAD
 #include <pthread.h>
@@ -35,6 +32,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "dispextern.h"
 #include "intervals.h"
 #include "puresize.h"
+#include "sheap.h"
 #include "systime.h"
 #include "character.h"
 #include "buffer.h"
@@ -58,6 +56,10 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "dosfns.h"            /* For dos_memory_info.  */
 #endif
 
+#ifdef HAVE_MALLOC_H
+# include <malloc.h>
+#endif
+
 #if (defined ENABLE_CHECKING                   \
      && defined HAVE_VALGRIND_VALGRIND_H       \
      && !defined USE_VALGRIND)
@@ -106,8 +108,6 @@ my_heap_start (void)
 
 #ifdef DOUG_LEA_MALLOC
 
-#include <malloc.h>
-
 /* Specify maximum number of areas to mmap.  It would be nice to use a
    value that explicitly means "no limit".  */
 
@@ -117,18 +117,6 @@ my_heap_start (void)
    inside glibc's malloc.  */
 static void *malloc_state_ptr;
 
-/* Get and free this pointer; useful around unexec.  */
-void
-alloc_unexec_pre (void)
-{
-  malloc_state_ptr = malloc_get_state ();
-}
-void
-alloc_unexec_post (void)
-{
-  free (malloc_state_ptr);
-}
-
 /* Restore the dumped malloc state.  Because malloc can be invoked
    even before main (e.g. by the dynamic linker), the dumped malloc
    state must be restored as early as possible using this special hook.  */
@@ -169,14 +157,40 @@ malloc_initialize_hook (void)
     }
 }
 
+/* Declare the malloc initialization hook, which runs before 'main' starts.
+   EXTERNALLY_VISIBLE works around Bug#22522.  */
 # ifndef __MALLOC_HOOK_VOLATILE
 #  define __MALLOC_HOOK_VOLATILE
 # endif
-voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook
+voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook EXTERNALLY_VISIBLE
   = malloc_initialize_hook;
 
 #endif
 
+/* Allocator-related actions to do just before and after unexec.  */
+
+void
+alloc_unexec_pre (void)
+{
+#ifdef DOUG_LEA_MALLOC
+  malloc_state_ptr = malloc_get_state ();
+#endif
+#ifdef HYBRID_MALLOC
+  bss_sbrk_did_unexec = true;
+#endif
+}
+
+void
+alloc_unexec_post (void)
+{
+#ifdef DOUG_LEA_MALLOC
+  free (malloc_state_ptr);
+#endif
+#ifdef HYBRID_MALLOC
+  bss_sbrk_did_unexec = false;
+#endif
+}
+
 /* Mark, unmark, query mark bit of a Lisp string.  S must be a pointer
    to a struct Lisp_String.  */
 
@@ -550,6 +564,8 @@ static struct Lisp_Finalizer doomed_finalizers;
                                Malloc
  ************************************************************************/
 
+#if defined SIGDANGER || (!defined SYSTEM_MALLOC && !defined HYBRID_MALLOC)
+
 /* Function malloc calls this if it finds we are near exhausting storage.  */
 
 void
@@ -558,6 +574,7 @@ malloc_warning (const char *str)
   pending_malloc_warning = str;
 }
 
+#endif
 
 /* Display an already-pending malloc warning.  */
 
@@ -1111,23 +1128,14 @@ lisp_free (void *block)
    unexmacosx.c, so don't use it on Darwin.  */
 
 #if ! ADDRESS_SANITIZER && !defined DARWIN_OS
-# if !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC && !defined HYBRID_MALLOC
-#  define USE_ALIGNED_ALLOC 1
-#  ifndef HAVE_ALIGNED_ALLOC
-/* Defined in gmalloc.c.  */
-void *aligned_alloc (size_t, size_t);
-#  endif
-# elif defined HYBRID_MALLOC
-#  if defined HAVE_ALIGNED_ALLOC || defined HAVE_POSIX_MEMALIGN
-#   define USE_ALIGNED_ALLOC 1
-#   define aligned_alloc hybrid_aligned_alloc
-/* Defined in gmalloc.c.  */
-void *aligned_alloc (size_t, size_t);
-#  endif
-# elif defined HAVE_ALIGNED_ALLOC
+# if (defined HAVE_ALIGNED_ALLOC                                       \
+      || (defined HYBRID_MALLOC                                                \
+         ? defined HAVE_POSIX_MEMALIGN                                 \
+         : !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC))
 #  define USE_ALIGNED_ALLOC 1
-# elif defined HAVE_POSIX_MEMALIGN
+# elif !defined HYBRID_MALLOC && defined HAVE_POSIX_MEMALIGN
 #  define USE_ALIGNED_ALLOC 1
+#  define aligned_alloc my_aligned_alloc /* Avoid collision with lisp.h.  */
 static void *
 aligned_alloc (size_t alignment, size_t size)
 {
@@ -3391,22 +3399,13 @@ allocate_buffer (void)
 DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
        doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
 See also the function `vector'.  */)
-  (register Lisp_Object length, Lisp_Object init)
+  (Lisp_Object length, Lisp_Object init)
 {
-  Lisp_Object vector;
-  register ptrdiff_t sizei;
-  register ptrdiff_t i;
-  register struct Lisp_Vector *p;
-
   CHECK_NATNUM (length);
-
-  p = allocate_vector (XFASTINT (length));
-  sizei = XFASTINT (length);
-  for (i = 0; i < sizei; i++)
+  struct Lisp_Vector *p = allocate_vector (XFASTINT (length));
+  for (ptrdiff_t i = 0; i < XFASTINT (length); i++)
     p->contents[i] = init;
-
-  XSETVECTOR (vector, p);
-  return vector;
+  return make_lisp_ptr (p, Lisp_Vectorlike);
 }
 
 DEFUN ("vector", Fvector, Svector, 0, MANY, 0,
@@ -3415,12 +3414,9 @@ Any number of arguments, even zero arguments, are allowed.
 usage: (vector &rest OBJECTS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {
-  ptrdiff_t i;
-  register Lisp_Object val = make_uninit_vector (nargs);
-  register struct Lisp_Vector *p = XVECTOR (val);
-
-  for (i = 0; i < nargs; i++)
-    p->contents[i] = args[i];
+  Lisp_Object val = make_uninit_vector (nargs);
+  struct Lisp_Vector *p = XVECTOR (val);
+  memcpy (p->contents, args, nargs * sizeof *args);
   return val;
 }
 
@@ -3459,9 +3455,8 @@ stack before executing the byte-code.
 usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INTERACTIVE-SPEC &rest ELEMENTS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {
-  ptrdiff_t i;
-  register Lisp_Object val = make_uninit_vector (nargs);
-  register struct Lisp_Vector *p = XVECTOR (val);
+  Lisp_Object val = make_uninit_vector (nargs);
+  struct Lisp_Vector *p = XVECTOR (val);
 
   /* We used to purecopy everything here, if purify-flag was set.  This worked
      OK for Emacs-23, but with Emacs-24's lexical binding code, it can be
@@ -3471,8 +3466,7 @@ usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INT
      just wasteful and other times plainly wrong (e.g. those free vars may want
      to be setcar'd).  */
 
-  for (i = 0; i < nargs; i++)
-    p->contents[i] = args[i];
+  memcpy (p->contents, args, nargs * sizeof *args);
   make_byte_code (p);
   XSETCOMPILED (val, p);
   return val;
@@ -5431,7 +5425,7 @@ purecopy (Lisp_Object obj)
     }
   else
     {
-      Lisp_Object fmt = build_pure_c_string ("Don't know how to purify: %S");
+      AUTO_STRING (fmt, "Don't know how to purify: %S");
       Fsignal (Qerror, list1 (CALLN (Fformat, fmt, obj)));
     }
 
@@ -5662,7 +5656,7 @@ garbage_collect_1 (void *end)
     return Qnil;
 
   /* Record this function, so it appears on the profiler's backtraces.  */
-  record_in_backtrace (Qautomatic_gc, 0, 0);
+  record_in_backtrace (QAutomatic_GC, 0, 0);
 
   check_cons_list ();
 
@@ -7222,21 +7216,6 @@ die (const char *msg, const char *file, int line)
 
 #if defined (ENABLE_CHECKING) && USE_STACK_LISP_OBJECTS
 
-/* Debugging check whether STR is ASCII-only.  */
-
-const char *
-verify_ascii (const char *str)
-{
-  const unsigned char *ptr = (unsigned char *) str, *end = ptr + strlen (str);
-  while (ptr < end)
-    {
-      int c = STRING_CHAR_ADVANCE (ptr);
-      if (!ASCII_CHAR_P (c))
-       emacs_abort ();
-    }
-  return str;
-}
-
 /* Stress alloca with inconveniently sized requests and check
    whether all allocated areas may be used for Lisp_Object.  */
 
@@ -7392,7 +7371,7 @@ do hash-consing of the objects allocated to pure space.  */);
   DEFSYM (Qstring_bytes, "string-bytes");
   DEFSYM (Qvector_slots, "vector-slots");
   DEFSYM (Qheap, "heap");
-  DEFSYM (Qautomatic_gc, "Automatic GC");
+  DEFSYM (QAutomatic_GC, "Automatic GC");
 
   DEFSYM (Qgc_cons_threshold, "gc-cons-threshold");
   DEFSYM (Qchar_table_extra_slots, "char-table-extra-slots");
index f06d7e08e49c7536b910257d875a3da7109851f0..55a16b237e5355851bb3c3371b82872c56ca30f3 100644 (file)
@@ -1051,44 +1051,36 @@ it is in the sequence to be tried) even if a buffer with that name exists.
 If NAME begins with a space (i.e., a buffer that is not normally
 visible to users), then if buffer NAME already exists a random number
 is first appended to NAME, to speed up finding a non-existent buffer.  */)
-  (register Lisp_Object name, Lisp_Object ignore)
+  (Lisp_Object name, Lisp_Object ignore)
 {
-  register Lisp_Object gentemp, tem, tem2;
-  ptrdiff_t count;
-  char number[INT_BUFSIZE_BOUND (ptrdiff_t) + sizeof "<>"];
+  Lisp_Object genbase;
 
   CHECK_STRING (name);
 
-  tem = Fstring_equal (name, ignore);
-  if (!NILP (tem))
-    return name;
-  tem = Fget_buffer (name);
-  if (NILP (tem))
+  if (!NILP (Fstring_equal (name, ignore)) || NILP (Fget_buffer (name)))
     return name;
 
-  if (!strncmp (SSDATA (name), " ", 1)) /* see bug#1229 */
+  if (SREF (name, 0) != ' ') /* See bug#1229.  */
+    genbase = name;
+  else
     {
       /* Note fileio.c:make_temp_name does random differently.  */
-      tem2 = concat2 (name, make_formatted_string
-                     (number, "-%"pI"d",
-                      XFASTINT (Frandom (make_number (999999)))));
-      tem = Fget_buffer (tem2);
-      if (NILP (tem))
-       return tem2;
+      char number[sizeof "-999999"];
+      int i = XFASTINT (Frandom (make_number (999999)));
+      AUTO_STRING_WITH_LEN (lnumber, number, sprintf (number, "-%d", i));
+      genbase = concat2 (name, lnumber);
+      if (NILP (Fget_buffer (genbase)))
+       return genbase;
     }
-  else
-    tem2 = name;
 
-  count = 1;
-  while (1)
+  for (ptrdiff_t count = 2; ; count++)
     {
-      gentemp = concat2 (tem2, make_formatted_string
-                        (number, "<%"pD"d>", ++count));
-      tem = Fstring_equal (gentemp, ignore);
-      if (!NILP (tem))
-       return gentemp;
-      tem = Fget_buffer (gentemp);
-      if (NILP (tem))
+      char number[INT_BUFSIZE_BOUND (ptrdiff_t) + sizeof "<>"];
+      AUTO_STRING_WITH_LEN (lnumber, number,
+                           sprintf (number, "<%"pD"d>", count));
+      Lisp_Object gentemp = concat2 (genbase, lnumber);
+      if (!NILP (Fstring_equal (gentemp, ignore))
+         || NILP (Fget_buffer (gentemp)))
        return gentemp;
     }
 }
@@ -2001,7 +1993,7 @@ the current buffer's major mode.  */)
   /* To select a nonfundamental mode,
      select the buffer temporarily and then call the mode function.  */
 
-  record_unwind_protect (save_excursion_restore, save_excursion_save ());
+  record_unwind_current_buffer ();
 
   Fset_buffer (buffer);
   call0 (function);
@@ -5277,7 +5269,7 @@ init_buffer (int initialized)
   if (NILP (BVAR (&buffer_defaults, enable_multibyte_characters)))
     Fset_buffer_multibyte (Qnil);
 
-  pwd = get_current_dir_name ();
+  pwd = emacs_get_current_dir_name ();
 
   if (!pwd)
     {
@@ -6233,6 +6225,8 @@ Values are interpreted as follows:
   (hbar . HEIGHT) display a horizontal bar cursor with height HEIGHT
   ANYTHING ELSE   display a hollow box cursor
 
+WIDTH and HEIGHT can't exceed the frame's canonical character size.
+
 When the buffer is displayed in a non-selected window, the
 cursor's appearance is instead controlled by the variable
 `cursor-in-non-selected-windows'.  */);
index 9ae2e820d51af66918288be5ffbc1670b8da3537..fb9f617b514b20dcb67e3813b5ab2914723454cd 100644 (file)
@@ -1987,6 +1987,20 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
   return result;
 }
 
+/* `args_template' has the same meaning as in exec_byte_code() above.  */
+Lisp_Object
+get_byte_code_arity (Lisp_Object args_template)
+{
+  eassert (NATNUMP (args_template));
+  EMACS_INT at = XINT (args_template);
+  bool rest = (at & 128) != 0;
+  int mandatory = at & 127;
+  EMACS_INT nonrest = at >> 8;
+
+  return Fcons (make_number (mandatory),
+               rest ? Qmany : make_number (nonrest));
+}
+
 void
 syms_of_bytecode (void)
 {
index 3bcf2c8476ba1b9b03f9594955e9b46cdc10b249..e56f7cd1b8498cc3316ef00d998d8381231c7829 100644 (file)
@@ -41,20 +41,24 @@ For example, write
  (defun foo (arg buf) "Doc string" (interactive "P\\nbbuffer: ") .... )
  to make ARG be the raw prefix argument, and set BUF to an existing buffer,
  when `foo' is called as a command.
-The "call" to `interactive' is actually a declaration rather than a function;
- it tells `call-interactively' how to read arguments
- to pass to the function.
-When actually called, `interactive' just returns nil.
-
-Usually the argument of `interactive' is a string containing a code letter
- followed optionally by a prompt.  (Some code letters do not use I/O to get
- the argument and do not use prompts.)  To get several arguments, concatenate
- the individual strings, separating them by newline characters.
-Prompts are passed to format, and may use % escapes to print the
+
+The "call" to `interactive' is actually a declaration rather than a
+ function; it tells `call-interactively' how to read arguments to pass
+ to the function.  When actually called, `interactive' just returns
+ nil.
+
+Usually the argument of `interactive' is a string containing a code
+ letter followed optionally by a prompt.  (Some code letters do not
+ use I/O to get the argument and do not use prompts.)  To pass several
+ arguments to the command, concatenate the individual strings,
+ separating them by newline characters.
+
+Prompts are passed to `format', and may use % escapes to print the
  arguments that have already been read.
 If the argument is not a string, it is evaluated to get a list of
- arguments to pass to the function.
-Just `(interactive)' means pass no args when calling interactively.
+ arguments to pass to the command.
+Just `(interactive)' means pass no arguments to the command when
+ calling interactively.
 
 Code letters available are:
 a -- Function name: symbol with a function definition.
@@ -99,7 +103,7 @@ If the string begins with `^' and `shift-select-mode' is non-nil,
  Emacs first calls the function `handle-shift-selection'.
 You may use `@', `*', and `^' together.  They are processed in the
  order that they appear, before reading any arguments.
-usage: (interactive &optional ARGS)  */
+usage: (interactive &optional ARG-DESCRIPTOR)  */
        attributes: const)
   (Lisp_Object args)
 {
index db602f538c95014d383f6f5f2c755085539aec46..3a40626de48b49e7a5e8ed88d8190de7703078d7 100644 (file)
@@ -565,8 +565,7 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
     {
       /* Since CRLF is converted to LF within `decode_coding', we
         can always open a file with binary mode.  */
-      callproc_fd[CALLPROC_PIPEREAD] = emacs_open (tempfile,
-                                                  O_RDONLY | O_BINARY, 0);
+      callproc_fd[CALLPROC_PIPEREAD] = emacs_open (tempfile, O_RDONLY, 0);
       if (callproc_fd[CALLPROC_PIPEREAD] < 0)
        {
          int open_errno = errno;
@@ -1078,10 +1077,6 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r
   return unbind_to (count, val);
 }
 \f
-#ifndef WINDOWSNT
-static int relocate_fd (int fd, int minfd);
-#endif
-
 static char **
 add_env (char **env, char **new_env, char *string)
 {
@@ -1310,37 +1305,14 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp,
   return cpid;
 
 #else  /* not WINDOWSNT */
-  /* Make sure that in, out, and err are not actually already in
-     descriptors zero, one, or two; this could happen if Emacs is
-     started with its standard in, out, or error closed, as might
-     happen under X.  */
-  {
-    int oin = in, oout = out;
-
-    /* We have to avoid relocating the same descriptor twice!  */
-
-    in = relocate_fd (in, 3);
-
-    if (out == oin)
-      out = in;
-    else
-      out = relocate_fd (out, 3);
-
-    if (err == oin)
-      err = in;
-    else if (err == oout)
-      err = out;
-    else
-      err = relocate_fd (err, 3);
-  }
 
 #ifndef MSDOS
   /* Redirect file descriptors and clear the close-on-exec flag on the
      redirected ones.  IN, OUT, and ERR are close-on-exec so they
      need not be closed explicitly.  */
-  dup2 (in, 0);
-  dup2 (out, 1);
-  dup2 (err, 2);
+  dup2 (in, STDIN_FILENO);
+  dup2 (out, STDOUT_FILENO);
+  dup2 (err, STDERR_FILENO);
 
   setpgid (0, 0);
   tcsetpgrp (0, pid);
@@ -1359,31 +1331,6 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp,
 #endif  /* not WINDOWSNT */
 }
 
-#ifndef WINDOWSNT
-/* Move the file descriptor FD so that its number is not less than MINFD.
-   If the file descriptor is moved at all, the original is closed on MSDOS,
-   but not elsewhere as the caller will close it anyway.  */
-static int
-relocate_fd (int fd, int minfd)
-{
-  if (fd >= minfd)
-    return fd;
-  else
-    {
-      int new = fcntl (fd, F_DUPFD_CLOEXEC, minfd);
-      if (new == -1)
-       {
-         emacs_perror ("while setting up child");
-         _exit (EXIT_CANCELED);
-       }
-#ifdef MSDOS
-      emacs_close (fd);
-#endif
-      return new;
-    }
-}
-#endif /* not WINDOWSNT */
-
 static bool
 getenv_internal_1 (const char *var, ptrdiff_t varlen, char **value,
                   ptrdiff_t *valuelen, Lisp_Object env)
index d9620340f09be08b1de3a37eb0bad6bf08b6838a..b9dc52e2568a90e9f065ac97b0cfa0e88aae926a 100644 (file)
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -1908,8 +1908,6 @@ ccl_get_compiled_code (Lisp_Object ccl_prog, ptrdiff_t *idx)
 bool
 setup_ccl_program (struct ccl_program *ccl, Lisp_Object ccl_prog)
 {
-  int i;
-
   if (! NILP (ccl_prog))
     {
       struct Lisp_Vector *vp;
@@ -1931,8 +1929,7 @@ setup_ccl_program (struct ccl_program *ccl, Lisp_Object ccl_prog)
        }
     }
   ccl->ic = CCL_HEADER_MAIN;
-  for (i = 0; i < 8; i++)
-    ccl->reg[i] = 0;
+  memset (ccl->reg, 0, sizeof ccl->reg);
   ccl->last_block = false;
   ccl->status = 0;
   ccl->stack_idx = 0;
index bc3e15578440cbf408be33b2b9052541b7722527..586f330fba9fe3dfbe5c47db9715924a9fe1d482 100644 (file)
@@ -612,14 +612,13 @@ sanitize_char_width (EMACS_INT width)
    : (c) <= 0xE01EF ? (c) - 0xE0100 + 17       \
    : 0)
 
-/* If C is a high surrogate, return 1.  If C is a low surrogate,
-   return 2.  Otherwise, return 0.  */
+/* Return true if C is a surrogate.  */
 
-#define CHAR_SURROGATE_PAIR_P(c)       \
-  ((c) < 0xD800 ? 0                    \
-   : (c) <= 0xDBFF ? 1                 \
-   : (c) <= 0xDFFF ? 2                 \
-   : 0)
+INLINE bool
+char_surrogate_p (int c)
+{
+  return 0xD800 <= c && c <= 0xDFFF;
+}
 
 /* Data type for Unicode general category.
 
index 8ff469e13a3970c0042103c90e802d63e12e8227..264036ae91b0471a8fd597bc3df7797b61b74536 100644 (file)
@@ -1050,8 +1050,8 @@ usage: (define-charset-internal ...)  */)
       /* Here, we just copy the parent's fast_map.  It's not accurate,
         but at least it works for quickly detecting which character
         DOESN'T belong to this charset.  */
-      for (i = 0; i < 190; i++)
-       charset.fast_map[i] = parent_charset->fast_map[i];
+      memcpy (charset.fast_map, parent_charset->fast_map,
+             sizeof charset.fast_map);
 
       /* We also copy these for parents.  */
       charset.min_char = parent_charset->min_char;
index 9f709bea24ce97733ecbabd162b11885d8d57d99..17cb77e28dfd994f55ca05def0ddbf30c1dd83dd 100644 (file)
@@ -6814,39 +6814,29 @@ decode_eol (struct coding_system *coding)
   else if (EQ (eol_type, Qdos))
     {
       ptrdiff_t n = 0;
+      ptrdiff_t pos = coding->dst_pos;
+      ptrdiff_t pos_byte = coding->dst_pos_byte;
+      ptrdiff_t pos_end = pos_byte + coding->produced - 1;
 
-      if (NILP (coding->dst_object))
-       {
-         /* Start deleting '\r' from the tail to minimize the memory
-            movement.  */
-         for (p = pend - 2; p >= pbeg; p--)
-           if (*p == '\r')
-             {
-               memmove (p, p + 1, pend-- - p - 1);
-               n++;
-             }
-       }
-      else
-       {
-         ptrdiff_t pos = coding->dst_pos;
-         ptrdiff_t pos_byte = coding->dst_pos_byte;
-         ptrdiff_t pos_end = pos_byte + coding->produced - 1;
+      /* This assertion is here instead of code, now deleted, that
+        handled the NILP case, which no longer happens with the
+        current codebase.  */
+      eassert (!NILP (coding->dst_object));
 
-         while (pos_byte < pos_end)
+      while (pos_byte < pos_end)
+       {
+         p = BYTE_POS_ADDR (pos_byte);
+         if (*p == '\r' && p[1] == '\n')
            {
-             p = BYTE_POS_ADDR (pos_byte);
-             if (*p == '\r' && p[1] == '\n')
-               {
-                 del_range_2 (pos, pos_byte, pos + 1, pos_byte + 1, 0);
-                 n++;
-                 pos_end--;
-               }
-             pos++;
-             if (coding->dst_multibyte)
-               pos_byte += BYTES_BY_CHAR_HEAD (*p);
-             else
-               pos_byte++;
+             del_range_2 (pos, pos_byte, pos + 1, pos_byte + 1, 0);
+             n++;
+             pos_end--;
            }
+         pos++;
+         if (coding->dst_multibyte)
+           pos_byte += BYTES_BY_CHAR_HEAD (*p);
+         else
+           pos_byte++;
        }
       coding->produced -= n;
       coding->produced_char -= n;
@@ -8429,11 +8419,10 @@ from_unicode (Lisp_Object str)
 Lisp_Object
 from_unicode_buffer (const wchar_t *wstr)
 {
-    return from_unicode (
-        make_unibyte_string (
-            (char *) wstr,
-            /* we get one of the two final 0 bytes for free. */
-            1 + sizeof (wchar_t) * wcslen (wstr)));
+  /* We get one of the two final null bytes for free.  */
+  ptrdiff_t len = 1 + sizeof (wchar_t) * wcslen (wstr);
+  AUTO_STRING_WITH_LEN (str, (char *) wstr, len);
+  return from_unicode (str);
 }
 
 wchar_t *
index 209f60792cf1eb2aff47b6fa52aa484371d0c975..5d3394fafce36547afcb7e8287e9f98025ff67e0 100644 (file)
@@ -99,12 +99,9 @@ typedef bool bool_bf;
 #ifdef emacs
 #define malloc hybrid_malloc
 #define realloc hybrid_realloc
+#define aligned_alloc hybrid_aligned_alloc
 #define calloc hybrid_calloc
 #define free hybrid_free
-#if defined HAVE_GET_CURRENT_DIR_NAME && !defined BROKEN_GET_CURRENT_DIR_NAME
-#define HYBRID_GET_CURRENT_DIR_NAME 1
-#define get_current_dir_name hybrid_get_current_dir_name
-#endif
 #endif
 #endif /* HYBRID_MALLOC */
 
@@ -120,14 +117,6 @@ typedef bool bool_bf;
 #undef HAVE_RINT
 #endif  /* HPUX */
 
-#ifdef IRIX6_5
-#ifdef emacs
-char *_getpty();
-#endif
-#define INET6 /* Needed for struct sockaddr_in6.  */
-#undef HAVE_GETADDRINFO /* IRIX has getaddrinfo but not struct addrinfo.  */
-#endif /* IRIX6_5 */
-
 #ifdef MSDOS
 #ifndef __DJGPP__
 You lose; /* Emacs for DOS must be compiled with DJGPP */
index d3a32c003415f0b19c2190c2ea1b1c7f834dd972..618176dd452970577ea4ff82c222b69c0b3c6247 100644 (file)
@@ -168,25 +168,25 @@ static int
 xd_symbol_to_dbus_type (Lisp_Object object)
 {
   return
-    ((EQ (object, QCdbus_type_byte)) ? DBUS_TYPE_BYTE
-     : (EQ (object, QCdbus_type_boolean)) ? DBUS_TYPE_BOOLEAN
-     : (EQ (object, QCdbus_type_int16)) ? DBUS_TYPE_INT16
-     : (EQ (object, QCdbus_type_uint16)) ? DBUS_TYPE_UINT16
-     : (EQ (object, QCdbus_type_int32)) ? DBUS_TYPE_INT32
-     : (EQ (object, QCdbus_type_uint32)) ? DBUS_TYPE_UINT32
-     : (EQ (object, QCdbus_type_int64)) ? DBUS_TYPE_INT64
-     : (EQ (object, QCdbus_type_uint64)) ? DBUS_TYPE_UINT64
-     : (EQ (object, QCdbus_type_double)) ? DBUS_TYPE_DOUBLE
-     : (EQ (object, QCdbus_type_string)) ? DBUS_TYPE_STRING
-     : (EQ (object, QCdbus_type_object_path)) ? DBUS_TYPE_OBJECT_PATH
-     : (EQ (object, QCdbus_type_signature)) ? DBUS_TYPE_SIGNATURE
+    (EQ (object, QCbyte) ? DBUS_TYPE_BYTE
+     : EQ (object, QCboolean) ? DBUS_TYPE_BOOLEAN
+     : EQ (object, QCint16) ? DBUS_TYPE_INT16
+     : EQ (object, QCuint16) ? DBUS_TYPE_UINT16
+     : EQ (object, QCint32) ? DBUS_TYPE_INT32
+     : EQ (object, QCuint32) ? DBUS_TYPE_UINT32
+     : EQ (object, QCint64) ? DBUS_TYPE_INT64
+     : EQ (object, QCuint64) ? DBUS_TYPE_UINT64
+     : EQ (object, QCdouble) ? DBUS_TYPE_DOUBLE
+     : EQ (object, QCstring) ? DBUS_TYPE_STRING
+     : EQ (object, QCobject_path) ? DBUS_TYPE_OBJECT_PATH
+     : EQ (object, QCsignature) ? DBUS_TYPE_SIGNATURE
 #ifdef DBUS_TYPE_UNIX_FD
-     : (EQ (object, QCdbus_type_unix_fd)) ? DBUS_TYPE_UNIX_FD
+     : EQ (object, QCunix_fd) ? DBUS_TYPE_UNIX_FD
 #endif
-     : (EQ (object, QCdbus_type_array)) ? DBUS_TYPE_ARRAY
-     : (EQ (object, QCdbus_type_variant)) ? DBUS_TYPE_VARIANT
-     : (EQ (object, QCdbus_type_struct)) ? DBUS_TYPE_STRUCT
-     : (EQ (object, QCdbus_type_dict_entry)) ? DBUS_TYPE_DICT_ENTRY
+     : EQ (object, QCarray) ? DBUS_TYPE_ARRAY
+     : EQ (object, QCvariant) ? DBUS_TYPE_VARIANT
+     : EQ (object, QCstruct) ? DBUS_TYPE_STRUCT
+     : EQ (object, QCdict_entry) ? DBUS_TYPE_DICT_ENTRY
      : DBUS_TYPE_INVALID);
 }
 
@@ -257,16 +257,16 @@ XD_OBJECT_TO_STRING (Lisp_Object object)
        if ((session_bus_address != NULL)                               \
            && (!NILP (Fstring_equal                                    \
                       (bus, build_string (session_bus_address)))))     \
-         bus = QCdbus_session_bus;                                     \
+         bus = QCsession;                                              \
       }                                                                        \
                                                                        \
     else                                                               \
       {                                                                        \
        CHECK_SYMBOL (bus);                                             \
-       if (!(EQ (bus, QCdbus_system_bus) || EQ (bus, QCdbus_session_bus))) \
+       if (!(EQ (bus, QCsystem) || EQ (bus, QCsession)))               \
          XD_SIGNAL2 (build_string ("Wrong bus name"), bus);            \
        /* We do not want to have an autolaunch for the session bus.  */ \
-       if (EQ (bus, QCdbus_session_bus) && session_bus_address == NULL) \
+       if (EQ (bus, QCsession) && session_bus_address == NULL)         \
          XD_SIGNAL2 (build_string ("No connection to bus"), bus);      \
       }                                                                        \
   } while (0)
@@ -395,7 +395,7 @@ xd_signature (char *signature, int dtype, int parent_type, Lisp_Object object)
       CHECK_CONS (object);
 
       /* Type symbol is optional.  */
-      if (EQ (QCdbus_type_array, CAR_SAFE (elt)))
+      if (EQ (QCarray, CAR_SAFE (elt)))
        elt = XD_NEXT_VALUE (elt);
 
       /* If the array is empty, DBUS_TYPE_STRING is the default
@@ -1009,8 +1009,7 @@ xd_add_watch (DBusWatch *watch, void *data)
 }
 
 /* Stop monitoring WATCH for possible I/O.
-   DATA is the used bus, either a string or QCdbus_system_bus or
-   QCdbus_session_bus.  */
+   DATA is the used bus, either a string or QCsystem or QCsession.  */
 static void
 xd_remove_watch (DBusWatch *watch, void *data)
 {
@@ -1025,7 +1024,7 @@ xd_remove_watch (DBusWatch *watch, void *data)
   /* Unset session environment.  */
 #if 0
   /* This is buggy, since unsetenv is not thread-safe.  */
-  if (XSYMBOL (QCdbus_session_bus) == data)
+  if (XSYMBOL (QCsession) == data)
     {
       XD_DEBUG_MESSAGE ("unsetenv DBUS_SESSION_BUS_ADDRESS");
       unsetenv ("DBUS_SESSION_BUS_ADDRESS");
@@ -1147,14 +1146,14 @@ this connection to those buses.  */)
          connection = dbus_connection_open_private (SSDATA (bus), &derror);
 
       else
-       if (NILP (private))
-         connection = dbus_bus_get (EQ (bus, QCdbus_system_bus)
-                                    ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION,
-                                    &derror);
-       else
-         connection = dbus_bus_get_private (EQ (bus, QCdbus_system_bus)
-                                            ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION,
-                                            &derror);
+       {
+         DBusBusType bustype = (EQ (bus, QCsystem)
+                                ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION);
+         if (NILP (private))
+           connection = dbus_bus_get (bustype, &derror);
+         else
+           connection = dbus_bus_get_private (bustype, &derror);
+       }
 
       if (dbus_error_is_set (&derror))
        XD_ERROR (derror);
@@ -1405,7 +1404,7 @@ usage: (dbus-message-internal &rest REST)  */)
     }
 
   /* Check for timeout parameter.  */
-  if ((count+2 <= nargs) && (EQ ((args[count]), QCdbus_timeout)))
+  if ((count + 2 <= nargs) && EQ (args[count], QCtimeout))
     {
       CHECK_NATNUM (args[count+1]);
       timeout = min (XFASTINT (args[count+1]), INT_MAX);
@@ -1452,8 +1451,7 @@ usage: (dbus-message-internal &rest REST)  */)
 
       /* The result is the key in Vdbus_registered_objects_table.  */
       serial = dbus_message_get_serial (dmessage);
-      result = list3 (QCdbus_registered_serial,
-                     bus, make_fixnum_or_float (serial));
+      result = list3 (QCserial, bus, make_fixnum_or_float (serial));
 
       /* Create a hash table entry.  */
       Fputhash (result, handler, Vdbus_registered_objects_table);
@@ -1540,8 +1538,7 @@ xd_read_message_1 (DBusConnection *connection, Lisp_Object bus)
           || (mtype == DBUS_MESSAGE_TYPE_ERROR))
     {
       /* Search for a registered function of the message.  */
-      key = list3 (QCdbus_registered_serial, bus,
-                  make_fixnum_or_float (serial));
+      key = list3 (QCserial, bus, make_fixnum_or_float (serial));
       value = Fgethash (key, Vdbus_registered_objects_table, Qnil);
 
       /* There shall be exactly one entry.  Construct an event.  */
@@ -1566,9 +1563,7 @@ xd_read_message_1 (DBusConnection *connection, Lisp_Object bus)
        goto cleanup;
 
       /* Search for a registered function of the message.  */
-      key = list4 ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL)
-                  ? QCdbus_registered_method
-                  : QCdbus_registered_signal,
+      key = list4 (mtype == DBUS_MESSAGE_TYPE_METHOD_CALL ? QCmethod : QCsignal,
                   bus, build_string (interface), build_string (member));
       value = Fgethash (key, Vdbus_registered_objects_table, Qnil);
 
@@ -1697,37 +1692,37 @@ syms_of_dbusbind (void)
        build_pure_c_string ("D-Bus error"));
 
   /* Lisp symbols of the system and session buses.  */
-  DEFSYM (QCdbus_system_bus, ":system");
-  DEFSYM (QCdbus_session_bus, ":session");
+  DEFSYM (QCsystem, ":system");
+  DEFSYM (QCsession, ":session");
 
   /* Lisp symbol for method call timeout.  */
-  DEFSYM (QCdbus_timeout, ":timeout");
+  DEFSYM (QCtimeout, ":timeout");
 
   /* Lisp symbols of D-Bus types.  */
-  DEFSYM (QCdbus_type_byte, ":byte");
-  DEFSYM (QCdbus_type_boolean, ":boolean");
-  DEFSYM (QCdbus_type_int16, ":int16");
-  DEFSYM (QCdbus_type_uint16, ":uint16");
-  DEFSYM (QCdbus_type_int32, ":int32");
-  DEFSYM (QCdbus_type_uint32, ":uint32");
-  DEFSYM (QCdbus_type_int64, ":int64");
-  DEFSYM (QCdbus_type_uint64, ":uint64");
-  DEFSYM (QCdbus_type_double, ":double");
-  DEFSYM (QCdbus_type_string, ":string");
-  DEFSYM (QCdbus_type_object_path, ":object-path");
-  DEFSYM (QCdbus_type_signature, ":signature");
+  DEFSYM (QCbyte, ":byte");
+  DEFSYM (QCboolean, ":boolean");
+  DEFSYM (QCint16, ":int16");
+  DEFSYM (QCuint16, ":uint16");
+  DEFSYM (QCint32, ":int32");
+  DEFSYM (QCuint32, ":uint32");
+  DEFSYM (QCint64, ":int64");
+  DEFSYM (QCuint64, ":uint64");
+  DEFSYM (QCdouble, ":double");
+  DEFSYM (QCstring, ":string");
+  DEFSYM (QCobject_path, ":object-path");
+  DEFSYM (QCsignature, ":signature");
 #ifdef DBUS_TYPE_UNIX_FD
-  DEFSYM (QCdbus_type_unix_fd, ":unix-fd");
+  DEFSYM (QCunix_fd, ":unix-fd");
 #endif
-  DEFSYM (QCdbus_type_array, ":array");
-  DEFSYM (QCdbus_type_variant, ":variant");
-  DEFSYM (QCdbus_type_struct, ":struct");
-  DEFSYM (QCdbus_type_dict_entry, ":dict-entry");
+  DEFSYM (QCarray, ":array");
+  DEFSYM (QCvariant, ":variant");
+  DEFSYM (QCstruct, ":struct");
+  DEFSYM (QCdict_entry, ":dict-entry");
 
   /* Lisp symbols of objects in `dbus-registered-objects-table'.  */
-  DEFSYM (QCdbus_registered_serial, ":serial");
-  DEFSYM (QCdbus_registered_method, ":method");
-  DEFSYM (QCdbus_registered_signal, ":signal");
+  DEFSYM (QCserial, ":serial");
+  DEFSYM (QCmethod, ":method");
+  DEFSYM (QCsignal, ":signal");
 
   DEFVAR_LISP ("dbus-compiled-version",
               Vdbus_compiled_version,
index 1213f482f772b01945446a346fa1025252567b15..6ebf74aaf5ef3579ed42ccd2a06a95b5660ab286 100644 (file)
@@ -42,7 +42,7 @@ static bool zlib_initialized;
 static bool
 init_zlib_functions (void)
 {
-  HMODULE library = w32_delayed_load (Qzlib_dll);
+  HMODULE library = w32_delayed_load (Qzlib);
 
   if (!library)
     return false;
@@ -91,7 +91,7 @@ DEFUN ("zlib-available-p", Fzlib_available_p, Szlib_available_p, 0, 0, 0,
      (void)
 {
 #ifdef WINDOWSNT
-  Lisp_Object found = Fassq (Qzlib_dll, Vlibrary_cache);
+  Lisp_Object found = Fassq (Qzlib, Vlibrary_cache);
   if (CONSP (found))
     return XCDR (found);
   else
@@ -99,7 +99,7 @@ DEFUN ("zlib-available-p", Fzlib_available_p, Szlib_available_p, 0, 0, 0,
       Lisp_Object status;
       zlib_initialized = init_zlib_functions ();
       status = zlib_initialized ? Qt : Qnil;
-      Vlibrary_cache = Fcons (Fcons (Qzlib_dll, status), Vlibrary_cache);
+      Vlibrary_cache = Fcons (Fcons (Qzlib, status), Vlibrary_cache);
       return status;
     }
 #else
index e21b2273f7914cc8faeebfa3af5c4c25de449d50..5d0e327ee7b6f5a9434b57dcf3ad2c5f193e457a 100644 (file)
@@ -42,7 +42,6 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "buffer.h"
 #include "coding.h"
 #include "regex.h"
-#include "blockinput.h"
 
 #ifdef MSDOS
 #include "msdos.h"     /* for fstatat */
@@ -69,8 +68,6 @@ open_directory (Lisp_Object dirname, int *fdp)
   DIR *d;
   int fd, opendir_errno;
 
-  block_input ();
-
 #ifdef DOS_NT
   /* Directories cannot be opened.  The emulation assumes that any
      file descriptor other than AT_FDCWD corresponds to the most
@@ -94,8 +91,6 @@ open_directory (Lisp_Object dirname, int *fdp)
     }
 #endif
 
-  unblock_input ();
-
   if (!d)
     report_file_errno ("Opening directory", dirname, opendir_errno);
   *fdp = fd;
@@ -111,12 +106,9 @@ directory_files_internal_w32_unwind (Lisp_Object arg)
 #endif
 
 static void
-directory_files_internal_unwind (void *dh)
+directory_files_internal_unwind (void *d)
 {
-  DIR *d = dh;
-  block_input ();
   closedir (d);
-  unblock_input ();
 }
 
 /* Return the next directory entry from DIR; DIR's name is DIRNAME.
@@ -307,9 +299,7 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
        }
     }
 
-  block_input ();
   closedir (d);
-  unblock_input ();
 #ifdef WINDOWSNT
   if (attrs)
     Vw32_get_true_file_attributes = w32_save;
@@ -861,6 +851,14 @@ below) - valid values are `string' and `integer'.  The latter is the
 default, but we plan to change that, so you should specify a non-nil value
 for ID-FORMAT if you use the returned uid or gid.
 
+To access the elements returned, the following access functions are
+provided: `file-attribute-type', `file-attribute-link-number',
+`file-attribute-user-id', `file-attribute-group-id',
+`file-attribute-access-time', `file-attribute-modification-time',
+`file-attribute-status-change-time', `file-attribute-size',
+`file-attribute-modes', `file-attribute-inode-number', and
+`file-attribute-device-number'.
+
 Elements of the attribute list are:
  0. t for directory, string (name linked to) for symbolic link, or nil.
  1. Number of links to file.
@@ -951,10 +949,8 @@ file_attributes (int fd, char const *name, Lisp_Object id_format)
 
   if (!(NILP (id_format) || EQ (id_format, Qinteger)))
     {
-      block_input ();
       uname = stat_uname (&s);
       gname = stat_gname (&s);
-      unblock_input ();
     }
 
   filemodestring (&s, modes);
index 3a0532a693b0047910289cef8f78fa183380e39c..51caa5b10e7a8bc56a4e73c136d83b1266bbf0b3 100644 (file)
@@ -6038,7 +6038,7 @@ init_display (void)
 #endif
 
   /* If no window system has been specified, try to use the terminal.  */
-  if (! isatty (0))
+  if (! isatty (STDIN_FILENO))
     fatal ("standard input is not a tty");
 
 #ifdef WINDOWSNT
index 7cdb0d03a81ca9cf7cb82ae821c9c6686a212c14..e1f508e5014b06665eb7b8bb22e9936553c5d677 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -870,16 +870,14 @@ Otherwise, return a new string.  */)
         \<foo> just sets the keymap used for \[cmd].  */
       else if (strp[0] == '\\' && (strp[1] == '{' || strp[1] == '<'))
        {
-         struct buffer *oldbuf;
-         ptrdiff_t start_idx;
+        {
          /* This is for computing the SHADOWS arg for describe_map_tree.  */
          Lisp_Object active_maps = Fcurrent_active_maps (Qnil, Qnil);
-         Lisp_Object earlier_maps;
          ptrdiff_t count = SPECPDL_INDEX ();
 
          strp += 2;            /* skip \{ or \< */
          start = strp;
-         start_idx = start - SDATA (string);
+         ptrdiff_t start_idx = start - SDATA (string);
 
          while ((strp - SDATA (string) < SBYTES (string))
                 && *strp != '}' && *strp != '>')
@@ -909,7 +907,7 @@ Otherwise, return a new string.  */)
            }
 
          /* Now switch to a temp buffer.  */
-         oldbuf = current_buffer;
+         struct buffer *oldbuf = current_buffer;
          set_buffer_internal (XBUFFER (Vprin1_to_string_buffer));
          /* This is for an unusual case where some after-change
             function uses 'format' or 'prin1' or something else that
@@ -934,7 +932,8 @@ Otherwise, return a new string.  */)
            {
              /* Get the list of active keymaps that precede this one.
                 If this one's not active, get nil.  */
-             earlier_maps = Fcdr (Fmemq (tem, Freverse (active_maps)));
+             Lisp_Object earlier_maps
+               = Fcdr (Fmemq (tem, Freverse (active_maps)));
              describe_map_tree (tem, 1, Fnreverse (earlier_maps),
                                 Qnil, 0, 1, 0, 0, 1);
            }
@@ -942,6 +941,7 @@ Otherwise, return a new string.  */)
          Ferase_buffer ();
          set_buffer_internal (oldbuf);
          unbind_to (count, Qnil);
+        }
 
        subst_string:
          start = SDATA (tem);
index 94b949583adb6a0d66c1c89299d45a8b27555127..e267c2f2909afa83b5680c4a7d4d3033a90dd1f8 100644 (file)
@@ -146,8 +146,6 @@ xtzfree (timezone_t tz)
 static timezone_t
 tzlookup (Lisp_Object zone, bool settz)
 {
-  static char const tzbuf_format[] = "XXX%s%"pI"d:%02d:%02d";
-  char tzbuf[sizeof tzbuf_format + INT_STRLEN_BOUND (EMACS_INT)];
   char const *zone_string;
   timezone_t new_tz;
 
@@ -160,16 +158,53 @@ tzlookup (Lisp_Object zone, bool settz)
     }
   else
     {
+      static char const tzbuf_format[] = "<%+.*"pI"d>%s%"pI"d:%02d:%02d";
+      char const *trailing_tzbuf_format = tzbuf_format + sizeof "<%+.*"pI"d" - 1;
+      char tzbuf[sizeof tzbuf_format + 2 * INT_STRLEN_BOUND (EMACS_INT)];
+      bool plain_integer = INTEGERP (zone);
+
       if (EQ (zone, Qwall))
        zone_string = 0;
       else if (STRINGP (zone))
-       zone_string = SSDATA (zone);
-      else if (INTEGERP (zone))
+       zone_string = SSDATA (ENCODE_SYSTEM (zone));
+      else if (plain_integer || (CONSP (zone) && INTEGERP (XCAR (zone))
+                                && CONSP (XCDR (zone))))
        {
+         Lisp_Object abbr;
+         if (!plain_integer)
+           {
+             abbr = XCAR (XCDR (zone));
+             zone = XCAR (zone);
+           }
+
          EMACS_INT abszone = eabs (XINT (zone)), hour = abszone / (60 * 60);
-         int min = (abszone / 60) % 60, sec = abszone % 60;
-         sprintf (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0], hour, min, sec);
-         zone_string = tzbuf;
+         int hour_remainder = abszone % (60 * 60);
+         int min = hour_remainder / 60, sec = hour_remainder % 60;
+
+         if (plain_integer)
+           {
+             int prec = 2;
+             EMACS_INT numzone = hour;
+             if (hour_remainder != 0)
+               {
+                 prec += 2, numzone = 100 * numzone + min;
+                 if (sec != 0)
+                   prec += 2, numzone = 100 * numzone + sec;
+               }
+             sprintf (tzbuf, tzbuf_format, prec, numzone,
+                      &"-"[XINT (zone) < 0], hour, min, sec);
+             zone_string = tzbuf;
+           }
+         else
+           {
+             AUTO_STRING (leading, "<");
+             AUTO_STRING_WITH_LEN (trailing, tzbuf,
+                                   sprintf (tzbuf, trailing_tzbuf_format,
+                                            &"-"[XINT (zone) < 0],
+                                            hour, min, sec));
+             zone_string = SSDATA (concat3 (leading, ENCODE_SYSTEM (abbr),
+                                            trailing));
+           }
        }
       else
        xsignal2 (Qerror, build_string ("Invalid time zone specification"),
@@ -1969,9 +2004,13 @@ DEFUN ("format-time-string", Fformat_time_string, Sformat_time_string, 1, 3, 0,
        doc: /* Use FORMAT-STRING to format the time TIME, or now if omitted.
 TIME is specified as (HIGH LOW USEC PSEC), as returned by
 `current-time' or `file-attributes'.  The obsolete form (HIGH . LOW)
-is also still accepted.  The optional ZONE is omitted or nil for Emacs
-local time, t for Universal Time, `wall' for system wall clock time,
-or a string as in the TZ environment variable.
+is also still accepted.
+
+The optional ZONE is omitted or nil for Emacs local time, t for
+Universal Time, `wall' for system wall clock time, or a string as in
+the TZ environment variable.  It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time') applied
+without consideration for daylight saving time.
 
 The value is a copy of FORMAT-STRING, but with certain constructs replaced
 by text that describes the specified date and time in TIME:
@@ -2042,7 +2081,6 @@ format_time_string (char const *format, ptrdiff_t formatlen,
   char *buf = buffer;
   ptrdiff_t size = sizeof buffer;
   size_t len;
-  Lisp_Object bufstring;
   int ns = t.tv_nsec;
   USE_SAFE_ALLOCA;
 
@@ -2074,9 +2112,11 @@ format_time_string (char const *format, ptrdiff_t formatlen,
     }
 
   xtzfree (tz);
-  bufstring = make_unibyte_string (buf, len);
+  AUTO_STRING_WITH_LEN (bufstring, buf, len);
+  Lisp_Object result = code_convert_string_norecord (bufstring,
+                                                    Vlocale_coding_system, 0);
   SAFE_FREE ();
-  return code_convert_string_norecord (bufstring, Vlocale_coding_system, 0);
+  return result;
 }
 
 DEFUN ("decode-time", Fdecode_time, Sdecode_time, 0, 2, 0,
@@ -2084,9 +2124,12 @@ DEFUN ("decode-time", Fdecode_time, Sdecode_time, 0, 2, 0,
 The optional SPECIFIED-TIME should be a list of (HIGH LOW . IGNORED),
 as from `current-time' and `file-attributes', or nil to use the
 current time.  The obsolete form (HIGH . LOW) is also still accepted.
+
 The optional ZONE is omitted or nil for Emacs local time, t for
 Universal Time, `wall' for system wall clock time, or a string as in
-the TZ environment variable.
+the TZ environment variable.  It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time') applied
+without consideration for daylight saving time.
 
 The list has the following nine members: SEC is an integer between 0
 and 60; SEC is 60 for a leap second, which only some operating systems
@@ -2149,6 +2192,7 @@ check_tm_member (Lisp_Object obj, int offset)
 DEFUN ("encode-time", Fencode_time, Sencode_time, 6, MANY, 0,
        doc: /* Convert SECOND, MINUTE, HOUR, DAY, MONTH, YEAR and ZONE to internal time.
 This is the reverse operation of `decode-time', which see.
+
 The optional ZONE is omitted or nil for Emacs local time, t for
 Universal Time, `wall' for system wall clock time, or a string as in
 the TZ environment variable.  It can also be a list (as from
@@ -2183,8 +2227,6 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH YEAR &optional ZONE)  */)
   tm.tm_year = check_tm_member (args[5], TM_YEAR_BASE);
   tm.tm_isdst = -1;
 
-  if (CONSP (zone))
-    zone = XCAR (zone);
   timezone_t tz = tzlookup (zone, false);
   value = emacs_mktime_z (tz, &tm);
   xtzfree (tz);
@@ -2213,7 +2255,9 @@ but this is considered obsolete.
 
 The optional ZONE is omitted or nil for Emacs local time, t for
 Universal Time, `wall' for system wall clock time, or a string as in
-the TZ environment variable.  */)
+the TZ environment variable.  It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time') applied
+without consideration for daylight saving time.  */)
   (Lisp_Object specified_time, Lisp_Object zone)
 {
   time_t value = lisp_seconds_argument (specified_time);
@@ -2289,8 +2333,12 @@ instead of using the current time.  The argument should have the form
 \(HIGH LOW . IGNORED).  Thus, you can use times obtained from
 `current-time' and from `file-attributes'.  SPECIFIED-TIME can also
 have the form (HIGH . LOW), but this is considered obsolete.
-Optional second arg ZONE is omitted or nil for the local time zone, or
-a string as in the TZ environment variable.
+
+The optional ZONE is omitted or nil for Emacs local time, t for
+Universal Time, `wall' for system wall clock time, or a string as in
+the TZ environment variable.  It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time') applied
+without consideration for daylight saving time.
 
 Some operating systems cannot provide all this information to Emacs;
 in this case, `current-time-zone' returns a list containing nil for
@@ -2314,15 +2362,18 @@ the data it can't find.  */)
       zone_offset = make_number (offset);
       if (SCHARS (zone_name) == 0)
        {
-         /* No local time zone name is available; use "+-NNNN" instead.  */
-         long int m = offset / 60;
-         long int am = offset < 0 ? - m : m;
-         long int hour = am / 60;
-         int min = am % 60;
-         char buf[sizeof "+00" + INT_STRLEN_BOUND (long int)];
-         zone_name = make_formatted_string (buf, "%c%02ld%02d",
+         /* No local time zone name is available; use numeric zone instead.  */
+         long int hour = offset / 3600;
+         int min_sec = offset % 3600;
+         int amin_sec = min_sec < 0 ? - min_sec : min_sec;
+         int min = amin_sec / 60;
+         int sec = amin_sec % 60;
+         int min_prec = min_sec ? 2 : 0;
+         int sec_prec = sec ? 2 : 0;
+         char buf[sizeof "+0000" + INT_STRLEN_BOUND (long int)];
+         zone_name = make_formatted_string (buf, "%c%.2ld%.*d%.*d",
                                             (offset < 0 ? '-' : '+'),
-                                            hour, min);
+                                            hour, min_prec, min, sec_prec, sec);
        }
     }
 
@@ -2331,11 +2382,11 @@ the data it can't find.  */)
 
 DEFUN ("set-time-zone-rule", Fset_time_zone_rule, Sset_time_zone_rule, 1, 1, 0,
        doc: /* Set the Emacs local time zone using TZ, a string specifying a time zone rule.
-
 If TZ is nil or `wall', use system wall clock time; this differs from
 the usual Emacs convention where nil means current local time.  If TZ
-is t, use Universal Time.  If TZ is an integer, treat it as in
-`encode-time'.
+is t, use Universal Time.  If TZ is a list (as from
+`current-time-zone') or an integer (as from `decode-time'), use the
+specified time zone without consideration for daylight saving time.
 
 Instead of calling this function, you typically want something else.
 To temporarily use a different time zone rule for just one invocation
@@ -2882,10 +2933,9 @@ DEFUN ("compare-buffer-substrings", Fcompare_buffer_substrings, Scompare_buffer_
        6, 6, 0,
        doc: /* Compare two substrings of two buffers; return result as number.
 Return -N if first string is less after N-1 chars, +N if first string is
-greater after N-1 chars, or 0 if strings match.  Each substring is
-represented as three arguments: BUFFER, START and END.  That makes six
-args in all, three for each substring.
-
+greater after N-1 chars, or 0 if strings match.
+The first substring is in BUFFER1 from START1 to END1 and the second
+is in BUFFER2 from START2 to END2.
 The value of `case-fold-search' in the current buffer
 determines whether case is significant or ignored.  */)
   (Lisp_Object buffer1, Lisp_Object start1, Lisp_Object end1, Lisp_Object buffer2, Lisp_Object start2, Lisp_Object end2)
@@ -4995,7 +5045,7 @@ Transposing beyond buffer boundaries is an error.  */)
          start2_addr = BYTE_POS_ADDR (start2_byte);
           memcpy (temp, start1_addr, len1_byte);
           memcpy (start1_addr, start2_addr, len2_byte);
-          memcpy (start1_addr + len2_byte, start1_addr + len1_byte, len_mid);
+          memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid);
           memcpy (start1_addr + len2_byte + len_mid, temp, len1_byte);
          SAFE_FREE ();
 
index eca5af739b92846c6be69e7d83435159e8f8035b..724d24a77688aa0249006e92e2f66d5ae2ab9b42 100644 (file)
@@ -64,6 +64,13 @@ enum
         && INTPTR_MAX == EMACS_INT_MAX)
   };
 
+/* Function prototype for the module init function.  */
+typedef int (*emacs_init_function) (struct emacs_runtime *);
+
+/* Function prototype for the module Lisp functions.  */
+typedef emacs_value (*emacs_subr) (emacs_env *, ptrdiff_t,
+                                  emacs_value [], void *);
+
 /* Function prototype for module user-pointer finalizers.  These
    should not throw C++ exceptions, so emacs-module.h declares the
    corresponding interfaces with EMACS_NOEXCEPT.  There is only C code
@@ -107,14 +114,12 @@ static enum emacs_funcall_exit module_non_local_exit_check (emacs_env *);
 static void check_main_thread (void);
 static void finalize_environment (struct emacs_env_private *);
 static void initialize_environment (emacs_env *, struct emacs_env_private *priv);
-static void module_args_out_of_range (emacs_env *, Lisp_Object, Lisp_Object);
 static void module_handle_signal (emacs_env *, Lisp_Object);
 static void module_handle_throw (emacs_env *, Lisp_Object);
 static void module_non_local_exit_signal_1 (emacs_env *, Lisp_Object, Lisp_Object);
 static void module_non_local_exit_throw_1 (emacs_env *, Lisp_Object, Lisp_Object);
 static void module_out_of_memory (emacs_env *);
 static void module_reset_handlerlist (const int *);
-static void module_wrong_type (emacs_env *, Lisp_Object, Lisp_Object);
 
 /* We used to return NULL when emacs_value was a different type from
    Lisp_Object, but nowadays we just use Qnil instead.  Although they
@@ -243,6 +248,12 @@ struct module_fun_env
     return error_retval;                                                \
   MODULE_HANDLE_NONLOCAL_EXIT (error_retval)
 
+static void
+CHECK_USER_PTR (Lisp_Object obj)
+{
+  CHECK_TYPE (USER_PTRP (obj), Quser_ptrp, obj);
+}
+
 /* Catch signals and throws only if the code can actually signal or
    throw.  If checking is enabled, abort if the current thread is not
    the Emacs main thread.  */
@@ -270,11 +281,8 @@ module_make_global_ref (emacs_env *env, emacs_value ref)
     {
       Lisp_Object value = HASH_VALUE (h, i);
       EMACS_INT refcount = XFASTINT (value) + 1;
-      if (refcount > MOST_POSITIVE_FIXNUM)
-        {
-          module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
-          return module_nil;
-        }
+      if (MOST_POSITIVE_FIXNUM < refcount)
+       xsignal0 (Qoverflow_error);
       value = make_natnum (refcount);
       set_hash_value_slot (h, i, value);
     }
@@ -387,17 +395,19 @@ module_make_function (emacs_env *env, ptrdiff_t min_arity, ptrdiff_t max_arity,
   envptr->data = data;
 
   Lisp_Object envobj = make_save_ptr (envptr);
-  Lisp_Object doc
-    = (documentation
-       ? code_convert_string_norecord (build_unibyte_string (documentation),
-                                      Qutf_8, false)
-       : Qnil);
+  Lisp_Object doc = Qnil;
+  if (documentation)
+    {
+      AUTO_STRING (unibyte_doc, documentation);
+      doc = code_convert_string_norecord (unibyte_doc, Qutf_8, false);
+    }
+
   /* FIXME: Use a bytecompiled object, or even better a subr.  */
   Lisp_Object ret = list4 (Qlambda,
                            list2 (Qand_rest, Qargs),
                            doc,
                            list4 (Qapply,
-                                  list2 (Qfunction, Qinternal_module_call),
+                                  list2 (Qfunction, Qinternal__module_call),
                                   envobj,
                                   Qargs));
 
@@ -414,6 +424,8 @@ module_funcall (emacs_env *env, emacs_value fun, ptrdiff_t nargs,
      first arg, because that's what Ffuncall takes.  */
   Lisp_Object *newargs;
   USE_SAFE_ALLOCA;
+  if (nargs == PTRDIFF_MAX)
+    xsignal0 (Qoverflow_error);
   SAFE_ALLOCA_LISP (newargs, nargs + 1);
   newargs[0] = value_to_lisp (fun);
   for (ptrdiff_t i = 0; i < nargs; i++)
@@ -460,11 +472,7 @@ module_extract_integer (emacs_env *env, emacs_value n)
 {
   MODULE_FUNCTION_BEGIN (0);
   Lisp_Object l = value_to_lisp (n);
-  if (! INTEGERP (l))
-    {
-      module_wrong_type (env, Qintegerp, l);
-      return 0;
-    }
+  CHECK_NUMBER (l);
   return XINT (l);
 }
 
@@ -472,11 +480,8 @@ static emacs_value
 module_make_integer (emacs_env *env, intmax_t n)
 {
   MODULE_FUNCTION_BEGIN (module_nil);
-  if (! (MOST_NEGATIVE_FIXNUM <= n && n <= MOST_POSITIVE_FIXNUM))
-    {
-      module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
-      return module_nil;
-    }
+  if (FIXNUM_OVERFLOW_P (n))
+    xsignal0 (Qoverflow_error);
   return lisp_to_value (make_number (n));
 }
 
@@ -485,11 +490,7 @@ module_extract_float (emacs_env *env, emacs_value f)
 {
   MODULE_FUNCTION_BEGIN (0);
   Lisp_Object lisp = value_to_lisp (f);
-  if (! FLOATP (lisp))
-    {
-      module_wrong_type (env, Qfloatp, lisp);
-      return 0;
-    }
+  CHECK_TYPE (FLOATP (lisp), Qfloatp, lisp);
   return XFLOAT_DATA (lisp);
 }
 
@@ -506,19 +507,10 @@ module_copy_string_contents (emacs_env *env, emacs_value value, char *buffer,
 {
   MODULE_FUNCTION_BEGIN (false);
   Lisp_Object lisp_str = value_to_lisp (value);
-  if (! STRINGP (lisp_str))
-    {
-      module_wrong_type (env, Qstringp, lisp_str);
-      return false;
-    }
+  CHECK_STRING (lisp_str);
 
   Lisp_Object lisp_str_utf8 = ENCODE_UTF_8 (lisp_str);
   ptrdiff_t raw_size = SBYTES (lisp_str_utf8);
-  if (raw_size == PTRDIFF_MAX)
-    {
-      module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
-      return false;
-    }
   ptrdiff_t required_buf_size = raw_size + 1;
 
   eassert (length != NULL);
@@ -534,8 +526,7 @@ module_copy_string_contents (emacs_env *env, emacs_value value, char *buffer,
   if (*length < required_buf_size)
     {
       *length = required_buf_size;
-      module_non_local_exit_signal_1 (env, Qargs_out_of_range, Qnil);
-      return false;
+      xsignal0 (Qargs_out_of_range);
     }
 
   *length = required_buf_size;
@@ -548,12 +539,7 @@ static emacs_value
 module_make_string (emacs_env *env, const char *str, ptrdiff_t length)
 {
   MODULE_FUNCTION_BEGIN (module_nil);
-  if (length > STRING_BYTES_BOUND)
-    {
-      module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
-      return module_nil;
-    }
-  Lisp_Object lstr = make_unibyte_string (str, length);
+  AUTO_STRING_WITH_LEN (lstr, str, length);
   return lisp_to_value (code_convert_string_norecord (lstr, Qutf_8, false));
 }
 
@@ -569,11 +555,7 @@ module_get_user_ptr (emacs_env *env, emacs_value uptr)
 {
   MODULE_FUNCTION_BEGIN (NULL);
   Lisp_Object lisp = value_to_lisp (uptr);
-  if (! USER_PTRP (lisp))
-    {
-      module_wrong_type (env, Quser_ptr, lisp);
-      return NULL;
-    }
+  CHECK_USER_PTR (lisp);
   return XUSER_PTR (lisp)->p;
 }
 
@@ -582,12 +564,8 @@ module_set_user_ptr (emacs_env *env, emacs_value uptr, void *ptr)
 {
   /* FIXME: This function should return bool because it can fail.  */
   MODULE_FUNCTION_BEGIN ();
-  check_main_thread ();
-  if (module_non_local_exit_check (env) != emacs_funcall_exit_return)
-    return;
   Lisp_Object lisp = value_to_lisp (uptr);
-  if (! USER_PTRP (lisp))
-    module_wrong_type (env, Quser_ptr, lisp);
+  CHECK_USER_PTR (lisp);
   XUSER_PTR (lisp)->p = ptr;
 }
 
@@ -596,11 +574,7 @@ module_get_user_finalizer (emacs_env *env, emacs_value uptr)
 {
   MODULE_FUNCTION_BEGIN (NULL);
   Lisp_Object lisp = value_to_lisp (uptr);
-  if (! USER_PTRP (lisp))
-    {
-      module_wrong_type (env, Quser_ptr, lisp);
-      return NULL;
-    }
+  CHECK_USER_PTR (lisp);
   return XUSER_PTR (lisp)->finalizer;
 }
 
@@ -611,30 +585,26 @@ module_set_user_finalizer (emacs_env *env, emacs_value uptr,
   /* FIXME: This function should return bool because it can fail.  */
   MODULE_FUNCTION_BEGIN ();
   Lisp_Object lisp = value_to_lisp (uptr);
-  if (! USER_PTRP (lisp))
-    module_wrong_type (env, Quser_ptr, lisp);
+  CHECK_USER_PTR (lisp);
   XUSER_PTR (lisp)->finalizer = fin;
 }
 
+static void
+check_vec_index (Lisp_Object lvec, ptrdiff_t i)
+{
+  CHECK_VECTOR (lvec);
+  if (! (0 <= i && i < ASIZE (lvec)))
+    args_out_of_range_3 (make_fixnum_or_float (i),
+                        make_number (0), make_number (ASIZE (lvec) - 1));
+}
+
 static void
 module_vec_set (emacs_env *env, emacs_value vec, ptrdiff_t i, emacs_value val)
 {
   /* FIXME: This function should return bool because it can fail.  */
   MODULE_FUNCTION_BEGIN ();
   Lisp_Object lvec = value_to_lisp (vec);
-  if (! VECTORP (lvec))
-    {
-      module_wrong_type (env, Qvectorp, lvec);
-      return;
-    }
-  if (! (0 <= i && i < ASIZE (lvec)))
-    {
-      if (MOST_NEGATIVE_FIXNUM <= i && i <= MOST_POSITIVE_FIXNUM)
-       module_args_out_of_range (env, lvec, make_number (i));
-      else
-       module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
-      return;
-    }
+  check_vec_index (lvec, i);
   ASET (lvec, i, value_to_lisp (val));
 }
 
@@ -643,19 +613,7 @@ module_vec_get (emacs_env *env, emacs_value vec, ptrdiff_t i)
 {
   MODULE_FUNCTION_BEGIN (module_nil);
   Lisp_Object lvec = value_to_lisp (vec);
-  if (! VECTORP (lvec))
-    {
-      module_wrong_type (env, Qvectorp, lvec);
-      return module_nil;
-    }
-  if (! (0 <= i && i < ASIZE (lvec)))
-    {
-      if (MOST_NEGATIVE_FIXNUM <= i && i <= MOST_POSITIVE_FIXNUM)
-       module_args_out_of_range (env, lvec, make_number (i));
-      else
-       module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
-      return module_nil;
-    }
+  check_vec_index (lvec, i);
   return lisp_to_value (AREF (lvec, i));
 }
 
@@ -665,11 +623,7 @@ module_vec_size (emacs_env *env, emacs_value vec)
   /* FIXME: Return a sentinel value (e.g., -1) on error.  */
   MODULE_FUNCTION_BEGIN (0);
   Lisp_Object lvec = value_to_lisp (vec);
-  if (! VECTORP (lvec))
-    {
-      module_wrong_type (env, Qvectorp, lvec);
-      return 0;
-    }
+  CHECK_VECTOR (lvec);
   return ASIZE (lvec);
 }
 
@@ -828,14 +782,6 @@ module_non_local_exit_throw_1 (emacs_env *env, Lisp_Object tag,
     }
 }
 
-/* Module version of `wrong_type_argument'.  */
-static void
-module_wrong_type (emacs_env *env, Lisp_Object predicate, Lisp_Object value)
-{
-  module_non_local_exit_signal_1 (env, Qwrong_type_argument,
-                                 list2 (predicate, value));
-}
-
 /* Signal an out-of-memory condition to the caller.  */
 static void
 module_out_of_memory (emacs_env *env)
@@ -846,13 +792,6 @@ module_out_of_memory (emacs_env *env)
                                  XCDR (Vmemory_signal_data));
 }
 
-/* Signal arguments are out of range.  */
-static void
-module_args_out_of_range (emacs_env *env, Lisp_Object a1, Lisp_Object a2)
-{
-  module_non_local_exit_signal_1 (env, Qargs_out_of_range, list2 (a1, a2));
-}
-
 \f
 /* Value conversion.  */
 
@@ -1055,10 +994,12 @@ module_format_fun_env (const struct module_fun_env *env)
        ? exprintf (&buf, &bufsize, buffer, -1,
                   "#<module function %s from %s>", sym, path)
        : sprintf (buffer, noaddr_format, env->subr));
-  Lisp_Object unibyte_result = make_unibyte_string (buffer, size);
+  AUTO_STRING_WITH_LEN (unibyte_result, buffer, size);
+  Lisp_Object result = code_convert_string_norecord (unibyte_result,
+                                                    Qutf_8, false);
   if (buf != buffer)
     xfree (buf);
-  return code_convert_string_norecord (unibyte_result, Qutf_8, false);
+  return result;
 }
 
 \f
@@ -1117,7 +1058,7 @@ syms_of_module (void)
 
   defsubr (&Smodule_load);
 
-  DEFSYM (Qinternal_module_call, "internal--module-call");
+  DEFSYM (Qinternal__module_call, "internal--module-call");
   defsubr (&Sinternal_module_call);
 }
 
index b4ae5ea74338d4483a986febe314a753f4ac01e7..ae7311b05a7d7a687b9056c1af8774996320d001 100644 (file)
@@ -41,7 +41,7 @@ typedef struct emacs_env_25 emacs_env;
    BEWARE: Do not assume NULL is a valid value!  */
 typedef struct emacs_value_tag *emacs_value;
 
-enum emacs_arity { emacs_variadic_function = -2 };
+enum { emacs_variadic_function = -2 };
 
 /* Struct passed to a module init function (emacs_module_init).  */
 struct emacs_runtime
@@ -57,13 +57,6 @@ struct emacs_runtime
 };
 
 
-/* Function prototype for the module init function.  */
-typedef int (*emacs_init_function) (struct emacs_runtime *ert);
-
-/* Function prototype for the module Lisp functions.  */
-typedef emacs_value (*emacs_subr) (emacs_env *env, ptrdiff_t nargs,
-                                  emacs_value args[], void *data);
-
 /* Possible Emacs function call outcomes.  */
 enum emacs_funcall_exit
 {
index 5c187e76ba181ecfd6e6f69ed99346aecdb1b387..3e0cf5964028aacae1836544e8d016eb3a55789c 100644 (file)
@@ -57,6 +57,11 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "dosfns.h"
 #endif
 
+#ifdef HAVE_LIBSYSTEMD
+# include <systemd/sd-daemon.h>
+# include <sys/socket.h>
+#endif
+
 #ifdef HAVE_WINDOW_SYSTEM
 #include TERM_HEADER
 #endif /* HAVE_WINDOW_SYSTEM */
@@ -80,6 +85,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "composite.h"
 #include "dispextern.h"
 #include "regex.h"
+#include "sheap.h"
 #include "syntax.h"
 #include "sysselect.h"
 #include "systime.h"
@@ -128,14 +134,15 @@ Lisp_Object Vlibrary_cache;
 bool initialized;
 
 /* Set to true if this instance of Emacs might dump.  */
+#ifndef DOUG_LEA_MALLOC
+static
+#endif
 bool might_dump;
 
 #ifdef DARWIN_OS
 extern void unexec_init_emacs_zone (void);
 #endif
 
-extern void malloc_enable_thread (void);
-
 /* If true, Emacs should not attempt to use a window-specific code,
    but instead should use the virtual terminal under which it was started.  */
 bool inhibit_window_system;
@@ -180,6 +187,9 @@ bool noninteractive;
 /* True means remove site-lisp directories from load-path.  */
 bool no_site_lisp;
 
+/* True means put details like time stamps into builds.  */
+bool build_details;
+
 /* Name for the server started by the daemon.*/
 static char *daemon_name;
 
@@ -221,6 +231,7 @@ Initialization options:\n\
 --display, -d DISPLAY       use X server DISPLAY\n\
 ",
     "\
+--no-build-details          do not add build details such as time stamps\n\
 --no-desktop                do not load a saved desktop\n\
 --no-init-file, -q          load neither ~/.emacs nor default.el\n\
 --no-loadup, -nl            do not load loadup.el into bare Emacs\n\
@@ -353,17 +364,20 @@ terminate_due_to_signal (int sig, int backtrace_limit)
 {
   signal (sig, SIG_DFL);
 
-  /* If fatal error occurs in code below, avoid infinite recursion.  */
-  if (! fatal_error_in_progress)
+  if (attempt_orderly_shutdown_on_fatal_signal)
     {
-      fatal_error_in_progress = 1;
+      /* If fatal error occurs in code below, avoid infinite recursion.  */
+      if (! fatal_error_in_progress)
+        {
+          fatal_error_in_progress = 1;
 
-      totally_unblock_input ();
-      if (sig == SIGTERM || sig == SIGHUP || sig == SIGINT)
-        Fkill_emacs (make_number (sig));
+          totally_unblock_input ();
+          if (sig == SIGTERM || sig == SIGHUP || sig == SIGINT)
+            Fkill_emacs (make_number (sig));
 
-      shut_down_emacs (sig, Qnil);
-      emacs_backtrace (backtrace_limit);
+          shut_down_emacs (sig, Qnil);
+          emacs_backtrace (backtrace_limit);
+        }
     }
 
   /* Signal the same code; this time it will really be fatal.
@@ -713,6 +727,7 @@ main (int argc, char **argv)
     unexec_init_emacs_zone ();
 #endif
 
+  init_standard_fds ();
   atexit (close_output_streams);
 
 #ifdef HAVE_MODULES
@@ -772,7 +787,7 @@ main (int argc, char **argv)
       filename_from_ansi (ch_to_dir, newdir);
       ch_to_dir = newdir;
 #endif
-      original_pwd = get_current_dir_name ();
+      original_pwd = emacs_get_current_dir_name ();
       if (chdir (ch_to_dir) != 0)
         {
           fprintf (stderr, "%s: Can't chdir to %s: %s\n",
@@ -891,24 +906,25 @@ main (int argc, char **argv)
       char *term;
       if (argmatch (argv, argc, "-t", "--terminal", 4, &term, &skip_args))
        {
-         int result;
-         emacs_close (0);
-         emacs_close (1);
-         result = emacs_open (term, O_RDWR, 0);
-         if (result < 0 || fcntl (0, F_DUPFD_CLOEXEC, 1) < 0)
+         emacs_close (STDIN_FILENO);
+         emacs_close (STDOUT_FILENO);
+         int result = emacs_open (term, O_RDWR, 0);
+         if (result != STDIN_FILENO
+             || (fcntl (STDIN_FILENO, F_DUPFD_CLOEXEC, STDOUT_FILENO)
+                 != STDOUT_FILENO))
            {
              char *errstring = strerror (errno);
              fprintf (stderr, "%s: %s: %s\n", argv[0], term, errstring);
-             exit (1);
+             exit (EXIT_FAILURE);
            }
-         if (! isatty (0))
+         if (! isatty (STDIN_FILENO))
            {
              fprintf (stderr, "%s: %s: not a tty\n", argv[0], term);
-             exit (1);
+             exit (EXIT_FAILURE);
            }
          fprintf (stderr, "Using %s\n", term);
 #ifdef HAVE_WINDOW_SYSTEM
-         inhibit_window_system = 1; /* -t => -nw */
+         inhibit_window_system = true; /* -t => -nw */
 #endif
        }
       else
@@ -956,6 +972,9 @@ main (int argc, char **argv)
   w32_daemon_event = NULL;
 #endif
 
+
+  int sockfd = -1;
+
   if (argmatch (argv, argc, "-daemon", "--daemon", 5, NULL, &skip_args)
       || argmatch (argv, argc, "-daemon", "--daemon", 5, &dname_arg, &skip_args))
     {
@@ -989,6 +1008,21 @@ main (int argc, char **argv)
          exit (1);
        }
 
+#ifdef HAVE_LIBSYSTEMD
+      /* Read the number of sockets passed through by systemd.  */
+      int systemd_socket = sd_listen_fds (1);
+
+      if (systemd_socket > 1)
+        fprintf (stderr,
+                ("\n"
+                 "Warning: systemd passed more than one socket to Emacs.\n"
+                 "Try 'Accept=false' in the Emacs socket unit file.\n"));
+      else if (systemd_socket == 1
+              && (0 < sd_is_socket (SD_LISTEN_FDS_START,
+                                    AF_UNSPEC, SOCK_STREAM, 1)))
+       sockfd = SD_LISTEN_FDS_START;
+#endif /* HAVE_LIBSYSTEMD */
+
 #ifndef DAEMON_MUST_EXEC
 #ifdef USE_GTK
       fprintf (stderr, "\nWarning: due to a long standing Gtk+ bug\nhttp://bugzilla.gnome.org/show_bug.cgi?id=85715\n\
@@ -1185,6 +1219,9 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
   no_site_lisp
     = argmatch (argv, argc, "-nsl", "--no-site-lisp", 11, NULL, &skip_args);
 
+  build_details = ! argmatch (argv, argc, "-no-build-details",
+                             "--no-build-details", 7, NULL, &skip_args);
+
 #ifdef HAVE_NS
   ns_pool = ns_alloc_autorelease_pool ();
 #ifdef NS_IMPL_GNUSTEP
@@ -1198,7 +1235,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
       /* Started from GUI? */
       /* FIXME: Do the right thing if getenv returns NULL, or if
          chdir fails.  */
-      if (! inhibit_window_system && ! isatty (0) && ! ch_to_dir)
+      if (! inhibit_window_system && ! isatty (STDIN_FILENO) && ! ch_to_dir)
         chdir (getenv ("HOME"));
       if (skip_args < argc)
         {
@@ -1542,7 +1579,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
   /* This can create a thread that may call getenv, so it must follow
      all calls to putenv and setenv.  Also, this sets up
      add_keyboard_wait_descriptor, which init_display uses.  */
-  init_process_emacs ();
+  init_process_emacs (sockfd);
 
   init_keyboard ();    /* This too must precede init_sys_modes.  */
   if (!noninteractive)
@@ -1634,6 +1671,7 @@ static const struct standard_args standard_args[] =
   { "-help", "--help", 90, 0 },
   { "-nl", "--no-loadup", 70, 0 },
   { "-nsl", "--no-site-lisp", 65, 0 },
+  { "-no-build-details", "--no-build-details", 63, 0 },
   /* -d must come last before the options handled in startup.el.  */
   { "-d", "--display", 60, 1 },
   { "-display", 0, 60, 1 },
@@ -2076,6 +2114,17 @@ You must run Emacs in batch mode in order to dump it.  */)
   tem = Vpurify_flag;
   Vpurify_flag = Qnil;
 
+#ifdef HYBRID_MALLOC
+  {
+    static char const fmt[] = "%d of %d static heap bytes used";
+    char buf[sizeof fmt + 2 * (INT_STRLEN_BOUND (int) - 2)];
+    int max_usage = max_bss_sbrk_ptr - bss_sbrk_buffer;
+    sprintf (buf, fmt, max_usage, STATIC_HEAP_SIZE);
+    /* Don't log messages, because at this point buffers cannot be created.  */
+    message1_nolog (buf);
+  }
+#endif
+
   fflush (stdout);
   /* Tell malloc where start of impure now is.  */
   /* Also arrange for warnings when nearly out of space.  */
@@ -2334,9 +2383,9 @@ from the parent process and its tty file descriptors.  */)
   /* Get rid of stdin, stdout and stderr.  */
   nfd = emacs_open ("/dev/null", O_RDWR, 0);
   err |= nfd < 0;
-  err |= dup2 (nfd, 0) < 0;
-  err |= dup2 (nfd, 1) < 0;
-  err |= dup2 (nfd, 2) < 0;
+  err |= dup2 (nfd, STDIN_FILENO) < 0;
+  err |= dup2 (nfd, STDOUT_FILENO) < 0;
+  err |= dup2 (nfd, STDERR_FILENO) < 0;
   err |= emacs_close (nfd) != 0;
 
   /* Closing the pipe will notify the parent that it can exit.
@@ -2396,8 +2445,8 @@ Special values:
   `ms-dos'       compiled as an MS-DOS application.
   `windows-nt'   compiled as a native W32 application.
   `cygwin'       compiled using the Cygwin library.
-Anything else (in Emacs 24.1, the possibilities are: aix, berkeley-unix,
-hpux, irix, usg-unix-v) indicates some sort of Unix system.  */);
+Anything else (in Emacs 26, the possibilities are: aix, berkeley-unix,
+hpux, usg-unix-v) indicates some sort of Unix system.  */);
   Vsystem_type = intern_c_string (SYSTEM_TYPE);
   /* See configure.ac for the possible SYSTEM_TYPEs.  */
 
index fe6460d53bbac9093c136ea55177f8c47f01868d..72facd5db64c8452f1edba23074438291306b9a6 100644 (file)
@@ -90,6 +90,7 @@ union specbinding *backtrace_top (void) EXTERNALLY_VISIBLE;
 
 static Lisp_Object funcall_lambda (Lisp_Object, ptrdiff_t, Lisp_Object *);
 static Lisp_Object apply_lambda (Lisp_Object, Lisp_Object, ptrdiff_t);
+static Lisp_Object lambda_arity (Lisp_Object);
 
 static Lisp_Object
 specpdl_symbol (union specbinding *pdl)
@@ -1751,9 +1752,9 @@ find_handler_clause (Lisp_Object handlers, Lisp_Object conditions)
 }
 
 
-/* Dump an error message; called like vprintf.  */
-void
-verror (const char *m, va_list ap)
+/* Format and return a string; called like vprintf.  */
+Lisp_Object
+vformat_string (const char *m, va_list ap)
 {
   char buf[4000];
   ptrdiff_t size = sizeof buf;
@@ -1767,7 +1768,14 @@ verror (const char *m, va_list ap)
   if (buffer != buf)
     xfree (buffer);
 
-  xsignal1 (Qerror, string);
+  return string;
+}
+
+/* Dump an error message; called like vprintf.  */
+void
+verror (const char *m, va_list ap)
+{
+  xsignal1 (Qerror, vformat_string (m, ap));
 }
 
 
@@ -2927,6 +2935,118 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs,
   return unbind_to (count, val);
 }
 
+DEFUN ("func-arity", Ffunc_arity, Sfunc_arity, 1, 1, 0,
+       doc: /* Return minimum and maximum number of args allowed for FUNCTION.
+FUNCTION must be a function of some kind.
+The returned value is a cons cell (MIN . MAX).  MIN is the minimum number
+of args.  MAX is the maximum number, or the symbol `many', for a
+function with `&rest' args, or `unevalled' for a special form.  */)
+  (Lisp_Object function)
+{
+  Lisp_Object original;
+  Lisp_Object funcar;
+  Lisp_Object result;
+
+  original = function;
+
+ retry:
+
+  /* Optimize for no indirection.  */
+  function = original;
+  if (SYMBOLP (function) && !NILP (function))
+    {
+      function = XSYMBOL (function)->function;
+      if (SYMBOLP (function))
+       function = indirect_function (function);
+    }
+
+  if (CONSP (function) && EQ (XCAR (function), Qmacro))
+    function = XCDR (function);
+
+  if (SUBRP (function))
+    result = Fsubr_arity (function);
+  else if (COMPILEDP (function))
+    result = lambda_arity (function);
+  else
+    {
+      if (NILP (function))
+       xsignal1 (Qvoid_function, original);
+      if (!CONSP (function))
+       xsignal1 (Qinvalid_function, original);
+      funcar = XCAR (function);
+      if (!SYMBOLP (funcar))
+       xsignal1 (Qinvalid_function, original);
+      if (EQ (funcar, Qlambda)
+         || EQ (funcar, Qclosure))
+       result = lambda_arity (function);
+      else if (EQ (funcar, Qautoload))
+       {
+         Fautoload_do_load (function, original, Qnil);
+         goto retry;
+       }
+      else
+       xsignal1 (Qinvalid_function, original);
+    }
+  return result;
+}
+
+/* FUN must be either a lambda-expression or a compiled-code object.  */
+static Lisp_Object
+lambda_arity (Lisp_Object fun)
+{
+  Lisp_Object syms_left;
+
+  if (CONSP (fun))
+    {
+      if (EQ (XCAR (fun), Qclosure))
+       {
+         fun = XCDR (fun);     /* Drop `closure'.  */
+         CHECK_LIST_CONS (fun, fun);
+       }
+      syms_left = XCDR (fun);
+      if (CONSP (syms_left))
+       syms_left = XCAR (syms_left);
+      else
+       xsignal1 (Qinvalid_function, fun);
+    }
+  else if (COMPILEDP (fun))
+    {
+      ptrdiff_t size = ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK;
+      if (size <= COMPILED_STACK_DEPTH)
+       xsignal1 (Qinvalid_function, fun);
+      syms_left = AREF (fun, COMPILED_ARGLIST);
+      if (INTEGERP (syms_left))
+        return get_byte_code_arity (syms_left);
+    }
+  else
+    emacs_abort ();
+
+  EMACS_INT minargs = 0, maxargs = 0;
+  bool optional = false;
+  for (; CONSP (syms_left); syms_left = XCDR (syms_left))
+    {
+      Lisp_Object next = XCAR (syms_left);
+      if (!SYMBOLP (next))
+       xsignal1 (Qinvalid_function, fun);
+
+      if (EQ (next, Qand_rest))
+       return Fcons (make_number (minargs), Qmany);
+      else if (EQ (next, Qand_optional))
+       optional = true;
+      else
+       {
+          if (!optional)
+            minargs++;
+          maxargs++;
+        }
+    }
+
+  if (!NILP (syms_left))
+    xsignal1 (Qinvalid_function, fun);
+
+  return Fcons (make_number (minargs), make_number (maxargs));
+}
+
 DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
        1, 1, 0,
        doc: /* If byte-compiled OBJECT is lazy-loaded, fetch it now.  */)
@@ -3801,6 +3921,7 @@ alist of active lexical bindings.  */);
   defsubr (&Seval);
   defsubr (&Sapply);
   defsubr (&Sfuncall);
+  defsubr (&Sfunc_arity);
   defsubr (&Srun_hooks);
   defsubr (&Srun_hook_with_args);
   defsubr (&Srun_hook_with_args_until_success);
index dfab3de9e94b36633aefe6253e93dcdd57bfdb3a..d9318083ce0b1e6c573d0643ed6ccbc4788c8c4c 100644 (file)
@@ -187,9 +187,9 @@ report_file_errno (char const *string, Lisp_Object name, int errorno)
   Lisp_Object data = CONSP (name) || NILP (name) ? name : list1 (name);
   synchronize_system_messages_locale ();
   char *str = strerror (errorno);
+  AUTO_STRING (unibyte_str, str);
   Lisp_Object errstring
-    = code_convert_string_norecord (build_unibyte_string (str),
-                                   Vlocale_coding_system, 0);
+    = code_convert_string_norecord (unibyte_str, Vlocale_coding_system, 0);
   Lisp_Object errdata = Fcons (errstring, data);
 
   if (errorno == EEXIST)
@@ -217,9 +217,9 @@ report_file_notify_error (const char *string, Lisp_Object name)
   Lisp_Object data = CONSP (name) || NILP (name) ? name : list1 (name);
   synchronize_system_messages_locale ();
   char *str = strerror (errno);
+  AUTO_STRING (unibyte_str, str);
   Lisp_Object errstring
-    = code_convert_string_norecord (build_unibyte_string (str),
-                                   Vlocale_coding_system, 0);
+    = code_convert_string_norecord (unibyte_str, Vlocale_coding_system, 0);
   Lisp_Object errdata = Fcons (errstring, data);
 
   xsignal (Qfile_notify_error, Fcons (build_string (string), errdata));
@@ -1015,11 +1015,9 @@ filesystem tree, not (expand-file-name ".."  dirname).  */)
          /* Drive must be set, so this is okay.  */
          if (strcmp (nm - 2, SSDATA (name)) != 0)
            {
-             char temp[] = " :";
-
              name = make_specified_string (nm, -1, p - nm, multibyte);
-             temp[0] = DRIVE_LETTER (drive);
-             AUTO_STRING (drive_prefix, temp);
+             char temp[] = { DRIVE_LETTER (drive), ':', 0 };
+             AUTO_STRING_WITH_LEN (drive_prefix, temp, 2);
              name = concat2 (drive_prefix, name);
            }
 #ifdef WINDOWSNT
@@ -2664,13 +2662,13 @@ file_directory_p (char const *file)
 
 DEFUN ("file-accessible-directory-p", Ffile_accessible_directory_p,
        Sfile_accessible_directory_p, 1, 1, 0,
-       doc: /* Return t if file FILENAME names a directory you can open.
-For the value to be t, FILENAME must specify the name of a directory as a file,
-and the directory must allow you to open files in it.  In order to use a
-directory as a buffer's current directory, this predicate must return true.
-A directory name spec may be given instead; then the value is t
-if the directory so specified exists and really is a readable and
-searchable directory.  */)
+       doc: /* Return t if FILENAME names a directory you can open.
+For the value to be t, FILENAME must specify the name of a directory
+as a file, and the directory must allow you to open files in it.  In
+order to use a directory as a buffer's current directory, this
+predicate must return true.  A directory name spec may be given
+instead; then the value is t if the directory so specified exists and
+really is a readable and searchable directory.  */)
   (Lisp_Object filename)
 {
   Lisp_Object absname;
@@ -4806,7 +4804,7 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename,
 
   encoded_filename = ENCODE_FILE (filename);
   fn = SSDATA (encoded_filename);
-  open_flags = O_WRONLY | O_BINARY | O_CREAT;
+  open_flags = O_WRONLY | O_CREAT;
   open_flags |= EQ (mustbenew, Qexcl) ? O_EXCL : !NILP (append) ? 0 : O_TRUNC;
   if (NUMBERP (append))
     offset = file_offset (append);
@@ -4925,7 +4923,7 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename,
   if (timespec_valid_p (modtime)
       && ! (valid_timestamp_file_system && st.st_dev == timestamp_file_system))
     {
-      int desc1 = emacs_open (fn, O_WRONLY | O_BINARY, 0);
+      int desc1 = emacs_open (fn, O_WRONLY, 0);
       if (desc1 >= 0)
        {
          struct stat st1;
index 8aaa656438d6c847eeb5c0e4ee21f6876cb1476f..62017188b33bf644c81e667b5b4c0e5a292f51a9 100644 (file)
@@ -193,14 +193,11 @@ get_boot_time (void)
   /* If we did not find a boot time in wtmp, look at wtmp, and so on.  */
   for (counter = 0; counter < 20 && ! boot_time; counter++)
     {
+      Lisp_Object filename = Qnil;
+      bool delete_flag = false;
       char cmd_string[sizeof WTMP_FILE ".19.gz"];
-      Lisp_Object tempname, filename;
-      bool delete_flag = 0;
-
-      filename = Qnil;
-
-      tempname = make_formatted_string
-       (cmd_string, "%s.%d", WTMP_FILE, counter);
+      AUTO_STRING_WITH_LEN (tempname, cmd_string,
+                           sprintf (cmd_string, "%s.%d", WTMP_FILE, counter));
       if (! NILP (Ffile_exists_p (tempname)))
        filename = tempname;
       else
@@ -220,7 +217,7 @@ get_boot_time (void)
              CALLN (Fcall_process, build_string ("gzip"), Qnil,
                     list2 (QCfile, filename), Qnil,
                     build_string ("-cd"), tempname);
-             delete_flag = 1;
+             delete_flag = true;
            }
        }
 
@@ -255,14 +252,7 @@ get_boot_time_1 (const char *filename, bool newest)
   struct utmp ut, *utp;
 
   if (filename)
-    {
-      /* On some versions of IRIX, opening a nonexistent file name
-        is likely to crash in the utmp routines.  */
-      if (faccessat (AT_FDCWD, filename, R_OK, AT_EACCESS) != 0)
-       return;
-
-      utmpname (filename);
-    }
+    utmpname (filename);
 
   setutent ();
 
@@ -497,7 +487,7 @@ read_lock_data (char *lfname, char lfinfo[MAX_LFINFO + 1])
   while ((nbytes = readlinkat (AT_FDCWD, lfname, lfinfo, MAX_LFINFO + 1)) < 0
         && errno == EINVAL)
     {
-      int fd = emacs_open (lfname, O_RDONLY | O_BINARY | O_NOFOLLOW, 0);
+      int fd = emacs_open (lfname, O_RDONLY | O_NOFOLLOW, 0);
       if (0 <= fd)
        {
          /* Use read, not emacs_read, since FD isn't unwind-protected.  */
index 9bbbb6d7b7177575c58f6a493e6771ae74322121..731f0a899a9415edfe8fe05f157c85246c63ed62 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -21,8 +21,10 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <config.h>
 
 #include <unistd.h>
+#include <filevercmp.h>
 #include <intprops.h>
 #include <vla.h>
+#include <errno.h>
 
 #include "lisp.h"
 #include "character.h"
@@ -331,6 +333,50 @@ Symbols are also allowed; their print names are used instead.  */)
   return i1 < SCHARS (string2) ? Qt : Qnil;
 }
 
+DEFUN ("string-version-lessp", Fstring_version_lessp,
+       Sstring_version_lessp, 2, 2, 0,
+       doc: /* Return non-nil if S1 is less than S2, as version strings.
+
+This function compares version strings S1 and S2:
+   1) By prefix lexicographically.
+   2) Then by version (similarly to version comparison of Debian's dpkg).
+      Leading zeros in version numbers are ignored.
+   3) If both prefix and version are equal, compare as ordinary strings.
+
+For example, \"foo2.png\" compares less than \"foo12.png\".
+Case is significant.
+Symbols are also allowed; their print names are used instead.  */)
+  (Lisp_Object string1, Lisp_Object string2)
+{
+  if (SYMBOLP (string1))
+    string1 = SYMBOL_NAME (string1);
+  if (SYMBOLP (string2))
+    string2 = SYMBOL_NAME (string2);
+  CHECK_STRING (string1);
+  CHECK_STRING (string2);
+
+  char *p1 = SSDATA (string1);
+  char *p2 = SSDATA (string2);
+  char *lim1 = p1 + SBYTES (string1);
+  char *lim2 = p2 + SBYTES (string2);
+  int cmp;
+
+  while ((cmp = filevercmp (p1, p2)) == 0)
+    {
+      /* If the strings are identical through their first null bytes,
+        skip past identical prefixes and try again.  */
+      ptrdiff_t size = strlen (p1) + 1;
+      p1 += size;
+      p2 += size;
+      if (lim1 < p1)
+       return lim2 < p2 ? Qnil : Qt;
+      if (lim2 < p2)
+       return Qnil;
+    }
+
+  return cmp < 0 ? Qt : Qnil;
+}
+
 DEFUN ("string-collate-lessp", Fstring_collate_lessp, Sstring_collate_lessp, 2, 4, 0,
        doc: /* Return t if first arg string is less than second in collation order.
 Symbols are also allowed; their print names are used instead.
@@ -1349,7 +1395,7 @@ The value is actually the tail of LIST whose car is ELT.  */)
   (register Lisp_Object elt, Lisp_Object list)
 {
   register Lisp_Object tail;
-  for (tail = list; CONSP (tail); tail = XCDR (tail))
+  for (tail = list; !NILP (tail); tail = XCDR (tail))
     {
       register Lisp_Object tem;
       CHECK_LIST_CONS (tail, list);
@@ -1397,7 +1443,7 @@ The value is actually the tail of LIST whose car is ELT.  */)
   if (!FLOATP (elt))
     return Fmemq (elt, list);
 
-  for (tail = list; CONSP (tail); tail = XCDR (tail))
+  for (tail = list; !NILP (tail); tail = XCDR (tail))
     {
       register Lisp_Object tem;
       CHECK_LIST_CONS (tail, list);
@@ -1710,7 +1756,7 @@ changing the value of a sequence `foo'.  */)
     {
       Lisp_Object tail, prev;
 
-      for (tail = seq, prev = Qnil; CONSP (tail); tail = XCDR (tail))
+      for (tail = seq, prev = Qnil; !NILP (tail); tail = XCDR (tail))
        {
          CHECK_LIST_CONS (tail, seq);
 
@@ -2762,17 +2808,24 @@ require_unwind (Lisp_Object old_value)
 
 DEFUN ("require", Frequire, Srequire, 1, 3, 0,
        doc: /* If feature FEATURE is not loaded, load it from FILENAME.
-If FEATURE is not a member of the list `features', then the feature
-is not loaded; so load the file FILENAME.
-If FILENAME is omitted, the printname of FEATURE is used as the file name,
-and `load' will try to load this name appended with the suffix `.elc',
-`.el', or the system-dependent suffix for dynamic module files, in that
-order.  The name without appended suffix will not be used.
-See `get-load-suffixes' for the complete list of suffixes.
-If the optional third argument NOERROR is non-nil,
-then return nil if the file is not found instead of signaling an error.
-Normally the return value is FEATURE.
-The normal messages at start and end of loading FILENAME are suppressed.  */)
+If FEATURE is not a member of the list `features', then the feature is
+not loaded; so load the file FILENAME.
+
+If FILENAME is omitted, the printname of FEATURE is used as the file
+name, and `load' will try to load this name appended with the suffix
+`.elc', `.el', or the system-dependent suffix for dynamic module
+files, in that order.  The name without appended suffix will not be
+used.  See `get-load-suffixes' for the complete list of suffixes.
+
+The directories in `load-path' are searched when trying to find the
+file name.
+
+If the optional third argument NOERROR is non-nil, then return nil if
+the file is not found instead of signaling an error.  Normally the
+return value is FEATURE.
+
+The normal messages at start and end of loading FILENAME are
+suppressed.  */)
   (Lisp_Object feature, Lisp_Object filename, Lisp_Object noerror)
 {
   Lisp_Object tem;
@@ -2953,7 +3006,6 @@ The data read from the system are decoded using `locale-coding-system'.  */)
 {
   char *str = NULL;
 #ifdef HAVE_LANGINFO_CODESET
-  Lisp_Object val;
   if (EQ (item, Qcodeset))
     {
       str = nl_langinfo (CODESET);
@@ -2969,7 +3021,7 @@ The data read from the system are decoded using `locale-coding-system'.  */)
       for (i = 0; i < 7; i++)
        {
          str = nl_langinfo (days[i]);
-         val = build_unibyte_string (str);
+         AUTO_STRING (val, str);
          /* Fixme: Is this coding system necessarily right, even if
             it is consistent with CODESET?  If not, what to do?  */
          ASET (v, i, code_convert_string_norecord (val, Vlocale_coding_system,
@@ -2989,7 +3041,7 @@ The data read from the system are decoded using `locale-coding-system'.  */)
       for (i = 0; i < 12; i++)
        {
          str = nl_langinfo (months[i]);
-         val = build_unibyte_string (str);
+         AUTO_STRING (val, str);
          ASET (v, i, code_convert_string_norecord (val, Vlocale_coding_system,
                                                    0));
        }
@@ -3622,8 +3674,6 @@ larger_vector (Lisp_Object vec, ptrdiff_t incr_min, ptrdiff_t nitems_max)
                         Low-level Functions
  ***********************************************************************/
 
-struct hash_table_test hashtest_eq, hashtest_eql, hashtest_equal;
-
 /* Compare KEY1 which has hash code HASH1 and KEY2 with hash code
    HASH2 in hash table H using `eql'.  Value is true if KEY1 and
    KEY2 are the same.  */
@@ -3664,7 +3714,6 @@ cmpfn_user_defined (struct hash_table_test *ht,
   return !NILP (call2 (ht->user_cmp_function, key1, key2));
 }
 
-
 /* Value is a hash code for KEY for use in hash table H which uses
    `eq' to compare keys.  The hash code returned is guaranteed to fit
    in a Lisp integer.  */
@@ -3672,34 +3721,27 @@ cmpfn_user_defined (struct hash_table_test *ht,
 static EMACS_UINT
 hashfn_eq (struct hash_table_test *ht, Lisp_Object key)
 {
-  EMACS_UINT hash = XHASH (key) ^ XTYPE (key);
-  return hash;
+  return XHASH (key) ^ XTYPE (key);
 }
 
 /* Value is a hash code for KEY for use in hash table H which uses
-   `eql' to compare keys.  The hash code returned is guaranteed to fit
+   `equal' to compare keys.  The hash code returned is guaranteed to fit
    in a Lisp integer.  */
 
 static EMACS_UINT
-hashfn_eql (struct hash_table_test *ht, Lisp_Object key)
+hashfn_equal (struct hash_table_test *ht, Lisp_Object key)
 {
-  EMACS_UINT hash;
-  if (FLOATP (key))
-    hash = sxhash (key, 0);
-  else
-    hash = XHASH (key) ^ XTYPE (key);
-  return hash;
+  return sxhash (key, 0);
 }
 
 /* Value is a hash code for KEY for use in hash table H which uses
-   `equal' to compare keys.  The hash code returned is guaranteed to fit
+   `eql' to compare keys.  The hash code returned is guaranteed to fit
    in a Lisp integer.  */
 
 static EMACS_UINT
-hashfn_equal (struct hash_table_test *ht, Lisp_Object key)
+hashfn_eql (struct hash_table_test *ht, Lisp_Object key)
 {
-  EMACS_UINT hash = sxhash (key, 0);
-  return hash;
+  return FLOATP (key) ? hashfn_equal (ht, key) : hashfn_eq (ht, key);
 }
 
 /* Value is a hash code for KEY for use in hash table H which uses as
@@ -3713,6 +3755,14 @@ hashfn_user_defined (struct hash_table_test *ht, Lisp_Object key)
   return hashfn_eq (ht, hash);
 }
 
+struct hash_table_test const
+  hashtest_eq = { LISPSYM_INITIALLY (Qeq), LISPSYM_INITIALLY (Qnil),
+                 LISPSYM_INITIALLY (Qnil), 0, hashfn_eq },
+  hashtest_eql = { LISPSYM_INITIALLY (Qeql), LISPSYM_INITIALLY (Qnil),
+                  LISPSYM_INITIALLY (Qnil), cmpfn_eql, hashfn_eql },
+  hashtest_equal = { LISPSYM_INITIALLY (Qequal), LISPSYM_INITIALLY (Qnil),
+                    LISPSYM_INITIALLY (Qnil), cmpfn_equal, hashfn_equal };
+
 /* Allocate basically initialized hash table.  */
 
 static struct Lisp_Hash_Table *
@@ -4402,15 +4452,29 @@ sxhash (Lisp_Object obj, int depth)
                            Lisp Interface
  ***********************************************************************/
 
+DEFUN ("sxhash-eq", Fsxhash_eq, Ssxhash_eq, 1, 1, 0,
+       doc: /* Return an integer hash code for OBJ suitable for `eq'.
+If (eq A B), then (= (sxhash-eq A) (sxhash-eq B)).  */)
+  (Lisp_Object obj)
+{
+  return make_number (hashfn_eq (NULL, obj));
+}
 
-DEFUN ("sxhash", Fsxhash, Ssxhash, 1, 1, 0,
-       doc: /* Compute a hash code for OBJ and return it as integer.  */)
+DEFUN ("sxhash-eql", Fsxhash_eql, Ssxhash_eql, 1, 1, 0,
+       doc: /* Return an integer hash code for OBJ suitable for `eql'.
+If (eql A B), then (= (sxhash-eql A) (sxhash-eql B)).  */)
   (Lisp_Object obj)
 {
-  EMACS_UINT hash = sxhash (obj, 0);
-  return make_number (hash);
+  return make_number (hashfn_eql (NULL, obj));
 }
 
+DEFUN ("sxhash-equal", Fsxhash_equal, Ssxhash_equal, 1, 1, 0,
+       doc: /* Return an integer hash code for OBJ suitable for `equal'.
+If (equal A B), then (= (sxhash-equal A) (sxhash-equal B)).  */)
+  (Lisp_Object obj)
+{
+  return make_number (hashfn_equal (NULL, obj));
+}
 
 DEFUN ("make-hash-table", Fmake_hash_table, Smake_hash_table, 0, MANY, 0,
        doc: /* Create and return a new hash table.
@@ -4691,6 +4755,21 @@ returns nil, then (funcall TEST x1 x2) also returns nil.  */)
 #include "sha256.h"
 #include "sha512.h"
 
+static Lisp_Object
+make_digest_string (Lisp_Object digest, int digest_size)
+{
+  unsigned char *p = SDATA (digest);
+
+  for (int i = digest_size - 1; i >= 0; i--)
+    {
+      static char const hexdigit[16] = "0123456789abcdef";
+      int p_i = p[i];
+      p[2 * i] = hexdigit[p_i >> 4];
+      p[2 * i + 1] = hexdigit[p_i & 0xf];
+    }
+  return digest;
+}
+
 /* ALGORITHM is a symbol: md5, sha1, sha224 and so on. */
 
 static Lisp_Object
@@ -4698,7 +4777,6 @@ secure_hash (Lisp_Object algorithm, Lisp_Object object, Lisp_Object start,
             Lisp_Object end, Lisp_Object coding_system, Lisp_Object noerror,
             Lisp_Object binary)
 {
-  int i;
   ptrdiff_t size, start_char = 0, start_byte, end_char = 0, end_byte;
   register EMACS_INT b, e;
   register struct buffer *bp;
@@ -4890,17 +4968,7 @@ secure_hash (Lisp_Object algorithm, Lisp_Object object, Lisp_Object start,
             SSDATA (digest));
 
   if (NILP (binary))
-    {
-      unsigned char *p = SDATA (digest);
-      for (i = digest_size - 1; i >= 0; i--)
-       {
-         static char const hexdigit[16] = "0123456789abcdef";
-         int p_i = p[i];
-         p[2 * i] = hexdigit[p_i >> 4];
-         p[2 * i + 1] = hexdigit[p_i & 0xf];
-       }
-      return digest;
-    }
+    return make_digest_string (digest, digest_size);
   else
     return make_unibyte_string (SSDATA (digest), digest_size);
 }
@@ -4951,6 +5019,45 @@ If BINARY is non-nil, returns a string in binary form.  */)
 {
   return secure_hash (algorithm, object, start, end, Qnil, Qnil, binary);
 }
+
+DEFUN ("buffer-hash", Fbuffer_hash, Sbuffer_hash, 0, 1, 0,
+       doc: /* Return a hash of the contents of BUFFER-OR-NAME.
+This hash is performed on the raw internal format of the buffer,
+disregarding any coding systems.
+If nil, use the current buffer." */ )
+  (Lisp_Object buffer_or_name)
+{
+  Lisp_Object buffer;
+  struct buffer *b;
+  struct sha1_ctx ctx;
+
+  if (NILP (buffer_or_name))
+    buffer = Fcurrent_buffer ();
+  else
+    buffer = Fget_buffer (buffer_or_name);
+  if (NILP (buffer))
+    nsberror (buffer_or_name);
+
+  b = XBUFFER (buffer);
+  sha1_init_ctx (&ctx);
+
+  /* Process the first part of the buffer. */
+  sha1_process_bytes (BUF_BEG_ADDR (b),
+                     BUF_GPT_BYTE (b) - BUF_BEG_BYTE (b),
+                     &ctx);
+
+  /* If the gap is before the end of the buffer, process the last half
+     of the buffer. */
+  if (BUF_GPT_BYTE (b) < BUF_Z_BYTE (b))
+    sha1_process_bytes (BUF_GAP_END_ADDR (b),
+                       BUF_Z_ADDR (b) - BUF_GAP_END_ADDR (b),
+                       &ctx);
+
+  Lisp_Object digest = make_uninit_string (SHA1_DIGEST_SIZE * 2);
+  sha1_finish_ctx (&ctx, SSDATA (digest));
+  return make_digest_string (digest, SHA1_DIGEST_SIZE);
+}
+
 \f
 void
 syms_of_fns (void)
@@ -4978,7 +5085,9 @@ syms_of_fns (void)
   DEFSYM (Qkey_or_value, "key-or-value");
   DEFSYM (Qkey_and_value, "key-and-value");
 
-  defsubr (&Ssxhash);
+  defsubr (&Ssxhash_eq);
+  defsubr (&Ssxhash_eql);
+  defsubr (&Ssxhash_equal);
   defsubr (&Smake_hash_table);
   defsubr (&Scopy_hash_table);
   defsubr (&Shash_table_count);
@@ -5049,6 +5158,7 @@ this variable.  */);
   defsubr (&Sstring_equal);
   defsubr (&Scompare_strings);
   defsubr (&Sstring_lessp);
+  defsubr (&Sstring_version_lessp);
   defsubr (&Sstring_collate_lessp);
   defsubr (&Sstring_collate_equalp);
   defsubr (&Sappend);
@@ -5109,23 +5219,6 @@ this variable.  */);
   defsubr (&Sbase64_decode_string);
   defsubr (&Smd5);
   defsubr (&Ssecure_hash);
+  defsubr (&Sbuffer_hash);
   defsubr (&Slocale_info);
-
-  hashtest_eq.name = Qeq;
-  hashtest_eq.user_hash_function = Qnil;
-  hashtest_eq.user_cmp_function = Qnil;
-  hashtest_eq.cmpfn = 0;
-  hashtest_eq.hashfn = hashfn_eq;
-
-  hashtest_eql.name = Qeql;
-  hashtest_eql.user_hash_function = Qnil;
-  hashtest_eql.user_cmp_function = Qnil;
-  hashtest_eql.cmpfn = cmpfn_eql;
-  hashtest_eql.hashfn = hashfn_eql;
-
-  hashtest_equal.name = Qequal;
-  hashtest_equal.user_hash_function = Qnil;
-  hashtest_equal.user_cmp_function = Qnil;
-  hashtest_equal.cmpfn = cmpfn_equal;
-  hashtest_equal.hashfn = hashfn_equal;
 }
index 2519599bc636b0dc7b54c5a2fc763d7341648397..6dbda40d52f028b656649520733c291d34931862 100644 (file)
@@ -1771,7 +1771,8 @@ font_parse_family_registry (Lisp_Object family, Lisp_Object registry, Lisp_Objec
       p1 = strchr (p0, '-');
       if (! p1)
        {
-         AUTO_STRING (extra, (&"*-*"[len && p0[len - 1] == '*']));
+         bool asterisk = len && p0[len - 1] == '*';
+         AUTO_STRING_WITH_LEN (extra, &"*-*"[asterisk], 3 - asterisk);
          registry = concat2 (registry, extra);
        }
       registry = Fdowncase (registry);
index dc037a807cd2cd8d7e684aabb0c4361640248436..4ab13674318d588797c067f62090a2c2a664ed05 100644 (file)
@@ -63,17 +63,26 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
    An element of a base fontset is a vector of FONT-DEFs which themselves
    are vectors of the form [ FONT-SPEC ENCODING REPERTORY ].
 
-   An element of a realized fontset is nil, t, 0, or a vector of this
-   form:
+   An element of a realized fontset is nil, t, 0, or a cons that has
+   this from:
 
-       [ PREFERRED-RFONT-DEF RFONT-DEF0 RFONT-DEF1 ... ]
+       (CHARSET-ORDERED-LIST-TICK . FONT-GROUP)
+
+   CHARSET_ORDERED_LIST_TICK is the same as charset_ordered_list_tick or -1.
+
+   FONT-GROUP is a vector of elements that have this form:
+
+       [ RFONT-DEF0 RFONT-DEF1 ... ]
 
    Each RFONT-DEFn (i.e. Realized FONT-DEF) has this form:
 
        [ FACE-ID FONT-DEF FONT-OBJECT SORTING-SCORE ]
 
-   RFONT-DEFn are automatically reordered by the current charset
-   priority list.
+   RFONT-DEFn are automatically reordered considering the current
+   charset priority list, the current language environment, and
+   priorities determined by font-backends.
+
+   RFONT-DEFn may not be a vector in the following cases.
 
    The value nil means that we have not yet generated the above vector
    from the base of the fontset.
@@ -83,7 +92,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
    The value 0 means that no font is available for the corresponding
    range of characters in this fontset, but may be available in the
-   default fontset.
+   fallback font-group or in the default fontset.
 
    A fontset has 8 extra slots.
 
@@ -407,6 +416,9 @@ reorder_font_vector (Lisp_Object font_group, struct font *font)
 
          if (! NILP (encoding))
            {
+             /* This spec specifies an encoding by a charset set
+                name.  Reflect the preference order of that charset
+                in the upper bits of SCORE.  */
              Lisp_Object tail;
 
              for (tail = Vcharset_ordered_list;
@@ -419,6 +431,10 @@ reorder_font_vector (Lisp_Object font_group, struct font *font)
            }
          else
            {
+             /* This spec does not specify an encoding.  If the spec
+                specifies a language, and the language is not for the
+                current language environment, make the score
+                larger.  */
              Lisp_Object lang = Ffont_get (font_spec, QClang);
 
              if (! NILP (lang)
@@ -442,11 +458,11 @@ reorder_font_vector (Lisp_Object font_group, struct font *font)
   XSETCAR (font_group, make_number (low_tick_bits));
 }
 
-/* Return a font-group (actually a cons (-1 . FONT-GROUP-VECTOR)) for
-   character C in FONTSET.  If C is -1, return a fallback font-group.
-   If C is not -1, the value may be Qt (FONTSET doesn't have a font
-   for C even in the fallback group), or 0 (a font for C may be found
-   only in the fallback group).  */
+/* Return a font-group (actually a cons (CHARSET_ORDERED_LIST_TICK
+   . FONT-GROUP)) for character C or a fallback font-group in the
+   realized fontset FONTSET.  The elements of FONT-GROUP are
+   RFONT-DEFs.  The value may not be a cons.  See the comment at the
+   head of this file for the detail of the return value.  */
 
 static Lisp_Object
 fontset_get_font_group (Lisp_Object fontset, int c)
@@ -461,23 +477,37 @@ fontset_get_font_group (Lisp_Object fontset, int c)
   else
     font_group = FONTSET_FALLBACK (fontset);
   if (! NILP (font_group))
+    /* We have already realized FONT-DEFs of this font group for C or
+       for fallback (FONT_GROUP is a cons), or we have already found
+       that no appropriate font was found (FONT_GROUP is t or 0).  */
     return font_group;
   base_fontset = FONTSET_BASE (fontset);
   if (NILP (base_fontset))
+    /* Actually we never come here because FONTSET is a realized one,
+       and thus it should have a base.  */
     font_group = Qnil;
   else if (c >= 0)
     font_group = char_table_ref_and_range (base_fontset, c, &from, &to);
   else
     font_group = FONTSET_FALLBACK (base_fontset);
+
+  /* FONT_GROUP not being a vector means that no fonts are specified
+     for C, or the fontset does not have fallback fonts.  */
   if (NILP (font_group))
     {
       font_group = make_number (0);
       if (c >= 0)
+       /* Record that FONTSET does not specify fonts for C.  As
+          there's a possibility that a font is found in a fallback
+          font group, we set 0 at the moment.  */
        char_table_set_range (fontset, from, to, font_group);
       return font_group;
     }
   if (!VECTORP (font_group))
     return font_group;
+
+  /* Now realize FONT-DEFs of this font group, and update the realized
+     fontset FONTSET. */
   font_group = Fcopy_sequence (font_group);
   for (i = 0; i < ASIZE (font_group); i++)
     if (! NILP (AREF (font_group, i)))
@@ -498,21 +528,21 @@ fontset_get_font_group (Lisp_Object fontset, int c)
 }
 
 /* Return RFONT-DEF (vector) in the realized fontset FONTSET for the
-   character C.  If no font is found, return Qnil if there's a
+   character C.  If no font is found, return Qnil or 0 if there's a
    possibility that the default fontset or the fallback font groups
    have a proper font, and return Qt if not.
 
    If a font is found but is not yet opened, open it (if FACE is not
    NULL) or return Qnil (if FACE is NULL).
 
-   ID is a charset-id that must be preferred, or -1 meaning no
+   CHARSET_ID is a charset-id that must be preferred, or -1 meaning no
    preference.
 
    If FALLBACK, search only fallback fonts.  */
 
 static Lisp_Object
-fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id,
-                   bool fallback)
+fontset_find_font (Lisp_Object fontset, int c, struct face *face,
+                  int charset_id, bool fallback)
 {
   Lisp_Object vec, font_group;
   int i, charset_matched = 0, found_index;
@@ -534,8 +564,8 @@ fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id,
        /* We have just created the font-group,
           or the charset priorities were changed.  */
        reorder_font_vector (font_group, face->ascii_face->font);
-      if (id >= 0)
-       /* Find a spec matching with the charset ID to try at
+      if (charset_id >= 0)
+       /* Find a spec matching with CHARSET_ID to try it at
           first.  */
        for (i = 0; i < ASIZE (vec); i++)
          {
@@ -546,7 +576,7 @@ fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id,
              break;
            repertory = FONT_DEF_REPERTORY (RFONT_DEF_FONT_DEF (rfont_def));
 
-           if (XINT (repertory) == id)
+           if (XINT (repertory) == charset_id)
              {
                charset_matched = i;
                break;
@@ -554,7 +584,9 @@ fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id,
          }
     }
 
-  /* Find the first available font in the vector of RFONT-DEF.  */
+  /* Find the first available font in the vector of RFONT-DEF.  If
+     CHARSET_MATCHED > 0, try the corresponding RFONT-DEF first, then
+     try the rest.  */
   for (i = 0; i < ASIZE (vec); i++)
     {
       Lisp_Object font_def;
@@ -565,13 +597,13 @@ fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id,
        {
          if (charset_matched > 0)
            {
-             /* Try the element matching with the charset ID at first.  */
+             /* Try the element matching with CHARSET_ID at first.  */
              found_index = charset_matched;
              /* Make this negative so that we don't come here in the
                 next loop.  */
              charset_matched = - charset_matched;
              /* We must try the first element in the next loop.  */
-             i--;
+             i = -1;
            }
        }
       else if (i == - charset_matched)
@@ -630,10 +662,10 @@ fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id,
          if (NILP (font_object))
            {
              /* Something strange happened, perhaps because of a
-                Font-backend problem.  Too avoid crashing, record
+                Font-backend problem.  To avoid crashing, record
                 that this spec is unusable.  It may be better to find
                 another font of the same spec, but currently we don't
-                have such an API.  */
+                have such an API in font-backend.  */
              RFONT_DEF_SET_FACE (rfont_def, -1);
              continue;
            }
@@ -693,6 +725,7 @@ fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id,
        i = found_index;
     }
 
+  /* Record that no font in this font group supports C.  */
   FONTSET_SET (fontset, make_number (c), make_number (0));
   return Qnil;
 
@@ -711,6 +744,9 @@ fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id,
 }
 
 
+/* Return RFONT-DEF (vector) corresponding to the font for character
+   C.  The value is not a vector if no font is found for C.  */
+
 static Lisp_Object
 fontset_font (Lisp_Object fontset, int c, struct face *face, int id)
 {
index 00f25f7e911869ab725158b8b694688b64e9a309..1c5c12c7e29819ab995eed6f356ad691a04571d8 100644 (file)
@@ -537,7 +537,7 @@ adjust_frame_size (struct frame *f, int new_width, int new_height, int inhibit,
 #endif
     }
   else if (new_cols != old_cols)
-    call2 (Qwindow_pixel_to_total, frame, Qt);
+    call2 (Qwindow__pixel_to_total, frame, Qt);
 
   if (new_windows_height != old_windows_height
       /* When the top margin has changed we have to recalculate the top
@@ -553,7 +553,7 @@ adjust_frame_size (struct frame *f, int new_width, int new_height, int inhibit,
        FrameRows (FRAME_TTY (f)) = new_lines + FRAME_TOP_MARGIN (f);
     }
   else if (new_lines != old_lines)
-    call2 (Qwindow_pixel_to_total, frame, Qnil);
+    call2 (Qwindow__pixel_to_total, frame, Qnil);
 
   frame_size_history_add
     (f, Qadjust_frame_size_3, new_text_width, new_text_height,
@@ -594,8 +594,6 @@ adjust_frame_size (struct frame *f, int new_width, int new_height, int inhibit,
                  || new_pixel_height != old_pixel_height);
 
   unblock_input ();
-
-  run_window_configuration_change_hook (f);
 }
 
 /* Allocate basically initialized frame.  */
@@ -3646,7 +3644,7 @@ x_set_font (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
   x_new_font (f, font_object, fontset);
   store_frame_param (f, Qfont, arg);
 #ifdef HAVE_X_WINDOWS
-  store_frame_param (f, Qfont_param, font_param);
+  store_frame_param (f, Qfont_parameter, font_param);
 #endif
   /* Recalculate toolbar height.  */
   f->n_tool_bar_rows = 0;
@@ -4889,7 +4887,7 @@ syms_of_frame (void)
   DEFSYM (Qframep, "framep");
   DEFSYM (Qframe_live_p, "frame-live-p");
   DEFSYM (Qframe_windows_min_size, "frame-windows-min-size");
-  DEFSYM (Qwindow_pixel_to_total, "window--pixel-to-total");
+  DEFSYM (Qwindow__pixel_to_total, "window--pixel-to-total");
   DEFSYM (Qexplicit_name, "explicit-name");
   DEFSYM (Qheight, "height");
   DEFSYM (Qicon, "icon");
@@ -5267,6 +5265,21 @@ The function `frame--size-history' displays the value of this variable
 in a more readable form.  */);
     frame_size_history = Qnil;
 
+  DEFVAR_BOOL ("tooltip-reuse-hidden-frame", tooltip_reuse_hidden_frame,
+              doc: /* Non-nil means reuse hidden tooltip frames.
+When this is nil, delete a tooltip frame when hiding the associated
+tooltip.  When this is non-nil, make the tooltip frame invisible only,
+so it can be reused when the next tooltip is shown.
+
+Setting this to non-nil may drastically reduce the consing overhead
+incurred by creating new tooltip frames.  However, a value of non-nil
+means also that intermittent changes of faces or `default-frame-alist'
+are not applied when showing a tooltip in a reused frame.
+
+This variable is effective only with the X toolkit (and there only when
+Gtk+ tooltips are not used) and on Windows.  */);
+  tooltip_reuse_hidden_frame = false;
+
   staticpro (&Vframe_list);
 
   defsubr (&Sframep);
index f0cdcd4209661f894a42b3158ff7a142d5157d68..9de672c8635964ef0e3b8d1f0ce466d61b0c85d4 100644 (file)
@@ -288,8 +288,9 @@ struct frame
      cleared.  */
   bool_bf explicit_name : 1;
 
-  /* True if size of some window on this frame has changed.  */
-  bool_bf window_sizes_changed : 1;
+  /* True if configuration of windows on this frame has changed since
+     last call of run_window_size_change_functions.  */
+  bool_bf window_configuration_changed : 1;
 
   /* True if the mouse has moved on this display device
      since the last time we checked.  */
@@ -828,10 +829,10 @@ default_pixels_per_inch_y (void)
    are frozen on frame F.  */
 #define FRAME_WINDOWS_FROZEN(f) (f)->frozen_window_starts
 
-/* True if a size change has been requested for frame F
-   but not yet really put into effect.  This can be true temporarily
-   when an X event comes in at a bad time.  */
-#define FRAME_WINDOW_SIZES_CHANGED(f) (f)->window_sizes_changed
+/* True if the frame's window configuration has changed since last call
+   of run_window_size_change_functions.  */
+#define FRAME_WINDOW_CONFIGURATION_CHANGED(f)  \
+  (f)->window_configuration_changed
 
 /* The minibuffer window of frame F, if it has one; otherwise nil.  */
 #define FRAME_MINIBUF_WINDOW(f) f->minibuffer_window
index 7285aee9bd4129a4a84f4f8643ec89b633674768..1ae3f88daa31911e635cea8e0709d7f0dd4ac896 100644 (file)
@@ -568,7 +568,6 @@ ftfont_get_charset (Lisp_Object registry)
   char *str = SSDATA (SYMBOL_NAME (registry));
   USE_SAFE_ALLOCA;
   char *re = SAFE_ALLOCA (SBYTES (SYMBOL_NAME (registry)) * 2 + 1);
-  Lisp_Object regexp;
   int i, j;
 
   for (i = j = 0; i < SBYTES (SYMBOL_NAME (registry)); i++, j++)
@@ -582,13 +581,13 @@ ftfont_get_charset (Lisp_Object registry)
        re[j] = '.';
     }
   re[j] = '\0';
-  regexp = make_unibyte_string (re, j);
-  SAFE_FREE ();
+  AUTO_STRING_WITH_LEN (regexp, re, j);
   for (i = 0; fc_charset_table[i].name; i++)
     if (fast_c_string_match_ignore_case
        (regexp, fc_charset_table[i].name,
         strlen (fc_charset_table[i].name)) >= 0)
       break;
+  SAFE_FREE ();
   if (! fc_charset_table[i].name)
     return -1;
   if (! fc_charset_table[i].fc_charset)
index 00b836413196e90a3aeb8b24b37a73585c3a1cfa..d795c13f61600498ba225a346780deb7e8903bbf 100644 (file)
@@ -25,14 +25,10 @@ License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 #define USE_PTHREAD
 #endif
 
+#include <stddef.h>
 #include <string.h>
 #include <limits.h>
 #include <stdint.h>
-
-#ifdef HYBRID_GET_CURRENT_DIR_NAME
-#undef get_current_dir_name
-#endif
-
 #include <unistd.h>
 
 #ifdef USE_PTHREAD
@@ -44,7 +40,22 @@ License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 #endif
 
 #ifdef emacs
-extern void emacs_abort (void);
+# include "lisp.h"
+#endif
+
+#ifdef HAVE_MALLOC_H
+# if 4 < __GNUC__ + (2 <= __GNUC_MINOR__)
+#  pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+# endif
+# include <malloc.h>
+#endif
+#ifndef __MALLOC_HOOK_VOLATILE
+# define __MALLOC_HOOK_VOLATILE volatile
+#endif
+#ifndef HAVE_MALLOC_H
+extern void (*__MALLOC_HOOK_VOLATILE __after_morecore_hook) (void);
+extern void (*__MALLOC_HOOK_VOLATILE __malloc_initialize_hook) (void);
+extern void *(*__morecore) (ptrdiff_t);
 #endif
 
 /* If HYBRID_MALLOC is defined, then temacs will use malloc,
@@ -53,31 +64,27 @@ extern void emacs_abort (void);
    however, will use the system malloc, realloc....  In other source
    files, malloc, realloc... are renamed hybrid_malloc,
    hybrid_realloc... via macros in conf_post.h.  hybrid_malloc and
-   friends are wrapper functions defined later in this file.
-   aligned_alloc is defined as a macro only in alloc.c.
-
-   As of this writing (August 2014), Cygwin is the only platform on
-   which HYBRID_MACRO is defined.  Any other platform that wants to
-   define it will have to define the macros DUMPED and
-   ALLOCATED_BEFORE_DUMPING, defined below for Cygwin.  */
+   friends are wrapper functions defined later in this file.  */
 #undef malloc
 #undef realloc
 #undef calloc
+#undef aligned_alloc
 #undef free
 #define malloc gmalloc
 #define realloc grealloc
 #define calloc gcalloc
 #define aligned_alloc galigned_alloc
 #define free gfree
+#define malloc_info gmalloc_info
 
-#ifdef CYGWIN
-extern void *bss_sbrk (ptrdiff_t size);
-extern int bss_sbrk_did_unexec;
-extern char bss_sbrk_buffer[];
-extern void *bss_sbrk_buffer_end;
-#define DUMPED bss_sbrk_did_unexec
-#define ALLOCATED_BEFORE_DUMPING(P) \
-  ((P) < bss_sbrk_buffer_end && (P) >= (void *) bss_sbrk_buffer)
+#ifdef HYBRID_MALLOC
+# include "sheap.h"
+# define DUMPED bss_sbrk_did_unexec
+static bool
+ALLOCATED_BEFORE_DUMPING (char *p)
+{
+  return bss_sbrk_buffer <= p && p < bss_sbrk_buffer + STATIC_HEAP_SIZE;
+}
 #endif
 
 #ifdef __cplusplus
@@ -85,8 +92,9 @@ extern "C"
 {
 #endif
 
-#include <stddef.h>
-
+#ifdef HYBRID_MALLOC
+#define extern static
+#endif
 
 /* Allocate SIZE bytes of memory.  */
 extern void *malloc (size_t size) ATTRIBUTE_MALLOC_SIZE ((1));
@@ -95,25 +103,16 @@ extern void *malloc (size_t size) ATTRIBUTE_MALLOC_SIZE ((1));
 extern void *realloc (void *ptr, size_t size) ATTRIBUTE_ALLOC_SIZE ((2));
 /* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
 extern void *calloc (size_t nmemb, size_t size) ATTRIBUTE_MALLOC_SIZE ((1,2));
-/* Free a block allocated by `malloc', `realloc' or `calloc'.  */
+/* Free a block.  */
 extern void free (void *ptr);
 
 /* Allocate SIZE bytes allocated to ALIGNMENT bytes.  */
-#ifdef MSDOS
 extern void *aligned_alloc (size_t, size_t);
+#ifdef MSDOS
 extern void *memalign (size_t, size_t);
 extern int posix_memalign (void **, size_t, size_t);
 #endif
 
-#ifdef USE_PTHREAD
-/* Set up mutexes and make malloc etc. thread-safe.  */
-extern void malloc_enable_thread (void);
-#endif
-
-#ifdef emacs
-extern void emacs_abort (void);
-#endif
-
 /* The allocator divides the heap into blocks of fixed size; large
    requests receive one or more whole blocks, and small requests
    receive a fragment of a block.  Fragment sizes are powers of two,
@@ -245,36 +244,12 @@ extern int _malloc_thread_enabled_p;
 #define UNLOCK_ALIGNED_BLOCKS()
 #endif
 
-/* Given an address in the middle of a malloc'd object,
-   return the address of the beginning of the object.  */
-extern void *malloc_find_object_address (void *ptr);
-
-/* Underlying allocation function; successive calls should
-   return contiguous pieces of memory.  */
-extern void *(*__morecore) (ptrdiff_t size);
-
-/* Default value of `__morecore'.  */
-extern void *__default_morecore (ptrdiff_t size);
-
-/* If not NULL, this function is called after each time
-   `__morecore' is called to increase the data size.  */
-extern void (*__after_morecore_hook) (void);
-
-/* Number of extra blocks to get each time we ask for more core.
-   This reduces the frequency of calling `(*__morecore)'.  */
-extern size_t __malloc_extra_blocks;
-
 /* Nonzero if `malloc' has been called and done its initialization.  */
 extern int __malloc_initialized;
 /* Function called to initialize malloc data structures.  */
 extern int __malloc_initialize (void);
 
-/* Hooks for debugging versions.  */
-extern void (*__malloc_initialize_hook) (void);
-extern void (*__free_hook) (void *ptr);
-extern void *(*__malloc_hook) (size_t size);
-extern void *(*__realloc_hook) (void *ptr, size_t size);
-extern void *(*__memalign_hook) (size_t size, size_t alignment);
+#ifdef GC_MCHECK
 
 /* Return values for `mprobe': these are the kinds of inconsistencies that
    `mcheck' enables detection of.  */
@@ -315,8 +290,9 @@ struct mstats
 /* Pick up the current statistics. */
 extern struct mstats mstats (void);
 
-/* Call WARNFUN with a warning message when memory usage is high.  */
-extern void memory_warnings (void *start, void (*warnfun) (const char *));
+#endif
+
+#undef extern
 
 #ifdef __cplusplus
 }
@@ -344,10 +320,17 @@ License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <errno.h>
 
-void *(*__morecore) (ptrdiff_t size) = __default_morecore;
+/* Debugging hook for 'malloc'.  */
+static void *(*__MALLOC_HOOK_VOLATILE gmalloc_hook) (size_t);
 
-/* Debugging hook for `malloc'.  */
-void *(*__malloc_hook) (size_t size);
+/* Replacements for traditional glibc malloc hooks, for platforms that
+   do not already have these hooks.  Platforms with these hooks all
+   used relaxed ref/def, so it is OK to define them here too.  */
+void (*__MALLOC_HOOK_VOLATILE __malloc_initialize_hook) (void);
+void (*__MALLOC_HOOK_VOLATILE __after_morecore_hook) (void);
+void *(*__morecore) (ptrdiff_t);
+
+#ifndef HYBRID_MALLOC
 
 /* Pointer to the base of the first block.  */
 char *_heapbase;
@@ -355,9 +338,6 @@ char *_heapbase;
 /* Block information table.  Allocated with align/__free (not malloc/free).  */
 malloc_info *_heapinfo;
 
-/* Number of info entries.  */
-static size_t heapsize;
-
 /* Search index in the info table.  */
 size_t _heapindex;
 
@@ -376,10 +356,21 @@ size_t _bytes_free;
 /* Are you experienced?  */
 int __malloc_initialized;
 
+#else
+
+static struct list _fraghead[BLOCKLOG];
+
+#endif /* HYBRID_MALLOC */
+
+/* Number of extra blocks to get each time we ask for more core.
+   This reduces the frequency of calling `(*__morecore)'.  */
+#if defined DOUG_LEA_MALLOC || defined HYBRID_MALLOC || defined SYSTEM_MALLOC
+static
+#endif
 size_t __malloc_extra_blocks;
 
-void (*__malloc_initialize_hook) (void);
-void (*__after_morecore_hook) (void);
+/* Number of info entries.  */
+static size_t heapsize;
 
 #if defined GC_MALLOC_CHECK && defined GC_PROTECT_MALLOC_STATE
 
@@ -934,19 +925,19 @@ malloc (size_t size)
   if (!__malloc_initialized && !__malloc_initialize ())
     return NULL;
 
-  /* Copy the value of __malloc_hook to an automatic variable in case
-     __malloc_hook is modified in another thread between its
+  /* Copy the value of gmalloc_hook to an automatic variable in case
+     gmalloc_hook is modified in another thread between its
      NULL-check and the use.
 
      Note: Strictly speaking, this is not a right solution.  We should
      use mutexes to access non-read-only variables that are shared
      among multiple threads.  We just leave it for compatibility with
-     glibc malloc (i.e., assignments to __malloc_hook) for now.  */
-  hook = __malloc_hook;
+     glibc malloc (i.e., assignments to gmalloc_hook) for now.  */
+  hook = gmalloc_hook;
   return (hook != NULL ? *hook : _malloc_internal) (size);
 }
 \f
-#ifndef _LIBC
+#if !(defined (_LIBC) || defined (HYBRID_MALLOC))
 
 /* On some ANSI C systems, some libc functions call _malloc, _free
    and _realloc.  Make them use the GNU functions.  */
@@ -994,12 +985,14 @@ License along with this library.  If not, see <http://www.gnu.org/licenses/>.
    The author may be reached (Email) at the address mike@ai.mit.edu,
    or (US mail) as Mike Haertel c/o Free Software Foundation.  */
 
-
 /* Debugging hook for free.  */
-void (*__free_hook) (void *__ptr);
+static void (*__MALLOC_HOOK_VOLATILE gfree_hook) (void *);
+
+#ifndef HYBRID_MALLOC
 
 /* List of blocks allocated by aligned_alloc.  */
 struct alignlist *_aligned_blocks = NULL;
+#endif
 
 /* Return memory to the heap.
    Like `_free_internal' but don't lock mutex.  */
@@ -1248,7 +1241,7 @@ _free_internal_nolock (void *ptr)
 }
 
 /* Return memory to the heap.
-   Like `free' but don't call a __free_hook if there is one.  */
+   Like 'free' but don't call a hook if there is one.  */
 void
 _free_internal (void *ptr)
 {
@@ -1262,7 +1255,7 @@ _free_internal (void *ptr)
 void
 free (void *ptr)
 {
-  void (*hook) (void *) = __free_hook;
+  void (*hook) (void *) = gfree_hook;
 
   if (hook != NULL)
     (*hook) (ptr);
@@ -1270,6 +1263,7 @@ free (void *ptr)
     _free_internal (ptr);
 }
 
+#ifndef HYBRID_MALLOC
 /* Define the `cfree' alias for `free'.  */
 #ifdef weak_alias
 weak_alias (free, cfree)
@@ -1280,6 +1274,7 @@ cfree (void *ptr)
   free (ptr);
 }
 #endif
+#endif
 /* Change the size of a block allocated by `malloc'.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
                     Written May 1989 by Mike Haertel.
@@ -1305,7 +1300,7 @@ License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 #endif
 
 /* Debugging hook for realloc.  */
-void *(*__realloc_hook) (void *ptr, size_t size);
+static void *(*grealloc_hook) (void *, size_t);
 
 /* Resize the given region to the new size, returning a pointer
    to the (possibly moved) region.  This is optimized for speed;
@@ -1449,7 +1444,7 @@ realloc (void *ptr, size_t size)
   if (!__malloc_initialized && !__malloc_initialize ())
     return NULL;
 
-  hook = __realloc_hook;
+  hook = grealloc_hook;
   return (hook != NULL ? *hook : _realloc_internal) (ptr, size);
 }
 /* Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
@@ -1519,11 +1514,11 @@ extern void *__sbrk (ptrdiff_t increment);
 /* Allocate INCREMENT more bytes of data space,
    and return the start of data space, or NULL on errors.
    If INCREMENT is negative, shrink data space.  */
-void *
-__default_morecore (ptrdiff_t increment)
+static void *
+gdefault_morecore (ptrdiff_t increment)
 {
   void *result;
-#if defined (CYGWIN)
+#ifdef HYBRID_MALLOC
   if (!DUMPED)
     {
       return bss_sbrk (increment);
@@ -1534,6 +1529,9 @@ __default_morecore (ptrdiff_t increment)
     return NULL;
   return result;
 }
+
+void *(*__morecore) (ptrdiff_t) = gdefault_morecore;
+
 /* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
 
 This library is free software; you can redistribute it and/or
@@ -1549,17 +1547,11 @@ General Public License for more details.
 You should have received a copy of the GNU General Public
 License along with this library.  If not, see <http://www.gnu.org/licenses/>.  */
 
-void *(*__memalign_hook) (size_t size, size_t alignment);
-
 void *
 aligned_alloc (size_t alignment, size_t size)
 {
   void *result;
   size_t adj, lastadj;
-  void *(*hook) (size_t, size_t) = __memalign_hook;
-
-  if (hook)
-    return (*hook) (alignment, size);
 
   /* Allocate a block with enough extra space to pad the block with up to
      (ALIGNMENT - 1) bytes if necessary.  */
@@ -1638,6 +1630,8 @@ aligned_alloc (size_t alignment, size_t size)
   return result;
 }
 
+/* Note that memalign and posix_memalign are not used in Emacs.  */
+#ifndef HYBRID_MALLOC
 /* An obsolete alias for aligned_alloc, for any old libraries that use
    this alias.  */
 
@@ -1649,7 +1643,6 @@ memalign (size_t alignment, size_t size)
 
 /* If HYBRID_MALLOC is defined, we may want to use the system
    posix_memalign below.  */
-#ifndef HYBRID_MALLOC
 int
 posix_memalign (void **memptr, size_t alignment, size_t size)
 {
@@ -1689,14 +1682,18 @@ License along with this library.  If not, see <http://www.gnu.org/licenses/>.
    The author may be reached (Email) at the address mike@ai.mit.edu,
    or (US mail) as Mike Haertel c/o Free Software Foundation.  */
 
+#ifndef HYBRID_MALLOC
+
+# ifndef HAVE_MALLOC_H
 /* Allocate SIZE bytes on a page boundary.  */
 extern void *valloc (size_t);
+# endif
 
-#if defined _SC_PAGESIZE || !defined HAVE_GETPAGESIZE
-# include "getpagesize.h"
-#elif !defined getpagesize
+# if defined _SC_PAGESIZE || !defined HAVE_GETPAGESIZE
+#  include "getpagesize.h"
+# elif !defined getpagesize
 extern int getpagesize (void);
-#endif
+# endif
 
 static size_t pagesize;
 
@@ -1708,6 +1705,7 @@ valloc (size_t size)
 
   return aligned_alloc (pagesize, size);
 }
+#endif /* HYBRID_MALLOC */
 
 #undef malloc
 #undef realloc
@@ -1773,7 +1771,7 @@ hybrid_aligned_alloc (size_t alignment, size_t size)
 #endif
 }
 #endif
-  
+
 void *
 hybrid_realloc (void *ptr, size_t size)
 {
@@ -1801,19 +1799,6 @@ hybrid_realloc (void *ptr, size_t size)
   return result;
 }
 
-#ifdef HYBRID_GET_CURRENT_DIR_NAME
-/* Defined in sysdep.c.  */
-char *gget_current_dir_name (void);
-
-char *
-hybrid_get_current_dir_name (void)
-{
-  if (DUMPED)
-    return get_current_dir_name ();
-  return gget_current_dir_name ();
-}
-#endif
-
 #else  /* ! HYBRID_MALLOC */
 
 void *
@@ -1948,9 +1933,9 @@ freehook (void *ptr)
   else
     hdr = NULL;
 
-  __free_hook = old_free_hook;
+  gfree_hook = old_free_hook;
   free (hdr);
-  __free_hook = freehook;
+  gfree_hook = freehook;
 }
 
 static void *
@@ -1958,9 +1943,9 @@ mallochook (size_t size)
 {
   struct hdr *hdr;
 
-  __malloc_hook = old_malloc_hook;
+  gmalloc_hook = old_malloc_hook;
   hdr = malloc (sizeof *hdr + size + 1);
-  __malloc_hook = mallochook;
+  gmalloc_hook = mallochook;
   if (hdr == NULL)
     return NULL;
 
@@ -1986,13 +1971,13 @@ reallochook (void *ptr, size_t size)
        memset ((char *) ptr + size, FREEFLOOD, osize - size);
     }
 
-  __free_hook = old_free_hook;
-  __malloc_hook = old_malloc_hook;
-  __realloc_hook = old_realloc_hook;
+  gfree_hook = old_free_hook;
+  gmalloc_hook = old_malloc_hook;
+  grealloc_hook = old_realloc_hook;
   hdr = realloc (hdr, sizeof *hdr + size + 1);
-  __free_hook = freehook;
-  __malloc_hook = mallochook;
-  __realloc_hook = reallochook;
+  gfree_hook = freehook;
+  gmalloc_hook = mallochook;
+  grealloc_hook = reallochook;
   if (hdr == NULL)
     return NULL;
 
@@ -2049,12 +2034,12 @@ mcheck (void (*func) (enum mcheck_status))
   /* These hooks may not be safely inserted if malloc is already in use.  */
   if (!__malloc_initialized && !mcheck_used)
     {
-      old_free_hook = __free_hook;
-      __free_hook = freehook;
-      old_malloc_hook = __malloc_hook;
-      __malloc_hook = mallochook;
-      old_realloc_hook = __realloc_hook;
-      __realloc_hook = reallochook;
+      old_free_hook = gfree_hook;
+      gfree_hook = freehook;
+      old_malloc_hook = gmalloc_hook;
+      gmalloc_hook = mallochook;
+      old_realloc_hook = grealloc_hook;
+      grealloc_hook = reallochook;
       mcheck_used = 1;
     }
 
index f0354d7fedf31680902272d900b78b7c5439036e..57b164a270f9740bccd5e4f04276d15f79b20211 100644 (file)
@@ -184,7 +184,7 @@ init_gnutls_functions (void)
   HMODULE library;
   int max_log_level = 1;
 
-  if (!(library = w32_delayed_load (Qgnutls_dll)))
+  if (!(library = w32_delayed_load (Qgnutls)))
     {
       GNUTLS_LOG (1, max_log_level, "GnuTLS library not found");
       return 0;
@@ -272,7 +272,7 @@ init_gnutls_functions (void)
   max_log_level = global_gnutls_log_level;
 
   {
-    Lisp_Object name = CAR_SAFE (Fget (Qgnutls_dll, QCloaded_from));
+    Lisp_Object name = CAR_SAFE (Fget (Qgnutls, QCloaded_from));
     GNUTLS_LOG2 (1, max_log_level, "GnuTLS library loaded:",
                  STRINGP (name) ? (const char *) SDATA (name) : "unknown");
   }
@@ -397,11 +397,47 @@ gnutls_log_function2i (int level, const char *string, int extra)
   message ("gnutls.c: [%d] %s %d", level, string, extra);
 }
 
+int
+gnutls_try_handshake (struct Lisp_Process *proc)
+{
+  gnutls_session_t state = proc->gnutls_state;
+  int ret;
+  bool non_blocking = proc->is_non_blocking_client;
+
+  if (proc->gnutls_complete_negotiation_p)
+    non_blocking = false;
+
+  if (non_blocking)
+    proc->gnutls_p = true;
+
+  do
+    {
+      ret = gnutls_handshake (state);
+      emacs_gnutls_handle_error (state, ret);
+      QUIT;
+    }
+  while (ret < 0
+        && gnutls_error_is_fatal (ret) == 0
+        && ! non_blocking);
+
+  proc->gnutls_initstage = GNUTLS_STAGE_HANDSHAKE_TRIED;
+
+  if (ret == GNUTLS_E_SUCCESS)
+    {
+      /* Here we're finally done.  */
+      proc->gnutls_initstage = GNUTLS_STAGE_READY;
+    }
+  else
+    {
+      /* check_memory_full (gnutls_alert_send_appropriate (state, ret));  */
+    }
+  return ret;
+}
+
 static int
 emacs_gnutls_handshake (struct Lisp_Process *proc)
 {
   gnutls_session_t state = proc->gnutls_state;
-  int ret;
 
   if (proc->gnutls_initstage < GNUTLS_STAGE_HANDSHAKE_CANDO)
     return -1;
@@ -443,26 +479,7 @@ emacs_gnutls_handshake (struct Lisp_Process *proc)
       proc->gnutls_initstage = GNUTLS_STAGE_TRANSPORT_POINTERS_SET;
     }
 
-  do
-    {
-      ret = gnutls_handshake (state);
-      emacs_gnutls_handle_error (state, ret);
-      QUIT;
-    }
-  while (ret < 0 && gnutls_error_is_fatal (ret) == 0);
-
-  proc->gnutls_initstage = GNUTLS_STAGE_HANDSHAKE_TRIED;
-
-  if (ret == GNUTLS_E_SUCCESS)
-    {
-      /* Here we're finally done.  */
-      proc->gnutls_initstage = GNUTLS_STAGE_READY;
-    }
-  else
-    {
-      check_memory_full (gnutls_alert_send_appropriate (state, ret));
-    }
-  return ret;
+  return gnutls_try_handshake (proc);
 }
 
 ptrdiff_t
@@ -528,26 +545,12 @@ emacs_gnutls_read (struct Lisp_Process *proc, char *buf, ptrdiff_t nbyte)
   ssize_t rtnval;
   gnutls_session_t state = proc->gnutls_state;
 
-  int log_level = proc->gnutls_log_level;
-
   if (proc->gnutls_initstage != GNUTLS_STAGE_READY)
     {
-      /* If the handshake count is under the limit, try the handshake
-         again and increment the handshake count.  This count is kept
-         per process (connection), not globally.  */
-      if (proc->gnutls_handshakes_tried < GNUTLS_EMACS_HANDSHAKES_LIMIT)
-        {
-          proc->gnutls_handshakes_tried++;
-          emacs_gnutls_handshake (proc);
-          GNUTLS_LOG2i (5, log_level, "Retried handshake",
-                        proc->gnutls_handshakes_tried);
-          return -1;
-        }
-
-      GNUTLS_LOG (2, log_level, "Giving up on handshake; resetting retries");
-      proc->gnutls_handshakes_tried = 0;
-      return 0;
+      errno = EAGAIN;
+      return -1;
     }
+
   rtnval = gnutls_record_recv (state, buf, nbyte);
   if (rtnval >= 0)
     return rtnval;
@@ -655,7 +658,7 @@ emacs_gnutls_deinit (Lisp_Object proc)
 
   CHECK_PROCESS (proc);
 
-  if (XPROCESS (proc)->gnutls_p == 0)
+  if (! XPROCESS (proc)->gnutls_p)
     return Qnil;
 
   log_level = XPROCESS (proc)->gnutls_log_level;
@@ -682,10 +685,23 @@ emacs_gnutls_deinit (Lisp_Object proc)
        GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_INIT - 1;
     }
 
-  XPROCESS (proc)->gnutls_p = 0;
+  XPROCESS (proc)->gnutls_p = false;
   return Qt;
 }
 
+DEFUN ("gnutls-asynchronous-parameters", Fgnutls_asynchronous_parameters,
+       Sgnutls_asynchronous_parameters, 2, 2, 0,
+       doc: /* Mark this process as being a pre-init GnuTLS process.
+The second parameter is the list of parameters to feed to gnutls-boot
+to finish setting up the connection. */)
+  (Lisp_Object proc, Lisp_Object params)
+{
+  CHECK_PROCESS (proc);
+
+  XPROCESS (proc)->gnutls_boot_parameters = params;
+  return Qnil;
+}
+
 DEFUN ("gnutls-get-initstage", Fgnutls_get_initstage, Sgnutls_get_initstage, 1, 1, 0,
        doc: /* Return the GnuTLS init stage of process PROC.
 See also `gnutls-boot'.  */)
@@ -703,7 +719,9 @@ usage: (gnutls-errorp ERROR)  */
        attributes: const)
   (Lisp_Object err)
 {
-  if (EQ (err, Qt)) return Qnil;
+  if (EQ (err, Qt)
+      || EQ (err, Qgnutls_e_again))
+    return Qnil;
 
   return Qt;
 }
@@ -1022,7 +1040,7 @@ The return value is a property list with top-level keys :warnings and
 
   CHECK_PROCESS (proc);
 
-  if (GNUTLS_INITSTAGE (proc) < GNUTLS_STAGE_INIT)
+  if (GNUTLS_INITSTAGE (proc) != GNUTLS_STAGE_READY)
     return Qnil;
 
   /* Then collect any warnings already computed by the handshake. */
@@ -1154,6 +1172,159 @@ emacs_gnutls_global_deinit (void)
 }
 #endif
 
+static void ATTRIBUTE_FORMAT_PRINTF (2, 3)
+boot_error (struct Lisp_Process *p, const char *m, ...)
+{
+  va_list ap;
+  va_start (ap, m);
+  if (p->is_non_blocking_client)
+    pset_status (p, list2 (Qfailed, vformat_string (m, ap)));
+  else
+    verror (m, ap);
+}
+
+Lisp_Object
+gnutls_verify_boot (Lisp_Object proc, Lisp_Object proplist)
+{
+  int ret;
+  struct Lisp_Process *p = XPROCESS (proc);
+  gnutls_session_t state = p->gnutls_state;
+  unsigned int peer_verification;
+  Lisp_Object warnings;
+  int max_log_level = p->gnutls_log_level;
+  Lisp_Object hostname, verify_error;
+  bool verify_error_all = false;
+  char *c_hostname;
+
+  if (NILP (proplist))
+    proplist = Fcdr (Fplist_get (p->childp, QCtls_parameters));
+
+  verify_error = Fplist_get (proplist, QCverify_error);
+  hostname = Fplist_get (proplist, QChostname);
+
+  if (EQ (verify_error, Qt))
+    verify_error_all = true;
+  else if (NILP (Flistp (verify_error)))
+    {
+      boot_error (p,
+                 "gnutls-boot: invalid :verify_error parameter (not a list)");
+      return Qnil;
+    }
+
+  if (!STRINGP (hostname))
+    {
+      boot_error (p, "gnutls-boot: invalid :hostname parameter (not a string)");
+      return Qnil;
+    }
+  c_hostname = SSDATA (hostname);
+
+  /* Now verify the peer, following
+     http://www.gnu.org/software/gnutls/manual/html_node/Verifying-peer_0027s-certificate.html.
+     The peer should present at least one certificate in the chain; do a
+     check of the certificate's hostname with
+     gnutls_x509_crt_check_hostname against :hostname.  */
+
+  ret = gnutls_certificate_verify_peers2 (state, &peer_verification);
+  if (ret < GNUTLS_E_SUCCESS)
+    return gnutls_make_error (ret);
+
+  XPROCESS (proc)->gnutls_peer_verification = peer_verification;
+
+  warnings = Fplist_get (Fgnutls_peer_status (proc), intern (":warnings"));
+  if (!NILP (warnings))
+    {
+      for (Lisp_Object tail = warnings; CONSP (tail); tail = XCDR (tail))
+        {
+          Lisp_Object warning = XCAR (tail);
+          Lisp_Object message = Fgnutls_peer_status_warning_describe (warning);
+          if (!NILP (message))
+            GNUTLS_LOG2 (1, max_log_level, "verification:", SSDATA (message));
+        }
+    }
+
+  if (peer_verification != 0)
+    {
+      if (verify_error_all
+          || !NILP (Fmember (QCtrustfiles, verify_error)))
+        {
+         emacs_gnutls_deinit (proc);
+         boot_error (p,
+                     "Certificate validation failed %s, verification code %x",
+                     c_hostname, peer_verification);
+         return Qnil;
+        }
+      else
+       {
+          GNUTLS_LOG2 (1, max_log_level, "certificate validation failed:",
+                       c_hostname);
+       }
+    }
+
+  /* Up to here the process is the same for X.509 certificates and
+     OpenPGP keys.  From now on X.509 certificates are assumed.  This
+     can be easily extended to work with openpgp keys as well.  */
+  if (gnutls_certificate_type_get (state) == GNUTLS_CRT_X509)
+    {
+      gnutls_x509_crt_t gnutls_verify_cert;
+      const gnutls_datum_t *gnutls_verify_cert_list;
+      unsigned int gnutls_verify_cert_list_size;
+
+      ret = gnutls_x509_crt_init (&gnutls_verify_cert);
+      if (ret < GNUTLS_E_SUCCESS)
+       return gnutls_make_error (ret);
+
+      gnutls_verify_cert_list
+       = gnutls_certificate_get_peers (state, &gnutls_verify_cert_list_size);
+
+      if (gnutls_verify_cert_list == NULL)
+       {
+         gnutls_x509_crt_deinit (gnutls_verify_cert);
+         emacs_gnutls_deinit (proc);
+         boot_error (p, "No x509 certificate was found\n");
+         return Qnil;
+       }
+
+      /* Check only the first certificate in the given chain.  */
+      ret = gnutls_x509_crt_import (gnutls_verify_cert,
+                                   &gnutls_verify_cert_list[0],
+                                   GNUTLS_X509_FMT_DER);
+
+      if (ret < GNUTLS_E_SUCCESS)
+       {
+         gnutls_x509_crt_deinit (gnutls_verify_cert);
+         return gnutls_make_error (ret);
+       }
+
+      XPROCESS (proc)->gnutls_certificate = gnutls_verify_cert;
+
+      int err = gnutls_x509_crt_check_hostname (gnutls_verify_cert,
+                                               c_hostname);
+      check_memory_full (err);
+      if (!err)
+       {
+         XPROCESS (proc)->gnutls_extra_peer_verification
+           |= CERTIFICATE_NOT_MATCHING;
+          if (verify_error_all
+              || !NILP (Fmember (QChostname, verify_error)))
+            {
+             gnutls_x509_crt_deinit (gnutls_verify_cert);
+             emacs_gnutls_deinit (proc);
+             boot_error (p, "The x509 certificate does not match \"%s\"",
+                         c_hostname);
+             return Qnil;
+            }
+         else
+           GNUTLS_LOG2 (1, max_log_level, "x509 certificate does not match:",
+                        c_hostname);
+       }
+    }
+
+  /* Set this flag only if the whole initialization succeeded.  */
+  XPROCESS (proc)->gnutls_p = true;
+
+  return gnutls_make_error (ret);
+}
+
 DEFUN ("gnutls-boot", Fgnutls_boot, Sgnutls_boot, 3, 3, 0,
        doc: /* Initialize GnuTLS client for process PROC with TYPE+PROPLIST.
 Currently only client mode is supported.  Return a success/failure
@@ -1190,6 +1361,9 @@ t to do all checks.  Currently it can contain `:trustfiles' and
 :min-prime-bits is the minimum accepted number of bits the client will
 accept in Diffie-Hellman key exchange.
 
+:complete-negotiation, if non-nil, will make negotiation complete
+before returning even on non-blocking sockets.
+
 The debug level will be set for this process AND globally for GnuTLS.
 So if you set it higher or lower at any point, it affects global
 debugging.
@@ -1212,14 +1386,12 @@ one trustfile (usually a CA bundle).  */)
 {
   int ret = GNUTLS_E_SUCCESS;
   int max_log_level = 0;
-  bool verify_error_all = 0;
 
   gnutls_session_t state;
   gnutls_certificate_credentials_t x509_cred = NULL;
   gnutls_anon_client_credentials_t anon_cred = NULL;
   Lisp_Object global_init;
   char const *priority_string_ptr = "NORMAL"; /* default priority string.  */
-  unsigned int peer_verification;
   char *c_hostname;
 
   /* Placeholders for the property list elements.  */
@@ -1230,40 +1402,38 @@ one trustfile (usually a CA bundle).  */)
   /* Lisp_Object callbacks; */
   Lisp_Object loglevel;
   Lisp_Object hostname;
-  Lisp_Object verify_error;
   Lisp_Object prime_bits;
-  Lisp_Object warnings;
+  struct Lisp_Process *p = XPROCESS (proc);
 
   CHECK_PROCESS (proc);
   CHECK_SYMBOL (type);
   CHECK_LIST (proplist);
 
   if (NILP (Fgnutls_available_p ()))
-    error ("GnuTLS not available");
-
-  if (!EQ (type, Qgnutls_x509pki) && !EQ (type, Qgnutls_anon))
-    error ("Invalid GnuTLS credential type");
-
-  hostname              = Fplist_get (proplist, QCgnutls_bootprop_hostname);
-  priority_string       = Fplist_get (proplist, QCgnutls_bootprop_priority);
-  trustfiles            = Fplist_get (proplist, QCgnutls_bootprop_trustfiles);
-  keylist               = Fplist_get (proplist, QCgnutls_bootprop_keylist);
-  crlfiles              = Fplist_get (proplist, QCgnutls_bootprop_crlfiles);
-  loglevel              = Fplist_get (proplist, QCgnutls_bootprop_loglevel);
-  verify_error          = Fplist_get (proplist, QCgnutls_bootprop_verify_error);
-  prime_bits            = Fplist_get (proplist, QCgnutls_bootprop_min_prime_bits);
-
-  if (EQ (verify_error, Qt))
     {
-      verify_error_all = 1;
+      boot_error (p, "GnuTLS not available");
+      return Qnil;
     }
-  else if (NILP (Flistp (verify_error)))
+
+  if (!EQ (type, Qgnutls_x509pki) && !EQ (type, Qgnutls_anon))
     {
-      error ("gnutls-boot: invalid :verify_error parameter (not a list)");
+      boot_error (p, "Invalid GnuTLS credential type");
+      return Qnil;
     }
 
+  hostname              = Fplist_get (proplist, QChostname);
+  priority_string       = Fplist_get (proplist, QCpriority);
+  trustfiles            = Fplist_get (proplist, QCtrustfiles);
+  keylist               = Fplist_get (proplist, QCkeylist);
+  crlfiles              = Fplist_get (proplist, QCcrlfiles);
+  loglevel              = Fplist_get (proplist, QCloglevel);
+  prime_bits            = Fplist_get (proplist, QCmin_prime_bits);
+
   if (!STRINGP (hostname))
-    error ("gnutls-boot: invalid :hostname parameter (not a string)");
+    {
+      boot_error (p, "gnutls-boot: invalid :hostname parameter (not a string)");
+      return Qnil;
+    }
   c_hostname = SSDATA (hostname);
 
   state = XPROCESS (proc)->gnutls_state;
@@ -1307,7 +1477,7 @@ one trustfile (usually a CA bundle).  */)
       check_memory_full (gnutls_certificate_allocate_credentials (&x509_cred));
       XPROCESS (proc)->gnutls_x509_cred = x509_cred;
 
-      verify_flags = Fplist_get (proplist, QCgnutls_bootprop_verify_flags);
+      verify_flags = Fplist_get (proplist, QCverify_flags);
       if (NUMBERP (verify_flags))
        {
          gnutls_verify_flags = XINT (verify_flags);
@@ -1371,7 +1541,8 @@ one trustfile (usually a CA bundle).  */)
          else
            {
              emacs_gnutls_deinit (proc);
-             error ("Invalid trustfile");
+             boot_error (p, "Invalid trustfile");
+             return Qnil;
            }
        }
 
@@ -1395,7 +1566,8 @@ one trustfile (usually a CA bundle).  */)
          else
            {
              emacs_gnutls_deinit (proc);
-             error ("Invalid CRL file");
+             boot_error (p, "Invalid CRL file");
+             return Qnil;
            }
        }
 
@@ -1424,8 +1596,9 @@ one trustfile (usually a CA bundle).  */)
          else
            {
              emacs_gnutls_deinit (proc);
-             error (STRINGP (keyfile) ? "Invalid client cert file"
-                    : "Invalid client key file");
+             boot_error (p, STRINGP (keyfile) ? "Invalid client cert file"
+                         : "Invalid client key file");
+             return Qnil;
            }
        }
     }
@@ -1479,114 +1652,14 @@ one trustfile (usually a CA bundle).  */)
        return gnutls_make_error (ret);
     }
 
+  XPROCESS (proc)->gnutls_complete_negotiation_p =
+    !NILP (Fplist_get (proplist, QCcomplete_negotiation));
   GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_CRED_SET;
   ret = emacs_gnutls_handshake (XPROCESS (proc));
   if (ret < GNUTLS_E_SUCCESS)
     return gnutls_make_error (ret);
 
-  /* Now verify the peer, following
-     http://www.gnu.org/software/gnutls/manual/html_node/Verifying-peer_0027s-certificate.html.
-     The peer should present at least one certificate in the chain; do a
-     check of the certificate's hostname with
-     gnutls_x509_crt_check_hostname against :hostname.  */
-
-  ret = gnutls_certificate_verify_peers2 (state, &peer_verification);
-  if (ret < GNUTLS_E_SUCCESS)
-    return gnutls_make_error (ret);
-
-  XPROCESS (proc)->gnutls_peer_verification = peer_verification;
-
-  warnings = Fplist_get (Fgnutls_peer_status (proc), intern (":warnings"));
-  if (!NILP (warnings))
-    {
-      Lisp_Object tail;
-      for (tail = warnings; CONSP (tail); tail = XCDR (tail))
-        {
-          Lisp_Object warning = XCAR (tail);
-          Lisp_Object message = Fgnutls_peer_status_warning_describe (warning);
-          if (!NILP (message))
-            GNUTLS_LOG2 (1, max_log_level, "verification:", SSDATA (message));
-        }
-    }
-
-  if (peer_verification != 0)
-    {
-      if (verify_error_all
-          || !NILP (Fmember (QCgnutls_bootprop_trustfiles, verify_error)))
-        {
-         emacs_gnutls_deinit (proc);
-         error ("Certificate validation failed %s, verification code %x",
-                c_hostname, peer_verification);
-        }
-      else
-       {
-          GNUTLS_LOG2 (1, max_log_level, "certificate validation failed:",
-                       c_hostname);
-       }
-    }
-
-  /* Up to here the process is the same for X.509 certificates and
-     OpenPGP keys.  From now on X.509 certificates are assumed.  This
-     can be easily extended to work with openpgp keys as well.  */
-  if (gnutls_certificate_type_get (state) == GNUTLS_CRT_X509)
-    {
-      gnutls_x509_crt_t gnutls_verify_cert;
-      const gnutls_datum_t *gnutls_verify_cert_list;
-      unsigned int gnutls_verify_cert_list_size;
-
-      ret = gnutls_x509_crt_init (&gnutls_verify_cert);
-      if (ret < GNUTLS_E_SUCCESS)
-       return gnutls_make_error (ret);
-
-      gnutls_verify_cert_list =
-       gnutls_certificate_get_peers (state, &gnutls_verify_cert_list_size);
-
-      if (gnutls_verify_cert_list == NULL)
-       {
-         gnutls_x509_crt_deinit (gnutls_verify_cert);
-         emacs_gnutls_deinit (proc);
-         error ("No x509 certificate was found\n");
-       }
-
-      /* We only check the first certificate in the given chain.  */
-      ret = gnutls_x509_crt_import (gnutls_verify_cert,
-                                      &gnutls_verify_cert_list[0],
-                                      GNUTLS_X509_FMT_DER);
-
-      if (ret < GNUTLS_E_SUCCESS)
-       {
-         gnutls_x509_crt_deinit (gnutls_verify_cert);
-         return gnutls_make_error (ret);
-       }
-
-      XPROCESS (proc)->gnutls_certificate = gnutls_verify_cert;
-
-      int err = gnutls_x509_crt_check_hostname (gnutls_verify_cert,
-                                               c_hostname);
-      check_memory_full (err);
-      if (!err)
-       {
-         XPROCESS (proc)->gnutls_extra_peer_verification |=
-           CERTIFICATE_NOT_MATCHING;
-          if (verify_error_all
-              || !NILP (Fmember (QCgnutls_bootprop_hostname, verify_error)))
-            {
-             gnutls_x509_crt_deinit (gnutls_verify_cert);
-             emacs_gnutls_deinit (proc);
-             error ("The x509 certificate does not match \"%s\"", c_hostname);
-            }
-         else
-           {
-              GNUTLS_LOG2 (1, max_log_level, "x509 certificate does not match:",
-                           c_hostname);
-           }
-       }
-    }
-
-  /* Set this flag only if the whole initialization succeeded.  */
-  XPROCESS (proc)->gnutls_p = 1;
-
-  return gnutls_make_error (ret);
+  return gnutls_verify_boot (proc, proplist);
 }
 
 DEFUN ("gnutls-bye", Fgnutls_bye,
@@ -1627,14 +1700,14 @@ DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0,
 {
 #ifdef HAVE_GNUTLS
 # ifdef WINDOWSNT
-  Lisp_Object found = Fassq (Qgnutls_dll, Vlibrary_cache);
+  Lisp_Object found = Fassq (Qgnutls, Vlibrary_cache);
   if (CONSP (found))
     return XCDR (found);
   else
     {
       Lisp_Object status;
       status = init_gnutls_functions () ? Qt : Qnil;
-      Vlibrary_cache = Fcons (Fcons (Qgnutls_dll, status), Vlibrary_cache);
+      Vlibrary_cache = Fcons (Fcons (Qgnutls, status), Vlibrary_cache);
       return status;
     }
 # else /* !WINDOWSNT */
@@ -1666,15 +1739,16 @@ syms_of_gnutls (void)
   DEFSYM (Qgnutls_x509pki, "gnutls-x509pki");
 
   /* The following are for the property list of 'gnutls-boot'.  */
-  DEFSYM (QCgnutls_bootprop_hostname, ":hostname");
-  DEFSYM (QCgnutls_bootprop_priority, ":priority");
-  DEFSYM (QCgnutls_bootprop_trustfiles, ":trustfiles");
-  DEFSYM (QCgnutls_bootprop_keylist, ":keylist");
-  DEFSYM (QCgnutls_bootprop_crlfiles, ":crlfiles");
-  DEFSYM (QCgnutls_bootprop_min_prime_bits, ":min-prime-bits");
-  DEFSYM (QCgnutls_bootprop_loglevel, ":loglevel");
-  DEFSYM (QCgnutls_bootprop_verify_flags, ":verify-flags");
-  DEFSYM (QCgnutls_bootprop_verify_error, ":verify-error");
+  DEFSYM (QChostname, ":hostname");
+  DEFSYM (QCpriority, ":priority");
+  DEFSYM (QCtrustfiles, ":trustfiles");
+  DEFSYM (QCkeylist, ":keylist");
+  DEFSYM (QCcrlfiles, ":crlfiles");
+  DEFSYM (QCmin_prime_bits, ":min-prime-bits");
+  DEFSYM (QCloglevel, ":loglevel");
+  DEFSYM (QCcomplete_negotiation, ":complete-negotiation");
+  DEFSYM (QCverify_flags, ":verify-flags");
+  DEFSYM (QCverify_error, ":verify-error");
 
   DEFSYM (Qgnutls_e_interrupted, "gnutls-e-interrupted");
   Fput (Qgnutls_e_interrupted, Qgnutls_code,
@@ -1693,6 +1767,7 @@ syms_of_gnutls (void)
        make_number (GNUTLS_E_APPLICATION_ERROR_MIN));
 
   defsubr (&Sgnutls_get_initstage);
+  defsubr (&Sgnutls_asynchronous_parameters);
   defsubr (&Sgnutls_errorp);
   defsubr (&Sgnutls_error_fatalp);
   defsubr (&Sgnutls_error_string);
index e9348e7423e8f43ca205f7e9241181ee6b6cf54c..47e11f2905f01b3aaae08afc18c304801a7d7970 100644 (file)
@@ -25,8 +25,9 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "lisp.h"
 
-/* This limits the attempts to handshake per process (connection).  */
-#define GNUTLS_EMACS_HANDSHAKES_LIMIT 100
+/* This limits the attempts to handshake per process (connection).  It
+   should work out to about one minute in asynchronous cases. */
+#define GNUTLS_EMACS_HANDSHAKES_LIMIT 6000
 
 typedef enum
 {
@@ -84,6 +85,8 @@ extern void emacs_gnutls_transport_set_errno (gnutls_session_t state, int err);
 #endif
 extern Lisp_Object emacs_gnutls_deinit (Lisp_Object);
 extern Lisp_Object emacs_gnutls_global_init (void);
+extern int gnutls_try_handshake (struct Lisp_Process *p);
+extern Lisp_Object gnutls_verify_boot (Lisp_Object proc, Lisp_Object proplist);
 
 #endif
 
index b07c1815eaca6f4b102322ff835067ddc643cc83..22bbc35fcfbec591fb592f8e30cf44a17ffd6a57 100644 (file)
@@ -2300,7 +2300,7 @@ x_find_image_fd (Lisp_Object file, int *pfd)
             happens, e.g., under Auto Image File Mode.)  'openp'
             didn't open the file, so we should, because the caller
             expects that.  */
-         fd = emacs_open (SSDATA (file_found), O_RDONLY | O_BINARY, 0);
+         fd = emacs_open (SSDATA (file_found), O_RDONLY, 0);
        }
     }
   else /* fd < 0, but not -2 */
@@ -8077,15 +8077,25 @@ compute_image_size (size_t width, size_t height,
 {
   Lisp_Object value;
   int desired_width, desired_height;
+  double scale = 1;
+
+  value = image_spec_value (spec, QCscale, NULL);
+  if (NUMBERP (value))
+    scale = extract_float (value);
 
   /* If width and/or height is set in the display spec assume we want
      to scale to those values.  If either h or w is unspecified, the
      unspecified should be calculated from the specified to preserve
      aspect ratio.  */
   value = image_spec_value (spec, QCwidth, NULL);
-  desired_width = NATNUMP (value) ? min (XFASTINT (value), INT_MAX) : -1;
+  desired_width = NATNUMP (value) ?
+    min (XFASTINT (value) * scale, INT_MAX) : -1;
   value = image_spec_value (spec, QCheight, NULL);
-  desired_height = NATNUMP (value) ? min (XFASTINT (value), INT_MAX) : -1;
+  desired_height = NATNUMP (value) ?
+    min (XFASTINT (value) * scale, INT_MAX) : -1;
+
+  width = width * scale;
+  height = height * scale;
 
   if (desired_width == -1)
     {
@@ -8136,6 +8146,13 @@ compute_image_size (size_t width, size_t height,
     /* h known, calculate w.  */
     desired_width = scale_image_size (desired_height, height, width);
 
+  /* We have no width/height settings, so just apply the scale. */
+  if (desired_width == -1 && desired_height == -1)
+    {
+      desired_width = width;
+      desired_height = height;
+    }
+
   *d_width = desired_width;
   *d_height = desired_height;
 }
@@ -8550,6 +8567,18 @@ imagemagick_load_image (struct frame *f, struct image *img,
       return 0;
     }
 
+#ifdef HAVE_MAGICKAUTOORIENTIMAGE
+  /* If no :rotation is explicitly specified, apply the automatic
+     rotation from EXIF. */
+  if (NILP (image_spec_value (img->spec, QCrotation, NULL)))
+    if (MagickAutoOrientImage (image_wand) == MagickFalse)
+      {
+        image_error ("Error applying automatic orientation in image `%s'", img->spec);
+        DestroyMagickWand (image_wand);
+        return 0;
+      }
+#endif
+
   if (ino < 0 || ino >= MagickGetNumberImages (image_wand))
     {
       image_error ("Invalid image number `%s' in image `%s'", image, img->spec);
@@ -9232,8 +9261,8 @@ svg_load_image (struct frame *f,         /* Pointer to emacs frame structure.  *
   eassert (gdk_pixbuf_get_has_alpha (pixbuf));
   eassert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
 
-#ifdef USE_CAIRO
   {
+#ifdef USE_CAIRO
     unsigned char *data = (unsigned char *) xmalloc (width*height*4);
     uint32_t bgcolor = get_spec_bg_or_alpha_as_argb (img, f);
 
@@ -9259,82 +9288,77 @@ svg_load_image (struct frame *f,         /* Pointer to emacs frame structure.  *
 
     create_cairo_image_surface (img, data, width, height);
     g_object_unref (pixbuf);
-  }
 #else
-  /* Try to create a x pixmap to hold the svg pixmap.  */
-  XImagePtr ximg;
-  if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0))
-    {
-      g_object_unref (pixbuf);
-      return 0;
-    }
+    /* Try to create a x pixmap to hold the svg pixmap.  */
+    XImagePtr ximg;
+    if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0))
+      {
+       g_object_unref (pixbuf);
+       return 0;
+      }
 
-  init_color_table ();
+    init_color_table ();
 
-  /* Handle alpha channel by combining the image with a background
-     color.  */
-  XColor background;
-  Lisp_Object specified_bg = image_spec_value (img->spec, QCbackground, NULL);
-  if (!STRINGP (specified_bg)
-      || !x_defined_color (f, SSDATA (specified_bg), &background, 0))
-    x_query_frame_background_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;
-
-  /* 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 (int y = 0; y < height; ++y)
-    {
-      for (int x = 0; x < width; ++x)
-       {
-         int red;
-         int green;
-         int blue;
-         int 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));
-       }
+    /* Handle alpha channel by combining the image with a background
+       color.  */
+    XColor background;
+    Lisp_Object specified_bg = image_spec_value (img->spec, QCbackground, NULL);
+    if (!STRINGP (specified_bg)
+       || !x_defined_color (f, SSDATA (specified_bg), &background, 0))
+      x_query_frame_background_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;
+
+    /* 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 (int y = 0; y < height; ++y)
+      {
+       for (int x = 0; x < width; ++x)
+         {
+           int red     = *pixels++;
+           int green   = *pixels++;
+           int blue    = *pixels++;
+           int 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;
-    }
+       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 ();
+    /* Remember colors allocated for this image.  */
+    img->colors = colors_in_color_table (&img->ncolors);
+    free_color_table ();
 #endif /* COLOR_TABLE_SUPPORT */
 
-  g_object_unref (pixbuf);
+    g_object_unref (pixbuf);
 
-  img->width  = width;
-  img->height = height;
+    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);
+    /* 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 ximg into the image.  */
-  image_put_x_image (f, img, ximg, 0);
+    /* Put ximg into the image.  */
+    image_put_x_image (f, img, ximg, 0);
 #endif /* ! USE_CAIRO */
+  }
 
   return 1;
 
@@ -9799,6 +9823,7 @@ non-numeric, there is no explicit limit on the size of images.  */);
   DEFSYM (QCcrop, ":crop");
   DEFSYM (QCrotation, ":rotation");
   DEFSYM (QCmatrix, ":matrix");
+  DEFSYM (QCscale, ":scale");
   DEFSYM (QCcolor_adjustment, ":color-adjustment");
   DEFSYM (QCmask, ":mask");
 
index e3858a5d8dc0c6ae663c5959c98d76f2264a3063..92d5c3053a7e826eea35ac0539518cdb3e68d58d 100644 (file)
@@ -2834,7 +2834,16 @@ read_char (int commandflag, Lisp_Object map,
       last_input_event = c;
       call4 (Qcommand_execute, tem, Qnil, Fvector (1, &last_input_event), Qt);
 
-      if (CONSP (c) && EQ (XCAR (c), Qselect_window) && !end_time)
+      if (CONSP (c)
+          && (EQ (XCAR (c), Qselect_window)
+#ifdef HAVE_DBUS
+             || EQ (XCAR (c), Qdbus_event)
+#endif
+#ifdef USE_FILE_NOTIFY
+             || EQ (XCAR (c), Qfile_notify)
+#endif
+             || EQ (XCAR (c), Qconfig_changed_event))
+          && !end_time)
        /* We stopped being idle for this event; undo that.  This
           prevents automatic window selection (under
           mouse-autoselect-window) from acting as a real input event, for
@@ -5971,7 +5980,6 @@ make_lispy_event (struct input_event *event)
       }
 #endif
 
-
 #if defined HAVE_INOTIFY || defined HAVE_KQUEUE || defined HAVE_GFILENOTIFY
     case FILE_NOTIFY_EVENT:
       {
@@ -10309,6 +10317,9 @@ handle_interrupt (bool in_signal_handler)
         is used.  Note that [Enter] is not echoed by dos.  */
       cursor_to (SELECTED_FRAME (), 0, 0);
 #endif
+
+      write_stdout ("Emacs is resuming after an emergency escape.\n");
+
       /* It doesn't work to autosave while GC is in progress;
         the code used for auto-saving doesn't cope with the mark bit.  */
       if (!gc_in_progress)
@@ -11713,6 +11724,25 @@ Currently, the only supported values for this
 variable are `sigusr1' and `sigusr2'.  */);
   Vdebug_on_event = intern_c_string ("sigusr2");
 
+  DEFVAR_BOOL ("attempt-stack-overflow-recovery",
+               attempt_stack_overflow_recovery,
+               doc: /* If non-nil, attempt to recover from C stack
+overflow.  This recovery is unsafe and may lead to deadlocks or data
+corruption, but it usually works and may preserve modified buffers
+that would otherwise be lost.  If nil, treat stack overflow like any
+other kind of crash.  */);
+  attempt_stack_overflow_recovery = true;
+
+  DEFVAR_BOOL ("attempt-orderly-shutdown-on-fatal-signal",
+               attempt_orderly_shutdown_on_fatal_signal,
+               doc: /* If non-nil, attempt to perform an orderly
+shutdown when Emacs receives a fatal signal (e.g., a crash).
+This cleanup is unsafe and may lead to deadlocks or data corruption,
+but it usually works and may preserve modified buffers that would
+otherwise be lost.  If nil, crash immediately in response to fatal
+signals.  */);
+  attempt_orderly_shutdown_on_fatal_signal = true;
+
   /* Create the initial keyboard.  Qt means 'unset'.  */
   initial_kboard = allocate_kboard (Qt);
 }
index 8ab4c6c27ae5e5e542d6dadf88016b7235336265..44335aded87b3169259ab5b320320715c5755a3b 100644 (file)
@@ -1303,7 +1303,7 @@ silly_event_symbol_error (Lisp_Object c)
       *p = 0;
 
       c = reorder_modifiers (c);
-      AUTO_STRING (new_mods_string, new_mods);
+      AUTO_STRING_WITH_LEN (new_mods_string, new_mods, p - new_mods);
       keystring = concat2 (new_mods_string, XCDR (assoc));
 
       error ("To bind the key %s, use [?%s], not [%s]",
@@ -1737,10 +1737,12 @@ bindings; see the description of `lookup-key' for more details about this.  */)
 
 DEFUN ("define-prefix-command", Fdefine_prefix_command, Sdefine_prefix_command, 1, 3, 0,
        doc: /* Define COMMAND as a prefix command.  COMMAND should be a symbol.
-A new sparse keymap is stored as COMMAND's function definition and its value.
-If a second optional argument MAPVAR is given, the map is stored as
-its value instead of as COMMAND's value; but COMMAND is still defined
-as a function.
+A new sparse keymap is stored as COMMAND's function definition and its
+value.
+This prepares COMMAND for use as a prefix key's binding.
+If a second optional argument MAPVAR is given, it should be a symbol.
+The map is then stored as MAPVAR's value instead of as COMMAND's
+value; but COMMAND is still defined as a function.
 The third optional argument NAME, if given, supplies a menu name
 string for the map.  This is required to use the keymap as a menu.
 This function returns COMMAND.  */)
index c848b7ff1af963a53e5474c73179e7fdf4b05495..f45bd0c4c24e505a30fcd3aed2929db084f930d2 100644 (file)
@@ -29,6 +29,10 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "keyboard.h"
 #include "process.h"
 
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif /* HAVE_SYS_RESOURCE_H  */
+
 \f
 /* File handle for kqueue.  */
 static int kqueuefd = -1;
@@ -366,9 +370,12 @@ only when the upper directory of the renamed file is watched.  */)
   (Lisp_Object file, Lisp_Object flags, Lisp_Object callback)
 {
   Lisp_Object watch_object, dir_list;
-  int fd, oflags;
+  int maxfd, fd, oflags;
   u_short fflags = 0;
   struct kevent kev;
+#ifdef HAVE_GETRLIMIT
+  struct rlimit rlim;
+#endif /* HAVE_GETRLIMIT  */
 
   /* Check parameters.  */
   CHECK_STRING (file);
@@ -381,6 +388,21 @@ only when the upper directory of the renamed file is watched.  */)
   if (! FUNCTIONP (callback))
     wrong_type_argument (Qinvalid_function, callback);
 
+  /* Check available file descriptors.  */
+#ifdef HAVE_GETRLIMIT
+  if (! getrlimit (RLIMIT_NOFILE, &rlim))
+    maxfd = rlim.rlim_cur;
+  else
+#endif /* HAVE_GETRLIMIT  */
+    maxfd = 256;
+
+  /* We assume 50 file descriptors are sufficient for the rest of Emacs.  */
+  if ((maxfd - 50) < XINT (Flength (watch_list)))
+    xsignal2
+      (Qfile_notify_error,
+       build_string ("File watching not possible, no file descriptor left"),
+       Flength (watch_list));
+
   if (kqueuefd < 0)
     {
       /* Create kqueue descriptor.  */
index d516093b297b9d7c918b61aed68a3709d8648935..9d70b001d11d02e6cdfd7b4af95e1f34883d1124 100644 (file)
@@ -38,7 +38,10 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "lisp.h"
 
+#if ((!defined SYSTEM_MALLOC && !defined HYBRID_MALLOC) \
+     || defined WINDOWSNT || defined CYGWIN || defined DARWIN_OS)
 char my_edata[] = "End of Emacs initialized data";
+#endif
 
 /* Help unexec locate the end of the .bss area used by Emacs (which
    isn't always a separate section in NT executables).  */
index 6a98adbda9c630fd01afafb29c13cc2c838af4d9..1fc6130be0b1fc4f899ab31523e2d280e12fbcd5 100644 (file)
@@ -600,7 +600,9 @@ extern _Noreturn Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
 extern _Noreturn void wrong_choice (Lisp_Object, Lisp_Object);
 
 /* Defined in emacs.c.  */
+#ifdef DOUG_LEA_MALLOC
 extern bool might_dump;
+#endif
 /* True means Emacs has already been initialized.
    Used during startup to detect startup of dumped Emacs.  */
 extern bool initialized;
@@ -719,12 +721,16 @@ struct Lisp_Symbol
    except the former expands to an integer constant expression.  */
 #define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET ((iname) * sizeof *lispsym)
 
+/* LISPSYM_INITIALLY (Qfoo) is equivalent to Qfoo except it is
+   designed for use as an initializer, even for a constant initializer.  */
+#define LISPSYM_INITIALLY(name) LISP_INITIALLY (XLI_BUILTIN_LISPSYM (i##name))
+
 /* Declare extern constants for Lisp symbols.  These can be helpful
    when using a debugger like GDB, on older platforms where the debug
    format does not represent C macros.  */
 #define DEFINE_LISP_SYMBOL(name) \
   DEFINE_GDB_SYMBOL_BEGIN (Lisp_Object, name) \
-  DEFINE_GDB_SYMBOL_END (LISP_INITIALLY (XLI_BUILTIN_LISPSYM (i##name)))
+  DEFINE_GDB_SYMBOL_END (LISPSYM_INITIALLY (name))
 
 /* By default, define macros for Qt, etc., as this leads to a bit
    better performance in the core Emacs interpreter.  A plugin can
@@ -3439,7 +3445,7 @@ ptrdiff_t hash_lookup (struct Lisp_Hash_Table *, Lisp_Object, EMACS_UINT *);
 ptrdiff_t hash_put (struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object,
                    EMACS_UINT);
 void hash_remove_from_table (struct Lisp_Hash_Table *, Lisp_Object);
-extern struct hash_table_test hashtest_eq, hashtest_eql, hashtest_equal;
+extern struct hash_table_test const hashtest_eq, hashtest_eql, hashtest_equal;
 extern void validate_subarray (Lisp_Object, Lisp_Object, Lisp_Object,
                               ptrdiff_t, ptrdiff_t *, ptrdiff_t *);
 extern Lisp_Object substring_both (Lisp_Object, ptrdiff_t, ptrdiff_t,
@@ -3584,13 +3590,8 @@ extern void mark_object (Lisp_Object);
 #if defined REL_ALLOC && !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
 extern void refill_memory_reserve (void);
 #endif
-#ifdef DOUG_LEA_MALLOC
 extern void alloc_unexec_pre (void);
 extern void alloc_unexec_post (void);
-#else
-INLINE void alloc_unexec_pre (void) {}
-INLINE void alloc_unexec_post (void) {}
-#endif
 extern const char *pending_malloc_warning;
 extern Lisp_Object zero_vector;
 extern Lisp_Object *stack_base;
@@ -3756,6 +3757,15 @@ extern void check_cons_list (void);
 INLINE void (check_cons_list) (void) { lisp_h_check_cons_list (); }
 #endif
 
+/* Defined in gmalloc.c.  */
+#if !defined DOUG_LEA_MALLOC && !defined HYBRID_MALLOC && !defined SYSTEM_MALLOC
+extern size_t __malloc_extra_blocks;
+#endif
+#if !HAVE_DECL_ALIGNED_ALLOC
+extern void *aligned_alloc (size_t, size_t) ATTRIBUTE_MALLOC_SIZE ((2));
+#endif
+extern void malloc_enable_thread (void);
+
 #ifdef REL_ALLOC
 /* Defined in ralloc.c.  */
 extern void *r_alloc (void **, size_t) ATTRIBUTE_ALLOC_SIZE ((2));
@@ -3901,6 +3911,8 @@ extern Lisp_Object unbind_to (ptrdiff_t, Lisp_Object);
 extern _Noreturn void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
 extern _Noreturn void verror (const char *, va_list)
   ATTRIBUTE_FORMAT_PRINTF (1, 0);
+extern Lisp_Object vformat_string (const char *, va_list)
+  ATTRIBUTE_FORMAT_PRINTF (1, 0);
 extern void un_autoload (Lisp_Object);
 extern Lisp_Object call_debugger (Lisp_Object arg);
 extern void *near_C_stack_top (void);
@@ -4125,6 +4137,9 @@ extern bool noninteractive;
 /* True means remove site-lisp directories from load-path.  */
 extern bool no_site_lisp;
 
+/* True means put details like time stamps into builds.  */
+extern bool build_details;
+
 /* Pipe used to send exit notification to the daemon parent at
    startup.  On Windows, we use a kernel event instead.  */
 #ifndef WINDOWSNT
@@ -4166,7 +4181,7 @@ extern void delete_keyboard_wait_descriptor (int);
 extern void add_gpm_wait_descriptor (int);
 extern void delete_gpm_wait_descriptor (int);
 #endif
-extern void init_process_emacs (void);
+extern void init_process_emacs (int);
 extern void syms_of_process (void);
 extern void setup_process_coding_systems (Lisp_Object);
 
@@ -4204,6 +4219,7 @@ extern struct byte_stack *byte_stack_list;
 extern void relocate_byte_stack (void);
 extern Lisp_Object exec_byte_code (Lisp_Object, Lisp_Object, Lisp_Object,
                                   Lisp_Object, ptrdiff_t, Lisp_Object *);
+extern Lisp_Object get_byte_code_arity (Lisp_Object);
 
 /* Defined in macros.c.  */
 extern void init_macros (void);
@@ -4236,9 +4252,8 @@ struct tty_display_info;
 struct terminal;
 
 /* Defined in sysdep.c.  */
-#ifndef HAVE_GET_CURRENT_DIR_NAME
-extern char *get_current_dir_name (void);
-#endif
+extern void init_standard_fds (void);
+extern char *emacs_get_current_dir_name (void);
 extern void stuff_char (char c);
 extern void init_foreground_group (void);
 extern void sys_subshell (void);
@@ -4598,27 +4613,29 @@ enum
                                                     STACK_CONS (d, Qnil)))) \
         : list4 (a, b, c, d))
 
-/* Check whether stack-allocated strings are ASCII-only.  */
+/* Declare NAME as an auto Lisp string if possible, a GC-based one if not.
+   Take its unibyte value from the null-terminated string STR,
+   an expression that should not have side effects.
+   STR's value is not necessarily copied.  The resulting Lisp string
+   should not be modified or made visible to user code.  */
 
-#if defined (ENABLE_CHECKING) && USE_STACK_LISP_OBJECTS
-extern const char *verify_ascii (const char *);
-#else
-# define verify_ascii(str) (str)
-#endif
+#define AUTO_STRING(name, str) \
+  AUTO_STRING_WITH_LEN (name, str, strlen (str))
 
 /* Declare NAME as an auto Lisp string if possible, a GC-based one if not.
-   Take its value from STR.  STR is not necessarily copied and should
-   contain only ASCII characters.  The resulting Lisp string should
-   not be modified or made visible to user code.  */
+   Take its unibyte value from the null-terminated string STR with length LEN.
+   STR may have side effects and may contain null bytes.
+   STR's value is not necessarily copied.  The resulting Lisp string
+   should not be modified or made visible to user code.  */
 
-#define AUTO_STRING(name, str)                                         \
+#define AUTO_STRING_WITH_LEN(name, str, len)                           \
   Lisp_Object name =                                                   \
     (USE_STACK_STRING                                                  \
      ? (make_lisp_ptr                                                  \
        ((&(union Aligned_String)                                       \
-         {{strlen (str), -1, 0, (unsigned char *) verify_ascii (str)}}.s), \
-         Lisp_String))                                                 \
-     : build_string (verify_ascii (str)))
+         {{len, -1, 0, (unsigned char *) (str)}}.s),                   \
+        Lisp_String))                                                  \
+     : make_unibyte_string (str, len))
 
 /* Loop over all tails of a list, checking for cycles.
    FIXME: Make tortoise and n internal declarations.
index d374406e7b9473381f38c4660b641d0b543b1421..98a4d69894b5b037fdedcb3f194fae2dd6fedaf1 100644 (file)
@@ -43,6 +43,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "systime.h"
 #include "termhooks.h"
 #include "blockinput.h"
+#include <c-ctype.h>
 
 #ifdef MSDOS
 #include "msdos.h"
@@ -1582,8 +1583,7 @@ openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes,
                }
              else
                {
-                 int oflags = O_RDONLY + (NILP (predicate) ? 0 : O_BINARY);
-                 fd = emacs_open (pfn, oflags, 0);
+                 fd = emacs_open (pfn, O_RDONLY, 0);
                  if (fd < 0)
                    {
                      if (errno != ENOENT)
@@ -2154,6 +2154,33 @@ grow_read_buffer (void)
                         MAX_MULTIBYTE_LENGTH, -1, 1);
 }
 
+/* Return the scalar value that has the Unicode character name NAME.
+   Raise 'invalid-read-syntax' if there is no such character.  */
+static int
+character_name_to_code (char const *name, ptrdiff_t name_len)
+{
+  /* For "U+XXXX", pass the leading '+' to string_to_number to reject
+     monstrosities like "U+-0000".  */
+  Lisp_Object code
+    = (name[0] == 'U' && name[1] == '+'
+       ? string_to_number (name + 1, 16, false)
+       : call2 (Qchar_from_name, make_unibyte_string (name, name_len), Qt));
+
+  if (! RANGED_INTEGERP (0, code, MAX_UNICODE_CHAR)
+      || char_surrogate_p (XINT (code)))
+    {
+      AUTO_STRING (format, "\\N{%s}");
+      AUTO_STRING_WITH_LEN (namestr, name, name_len);
+      xsignal1 (Qinvalid_read_syntax, CALLN (Fformat, format, namestr));
+    }
+
+  return XINT (code);
+}
+
+/* Bound on the length of a Unicode character name.  As of
+   Unicode 9.0.0 the maximum is 83, so this should be safe.  */
+enum { UNICODE_CHARACTER_NAME_LENGTH_BOUND = 200 };
+
 /* Read a \-escape sequence, assuming we already read the `\'.
    If the escape sequence forces unibyte, return eight-bit char.  */
 
@@ -2361,6 +2388,51 @@ read_escape (Lisp_Object readcharfun, bool stringp)
        return i;
       }
 
+    case 'N':
+      /* Named character.  */
+      {
+        c = READCHAR;
+        if (c != '{')
+          invalid_syntax ("Expected opening brace after \\N");
+        char name[UNICODE_CHARACTER_NAME_LENGTH_BOUND + 1];
+        bool whitespace = false;
+        ptrdiff_t length = 0;
+        while (true)
+          {
+            c = READCHAR;
+            if (c < 0)
+              end_of_file_error ();
+            if (c == '}')
+              break;
+            if (! (0 < c && c < 0x80))
+              {
+                AUTO_STRING (format,
+                             "Invalid character U+%04X in character name");
+                xsignal1 (Qinvalid_read_syntax,
+                          CALLN (Fformat, format, make_natnum (c)));
+              }
+            /* Treat multiple adjacent whitespace characters as a
+               single space character.  This makes it easier to use
+               character names in e.g. multi-line strings.  */
+            if (c_isspace (c))
+              {
+                if (whitespace)
+                  continue;
+                c = ' ';
+                whitespace = true;
+              }
+            else
+              whitespace = false;
+            name[length++] = c;
+            if (length >= sizeof name)
+              invalid_syntax ("Character name too long");
+          }
+        if (length == 0)
+          invalid_syntax ("Empty character name");
+       name[length] = '\0';
+       return character_name_to_code (name, length);
+      }
+
     default:
       return c;
     }
@@ -4508,6 +4580,7 @@ were read in.  */);
               doc: /* List of directories to search for files to load.
 Each element is a string (directory file name) or nil (meaning
 `default-directory').
+This list is consulted by the `require' function.
 Initialized during startup as described in Info node `(elisp)Library Search'.
 Use `directory-file-name' when adding items to this path.  However, Lisp
 programs that process this list should tolerate directories both with
@@ -4749,4 +4822,6 @@ that are loaded before your customizations are read!  */);
   DEFSYM (Qweakness, "weakness");
   DEFSYM (Qrehash_size, "rehash-size");
   DEFSYM (Qrehash_threshold, "rehash-threshold");
+
+  DEFSYM (Qchar_from_name, "char-from-name");
 }
index 030083002f409e8edc78ae5b9dd3bac2ef44f3d2..febdb17689a5d9af8d32b37e97972c5a97f64389 100644 (file)
@@ -412,8 +412,7 @@ Returns nil if MARKER points into a dead buffer.  */)
 }
 
 DEFUN ("marker-position", Fmarker_position, Smarker_position, 1, 1, 0,
-       doc: /* Return the position MARKER points at, as a character number.
-Returns nil if MARKER points nowhere.  */)
+       doc: /* Return the position of MARKER, or nil if it points nowhere.  */)
   (Lisp_Object marker)
 {
   CHECK_MARKER (marker);
index 9504cee592338b44d4e043b5aae013b5e80349c1..737f2b55e8b9525050b48ff0e0faf9fda6ae941d 100644 (file)
@@ -408,7 +408,7 @@ single_menu_item (Lisp_Object key, Lisp_Object item, Lisp_Object dummy, void *sk
 
       if (prefix)
        {
-         AUTO_STRING (prefix_obj, prefix);
+         AUTO_STRING_WITH_LEN (prefix_obj, prefix, 4);
          item_string = concat2 (prefix_obj, item_string);
        }
   }
index 238a04a8ad2485e83636ea9830e392af33676e14..d2a4c9b95383ed0af71b000b2fef8a0b5a551f4c 100644 (file)
@@ -194,7 +194,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
   int c;
   unsigned char hide_char = 0;
   struct emacs_tty etty;
-  bool etty_valid;
+  bool etty_valid IF_LINT (= false);
 
   /* Check, whether we need to suppress echoing.  */
   if (CHARACTERP (Vread_hide_char))
@@ -203,10 +203,10 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
   /* Manipulate tty.  */
   if (hide_char)
     {
-      etty_valid = emacs_get_tty (fileno (stdin), &etty) == 0;
+      etty_valid = emacs_get_tty (STDIN_FILENO, &etty) == 0;
       if (etty_valid)
-       set_binary_mode (fileno (stdin), O_BINARY);
-      suppress_echo_on_tty (fileno (stdin));
+       set_binary_mode (STDIN_FILENO, O_BINARY);
+      suppress_echo_on_tty (STDIN_FILENO);
     }
 
   fwrite (SDATA (prompt), 1, SBYTES (prompt), stdout);
@@ -240,8 +240,8 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
       fprintf (stdout, "\n");
       if (etty_valid)
        {
-         emacs_set_tty (fileno (stdin), &etty, 0);
-         set_binary_mode (fileno (stdin), O_TEXT);
+         emacs_set_tty (STDIN_FILENO, &etty, 0);
+         set_binary_mode (STDIN_FILENO, O_TEXT);
        }
     }
 
@@ -630,8 +630,31 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt,
                            Qrear_nonsticky, Qt, Qnil);
        Fput_text_property (make_number (BEG), make_number (PT),
                            Qfield, Qt, Qnil);
-       Fadd_text_properties (make_number (BEG), make_number (PT),
-                             Vminibuffer_prompt_properties, Qnil);
+       if (Fconsp (Vminibuffer_prompt_properties))
+         {
+           /* We want to apply all properties from
+              `minibuffer-prompt-properties' to the region normally,
+              but if the `face' property is present, add that
+              property to the end of the face properties to avoid
+              overwriting faces. */
+           Lisp_Object list = Vminibuffer_prompt_properties;
+           while (CONSP (list))
+             {
+               Lisp_Object key = XCAR (list);
+               list = XCDR (list);
+               if (CONSP (list))
+                 {
+                   Lisp_Object val = XCAR (list);
+                   list = XCDR (list);
+                   if (EQ (key, Qface))
+                     Fadd_face_text_property (make_number (BEG),
+                                              make_number (PT), val, Qt, Qnil);
+                   else
+                     Fput_text_property (make_number (BEG), make_number (PT),
+                                         key, val, Qnil);
+                 }
+             }
+         }
       }
     unbind_to (count1, Qnil);
   }
@@ -742,27 +765,25 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt,
 }
 
 /* Return a buffer to be used as the minibuffer at depth `depth'.
- depth = 0 is the lowest allowed argument, and that is the value
- used for nonrecursive minibuffer invocations.  */
  depth = 0 is the lowest allowed argument, and that is the value
  used for nonrecursive minibuffer invocations.  */
 
 Lisp_Object
 get_minibuffer (EMACS_INT depth)
 {
-  Lisp_Object tail, num, buf;
-  char name[sizeof " *Minibuf-*" + INT_STRLEN_BOUND (EMACS_INT)];
-
-  XSETFASTINT (num, depth);
-  tail = Fnthcdr (num, Vminibuffer_list);
+  Lisp_Object tail = Fnthcdr (make_number (depth), Vminibuffer_list);
   if (NILP (tail))
     {
       tail = list1 (Qnil);
       Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
     }
-  buf = Fcar (tail);
+  Lisp_Object buf = Fcar (tail);
   if (NILP (buf) || !BUFFER_LIVE_P (XBUFFER (buf)))
     {
-      buf = Fget_buffer_create
-       (make_formatted_string (name, " *Minibuf-%"pI"d*", depth));
+      static char const name_fmt[] = " *Minibuf-%"pI"d*";
+      char name[sizeof name_fmt + INT_STRLEN_BOUND (EMACS_INT)];
+      AUTO_STRING_WITH_LEN (lname, name, sprintf (name, name_fmt, depth));
+      buf = Fget_buffer_create (lname);
 
       /* Although the buffer's name starts with a space, undo should be
         enabled in it.  */
@@ -1966,7 +1987,9 @@ controls the behavior, rather than this variable.  */);
 
   DEFVAR_BOOL ("enable-recursive-minibuffers", enable_recursive_minibuffers,
               doc: /* Non-nil means to allow minibuffer commands while in the minibuffer.
-This variable makes a difference whenever the minibuffer window is active. */);
+This variable makes a difference whenever the minibuffer window is active.
+Also see `minibuffer-depth-indicator-mode', which may be handy if this
+variable is non-nil. */);
   enable_recursive_minibuffers = 0;
 
   DEFVAR_LISP ("minibuffer-completion-table", Vminibuffer_completion_table,
index 0aea9cca112e92638bb3f46167583f661bc703a7..6cad337f3f866798c28c35d17332230a073cee15 100644 (file)
@@ -676,11 +676,13 @@ char const * nstrace_fullscreen_type_name (int);
    /* offset to the bottom of knob of last mouse down */
    CGFloat last_mouse_offset;
    float min_portion;
-   int pixel_height;
+   int pixel_length;
    enum scroll_bar_part last_hit_part;
 
    BOOL condemned;
 
+   BOOL horizontal;
+
    /* optimize against excessive positioning calls generated by emacs */
    int em_position;
    int em_portion;
index 34c5395b630d5a6f3f9650354b1530e7ce22d0da..1d48c041bad7bf2f0f910b63c16466869d386b39 100644 (file)
@@ -1801,23 +1801,6 @@ x_set_window_size (struct frame *f,
 
   [window setFrame: wr display: YES];
 
-  /* This is a trick to compensate for Emacs' managing the scrollbar area
-     as a fixed number of standard character columns.  Instead of leaving
-     blank space for the extra, we chopped it off above.  Now for
-     left-hand scrollbars, we shift all rendering to the left by the
-     difference between the real width and Emacs' imagined one.  For
-     right-hand bars, don't worry about it since the extra is never used.
-     (Obviously doesn't work for vertically split windows tho..) */
-  {
-    NSPoint origin = FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (f)
-      ? NSMakePoint (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f)
-                     - NS_SCROLL_BAR_WIDTH (f), 0)
-      : NSMakePoint (0, 0);
-
-    [view setFrame: NSMakeRect (0, 0, pixelwidth, pixelheight)];
-    [view setBoundsOrigin: origin];
-  }
-
   [view updateFrameSize: NO];
   unblock_input ();
 }
@@ -4351,7 +4334,7 @@ ns_set_vertical_scroll_bar (struct window *window,
   window_box (window, ANY_AREA, 0, &window_y, 0, &window_height);
   top = window_y;
   height = window_height;
-  width = WINDOW_CONFIG_SCROLL_BAR_COLS (window) * FRAME_COLUMN_WIDTH (f);
+  width = NS_SCROLL_BAR_WIDTH (f);
   left = WINDOW_SCROLL_BAR_AREA_X (window);
 
   r = NSMakeRect (left, top, width, height);
@@ -4442,34 +4425,20 @@ ns_set_horizontal_scroll_bar (struct window *window,
   NSTRACE ("ns_set_horizontal_scroll_bar");
 
   /* Get dimensions.  */
-  window_box (window, ANY_AREA, 0, &window_x, &window_width, 0);
+  window_box (window, ANY_AREA, &window_x, 0, &window_width, 0);
   left = window_x;
   width = window_width;
-  height = WINDOW_CONFIG_SCROLL_BAR_LINES (window) * FRAME_LINE_HEIGHT (f);
+  height = NS_SCROLL_BAR_HEIGHT (f);
   top = WINDOW_SCROLL_BAR_AREA_Y (window);
 
   r = NSMakeRect (left, top, width, height);
   /* the parent view is flipped, so we need to flip y value */
   v = [view frame];
-  /* ??????? PXW/scrollbars !!!!!!!!!!!!!!!!!!!! */
   r.origin.y = (v.size.height - r.size.height - r.origin.y);
 
   XSETWINDOW (win, window);
   block_input ();
 
-  if (WINDOW_TOTAL_COLS (window) < 5)
-    {
-      if (!NILP (window->horizontal_scroll_bar))
-        {
-          bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
-          [bar removeFromSuperview];
-          wset_horizontal_scroll_bar (window, Qnil);
-        }
-      ns_clear_frame_area (f, left, top, width, height);
-      unblock_input ();
-      return;
-    }
-
   if (NILP (window->horizontal_scroll_bar))
     {
       if (width > 0 && height > 0)
@@ -4484,16 +4453,22 @@ ns_set_horizontal_scroll_bar (struct window *window,
       NSRect oldRect;
       bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
       oldRect = [bar frame];
-      r.size.width = oldRect.size.width;
       if (FRAME_LIVE_P (f) && !NSEqualRects (oldRect, r))
         {
-          if (oldRect.origin.x != r.origin.x)
-              ns_clear_frame_area (f, left, top, width, height);
+          if (oldRect.origin.y != r.origin.y)
+            ns_clear_frame_area (f, left, top, width, height);
           [bar setFrame: r];
           update_p = YES;
         }
     }
 
+  /* If there are both horizontal and vertical scroll-bars they leave
+     a square that belongs to neither. We need to clear it otherwise
+     it fills with junk. */
+  if (!NILP (window->vertical_scroll_bar))
+    ns_clear_frame_area (f, WINDOW_SCROLL_BAR_AREA_X (window), top,
+                         NS_SCROLL_BAR_HEIGHT (f), height);
+
   if (update_p)
     [bar setPosition: position portion: portion whole: whole];
   unblock_input ();
@@ -4531,13 +4506,15 @@ ns_redeem_scroll_bar (struct window *window)
 {
   id bar;
   NSTRACE ("ns_redeem_scroll_bar");
-  if (!NILP (window->vertical_scroll_bar))
+  if (!NILP (window->vertical_scroll_bar)
+      && WINDOW_HAS_VERTICAL_SCROLL_BAR (window))
     {
       bar = XNS_SCROLL_BAR (window->vertical_scroll_bar);
       [bar reprieve];
     }
 
-  if (!NILP (window->horizontal_scroll_bar))
+  if (!NILP (window->horizontal_scroll_bar)
+      && WINDOW_HAS_HORIZONTAL_SCROLL_BAR (window))
     {
       bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
       [bar reprieve];
@@ -8110,12 +8087,15 @@ not_in_argv (NSString *arg)
   return r;
 }
 
-
 - initFrame: (NSRect )r window: (Lisp_Object)nwin
 {
   NSTRACE ("[EmacsScroller initFrame: window:]");
 
-  r.size.width = [EmacsScroller scrollerWidth];
+  if (r.size.width > r.size.height)
+      horizontal = YES;
+  else
+      horizontal = NO;
+
   [super initWithFrame: r/*NSMakeRect (0, 0, 0, 0)*/];
   [self setContinuous: YES];
   [self setEnabled: YES];
@@ -8131,9 +8111,12 @@ not_in_argv (NSString *arg)
 
   window = XWINDOW (nwin);
   condemned = NO;
-  pixel_height = NSHeight (r);
-  if (pixel_height == 0) pixel_height = 1;
-  min_portion = 20 / pixel_height;
+  if (horizontal)
+    pixel_length = NSWidth (r);
+  else
+    pixel_length = NSHeight (r);
+  if (pixel_length == 0) pixel_length = 1;
+  min_portion = 20 / pixel_length;
 
   frame = XFRAME (window->frame);
   if (FRAME_LIVE_P (frame))
@@ -8162,9 +8145,12 @@ not_in_argv (NSString *arg)
   NSTRACE ("[EmacsScroller setFrame:]");
 
 /*  block_input (); */
-  pixel_height = NSHeight (newRect);
-  if (pixel_height == 0) pixel_height = 1;
-  min_portion = 20 / pixel_height;
+  if (horizontal)
+    pixel_length = NSWidth (newRect);
+  else
+    pixel_length = NSHeight (newRect);
+  if (pixel_length == 0) pixel_length = 1;
+  min_portion = 20 / pixel_length;
   [super setFrame: newRect];
 /*  unblock_input (); */
 }
@@ -8174,7 +8160,12 @@ not_in_argv (NSString *arg)
 {
   NSTRACE ("[EmacsScroller dealloc]");
   if (window)
-    wset_vertical_scroll_bar (window, Qnil);
+    {
+      if (horizontal)
+        wset_horizontal_scroll_bar (window, Qnil);
+      else
+        wset_vertical_scroll_bar (window, Qnil);
+    }
   window = 0;
   [super dealloc];
 }
@@ -8209,7 +8200,12 @@ not_in_argv (NSString *arg)
       if (view != nil)
         view->scrollbarsNeedingUpdate++;
       if (window)
-        wset_vertical_scroll_bar (window, Qnil);
+        {
+          if (horizontal)
+            wset_horizontal_scroll_bar (window, Qnil);
+          else
+            wset_vertical_scroll_bar (window, Qnil);
+        }
       window = 0;
       [self removeFromSuperview];
       [self release];
@@ -8259,7 +8255,7 @@ not_in_argv (NSString *arg)
     {
       float pos;
       CGFloat por;
-      portion = max ((float)whole*min_portion/pixel_height, portion);
+      portion = max ((float)whole*min_portion/pixel_length, portion);
       pos = (float)position / (whole - portion);
       por = (CGFloat)portion/whole;
 #ifdef NS_IMPL_COCOA
@@ -8289,10 +8285,20 @@ not_in_argv (NSString *arg)
   XSETWINDOW (win, window);
   emacs_event->frame_or_window = win;
   emacs_event->timestamp = EV_TIMESTAMP (e);
-  emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
   emacs_event->arg = Qnil;
-  XSETINT (emacs_event->x, loc * pixel_height);
-  XSETINT (emacs_event->y, pixel_height-20);
+
+  if (horizontal)
+    {
+      emacs_event->kind = HORIZONTAL_SCROLL_BAR_CLICK_EVENT;
+      XSETINT (emacs_event->x, em_whole * loc / pixel_length);
+      XSETINT (emacs_event->y, em_whole);
+    }
+  else
+    {
+      emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
+      XSETINT (emacs_event->x, loc);
+      XSETINT (emacs_event->y, pixel_length-20);
+    }
 
   if (q_event_ptr)
     {
@@ -8355,15 +8361,15 @@ not_in_argv (NSString *arg)
   switch (part)
     {
     case NSScrollerDecrementPage:
-        last_hit_part = scroll_bar_above_handle; inc = -1.0; break;
+      last_hit_part = horizontal ? scroll_bar_before_handle : scroll_bar_above_handle; break;
     case NSScrollerIncrementPage:
-        last_hit_part = scroll_bar_below_handle; inc = 1.0; break;
+      last_hit_part = horizontal ? scroll_bar_after_handle : scroll_bar_below_handle; break;
     case NSScrollerDecrementLine:
-      last_hit_part = scroll_bar_up_arrow; inc = -0.1; break;
+      last_hit_part = horizontal ? scroll_bar_left_arrow : scroll_bar_up_arrow; break;
     case NSScrollerIncrementLine:
-      last_hit_part = scroll_bar_down_arrow; inc = 0.1; break;
+      last_hit_part = horizontal ? scroll_bar_right_arrow : scroll_bar_down_arrow; break;
     case NSScrollerKnob:
-      last_hit_part = scroll_bar_handle; break;
+      last_hit_part = horizontal ? scroll_bar_horizontal_handle : scroll_bar_handle; break;
     case NSScrollerKnobSlot:  /* GNUstep-only */
       last_hit_part = scroll_bar_move_ratio; break;
     default:  /* NSScrollerNoPart? */
@@ -8372,36 +8378,34 @@ not_in_argv (NSString *arg)
       return;
     }
 
-  if (inc != 0.0)
-    {
-      pos = 0;      /* ignored */
-
-      /* set a timer to repeat, as we can't let superclass do this modally */
-      scroll_repeat_entry
-       = [[NSTimer scheduledTimerWithTimeInterval: SCROLL_BAR_FIRST_DELAY
-                                            target: self
-                                          selector: @selector (repeatScroll:)
-                                          userInfo: 0
-                                           repeats: YES]
-           retain];
-    }
-  else
+  if (part == NSScrollerKnob || part == NSScrollerKnobSlot)
     {
       /* handle, or on GNUstep possibly slot */
       NSEvent *fake_event;
+      int length;
 
       /* compute float loc in slot and mouse offset on knob */
       sr = [self convertRect: [self rectForPart: NSScrollerKnobSlot]
                       toView: nil];
-      loc = NSHeight (sr) - ([e locationInWindow].y - NSMinY (sr));
+      if (horizontal)
+        {
+          length = NSWidth (sr);
+          loc = ([e locationInWindow].x - NSMinX (sr));
+        }
+      else
+        {
+          length = NSHeight (sr);
+          loc = length - ([e locationInWindow].y - NSMinY (sr));
+        }
+
       if (loc <= 0.0)
         {
           loc = 0.0;
           edge = -1;
         }
-      else if (loc >= NSHeight (sr))
+      else if (loc >= length)
         {
-          loc = NSHeight (sr);
+          loc = length;
           edge = 1;
         }
 
@@ -8411,17 +8415,16 @@ not_in_argv (NSString *arg)
         {
           kr = [self convertRect: [self rectForPart: NSScrollerKnob]
                           toView: nil];
-          kloc = NSHeight (kr) - ([e locationInWindow].y - NSMinY (kr));
+          if (horizontal)
+            kloc = ([e locationInWindow].x - NSMinX (kr));
+          else
+            kloc = NSHeight (kr) - ([e locationInWindow].y - NSMinY (kr));
         }
       last_mouse_offset = kloc;
 
-      /* if knob, tell emacs a location offset by knob pos
-         (to indicate top of handle) */
-      if (part == NSScrollerKnob)
-          pos = (loc - last_mouse_offset) / NSHeight (sr);
-      else
-        /* else this is a slot click on GNUstep: go straight there */
-        pos = loc / NSHeight (sr);
+      if (part != NSScrollerKnob)
+        /* this is a slot click on GNUstep: go straight there */
+        pos = loc;
 
       /* send a fake mouse-up to super to preempt modal -trackKnob: mode */
       fake_event = [NSEvent mouseEventWithType: NSLeftMouseUp
@@ -8435,6 +8438,19 @@ not_in_argv (NSString *arg)
                                       pressure: [e pressure]];
       [super mouseUp: fake_event];
     }
+  else
+    {
+      pos = 0;      /* ignored */
+
+      /* set a timer to repeat, as we can't let superclass do this modally */
+      scroll_repeat_entry
+       = [[NSTimer scheduledTimerWithTimeInterval: SCROLL_BAR_FIRST_DELAY
+                                            target: self
+                                          selector: @selector (repeatScroll:)
+                                          userInfo: 0
+                                           repeats: YES]
+           retain];
+    }
 
   if (part != NSScrollerKnob)
     [self sendScrollEventAtLoc: pos fromEvent: e];
@@ -8446,23 +8462,34 @@ not_in_argv (NSString *arg)
 {
     NSRect sr;
     double loc, pos;
+    int length;
 
     NSTRACE ("[EmacsScroller mouseDragged:]");
 
       sr = [self convertRect: [self rectForPart: NSScrollerKnobSlot]
                       toView: nil];
-      loc = NSHeight (sr) - ([e locationInWindow].y - NSMinY (sr));
+
+      if (horizontal)
+        {
+          length = NSWidth (sr);
+          loc = ([e locationInWindow].x - NSMinX (sr));
+        }
+      else
+        {
+          length = NSHeight (sr);
+          loc = length - ([e locationInWindow].y - NSMinY (sr));
+        }
 
       if (loc <= 0.0)
         {
           loc = 0.0;
         }
-      else if (loc >= NSHeight (sr) + last_mouse_offset)
+      else if (loc >= length + last_mouse_offset)
         {
-          loc = NSHeight (sr) + last_mouse_offset;
+          loc = length + last_mouse_offset;
         }
 
-      pos = (loc - last_mouse_offset) / NSHeight (sr);
+      pos = (loc - last_mouse_offset);
       [self sendScrollEventAtLoc: pos fromEvent: e];
 }
 
index 2b53d7580b1a089ff6e9eb66b9493b27eddbf575..83edbb6bfa4688b210e3ce9f24a1bf84454ae03d 100644 (file)
@@ -38,6 +38,10 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <float.h>
 #include <ftoastr.h>
 
+#ifdef WINDOWSNT
+# include <sys/socket.h> /* for F_DUPFD_CLOEXEC */
+#endif
+
 struct terminal;
 
 /* Avoid actual stack overflow in print.  */
@@ -775,15 +779,6 @@ debug_output_compilation_hack (bool x)
   print_output_debug_flag = x;
 }
 
-#if defined (GNU_LINUX)
-
-/* This functionality is not vitally important in general, so we rely on
-   non-portable ability to use stderr as lvalue.  */
-
-#define WITH_REDIRECT_DEBUGGING_OUTPUT 1
-
-static FILE *initial_stderr_stream = NULL;
-
 DEFUN ("redirect-debugging-output", Fredirect_debugging_output, Sredirect_debugging_output,
        1, 2,
        "FDebug output file: \nP",
@@ -793,30 +788,38 @@ Optional arg APPEND non-nil (interactively, with prefix arg) means
 append to existing target file.  */)
   (Lisp_Object file, Lisp_Object append)
 {
-  if (initial_stderr_stream != NULL)
-    {
-      block_input ();
-      fclose (stderr);
-      unblock_input ();
-    }
-  stderr = initial_stderr_stream;
-  initial_stderr_stream = NULL;
+  /* If equal to STDERR_FILENO, stderr has not been duplicated and is OK as-is.
+     Otherwise, this is a close-on-exec duplicate of the original stderr. */
+  static int stderr_dup = STDERR_FILENO;
+  int fd = stderr_dup;
 
-  if (STRINGP (file))
+  if (! NILP (file))
     {
       file = Fexpand_file_name (file, Qnil);
-      initial_stderr_stream = stderr;
-      stderr = emacs_fopen (SSDATA (file), NILP (append) ? "w" : "a");
-      if (stderr == NULL)
+
+      if (stderr_dup == STDERR_FILENO)
        {
-         stderr = initial_stderr_stream;
-         initial_stderr_stream = NULL;
-         report_file_error ("Cannot open debugging output stream", file);
+         int n = fcntl (STDERR_FILENO, F_DUPFD_CLOEXEC, STDERR_FILENO + 1);
+         if (n < 0)
+           report_file_error ("dup", file);
+         stderr_dup = n;
        }
+
+      fd = emacs_open (SSDATA (ENCODE_FILE (file)),
+                      (O_WRONLY | O_CREAT
+                       | (! NILP (append) ? O_APPEND : O_TRUNC)),
+                      0666);
+      if (fd < 0)
+       report_file_error ("Cannot open debugging output stream", file);
     }
+
+  fflush (stderr);
+  if (dup2 (fd, STDERR_FILENO) < 0)
+    report_file_error ("dup2", file);
+  if (fd != stderr_dup)
+    emacs_close (fd);
   return Qnil;
 }
-#endif /* GNU_LINUX */
 
 
 /* This is the interface for debugging printing.  */
@@ -2305,9 +2308,7 @@ priorities.  */);
   defsubr (&Sprint);
   defsubr (&Sterpri);
   defsubr (&Swrite_char);
-#ifdef WITH_REDIRECT_DEBUGGING_OUTPUT
   defsubr (&Sredirect_debugging_output);
-#endif
 
   DEFSYM (Qprint_escape_newlines, "print-escape-newlines");
   DEFSYM (Qprint_escape_multibyte, "print-escape-multibyte");
index 2c758a4c9a7801f4bc0f51865efb47fe95b06dfd..9f2d379c330f8395b5628d28e8ee9934f32a9497 100644 (file)
@@ -75,11 +75,6 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 # include <sys/stropts.h>
 #endif
 
-#ifdef HAVE_RES_INIT
-#include <arpa/nameser.h>
-#include <resolv.h>
-#endif
-
 #ifdef HAVE_UTIL_H
 #include <util.h>
 #endif
@@ -125,6 +120,11 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #endif
 #endif
 
+#if defined HAVE_GETADDRINFO_A || defined HAVE_GNUTLS
+/* This is 0.1s in nanoseconds. */
+#define ASYNC_RETRY_NSEC 100000000
+#endif
+
 #ifdef WINDOWSNT
 extern int sys_select (int, fd_set *, fd_set *, fd_set *,
                       struct timespec *, void *);
@@ -193,16 +193,6 @@ static EMACS_INT process_tick;
 /* Number of events for which the user or sentinel has been notified.  */
 static EMACS_INT update_tick;
 
-/* Define NON_BLOCKING_CONNECT if we can support non-blocking connects.
-   The code can be simplified by assuming NON_BLOCKING_CONNECT once
-   Emacs starts assuming POSIX 1003.1-2001 or later.  */
-
-#if (defined HAVE_SELECT                               \
-     && (defined GNU_LINUX || defined HAVE_GETPEERNAME)        \
-     && (defined EWOULDBLOCK || defined EINPROGRESS))
-# define NON_BLOCKING_CONNECT
-#endif
-
 /* Define DATAGRAM_SOCKETS if datagrams can be used safely on
    this system.  We need to read full packets, so we need a
    "non-destructive" select.  So we require either native select,
@@ -262,7 +252,6 @@ static fd_set non_process_wait_mask;
 
 static fd_set write_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
    and added to the input_wait_mask and non_keyboard_wait_mask.  */
@@ -271,7 +260,6 @@ static fd_set connect_wait_mask;
 
 /* Number of bits set in connect_wait_mask.  */
 static int num_pending_connects;
-#endif /* NON_BLOCKING_CONNECT */
 
 /* The largest descriptor currently in use for a process object; -1 if none.  */
 static int max_process_desc;
@@ -279,8 +267,15 @@ static int max_process_desc;
 /* The largest descriptor currently in use for input; -1 if none.  */
 static int max_input_desc;
 
+/* Set the external socket descriptor for Emacs to use when
+   `make-network-process' is called with a non-nil
+   `:use-external-socket' option.  The value should be either -1, or
+   the file descriptor of a socket that is already bound.  */
+static int external_sock_fd;
+
 /* Indexed by descriptor, gives the process (if any) for that descriptor.  */
 static Lisp_Object chan_process[FD_SETSIZE];
+static void wait_for_socket_fds (Lisp_Object, char const *);
 
 /* Alist of elements (NAME . PROCESS).  */
 static Lisp_Object Vprocess_alist;
@@ -301,7 +296,7 @@ static struct coding_system *proc_encode_coding_system[FD_SETSIZE];
 /* Table of `partner address' for datagram sockets.  */
 static struct sockaddr_and_len {
   struct sockaddr *sa;
-  int len;
+  ptrdiff_t len;
 } datagram_address[FD_SETSIZE];
 #define DATAGRAM_CHAN_P(chan)  (datagram_address[chan].sa != 0)
 #define DATAGRAM_CONN_P(proc)                                           \
@@ -381,11 +376,6 @@ pset_sentinel (struct Lisp_Process *p, Lisp_Object val)
   p->sentinel = NILP (val) ? Qinternal_default_process_sentinel : val;
 }
 static void
-pset_status (struct Lisp_Process *p, Lisp_Object val)
-{
-  p->status = val;
-}
-static void
 pset_tty_name (struct Lisp_Process *p, Lisp_Object val)
 {
   p->tty_name = val;
@@ -691,12 +681,7 @@ allocate_process (void)
 static Lisp_Object
 make_process (Lisp_Object name)
 {
-  register Lisp_Object val, tem, name1;
-  register struct Lisp_Process *p;
-  char suffix[sizeof "<>" + INT_STRLEN_BOUND (printmax_t)];
-  printmax_t i;
-
-  p = allocate_process ();
+  struct Lisp_Process *p = allocate_process ();
   /* Initialize Lisp data.  Note that allocate_process initializes all
      Lisp data to nil, so do it only for slots which should not be nil.  */
   pset_status (p, Qrun);
@@ -706,26 +691,32 @@ make_process (Lisp_Object name)
      non-Lisp data, so do it only for slots which should not be zero.  */
   p->infd = -1;
   p->outfd = -1;
-  for (i = 0; i < PROCESS_OPEN_FDS; i++)
+  for (int i = 0; i < PROCESS_OPEN_FDS; i++)
     p->open_fd[i] = -1;
 
 #ifdef HAVE_GNUTLS
   p->gnutls_initstage = GNUTLS_STAGE_EMPTY;
+  p->gnutls_boot_parameters = Qnil;
 #endif
 
   /* If name is already in use, modify it until it is unused.  */
 
-  name1 = name;
-  for (i = 1; ; i++)
+  Lisp_Object name1 = name;
+  for (printmax_t i = 1; ; i++)
     {
-      tem = Fget_process (name1);
-      if (NILP (tem)) break;
-      name1 = concat2 (name, make_formatted_string (suffix, "<%"pMd">", i));
+      Lisp_Object tem = Fget_process (name1);
+      if (NILP (tem))
+       break;
+      char const suffix_fmt[] = "<%"pMd">";
+      char suffix[sizeof suffix_fmt + INT_STRLEN_BOUND (printmax_t)];
+      AUTO_STRING_WITH_LEN (lsuffix, suffix, sprintf (suffix, suffix_fmt, i));
+      name1 = concat2 (name, lsuffix);
     }
   name = name1;
   pset_name (p, name);
   pset_sentinel (p, Qinternal_default_process_sentinel);
   pset_filter (p, Qinternal_default_process_filter);
+  Lisp_Object val;
   XSETPROCESS (val, p);
   Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
   return val;
@@ -742,6 +733,19 @@ remove_process (register Lisp_Object proc)
   deactivate_process (proc);
 }
 
+#ifdef HAVE_GETADDRINFO_A
+static void
+free_dns_request (Lisp_Object proc)
+{
+  struct Lisp_Process *p = XPROCESS (proc);
+
+  if (p->dns_request->ar_result)
+    freeaddrinfo (p->dns_request->ar_result);
+  xfree (p->dns_request);
+  p->dns_request = NULL;
+}
+#endif
+
 \f
 DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
        doc: /* Return t if OBJECT is a process.  */)
@@ -832,6 +836,25 @@ nil, indicating the current buffer's process.  */)
   process = get_process (process);
   p = XPROCESS (process);
 
+#ifdef HAVE_GETADDRINFO_A
+  if (p->dns_request)
+    {
+      /* Cancel the request.  Unless shutting down, wait until
+        completion.  Free the request if completely canceled. */
+
+      bool canceled = gai_cancel (p->dns_request) != EAI_NOTCANCELED;
+      if (!canceled && !inhibit_sentinels)
+       {
+         struct gaicb const *req = p->dns_request;
+         while (gai_suspend (&req, 1, NULL) != 0)
+           continue;
+         canceled = true;
+       }
+      if (canceled)
+       free_dns_request (process);
+    }
+#endif
+
   p->raw_status_new = 0;
   if (NETCONN1_P (p) || SERIALCONN1_P (p) || PIPECONN1_P (p))
     {
@@ -1008,6 +1031,23 @@ DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
   return XPROCESS (process)->mark;
 }
 
+static void
+set_process_filter_masks (struct Lisp_Process *p)
+{
+  if (EQ (p->filter, Qt) && !EQ (p->status, Qlisten))
+    {
+      FD_CLR (p->infd, &input_wait_mask);
+      FD_CLR (p->infd, &non_keyboard_wait_mask);
+    }
+  else if (EQ (p->filter, Qt)
+          /* Network or serial process not stopped:  */
+          && !EQ (p->command, Qt))
+    {
+      FD_SET (p->infd, &input_wait_mask);
+      FD_SET (p->infd, &non_keyboard_wait_mask);
+    }
+}
+
 DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
        2, 2, 0,
        doc: /* Give PROCESS the filter function FILTER; nil means default.
@@ -1024,12 +1064,10 @@ The string argument is normally a multibyte string, except:
 - if `default-enable-multibyte-characters' is nil, it is a unibyte
   string (the result of converting the decoded input multibyte
   string to unibyte with `string-make-unibyte').  */)
-  (register Lisp_Object process, Lisp_Object filter)
+  (Lisp_Object process, Lisp_Object filter)
 {
-  struct Lisp_Process *p;
-
   CHECK_PROCESS (process);
-  p = XPROCESS (process);
+  struct Lisp_Process *p = XPROCESS (process);
 
   /* Don't signal an error if the process's input file descriptor
      is closed.  This could make debugging Lisp more difficult,
@@ -1042,23 +1080,11 @@ The string argument is normally a multibyte string, except:
   if (NILP (filter))
     filter = Qinternal_default_process_filter;
 
+  pset_filter (p, filter);
+
   if (p->infd >= 0)
-    {
-      if (EQ (filter, Qt) && !EQ (p->status, Qlisten))
-       {
-         FD_CLR (p->infd, &input_wait_mask);
-         FD_CLR (p->infd, &non_keyboard_wait_mask);
-       }
-      else if (EQ (p->filter, Qt)
-              /* Network or serial process not stopped:  */
-              && !EQ (p->command, Qt))
-       {
-         FD_SET (p->infd, &input_wait_mask);
-         FD_SET (p->infd, &non_keyboard_wait_mask);
-       }
-    }
+    set_process_filter_masks (p);
 
-  pset_filter (p, filter);
   if (NETCONN1_P (p) || SERIALCONN1_P (p) || PIPECONN1_P (p))
     pset_childp (p, Fplist_put (p->childp, QCfilter, filter));
   setup_process_coding_systems (process);
@@ -1117,7 +1143,8 @@ DEFUN ("set-process-window-size", Fset_process_window_size,
   CHECK_RANGED_INTEGER (height, 0, USHRT_MAX);
   CHECK_RANGED_INTEGER (width, 0, USHRT_MAX);
 
-  if (XPROCESS (process)->infd < 0
+  if (NETCONN_P (process)
+      || XPROCESS (process)->infd < 0
       || (set_window_size (XPROCESS (process)->infd,
                           XINT (height), XINT (width))
          < 0))
@@ -1185,8 +1212,10 @@ SERVICE) for a network connection or (PORT SPEED) for a serial
 connection.  If KEY is t, the complete contact information for the
 connection is returned, else the specific value for the keyword KEY is
 returned.  See `make-network-process' or `make-serial-process' for a
-list of keywords.  */)
-  (register Lisp_Object process, Lisp_Object key)
+list of keywords.
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed.  */)
+  (Lisp_Object process, Lisp_Object key)
 {
   Lisp_Object contact;
 
@@ -1194,6 +1223,10 @@ list of keywords.  */)
   contact = XPROCESS (process)->childp;
 
 #ifdef DATAGRAM_SOCKETS
+
+  if (NETCONN_P (process))
+    wait_for_socket_fds (process, "process-contact");
+
   if (DATAGRAM_CONN_P (process)
       && (EQ (key, Qt) || EQ (key, QCremote)))
     contact = Fplist_put (contact, QCremote,
@@ -1228,8 +1261,8 @@ DEFUN ("process-plist", Fprocess_plist, Sprocess_plist,
 
 DEFUN ("set-process-plist", Fset_process_plist, Sset_process_plist,
        2, 2, 0,
-       doc: /* Replace the plist of PROCESS with PLIST.  Returns PLIST.  */)
-  (register Lisp_Object process, Lisp_Object plist)
+       doc: /* Replace the plist of PROCESS with PLIST.  Return PLIST.  */)
+  (Lisp_Object process, Lisp_Object plist)
 {
   CHECK_PROCESS (process);
   CHECK_LIST (plist);
@@ -1269,7 +1302,7 @@ A 4 or 5 element vector represents an IPv4 address (with port number).
 An 8 or 9 element vector represents an IPv6 address (with port number).
 If optional second argument OMIT-PORT is non-nil, don't include a port
 number in the string, even when present in ADDRESS.
-Returns nil if format of ADDRESS is invalid.  */)
+Return nil if format of ADDRESS is invalid.  */)
   (Lisp_Object address, Lisp_Object omit_port)
 {
   if (NILP (address))
@@ -2217,12 +2250,12 @@ usage:  (make-pipe-process &rest ARGS)  */)
    The address family of sa is not included in the result.  */
 
 Lisp_Object
-conv_sockaddr_to_lisp (struct sockaddr *sa, int len)
+conv_sockaddr_to_lisp (struct sockaddr *sa, ptrdiff_t len)
 {
   Lisp_Object address;
-  int i;
+  ptrdiff_t i;
   unsigned char *cp;
-  register struct Lisp_Vector *p;
+  struct Lisp_Vector *p;
 
   /* Workaround for a bug in getsockname on BSD: Names bound to
      sockets in the UNIX domain are inaccessible; getsockname returns
@@ -2297,10 +2330,10 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len)
 
 /* Get family and required size for sockaddr structure to hold ADDRESS.  */
 
-static int
+static ptrdiff_t
 get_lisp_to_sockaddr_size (Lisp_Object address, int *familyp)
 {
-  register struct Lisp_Vector *p;
+  struct Lisp_Vector *p;
 
   if (VECTORP (address))
     {
@@ -2416,13 +2449,18 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int
 #ifdef DATAGRAM_SOCKETS
 DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_address,
        1, 1, 0,
-       doc: /* Get the current datagram address associated with PROCESS.  */)
+       doc: /* Get the current datagram address associated with PROCESS.
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed.  */)
   (Lisp_Object process)
 {
   int channel;
 
   CHECK_PROCESS (process);
 
+  if (NETCONN_P (process))
+    wait_for_socket_fds (process, "process-datagram-address");
+
   if (!DATAGRAM_CONN_P (process))
     return Qnil;
 
@@ -2434,14 +2472,21 @@ DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_
 DEFUN ("set-process-datagram-address", Fset_process_datagram_address, Sset_process_datagram_address,
        2, 2, 0,
        doc: /* Set the datagram address for PROCESS to ADDRESS.
-Returns nil upon error setting address, ADDRESS otherwise.  */)
+Return nil upon error setting address, ADDRESS otherwise.
+
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed.  */)
   (Lisp_Object process, Lisp_Object address)
 {
   int channel;
-  int family, len;
+  int family;
+  ptrdiff_t len;
 
   CHECK_PROCESS (process);
 
+  if (NETCONN_P (process))
+    wait_for_socket_fds (process, "set-process-datagram-address");
+
   if (!DATAGRAM_CONN_P (process))
     return Qnil;
 
@@ -2497,7 +2542,7 @@ static const struct socket_options {
 
 /* Set option OPT to value VAL on socket S.
 
-   Returns (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
+   Return (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
    Signals an error if setting a known option fails.
 */
 
@@ -2599,7 +2644,10 @@ DEFUN ("set-network-process-option",
        doc: /* For network process PROCESS set option OPTION to value VALUE.
 See `make-network-process' for a list of options and values.
 If optional fourth arg NO-ERROR is non-nil, don't signal an error if
-OPTION is not a supported option, return nil instead; otherwise return t.  */)
+OPTION is not a supported option, return nil instead; otherwise return t.
+
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed. */)
   (Lisp_Object process, Lisp_Object option, Lisp_Object value, Lisp_Object no_error)
 {
   int s;
@@ -2610,6 +2658,8 @@ OPTION is not a supported option, return nil instead; otherwise return t.  */)
   if (!NETCONN1_P (p))
     error ("Process is not a network process");
 
+  wait_for_socket_fds (process, "set-network-process-option");
+
   s = p->infd;
   if (s < 0)
     error ("Process is not running");
@@ -2904,134 +2954,612 @@ usage:  (make-serial-process &rest ARGS)  */)
   return proc;
 }
 
-/* Create a network stream/datagram client/server process.  Treated
-   exactly like a normal process when reading and writing.  Primary
-   differences are in status display and process deletion.  A network
-   connection has no PID; you cannot signal it.  All you can do is
-   stop/continue it and deactivate/close it via delete-process.  */
+static void
+set_network_socket_coding_system (Lisp_Object proc, Lisp_Object host,
+                                 Lisp_Object service, Lisp_Object name)
+{
+  Lisp_Object tem;
+  struct Lisp_Process *p = XPROCESS (proc);
+  Lisp_Object contact = p->childp;
+  Lisp_Object coding_systems = Qt;
+  Lisp_Object val;
 
-DEFUN ("make-network-process", Fmake_network_process, Smake_network_process,
-       0, MANY, 0,
-       doc: /* Create and return a network server or client process.
+  tem = Fplist_member (contact, QCcoding);
+  if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem))))
+    tem = Qnil;  /* No error message (too late!).  */
 
-In Emacs, network connections are represented by process objects, so
-input and output work as for subprocesses and `delete-process' closes
-a network connection.  However, a network process has no process id,
-it cannot be signaled, and the status codes are different from normal
-processes.
+  /* Setup coding systems for communicating with the network stream.  */
+  /* Qt denotes we have not yet called Ffind_operation_coding_system.  */
 
-Arguments are specified as keyword/argument pairs.  The following
-arguments are defined:
+  if (!NILP (tem))
+    {
+      val = XCAR (XCDR (tem));
+      if (CONSP (val))
+       val = XCAR (val);
+    }
+  else if (!NILP (Vcoding_system_for_read))
+    val = Vcoding_system_for_read;
+  else if ((!NILP (p->buffer)
+           && NILP (BVAR (XBUFFER (p->buffer), enable_multibyte_characters)))
+          || (NILP (p->buffer)
+              && NILP (BVAR (&buffer_defaults, enable_multibyte_characters))))
+    /* We dare not decode end-of-line format by setting VAL to
+       Qraw_text, because the existing Emacs Lisp libraries
+       assume that they receive bare code including a sequence of
+       CR LF.  */
+    val = Qnil;
+  else
+    {
+      if (NILP (host) || NILP (service))
+       coding_systems = Qnil;
+      else
+       coding_systems = CALLN (Ffind_operation_coding_system,
+                               Qopen_network_stream, name, p->buffer,
+                               host, service);
+      if (CONSP (coding_systems))
+       val = XCAR (coding_systems);
+      else if (CONSP (Vdefault_process_coding_system))
+       val = XCAR (Vdefault_process_coding_system);
+      else
+       val = Qnil;
+    }
+  pset_decode_coding_system (p, val);
 
-:name NAME -- NAME is name for process.  It is modified if necessary
-to make it unique.
+  if (!NILP (tem))
+    {
+      val = XCAR (XCDR (tem));
+      if (CONSP (val))
+       val = XCDR (val);
+    }
+  else if (!NILP (Vcoding_system_for_write))
+    val = Vcoding_system_for_write;
+  else if (NILP (BVAR (current_buffer, enable_multibyte_characters)))
+    val = Qnil;
+  else
+    {
+      if (EQ (coding_systems, Qt))
+       {
+         if (NILP (host) || NILP (service))
+           coding_systems = Qnil;
+         else
+           coding_systems = CALLN (Ffind_operation_coding_system,
+                                   Qopen_network_stream, name, p->buffer,
+                                   host, service);
+       }
+      if (CONSP (coding_systems))
+       val = XCDR (coding_systems);
+      else if (CONSP (Vdefault_process_coding_system))
+       val = XCDR (Vdefault_process_coding_system);
+      else
+       val = Qnil;
+    }
+  pset_encode_coding_system (p, val);
 
-:buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
-with the process.  Process output goes at end of that buffer, unless
-you specify an output stream or filter function to handle the output.
-BUFFER may be also nil, meaning that this process is not associated
-with any buffer.
+  pset_decoding_buf (p, empty_unibyte_string);
+  p->decoding_carryover = 0;
+  pset_encoding_buf (p, empty_unibyte_string);
 
-:host HOST -- HOST is name of the host to connect to, or its IP
-address.  The symbol `local' specifies the local host.  If specified
-for a server process, it must be a valid name or address for the local
-host, and only clients connecting to that address will be accepted.
+  p->inherit_coding_system_flag
+    = !(!NILP (tem) || NILP (p->buffer) || !inherit_process_coding_system);
+}
 
-:service SERVICE -- SERVICE is name of the service desired, or an
-integer specifying a port number to connect to.  If SERVICE is t,
-a random port number is selected for the server.  (If Emacs was
-compiled with getaddrinfo, a port number can also be specified as a
-string, e.g. "80", as well as an integer.  This is not portable.)
+#ifdef HAVE_GNUTLS
+static void
+finish_after_tls_connection (Lisp_Object proc)
+{
+  struct Lisp_Process *p = XPROCESS (proc);
+  Lisp_Object contact = p->childp;
+  Lisp_Object result = Qt;
 
-:type TYPE -- TYPE is the type of connection.  The default (nil) is a
-stream type connection, `datagram' creates a datagram type connection,
-`seqpacket' creates a reliable datagram connection.
+  if (!NILP (Ffboundp (Qnsm_verify_connection)))
+    result = call3 (Qnsm_verify_connection,
+                   proc,
+                   Fplist_get (contact, QChost),
+                   Fplist_get (contact, QCservice));
 
-:family FAMILY -- FAMILY is the address (and protocol) family for the
-service specified by HOST and SERVICE.  The default (nil) is to use
-whatever address family (IPv4 or IPv6) that is defined for the host
-and port number specified by HOST and SERVICE.  Other address families
-supported are:
-  local -- for a local (i.e. UNIX) address specified by SERVICE.
-  ipv4  -- use IPv4 address family only.
-  ipv6  -- use IPv6 address family only.
+  if (NILP (result))
+    {
+      pset_status (p, list2 (Qfailed,
+                            build_string ("The Network Security Manager stopped the connections")));
+      deactivate_process (proc);
+    }
+  else
+    {
+      /* If we cleared the connection wait mask before we did
+        the TLS setup, then we have to say that the process
+        is finally "open" here. */
+      if (! FD_ISSET (p->outfd, &connect_wait_mask))
+       {
+         pset_status (p, Qrun);
+         /* Execute the sentinel here.  If we had relied on
+            status_notify to do it later, it will read input
+            from the process before calling the sentinel.  */
+         exec_sentinel (proc, build_string ("open\n"));
+       }
+    }
+}
+#endif
 
-:local ADDRESS -- ADDRESS is the local address used for the connection.
-This parameter is ignored when opening a client process. When specified
-for a server process, the FAMILY, HOST and SERVICE args are ignored.
+static void
+connect_network_socket (Lisp_Object proc, Lisp_Object ip_addresses,
+                        Lisp_Object use_external_socket_p)
+{
+  ptrdiff_t count = SPECPDL_INDEX ();
+  ptrdiff_t count1;
+  int s = -1, outch, inch;
+  int xerrno = 0;
+  Lisp_Object ip_address;
+  int family;
+  struct sockaddr *sa = NULL;
+  int ret;
+  ptrdiff_t addrlen;
+  struct Lisp_Process *p = XPROCESS (proc);
+  Lisp_Object contact = p->childp;
+  int optbits = 0;
+  int socket_to_use = -1;
 
-:remote ADDRESS -- ADDRESS is the remote partner's address for the
-connection.  This parameter is ignored when opening a stream server
-process.  For a datagram server process, it specifies the initial
-setting of the remote datagram address.  When specified for a client
-process, the FAMILY, HOST, and SERVICE args are ignored.
+  if (!NILP (use_external_socket_p))
+    {
+      socket_to_use = external_sock_fd;
 
-The format of ADDRESS depends on the address family:
-- An IPv4 address is represented as an vector of integers [A B C D P]
-corresponding to numeric IP address A.B.C.D and port number P.
-- A local address is represented as a string with the address in the
-local address space.
-- An "unsupported family" address is represented by a cons (F . AV)
-where F is the family number and AV is a vector containing the socket
-address data with one element per address data byte.  Do not rely on
-this format in portable code, as it may depend on implementation
-defined constants, data sizes, and data structure alignment.
+      /* Ensure we don't consume the external socket twice.  */
+      external_sock_fd = -1;
+    }
 
-:coding CODING -- If CODING is a symbol, it specifies the coding
-system used for both reading and writing for this process.  If CODING
-is a cons (DECODING . ENCODING), DECODING is used for reading, and
-ENCODING is used for writing.
+  /* Do this in case we never enter the while-loop below.  */
+  count1 = SPECPDL_INDEX ();
+  s = -1;
 
-:nowait BOOL -- If BOOL is non-nil for a stream type client process,
-return without waiting for the connection to complete; instead, the
-sentinel function will be called with second arg matching "open" (if
-successful) or "failed" when the connect completes.  Default is to use
-a blocking connect (i.e. wait) for stream type connections.
+  while (!NILP (ip_addresses))
+    {
+      ip_address = XCAR (ip_addresses);
+      ip_addresses = XCDR (ip_addresses);
 
-:noquery BOOL -- Query the user unless BOOL is non-nil, and process is
-running when Emacs is exited.
+#ifdef WINDOWSNT
+    retry_connect:
+#endif
 
-:stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
-In the stopped state, a server process does not accept new
-connections, and a client process does not handle incoming traffic.
-The stopped state is cleared by `continue-process' and set by
-`stop-process'.
+      addrlen = get_lisp_to_sockaddr_size (ip_address, &family);
+      if (sa)
+       free (sa);
+      sa = xmalloc (addrlen);
+      conv_lisp_to_sockaddr (family, ip_address, sa, addrlen);
 
-:filter FILTER -- Install FILTER as the process filter.
+      s = socket_to_use;
+      if (s < 0)
+       {
+         s = socket (family, p->socktype | SOCK_CLOEXEC, p->ai_protocol);
+         if (s < 0)
+           {
+             xerrno = errno;
+             continue;
+           }
+       }
 
-:filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
-process filter are multibyte, otherwise they are unibyte.
-If this keyword is not specified, the strings are multibyte if
-the default value of `enable-multibyte-characters' is non-nil.
+#ifdef DATAGRAM_SOCKETS
+      if (!p->is_server && p->socktype == SOCK_DGRAM)
+       break;
+#endif /* DATAGRAM_SOCKETS */
 
-:sentinel SENTINEL -- Install SENTINEL as the process sentinel.
+      if (p->is_non_blocking_client)
+       {
+         ret = fcntl (s, F_SETFL, O_NONBLOCK);
+         if (ret < 0)
+           {
+             xerrno = errno;
+             emacs_close (s);
+             s = -1;
+             continue;
+           }
+       }
 
-:log LOG -- Install LOG as the server process log function.  This
-function is called when the server accepts a network connection from a
-client.  The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
-is the server process, CLIENT is the new process for the connection,
-and MESSAGE is a string.
+      /* Make us close S if quit.  */
+      record_unwind_protect_int (close_file_unwind, s);
 
-:plist PLIST -- Install PLIST as the new process's initial plist.
+      /* Parse network options in the arg list.  We simply ignore anything
+        which isn't a known option (including other keywords).  An error
+        is signaled if setting a known option fails.  */
+      {
+       Lisp_Object params = contact, key, val;
 
-:server QLEN -- if QLEN is non-nil, create a server process for the
-specified FAMILY, SERVICE, and connection type (stream or datagram).
-If QLEN is an integer, it is used as the max. length of the server's
-pending connection queue (also known as the backlog); the default
-queue length is 5.  Default is to create a client process.
+       while (!NILP (params))
+         {
+           key = XCAR (params);
+           params = XCDR (params);
+           val = XCAR (params);
+           params = XCDR (params);
+           optbits |= set_socket_option (s, key, val);
+         }
+      }
 
-The following network options can be specified for this connection:
+      if (p->is_server)
+       {
+         /* Configure as a server socket.  */
 
-:broadcast BOOL    -- Allow send and receive of datagram broadcasts.
-:dontroute BOOL    -- Only send to directly connected hosts.
-:keepalive BOOL    -- Send keep-alive messages on network stream.
-:linger BOOL or TIMEOUT -- Send queued messages before closing.
+         /* SO_REUSEADDR = 1 is default for server sockets; must specify
+            explicit :reuseaddr key to override this.  */
+#ifdef HAVE_LOCAL_SOCKETS
+         if (family != AF_LOCAL)
+#endif
+           if (!(optbits & (1 << OPIX_REUSEADDR)))
+             {
+               int optval = 1;
+               if (setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval))
+                 report_file_error ("Cannot set reuse option on server socket", Qnil);
+             }
+
+          /* If passed a socket descriptor, it should be already bound. */
+         if (socket_to_use < 0 && bind (s, sa, addrlen) != 0)
+           report_file_error ("Cannot bind server socket", Qnil);
+
+#ifdef HAVE_GETSOCKNAME
+         if (p->port == 0)
+           {
+             struct sockaddr_in sa1;
+             socklen_t len1 = sizeof (sa1);
+             if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
+               {
+                 Lisp_Object service;
+                 service = make_number (ntohs (sa1.sin_port));
+                 contact = Fplist_put (contact, QCservice, service);
+                 /* Save the port number so that we can stash it in
+                    the process object later.  */
+                 ((struct sockaddr_in *)sa)->sin_port = sa1.sin_port;
+               }
+           }
+#endif
+
+         if (p->socktype != SOCK_DGRAM && listen (s, p->backlog))
+           report_file_error ("Cannot listen on server socket", Qnil);
+
+         break;
+       }
+
+      immediate_quit = 1;
+      QUIT;
+
+      ret = connect (s, sa, addrlen);
+      xerrno = errno;
+
+      if (ret == 0 || xerrno == EISCONN)
+       {
+         /* The unwind-protect will be discarded afterwards.
+            Likewise for immediate_quit.  */
+         break;
+       }
+
+      if (p->is_non_blocking_client && xerrno == EINPROGRESS)
+       break;
+
+#ifndef WINDOWSNT
+      if (xerrno == EINTR)
+       {
+         /* Unlike most other syscalls connect() cannot be called
+            again.  (That would return EALREADY.)  The proper way to
+            wait for completion is pselect().  */
+         int sc;
+         socklen_t len;
+         fd_set fdset;
+       retry_select:
+         FD_ZERO (&fdset);
+         FD_SET (s, &fdset);
+         QUIT;
+         sc = pselect (s + 1, NULL, &fdset, NULL, NULL, NULL);
+         if (sc == -1)
+           {
+             if (errno == EINTR)
+               goto retry_select;
+             else
+               report_file_error ("Failed select", Qnil);
+           }
+         eassert (sc > 0);
+
+         len = sizeof xerrno;
+         eassert (FD_ISSET (s, &fdset));
+         if (getsockopt (s, SOL_SOCKET, SO_ERROR, &xerrno, &len) < 0)
+           report_file_error ("Failed getsockopt", Qnil);
+         if (xerrno)
+           report_file_errno ("Failed connect", Qnil, xerrno);
+         break;
+       }
+#endif /* !WINDOWSNT */
+
+      immediate_quit = 0;
+
+      /* Discard the unwind protect closing S.  */
+      specpdl_ptr = specpdl + count1;
+      emacs_close (s);
+      s = -1;
+
+#ifdef WINDOWSNT
+      if (xerrno == EINTR)
+       goto retry_connect;
+#endif
+    }
+
+  if (s >= 0)
+    {
+#ifdef DATAGRAM_SOCKETS
+      if (p->socktype == SOCK_DGRAM)
+       {
+         if (datagram_address[s].sa)
+           emacs_abort ();
+
+         datagram_address[s].sa = xmalloc (addrlen);
+         datagram_address[s].len = addrlen;
+         if (p->is_server)
+           {
+             Lisp_Object remote;
+             memset (datagram_address[s].sa, 0, addrlen);
+             if (remote = Fplist_get (contact, QCremote), !NILP (remote))
+               {
+                 int rfamily;
+                 ptrdiff_t rlen = get_lisp_to_sockaddr_size (remote, &rfamily);
+                 if (rlen != 0 && rfamily == family
+                     && rlen == addrlen)
+                   conv_lisp_to_sockaddr (rfamily, remote,
+                                          datagram_address[s].sa, rlen);
+               }
+           }
+         else
+           memcpy (datagram_address[s].sa, sa, addrlen);
+       }
+#endif
+
+      contact = Fplist_put (contact, p->is_server? QClocal: QCremote,
+                           conv_sockaddr_to_lisp (sa, addrlen));
+#ifdef HAVE_GETSOCKNAME
+      if (!p->is_server)
+       {
+         struct sockaddr_in sa1;
+         socklen_t len1 = sizeof (sa1);
+         if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
+           contact = Fplist_put (contact, QClocal,
+                                 conv_sockaddr_to_lisp ((struct sockaddr *)&sa1, len1));
+       }
+#endif
+    }
+
+  immediate_quit = 0;
+
+  if (s < 0)
+    {
+      /* If non-blocking got this far - and failed - assume non-blocking is
+        not supported after all.  This is probably a wrong assumption, but
+        the normal blocking calls to open-network-stream handles this error
+        better.  */
+      if (p->is_non_blocking_client)
+       return;
+
+      report_file_errno ((p->is_server
+                         ? "make server process failed"
+                         : "make client process failed"),
+                        contact, xerrno);
+    }
+
+  inch = s;
+  outch = s;
+
+  chan_process[inch] = proc;
+
+  fcntl (inch, F_SETFL, O_NONBLOCK);
+
+  p = XPROCESS (proc);
+  p->open_fd[SUBPROCESS_STDIN] = inch;
+  p->infd  = inch;
+  p->outfd = outch;
+
+  /* Discard the unwind protect for closing S, if any.  */
+  specpdl_ptr = specpdl + count1;
+
+  /* Unwind bind_polling_period and request_sigio.  */
+  unbind_to (count, Qnil);
+
+  if (p->is_server && p->socktype != SOCK_DGRAM)
+    pset_status (p, Qlisten);
+
+  /* Make the process marker point into the process buffer (if any).  */
+  if (BUFFERP (p->buffer))
+    set_marker_both (p->mark, p->buffer,
+                    BUF_ZV (XBUFFER (p->buffer)),
+                    BUF_ZV_BYTE (XBUFFER (p->buffer)));
+
+  if (p->is_non_blocking_client)
+    {
+      /* We may get here if connect did succeed immediately.  However,
+        in that case, we still need to signal this like a non-blocking
+        connection.  */
+      pset_status (p, Qconnect);
+      if (!FD_ISSET (inch, &connect_wait_mask))
+       {
+         FD_SET (inch, &connect_wait_mask);
+         FD_SET (inch, &write_mask);
+         num_pending_connects++;
+       }
+    }
+  else
+    /* A server may have a client filter setting of Qt, but it must
+       still listen for incoming connects unless it is stopped.  */
+    if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt))
+       || (EQ (p->status, Qlisten) && NILP (p->command)))
+      {
+       FD_SET (inch, &input_wait_mask);
+       FD_SET (inch, &non_keyboard_wait_mask);
+      }
+
+  if (inch > max_process_desc)
+    max_process_desc = inch;
+
+  /* Set up the masks based on the process filter. */
+  set_process_filter_masks (p);
+
+  setup_process_coding_systems (proc);
+
+#ifdef HAVE_GNUTLS
+  /* Continue the asynchronous connection. */
+  if (!NILP (p->gnutls_boot_parameters))
+    {
+      Lisp_Object boot, params = p->gnutls_boot_parameters;
+
+      boot = Fgnutls_boot (proc, XCAR (params), XCDR (params));
+      p->gnutls_boot_parameters = Qnil;
+
+      if (p->gnutls_initstage == GNUTLS_STAGE_READY)
+       /* Run sentinels, etc. */
+       finish_after_tls_connection (proc);
+      else if (p->gnutls_initstage != GNUTLS_STAGE_HANDSHAKE_TRIED)
+       {
+         deactivate_process (proc);
+         if (NILP (boot))
+           pset_status (p, list2 (Qfailed,
+                                  build_string ("TLS negotiation failed")));
+         else
+           pset_status (p, list2 (Qfailed, boot));
+       }
+    }
+#endif
+
+}
+
+/* Create a network stream/datagram client/server process.  Treated
+   exactly like a normal process when reading and writing.  Primary
+   differences are in status display and process deletion.  A network
+   connection has no PID; you cannot signal it.  All you can do is
+   stop/continue it and deactivate/close it via delete-process.  */
+
+DEFUN ("make-network-process", Fmake_network_process, Smake_network_process,
+       0, MANY, 0,
+       doc: /* Create and return a network server or client process.
+
+In Emacs, network connections are represented by process objects, so
+input and output work as for subprocesses and `delete-process' closes
+a network connection.  However, a network process has no process id,
+it cannot be signaled, and the status codes are different from normal
+processes.
+
+Arguments are specified as keyword/argument pairs.  The following
+arguments are defined:
+
+:name NAME -- NAME is name for process.  It is modified if necessary
+to make it unique.
+
+:buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
+with the process.  Process output goes at end of that buffer, unless
+you specify an output stream or filter function to handle the output.
+BUFFER may be also nil, meaning that this process is not associated
+with any buffer.
+
+:host HOST -- HOST is name of the host to connect to, or its IP
+address.  The symbol `local' specifies the local host.  If specified
+for a server process, it must be a valid name or address for the local
+host, and only clients connecting to that address will be accepted.
+
+:service SERVICE -- SERVICE is name of the service desired, or an
+integer specifying a port number to connect to.  If SERVICE is t,
+a random port number is selected for the server.  A port number can
+be specified as an integer string, e.g., "80", as well as an integer.
+
+:type TYPE -- TYPE is the type of connection.  The default (nil) is a
+stream type connection, `datagram' creates a datagram type connection,
+`seqpacket' creates a reliable datagram connection.
+
+:family FAMILY -- FAMILY is the address (and protocol) family for the
+service specified by HOST and SERVICE.  The default (nil) is to use
+whatever address family (IPv4 or IPv6) that is defined for the host
+and port number specified by HOST and SERVICE.  Other address families
+supported are:
+  local -- for a local (i.e. UNIX) address specified by SERVICE.
+  ipv4  -- use IPv4 address family only.
+  ipv6  -- use IPv6 address family only.
+
+:local ADDRESS -- ADDRESS is the local address used for the connection.
+This parameter is ignored when opening a client process. When specified
+for a server process, the FAMILY, HOST and SERVICE args are ignored.
+
+:remote ADDRESS -- ADDRESS is the remote partner's address for the
+connection.  This parameter is ignored when opening a stream server
+process.  For a datagram server process, it specifies the initial
+setting of the remote datagram address.  When specified for a client
+process, the FAMILY, HOST, and SERVICE args are ignored.
+
+The format of ADDRESS depends on the address family:
+- An IPv4 address is represented as an vector of integers [A B C D P]
+corresponding to numeric IP address A.B.C.D and port number P.
+- A local address is represented as a string with the address in the
+local address space.
+- An "unsupported family" address is represented by a cons (F . AV)
+where F is the family number and AV is a vector containing the socket
+address data with one element per address data byte.  Do not rely on
+this format in portable code, as it may depend on implementation
+defined constants, data sizes, and data structure alignment.
+
+:coding CODING -- If CODING is a symbol, it specifies the coding
+system used for both reading and writing for this process.  If CODING
+is a cons (DECODING . ENCODING), DECODING is used for reading, and
+ENCODING is used for writing.
+
+:nowait BOOL -- If NOWAIT is non-nil for a stream type client
+process, return without waiting for the connection to complete;
+instead, the sentinel function will be called with second arg matching
+"open" (if successful) or "failed" when the connect completes.
+Default is to use a blocking connect (i.e. wait) for stream type
+connections.
+
+:noquery BOOL -- Query the user unless BOOL is non-nil, and process is
+running when Emacs is exited.
+
+:stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
+In the stopped state, a server process does not accept new
+connections, and a client process does not handle incoming traffic.
+The stopped state is cleared by `continue-process' and set by
+`stop-process'.
+
+:filter FILTER -- Install FILTER as the process filter.
+
+:filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
+process filter are multibyte, otherwise they are unibyte.
+If this keyword is not specified, the strings are multibyte if
+the default value of `enable-multibyte-characters' is non-nil.
+
+:sentinel SENTINEL -- Install SENTINEL as the process sentinel.
+
+:log LOG -- Install LOG as the server process log function.  This
+function is called when the server accepts a network connection from a
+client.  The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
+is the server process, CLIENT is the new process for the connection,
+and MESSAGE is a string.
+
+:plist PLIST -- Install PLIST as the new process's initial plist.
+
+:tls-parameters LIST -- is a list that should be supplied if you're
+opening a TLS connection.  The first element is the TLS type (either
+`gnutls-x509pki' or `gnutls-anon'), and the remaining elements should
+be a keyword list accepted by gnutls-boot (as returned by
+`gnutls-boot-parameters').
+
+:server QLEN -- if QLEN is non-nil, create a server process for the
+specified FAMILY, SERVICE, and connection type (stream or datagram).
+If QLEN is an integer, it is used as the max. length of the server's
+pending connection queue (also known as the backlog); the default
+queue length is 5.  Default is to create a client process.
+
+The following network options can be specified for this connection:
+
+:broadcast BOOL    -- Allow send and receive of datagram broadcasts.
+:dontroute BOOL    -- Only send to directly connected hosts.
+:keepalive BOOL    -- Send keep-alive messages on network stream.
+:linger BOOL or TIMEOUT -- Send queued messages before closing.
 :oobinline BOOL    -- Place out-of-band data in receive data stream.
 :priority INT      -- Set protocol defined priority for sent packets.
 :reuseaddr BOOL    -- Allow reusing a recently used local address
                       (this is allowed by default for a server process).
 :bindtodevice NAME -- bind to interface NAME.  Using this may require
                       special privileges on some systems.
+:use-external-socket BOOL -- Use any pre-allocated sockets that have
+                             been passed to Emacs.  If Emacs wasn't
+                             passed a socket, this option is silently
+                             ignored.
+
 
 Consult the relevant system programmer's manual pages for more
 information on using these options.
@@ -3067,41 +3595,24 @@ usage: (make-network-process &rest ARGS)  */)
   Lisp_Object proc;
   Lisp_Object contact;
   struct Lisp_Process *p;
-#ifdef HAVE_GETADDRINFO
-  struct addrinfo ai, *res, *lres;
-  struct addrinfo hints;
   const char *portstring;
-  char portbuf[128];
-#else /* HAVE_GETADDRINFO */
-  struct _emacs_addrinfo
-  {
-    int ai_family;
-    int ai_socktype;
-    int ai_protocol;
-    int ai_addrlen;
-    struct sockaddr *ai_addr;
-    struct _emacs_addrinfo *ai_next;
-  } ai, *res, *lres;
-#endif /* HAVE_GETADDRINFO */
-  struct sockaddr_in address_in;
+  ptrdiff_t portstringlen ATTRIBUTE_UNUSED;
+  char portbuf[INT_BUFSIZE_BOUND (EMACS_INT)];
 #ifdef HAVE_LOCAL_SOCKETS
   struct sockaddr_un address_un;
 #endif
-  int port;
-  int ret = 0;
-  int xerrno = 0;
-  int s = -1, outch, inch;
-  ptrdiff_t count = SPECPDL_INDEX ();
-  ptrdiff_t count1;
-  Lisp_Object colon_address;  /* Either QClocal or QCremote.  */
+  EMACS_INT port = 0;
   Lisp_Object tem;
   Lisp_Object name, buffer, host, service, address;
-  Lisp_Object filter, sentinel;
-  bool is_non_blocking_client = 0;
-  bool is_server = 0;
-  int backlog = 5;
+  Lisp_Object filter, sentinel, use_external_socket_p;
+  Lisp_Object ip_addresses = Qnil;
   int socktype;
   int family = -1;
+  int ai_protocol = 0;
+#ifdef HAVE_GETADDRINFO_A
+  struct gaicb *dns_request = NULL;
+#endif
+  ptrdiff_t count = SPECPDL_INDEX ();
 
   if (nargs == 0)
     return Qnil;
@@ -3129,55 +3640,28 @@ usage: (make-network-process &rest ARGS)  */)
   else
     error ("Unsupported connection type");
 
-  /* :server BOOL */
-  tem = Fplist_get (contact, QCserver);
-  if (!NILP (tem))
-    {
-      /* Don't support network sockets when non-blocking mode is
-        not available, since a blocked Emacs is not useful.  */
-      is_server = 1;
-      if (TYPE_RANGED_INTEGERP (int, tem))
-       backlog = XINT (tem);
-    }
-
-  /* Make colon_address an alias for :local (server) or :remote (client).  */
-  colon_address = is_server ? QClocal : QCremote;
-
-  /* :nowait BOOL */
-  if (!is_server && socktype != SOCK_DGRAM
-      && (tem = Fplist_get (contact, QCnowait), !NILP (tem)))
-    {
-#ifndef NON_BLOCKING_CONNECT
-      error ("Non-blocking connect not supported");
-#else
-      is_non_blocking_client = 1;
-#endif
-    }
-
   name = Fplist_get (contact, QCname);
   buffer = Fplist_get (contact, QCbuffer);
   filter = Fplist_get (contact, QCfilter);
   sentinel = Fplist_get (contact, QCsentinel);
+  use_external_socket_p = Fplist_get (contact, QCuse_external_socket);
 
   CHECK_STRING (name);
 
-  /* Initialize addrinfo structure in case we don't use getaddrinfo.  */
-  ai.ai_socktype = socktype;
-  ai.ai_protocol = 0;
-  ai.ai_next = NULL;
-  res = &ai;
-
   /* :local ADDRESS or :remote ADDRESS */
-  address = Fplist_get (contact, colon_address);
+  tem = Fplist_get (contact, QCserver);
+  if (!NILP (tem))
+    address = Fplist_get (contact, QCremote);
+  else
+    address = Fplist_get (contact, QClocal);
   if (!NILP (address))
     {
       host = service = Qnil;
 
-      if (!(ai.ai_addrlen = get_lisp_to_sockaddr_size (address, &family)))
+      if (!get_lisp_to_sockaddr_size (address, &family))
        error ("Malformed :address");
-      ai.ai_family = family;
-      ai.ai_addr = alloca (ai.ai_addrlen);
-      conv_lisp_to_sockaddr (family, address, ai.ai_addr, ai.ai_addrlen);
+
+      ip_addresses = list1 (address);
       goto open_socket;
     }
 
@@ -3185,7 +3669,7 @@ usage: (make-network-process &rest ARGS)  */)
   tem = Fplist_get (contact, QCfamily);
   if (NILP (tem))
     {
-#if defined (HAVE_GETADDRINFO) && defined (AF_INET6)
+#ifdef AF_INET6
       family = AF_UNSPEC;
 #else
       family = AF_INET;
@@ -3206,14 +3690,21 @@ usage: (make-network-process &rest ARGS)  */)
   else
     error ("Unknown address family");
 
-  ai.ai_family = family;
-
   /* :service SERVICE -- string, integer (port number), or t (random port).  */
   service = Fplist_get (contact, QCservice);
 
   /* :host HOST -- hostname, ip address, or 'local for localhost.  */
   host = Fplist_get (contact, QChost);
-  if (!NILP (host))
+  if (NILP (host))
+    {
+      /* The "connection" function gets it bind info from the address we're
+        given, so use this dummy address if nothing is specified. */
+#ifdef HAVE_LOCAL_SOCKETS
+      if (family != AF_LOCAL)
+#endif
+       host = build_string ("127.0.0.1");
+    }
+  else
     {
       if (EQ (host, Qlocal))
        /* Depending on setup, "localhost" may map to different IPv4 and/or
@@ -3232,13 +3723,9 @@ usage: (make-network-process &rest ARGS)  */)
          host = Qnil;
        }
       CHECK_STRING (service);
-      memset (&address_un, 0, sizeof address_un);
-      address_un.sun_family = AF_LOCAL;
       if (sizeof address_un.sun_path <= SBYTES (service))
        error ("Service name too long");
-      lispstpcpy (address_un.sun_path, service);
-      ai.ai_addr = (struct sockaddr *) &address_un;
-      ai.ai_addrlen = sizeof address_un;
+      ip_addresses = list1 (service);
       goto open_socket;
     }
 #endif
@@ -3254,359 +3741,147 @@ usage: (make-network-process &rest ARGS)  */)
     }
 #endif
 
-#ifdef HAVE_GETADDRINFO
-  /* If we have a host, use getaddrinfo to resolve both host and service.
-     Otherwise, use getservbyname to lookup the service.  */
   if (!NILP (host))
     {
-
       /* SERVICE can either be a string or int.
         Convert to a C string for later use by getaddrinfo.  */
       if (EQ (service, Qt))
-       portstring = "0";
+       {
+         portstring = "0";
+         portstringlen = 1;
+       }
       else if (INTEGERP (service))
        {
-         sprintf (portbuf, "%"pI"d", XINT (service));
          portstring = portbuf;
+         portstringlen = sprintf (portbuf, "%"pI"d", XINT (service));
        }
       else
        {
          CHECK_STRING (service);
          portstring = SSDATA (service);
+         portstringlen = SBYTES (service);
        }
+    }
 
-      immediate_quit = 1;
-      QUIT;
-      memset (&hints, 0, sizeof (hints));
-      hints.ai_flags = 0;
-      hints.ai_family = family;
-      hints.ai_socktype = socktype;
-      hints.ai_protocol = 0;
-
-#ifdef HAVE_RES_INIT
-      res_init ();
-#endif
-
-      ret = getaddrinfo (SSDATA (host), portstring, &hints, &res);
+#ifdef HAVE_GETADDRINFO_A
+  if (!NILP (host) && !NILP (Fplist_get (contact, QCnowait)))
+    {
+      ptrdiff_t hostlen = SBYTES (host);
+      struct req
+      {
+       struct gaicb gaicb;
+       struct addrinfo hints;
+       char str[FLEXIBLE_ARRAY_MEMBER];
+      } *req = xmalloc (offsetof (struct req, str)
+                       + hostlen + 1 + portstringlen + 1);
+      dns_request = &req->gaicb;
+      dns_request->ar_name = req->str;
+      dns_request->ar_service = req->str + hostlen + 1;
+      dns_request->ar_request = &req->hints;
+      dns_request->ar_result = NULL;
+      memset (&req->hints, 0, sizeof req->hints);
+      req->hints.ai_family = family;
+      req->hints.ai_socktype = socktype;
+      strcpy (req->str, SSDATA (host));
+      strcpy (req->str + hostlen + 1, portstring);
+
+      int ret = getaddrinfo_a (GAI_NOWAIT, &dns_request, 1, NULL);
       if (ret)
-#ifdef HAVE_GAI_STRERROR
-       error ("%s/%s %s", SSDATA (host), portstring, gai_strerror (ret));
-#else
-       error ("%s/%s getaddrinfo error %d", SSDATA (host), portstring, ret);
-#endif
-      immediate_quit = 0;
+       error ("%s/%s getaddrinfo_a error %d", SSDATA (host), portstring, ret);
 
       goto open_socket;
     }
-#endif /* HAVE_GETADDRINFO */
-
-  /* We end up here if getaddrinfo is not defined, or in case no hostname
-     has been specified (e.g. for a local server process).  */
-
-  if (EQ (service, Qt))
-    port = 0;
-  else if (INTEGERP (service))
-    port = htons ((unsigned short) XINT (service));
-  else
-    {
-      struct servent *svc_info;
-      CHECK_STRING (service);
-      svc_info = getservbyname (SSDATA (service),
-                               (socktype == SOCK_DGRAM ? "udp" : "tcp"));
-      if (svc_info == 0)
-       error ("Unknown service: %s", SDATA (service));
-      port = svc_info->s_port;
-    }
+#endif /* HAVE_GETADDRINFO_A */
 
-  memset (&address_in, 0, sizeof address_in);
-  address_in.sin_family = family;
-  address_in.sin_addr.s_addr = INADDR_ANY;
-  address_in.sin_port = port;
+  /* If we have a host, use getaddrinfo to resolve both host and service.
+     Otherwise, use getservbyname to lookup the service.  */
 
-#ifndef HAVE_GETADDRINFO
   if (!NILP (host))
     {
-      struct hostent *host_info_ptr;
-
-      /* gethostbyname may fail with TRY_AGAIN, but we don't honor that,
-        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;
-
-      if (host_info_ptr)
-       {
-         memcpy (&address_in.sin_addr, host_info_ptr->h_addr,
-                 host_info_ptr->h_length);
-         family = host_info_ptr->h_addrtype;
-         address_in.sin_family = family;
-       }
-      else
-       /* Attempt to interpret host as numeric inet address.  */
-       {
-         unsigned long numeric_addr;
-         numeric_addr = inet_addr (SSDATA (host));
-         if (numeric_addr == -1)
-           error ("Unknown host \"%s\"", SDATA (host));
-
-         memcpy (&address_in.sin_addr, &numeric_addr,
-                 sizeof (address_in.sin_addr));
-       }
-
-    }
-#endif /* not HAVE_GETADDRINFO */
-
-  ai.ai_family = family;
-  ai.ai_addr = (struct sockaddr *) &address_in;
-  ai.ai_addrlen = sizeof address_in;
-
- open_socket:
-
-  /* Do this in case we never enter the for-loop below.  */
-  count1 = SPECPDL_INDEX ();
-  s = -1;
-
-  for (lres = res; lres; lres = lres->ai_next)
-    {
-      ptrdiff_t optn;
-      int optbits;
-
-#ifdef WINDOWSNT
-    retry_connect:
-#endif
-
-      s = socket (lres->ai_family, lres->ai_socktype | SOCK_CLOEXEC,
-                 lres->ai_protocol);
-      if (s < 0)
-       {
-         xerrno = errno;
-         continue;
-       }
-
-#ifdef DATAGRAM_SOCKETS
-      if (!is_server && socktype == SOCK_DGRAM)
-       break;
-#endif /* DATAGRAM_SOCKETS */
-
-#ifdef NON_BLOCKING_CONNECT
-      if (is_non_blocking_client)
-       {
-         ret = fcntl (s, F_SETFL, O_NONBLOCK);
-         if (ret < 0)
-           {
-             xerrno = errno;
-             emacs_close (s);
-             s = -1;
-             continue;
-           }
-       }
-#endif
-
-      /* Make us close S if quit.  */
-      record_unwind_protect_int (close_file_unwind, s);
-
-      /* Parse network options in the arg list.
-        We simply ignore anything which isn't a known option (including other keywords).
-        An error is signaled if setting a known option fails.  */
-      for (optn = optbits = 0; optn < nargs - 1; optn += 2)
-       optbits |= set_socket_option (s, args[optn], args[optn + 1]);
-
-      if (is_server)
-       {
-         /* Configure as a server socket.  */
-
-         /* SO_REUSEADDR = 1 is default for server sockets; must specify
-            explicit :reuseaddr key to override this.  */
-#ifdef HAVE_LOCAL_SOCKETS
-         if (family != AF_LOCAL)
-#endif
-           if (!(optbits & (1 << OPIX_REUSEADDR)))
-             {
-               int optval = 1;
-               if (setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval))
-                 report_file_error ("Cannot set reuse option on server socket", Qnil);
-             }
-
-         if (bind (s, lres->ai_addr, lres->ai_addrlen))
-           report_file_error ("Cannot bind server socket", Qnil);
-
-#ifdef HAVE_GETSOCKNAME
-         if (EQ (service, Qt))
-           {
-             struct sockaddr_in sa1;
-             socklen_t len1 = sizeof (sa1);
-             if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
-               {
-                 ((struct sockaddr_in *)(lres->ai_addr))->sin_port = sa1.sin_port;
-                 service = make_number (ntohs (sa1.sin_port));
-                 contact = Fplist_put (contact, QCservice, service);
-               }
-           }
-#endif
-
-         if (socktype != SOCK_DGRAM && listen (s, backlog))
-           report_file_error ("Cannot listen on server socket", Qnil);
-
-         break;
-       }
+      struct addrinfo *res, *lres;
+      int ret;
 
       immediate_quit = 1;
       QUIT;
 
-      ret = connect (s, lres->ai_addr, lres->ai_addrlen);
-      xerrno = errno;
+      struct addrinfo hints;
+      memset (&hints, 0, sizeof hints);
+      hints.ai_family = family;
+      hints.ai_socktype = socktype;
 
-      if (ret == 0 || xerrno == EISCONN)
+      ret = getaddrinfo (SSDATA (host), portstring, &hints, &res);
+      if (ret)
+#ifdef HAVE_GAI_STRERROR
        {
-         /* The unwind-protect will be discarded afterwards.
-            Likewise for immediate_quit.  */
-         break;
+         synchronize_system_messages_locale ();
+         char const *str = gai_strerror (ret);
+         if (! NILP (Vlocale_coding_system))
+           str = SSDATA (code_convert_string_norecord
+                         (build_string (str), Vlocale_coding_system, 0));
+         error ("%s/%s %s", SSDATA (host), portstring, str);
        }
-
-#ifdef NON_BLOCKING_CONNECT
-#ifdef EINPROGRESS
-      if (is_non_blocking_client && xerrno == EINPROGRESS)
-       break;
 #else
-#ifdef EWOULDBLOCK
-      if (is_non_blocking_client && xerrno == EWOULDBLOCK)
-       break;
-#endif
-#endif
+       error ("%s/%s getaddrinfo error %d", SSDATA (host), portstring, ret);
 #endif
+      immediate_quit = 0;
 
-#ifndef WINDOWSNT
-      if (xerrno == EINTR)
+      for (lres = res; lres; lres = lres->ai_next)
        {
-         /* Unlike most other syscalls connect() cannot be called
-            again.  (That would return EALREADY.)  The proper way to
-            wait for completion is pselect().  */
-         int sc;
-         socklen_t len;
-         fd_set fdset;
-       retry_select:
-         FD_ZERO (&fdset);
-         FD_SET (s, &fdset);
-         QUIT;
-         sc = pselect (s + 1, NULL, &fdset, NULL, NULL, NULL);
-         if (sc == -1)
-           {
-             if (errno == EINTR)
-               goto retry_select;
-             else
-               report_file_error ("Failed select", Qnil);
-           }
-         eassert (sc > 0);
-
-         len = sizeof xerrno;
-         eassert (FD_ISSET (s, &fdset));
-         if (getsockopt (s, SOL_SOCKET, SO_ERROR, &xerrno, &len) < 0)
-           report_file_error ("Failed getsockopt", Qnil);
-         if (xerrno)
-           report_file_errno ("Failed connect", Qnil, xerrno);
-         break;
+         ip_addresses = Fcons (conv_sockaddr_to_lisp
+                               (lres->ai_addr, lres->ai_addrlen),
+                               ip_addresses);
+         ai_protocol = lres->ai_protocol;
        }
-#endif /* !WINDOWSNT */
 
-      immediate_quit = 0;
+      ip_addresses = Fnreverse (ip_addresses);
 
-      /* Discard the unwind protect closing S.  */
-      specpdl_ptr = specpdl + count1;
-      emacs_close (s);
-      s = -1;
+      freeaddrinfo (res);
 
-#ifdef WINDOWSNT
-      if (xerrno == EINTR)
-       goto retry_connect;
-#endif
+      goto open_socket;
     }
 
-  if (s >= 0)
+  /* No hostname has been specified (e.g., a local server process).  */
+
+  if (EQ (service, Qt))
+    port = 0;
+  else if (INTEGERP (service))
+    port = XINT (service);
+  else
     {
-#ifdef DATAGRAM_SOCKETS
-      if (socktype == SOCK_DGRAM)
+      CHECK_STRING (service);
+
+      port = -1;
+      if (SBYTES (service) != 0)
        {
-         if (datagram_address[s].sa)
-           emacs_abort ();
-         datagram_address[s].sa = xmalloc (lres->ai_addrlen);
-         datagram_address[s].len = lres->ai_addrlen;
-         if (is_server)
+         /* Allow the service to be a string containing the port number,
+            because that's allowed if you have getaddrbyname.  */
+         char *service_end;
+         long int lport = strtol (SSDATA (service), &service_end, 10);
+         if (service_end == SSDATA (service) + SBYTES (service))
+           port = lport;
+         else
            {
-             Lisp_Object remote;
-             memset (datagram_address[s].sa, 0, lres->ai_addrlen);
-             if (remote = Fplist_get (contact, QCremote), !NILP (remote))
-               {
-                 int rfamily, rlen;
-                 rlen = get_lisp_to_sockaddr_size (remote, &rfamily);
-                 if (rlen != 0 && rfamily == lres->ai_family
-                     && rlen == lres->ai_addrlen)
-                   conv_lisp_to_sockaddr (rfamily, remote,
-                                          datagram_address[s].sa, rlen);
-               }
+             struct servent *svc_info
+               = getservbyname (SSDATA (service),
+                                socktype == SOCK_DGRAM ? "udp" : "tcp");
+             if (svc_info)
+               port = ntohs (svc_info->s_port);
            }
-         else
-           memcpy (datagram_address[s].sa, lres->ai_addr, lres->ai_addrlen);
-       }
-#endif
-      contact = Fplist_put (contact, colon_address,
-                           conv_sockaddr_to_lisp (lres->ai_addr, lres->ai_addrlen));
-#ifdef HAVE_GETSOCKNAME
-      if (!is_server)
-       {
-         struct sockaddr_in sa1;
-         socklen_t len1 = sizeof (sa1);
-         if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
-           contact = Fplist_put (contact, QClocal,
-                                 conv_sockaddr_to_lisp ((struct sockaddr *)&sa1, len1));
        }
-#endif
-    }
-
-  immediate_quit = 0;
-
-#ifdef HAVE_GETADDRINFO
-  if (res != &ai)
-    {
-      block_input ();
-      freeaddrinfo (res);
-      unblock_input ();
     }
-#endif
-
-  if (s < 0)
-    {
-      /* If non-blocking got this far - and failed - assume non-blocking is
-        not supported after all.  This is probably a wrong assumption, but
-        the normal blocking calls to open-network-stream handles this error
-        better.  */
-      if (is_non_blocking_client)
-         return Qnil;
 
-      report_file_errno ((is_server
-                         ? "make server process failed"
-                         : "make client process failed"),
-                        contact, xerrno);
+  if (! (0 <= port && port < 1 << 16))
+    {
+      AUTO_STRING (unknown_service, "Unknown service: %s");
+      xsignal1 (Qerror, CALLN (Fformat, unknown_service, service));
     }
 
-  inch = s;
-  outch = s;
+ open_socket:
 
   if (!NILP (buffer))
     buffer = Fget_buffer_create (buffer);
   proc = make_process (name);
-
-  chan_process[inch] = proc;
-
-  fcntl (inch, F_SETFL, O_NONBLOCK);
-
   p = XPROCESS (proc);
-
   pset_childp (p, contact);
   pset_plist (p, Fcopy_sequence (Fplist_get (contact, QCplist)));
   pset_type (p, Qnetwork);
@@ -3620,135 +3895,53 @@ usage: (make-network-process &rest ARGS)  */)
   if ((tem = Fplist_get (contact, QCstop), !NILP (tem)))
     pset_command (p, Qt);
   p->pid = 0;
+  p->backlog = 5;
+  p->is_non_blocking_client = false;
+  p->is_server = false;
+  p->port = port;
+  p->socktype = socktype;
+  p->ai_protocol = ai_protocol;
+#ifdef HAVE_GETADDRINFO_A
+  p->dns_request = NULL;
+#endif
+#ifdef HAVE_GNUTLS
+  tem = Fplist_get (contact, QCtls_parameters);
+  CHECK_LIST (tem);
+  p->gnutls_boot_parameters = tem;
+#endif
 
-  p->open_fd[SUBPROCESS_STDIN] = inch;
-  p->infd  = inch;
-  p->outfd = outch;
-
-  /* Discard the unwind protect for closing S, if any.  */
-  specpdl_ptr = specpdl + count1;
+  set_network_socket_coding_system (proc, service, host, name);
 
-  /* Unwind bind_polling_period and request_sigio.  */
   unbind_to (count, Qnil);
 
-  if (is_server && socktype != SOCK_DGRAM)
-    pset_status (p, Qlisten);
-
-  /* Make the process marker point into the process buffer (if any).  */
-  if (BUFFERP (buffer))
-    set_marker_both (p->mark, buffer,
-                    BUF_ZV (XBUFFER (buffer)),
-                    BUF_ZV_BYTE (XBUFFER (buffer)));
+  /* :server BOOL */
+  tem = Fplist_get (contact, QCserver);
+  if (!NILP (tem))
+    {
+      /* Don't support network sockets when non-blocking mode is
+        not available, since a blocked Emacs is not useful.  */
+      p->is_server = true;
+      if (TYPE_RANGED_INTEGERP (int, tem))
+       p->backlog = XINT (tem);
+    }
 
-#ifdef NON_BLOCKING_CONNECT
-  if (is_non_blocking_client)
+  /* :nowait BOOL */
+  if (!p->is_server && socktype != SOCK_DGRAM
+      && !NILP (Fplist_get (contact, QCnowait)))
+    p->is_non_blocking_client = true;
+
+#ifdef HAVE_GETADDRINFO_A
+  /* With async address resolution, the list of addresses is empty, so
+     postpone connecting to the server. */
+  if (!p->is_server && NILP (ip_addresses))
     {
-      /* We may get here if connect did succeed immediately.  However,
-        in that case, we still need to signal this like a non-blocking
-        connection.  */
-      pset_status (p, Qconnect);
-      if (!FD_ISSET (inch, &connect_wait_mask))
-       {
-         FD_SET (inch, &connect_wait_mask);
-         FD_SET (inch, &write_mask);
-         num_pending_connects++;
-       }
+      p->dns_request = dns_request;
+      p->status = Qconnect;
+      return proc;
     }
-  else
 #endif
-    /* A server may have a client filter setting of Qt, but it must
-       still listen for incoming connects unless it is stopped.  */
-    if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt))
-       || (EQ (p->status, Qlisten) && NILP (p->command)))
-      {
-       FD_SET (inch, &input_wait_mask);
-       FD_SET (inch, &non_keyboard_wait_mask);
-      }
-
-  if (inch > max_process_desc)
-    max_process_desc = inch;
-
-  tem = Fplist_member (contact, QCcoding);
-  if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem))))
-    tem = Qnil;  /* No error message (too late!).  */
-
-  {
-    /* Setup coding systems for communicating with the network stream.  */
-    /* Qt denotes we have not yet called Ffind_operation_coding_system.  */
-    Lisp_Object coding_systems = Qt;
-    Lisp_Object val;
-
-    if (!NILP (tem))
-      {
-       val = XCAR (XCDR (tem));
-       if (CONSP (val))
-         val = XCAR (val);
-      }
-    else if (!NILP (Vcoding_system_for_read))
-      val = Vcoding_system_for_read;
-    else if ((!NILP (buffer) && NILP (BVAR (XBUFFER (buffer), enable_multibyte_characters)))
-            || (NILP (buffer) && NILP (BVAR (&buffer_defaults, enable_multibyte_characters))))
-      /* We dare not decode end-of-line format by setting VAL to
-        Qraw_text, because the existing Emacs Lisp libraries
-        assume that they receive bare code including a sequence of
-        CR LF.  */
-      val = Qnil;
-    else
-      {
-       if (NILP (host) || NILP (service))
-         coding_systems = Qnil;
-       else
-         coding_systems = CALLN (Ffind_operation_coding_system,
-                                 Qopen_network_stream, name, buffer,
-                                 host, service);
-       if (CONSP (coding_systems))
-         val = XCAR (coding_systems);
-       else if (CONSP (Vdefault_process_coding_system))
-         val = XCAR (Vdefault_process_coding_system);
-       else
-         val = Qnil;
-      }
-    pset_decode_coding_system (p, val);
-
-    if (!NILP (tem))
-      {
-       val = XCAR (XCDR (tem));
-       if (CONSP (val))
-         val = XCDR (val);
-      }
-    else if (!NILP (Vcoding_system_for_write))
-      val = Vcoding_system_for_write;
-    else if (NILP (BVAR (current_buffer, enable_multibyte_characters)))
-      val = Qnil;
-    else
-      {
-       if (EQ (coding_systems, Qt))
-         {
-           if (NILP (host) || NILP (service))
-             coding_systems = Qnil;
-           else
-             coding_systems = CALLN (Ffind_operation_coding_system,
-                                     Qopen_network_stream, name, buffer,
-                                     host, service);
-         }
-       if (CONSP (coding_systems))
-         val = XCDR (coding_systems);
-       else if (CONSP (Vdefault_process_coding_system))
-         val = XCDR (Vdefault_process_coding_system);
-       else
-         val = Qnil;
-      }
-    pset_encode_coding_system (p, val);
-  }
-  setup_process_coding_systems (proc);
-
-  pset_decoding_buf (p, empty_unibyte_string);
-  p->decoding_carryover = 0;
-  pset_encoding_buf (p, empty_unibyte_string);
-
-  p->inherit_coding_system_flag
-    = !(!NILP (tem) || NILP (buffer) || !inherit_process_coding_system);
 
+  connect_network_socket (proc, ip_addresses, use_external_socket_p);
   return proc;
 }
 
@@ -4128,7 +4321,6 @@ deactivate_process (Lisp_Object proc)
       chan_process[inchannel] = Qnil;
       FD_CLR (inchannel, &input_wait_mask);
       FD_CLR (inchannel, &non_keyboard_wait_mask);
-#ifdef NON_BLOCKING_CONNECT
       if (FD_ISSET (inchannel, &connect_wait_mask))
        {
          FD_CLR (inchannel, &connect_wait_mask);
@@ -4136,7 +4328,6 @@ deactivate_process (Lisp_Object proc)
          if (--num_pending_connects < 0)
            emacs_abort ();
        }
-#endif
       if (inchannel == max_process_desc)
        {
          /* We just closed the highest-numbered process input descriptor,
@@ -4440,6 +4631,91 @@ server_accept_connection (Lisp_Object server, int channel)
   exec_sentinel (proc, concat3 (open_from, host_string, nl));
 }
 
+#ifdef HAVE_GETADDRINFO_A
+static Lisp_Object
+check_for_dns (Lisp_Object proc)
+{
+  struct Lisp_Process *p = XPROCESS (proc);
+  Lisp_Object ip_addresses = Qnil;
+
+  /* Sanity check. */
+  if (! p->dns_request)
+    return Qnil;
+
+  int ret = gai_error (p->dns_request);
+  if (ret == EAI_INPROGRESS)
+    return Qt;
+
+  /* We got a response. */
+  if (ret == 0)
+    {
+      struct addrinfo *res;
+
+      for (res = p->dns_request->ar_result; res; res = res->ai_next)
+       {
+         ip_addresses = Fcons (conv_sockaddr_to_lisp
+                               (res->ai_addr, res->ai_addrlen),
+                               ip_addresses);
+       }
+
+      ip_addresses = Fnreverse (ip_addresses);
+    }
+  /* The DNS lookup failed. */
+  else if (EQ (p->status, Qconnect))
+    {
+      deactivate_process (proc);
+      pset_status (p, (list2
+                      (Qfailed,
+                       concat3 (build_string ("Name lookup of "),
+                                build_string (p->dns_request->ar_name),
+                                build_string (" failed")))));
+    }
+
+  free_dns_request (proc);
+
+  /* This process should not already be connected (or killed). */
+  if (!EQ (p->status, Qconnect))
+    return Qnil;
+
+  return ip_addresses;
+}
+
+#endif /* HAVE_GETADDRINFO_A */
+
+static void
+wait_for_socket_fds (Lisp_Object process, char const *name)
+{
+  while (XPROCESS (process)->infd < 0
+        && EQ (XPROCESS (process)->status, Qconnect))
+    {
+      add_to_log ("Waiting for socket from %s...", build_string (name));
+      wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0);
+    }
+}
+
+static void
+wait_while_connecting (Lisp_Object process)
+{
+  while (EQ (XPROCESS (process)->status, Qconnect))
+    {
+      add_to_log ("Waiting for connection...");
+      wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0);
+    }
+}
+
+static void
+wait_for_tls_negotiation (Lisp_Object process)
+{
+#ifdef HAVE_GNUTLS
+  while (XPROCESS (process)->gnutls_p
+        && XPROCESS (process)->gnutls_initstage != GNUTLS_STAGE_READY)
+    {
+      add_to_log ("Waiting for TLS...");
+      wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0);
+    }
+#endif
+}
+
 /* This variable is different from waiting_for_input in keyboard.c.
    It is used to communicate to a lisp process-filter/sentinel (via the
    function Fwaiting_for_user_input_p below) whether Emacs was waiting
@@ -4518,6 +4794,9 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
   struct timespec got_output_end_time = invalid_timespec ();
   enum { MINIMUM = -1, TIMEOUT, INFINITY } wait;
   int got_some_output = -1;
+#if defined HAVE_GETADDRINFO_A || defined HAVE_GNUTLS
+  bool retry_for_async;
+#endif
   ptrdiff_t count = SPECPDL_INDEX ();
 
   /* Close to the current time if known, an invalid timespec otherwise.  */
@@ -4565,6 +4844,60 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
       if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
        break;
 
+#if defined HAVE_GETADDRINFO_A || defined HAVE_GNUTLS
+      {
+       Lisp_Object process_list_head, aproc;
+       struct Lisp_Process *p;
+
+       retry_for_async = false;
+       FOR_EACH_PROCESS(process_list_head, aproc)
+         {
+           p = XPROCESS (aproc);
+
+           if (! wait_proc || p == wait_proc)
+             {
+#ifdef HAVE_GETADDRINFO_A
+               /* Check for pending DNS requests. */
+               if (p->dns_request)
+                 {
+                   Lisp_Object ip_addresses = check_for_dns (aproc);
+                   if (!NILP (ip_addresses) && !EQ (ip_addresses, Qt))
+                     connect_network_socket (aproc, ip_addresses, Qnil);
+                   else
+                     retry_for_async = true;
+                 }
+#endif
+#ifdef HAVE_GNUTLS
+               /* Continue TLS negotiation. */
+               if (p->gnutls_initstage == GNUTLS_STAGE_HANDSHAKE_TRIED
+                   && p->is_non_blocking_client)
+                 {
+                   gnutls_try_handshake (p);
+                   p->gnutls_handshakes_tried++;
+
+                   if (p->gnutls_initstage == GNUTLS_STAGE_READY)
+                     {
+                       gnutls_verify_boot (aproc, Qnil);
+                       finish_after_tls_connection (aproc);
+                     }
+                   else
+                     {
+                       retry_for_async = true;
+                       if (p->gnutls_handshakes_tried
+                           > GNUTLS_EMACS_HANDSHAKES_LIMIT)
+                         {
+                           deactivate_process (aproc);
+                           pset_status (p, list2 (Qfailed,
+                                                  build_string ("TLS negotiation failed")));
+                         }
+                     }
+                 }
+#endif
+             }
+         }
+      }
+#endif /* GETADDRINFO_A or GNUTLS */
+
       /* Compute time from now till when time limit is up.  */
       /* Exit if already run out.  */
       if (wait == TIMEOUT)
@@ -4647,11 +4980,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
          timeout = make_timespec (0, 0);
          if ((pselect (max (max_process_desc, max_input_desc) + 1,
                        &Atemp,
-#ifdef NON_BLOCKING_CONNECT
                        (num_pending_connects > 0 ? &Ctemp : NULL),
-#else
-                       NULL,
-#endif
                        NULL, &timeout, NULL)
               <= 0))
            {
@@ -4823,6 +5152,15 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
          if (timeout.tv_sec > 0 || timeout.tv_nsec > 0)
            now = invalid_timespec ();
 
+#if defined HAVE_GETADDRINFO_A || defined HAVE_GNUTLS
+         if (retry_for_async
+             && (timeout.tv_sec > 0 || timeout.tv_nsec > ASYNC_RETRY_NSEC))
+           {
+             timeout.tv_sec = 0;
+             timeout.tv_nsec = ASYNC_RETRY_NSEC;
+           }
+#endif
+
 #if defined (HAVE_NS)
           nfds = ns_select
 #elif defined (HAVE_GLIB)
@@ -5134,7 +5472,6 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
                                 list2 (Qexit, make_number (256)));
                }
            }
-#ifdef NON_BLOCKING_CONNECT
          if (FD_ISSET (channel, &Writeok)
              && FD_ISSET (channel, &connect_wait_mask))
            {
@@ -5184,11 +5521,21 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
                }
              else
                {
-                 pset_status (p, Qrun);
-                 /* Execute the sentinel here.  If we had relied on
-                    status_notify to do it later, it will read input
-                    from the process before calling the sentinel.  */
-                 exec_sentinel (proc, build_string ("open\n"));
+#ifdef HAVE_GNUTLS
+                 /* If we have an incompletely set up TLS connection,
+                    then defer the sentinel signaling until
+                    later. */
+                 if (NILP (p->gnutls_boot_parameters)
+                     && !p->gnutls_p)
+#endif
+                   {
+                     pset_status (p, Qrun);
+                     /* Execute the sentinel here.  If we had relied on
+                        status_notify to do it later, it will read input
+                        from the process before calling the sentinel.  */
+                     exec_sentinel (proc, build_string ("open\n"));
+                   }
+
                  if (0 <= p->infd && !EQ (p->filter, Qt)
                      && !EQ (p->command, Qt))
                    {
@@ -5197,7 +5544,6 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
                    }
                }
            }
-#endif /* NON_BLOCKING_CONNECT */
        }                       /* End for each file descriptor.  */
     }                          /* End while exit conditions not met.  */
 
@@ -5645,6 +5991,12 @@ send_process (Lisp_Object proc, const char *buf, ptrdiff_t len,
   ssize_t rv;
   struct coding_system *coding;
 
+  if (NETCONN_P (proc))
+    {
+      wait_while_connecting (proc);
+      wait_for_tls_negotiation (proc);
+    }
+
   if (p->raw_status_new)
     update_status (p);
   if (! EQ (p->status, Qrun))
@@ -5862,7 +6214,10 @@ nil, indicating the current buffer's process.
 Called from program, takes three arguments, PROCESS, START and END.
 If the region is more than 500 characters long,
 it is sent in several bunches.  This may happen even for shorter regions.
-Output from processes can arrive in between bunches.  */)
+Output from processes can arrive in between bunches.
+
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed.  */)
   (Lisp_Object process, Lisp_Object start, Lisp_Object end)
 {
   Lisp_Object proc = get_process (process);
@@ -5876,6 +6231,9 @@ Output from processes can arrive in between bunches.  */)
   if (XINT (start) < GPT && XINT (end) > GPT)
     move_gap_both (XINT (start), start_byte);
 
+  if (NETCONN_P (proc))
+    wait_while_connecting (proc);
+
   send_process (proc, (char *) BYTE_POS_ADDR (start_byte),
                end_byte - start_byte, Fcurrent_buffer ());
 
@@ -5889,12 +6247,14 @@ PROCESS may be a process, a buffer, the name of a process or buffer, or
 nil, indicating the current buffer's process.
 If STRING is more than 500 characters long,
 it is sent in several bunches.  This may happen even for shorter strings.
-Output from processes can arrive in between bunches.  */)
+Output from processes can arrive in between bunches.
+
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed.  */)
   (Lisp_Object process, Lisp_Object string)
 {
-  Lisp_Object proc;
   CHECK_STRING (string);
-  proc = get_process (process);
+  Lisp_Object proc = get_process (process);
   send_process (proc, SSDATA (string),
                SBYTES (string), string);
   return Qnil;
@@ -5936,12 +6296,8 @@ process group.  */)
 {
   /* Initialize in case ioctl doesn't exist or gives an error,
      in a way that will cause returning t.  */
-  pid_t gid;
-  Lisp_Object proc;
-  struct Lisp_Process *p;
-
-  proc = get_process (process);
-  p = XPROCESS (proc);
+  Lisp_Object proc = get_process (process);
+  struct Lisp_Process *p = XPROCESS (proc);
 
   if (!EQ (p->type, Qreal))
     error ("Process %s is not a subprocess",
@@ -5950,7 +6306,7 @@ process group.  */)
     error ("Process %s is not active",
           SDATA (p->name));
 
-  gid = emacs_get_tty_pgrp (p);
+  pid_t gid = emacs_get_tty_pgrp (p);
 
   if (gid == p->pid)
     return Qnil;
@@ -6021,7 +6377,7 @@ process_send_signal (Lisp_Object process, int signo, Lisp_Object current_group,
          break;
 
        case SIGTSTP:
-#if defined (VSWTCH) && !defined (PREFER_VSUSP)
+#ifdef VSWTCH
          sig_char = &t.c_cc[VSWTCH];
 #else
          sig_char = &t.c_cc[VSUSP];
@@ -6309,10 +6665,15 @@ process has been transmitted to the serial port.  */)
   struct coding_system *coding = NULL;
   int outfd;
 
-  if (DATAGRAM_CONN_P (process))
+  proc = get_process (process);
+
+  if (NETCONN_P (proc))
+    wait_while_connecting (proc);
+
+  if (DATAGRAM_CONN_P (proc))
     return process;
 
-  proc = get_process (process);
+
   outfd = XPROCESS (proc)->outfd;
   if (outfd >= 0)
     coding = proc_encode_coding_system[outfd];
@@ -6757,22 +7118,24 @@ DEFUN ("set-process-coding-system", Fset_process_coding_system,
        Sset_process_coding_system, 1, 3, 0,
        doc: /* Set coding systems of PROCESS to DECODING and ENCODING.
 DECODING will be used to decode subprocess output and ENCODING to
-encode subprocess input.  */)
-  (register Lisp_Object process, Lisp_Object decoding, Lisp_Object encoding)
+encode subprocess input. */)
+  (Lisp_Object process, Lisp_Object decoding, Lisp_Object encoding)
 {
-  register struct Lisp_Process *p;
-
   CHECK_PROCESS (process);
-  p = XPROCESS (process);
-  if (p->infd < 0)
-    error ("Input file descriptor of %s closed", SDATA (p->name));
-  if (p->outfd < 0)
-    error ("Output file descriptor of %s closed", SDATA (p->name));
+
+  struct Lisp_Process *p = XPROCESS (process);
+
   Fcheck_coding_system (decoding);
   Fcheck_coding_system (encoding);
   encoding = coding_inherit_eol_type (encoding, Qnil);
   pset_decode_coding_system (p, decoding);
   pset_encode_coding_system (p, encoding);
+
+  /* If the sockets haven't been set up yet, the final setup part of
+     this will be called asynchronously. */
+  if (p->infd < 0 || p->outfd < 0)
+    return Qnil;
+
   setup_process_coding_systems (process);
 
   return Qnil;
@@ -6797,13 +7160,18 @@ all character code conversion except for end-of-line conversion is
 suppressed.  */)
   (Lisp_Object process, Lisp_Object flag)
 {
-  register struct Lisp_Process *p;
-
   CHECK_PROCESS (process);
-  p = XPROCESS (process);
+
+  struct Lisp_Process *p = XPROCESS (process);
   if (NILP (flag))
     pset_decode_coding_system
       (p, raw_text_coding_system (p->decode_coding_system));
+
+  /* If the sockets haven't been set up yet, the final setup part of
+     this will be called asynchronously. */
+  if (p->infd < 0 || p->outfd < 0)
+    return Qnil;
+
   setup_process_coding_systems (process);
 
   return Qnil;
@@ -6814,14 +7182,11 @@ DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p,
        doc: /* Return t if a multibyte string is given to PROCESS's filter.*/)
   (Lisp_Object process)
 {
-  register struct Lisp_Process *p;
-  struct coding_system *coding;
-
   CHECK_PROCESS (process);
-  p = XPROCESS (process);
+  struct Lisp_Process *p = XPROCESS (process);
   if (p->infd < 0)
     return Qnil;
-  coding = proc_decode_coding_system[p->infd];
+  struct coding_system *coding = proc_decode_coding_system[p->infd];
   return (CODING_FOR_UNIBYTE (coding) ? Qnil : Qt);
 }
 
@@ -7375,10 +7740,10 @@ catch_child_signal (void)
 /* This is not called "init_process" because that is the name of a
    Mach system call, so it would cause problems on Darwin systems.  */
 void
-init_process_emacs (void)
+init_process_emacs (int sockfd)
 {
 #ifdef subprocesses
-  register int i;
+  int i;
 
   inhibit_sentinels = 0;
 
@@ -7401,12 +7766,11 @@ init_process_emacs (void)
   FD_ZERO (&non_process_wait_mask);
   FD_ZERO (&write_mask);
   max_process_desc = max_input_desc = -1;
+  external_sock_fd = sockfd;
   memset (fd_callback_info, 0, sizeof (fd_callback_info));
 
-#ifdef NON_BLOCKING_CONNECT
   FD_ZERO (&connect_wait_mask);
   num_pending_connects = 0;
-#endif
 
   process_output_delay_count = 0;
   process_output_skip = 0;
@@ -7501,6 +7865,9 @@ syms_of_process (void)
   DEFSYM (QCserver, ":server");
   DEFSYM (QCnowait, ":nowait");
   DEFSYM (QCsentinel, ":sentinel");
+  DEFSYM (QCuse_external_socket, ":use-external-socket");
+  DEFSYM (QCtls_parameters, ":tls-parameters");
+  DEFSYM (Qnsm_verify_connection, "nsm-verify-connection");
   DEFSYM (QClog, ":log");
   DEFSYM (QCnoquery, ":noquery");
   DEFSYM (QCstop, ":stop");
@@ -7650,9 +8017,7 @@ The variable takes effect when `start-process' is called.  */);
 #define ADD_SUBFEATURE(key, val) \
   subfeatures = pure_cons (pure_cons (key, pure_cons (val, Qnil)), subfeatures)
 
-#ifdef NON_BLOCKING_CONNECT
    ADD_SUBFEATURE (QCnowait, Qt);
-#endif
 #ifdef DATAGRAM_SOCKETS
    ADD_SUBFEATURE (QCtype, Qdatagram);
 #endif
index 2e743a3dc385f5a323e41a96b72c8b2b8a921786..20593f5e8faff091d31ea8a31212a3c4d03a34e8 100644 (file)
@@ -106,6 +106,7 @@ struct Lisp_Process
 
 #ifdef HAVE_GNUTLS
     Lisp_Object gnutls_cred_type;
+    Lisp_Object gnutls_boot_parameters;
 #endif
 
     /* Pipe process attached to the standard error of this process.  */
@@ -161,7 +162,25 @@ struct Lisp_Process
        flag indicates that `raw_status' contains a new status that still
        needs to be synced to `status'.  */
     bool_bf raw_status_new : 1;
+    /* Whether this is a nonblocking socket. */
+    bool_bf is_non_blocking_client : 1;
+    /* Whether this is a server or a client socket. */
+    bool_bf is_server : 1;
     int raw_status;
+    /* The length of the socket backlog. */
+    int backlog;
+    /* The port number. */
+    int port;
+    /* The socket type. */
+    int socktype;
+    /* The socket protocol. */
+    int ai_protocol;
+
+#ifdef HAVE_GETADDRINFO_A
+    /* Whether the socket is waiting for response from an asynchronous
+       DNS call. */
+    struct gaicb *dns_request;
+#endif
 
 #ifdef HAVE_GNUTLS
     gnutls_initstage_t gnutls_initstage;
@@ -174,6 +193,7 @@ struct Lisp_Process
     int gnutls_log_level;
     int gnutls_handshakes_tried;
     bool_bf gnutls_p : 1;
+    bool_bf gnutls_complete_negotiation_p : 1;
 #endif
 };
 
@@ -191,6 +211,12 @@ pset_childp (struct Lisp_Process *p, Lisp_Object val)
   p->childp = val;
 }
 
+INLINE void
+pset_status (struct Lisp_Process *p, Lisp_Object val)
+{
+  p->status = val;
+}
+
 #ifdef HAVE_GNUTLS
 INLINE void
 pset_gnutls_cred_type (struct Lisp_Process *p, Lisp_Object val)
@@ -225,7 +251,7 @@ extern Lisp_Object system_process_attributes (Lisp_Object);
 
 extern void record_deleted_pid (pid_t, Lisp_Object);
 struct sockaddr;
-extern Lisp_Object conv_sockaddr_to_lisp (struct sockaddr *, int);
+extern Lisp_Object conv_sockaddr_to_lisp (struct sockaddr *, ptrdiff_t);
 extern void hold_keyboard_input (void);
 extern void unhold_keyboard_input (void);
 extern bool kbd_on_hold_p (void);
index 31bd77f00e35218d2ed8def26d90c86a3a31abbe..844c1f21ca8d8708f7e9454265011c7e7e46456e 100644 (file)
@@ -224,7 +224,7 @@ static EMACS_INT current_sampling_interval;
 static void
 handle_profiler_signal (int signal)
 {
-  if (EQ (backtrace_top_function (), Qautomatic_gc))
+  if (EQ (backtrace_top_function (), QAutomatic_GC))
     /* Special case the time-count inside GC because the hash-table
        code is not prepared to be used while the GC is running.
        More specifically it uses ASIZE at many places where it does
@@ -418,7 +418,7 @@ Before returning, a new log is allocated for future samples.  */)
   cpu_log = (profiler_cpu_running
             ? make_log (profiler_log_size, profiler_max_stack_depth)
             : Qnil);
-  Fputhash (Fmake_vector (make_number (1), Qautomatic_gc),
+  Fputhash (Fmake_vector (make_number (1), QAutomatic_GC),
            make_number (cpu_gc_count),
            result);
   cpu_gc_count = 0;
index a94f81b5bfea2f398c550428591896e3871fdceb..071cee777e98db76ba2e2c12d8f918b68f9196a8 100644 (file)
@@ -22,31 +22,15 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
    rather than all of them.  This means allowing for a possible
    hole between the first bloc and the end of malloc storage.  */
 
-#ifdef emacs
-
 #include <config.h>
 
-#include "lisp.h"              /* Needed for VALBITS.  */
-#include "blockinput.h"
-
-#include <unistd.h>
-
-#ifdef DOUG_LEA_MALLOC
-#define M_TOP_PAD           -2
-extern int mallopt (int, int);
-#else /* not DOUG_LEA_MALLOC */
-#if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
-extern size_t __malloc_extra_blocks;
-#endif /* not SYSTEM_MALLOC and not HYBRID_MALLOC */
-#endif /* not DOUG_LEA_MALLOC */
-
-#else /* not emacs */
-
 #include <stddef.h>
-#include <malloc.h>
-
-#endif /* not emacs */
 
+#ifdef emacs
+# include "lisp.h"
+# include "blockinput.h"
+# include <unistd.h>
+#endif
 
 #include "getpagesize.h"
 
@@ -95,7 +79,9 @@ static int extra_bytes;
 /* The hook `malloc' uses for the function which gets more space
    from the system.  */
 
-#if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
+#ifdef HAVE_MALLOC_H
+# include <malloc.h>
+#else
 extern void *(*__morecore) (ptrdiff_t);
 #endif
 
index 164eb4612ae01cb901caa6664b39b35a4fcaea4d..af379367be6657256656742f12753e44249d5b2e 100644 (file)
@@ -215,7 +215,7 @@ xmalloc (size_t size)
   void *val = malloc (size);
   if (!val && size)
     {
-      write (2, "virtual memory exhausted\n", 25);
+      write (STDERR_FILENO, "virtual memory exhausted\n", 25);
       exit (1);
     }
   return val;
@@ -233,7 +233,7 @@ xrealloc (void *block, size_t size)
     val = realloc (block, size);
   if (!val && size)
     {
-      write (2, "virtual memory exhausted\n", 25);
+      write (STDERR_FILENO, "virtual memory exhausted\n", 25);
       exit (1);
     }
   return val;
@@ -5140,8 +5140,6 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
 
       if (p == pend)
        {
-         ptrdiff_t dcnt;
-
          /* End of pattern means we might have succeeded.  */
          DEBUG_PRINT ("end of pattern ... ");
 
@@ -5149,19 +5147,22 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
             longest match, try backtracking.  */
          if (d != end_match_2)
            {
-             /* 1 if this match ends in the same string (string1 or string2)
-                as the best previous match.  */
-             boolean same_str_p = (FIRST_STRING_P (match_end)
-                                   == FIRST_STRING_P (d));
-             /* 1 if this match is the best seen so far.  */
-             boolean best_match_p;
-
-             /* AIX compiler got confused when this was combined
-                with the previous declaration.  */
-             if (same_str_p)
-               best_match_p = d > match_end;
-             else
-               best_match_p = !FIRST_STRING_P (d);
+             /* True if this match is the best seen so far.  */
+             bool best_match_p;
+
+             {
+               /* True if this match ends in the same string (string1
+                  or string2) as the best previous match.  */
+               bool same_str_p = (FIRST_STRING_P (match_end)
+                                  == FIRST_STRING_P (d));
+
+               /* AIX compiler got confused when this was combined
+                  with the previous declaration.  */
+               if (same_str_p)
+                 best_match_p = d > match_end;
+               else
+                 best_match_p = !FIRST_STRING_P (d);
+             }
 
              DEBUG_PRINT ("backtracking.\n");
 
@@ -5290,7 +5291,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
                       nfailure_points_pushed - nfailure_points_popped);
          DEBUG_PRINT ("%u registers pushed.\n", num_regs_pushed);
 
-         dcnt = POINTER_TO_OFFSET (d) - pos;
+         ptrdiff_t dcnt = POINTER_TO_OFFSET (d) - pos;
 
          DEBUG_PRINT ("Returning %td from re_match_2.\n", dcnt);
 
index fc53c5822d77bd82dad6c79ce242107275727421..72b74fa355f2867ad6dcc14646a892faeef61520 100644 (file)
@@ -19,87 +19,62 @@ You should have received a copy of the GNU General Public License
 along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
+
+#include "sheap.h"
+
 #include <stdio.h>
 #include "lisp.h"
 #include <unistd.h>
 #include <stdlib.h>            /* for exit */
 
-#ifdef ENABLE_CHECKING
-#define STATIC_HEAP_SIZE       (28 * 1024 * 1024)
-#else
-#define STATIC_HEAP_SIZE       (19 * 1024 * 1024)
-#endif
-
-int debug_sheap = 0;
-
-#define BLOCKSIZE 4096
+static int debug_sheap;
 
 char bss_sbrk_buffer[STATIC_HEAP_SIZE];
-/* The following is needed in gmalloc.c */
-void *bss_sbrk_buffer_end = bss_sbrk_buffer + STATIC_HEAP_SIZE;
-char *bss_sbrk_ptr;
 char *max_bss_sbrk_ptr;
-int bss_sbrk_did_unexec;
+bool bss_sbrk_did_unexec;
 
 void *
 bss_sbrk (ptrdiff_t request_size)
 {
+  static char *bss_sbrk_ptr;
+
   if (!bss_sbrk_ptr)
     {
       max_bss_sbrk_ptr = bss_sbrk_ptr = bss_sbrk_buffer;
 #ifdef CYGWIN
-      sbrk (BLOCKSIZE);                /* force space for fork to work */
+      /* Force space for fork to work.  */
+      sbrk (4096);
 #endif
     }
 
-  if (!(int) request_size)
-    {
-      return (bss_sbrk_ptr);
-    }
-  else if (bss_sbrk_ptr + (int) request_size < bss_sbrk_buffer)
+  int used = bss_sbrk_ptr - bss_sbrk_buffer;
+
+  if (request_size < -used)
     {
-      printf
-       ("attempt to free too much: avail %d used %d failed request %d\n",
-        STATIC_HEAP_SIZE, bss_sbrk_ptr - bss_sbrk_buffer,
-        (int) request_size);
+      printf (("attempt to free too much: "
+              "avail %d used %d failed request %"pD"d\n"),
+             STATIC_HEAP_SIZE, used, request_size);
       exit (-1);
       return 0;
     }
-  else if (bss_sbrk_ptr + (int) request_size >
-          bss_sbrk_buffer + STATIC_HEAP_SIZE)
+  else if (STATIC_HEAP_SIZE - used < request_size)
     {
-      printf ("static heap exhausted: avail %d used %d failed request %d\n",
-             STATIC_HEAP_SIZE,
-             bss_sbrk_ptr - bss_sbrk_buffer, (int) request_size);
+      printf ("static heap exhausted: avail %d used %d failed request %"pD"d\n",
+             STATIC_HEAP_SIZE, used, request_size);
       exit (-1);
       return 0;
     }
-  else if ((int) request_size < 0)
-    {
-      bss_sbrk_ptr += (int) request_size;
-      if (debug_sheap)
-       printf ("freed size %d\n", request_size);
-      return bss_sbrk_ptr;
-    }
-  else
+
+  void *ret = bss_sbrk_ptr;
+  bss_sbrk_ptr += request_size;
+  if (max_bss_sbrk_ptr < bss_sbrk_ptr)
+    max_bss_sbrk_ptr = bss_sbrk_ptr;
+  if (debug_sheap)
     {
-      char *ret = bss_sbrk_ptr;
-      if (debug_sheap)
-       printf ("allocated 0x%08x size %d\n", ret, request_size);
-      bss_sbrk_ptr += (int) request_size;
-      if (bss_sbrk_ptr > max_bss_sbrk_ptr)
-       max_bss_sbrk_ptr = bss_sbrk_ptr;
-      return ret;
+      if (request_size < 0)
+       printf ("freed size %"pD"d\n", request_size);
+      else
+       printf ("allocated %p size %"pD"d\n", ret, request_size);
     }
-}
-
-void
-report_sheap_usage (int die_if_pure_storage_exceeded)
-{
-  char buf[200];
-  sprintf (buf, "Maximum static heap usage: %d of %d bytes",
-          max_bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE);
-  /* Don't log messages, cause at this point, we're not allowed to create
-     buffers.  */
-  message1_nolog (buf);
+  return ret;
 }
diff --git a/src/sheap.h b/src/sheap.h
new file mode 100644 (file)
index 0000000..c229a1b
--- /dev/null
@@ -0,0 +1,31 @@
+/* Static heap allocation for GNU Emacs.
+
+Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <stddef.h>
+#include "lisp.h"
+
+/* Size of the static heap.  Guess a value that is probably too large,
+   by up to a factor of four or so.  Typically the unused part is not
+   paged in and so does not cost much.  */
+enum { STATIC_HEAP_SIZE = sizeof (Lisp_Object) << 22 };
+
+extern char bss_sbrk_buffer[STATIC_HEAP_SIZE];
+extern char *max_bss_sbrk_ptr;
+extern bool bss_sbrk_did_unexec;
+extern void *bss_sbrk (ptrdiff_t);
index 8e14bf3fb1d6001724b1009962dc6a358e30b106..fc8c666cec4c227df6dd569d154c586178a59272 100644 (file)
@@ -81,6 +81,11 @@ SYNTAX_FLAGS_COMEND_SECOND (int flags)
   return (flags >> 19) & 1;
 }
 static bool
+SYNTAX_FLAGS_COMSTARTEND_FIRST (int flags)
+{
+  return (flags & 0x50000) != 0;
+}
+static bool
 SYNTAX_FLAGS_PREFIX (int flags)
 {
   return (flags >> 20) & 1;
@@ -153,6 +158,10 @@ struct lisp_parse_state
     ptrdiff_t comstr_start;  /* Position of last comment/string starter.  */
     Lisp_Object levelstarts; /* Char numbers of starts-of-expression
                                of levels (starting from outermost).  */
+    int prev_syntax; /* Syntax of previous position scanned, when
+                        that position (potentially) holds the first char
+                        of a 2-char construct, i.e. comment delimiter
+                        or Sescape, etc.  Smax otherwise. */
   };
 \f
 /* These variables are a cache for finding the start of a defun.
@@ -176,7 +185,8 @@ static Lisp_Object skip_syntaxes (bool, Lisp_Object, Lisp_Object);
 static Lisp_Object scan_lists (EMACS_INT, EMACS_INT, EMACS_INT, bool);
 static void scan_sexps_forward (struct lisp_parse_state *,
                                 ptrdiff_t, ptrdiff_t, ptrdiff_t, EMACS_INT,
-                                bool, Lisp_Object, int);
+                                bool, int);
+static void internalize_parse_state (Lisp_Object, struct lisp_parse_state *);
 static bool in_classes (int, Lisp_Object);
 static void parse_sexp_propertize (ptrdiff_t charpos);
 
@@ -911,10 +921,11 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
        }
       do
        {
+          internalize_parse_state (Qnil, &state);
          scan_sexps_forward (&state,
                              defun_start, defun_start_byte,
                              comment_end, TYPE_MINIMUM (EMACS_INT),
-                             0, Qnil, 0);
+                             0, 0);
          defun_start = comment_end;
          if (!adjusted)
            {
@@ -2310,11 +2321,15 @@ in_classes (int c, Lisp_Object iso_classes)
    PREV_SYNTAX is the SYNTAX_WITH_FLAGS of the previous character
      (or 0 If the search cannot start in the middle of a two-character).
 
-   If successful, return true and store the charpos of the comment's end
-   into *CHARPOS_PTR and the corresponding bytepos into *BYTEPOS_PTR.
-   Else, return false and store the charpos STOP into *CHARPOS_PTR, the
-   corresponding bytepos into *BYTEPOS_PTR and the current nesting
-   (as defined for state.incomment) in *INCOMMENT_PTR.
+   If successful, return true and store the charpos of the comment's
+   end into *CHARPOS_PTR and the corresponding bytepos into
+   *BYTEPOS_PTR.  Else, return false and store the charpos STOP into
+   *CHARPOS_PTR, the corresponding bytepos into *BYTEPOS_PTR and the
+   current nesting (as defined for state->incomment) in
+   *INCOMMENT_PTR.  Should the last character scanned in an incomplete
+   comment be a possible first character of a two character construct,
+   we store its SYNTAX_WITH_FLAGS into *last_syntax_ptr.  Otherwise,
+   we store Smax into *last_syntax_ptr.
 
    The comment end is the last character of the comment rather than the
    character just after the comment.
@@ -2326,7 +2341,7 @@ static bool
 forw_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
              EMACS_INT nesting, int style, int prev_syntax,
              ptrdiff_t *charpos_ptr, ptrdiff_t *bytepos_ptr,
-             EMACS_INT *incomment_ptr)
+             EMACS_INT *incomment_ptr, int *last_syntax_ptr)
 {
   register int c, c1;
   register enum syntaxcode code;
@@ -2337,7 +2352,8 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
   /* Enter the loop in the middle so that we find
      a 2-char comment ender if we start in the middle of it.  */
   syntax = prev_syntax;
-  if (syntax != 0) goto forw_incomment;
+  code = syntax & 0xff;
+  if (syntax != 0 && from < stop) goto forw_incomment;
 
   while (1)
     {
@@ -2346,6 +2362,12 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
          *incomment_ptr = nesting;
          *charpos_ptr = from;
          *bytepos_ptr = from_byte;
+          *last_syntax_ptr =
+            (code == Sescape || code == Scharquote
+             || SYNTAX_FLAGS_COMEND_FIRST (syntax)
+             || (nesting > 0
+                 && SYNTAX_FLAGS_COMSTART_FIRST (syntax)))
+            ? syntax : Smax ;
          return 0;
        }
       c = FETCH_CHAR_AS_MULTIBYTE (from_byte);
@@ -2386,7 +2408,9 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
               SYNTAX_FLAGS_COMMENT_NESTED (other_syntax))
              ? nesting > 0 : nesting < 0))
        {
-         if (--nesting <= 0)
+         syntax = Smax;        /* So that "|#" (lisp) can not return
+                                   the syntax of "#" in *last_syntax_ptr. */
+          if (--nesting <= 0)
            /* We have encountered a comment end of the same style
               as the comment sequence which began this comment section.  */
            break;
@@ -2408,6 +2432,7 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
        /* We have encountered a nested comment of the same style
           as the comment sequence which began this comment section.  */
        {
+          syntax = Smax; /* So that "#|#" isn't also a comment ender. */
          INC_BOTH (from, from_byte);
          UPDATE_SYNTAX_TABLE_FORWARD (from);
          nesting++;
@@ -2415,6 +2440,8 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
     }
   *charpos_ptr = from;
   *bytepos_ptr = from_byte;
+  *last_syntax_ptr = Smax; /* Any syntactic power the last byte had is
+                              used up. */
   return 1;
 }
 
@@ -2436,6 +2463,7 @@ between them, return t; otherwise return nil.  */)
   EMACS_INT count1;
   ptrdiff_t out_charpos, out_bytepos;
   EMACS_INT dummy;
+  int dummy2;
 
   CHECK_NUMBER (count);
   count1 = XINT (count);
@@ -2499,7 +2527,7 @@ between them, return t; otherwise return nil.  */)
        }
       /* We're at the start of a comment.  */
       found = forw_comment (from, from_byte, stop, comnested, comstyle, 0,
-                           &out_charpos, &out_bytepos, &dummy);
+                           &out_charpos, &out_bytepos, &dummy, &dummy2);
       from = out_charpos; from_byte = out_bytepos;
       if (!found)
        {
@@ -2659,6 +2687,7 @@ scan_lists (EMACS_INT from, EMACS_INT count, EMACS_INT depth, bool sexpflag)
   ptrdiff_t from_byte;
   ptrdiff_t out_bytepos, out_charpos;
   EMACS_INT dummy;
+  int dummy2;
   bool multibyte_symbol_p = sexpflag && multibyte_syntax_as_symbol;
 
   if (depth > 0) min_depth = 0;
@@ -2755,7 +2784,8 @@ scan_lists (EMACS_INT from, EMACS_INT count, EMACS_INT depth, bool sexpflag)
              UPDATE_SYNTAX_TABLE_FORWARD (from);
              found = forw_comment (from, from_byte, stop,
                                    comnested, comstyle, 0,
-                                   &out_charpos, &out_bytepos, &dummy);
+                                   &out_charpos, &out_bytepos, &dummy,
+                                    &dummy2);
              from = out_charpos, from_byte = out_bytepos;
              if (!found)
                {
@@ -3119,7 +3149,7 @@ the prefix syntax flag (p).  */)
 }
 \f
 /* Parse forward from FROM / FROM_BYTE to END,
-   assuming that FROM has state OLDSTATE (nil means FROM is start of function),
+   assuming that FROM has state STATE,
    and return a description of the state of the parse at END.
    If STOPBEFORE, stop at the start of an atom.
    If COMMENTSTOP is 1, stop at the start of a comment.
@@ -3127,12 +3157,11 @@ the prefix syntax flag (p).  */)
    after the beginning of a string, or after the end of a string.  */
 
 static void
-scan_sexps_forward (struct lisp_parse_state *stateptr,
+scan_sexps_forward (struct lisp_parse_state *state,
                    ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t end,
                    EMACS_INT targetdepth, bool stopbefore,
-                   Lisp_Object oldstate, int commentstop)
+                   int commentstop)
 {
-  struct lisp_parse_state state;
   enum syntaxcode code;
   int c1;
   bool comnested;
@@ -3148,7 +3177,7 @@ scan_sexps_forward (struct lisp_parse_state *stateptr,
   Lisp_Object tem;
   ptrdiff_t prev_from;         /* Keep one character before FROM.  */
   ptrdiff_t prev_from_byte;
-  int prev_from_syntax;
+  int prev_from_syntax, prev_prev_from_syntax;
   bool boundary_stop = commentstop == -1;
   bool nofence;
   bool found;
@@ -3165,6 +3194,7 @@ scan_sexps_forward (struct lisp_parse_state *stateptr,
 do { prev_from = from;                         \
      prev_from_byte = from_byte;               \
      temp = FETCH_CHAR_AS_MULTIBYTE (prev_from_byte);  \
+     prev_prev_from_syntax = prev_from_syntax;  \
      prev_from_syntax = SYNTAX_WITH_FLAGS (temp); \
      INC_BOTH (from, from_byte);               \
      if (from < end)                           \
@@ -3174,88 +3204,38 @@ do { prev_from = from;                          \
   immediate_quit = 1;
   QUIT;
 
-  if (NILP (oldstate))
-    {
-      depth = 0;
-      state.instring = -1;
-      state.incomment = 0;
-      state.comstyle = 0;      /* comment style a by default.  */
-      state.comstr_start = -1; /* no comment/string seen.  */
-    }
-  else
-    {
-      tem = Fcar (oldstate);
-      if (!NILP (tem))
-       depth = XINT (tem);
-      else
-       depth = 0;
-
-      oldstate = Fcdr (oldstate);
-      oldstate = Fcdr (oldstate);
-      oldstate = Fcdr (oldstate);
-      tem = Fcar (oldstate);
-      /* Check whether we are inside string_fence-style string: */
-      state.instring = (!NILP (tem)
-                       ? (CHARACTERP (tem) ? XFASTINT (tem) : ST_STRING_STYLE)
-                       : -1);
-
-      oldstate = Fcdr (oldstate);
-      tem = Fcar (oldstate);
-      state.incomment = (!NILP (tem)
-                        ? (INTEGERP (tem) ? XINT (tem) : -1)
-                        : 0);
-
-      oldstate = Fcdr (oldstate);
-      tem = Fcar (oldstate);
-      start_quoted = !NILP (tem);
+  depth = state->depth;
+  start_quoted = state->quoted;
+  prev_prev_from_syntax = Smax;
+  prev_from_syntax = state->prev_syntax;
 
-      /* if the eighth element of the list is nil, we are in comment
-        style a.  If it is non-nil, we are in comment style b */
-      oldstate = Fcdr (oldstate);
-      oldstate = Fcdr (oldstate);
-      tem = Fcar (oldstate);
-      state.comstyle = (NILP (tem)
-                       ? 0
-                       : (RANGED_INTEGERP (0, tem, ST_COMMENT_STYLE)
-                          ? XINT (tem)
-                          : ST_COMMENT_STYLE));
-
-      oldstate = Fcdr (oldstate);
-      tem = Fcar (oldstate);
-      state.comstr_start =
-       RANGED_INTEGERP (PTRDIFF_MIN, tem, PTRDIFF_MAX) ? XINT (tem) : -1;
-      oldstate = Fcdr (oldstate);
-      tem = Fcar (oldstate);
-      while (!NILP (tem))              /* >= second enclosing sexps.  */
-       {
-         Lisp_Object temhd = Fcar (tem);
-         if (RANGED_INTEGERP (PTRDIFF_MIN, temhd, PTRDIFF_MAX))
-           curlevel->last = XINT (temhd);
-         if (++curlevel == endlevel)
-           curlevel--; /* error ("Nesting too deep for parser"); */
-         curlevel->prev = -1;
-         curlevel->last = -1;
-         tem = Fcdr (tem);
-       }
+  tem = state->levelstarts;
+  while (!NILP (tem))          /* >= second enclosing sexps.  */
+    {
+      Lisp_Object temhd = Fcar (tem);
+      if (RANGED_INTEGERP (PTRDIFF_MIN, temhd, PTRDIFF_MAX))
+        curlevel->last = XINT (temhd);
+      if (++curlevel == endlevel)
+        curlevel--; /* error ("Nesting too deep for parser"); */
+      curlevel->prev = -1;
+      curlevel->last = -1;
+      tem = Fcdr (tem);
     }
-  state.quoted = 0;
-  mindepth = depth;
-
   curlevel->prev = -1;
   curlevel->last = -1;
 
-  SETUP_SYNTAX_TABLE (prev_from, 1);
-  temp = FETCH_CHAR (prev_from_byte);
-  prev_from_syntax = SYNTAX_WITH_FLAGS (temp);
-  UPDATE_SYNTAX_TABLE_FORWARD (from);
+  state->quoted = 0;
+  mindepth = depth;
+
+  SETUP_SYNTAX_TABLE (from, 1);
 
   /* Enter the loop at a place appropriate for initial state.  */
 
-  if (state.incomment)
+  if (state->incomment)
     goto startincomment;
-  if (state.instring >= 0)
+  if (state->instring >= 0)
     {
-      nofence = state.instring != ST_STRING_STYLE;
+      nofence = state->instring != ST_STRING_STYLE;
       if (start_quoted)
        goto startquotedinstring;
       goto startinstring;
@@ -3266,11 +3246,8 @@ do { prev_from = from;                           \
   while (from < end)
     {
       int syntax;
-      INC_FROM;
-      code = prev_from_syntax & 0xff;
 
-      if (from < end
-         && SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax)
+      if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax)
          && (c1 = FETCH_CHAR (from_byte),
              syntax = SYNTAX_WITH_FLAGS (c1),
              SYNTAX_FLAGS_COMSTART_SECOND (syntax)))
@@ -3280,32 +3257,39 @@ do { prev_from = from;                          \
          /* Record the comment style we have entered so that only
             the comment-end sequence of the same style actually
             terminates the comment section.  */
-         state.comstyle
+         state->comstyle
            = SYNTAX_FLAGS_COMMENT_STYLE (syntax, prev_from_syntax);
          comnested = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax)
                       | SYNTAX_FLAGS_COMMENT_NESTED (syntax));
-         state.incomment = comnested ? 1 : -1;
-         state.comstr_start = prev_from;
+         state->incomment = comnested ? 1 : -1;
+         state->comstr_start = prev_from;
          INC_FROM;
+          prev_from_syntax = Smax; /* the syntax has already been
+                                      "used up". */
          code = Scomment;
        }
-      else if (code == Scomment_fence)
-       {
-         /* Record the comment style we have entered so that only
-            the comment-end sequence of the same style actually
-            terminates the comment section.  */
-         state.comstyle = ST_COMMENT_STYLE;
-         state.incomment = -1;
-         state.comstr_start = prev_from;
-         code = Scomment;
-       }
-      else if (code == Scomment)
-       {
-         state.comstyle = SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax, 0);
-         state.incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ?
-                            1 : -1);
-         state.comstr_start = prev_from;
-       }
+      else
+        {
+          INC_FROM;
+          code = prev_from_syntax & 0xff;
+          if (code == Scomment_fence)
+            {
+              /* Record the comment style we have entered so that only
+                 the comment-end sequence of the same style actually
+                 terminates the comment section.  */
+              state->comstyle = ST_COMMENT_STYLE;
+              state->incomment = -1;
+              state->comstr_start = prev_from;
+              code = Scomment;
+            }
+          else if (code == Scomment)
+            {
+              state->comstyle = SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax, 0);
+              state->incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ?
+                                 1 : -1);
+              state->comstr_start = prev_from;
+            }
+        }
 
       if (SYNTAX_FLAGS_PREFIX (prev_from_syntax))
        continue;
@@ -3350,26 +3334,28 @@ do { prev_from = from;                          \
 
        case Scomment_fence: /* Can't happen because it's handled above.  */
        case Scomment:
-         if (commentstop || boundary_stop) goto done;
+          if (commentstop || boundary_stop) goto done;
        startincomment:
          /* The (from == BEGV) test was to enter the loop in the middle so
             that we find a 2-char comment ender even if we start in the
             middle of it.  We don't want to do that if we're just at the
             beginning of the comment (think of (*) ... (*)).  */
          found = forw_comment (from, from_byte, end,
-                               state.incomment, state.comstyle,
-                               (from == BEGV || from < state.comstr_start + 3)
-                               ? 0 : prev_from_syntax,
-                               &out_charpos, &out_bytepos, &state.incomment);
+                               state->incomment, state->comstyle,
+                               from == BEGV ? 0 : prev_from_syntax,
+                               &out_charpos, &out_bytepos, &state->incomment,
+                                &prev_from_syntax);
          from = out_charpos; from_byte = out_bytepos;
-         /* Beware!  prev_from and friends are invalid now.
-            Luckily, the `done' doesn't use them and the INC_FROM
-            sets them to a sane value without looking at them. */
+         /* Beware!  prev_from and friends (except prev_from_syntax)
+            are invalid now.  Luckily, the `done' doesn't use them
+            and the INC_FROM sets them to a sane value without
+            looking at them. */
          if (!found) goto done;
          INC_FROM;
-         state.incomment = 0;
-         state.comstyle = 0;   /* reset the comment style */
-         if (boundary_stop) goto done;
+         state->incomment = 0;
+         state->comstyle = 0;  /* reset the comment style */
+         prev_from_syntax = Smax; /* For the comment closer */
+          if (boundary_stop) goto done;
          break;
 
        case Sopen:
@@ -3396,16 +3382,16 @@ do { prev_from = from;                          \
 
        case Sstring:
        case Sstring_fence:
-         state.comstr_start = from - 1;
+         state->comstr_start = from - 1;
          if (stopbefore) goto stop;  /* this arg means stop at sexp start */
          curlevel->last = prev_from;
-         state.instring = (code == Sstring
+         state->instring = (code == Sstring
                            ? (FETCH_CHAR_AS_MULTIBYTE (prev_from_byte))
                            : ST_STRING_STYLE);
          if (boundary_stop) goto done;
        startinstring:
          {
-           nofence = state.instring != ST_STRING_STYLE;
+           nofence = state->instring != ST_STRING_STYLE;
 
            while (1)
              {
@@ -3419,7 +3405,7 @@ do { prev_from = from;                            \
                /* Check C_CODE here so that if the char has
                   a syntax-table property which says it is NOT
                   a string character, it does not end the string.  */
-               if (nofence && c == state.instring && c_code == Sstring)
+               if (nofence && c == state->instring && c_code == Sstring)
                  break;
 
                switch (c_code)
@@ -3442,7 +3428,7 @@ do { prev_from = from;                            \
              }
          }
        string_end:
-         state.instring = -1;
+         state->instring = -1;
          curlevel->prev = curlevel->last;
          INC_FROM;
          if (boundary_stop) goto done;
@@ -3461,25 +3447,96 @@ do { prev_from = from;                          \
  stop:   /* Here if stopping before start of sexp. */
   from = prev_from;    /* We have just fetched the char that starts it; */
   from_byte = prev_from_byte;
+  prev_from_syntax = prev_prev_from_syntax;
   goto done; /* but return the position before it. */
 
  endquoted:
-  state.quoted = 1;
+  state->quoted = 1;
  done:
-  state.depth = depth;
-  state.mindepth = mindepth;
-  state.thislevelstart = curlevel->prev;
-  state.prevlevelstart
+  state->depth = depth;
+  state->mindepth = mindepth;
+  state->thislevelstart = curlevel->prev;
+  state->prevlevelstart
     = (curlevel == levelstart) ? -1 : (curlevel - 1)->last;
-  state.location = from;
-  state.location_byte = from_byte;
-  state.levelstarts = Qnil;
+  state->location = from;
+  state->location_byte = from_byte;
+  state->levelstarts = Qnil;
   while (curlevel > levelstart)
-    state.levelstarts = Fcons (make_number ((--curlevel)->last),
-                              state.levelstarts);
+    state->levelstarts = Fcons (make_number ((--curlevel)->last),
+                                state->levelstarts);
+  state->prev_syntax = (SYNTAX_FLAGS_COMSTARTEND_FIRST (prev_from_syntax)
+                        || state->quoted) ? prev_from_syntax : Smax;
   immediate_quit = 0;
+}
+
+/* Convert a (lisp) parse state to the internal form used in
+   scan_sexps_forward.  */
+static void
+internalize_parse_state (Lisp_Object external, struct lisp_parse_state *state)
+{
+  Lisp_Object tem;
+
+  if (NILP (external))
+    {
+      state->depth = 0;
+      state->instring = -1;
+      state->incomment = 0;
+      state->quoted = 0;
+      state->comstyle = 0;     /* comment style a by default.  */
+      state->comstr_start = -1;        /* no comment/string seen.  */
+      state->levelstarts = Qnil;
+      state->prev_syntax = Smax;
+    }
+  else
+    {
+      tem = Fcar (external);
+      if (!NILP (tem))
+       state->depth = XINT (tem);
+      else
+       state->depth = 0;
+
+      external = Fcdr (external);
+      external = Fcdr (external);
+      external = Fcdr (external);
+      tem = Fcar (external);
+      /* Check whether we are inside string_fence-style string: */
+      state->instring = (!NILP (tem)
+                         ? (CHARACTERP (tem) ? XFASTINT (tem) : ST_STRING_STYLE)
+                         : -1);
+
+      external = Fcdr (external);
+      tem = Fcar (external);
+      state->incomment = (!NILP (tem)
+                          ? (INTEGERP (tem) ? XINT (tem) : -1)
+                          : 0);
+
+      external = Fcdr (external);
+      tem = Fcar (external);
+      state->quoted = !NILP (tem);
 
-  *stateptr = state;
+      /* if the eighth element of the list is nil, we are in comment
+        style a.  If it is non-nil, we are in comment style b */
+      external = Fcdr (external);
+      external = Fcdr (external);
+      tem = Fcar (external);
+      state->comstyle = (NILP (tem)
+                         ? 0
+                         : (RANGED_INTEGERP (0, tem, ST_COMMENT_STYLE)
+                            ? XINT (tem)
+                            : ST_COMMENT_STYLE));
+
+      external = Fcdr (external);
+      tem = Fcar (external);
+      state->comstr_start =
+       RANGED_INTEGERP (PTRDIFF_MIN, tem, PTRDIFF_MAX) ? XINT (tem) : -1;
+      external = Fcdr (external);
+      tem = Fcar (external);
+      state->levelstarts = tem;
+
+      external = Fcdr (external);
+      tem = Fcar (external);
+      state->prev_syntax = NILP (tem) ? Smax : XINT (tem);
+    }
 }
 
 DEFUN ("parse-partial-sexp", Fparse_partial_sexp, Sparse_partial_sexp, 2, 6, 0,
@@ -3488,6 +3545,7 @@ Parsing stops at TO or when certain criteria are met;
  point is set to where parsing stops.
 If fifth arg OLDSTATE is omitted or nil,
  parsing assumes that FROM is the beginning of a function.
+
 Value is a list of elements describing final state of parsing:
  0. depth in parens.
  1. character address of start of innermost containing list; nil if none.
@@ -3501,16 +3559,22 @@ Value is a list of elements describing final state of parsing:
  6. the minimum paren-depth encountered during this scan.
  7. style of comment, if any.
  8. character address of start of comment or string; nil if not in one.
- 9. Intermediate data for continuation of parsing (subject to change).
+ 9. List of positions of currently open parens, outermost first.
+10. When the last position scanned holds the first character of a
+    (potential) two character construct, the syntax of that position,
+    otherwise nil.  That construct can be a two character comment
+    delimiter or an Escaped or Char-quoted character.
+11..... Possible further internal information used by `parse-partial-sexp'.
+
 If third arg TARGETDEPTH is non-nil, parsing stops if the depth
 in parentheses becomes equal to TARGETDEPTH.
-Fourth arg STOPBEFORE non-nil means stop when come to
+Fourth arg STOPBEFORE non-nil means stop when we come to
  any character that starts a sexp.
 Fifth arg OLDSTATE is a list like what this function returns.
  It is used to initialize the state of the parse.  Elements number 1, 2, 6
  are ignored.
-Sixth arg COMMENTSTOP non-nil means stop at the start of a comment.
- If it is symbol `syntax-table', stop after the start of a comment or a
+Sixth arg COMMENTSTOP non-nil means stop after the start of a comment.
+ If it is the symbol `syntax-table', stop after the start of a comment or a
  string, or after end of a comment or a string.  */)
   (Lisp_Object from, Lisp_Object to, Lisp_Object targetdepth,
    Lisp_Object stopbefore, Lisp_Object oldstate, Lisp_Object commentstop)
@@ -3527,15 +3591,17 @@ Sixth arg COMMENTSTOP non-nil means stop at the start of a comment.
     target = TYPE_MINIMUM (EMACS_INT); /* We won't reach this depth.  */
 
   validate_region (&from, &to);
+  internalize_parse_state (oldstate, &state);
   scan_sexps_forward (&state, XINT (from), CHAR_TO_BYTE (XINT (from)),
                      XINT (to),
-                     target, !NILP (stopbefore), oldstate,
+                     target, !NILP (stopbefore),
                      (NILP (commentstop)
                       ? 0 : (EQ (commentstop, Qsyntax_table) ? -1 : 1)));
 
   SET_PT_BOTH (state.location, state.location_byte);
 
-  return Fcons (make_number (state.depth),
+  return
+    Fcons (make_number (state.depth),
           Fcons (state.prevlevelstart < 0
                  ? Qnil : make_number (state.prevlevelstart),
             Fcons (state.thislevelstart < 0
@@ -3553,11 +3619,15 @@ Sixth arg COMMENTSTOP non-nil means stop at the start of a comment.
                                  ? Qsyntax_table
                                  : make_number (state.comstyle))
                               : Qnil),
-                             Fcons (((state.incomment
-                                      || (state.instring >= 0))
-                                     ? make_number (state.comstr_start)
-                                     : Qnil),
-                                    Fcons (state.levelstarts, Qnil))))))))));
+                        Fcons (((state.incomment
+                                  || (state.instring >= 0))
+                                 ? make_number (state.comstr_start)
+                                 : Qnil),
+                          Fcons (state.levelstarts,
+                             Fcons (state.prev_syntax == Smax
+                                    ? Qnil
+                                    : make_number (state.prev_syntax),
+                                Qnil)))))))))));
 }
 \f
 void
index 460166d119eb1ad8474894d3a85e40c34bb7d522..53affbf3dbfd447f94ca614c107872ebba7cfd48 100644 (file)
@@ -19,14 +19,6 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
-/* If HYBRID_GET_CURRENT_DIR_NAME is defined in conf_post.h, then we
-   need the following before including unistd.h, in order to pick up
-   the right prototype for gget_current_dir_name.  */
-#ifdef HYBRID_GET_CURRENT_DIR_NAME
-#undef get_current_dir_name
-#define get_current_dir_name gget_current_dir_name
-#endif
-
 #include <execinfo.h>
 #include "sysstdio.h"
 #ifdef HAVE_PWD_H
@@ -40,6 +32,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <utimens.h>
 
 #include "lisp.h"
+#include "sheap.h"
 #include "sysselect.h"
 #include "blockinput.h"
 
@@ -137,14 +130,50 @@ static const int baud_convert[] =
     1800, 2400, 4800, 9600, 19200, 38400
   };
 
-#if !defined HAVE_GET_CURRENT_DIR_NAME || defined BROKEN_GET_CURRENT_DIR_NAME \
-  || (defined HYBRID_GET_CURRENT_DIR_NAME)
-/* 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.  */
+/* If FD is not already open, arrange for it to be open with FLAGS.  */
+static void
+force_open (int fd, int flags)
+{
+  if (dup2 (fd, fd) < 0 && errno == EBADF)
+    {
+      int n = open (NULL_DEVICE, flags);
+      if (n < 0 || (fd != n && (dup2 (n, fd) < 0 || emacs_close (n) != 0)))
+       {
+         emacs_perror (NULL_DEVICE);
+         exit (EXIT_FAILURE);
+       }
+    }
+}
+
+/* Make sure stdin, stdout, and stderr are open to something, so that
+   their file descriptors are not hijacked by later system calls.  */
+void
+init_standard_fds (void)
+{
+  /* Open stdin for *writing*, and stdout and stderr for *reading*.
+     That way, any attempt to do normal I/O will result in an error,
+     just as if the files were closed, and the file descriptors will
+     not be reused by later opens.  */
+  force_open (STDIN_FILENO, O_WRONLY);
+  force_open (STDOUT_FILENO, O_RDONLY);
+  force_open (STDERR_FILENO, O_RDONLY);
+}
+
+/* Return the current working directory.  The result should be freed
+   with 'free'.  Return NULL on errors.  */
 char *
-get_current_dir_name (void)
+emacs_get_current_dir_name (void)
 {
+# if HAVE_GET_CURRENT_DIR_NAME && !BROKEN_GET_CURRENT_DIR_NAME
+#  ifdef HYBRID_MALLOC
+  bool use_libc = bss_sbrk_did_unexec;
+#  else
+  bool use_libc = true;
+#  endif
+  if (use_libc)
+    return get_current_dir_name ();
+# endif
+
   char *buf;
   char *pwd = getenv ("PWD");
   struct stat dotstat, pwdstat;
@@ -192,7 +221,6 @@ get_current_dir_name (void)
     }
   return buf;
 }
-#endif
 
 \f
 /* Discard pending input on all input descriptors.  */
@@ -1409,6 +1437,12 @@ setup_pty (int fd)
 void
 init_system_name (void)
 {
+  if (!build_details)
+    {
+      /* Set system-name to nil so that the build is deterministic.  */
+      Vsystem_name = Qnil;
+      return;
+    }
   char *hostname_alloc = NULL;
   char *hostname;
 #ifndef HAVE_GETHOSTNAME
@@ -1632,6 +1666,9 @@ static unsigned char sigsegv_stack[SIGSTKSZ];
 static bool
 stack_overflow (siginfo_t *siginfo)
 {
+  if (!attempt_stack_overflow_recovery)
+    return false;
+
   /* In theory, a more-accurate heuristic can be obtained by using
      GNU/Linux pthread_getattr_np along with POSIX pthread_attr_getstack
      and pthread_attr_getguardsize to find the location and size of the
@@ -2111,7 +2148,7 @@ init_random (void)
     {
       bool success = false;
 #ifndef WINDOWSNT
-      int fd = emacs_open ("/dev/urandom", O_RDONLY | O_BINARY, 0);
+      int fd = emacs_open ("/dev/urandom", O_RDONLY, 0);
       if (0 <= fd)
        {
          success = emacs_read (fd, &v, sizeof v) == sizeof v;
@@ -2291,7 +2328,6 @@ emacs_fopen (char const *file, char const *mode)
     switch (*m++)
       {
       case '+': omode = O_RDWR; break;
-      case 'b': bflag = O_BINARY; break;
       case 't': bflag = O_TEXT; break;
       default: /* Ignore.  */ break;
       }
@@ -3013,7 +3049,7 @@ system_process_attributes (Lisp_Object pid)
   struct timespec tnow, tstart, tboot, telapsed, us_time;
   double pcpu, pmem;
   Lisp_Object attrs = Qnil;
-  Lisp_Object cmd_str, decoded_cmd;
+  Lisp_Object decoded_cmd;
   ptrdiff_t count;
 
   CHECK_NUMBER_OR_FLOAT (pid);
@@ -3070,7 +3106,7 @@ system_process_attributes (Lisp_Object pid)
       else
        q = NULL;
       /* Command name is encoded in locale-coding-system; decode it.  */
-      cmd_str = make_unibyte_string (cmd, cmdsize);
+      AUTO_STRING_WITH_LEN (cmd_str, cmd, cmdsize);
       decoded_cmd = code_convert_string_norecord (cmd_str,
                                                  Vlocale_coding_system, 0);
       attrs = Fcons (Fcons (Qcomm, decoded_cmd), attrs);
@@ -3203,7 +3239,7 @@ system_process_attributes (Lisp_Object pid)
          sprintf (cmdline, "[%.*s]", cmdsize, cmd);
        }
       /* Command line is encoded in locale-coding-system; decode it.  */
-      cmd_str = make_unibyte_string (q, nread);
+      AUTO_STRING_WITH_LEN (cmd_str, q, nread);
       decoded_cmd = code_convert_string_norecord (cmd_str,
                                                  Vlocale_coding_system, 0);
       unbind_to (count, Qnil);
@@ -3338,13 +3374,13 @@ system_process_attributes (Lisp_Object pid)
                            make_float (100.0 / 0x8000 * pinfo.pr_pctmem)),
                     attrs);
 
-      decoded_cmd = (code_convert_string_norecord
-                    (build_unibyte_string (pinfo.pr_fname),
-                     Vlocale_coding_system, 0));
+      AUTO_STRING (fname, pinfo.pr_fname);
+      decoded_cmd = code_convert_string_norecord (fname,
+                                                 Vlocale_coding_system, 0);
       attrs = Fcons (Fcons (Qcomm, decoded_cmd), attrs);
-      decoded_cmd = (code_convert_string_norecord
-                    (build_unibyte_string (pinfo.pr_psargs),
-                     Vlocale_coding_system, 0));
+      AUTO_STRING (psargs, pinfo.pr_psargs);
+      decoded_cmd = code_convert_string_norecord (psargs,
+                                                 Vlocale_coding_system, 0);
       attrs = Fcons (Fcons (Qargs, decoded_cmd), attrs);
     }
   unbind_to (count, Qnil);
@@ -3409,9 +3445,8 @@ system_process_attributes (Lisp_Object pid)
   if (gr)
     attrs = Fcons (Fcons (Qgroup, build_string (gr->gr_name)), attrs);
 
-  decoded_comm = (code_convert_string_norecord
-                 (build_unibyte_string (proc.ki_comm),
-                  Vlocale_coding_system, 0));
+  AUTO_STRING (comm, proc.ki_comm);
+  decoded_comm = code_convert_string_norecord (comm, Vlocale_coding_system, 0);
 
   attrs = Fcons (Fcons (Qcomm, decoded_comm), attrs);
   {
@@ -3522,10 +3557,9 @@ system_process_attributes (Lisp_Object pid)
            args[i] = ' ';
        }
 
-      decoded_comm =
-       (code_convert_string_norecord
-        (build_unibyte_string (args),
-         Vlocale_coding_system, 0));
+      AUTO_STRING (comm, args);
+      decoded_comm = code_convert_string_norecord (comm,
+                                                  Vlocale_coding_system, 0);
 
       attrs = Fcons (Fcons (Qargs, decoded_comm), attrs);
     }
@@ -3533,6 +3567,146 @@ system_process_attributes (Lisp_Object pid)
   return attrs;
 }
 
+#elif defined DARWIN_OS
+
+static struct timespec
+timeval_to_timespec (struct timeval t)
+{
+  return make_timespec (t.tv_sec, t.tv_usec * 1000);
+}
+
+static Lisp_Object
+make_lisp_timeval (struct timeval t)
+{
+  return make_lisp_time (timeval_to_timespec (t));
+}
+
+Lisp_Object
+system_process_attributes (Lisp_Object pid)
+{
+  int proc_id;
+  int pagesize = getpagesize ();
+  unsigned long npages;
+  int fscale;
+  struct passwd *pw;
+  struct group  *gr;
+  char *ttyname;
+  size_t len;
+  char args[MAXPATHLEN];
+  struct timeval starttime;
+  struct timespec t, now;
+  struct rusage *rusage;
+  dev_t tdev;
+  uid_t uid;
+  gid_t gid;
+
+  int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID};
+  struct kinfo_proc proc;
+  size_t proclen = sizeof proc;
+
+  Lisp_Object attrs = Qnil;
+  Lisp_Object decoded_comm;
+
+  CHECK_NUMBER_OR_FLOAT (pid);
+  CONS_TO_INTEGER (pid, int, proc_id);
+  mib[3] = proc_id;
+
+  if (sysctl (mib, 4, &proc, &proclen, NULL, 0) != 0)
+    return attrs;
+
+  uid = proc.kp_eproc.e_ucred.cr_uid;
+  attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (uid)), attrs);
+
+  block_input ();
+  pw = getpwuid (uid);
+  unblock_input ();
+  if (pw)
+    attrs = Fcons (Fcons (Quser, build_string (pw->pw_name)), attrs);
+
+  gid = proc.kp_eproc.e_pcred.p_svgid;
+  attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (gid)), attrs);
+
+  block_input ();
+  gr = getgrgid (gid);
+  unblock_input ();
+  if (gr)
+    attrs = Fcons (Fcons (Qgroup, build_string (gr->gr_name)), attrs);
+
+  decoded_comm = (code_convert_string_norecord
+                 (build_unibyte_string (proc.kp_proc.p_comm),
+                  Vlocale_coding_system, 0));
+
+  attrs = Fcons (Fcons (Qcomm, decoded_comm), attrs);
+  {
+    char state[2] = {'\0', '\0'};
+    switch (proc.kp_proc.p_stat)
+      {
+      case SRUN:
+       state[0] = 'R';
+       break;
+
+      case SSLEEP:
+       state[0] = 'S';
+       break;
+
+      case SZOMB:
+       state[0] = 'Z';
+       break;
+
+      case SSTOP:
+       state[0] = 'T';
+       break;
+
+      case SIDL:
+       state[0] = 'I';
+       break;
+      }
+    attrs = Fcons (Fcons (Qstate, build_string (state)), attrs);
+  }
+
+  attrs = Fcons (Fcons (Qppid, make_fixnum_or_float (proc.kp_eproc.e_ppid)),
+                attrs);
+  attrs = Fcons (Fcons (Qpgrp, make_fixnum_or_float (proc.kp_eproc.e_pgid)),
+                attrs);
+
+  tdev = proc.kp_eproc.e_tdev;
+  block_input ();
+  ttyname = tdev == NODEV ? NULL : devname (tdev, S_IFCHR);
+  unblock_input ();
+  if (ttyname)
+    attrs = Fcons (Fcons (Qtty, build_string (ttyname)), attrs);
+
+  attrs = Fcons (Fcons (Qtpgid,   make_fixnum_or_float (proc.kp_eproc.e_tpgid)),
+                attrs);
+
+  rusage = proc.kp_proc.p_ru;
+  if (rusage)
+    {
+      attrs = Fcons (Fcons (Qminflt,  make_fixnum_or_float (rusage->ru_minflt)),
+                    attrs);
+      attrs = Fcons (Fcons (Qmajflt,  make_fixnum_or_float (rusage->ru_majflt)),
+                    attrs);
+
+      attrs = Fcons (Fcons (Qutime, make_lisp_timeval (rusage->ru_utime)),
+                    attrs);
+      attrs = Fcons (Fcons (Qstime, make_lisp_timeval (rusage->ru_stime)),
+                    attrs);
+      t = timespec_add (timeval_to_timespec (rusage->ru_utime),
+                       timeval_to_timespec (rusage->ru_stime));
+      attrs = Fcons (Fcons (Qtime, make_lisp_time (t)), attrs);
+    }
+
+  starttime = proc.kp_proc.p_starttime;
+  attrs = Fcons (Fcons (Qnice,  make_number (proc.kp_proc.p_nice)), attrs);
+  attrs = Fcons (Fcons (Qstart, make_lisp_timeval (starttime)), attrs);
+
+  now = current_timespec ();
+  t = timespec_sub (now, timeval_to_timespec (starttime));
+  attrs = Fcons (Fcons (Qetime, make_lisp_time (t)), attrs);
+
+  return attrs;
+}
+
 /* The WINDOWSNT implementation is in w32.c.
    The MSDOS implementation is in dosfns.c.  */
 #elif !defined (WINDOWSNT) && !defined (MSDOS)
index afd5413c644b7dc93855104d55a554d8a8fa886d..ea678dd4c25e792a9c755ab4bd287ef893b56f5a 100644 (file)
@@ -30,10 +30,6 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #define DOTEXE ".exe"
 
-extern void report_sheap_usage (int);
-
-extern int bss_sbrk_did_unexec;
-
 /*
 ** header for Windows executable files
 */
@@ -276,14 +272,12 @@ unexec (const char *outfile, const char *infile)
   int ret;
   int ret2;
 
-  report_sheap_usage (1);
-
   infile = add_exe_suffix_if_necessary (infile, infile_buffer);
   outfile = add_exe_suffix_if_necessary (outfile, outfile_buffer);
 
-  fd_in = emacs_open (infile, O_RDONLY | O_BINARY, 0);
+  fd_in = emacs_open (infile, O_RDONLY, 0);
   assert (fd_in >= 0);
-  fd_out = emacs_open (outfile, O_RDWR | O_TRUNC | O_CREAT | O_BINARY, 0755);
+  fd_out = emacs_open (outfile, O_RDWR | O_TRUNC | O_CREAT, 0755);
   assert (fd_out >= 0);
   for (;;)
     {
@@ -302,9 +296,7 @@ unexec (const char *outfile, const char *infile)
   ret = emacs_close (fd_in);
   assert (ret == 0);
 
-  bss_sbrk_did_unexec = 1;
   fixup_executable (fd_out);
-  bss_sbrk_did_unexec = 0;
 
   ret = emacs_close (fd_out);
   assert (ret == 0);
index 068d268808a8c76bd4d4eb773cb0b2ec704c4def..551915712fb95c40fa95eb8dee5da289afea39d0 100644 (file)
@@ -461,29 +461,6 @@ unexec (const char *new_name, const char *old_name)
          || !strcmp (old_section_names + new_shdr->sh_name, ".sdata")
          || !strcmp (old_section_names + new_shdr->sh_name, ".lit4")
          || !strcmp (old_section_names + new_shdr->sh_name, ".lit8")
-         /* The conditional bit below was in Oliva's original code
-            (1999-08-25) and seems to have been dropped by mistake
-            subsequently.  It prevents a crash at startup under X in
-            `IRIX64 6.5 6.5.17m', whether compiled on that release or
-            an earlier one.  It causes no trouble on the other ELF
-            platforms I could test (Irix 6.5.15m, Solaris 8, Debian
-            Potato x86, Debian Woody SPARC); however, it's reported
-            to cause crashes under some version of GNU/Linux.  It's
-            not yet clear what's changed in that Irix version to
-            cause the problem, or why the fix sometimes fails under
-            GNU/Linux.  There's probably no good reason to have
-            something Irix-specific here, but this will have to do
-            for now.  IRIX6_5 is the most specific macro we have to
-            test.  -- fx 2002-10-01
-
-            The issue _looks_ as though it's gone away on 6.5.18m,
-            but maybe it's still lurking, to be triggered by some
-            change in the binary.  It appears to concern the dynamic
-            loader, but I never got anywhere with an SGI support call
-            seeking clues.  -- fx 2002-11-29.  */
-#ifdef IRIX6_5
-         || !strcmp (old_section_names + new_shdr->sh_name, ".got")
-#endif
          || !strcmp (old_section_names + new_shdr->sh_name, ".sdata1")
          || !strcmp (old_section_names + new_shdr->sh_name, ".data1"))
        src = (caddr_t) old_shdr->sh_addr;
@@ -665,9 +642,6 @@ unexec (const char *new_name, const char *old_name)
              || !strcmp (old_section_names + shdr->sh_name, ".sdata")
              || !strcmp (old_section_names + shdr->sh_name, ".lit4")
              || !strcmp (old_section_names + shdr->sh_name, ".lit8")
-#ifdef IRIX6_5                 /* see above */
-             || !strcmp (old_section_names + shdr->sh_name, ".got")
-#endif
              || !strcmp (old_section_names + shdr->sh_name, ".sdata1")
              || !strcmp (old_section_names + shdr->sh_name, ".data1"))
            {
index d32050fd0152de2015100dec47d106fb3b61e614..7eeca3c8250c104fea6d17818b8c42a1958568a6 100644 (file)
@@ -51,9 +51,16 @@ char data_start[1] = { 1 };
 # endif
 #endif
 
-/* From gmalloc.c.  */
-extern void (* __after_morecore_hook) (void);
+#ifdef HAVE_MALLOC_H
+# include <malloc.h>
+#endif
+#ifndef __MALLOC_HOOK_VOLATILE
+# define __MALLOC_HOOK_VOLATILE volatile
+#endif
+#ifndef HAVE_MALLOC_H
 extern void *(*__morecore) (ptrdiff_t);
+extern void (*__MALLOC_HOOK_VOLATILE __after_morecore_hook) (void);
+#endif
 
 /* From ralloc.c.  */
 #ifdef REL_ALLOC
index c26f14593f1e0adf1170869253540cc5fac021c0..94aa7d891d5d3fd5fd8a2ae50cabc0640f47358b 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -7202,6 +7202,10 @@ int (PASCAL *pfn_recvfrom) (SOCKET s, char * buf, int len, int flags,
 int (PASCAL *pfn_sendto) (SOCKET s, const char * buf, int len, int flags,
                          const struct sockaddr * to, int tolen);
 
+int (PASCAL *pfn_getaddrinfo) (const char *, const char *,
+                              const struct addrinfo *, struct addrinfo **);
+void (PASCAL *pfn_freeaddrinfo) (struct addrinfo *);
+
 /* SetHandleInformation is only needed to make sockets non-inheritable. */
 BOOL (WINAPI *pfn_SetHandleInformation) (HANDLE object, DWORD mask, DWORD flags);
 #ifndef HANDLE_FLAG_INHERIT
@@ -7284,6 +7288,16 @@ init_winsock (int load_now)
       LOAD_PROC (sendto);
 #undef LOAD_PROC
 
+      /* Try loading functions not available before XP.  */
+      pfn_getaddrinfo = (void *) GetProcAddress (winsock_lib, "getaddrinfo");
+      pfn_freeaddrinfo = (void *) GetProcAddress (winsock_lib, "freeaddrinfo");
+      /* Paranoia: these two functions should go together, so if one
+        is absent, we cannot use the other.  */
+      if (pfn_getaddrinfo == NULL)
+       pfn_freeaddrinfo = NULL;
+      else if (pfn_freeaddrinfo == NULL)
+       pfn_getaddrinfo = NULL;
+
       /* specify version 1.1 of winsock */
       if (pfn_WSAStartup (0x101, &winsockData) == 0)
         {
@@ -7733,6 +7747,117 @@ sys_getpeername (int s, struct sockaddr *addr, int * namelen)
   return SOCKET_ERROR;
 }
 
+int
+sys_getaddrinfo (const char *node, const char *service,
+                const struct addrinfo *hints, struct addrinfo **res)
+{
+  int rc;
+
+  if (winsock_lib == NULL)
+    {
+      errno = ENETDOWN;
+      return SOCKET_ERROR;
+    }
+
+  check_errno ();
+  if (pfn_getaddrinfo)
+    rc = pfn_getaddrinfo (node, service, hints, res);
+  else
+    {
+      int port = 0;
+      struct hostent *host_info;
+      struct gai_storage {
+       struct addrinfo addrinfo;
+       struct sockaddr_in sockaddr_in;
+      } *gai_storage;
+
+      /* We don't (yet) support any flags, as Emacs doesn't need that.  */
+      if (hints && hints->ai_flags != 0)
+       return WSAEINVAL;
+      /* NODE cannot be NULL, since process.c has fallbacks for that.  */
+      if (!node)
+       return WSAHOST_NOT_FOUND;
+
+      if (service)
+       {
+         const char *protocol =
+           (hints && hints->ai_socktype == SOCK_DGRAM) ? "udp" : "tcp";
+         struct servent *srv = sys_getservbyname (service, protocol);
+
+         if (srv)
+           port = srv->s_port;
+         else if (*service >= '0' && *service <= '9')
+           {
+             char *endp;
+
+             port = strtoul (service, &endp, 10);
+             if (*endp || port > 65536)
+               return WSAHOST_NOT_FOUND;
+             port = sys_htons ((unsigned short) port);
+           }
+         else
+           return WSAHOST_NOT_FOUND;
+       }
+
+      gai_storage = xzalloc (sizeof *gai_storage);
+      gai_storage->sockaddr_in.sin_port = port;
+      host_info = sys_gethostbyname (node);
+      if (host_info)
+       {
+         memcpy (&gai_storage->sockaddr_in.sin_addr,
+                 host_info->h_addr, host_info->h_length);
+         gai_storage->sockaddr_in.sin_family = host_info->h_addrtype;
+       }
+      else
+       {
+         /* Attempt to interpret host as numeric inet address.  */
+         unsigned long numeric_addr = sys_inet_addr (node);
+
+         if (numeric_addr == -1)
+           {
+             free (gai_storage);
+             return WSAHOST_NOT_FOUND;
+           }
+
+         memcpy (&gai_storage->sockaddr_in.sin_addr, &numeric_addr,
+                 sizeof (gai_storage->sockaddr_in.sin_addr));
+         gai_storage->sockaddr_in.sin_family = (hints) ? hints->ai_family : 0;
+       }
+
+      gai_storage->addrinfo.ai_addr =
+       (struct sockaddr *)&gai_storage->sockaddr_in;
+      gai_storage->addrinfo.ai_addrlen = sizeof (gai_storage->sockaddr_in);
+      gai_storage->addrinfo.ai_protocol = (hints) ? hints->ai_protocol : 0;
+      gai_storage->addrinfo.ai_socktype = (hints) ? hints->ai_socktype : 0;
+      gai_storage->addrinfo.ai_family = gai_storage->sockaddr_in.sin_family;
+      gai_storage->addrinfo.ai_next = NULL;
+
+      *res = &gai_storage->addrinfo;
+      rc = 0;
+    }
+
+  return rc;
+}
+
+void
+sys_freeaddrinfo (struct addrinfo *ai)
+{
+  if (winsock_lib == NULL)
+    {
+      errno = ENETDOWN;
+      return;
+    }
+
+  check_errno ();
+  if (pfn_freeaddrinfo)
+    pfn_freeaddrinfo (ai);
+  else
+    {
+      eassert (ai->ai_next == NULL);
+      xfree (ai);
+    }
+}
+
 int
 sys_shutdown (int s, int how)
 {
@@ -8056,17 +8181,33 @@ sys_dup2 (int src, int dst)
       return -1;
     }
 
-  /* make sure we close the destination first if it's a pipe or socket */
-  if (src != dst && fd_info[dst].flags != 0)
+  /* MS _dup2 seems to have weird side effect when invoked with 2
+     identical arguments: an attempt to fclose the corresponding stdio
+     stream after that hangs (we do close standard streams in
+     init_ntproc).  Attempt to avoid that by not calling _dup2 that
+     way: if SRC is valid, we know that dup2 should be a no-op, so do
+     nothing and return DST.  */
+  if (src == dst)
+    {
+      if ((HANDLE)_get_osfhandle (src) == INVALID_HANDLE_VALUE)
+       {
+         errno = EBADF;
+         return -1;
+       }
+      return dst;
+    }
+
+  /* Make sure we close the destination first if it's a pipe or socket.  */
+  if (fd_info[dst].flags != 0)
     sys_close (dst);
 
   rc = _dup2 (src, dst);
   if (rc == 0)
     {
-      /* duplicate our internal info as well */
+      /* Duplicate our internal info as well.  */
       fd_info[dst] = fd_info[src];
     }
-  return rc;
+  return rc == 0 ? dst : rc;
 }
 
 int
@@ -8647,6 +8788,30 @@ sys_write (int fd, const void * buffer, unsigned int count)
       unsigned long nblock = 0;
       if (winsock_lib == NULL) emacs_abort ();
 
+      child_process *cp = fd_info[fd].cp;
+
+      /* If this is a non-blocking socket whose connection is in
+        progress or terminated with an error already, return the
+        proper error code to the caller. */
+      if (cp != NULL && (fd_info[fd].flags & FILE_CONNECT) != 0)
+       {
+         /* In case connection is in progress, ENOTCONN that would
+            result from calling pfn_send is not what callers expect. */
+         if (cp->status != STATUS_CONNECT_FAILED)
+           {
+             errno = EWOULDBLOCK;
+             return -1;
+           }
+         /* In case connection failed, use the actual error code
+            stashed by '_sys_wait_connect' in cp->errcode. */
+         else if (cp->errcode != 0)
+           {
+             pfn_WSASetLastError (cp->errcode);
+             set_errno ();
+             return -1;
+           }
+       }
+
       /* TODO: implement select() properly so non-blocking I/O works. */
       /* For now, make sure the write blocks.  */
       if (fd_info[fd].flags & FILE_NDELAY)
@@ -8654,6 +8819,13 @@ sys_write (int fd, const void * buffer, unsigned int count)
 
       nchars =  pfn_send (SOCK_HANDLE (fd), buffer, count, 0);
 
+      if (nchars == SOCKET_ERROR)
+        {
+         set_errno ();
+         DebPrint (("sys_write.send failed with error %d on socket %ld\n",
+                    pfn_WSAGetLastError (), SOCK_HANDLE (fd)));
+       }
+
       /* Set the socket back to non-blocking if it was before,
         for other operations that support it.  */
       if (fd_info[fd].flags & FILE_NDELAY)
@@ -8661,13 +8833,6 @@ sys_write (int fd, const void * buffer, unsigned int count)
          nblock = 1;
          pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock);
        }
-
-      if (nchars == SOCKET_ERROR)
-        {
-         DebPrint (("sys_write.send failed with error %d on socket %ld\n",
-                    pfn_WSAGetLastError (), SOCK_HANDLE (fd)));
-         set_errno ();
-       }
     }
   else
     {
@@ -8740,7 +8905,7 @@ sys_write (int fd, const void * buffer, unsigned int count)
 \f
 /* Emulation of SIOCGIFCONF and getifaddrs, see process.c.  */
 
-extern Lisp_Object conv_sockaddr_to_lisp (struct sockaddr *, int);
+extern Lisp_Object conv_sockaddr_to_lisp (struct sockaddr *, ptrdiff_t);
 
 /* Return information about network interface IFNAME, or about all
    interfaces (if IFNAME is nil).  */
index 512d20dd2424d14a8a14f14459cf75385169fa27..82ba4b1cf9ce9b98225ae73586869846a11caaeb 100644 (file)
@@ -759,6 +759,9 @@ initialize_w32_display (struct terminal *term, int *width, int *height)
 
   /* Setup w32_display_info structure for this frame. */
   w32_initialize_display_info (build_string ("Console"));
+
+  /* Set up the keyboard hook.  */
+  setup_w32_kbdhook ();
 }
 
 
index c57b5a188b238832858815a76a548db49c8dc8cf..ede8f6be2925da56aa327bc7c9cdb0a43f020da5 100644 (file)
@@ -20,6 +20,9 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 /* Added by Kevin Gallo */
 
 #include <config.h>
+/* Override API version to get the latest functionality.  */
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0600
 
 #include <signal.h>
 #include <stdio.h>
@@ -41,6 +44,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "coding.h"
 
 #include "w32common.h"
+#include "w32inevt.h"
 
 #ifdef WINDOWSNT
 #include <mbstring.h>
@@ -52,6 +56,8 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "w32.h"
 #endif
 
+#include <basetyps.h>
+#include <unknwn.h>
 #include <commctrl.h>
 #include <commdlg.h>
 #include <shellapi.h>
@@ -251,6 +257,38 @@ HINSTANCE hinst = NULL;
 static unsigned int sound_type = 0xFFFFFFFF;
 #define MB_EMACS_SILENT (0xFFFFFFFF - 1)
 
+/* Special virtual key code for indicating "any" key.  */
+#define VK_ANY 0xFF
+
+#ifndef WM_WTSSESSION_CHANGE
+/* 32-bit MinGW does not define these constants.  */
+# define WM_WTSSESSION_CHANGE  0x02B1
+# define WTS_SESSION_LOCK      0x7
+#endif
+
+/* Keyboard hook state data.  */
+static struct
+{
+  int hook_count; /* counter, if several windows are created */
+  HHOOK hook;     /* hook handle */
+  HWND console;   /* console window handle */
+
+  int lwindown;      /* Left Windows key currently pressed (and hooked) */
+  int rwindown;      /* Right Windows key currently pressed (and hooked) */
+  int winsdown;      /* Number of handled keys currently pressed */
+  int send_win_up;   /* Pass through the keyup for this Windows key press? */
+  int suppress_lone; /* Suppress simulated Windows keydown-keyup for this press? */
+  int winseen;       /* Windows keys seen during this press? */
+
+  char alt_hooked[256];  /* hook Alt+[this key]? */
+  char lwin_hooked[256]; /* hook left Win+[this key]? */
+  char rwin_hooked[256]; /* hook right Win+[this key]? */
+} kbdhook;
+typedef HWND (WINAPI *GetConsoleWindow_Proc) (void);
+
+/* stdin, from w32console.c */
+extern HANDLE keyboard_handle;
+
 /* Let the user specify a display with a frame.
    nil stands for the selected frame--or, if that is not a w32 frame,
    the first display on the list.  */
@@ -2074,6 +2112,350 @@ my_post_msg (W32Msg * wmsg, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
   post_msg (wmsg);
 }
 
+#ifdef WINDOWSNT
+/* The Windows keyboard hook callback.  */
+static LRESULT CALLBACK
+funhook (int code, WPARAM w, LPARAM l)
+{
+  INPUT inputs[2];
+  HWND focus = GetFocus ();
+  int console = 0;
+  KBDLLHOOKSTRUCT const *hs = (KBDLLHOOKSTRUCT*)l;
+
+  if (code < 0 || (hs->flags & LLKHF_INJECTED))
+    return CallNextHookEx (0, code, w, l);
+
+  /* The keyboard hook sees keyboard input on all processes (except
+     elevated ones, when Emacs itself is not elevated).  As such,
+     care must be taken to only filter out keyboard input when Emacs
+     itself is on the foreground.
+
+     GetFocus returns a non-NULL window if another application is active,
+     and always for a console Emacs process.  For a console Emacs, determine
+     focus by checking if the current foreground window is the process's
+     console window.  */
+  if (focus == NULL && kbdhook.console != NULL)
+    {
+      if (GetForegroundWindow () == kbdhook.console)
+       {
+         focus = kbdhook.console;
+         console = 1;
+       }
+    }
+
+  /* First, check hooks for the left and right Windows keys.  */
+  if (hs->vkCode == VK_LWIN || hs->vkCode == VK_RWIN)
+    {
+      if (focus != NULL && (w == WM_KEYDOWN || w == WM_SYSKEYDOWN))
+       {
+         /* The key is being pressed in an Emacs window.  */
+         if (hs->vkCode == VK_LWIN && !kbdhook.lwindown)
+           {
+             kbdhook.lwindown = 1;
+             kbdhook.winseen = 1;
+             kbdhook.winsdown++;
+           }
+         else if (hs->vkCode == VK_RWIN && !kbdhook.rwindown)
+           {
+             kbdhook.rwindown = 1;
+             kbdhook.winseen = 1;
+             kbdhook.winsdown++;
+           }
+         /* Returning 1 here drops the keypress without further processing.
+            If the keypress was allowed to go through, the normal Windows
+            hotkeys would take over.  */
+         return 1;
+       }
+      else if (kbdhook.winsdown > 0 && (w == WM_KEYUP || w == WM_SYSKEYUP))
+       {
+         /* A key that has been captured earlier is being released now.  */
+         if (hs->vkCode == VK_LWIN && kbdhook.lwindown)
+           {
+             kbdhook.lwindown = 0;
+             kbdhook.winsdown--;
+           }
+         else if (hs->vkCode == VK_RWIN && kbdhook.rwindown)
+           {
+             kbdhook.rwindown = 0;
+             kbdhook.winsdown--;
+           }
+         if (kbdhook.winsdown == 0 && kbdhook.winseen)
+           {
+             if (!kbdhook.suppress_lone)
+               {
+                 /* The Windows key was pressed, then released,
+                    without any other key pressed simultaneously.
+                    Normally, this opens the Start menu, but the user
+                    can prevent this by setting the
+                    w32-pass-[lr]window-to-system variable to
+                    NIL.  */
+                 if (hs->vkCode == VK_LWIN && !NILP (Vw32_pass_lwindow_to_system) ||
+                     hs->vkCode == VK_RWIN && !NILP (Vw32_pass_rwindow_to_system))
+                   {
+                     /* Not prevented - Simulate the keypress to the system.  */
+                     memset (inputs, 0, sizeof (inputs));
+                     inputs[0].type = INPUT_KEYBOARD;
+                     inputs[0].ki.wVk = hs->vkCode;
+                     inputs[0].ki.wScan = hs->vkCode;
+                     inputs[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
+                     inputs[0].ki.time = 0;
+                     inputs[1].type = INPUT_KEYBOARD;
+                     inputs[1].ki.wVk = hs->vkCode;
+                     inputs[1].ki.wScan = hs->vkCode;
+                     inputs[1].ki.dwFlags
+                       = KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP;
+                     inputs[1].ki.time = 0;
+                     SendInput (2, inputs, sizeof (INPUT));
+                   }
+                 else if (focus != NULL)
+                   {
+                     /* When not passed to system, must simulate privately to Emacs.    */
+                     PostMessage (focus, WM_SYSKEYDOWN, hs->vkCode, 0);
+                     PostMessage (focus, WM_SYSKEYUP, hs->vkCode, 0);
+                   }
+               }
+           }
+         if (kbdhook.winsdown == 0)
+           {
+             /* No Windows keys pressed anymore - clear the state flags.  */
+             kbdhook.suppress_lone = 0;
+             kbdhook.winseen = 0;
+           }
+         if (!kbdhook.send_win_up)
+           {
+             /* Swallow this release message, as not to confuse
+                applications who did not get to see the original
+                WM_KEYDOWN message either.  */
+             return 1;
+           }
+         kbdhook.send_win_up = 0;
+       }
+    }
+  else if (kbdhook.winsdown > 0)
+    {
+      /* Some other key was pressed while a captured Win key is down.
+        This is either an Emacs registered hotkey combination, or a
+        system hotkey.  */
+      if (kbdhook.lwindown && kbdhook.lwin_hooked[hs->vkCode] ||
+         kbdhook.rwindown && kbdhook.rwin_hooked[hs->vkCode])
+       {
+         /* Hooked Win-x combination, do not pass the keypress to Windows.  */
+         kbdhook.suppress_lone = 1;
+       }
+      else if (!kbdhook.suppress_lone)
+       {
+         /* Unhooked S-x combination; simulate the combination now
+            (will be seen by the system).  */
+         memset (inputs, 0, sizeof (inputs));
+         inputs[0].type = INPUT_KEYBOARD;
+         inputs[0].ki.wVk = kbdhook.lwindown ? VK_LWIN : VK_RWIN;
+         inputs[0].ki.wScan = kbdhook.lwindown ? VK_LWIN : VK_RWIN;
+         inputs[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
+         inputs[0].ki.time = 0;
+         inputs[1].type = INPUT_KEYBOARD;
+         inputs[1].ki.wVk = hs->vkCode;
+         inputs[1].ki.wScan = hs->scanCode;
+         inputs[1].ki.dwFlags =
+           (hs->flags & LLKHF_EXTENDED) ? KEYEVENTF_EXTENDEDKEY : 0;
+         inputs[1].ki.time = 0;
+         SendInput (2, inputs, sizeof (INPUT));
+         /* Stop processing of this Win sequence here; the
+            corresponding keyup messages will come through the normal
+            channel when the keys are released.  */
+         kbdhook.suppress_lone = 1;
+         kbdhook.send_win_up = 1;
+         /* Swallow the original keypress (as we want the Win key
+            down message simulated above to precede this real message).  */
+         return 1;
+       }
+    }
+
+  /* Next, handle the registered Alt-* combinations.  */
+  if ((w == WM_SYSKEYDOWN || w == WM_KEYDOWN)
+      && kbdhook.alt_hooked[hs->vkCode]
+      && focus != NULL
+      && (GetAsyncKeyState (VK_MENU) & 0x8000))
+    {
+      /* Prevent the system from getting this Alt-* key - suppress the
+        message and post as a normal keypress to Emacs.  */
+      if (console)
+       {
+         INPUT_RECORD rec;
+         DWORD n;
+         rec.EventType = KEY_EVENT;
+         rec.Event.KeyEvent.bKeyDown = TRUE;
+         rec.Event.KeyEvent.wVirtualKeyCode = hs->vkCode;
+         rec.Event.KeyEvent.wVirtualScanCode = hs->scanCode;
+         rec.Event.KeyEvent.uChar.UnicodeChar = 0;
+         rec.Event.KeyEvent.dwControlKeyState =
+           ((GetAsyncKeyState (VK_LMENU) & 0x8000) ? LEFT_ALT_PRESSED : 0)
+           | ((GetAsyncKeyState (VK_RMENU) & 0x8000) ? RIGHT_ALT_PRESSED : 0)
+           | ((GetAsyncKeyState (VK_LCONTROL) & 0x8000) ? LEFT_CTRL_PRESSED : 0)
+           | ((GetAsyncKeyState (VK_RCONTROL) & 0x8000) ? RIGHT_CTRL_PRESSED : 0)
+           | ((GetAsyncKeyState (VK_SHIFT) & 0x8000) ? SHIFT_PRESSED : 0)
+           | ((hs->flags & LLKHF_EXTENDED) ? ENHANCED_KEY : 0);
+         if (w32_console_unicode_input)
+           WriteConsoleInputW (keyboard_handle, &rec, 1, &n);
+         else
+           WriteConsoleInputA (keyboard_handle, &rec, 1, &n);
+       }
+      else
+       PostMessage (focus, w, hs->vkCode, 1 | (1<<29));
+      return 1;
+    }
+
+  /* The normal case - pass the message through.  */
+  return CallNextHookEx (0, code, w, l);
+}
+
+/* Set up the hook; can be called several times, with matching
+   remove_w32_kbdhook calls.  */
+void
+setup_w32_kbdhook (void)
+{
+  kbdhook.hook_count++;
+
+  /* Hooking is only available on NT architecture systems, as
+     indicated by the w32_kbdhook_active variable.  */
+  if (kbdhook.hook_count == 1 && w32_kbdhook_active)
+    {
+      /* Get the handle of the Emacs console window.  As the
+        GetConsoleWindow function is only available on Win2000+, a
+        hackish workaround described in Microsoft KB article 124103
+        (https://support.microsoft.com/en-us/kb/124103) is used for
+        NT 4 systems.  */
+      GetConsoleWindow_Proc get_console = (GetConsoleWindow_Proc)
+       GetProcAddress (GetModuleHandle ("kernel32.dll"), "GetConsoleWindow");
+
+      if (get_console != NULL)
+       kbdhook.console = get_console ();
+      else
+        {
+         GUID guid;
+         wchar_t *oldTitle = malloc (1024 * sizeof(wchar_t));
+         wchar_t newTitle[64];
+         int i;
+
+         CoCreateGuid (&guid);
+         StringFromGUID2 (&guid, newTitle, 64);
+         if (newTitle != NULL)
+           {
+             GetConsoleTitleW (oldTitle, 1024);
+             SetConsoleTitleW (newTitle);
+             for (i = 0; i < 25; i++)
+               {
+                 Sleep (40);
+                 kbdhook.console = FindWindowW (NULL, newTitle);
+                 if (kbdhook.console != NULL)
+                   break;
+               }
+             SetConsoleTitleW (oldTitle);
+           }
+         free (oldTitle);
+       }
+
+      /* Set the hook.  */
+      kbdhook.hook = SetWindowsHookEx (WH_KEYBOARD_LL, funhook,
+                                      GetModuleHandle (NULL), 0);
+    }
+}
+
+/* Remove the hook.  */
+void
+remove_w32_kbdhook (void)
+{
+  kbdhook.hook_count--;
+  if (kbdhook.hook_count == 0 && w32_kbdhook_active)
+    {
+      UnhookWindowsHookEx (kbdhook.hook);
+      kbdhook.hook = NULL;
+    }
+}
+#endif /* WINDOWSNT */
+
+/* Mark a specific key combination as hooked, preventing it to be
+   handled by the system.  */
+void
+hook_w32_key (int hook, int modifier, int vkey)
+{
+  char *tbl = NULL;
+
+  switch (modifier)
+    {
+    case VK_MENU:
+      tbl = kbdhook.alt_hooked;
+      break;
+    case VK_LWIN:
+      tbl = kbdhook.lwin_hooked;
+      break;
+    case VK_RWIN:
+      tbl = kbdhook.rwin_hooked;
+      break;
+    }
+
+  if (tbl != NULL && vkey >= 0 && vkey <= 255)
+    {
+       /* VK_ANY hooks all keys for this modifier */
+       if (vkey == VK_ANY)
+        memset (tbl, (char)hook, 256);
+       else
+        tbl[vkey] = (char)hook;
+       /* Alt-<modifier>s should go through */
+       kbdhook.alt_hooked[VK_MENU] = 0;
+       kbdhook.alt_hooked[VK_LMENU] = 0;
+       kbdhook.alt_hooked[VK_RMENU] = 0;
+       kbdhook.alt_hooked[VK_CONTROL] = 0;
+       kbdhook.alt_hooked[VK_LCONTROL] = 0;
+       kbdhook.alt_hooked[VK_RCONTROL] = 0;
+       kbdhook.alt_hooked[VK_SHIFT] = 0;
+       kbdhook.alt_hooked[VK_LSHIFT] = 0;
+       kbdhook.alt_hooked[VK_RSHIFT] = 0;
+    }
+}
+
+/* Check the current Win key pressed state.  */
+int
+check_w32_winkey_state (int vkey)
+{
+  /* The hook code handles grabbing of the Windows keys and Alt-* key
+     combinations reserved by the system.  Handling Alt is a bit
+     easier, as Windows intends Alt-* shortcuts for application use in
+     Windows; hotkeys such as Alt-tab and Alt-escape are special
+     cases.  Win-* hotkeys, on the other hand, are primarily meant for
+     system use.
+
+     As a result, when we want Emacs to be able to grab the Win-*
+     keys, we must swallow all Win key presses in a low-level keyboard
+     hook.  Unfortunately, this means that the Emacs window procedure
+     (and console input handler) never see the keypresses either.
+     Thus, to check the modifier states properly, Emacs code must use
+     the check_w32_winkey_state function that uses the flags directly
+     updated by the hook callback.  */
+  switch (vkey)
+    {
+    case VK_LWIN:
+      return kbdhook.lwindown;
+    case VK_RWIN:
+      return kbdhook.rwindown;
+    }
+  return 0;
+}
+
+/* Reset the keyboard hook state.  Locking the workstation with Win-L
+   leaves the Win key(s) "down" from the hook's point of view - the
+   keyup event is never seen.  Thus, this function must be called when
+   the system is locked.  */
+void
+reset_w32_kbdhook_state (void)
+{
+  kbdhook.lwindown = 0;
+  kbdhook.rwindown = 0;
+  kbdhook.winsdown = 0;
+  kbdhook.send_win_up = 0;
+  kbdhook.suppress_lone = 0;
+  kbdhook.winseen = 0;
+}
+
 /* GetKeyState and MapVirtualKey on Windows 95 do not actually distinguish
    between left and right keys as advertised.  We test for this
    support dynamically, and set a flag when the support is absent.  If
@@ -2248,6 +2630,8 @@ modifier_set (int vkey)
       else
        return (GetKeyState (vkey) & 0x1);
     }
+  if (w32_kbdhook_active && (vkey == VK_LWIN || vkey == VK_RWIN))
+    return check_w32_winkey_state (vkey);
 
   if (!modifiers_recorded)
     return (GetKeyState (vkey) & 0x8000);
@@ -2390,7 +2774,9 @@ map_keypad_keys (unsigned int virt_key, unsigned int extended)
 /* List of special key combinations which w32 would normally capture,
    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.  */
+   key code and modifier combination to capture.
+   Note: This code is not used if keyboard hooks are active
+   (Windows 2000 and later).  */
 static Lisp_Object w32_grabbed_keys;
 
 #define HOTKEY(vk, mods)      make_number (((vk) & 255) | ((mods) << 8))
@@ -3476,7 +3862,7 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
       switch (wParam)
        {
        case VK_LWIN:
-         if (NILP (Vw32_pass_lwindow_to_system))
+         if (!w32_kbdhook_active && NILP (Vw32_pass_lwindow_to_system))
            {
              /* Prevent system from acting on keyup (which opens the
                 Start menu if no other key was pressed) by simulating a
@@ -3495,7 +3881,7 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
            return 0;
          break;
        case VK_RWIN:
-         if (NILP (Vw32_pass_rwindow_to_system))
+         if (!w32_kbdhook_active && NILP (Vw32_pass_rwindow_to_system))
            {
              if (GetAsyncKeyState (wParam) & 1)
                {
@@ -4352,10 +4738,12 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
     case WM_SETFOCUS:
       dpyinfo->faked_key = 0;
       reset_modifiers ();
-      register_hot_keys (hwnd);
+      if (!w32_kbdhook_active)
+       register_hot_keys (hwnd);
       goto command;
     case WM_KILLFOCUS:
-      unregister_hot_keys (hwnd);
+      if (!w32_kbdhook_active)
+       unregister_hot_keys (hwnd);
       button_state = 0;
       ReleaseCapture ();
       /* Relinquish the system caret.  */
@@ -4384,10 +4772,24 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
       my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
       goto dflt;
 
+#ifdef WINDOWSNT
+    case WM_CREATE:
+      setup_w32_kbdhook ();
+      goto dflt;
+#endif
+
     case WM_DESTROY:
+#ifdef WINDOWSNT
+      remove_w32_kbdhook ();
+#endif
       CoUninitialize ();
       return 0;
 
+    case WM_WTSSESSION_CHANGE:
+      if (wParam == WTS_SESSION_LOCK)
+        reset_w32_kbdhook_state ();
+      goto dflt;
+
     case WM_CLOSE:
       wmsg.dwModifiers = w32_get_modifiers ();
       my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
@@ -4880,7 +5282,8 @@ x_default_font_parameter (struct frame *f, Lisp_Object parms)
     {
       /* Remember the explicit font parameter, so we can re-apply it after
         we've applied the `default' face settings.  */
-      x_set_frame_parameters (f, Fcons (Fcons (Qfont_param, font_param), Qnil));
+      x_set_frame_parameters (f, Fcons (Fcons (Qfont_parameter, font_param),
+                                       Qnil));
     }
   x_default_parameter (f, parms, Qfont, font, "font", "Font", RES_TYPE_STRING);
 }
@@ -6056,8 +6459,6 @@ no value of TYPE (always string in the MS Windows case).  */)
                                Tool tips
  ***********************************************************************/
 
-static Lisp_Object x_create_tip_frame (struct w32_display_info *,
-                                      Lisp_Object, Lisp_Object);
 static void compute_tip_xy (struct frame *, Lisp_Object, Lisp_Object,
                            Lisp_Object, int, int, int *, int *);
 
@@ -6092,8 +6493,7 @@ unwind_create_tip_frame (Lisp_Object frame)
 
 
 /* Create a frame for a tooltip on the display described by DPYINFO.
-   PARMS is a list of frame parameters.  TEXT is the string to
-   display in the tip frame.  Value is the frame.
+   PARMS is a list of frame parameters.  Value is the frame.
 
    Note that functions called here, esp. x_default_parameter can
    signal errors, for instance when a specified color name is
@@ -6101,8 +6501,7 @@ unwind_create_tip_frame (Lisp_Object frame)
    when this happens.  */
 
 static Lisp_Object
-x_create_tip_frame (struct w32_display_info *dpyinfo,
-                   Lisp_Object parms, Lisp_Object text)
+x_create_tip_frame (struct w32_display_info *dpyinfo, Lisp_Object parms)
 {
   struct frame *f;
   Lisp_Object frame;
@@ -6111,8 +6510,6 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   ptrdiff_t count = SPECPDL_INDEX ();
   struct kboard *kb;
   bool face_change_before = face_change;
-  Lisp_Object buffer;
-  struct buffer *old_buffer;
   int x_width = 0, x_height = 0;
 
   /* Use this general default value to start with until we know if
@@ -6136,23 +6533,9 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   frame = Qnil;
   /* Make a frame without minibuffer nor mode-line.  */
   f = make_frame (false);
-  f->wants_modeline = 0;
+  f->wants_modeline = false;
   XSETFRAME (frame, f);
 
-  AUTO_STRING (tip, " *tip*");
-  buffer = Fget_buffer_create (tip);
-  /* Use set_window_buffer instead of Fset_window_buffer (see
-     discussion of bug#11984, bug#12025, bug#12026).  */
-  set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, false, false);
-  old_buffer = current_buffer;
-  set_buffer_internal_1 (XBUFFER (buffer));
-  bset_truncate_lines (current_buffer, Qnil);
-  specbind (Qinhibit_read_only, Qt);
-  specbind (Qinhibit_modification_hooks, Qt);
-  Ferase_buffer ();
-  Finsert (1, &text);
-  set_buffer_internal_1 (old_buffer);
-
   record_unwind_protect (unwind_create_tip_frame, frame);
 
   /* By setting the output method, we're essentially saying that
@@ -6186,7 +6569,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
     {
       fset_name (f, name);
       f->explicit_name = true;
-      /* use the frame's title when getting resources for this frame.  */
+      /* Use the frame's title when getting resources for this frame.  */
       specbind (Qx_resource_name, name);
     }
 
@@ -6216,14 +6599,10 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
        parms = Fcons (Fcons (Qinternal_border_width, value),
                       parms);
     }
+
   x_default_parameter (f, parms, Qinternal_border_width, make_number (1),
                       "internalBorderWidth", "internalBorderWidth",
                       RES_TYPE_NUMBER);
-  x_default_parameter (f, parms, Qright_divider_width, make_number (0),
-                      NULL, NULL, RES_TYPE_NUMBER);
-  x_default_parameter (f, parms, Qbottom_divider_width, make_number (0),
-                      NULL, NULL, RES_TYPE_NUMBER);
-
   /* Also do the stuff which must be set before the window exists.  */
   x_default_parameter (f, parms, Qforeground_color, build_string ("black"),
                       "foreground", "Foreground", RES_TYPE_STRING);
@@ -6250,6 +6629,9 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   f->fringe_cols = 0;
   f->left_fringe_width = 0;
   f->right_fringe_width = 0;
+  /* No dividers on tip frame.  */
+  f->right_divider_width = 0;
+  f->bottom_divider_width = 0;
 
   block_input ();
   my_create_tip_window (f);
@@ -6276,7 +6658,6 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
   SET_FRAME_LINES (f, 0);
   adjust_frame_size (f, width * FRAME_COLUMN_WIDTH (f),
                     height * FRAME_LINE_HEIGHT (f), 0, true, Qtip_frame);
-
   /* Add `tooltip' frame parameter's default value. */
   if (NILP (Fframe_parameter (frame, Qtooltip)))
     Fmodify_frame_parameters (frame, Fcons (Fcons (Qtooltip, Qt), Qnil));
@@ -6294,8 +6675,6 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
     Lisp_Object fg = Fframe_parameter (frame, Qforeground_color);
     Lisp_Object colors = Qnil;
 
-    /* Set tip_frame here, so that */
-    tip_frame = frame;
     call2 (Qface_set_after_frame_default, frame, Qnil);
 
     if (!EQ (bg, Fframe_parameter (frame, Qbackground_color)))
@@ -6427,6 +6806,48 @@ compute_tip_xy (struct frame *f,
     *root_x = min_x;
 }
 
+/* Hide tooltip.  Delete its frame if DELETE is true.  */
+static Lisp_Object
+x_hide_tip (bool delete)
+{
+  if (!NILP (tip_timer))
+    {
+      call1 (Qcancel_timer, tip_timer);
+      tip_timer = Qnil;
+    }
+
+  if (NILP (tip_frame)
+      || (!delete && FRAMEP (tip_frame)
+         && !FRAME_VISIBLE_P (XFRAME (tip_frame))))
+    return Qnil;
+  else
+    {
+      ptrdiff_t count;
+      Lisp_Object was_open = Qnil;
+
+      count = SPECPDL_INDEX ();
+      specbind (Qinhibit_redisplay, Qt);
+      specbind (Qinhibit_quit, Qt);
+
+      if (FRAMEP (tip_frame))
+       {
+         if (delete)
+           {
+             delete_frame (tip_frame, Qnil);
+             tip_frame = Qnil;
+           }
+         else
+           x_make_frame_invisible (XFRAME (tip_frame));
+
+         was_open = Qt;
+       }
+      else
+       tip_frame = Qnil;
+
+      return unbind_to (count, was_open);
+    }
+}
+
 
 DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
        doc: /* Show STRING in a \"tooltip\" window on frame FRAME.
@@ -6460,15 +6881,16 @@ A tooltip's maximum size is specified by `x-max-tooltip-size'.
 Text larger than the specified size is clipped.  */)
   (Lisp_Object string, Lisp_Object frame, Lisp_Object parms, Lisp_Object timeout, Lisp_Object dx, Lisp_Object dy)
 {
-  struct frame *f;
+  struct frame *f, *tip_f;
   struct window *w;
   int root_x, root_y;
   struct buffer *old_buffer;
   struct text_pos pos;
   int i, width, height;
-  bool seen_reversed_p;
   int old_windows_or_buffers_changed = windows_or_buffers_changed;
   ptrdiff_t count = SPECPDL_INDEX ();
+  ptrdiff_t count_1;
+  Lisp_Object window, size;
 
   specbind (Qinhibit_redisplay, Qt);
 
@@ -6492,91 +6914,155 @@ Text larger than the specified size is clipped.  */)
   if (NILP (last_show_tip_args))
     last_show_tip_args = Fmake_vector (make_number (3), Qnil);
 
-  if (!NILP (tip_frame))
+  if (FRAMEP (tip_frame) && FRAME_LIVE_P (XFRAME (tip_frame)))
     {
       Lisp_Object last_string = AREF (last_show_tip_args, 0);
       Lisp_Object last_frame = AREF (last_show_tip_args, 1);
       Lisp_Object last_parms = AREF (last_show_tip_args, 2);
 
-      if (EQ (frame, last_frame)
-         && !NILP (Fequal (last_string, string))
+      if (FRAME_VISIBLE_P (XFRAME (tip_frame))
+         && EQ (frame, last_frame)
+         && !NILP (Fequal_including_properties (last_string, string))
          && !NILP (Fequal (last_parms, parms)))
        {
-         struct frame *f = XFRAME (tip_frame);
-
          /* Only DX and DY have changed.  */
+         tip_f = XFRAME (tip_frame);
          if (!NILP (tip_timer))
            {
              Lisp_Object timer = tip_timer;
+
              tip_timer = Qnil;
              call1 (Qcancel_timer, timer);
            }
 
          block_input ();
-         compute_tip_xy (f, parms, dx, dy, FRAME_PIXEL_WIDTH (f),
-                         FRAME_PIXEL_HEIGHT (f), &root_x, &root_y);
+         compute_tip_xy (tip_f, parms, dx, dy, FRAME_PIXEL_WIDTH (tip_f),
+                         FRAME_PIXEL_HEIGHT (tip_f), &root_x, &root_y);
 
          /* Put tooltip in topmost group and in position.  */
-         SetWindowPos (FRAME_W32_WINDOW (f), HWND_TOPMOST,
+         SetWindowPos (FRAME_W32_WINDOW (tip_f), HWND_TOPMOST,
                        root_x, root_y, 0, 0,
                        SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOOWNERZORDER);
 
          /* Ensure tooltip is on top of other topmost windows (eg menus).  */
-         SetWindowPos (FRAME_W32_WINDOW (f), HWND_TOP,
+         SetWindowPos (FRAME_W32_WINDOW (tip_f), HWND_TOP,
                        0, 0, 0, 0,
                        SWP_NOMOVE | SWP_NOSIZE
                        | SWP_NOACTIVATE | SWP_NOOWNERZORDER);
 
+         /* Let redisplay know that we have made the frame visible already.  */
+         SET_FRAME_VISIBLE (tip_f, 1);
+         ShowWindow (FRAME_W32_WINDOW (tip_f), SW_SHOWNOACTIVATE);
          unblock_input ();
+
          goto start_timer;
        }
-    }
+      else if (tooltip_reuse_hidden_frame && EQ (frame, last_frame))
+       {
+         bool delete = false;
+         Lisp_Object tail, elt, parm, last;
+
+         /* Check if every parameter in PARMS has the same value in
+            last_parms.  This may destruct last_parms which, however,
+            will be recreated below.  */
+         for (tail = parms; CONSP (tail); tail = XCDR (tail))
+           {
+             elt = XCAR (tail);
+             parm = Fcar (elt);
+             /* The left, top, right and bottom parameters are handled
+                by compute_tip_xy so they can be ignored here.  */
+             if (!EQ (parm, Qleft) && !EQ (parm, Qtop)
+                 && !EQ (parm, Qright) && !EQ (parm, Qbottom))
+               {
+                 last = Fassq (parm, last_parms);
+                 if (NILP (Fequal (Fcdr (elt), Fcdr (last))))
+                   {
+                     /* We lost, delete the old tooltip.  */
+                     delete = true;
+                     break;
+                   }
+                 else
+                   last_parms = call2 (Qassq_delete_all, parm, last_parms);
+               }
+             else
+               last_parms = call2 (Qassq_delete_all, parm, last_parms);
+           }
 
-  /* Hide a previous tip, if any.  */
-  Fx_hide_tip ();
+         /* Now check if there's a parameter left in last_parms with a
+            non-nil value.  */
+         for (tail = last_parms; CONSP (tail); tail = XCDR (tail))
+           {
+             elt = XCAR (tail);
+             parm = Fcar (elt);
+             if (!EQ (parm, Qleft) && !EQ (parm, Qtop) && !EQ (parm, Qright)
+                 && !EQ (parm, Qbottom) && !NILP (Fcdr (elt)))
+               {
+                 /* We lost, delete the old tooltip.  */
+                 delete = true;
+                 break;
+               }
+           }
+
+         x_hide_tip (delete);
+       }
+      else
+       x_hide_tip (true);
+    }
+  else
+    x_hide_tip (true);
 
   ASET (last_show_tip_args, 0, string);
   ASET (last_show_tip_args, 1, frame);
   ASET (last_show_tip_args, 2, parms);
 
-  /* Add default values to frame parameters.  */
-  if (NILP (Fassq (Qname, parms)))
-    parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
-  if (NILP (Fassq (Qinternal_border_width, parms)))
-    parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms);
-  if (NILP (Fassq (Qright_divider_width, parms)))
-    parms = Fcons (Fcons (Qright_divider_width, make_number (0)), parms);
-  if (NILP (Fassq (Qbottom_divider_width, parms)))
-    parms = Fcons (Fcons (Qbottom_divider_width, make_number (0)), parms);
-  if (NILP (Fassq (Qborder_width, parms)))
-    parms = Fcons (Fcons (Qborder_width, make_number (1)), parms);
-  if (NILP (Fassq (Qborder_color, parms)))
-    parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms);
-  if (NILP (Fassq (Qbackground_color, parms)))
-    parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
-                  parms);
-
   /* Block input until the tip has been fully drawn, to avoid crashes
      when drawing tips in menus.  */
   block_input ();
 
-  /* Create a frame for the tooltip, and record it in the global
-     variable tip_frame.  */
-  frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, string);
-  f = XFRAME (frame);
+  if (!FRAMEP (tip_frame) || !FRAME_LIVE_P (XFRAME (tip_frame)))
+    {
+      /* Add default values to frame parameters.  */
+      if (NILP (Fassq (Qname, parms)))
+       parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
+      if (NILP (Fassq (Qinternal_border_width, parms)))
+       parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms);
+      if (NILP (Fassq (Qborder_width, parms)))
+       parms = Fcons (Fcons (Qborder_width, make_number (1)), parms);
+      if (NILP (Fassq (Qborder_color, parms)))
+       parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms);
+      if (NILP (Fassq (Qbackground_color, parms)))
+       parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
+                      parms);
+
+      /* Create a frame for the tooltip, and record it in the global
+        variable tip_frame.  */
+      if (NILP (tip_frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms)))
+       {
+         /* Creating the tip frame failed.  */
+         unblock_input ();
+         return unbind_to (count, Qnil);
+       }
+    }
+
+  tip_f = XFRAME (tip_frame);
+  window = FRAME_ROOT_WINDOW (tip_f);
+  AUTO_STRING (tip, " *tip*");
+  set_window_buffer (window, Fget_buffer_create (tip), false, false);
+  w = XWINDOW (window);
+  w->pseudo_window_p = true;
 
-  /* Set up the frame's root window.  */
-  w = XWINDOW (FRAME_ROOT_WINDOW (f));
+  /* Set up the frame's root window.  Note: The following code does not
+     try to size the window or its frame correctly.  Its only purpose is
+     to make the subsequent text size calculations work.  The right
+     sizes should get installed when the toolkit gets back to us.  */
   w->left_col = 0;
   w->top_line = 0;
   w->pixel_left = 0;
   w->pixel_top = 0;
 
   if (CONSP (Vx_max_tooltip_size)
-      && INTEGERP (XCAR (Vx_max_tooltip_size))
-      && XINT (XCAR (Vx_max_tooltip_size)) > 0
-      && INTEGERP (XCDR (Vx_max_tooltip_size))
-      && XINT (XCDR (Vx_max_tooltip_size)) > 0)
+      && RANGED_INTEGERP (1, XCAR (Vx_max_tooltip_size), INT_MAX)
+      && RANGED_INTEGERP (1, XCDR (Vx_max_tooltip_size), INT_MAX))
     {
       w->total_cols = XFASTINT (XCAR (Vx_max_tooltip_size));
       w->total_lines = XFASTINT (XCDR (Vx_max_tooltip_size));
@@ -6587,164 +7073,71 @@ Text larger than the specified size is clipped.  */)
       w->total_lines = 40;
     }
 
-  w->pixel_width = w->total_cols * FRAME_COLUMN_WIDTH (f);
-  w->pixel_height = w->total_lines * FRAME_LINE_HEIGHT (f);
-
-  FRAME_TOTAL_COLS (f) = WINDOW_TOTAL_COLS (w);
-  adjust_frame_glyphs (f);
-  w->pseudo_window_p = true;
+  w->pixel_width = w->total_cols * FRAME_COLUMN_WIDTH (tip_f);
+  w->pixel_height = w->total_lines * FRAME_LINE_HEIGHT (tip_f);
+  FRAME_TOTAL_COLS (tip_f) = WINDOW_TOTAL_COLS (w);
+  adjust_frame_glyphs (tip_f);
 
-  /* Display the tooltip text in a temporary buffer.  */
+  /* Insert STRING into the root window's buffer and fit the frame to
+     the buffer.  */
+  count_1 = SPECPDL_INDEX ();
   old_buffer = current_buffer;
-  set_buffer_internal_1 (XBUFFER (XWINDOW (FRAME_ROOT_WINDOW (f))->contents));
+  set_buffer_internal_1 (XBUFFER (w->contents));
   bset_truncate_lines (current_buffer, Qnil);
+  specbind (Qinhibit_read_only, Qt);
+  specbind (Qinhibit_modification_hooks, Qt);
+  specbind (Qinhibit_point_motion_hooks, Qt);
+  Ferase_buffer ();
+  Finsert (1, &string);
   clear_glyph_matrix (w->desired_matrix);
   clear_glyph_matrix (w->current_matrix);
   SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
-  try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
-
-  /* Compute width and height of the tooltip.  */
-  width = height = 0;
-  seen_reversed_p = false;
-  for (i = 0; i < w->desired_matrix->nrows; ++i)
-    {
-      struct glyph_row *row = &w->desired_matrix->rows[i];
-      struct glyph *last;
-      int row_width;
-
-      /* Stop at the first empty row at the end.  */
-      if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
-       break;
-
-      /* Let the row go over the full width of the frame.  */
-      row->full_width_p = true;
-
-      row_width = row->pixel_width;
-      if (row->used[TEXT_AREA])
-       {
-         if (!row->reversed_p)
-           {
-             /* There's a glyph at the end of rows that is used to
-                place the cursor there.  Don't include the width of
-                this glyph.  */
-             last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
-             if (NILP (last->object))
-               row_width -= last->pixel_width;
-           }
-         else
-           {
-             /* There could be a stretch glyph at the beginning of R2L
-                rows that is produced by extend_face_to_end_of_line.
-                Don't count that glyph.  */
-             struct glyph *g = row->glyphs[TEXT_AREA];
-
-             if (g->type == STRETCH_GLYPH && NILP (g->object))
-               {
-                 row_width -= g->pixel_width;
-                 seen_reversed_p = true;
-               }
-           }
-       }
-
-      height += row->height;
-      width = max (width, row_width);
-    }
-
-  /* If we've seen partial-length R2L rows, we need to re-adjust the
-     tool-tip frame width and redisplay it again, to avoid over-wide
-     tips due to the stretch glyph that extends R2L lines to full
-     width of the frame.  */
-  if (seen_reversed_p)
-    {
-      /* PXW: Why do we do the pixel-to-cols conversion only if
-        seen_reversed_p holds?  Don't we have to set other fields of
-        the window/frame structure?
-
-        w->total_cols and FRAME_TOTAL_COLS want the width in columns,
-        not in pixels.  */
-      w->pixel_width = width;
-      width /= WINDOW_FRAME_COLUMN_WIDTH (w);
-      w->total_cols = width;
-      FRAME_TOTAL_COLS (f) = width;
-      SET_FRAME_WIDTH (f, width);
-      adjust_frame_glyphs (f);
-      w->pseudo_window_p = 1;
-      clear_glyph_matrix (w->desired_matrix);
-      clear_glyph_matrix (w->current_matrix);
-      try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
-      width = height = 0;
-      /* Recompute width and height of the tooltip.  */
-      for (i = 0; i < w->desired_matrix->nrows; ++i)
-       {
-         struct glyph_row *row = &w->desired_matrix->rows[i];
-         struct glyph *last;
-         int row_width;
-
-         if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
-           break;
-         row->full_width_p = true;
-         row_width = row->pixel_width;
-         if (row->used[TEXT_AREA] && !row->reversed_p)
-           {
-             last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
-             if (NILP (last->object))
-               row_width -= last->pixel_width;
-           }
-
-         height += row->height;
-         width = max (width, row_width);
-       }
-    }
-
-  /* Add the frame's internal border to the width and height the w32
-     window should have.  */
-  height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
-  width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
-
-  /* Move the tooltip window where the mouse pointer is.  Resize and
-     show it.
-
-     PXW: This should use the frame's pixel coordinates.  */
-  compute_tip_xy (f, parms, dx, dy, width, height, &root_x, &root_y);
-
+  try_window (window, pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
+  /* Calculate size of tooltip window.  */
+  size = Fwindow_text_pixel_size (window, Qnil, Qnil, Qnil,
+                                 make_number (w->pixel_height), Qnil);
+  /* Add the frame's internal border to calculated size.  */
+  width = XINT (Fcar (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+  height = XINT (Fcdr (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+  /* Calculate position of tooltip frame.  */
+  compute_tip_xy (tip_f, parms, dx, dy, width, height, &root_x, &root_y);
+
+  /* Show tooltip frame.  */
   {
-    /* Adjust Window size to take border into account.  */
     RECT rect;
+    int pad = (NUMBERP (Vw32_tooltip_extra_pixels)
+              ? max (0, XINT (Vw32_tooltip_extra_pixels))
+              : FRAME_COLUMN_WIDTH (tip_f));
+
     rect.left = rect.top = 0;
     rect.right = width;
     rect.bottom = height;
-    AdjustWindowRect (&rect, f->output_data.w32->dwStyle, false);
-
-    /* Position and size tooltip, and put it in the topmost group.
-       The add-on of FRAME_COLUMN_WIDTH to the 5th argument is a
-       peculiarity of w32 display: without it, some fonts cause the
-       last character of the tip to be truncated or wrapped around to
-       the next line.  */
-    SetWindowPos (FRAME_W32_WINDOW (f), HWND_TOPMOST,
+    AdjustWindowRect (&rect, tip_f->output_data.w32->dwStyle,
+                     FRAME_EXTERNAL_MENU_BAR (tip_f));
+
+    /* Position and size tooltip and put it in the topmost group.  */
+    SetWindowPos (FRAME_W32_WINDOW (tip_f), HWND_TOPMOST,
                  root_x, root_y,
-                 rect.right - rect.left + FRAME_COLUMN_WIDTH (f),
+                 rect.right - rect.left + pad,
                  rect.bottom - rect.top, SWP_NOACTIVATE | SWP_NOOWNERZORDER);
 
     /* Ensure tooltip is on top of other topmost windows (eg menus).  */
-    SetWindowPos (FRAME_W32_WINDOW (f), HWND_TOP,
+    SetWindowPos (FRAME_W32_WINDOW (tip_f), HWND_TOP,
                  0, 0, 0, 0,
                  SWP_NOMOVE | SWP_NOSIZE
                  | SWP_NOACTIVATE | SWP_NOOWNERZORDER);
 
     /* Let redisplay know that we have made the frame visible already.  */
-    SET_FRAME_VISIBLE (f, 1);
+    SET_FRAME_VISIBLE (tip_f, 1);
 
-    ShowWindow (FRAME_W32_WINDOW (f), SW_SHOWNOACTIVATE);
+    ShowWindow (FRAME_W32_WINDOW (tip_f), SW_SHOWNOACTIVATE);
   }
 
-  /* Draw into the window.  */
   w->must_be_updated_p = true;
   update_single_window (w);
-
-  unblock_input ();
-
-  /* Restore original current buffer.  */
   set_buffer_internal_1 (old_buffer);
+  unbind_to (count_1, Qnil);
+  unblock_input ();
   windows_or_buffers_changed = old_windows_or_buffers_changed;
 
  start_timer:
@@ -6761,31 +7154,7 @@ DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0,
 Value is t if tooltip was open, nil otherwise.  */)
   (void)
 {
-  ptrdiff_t count;
-  Lisp_Object deleted, frame, timer;
-
-  /* Return quickly if nothing to do.  */
-  if (NILP (tip_timer) && NILP (tip_frame))
-    return Qnil;
-
-  frame = tip_frame;
-  timer = tip_timer;
-  tip_frame = tip_timer = deleted = Qnil;
-
-  count = SPECPDL_INDEX ();
-  specbind (Qinhibit_redisplay, Qt);
-  specbind (Qinhibit_quit, Qt);
-
-  if (!NILP (timer))
-    call1 (Qcancel_timer, timer);
-
-  if (FRAMEP (frame))
-    {
-      delete_frame (frame, Qnil);
-      deleted = Qt;
-    }
-
-  return unbind_to (count, deleted);
+  return x_hide_tip (!tooltip_reuse_hidden_frame);
 }
 \f
 /***********************************************************************
@@ -7653,19 +8022,34 @@ lookup_vk_code (char *key)
        && strcmp (lispy_function_keys[i], key) == 0)
       return i;
 
+  if (w32_kbdhook_active)
+    {
+      /* Alphanumerics map to themselves.  */
+      if (key[1] == 0)
+      {
+       if (key[0] >= 'A' && key[0] <= 'Z' ||
+           key[0] >= '0' && key[0] <= '9')
+         return key[0];
+       if (key[0] >= 'a' && key[0] <= 'z')
+         return toupper(key[0]);
+      }
+    }
+
   return -1;
 }
 
 /* Convert a one-element vector style key sequence to a hot key
    definition.  */
 static Lisp_Object
-w32_parse_hot_key (Lisp_Object key)
+w32_parse_and_hook_hot_key (Lisp_Object key, int hook)
 {
   /* Copied from Fdefine_key and store_in_keymap.  */
   register Lisp_Object c;
   int vk_code;
   int lisp_modifiers;
   int w32_modifiers;
+  Lisp_Object res = Qnil;
+  char* vkname;
 
   CHECK_VECTOR (key);
 
@@ -7688,7 +8072,12 @@ w32_parse_hot_key (Lisp_Object key)
       c = Fcar (c);
       if (!SYMBOLP (c))
        emacs_abort ();
-      vk_code = lookup_vk_code (SSDATA (SYMBOL_NAME (c)));
+      vkname = SSDATA (SYMBOL_NAME (c));
+      /* [s-], [M-], [h-]: Register all keys for this modifier */
+      if (w32_kbdhook_active && vkname[0] == 0)
+        vk_code = VK_ANY;
+      else
+        vk_code = lookup_vk_code (vkname);
     }
   else if (INTEGERP (c))
     {
@@ -7712,34 +8101,75 @@ w32_parse_hot_key (Lisp_Object key)
 #define MOD_WIN         0x0008
 #endif
 
-  /* Convert lisp modifiers to Windows hot-key form.  */
-  w32_modifiers  = (lisp_modifiers & hyper_modifier)    ? MOD_WIN : 0;
-  w32_modifiers |= (lisp_modifiers & alt_modifier)      ? MOD_ALT : 0;
-  w32_modifiers |= (lisp_modifiers & ctrl_modifier)     ? MOD_CONTROL : 0;
-  w32_modifiers |= (lisp_modifiers & shift_modifier)    ? MOD_SHIFT : 0;
+  if (w32_kbdhook_active)
+    {
+      /* Register Alt-x combinations.  */
+      if (lisp_modifiers & alt_modifier)
+        {
+          hook_w32_key (hook, VK_MENU, vk_code);
+          res = Qt;
+        }
+      /* Register Win-x combinations based on modifier mappings.  */
+      if (((lisp_modifiers & hyper_modifier)
+          && EQ (Vw32_lwindow_modifier, Qhyper))
+         || ((lisp_modifiers & super_modifier)
+             && EQ (Vw32_lwindow_modifier, Qsuper)))
+        {
+          hook_w32_key (hook, VK_LWIN, vk_code);
+          res = Qt;
+        }
+      if (((lisp_modifiers & hyper_modifier)
+          && EQ (Vw32_rwindow_modifier, Qhyper))
+         || ((lisp_modifiers & super_modifier)
+             && EQ (Vw32_rwindow_modifier, Qsuper)))
+        {
+          hook_w32_key (hook, VK_RWIN, vk_code);
+          res = Qt;
+        }
+      return res;
+    }
+  else
+    {
+      /* Convert lisp modifiers to Windows hot-key form.  */
+      w32_modifiers  = (lisp_modifiers & hyper_modifier)    ? MOD_WIN : 0;
+      w32_modifiers |= (lisp_modifiers & alt_modifier)      ? MOD_ALT : 0;
+      w32_modifiers |= (lisp_modifiers & ctrl_modifier)     ? MOD_CONTROL : 0;
+      w32_modifiers |= (lisp_modifiers & shift_modifier)    ? MOD_SHIFT : 0;
 
-  return HOTKEY (vk_code, w32_modifiers);
+      return HOTKEY (vk_code, w32_modifiers);
+    }
 }
 
 DEFUN ("w32-register-hot-key", Fw32_register_hot_key,
        Sw32_register_hot_key, 1, 1, 0,
        doc: /* Register KEY as a hot-key combination.
-Certain key combinations like Alt-Tab are reserved for system use on
-Windows, and therefore are normally intercepted by the system.  However,
-most of these key combinations can be received by registering them as
-hot-keys, overriding their special meaning.
-
-KEY must be a one element key definition in vector form that would be
-acceptable to `define-key' (e.g. [A-tab] for Alt-Tab).  The meta
-modifier is interpreted as Alt if `w32-alt-is-meta' is t, and hyper
-is always interpreted as the Windows modifier keys.
-
-The return value is the hotkey-id if registered, otherwise nil.  */)
+Certain key combinations like Alt-Tab and Win-R are reserved for
+system use on Windows, and therefore are normally intercepted by the
+system.  These key combinations can be received by registering them
+as hot-keys, except for Win-L which always locks the computer.
+
+On Windows 98 and ME, KEY must be a one element key definition in
+vector form that would be acceptable to `define-key' (e.g. [A-tab] for
+Alt-Tab).  The meta modifier is interpreted as Alt if
+`w32-alt-is-meta' is t, and hyper is always interpreted as the Windows
+modifier keys.  The return value is the hotkey-id if registered, otherwise nil.
+
+On Windows versions since NT, KEY can also be specified as [M-], [s-] or
+[h-] to indicate that all combinations of that key should be processed
+by Emacs instead of the operating system.  The super and hyper
+modifiers are interpreted according to the current values of
+`w32-lwindow-modifier' and `w32-rwindow-modifier'.  For instance,
+setting `w32-lwindow-modifier' to `super' and then calling
+`(register-hot-key [s-])' grabs all combinations of the left Windows
+key to Emacs, but leaves the right Windows key free for the operating
+system keyboard shortcuts.  The return value is t if the call affected
+any key combinations, otherwise nil.  */)
   (Lisp_Object key)
 {
-  key = w32_parse_hot_key (key);
+  key = w32_parse_and_hook_hot_key (key, 1);
 
-  if (!NILP (key) && NILP (Fmemq (key, w32_grabbed_keys)))
+  if (!w32_kbdhook_active
+      && !NILP (key) && NILP (Fmemq (key, w32_grabbed_keys)))
     {
       /* Reuse an empty slot if possible.  */
       Lisp_Object item = Fmemq (Qnil, w32_grabbed_keys);
@@ -7767,7 +8197,10 @@ DEFUN ("w32-unregister-hot-key", Fw32_unregister_hot_key,
   Lisp_Object item;
 
   if (!INTEGERP (key))
-    key = w32_parse_hot_key (key);
+    key = w32_parse_and_hook_hot_key (key, 0);
+
+  if (w32_kbdhook_active)
+    return key;
 
   item = Fmemq (key, w32_grabbed_keys);
 
@@ -9315,12 +9748,13 @@ syms_of_w32fns (void)
   DEFSYM (Qctrl, "ctrl");
   DEFSYM (Qcontrol, "control");
   DEFSYM (Qshift, "shift");
-  DEFSYM (Qfont_param, "font-parameter");
+  DEFSYM (Qfont_parameter, "font-parameter");
   DEFSYM (Qgeometry, "geometry");
   DEFSYM (Qworkarea, "workarea");
   DEFSYM (Qmm_size, "mm-size");
   DEFSYM (Qframes, "frames");
   DEFSYM (Qtip_frame, "tip-frame");
+  DEFSYM (Qassq_delete_all, "assq-delete-all");
   DEFSYM (Qunicode_sip, "unicode-sip");
 #if defined WINDOWSNT && !defined HAVE_DBUS
   DEFSYM (QCicon, ":icon");
@@ -9333,10 +9767,10 @@ syms_of_w32fns (void)
 #endif
 
   /* Symbols used elsewhere, but only in MS-Windows-specific code.  */
-  DEFSYM (Qgnutls_dll, "gnutls");
-  DEFSYM (Qlibxml2_dll, "libxml2");
+  DEFSYM (Qgnutls, "gnutls");
+  DEFSYM (Qlibxml2, "libxml2");
   DEFSYM (Qserif, "serif");
-  DEFSYM (Qzlib_dll, "zlib");
+  DEFSYM (Qzlib, "zlib");
 
   Fput (Qundefined_color, Qerror_conditions,
        listn (CONSTYPE_PURE, 2, Qundefined_color, Qerror));
@@ -9374,11 +9808,15 @@ When non-nil, the Start menu is opened by tapping the key.
 If you set this to nil, the left \"Windows\" key is processed by Emacs
 according to the value of `w32-lwindow-modifier', which see.
 
-Note that some combinations of the left \"Windows\" key with other keys are
-caught by Windows at low level, and so binding them in Emacs will have no
-effect.  For example, <lwindow>-r always pops up the Windows Run dialog,
-<lwindow>-<Pause> pops up the "System Properties" dialog, etc.  However, see
-the doc string of `w32-phantom-key-code'.  */);
+Note that some combinations of the left \"Windows\" key with other
+keys are caught by Windows at low level.  For example, <lwindow>-r
+pops up the Windows Run dialog, <lwindow>-<Pause> pops up the "System
+Properties" dialog, etc.  On Windows 10, no \"Windows\" key
+combinations are normally handed to applications.  To enable Emacs to
+process \"Windows\" key combinations, use the function
+`w32-register-hot-key`.
+
+For Windows 98/ME, see the doc string of `w32-phantom-key-code'.  */);
   Vw32_pass_lwindow_to_system = Qt;
 
   DEFVAR_LISP ("w32-pass-rwindow-to-system",
@@ -9389,11 +9827,15 @@ When non-nil, the Start menu is opened by tapping the key.
 If you set this to nil, the right \"Windows\" key is processed by Emacs
 according to the value of `w32-rwindow-modifier', which see.
 
-Note that some combinations of the right \"Windows\" key with other keys are
-caught by Windows at low level, and so binding them in Emacs will have no
-effect.  For example, <rwindow>-r always pops up the Windows Run dialog,
-<rwindow>-<Pause> pops up the "System Properties" dialog, etc.  However, see
-the doc string of `w32-phantom-key-code'.  */);
+Note that some combinations of the right \"Windows\" key with other
+keys are caught by Windows at low level.  For example, <rwindow>-r
+pops up the Windows Run dialog, <rwindow>-<Pause> pops up the "System
+Properties" dialog, etc.  On Windows 10, no \"Windows\" key
+combinations are normally handed to applications.  To enable Emacs to
+process \"Windows\" key combinations, use the function
+`w32-register-hot-key`.
+
+For Windows 98/ME, see the doc string of `w32-phantom-key-code'.  */);
   Vw32_pass_rwindow_to_system = Qt;
 
   DEFVAR_LISP ("w32-phantom-key-code",
@@ -9403,7 +9845,11 @@ Value is a number between 0 and 255.
 
 Phantom key presses are generated in order to stop the system from
 acting on \"Windows\" key events when `w32-pass-lwindow-to-system' or
-`w32-pass-rwindow-to-system' is nil.  */);
+`w32-pass-rwindow-to-system' is nil.
+
+This variable is only used on Windows 98 and ME.  For other Windows
+versions, see the documentation of the `w32-register-hot-key`
+function.  */);
   /* Although 255 is technically not a valid key code, it works and
      means that this hack won't interfere with any real key code.  */
   XSETINT (Vw32_phantom_key_code, 255);
@@ -9433,7 +9879,9 @@ Any other value will cause the Scroll Lock key to be ignored.  */);
               doc: /* Modifier to use for the left \"Windows\" key.
 The value can be hyper, super, meta, alt, control or shift for the
 respective modifier, or nil to appear as the `lwindow' key.
-Any other value will cause the key to be ignored.  */);
+Any other value will cause the key to be ignored.
+
+Also see the documentation of the `w32-register-hot-key` function.  */);
   Vw32_lwindow_modifier = Qnil;
 
   DEFVAR_LISP ("w32-rwindow-modifier",
@@ -9441,7 +9889,9 @@ Any other value will cause the key to be ignored.  */);
               doc: /* Modifier to use for the right \"Windows\" key.
 The value can be hyper, super, meta, alt, control or shift for the
 respective modifier, or nil to appear as the `rwindow' key.
-Any other value will cause the key to be ignored.  */);
+Any other value will cause the key to be ignored.
+
+Also see the documentation of the `w32-register-hot-key` function.  */);
   Vw32_rwindow_modifier = Qnil;
 
   DEFVAR_LISP ("w32-apps-modifier",
@@ -9617,6 +10067,18 @@ Default is nil.
 This variable has effect only on Windows Vista and later.  */);
   w32_disable_new_uniscribe_apis = 0;
 
+  DEFVAR_LISP ("w32-tooltip-extra-pixels",
+              Vw32_tooltip_extra_pixels,
+              doc: /* Number of pixels added after tooltip text.
+On Windows some fonts may cause the last character of a tooltip be
+truncated or wrapped around to the next line.  Adding some extra space
+at the end of the toooltip works around this problem.
+
+This variable specifies the number of pixels that shall be added.  The
+default value t means to add the width of one canonical character of the
+tip frame.  */);
+  Vw32_tooltip_extra_pixels = Qt;
+
 #if 0 /* TODO: Port to W32 */
   defsubr (&Sx_change_window_property);
   defsubr (&Sx_delete_window_property);
index 867425f0bf2da61335b3c9befc794bf5ef34c937..2269d318051c9819725eac2b8cfa768dea0f33f9 100644 (file)
@@ -41,6 +41,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "termchar.h"  /* for Mouse_HLInfo, tty_display_info */
 #include "w32term.h"
 #include "w32inevt.h"
+#include "w32common.h"
 
 /* stdin, from w32console.c */
 extern HANDLE keyboard_handle;
@@ -148,10 +149,12 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead)
       switch (event->wVirtualKeyCode)
        {
        case VK_LWIN:
-         mod_key_state &= ~LEFT_WIN_PRESSED;
+          if (!w32_kbdhook_active)
+            mod_key_state &= ~LEFT_WIN_PRESSED;
          break;
        case VK_RWIN:
-         mod_key_state &= ~RIGHT_WIN_PRESSED;
+          if (!w32_kbdhook_active)
+            mod_key_state &= ~RIGHT_WIN_PRESSED;
          break;
        case VK_APPS:
          mod_key_state &= ~APPS_PRESSED;
@@ -185,7 +188,8 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead)
              keybd_event (faked_key, (BYTE) MapVirtualKey (faked_key, 0), 0, 0);
            }
        }
-      mod_key_state |= LEFT_WIN_PRESSED;
+      if (!w32_kbdhook_active)
+        mod_key_state |= LEFT_WIN_PRESSED;
       if (!NILP (Vw32_lwindow_modifier))
        return 0;
       break;
@@ -201,7 +205,8 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead)
              keybd_event (faked_key, (BYTE) MapVirtualKey (faked_key, 0), 0, 0);
            }
        }
-      mod_key_state |= RIGHT_WIN_PRESSED;
+      if (!w32_kbdhook_active)
+        mod_key_state |= RIGHT_WIN_PRESSED;
       if (!NILP (Vw32_rwindow_modifier))
        return 0;
       break;
@@ -267,6 +272,13 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead)
 
   /* Recognize state of Windows and Apps keys.  */
   event->dwControlKeyState |= mod_key_state;
+  if (w32_kbdhook_active)
+    {
+      if (check_w32_winkey_state (VK_LWIN))
+        event->dwControlKeyState |= LEFT_WIN_PRESSED;
+      if (check_w32_winkey_state (VK_RWIN))
+        event->dwControlKeyState |= RIGHT_WIN_PRESSED;
+    }
 
   /* Distinguish numeric keypad keys from extended keys.  */
   event->wVirtualKeyCode =
@@ -608,70 +620,89 @@ maybe_generate_resize_event (void)
 int
 handle_file_notifications (struct input_event *hold_quit)
 {
-  BYTE *p = file_notifications;
-  FILE_NOTIFY_INFORMATION *fni = (PFILE_NOTIFY_INFORMATION)p;
-  const DWORD min_size
-    = offsetof (FILE_NOTIFY_INFORMATION, FileName) + sizeof(wchar_t);
-  struct input_event inev;
+  struct notifications_set *ns = NULL;
   int nevents = 0;
+  int done = 0;
 
   /* We cannot process notification before Emacs is fully initialized,
      since we need the UTF-16LE coding-system to be set up.  */
   if (!initialized)
     {
-      notification_buffer_in_use = 0;
       return nevents;
     }
 
-  enter_crit ();
-  if (notification_buffer_in_use)
+  while (!done)
     {
-      DWORD info_size = notifications_size;
-      Lisp_Object cs = Qutf_16le;
-      Lisp_Object obj = w32_get_watch_object (notifications_desc);
-
-      /* notifications_size could be zero when the buffer of
-        notifications overflowed on the OS level, or when the
-        directory being watched was itself deleted.  Do nothing in
-        that case.  */
-      if (info_size
-         && !NILP (obj) && CONSP (obj))
-       {
-         Lisp_Object callback = XCDR (obj);
+      ns = NULL;
 
-         EVENT_INIT (inev);
+      /* Find out if there is a record available in the linked list of
+        notifications sets.  If so, unlink te set from the linked list.
+        Use the critical section.  */
+      enter_crit ();
+      if (notifications_set_head->next != notifications_set_head)
+       {
+         ns = notifications_set_head->next;
+         ns->prev->next = ns->next;
+         ns->next->prev = ns->prev;
+       }
+      else
+       done = 1;
+      leave_crit();
 
-         while (info_size >= min_size)
+      if (ns)
+       {
+         BYTE *p = ns->notifications;
+         FILE_NOTIFY_INFORMATION *fni = (PFILE_NOTIFY_INFORMATION)p;
+         const DWORD min_size
+           = offsetof (FILE_NOTIFY_INFORMATION, FileName) + sizeof(wchar_t);
+         struct input_event inev;
+         DWORD info_size = ns->size;
+         Lisp_Object cs = Qutf_16le;
+         Lisp_Object obj = w32_get_watch_object (ns->desc);
+
+         /* notifications size could be zero when the buffer of
+            notifications overflowed on the OS level, or when the
+            directory being watched was itself deleted.  Do nothing in
+            that case.  */
+         if (info_size
+             && !NILP (obj) && CONSP (obj))
            {
-             Lisp_Object utf_16_fn
-               = make_unibyte_string ((char *)fni->FileName,
-                                      fni->FileNameLength);
-             /* Note: mule-conf is preloaded, so utf-16le must
-                already be defined at this point.  */
-             Lisp_Object fname
-               = code_convert_string_norecord (utf_16_fn, cs, 0);
-             Lisp_Object action = lispy_file_action (fni->Action);
-
-             inev.kind = FILE_NOTIFY_EVENT;
-             inev.timestamp = GetTickCount ();
-             inev.modifiers = 0;
-             inev.frame_or_window = callback;
-             inev.arg = Fcons (action, fname);
-             inev.arg = list3 (make_pointer_integer (notifications_desc),
-                               action, fname);
-             kbd_buffer_store_event_hold (&inev, hold_quit);
-             nevents++;
-
-             if (!fni->NextEntryOffset)
-               break;
-             p += fni->NextEntryOffset;
-             fni = (PFILE_NOTIFY_INFORMATION)p;
-             info_size -= fni->NextEntryOffset;
+             Lisp_Object callback = XCDR (obj);
+
+             EVENT_INIT (inev);
+
+             while (info_size >= min_size)
+               {
+                 Lisp_Object utf_16_fn
+                   = make_unibyte_string ((char *)fni->FileName,
+                                          fni->FileNameLength);
+                 /* Note: mule-conf is preloaded, so utf-16le must
+                    already be defined at this point.  */
+                 Lisp_Object fname
+                   = code_convert_string_norecord (utf_16_fn, cs, 0);
+                 Lisp_Object action = lispy_file_action (fni->Action);
+
+                 inev.kind = FILE_NOTIFY_EVENT;
+                 inev.timestamp = GetTickCount ();
+                 inev.modifiers = 0;
+                 inev.frame_or_window = callback;
+                 inev.arg = Fcons (action, fname);
+                 inev.arg = list3 (make_pointer_integer (ns->desc),
+                                   action, fname);
+                 kbd_buffer_store_event_hold (&inev, hold_quit);
+                 nevents++;
+                 if (!fni->NextEntryOffset)
+                   break;
+                 p += fni->NextEntryOffset;
+                 fni = (PFILE_NOTIFY_INFORMATION)p;
+                 info_size -= fni->NextEntryOffset;
+               }
            }
+         /* Free this notification set.  */
+         free (ns->notifications);
+         free (ns);
        }
-      notification_buffer_in_use = 0;
     }
-  leave_crit ();
   return nevents;
 }
 #else  /* !HAVE_W32NOTIFY */
index 586c2062f622a42776aad2c5d75a3656341996d1..54d9bcc189a19c0624bed58e345e1f802d52048b 100644 (file)
@@ -22,27 +22,30 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
    For each watch request, we launch a separate worker thread.  The
    worker thread runs the watch_worker function, which issues an
-   asynchronous call to ReadDirectoryChangesW, and then waits in
-   SleepEx for that call to complete.  Waiting in SleepEx puts the
-   thread in an "alertable" state, so it wakes up when either (a) the
-   call to ReadDirectoryChangesW completes, or (b) the main thread
-   instructs the worker thread to terminate by sending it an APC, see
-   below.
+   asynchronous call to ReadDirectoryChangesW, and then calls
+   WaitForSingleObjectEx to wait that an event be signaled
+   to terminate the thread.
+   Waiting with WaitForSingleObjectEx puts the thread in an
+   "alertable" state, so it wakes up when either (a) the call to
+   ReadDirectoryChangesW completes, or (b) the main thread instructs
+   the worker thread to terminate by signaling an event, see below.
 
    When the ReadDirectoryChangesW call completes, its completion
    routine watch_completion is automatically called.  watch_completion
-   stashes the received file events in a buffer used to communicate
-   them to the main thread (using a critical section, so that several
-   threads could use the same buffer), posts a special message,
-   WM_EMACS_FILENOTIFY, to the Emacs's message queue, and returns.
-   That causes the SleepEx function call inside watch_worker to
-   return, and watch_worker then issues another call to
-   ReadDirectoryChangesW.  (Except when it does not, see below.)
+   stashes the received file events in a linked list used to
+   communicate them to the main thread (using a critical section, so
+   that several threads could alter the same linked list), posts a
+   special message, WM_EMACS_FILENOTIFY, to the Emacs's message queue,
+   and returns.  That causes the WaitForSingleObjectEx function call
+   inside watch_worker to return, but the thread won't terminate until
+   the event telling to do so will be signaled.  The completion
+   routine issued another call to ReadDirectoryChangesW as quickly as
+   possible.  (Except when it does not, see below.)
 
    In a GUI session, the WM_EMACS_FILENOTIFY message posted to the
    message queue gets dispatched to the main Emacs window procedure,
    which queues it for processing by w32_read_socket.  When
-   w32_read_socket sees this message, it accesses the buffer with file
+   w32_read_socket sees this message, it accesses the linked list with file
    notifications (using a critical section), extracts the information,
    converts it to a series of FILE_NOTIFY_EVENT events, and stuffs
    them into the input event queue to be processed by keyboard.c input
@@ -53,7 +56,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
    procedures in console programs.  That message wakes up
    MsgWaitForMultipleObjects inside sys_select, which then signals to
    its caller that some keyboard input is available.  This causes
-   w32_console_read_socket to be called, which accesses the buffer
+   w32_console_read_socket to be called, which accesses the linked list
    with file notifications and stuffs them into the input event queue
    for keyboard.c to process.
 
@@ -62,24 +65,21 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
    bound to a command.  The default binding is file-notify-handle-event,
    defined on subr.el.
 
-   After w32_read_socket or w32_console_read_socket are done
-   processing the notifications, they reset a flag signaling to all
-   watch worker threads that the notifications buffer is available for
-   more input.
+   Routines w32_read_socket or w32_console_read_socket process notifications
+   sets as long as some are available.
 
    When the watch is removed by a call to w32notify-rm-watch, the main
-   thread requests that the worker thread terminates by queuing an APC
-   for the worker thread.  The APC specifies the watch_end function to
-   be called.  watch_end calls CancelIo on the outstanding
-   ReadDirectoryChangesW call and closes the handle on which the
-   watched directory was open.  When watch_end returns, the
-   watch_completion function is called one last time with the
-   ERROR_OPERATION_ABORTED status, which causes it to clean up and set
-   a flag telling watch_worker to exit without issuing another
-   ReadDirectoryChangesW call.  Since watch_worker is the thread
-   procedure of the worker thread, exiting it causes the thread to
-   exit.  The main thread waits for some time for the worker thread to
-   exit, and if it doesn't, terminates it forcibly.  */
+   thread requests that the worker thread terminates by signaling the
+   appropriate event and queuing an APC for the worker thread.  The
+   APC specifies the watch_end function to be called.  watch_end calls
+   CancelIo on the outstanding ReadDirectoryChangesW call.  When
+   watch_end returns, the watch_completion function is called one last
+   time with the ERROR_OPERATION_ABORTED status, which causes it to
+   clean up and set a flag telling watch_worker to exit without
+   issuing another ReadDirectoryChangesW call.  Since watch_worker is
+   the thread procedure of the worker thread, exiting it causes the
+   thread to exit.  The main thread waits for some time for the worker
+   thread to exit, and if it doesn't, terminates it forcibly.  */
 
 #include <stddef.h>
 #include <errno.h>
@@ -98,6 +98,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "frame.h"     /* needed by termhooks.h */
 #include "termhooks.h" /* for FILE_NOTIFY_EVENT */
 
+#define DIRWATCH_BUFFER_SIZE 16384
 #define DIRWATCH_SIGNATURE 0x01233210
 
 struct notification {
@@ -108,73 +109,52 @@ struct notification {
   char *watchee;       /* the file we are interested in, UTF-8 encoded */
   HANDLE dir;          /* handle to the watched directory */
   HANDLE thr;          /* handle to the thread that watches */
-  volatile int terminate; /* if non-zero, request for the thread to terminate */
+  HANDLE terminate;     /* event signaling the thread to terminate */
   unsigned signature;
 };
 
 /* Used for communicating notifications to the main thread.  */
-volatile int notification_buffer_in_use;
-BYTE file_notifications[16384];
-DWORD notifications_size;
-void *notifications_desc;
+struct notifications_set *notifications_set_head;
 
 static Lisp_Object watch_list;
 
 /* Signal to the main thread that we have file notifications for it to
    process.  */
 static void
-send_notifications (BYTE *info, DWORD info_size, void *desc,
-                   volatile int *terminate)
+send_notifications (struct notifications_set *ns)
 {
   int done = 0;
   struct frame *f = SELECTED_FRAME ();
 
-  /* A single buffer is used to communicate all notifications to the
-     main thread.  Since both the main thread and several watcher
-     threads could be active at the same time, we use a critical area
-     and an "in-use" flag to synchronize them.  A watcher thread can
-     only put its notifications in the buffer if it acquires the
-     critical area and finds the "in-use" flag reset.  The main thread
-     resets the flag after it is done processing notifications.
-
-     FIXME: is there a better way of dealing with this?  */
-  while (!done && !*terminate)
-    {
+  /* We add the current notification set to the linked list.  Use the
+     critical section to make sure only one thread will access the
+     linked list. */
       enter_crit ();
-      if (!notification_buffer_in_use)
-       {
-         if (info_size)
-           memcpy (file_notifications, info,
-                   min (info_size, sizeof (file_notifications)));
-         notifications_size = min (info_size, sizeof (file_notifications));
-         notifications_desc = desc;
-         /* If PostMessage fails, the message queue is full.  If that
-            happens, the last thing they will worry about is file
-            notifications.  So we effectively discard the
-            notification in that case.  */
-         if ((FRAME_TERMCAP_P (f)
-              /* We send the message to the main (a.k.a. "Lisp")
-                 thread, where it will wake up MsgWaitForMultipleObjects
-                 inside sys_select, causing it to report that there's
-                 some keyboard input available.  This will in turn cause
-                 w32_console_read_socket to be called, which will pick
-                 up the file notifications.  */
-              && PostThreadMessage (dwMainThreadId, WM_EMACS_FILENOTIFY, 0, 0))
-             || (FRAME_W32_P (f)
-                 && PostMessage (FRAME_W32_WINDOW (f),
-                                 WM_EMACS_FILENOTIFY, 0, 0))
-             /* When we are running in batch mode, there's no one to
-                send a message, so we just signal the data is
-                available and hope sys_select will be called soon and
-                will read the data.  */
-             || (FRAME_INITIAL_P (f) && noninteractive))
-           notification_buffer_in_use = 1;
-         done = 1;
-       }
-      leave_crit ();
-      if (!done)
-       Sleep (5);
-    }
+  ns->next = notifications_set_head;
+  ns->prev = notifications_set_head->prev;
+  ns->prev->next = ns;
+  notifications_set_head->prev = ns;
+  leave_crit();
+
+  /* If PostMessage fails, the message queue is full.  If that
+     happens, the last thing they will worry about is file
+     notifications.  So we effectively discard the notification in
+     that case.  */
+  if (FRAME_TERMCAP_P (f))
+    /* We send the message to the main (a.k.a. "Lisp") thread, where
+       it will wake up MsgWaitForMultipleObjects inside sys_select,
+       causing it to report that there's some keyboard input
+       available.  This will in turn cause w32_console_read_socket to
+       be called, which will pick up the file notifications.  */
+    PostThreadMessage (dwMainThreadId, WM_EMACS_FILENOTIFY, 0, 0);
+  else if (FRAME_W32_P (f))
+    PostMessage (FRAME_W32_WINDOW (f),
+                 WM_EMACS_FILENOTIFY, 0, 0);
+  /* When we are running in batch mode, there's no one to send a
+     message, so we just signal the data is available and hope
+     sys_select will be called soon and will read the data.  */
+  else if (FRAME_INITIAL_P (f) && noninteractive)
+    ;
 }
 
 /* An APC routine to cancel outstanding directory watch.  Invoked by
@@ -188,10 +168,7 @@ watch_end (ULONG_PTR arg)
   HANDLE hdir = (HANDLE)arg;
 
   if (hdir && hdir != INVALID_HANDLE_VALUE)
-    {
-      CancelIo (hdir);
-      CloseHandle (hdir);
-    }
+    CancelIo (hdir);
 }
 
 /* A completion routine (a.k.a. "APC function") for handling events
@@ -202,13 +179,19 @@ VOID CALLBACK
 watch_completion (DWORD status, DWORD bytes_ret, OVERLAPPED *io_info)
 {
   struct notification *dirwatch;
+  DWORD _bytes;
+  struct notifications_set *ns = NULL;
+  BOOL terminate = FALSE;
 
   /* Who knows what happened?  Perhaps the OVERLAPPED structure was
      freed by someone already?  In any case, we cannot do anything
      with this request, so just punt and skip it.  FIXME: should we
      raise the 'terminate' flag in this case?  */
   if (!io_info)
-    return;
+    {
+      DebPrint(("watch_completion: io_info is null.\n"));
+      return;
+    }
 
   /* We have a pointer to our dirwatch structure conveniently stashed
      away in the hEvent member of the OVERLAPPED struct.  According to
@@ -216,26 +199,69 @@ watch_completion (DWORD status, DWORD bytes_ret, OVERLAPPED *io_info)
      of the OVERLAPPED structure is not used by the system, so you can
      use it yourself."  */
   dirwatch = (struct notification *)io_info->hEvent;
+
   if (status == ERROR_OPERATION_ABORTED)
     {
       /* We've been called because the main thread told us to issue
         CancelIo on the directory we watch, and watch_end did so.
-        The directory handle is already closed.  We should clean up
-        and exit, signaling to the thread worker routine not to
-        issue another call to ReadDirectoryChangesW.  Note that we
-        don't free the dirwatch object itself nor the memory consumed
-        by its buffers; this is done by the main thread in
-        remove_watch.  Calling malloc/free from a thread other than
-        the main thread is a no-no.  */
-      dirwatch->dir = NULL;
-      dirwatch->terminate = 1;
+         We must exit, without issuing another call to
+         ReadDirectoryChangesW. */
+      return;
     }
-  else
+
+  /* We allocate a new set of notifications to be linked to the linked
+     list of notifications set.  This will be processed by Emacs event
+     loop in the main thread.  We need to duplicate the notifications
+     buffer, but not the dirwatch structure.  */
+
+  /* Implementation note: In general, allocating memory in non-main
+     threads is a no-no in Emacs.  We certainly cannot call xmalloc
+     and friends, because it can longjmp when allocation fails, which
+     will crash Emacs because the jmp_buf is set up to a location on
+     the main thread's stack.  However, we can call 'malloc' directly,
+     since that is redirected to HeapAlloc that uses our private heap,
+     see w32heap.c, and that is thread-safe.  */
+  ns = malloc (sizeof(struct notifications_set));
+  if (ns)
+    {
+      memset (ns, 0, sizeof(struct notifications_set));
+      ns->notifications = malloc (bytes_ret);
+      if (ns->notifications)
+       {
+         memcpy (ns->notifications, dirwatch->buf, bytes_ret);
+         ns->size = bytes_ret;
+         ns->desc = dirwatch;
+       }
+      else
+       {
+         free (ns);
+         ns = NULL;
+       }
+    }
+  if (ns == NULL)
+    DebPrint(("Out of memory.  Notifications lost."));
+
+  /* Calling ReadDirectoryChangesW quickly to watch again for new
+     notifications.  */
+  if (!ReadDirectoryChangesW (dirwatch->dir, dirwatch->buf,
+                             DIRWATCH_BUFFER_SIZE, dirwatch->subtree,
+                             dirwatch->filter, &_bytes, dirwatch->io_info,
+                             watch_completion))
     {
-      /* Tell the main thread we have notifications for it.  */
-      send_notifications (dirwatch->buf, bytes_ret, dirwatch,
-                         &dirwatch->terminate);
+      DebPrint (("ReadDirectoryChangesW error: %lu\n", GetLastError ()));
+      /* If this call fails, it means that the directory is not
+         watchable any more.  We need to terminate the worker thread.
+         Still, we will wait until the current notifications have been
+         sent to the main thread.  */
+      terminate = TRUE;
     }
+
+  if (ns)
+    send_notifications(ns);
+
+  /* If we were asked to terminate the thread, then fire the event. */
+  if (terminate)
+    SetEvent(dirwatch->terminate);
 }
 
 /* Worker routine for the watch thread.  */
@@ -243,42 +269,43 @@ static DWORD WINAPI
 watch_worker (LPVOID arg)
 {
   struct notification *dirwatch = (struct notification *)arg;
+  BOOL bErr;
+  DWORD _bytes = 0;
+  DWORD status;
+
+  if (dirwatch->dir)
+    {
+      bErr = ReadDirectoryChangesW (dirwatch->dir, dirwatch->buf,
+                                   DIRWATCH_BUFFER_SIZE, dirwatch->subtree,
+                                   dirwatch->filter, &_bytes,
+                                   dirwatch->io_info, watch_completion);
+      if (!bErr)
+       {
+         DebPrint (("ReadDirectoryChangesW: %lu\n", GetLastError ()));
+         /* We cannot remove the dirwatch object from watch_list,
+            because we are in a separate thread.  For the same
+            reason, we also cannot free memory consumed by the
+            buffers allocated for the dirwatch object.  So we close
+            the directory handle, but do not free the object itself
+            or its buffers.  We also don't touch the signature.  This
+            way, remove_watch can still identify the object, remove
+            it, and free its memory.  */
+         CloseHandle (dirwatch->dir);
+         dirwatch->dir = NULL;
+         return 1;
+       }
+    }
 
   do {
-    BOOL status;
-    DWORD bytes_ret = 0;
-
-    if (dirwatch->dir)
-      {
-       status = ReadDirectoryChangesW (dirwatch->dir, dirwatch->buf, 16384,
-                                       dirwatch->subtree, dirwatch->filter,
-                                       &bytes_ret,
-                                       dirwatch->io_info, watch_completion);
-       if (!status)
-         {
-           DebPrint (("watch_worker, abnormal exit: %lu\n", GetLastError ()));
-           /* We cannot remove the dirwatch object from watch_list,
-              because we are in a separate thread.  For the same
-              reason, we also cannot free memory consumed by the
-              buffers allocated for the dirwatch object.  So we close
-              the directory handle, but do not free the object itself
-              or its buffers.  We also don't touch the signature.
-              This way, remove_watch can still identify the object,
-              remove it, and free its memory.  */
-           CloseHandle (dirwatch->dir);
-           dirwatch->dir = NULL;
-           return 1;
-         }
-      }
-    /* Sleep indefinitely until awoken by the I/O completion, which
-       could be either a change notification or a cancellation of the
-       watch.  */
-    SleepEx (INFINITE, TRUE);
-  } while (!dirwatch->terminate);
+    status = WaitForSingleObjectEx(dirwatch->terminate, INFINITE, TRUE);
+  } while (status == WAIT_IO_COMPLETION);
+
+  /* The thread is about to terminate, so we clean up the dir handle.  */
+  CloseHandle (dirwatch->dir);
+  dirwatch->dir = NULL;
 
   return 0;
 }
-
 /* Launch a thread to watch changes to FILE in a directory open on
    handle HDIR.  */
 static struct notification *
@@ -287,7 +314,7 @@ start_watching (const char *file, HANDLE hdir, BOOL subdirs, DWORD flags)
   struct notification *dirwatch = xzalloc (sizeof (struct notification));
 
   dirwatch->signature = DIRWATCH_SIGNATURE;
-  dirwatch->buf = xmalloc (16384);
+  dirwatch->buf = xmalloc (DIRWATCH_BUFFER_SIZE);
   dirwatch->io_info = xzalloc (sizeof(OVERLAPPED));
   /* Stash a pointer to dirwatch structure for use by the completion
      routine.  According to MSDN documentation of ReadDirectoryChangesW:
@@ -297,7 +324,9 @@ start_watching (const char *file, HANDLE hdir, BOOL subdirs, DWORD flags)
   dirwatch->subtree = subdirs;
   dirwatch->filter = flags;
   dirwatch->watchee = xstrdup (file);
-  dirwatch->terminate = 0;
+
+  dirwatch->terminate = CreateEvent(NULL, FALSE, FALSE, NULL);
+
   dirwatch->dir = hdir;
 
   /* See w32proc.c where it calls CreateThread for the story behind
@@ -307,11 +336,11 @@ start_watching (const char *file, HANDLE hdir, BOOL subdirs, DWORD flags)
 
   if (!dirwatch->thr)
     {
+      CloseHandle(dirwatch->terminate);
       xfree (dirwatch->buf);
       xfree (dirwatch->io_info);
       xfree (dirwatch->watchee);
       xfree (dirwatch);
-      dirwatch = NULL;
     }
   return dirwatch;
 }
@@ -370,7 +399,10 @@ add_watch (const char *parent_dir, const char *file, BOOL subdirs, DWORD flags)
     return NULL;
 
   if ((dirwatch = start_watching (file, hdir, subdirs, flags)) == NULL)
-    CloseHandle (hdir);
+    {
+      CloseHandle (hdir);
+      dirwatch->dir = NULL;
+    }
 
   return dirwatch;
 }
@@ -383,7 +415,7 @@ remove_watch (struct notification *dirwatch)
     {
       int i;
       BOOL status;
-      DWORD exit_code, err;
+      DWORD exit_code = 0, err;
 
       /* Only the thread that issued the outstanding I/O call can call
         CancelIo on it.  (CancelIoEx is available only since Vista.)
@@ -391,12 +423,10 @@ remove_watch (struct notification *dirwatch)
         to terminate.  */
       if (!QueueUserAPC (watch_end, dirwatch->thr, (ULONG_PTR)dirwatch->dir))
        DebPrint (("QueueUserAPC failed (%lu)!\n", GetLastError ()));
-      /* We also set the terminate flag, for when the thread is
-        waiting on the critical section that never gets acquired.
-        FIXME: is there a cleaner method?  Using SleepEx there is a
-        no-no, as that will lead to recursive APC invocations and
-        stack overflow.  */
-      dirwatch->terminate = 1;
+
+      /* We also signal the thread that it can terminate.  */
+      SetEvent(dirwatch->terminate);
+
       /* Wait for the thread to exit.  FIXME: is there a better method
         that is not overly complex?  */
       for (i = 0; i < 50; i++)
@@ -406,11 +436,13 @@ remove_watch (struct notification *dirwatch)
            break;
          Sleep (10);
        }
+
       if ((status == FALSE && (err = GetLastError ()) == ERROR_INVALID_HANDLE)
          || exit_code == STILL_ACTIVE)
        {
          if (!(status == FALSE && err == ERROR_INVALID_HANDLE))
            {
+              DebPrint(("Forcing thread termination.\n"));
              TerminateThread (dirwatch->thr, 0);
              if (dirwatch->dir)
                CloseHandle (dirwatch->dir);
@@ -423,11 +455,11 @@ remove_watch (struct notification *dirwatch)
          CloseHandle (dirwatch->thr);
          dirwatch->thr = NULL;
        }
+      CloseHandle(dirwatch->terminate);
       xfree (dirwatch->buf);
       xfree (dirwatch->io_info);
       xfree (dirwatch->watchee);
       xfree (dirwatch);
-
       return 0;
     }
   else
index 138fe853c4d9510c349f6d89435459188902a25f..a29f5f6627857ea27d07d182ec62a3d0b9abd3cb 100644 (file)
@@ -256,7 +256,7 @@ render (Lisp_Object oformat)
        switch (format)
          {
          case CF_UNICODETEXT:
-           htext = convert_to_handle_as_coded (QUNICODE);
+           htext = convert_to_handle_as_coded (Qutf_16le_dos);
            break;
          case CF_TEXT:
          case CF_OEMTEXT:
@@ -1109,7 +1109,7 @@ After the communication, this variable is set to nil.  */);
   current_text = Qnil;         staticpro (&current_text);
   current_coding_system = Qnil; staticpro (&current_coding_system);
 
-  DEFSYM (QUNICODE, "utf-16le-dos");
+  DEFSYM (Qutf_16le_dos, "utf-16le-dos");
   QANSICP = Qnil; staticpro (&QANSICP);
   QOEMCP = Qnil;  staticpro (&QOEMCP);
 }
@@ -1132,7 +1132,7 @@ globals_of_w32select (void)
   QOEMCP = coding_from_cp (OEMCP);
 
   if (os_subtype == OS_NT)
-    Vselection_coding_system = QUNICODE;
+    Vselection_coding_system = Qutf_16le_dos;
   else if (inhibit_window_system)
     Vselection_coding_system = QOEMCP;
   else
index 51743f8f94dad77257e9db79cd2f498c07d55bc6..74ea6b543bd75220ef79f733908c62acdc37a795 100644 (file)
@@ -3211,71 +3211,85 @@ static void
 queue_notifications (struct input_event *event, W32Msg *msg, struct frame *f,
                     int *evcount)
 {
-  BYTE *p = file_notifications;
-  FILE_NOTIFY_INFORMATION *fni = (PFILE_NOTIFY_INFORMATION)p;
-  const DWORD min_size
-    = offsetof (FILE_NOTIFY_INFORMATION, FileName) + sizeof(wchar_t);
+  struct notifications_set *ns = NULL;
   Lisp_Object frame;
+  int done = 0;
 
   /* We cannot process notification before Emacs is fully initialized,
      since we need the UTF-16LE coding-system to be set up.  */
   if (!initialized)
-    {
-      notification_buffer_in_use = 0;
-      return;
-    }
+    return;
 
   XSETFRAME (frame, f);
 
-  enter_crit ();
-  if (notification_buffer_in_use)
+  while (!done)
     {
-      DWORD info_size = notifications_size;
-      Lisp_Object cs = Qutf_16le;
-      Lisp_Object obj = w32_get_watch_object (notifications_desc);
-
-      /* notifications_size could be zero when the buffer of
-        notifications overflowed on the OS level, or when the
-        directory being watched was itself deleted.  Do nothing in
-        that case.  */
-      if (info_size
-         && !NILP (obj) && CONSP (obj))
+      ns = NULL;
+
+      /* Find out if there is a record available in the linked list of
+        notifications sets.  If so, unlink the set from the linked
+        list.  Use critical section.  */
+      enter_crit ();
+      if (notifications_set_head->next != notifications_set_head)
        {
-         Lisp_Object callback = XCDR (obj);
+         ns = notifications_set_head->next;
+         ns->prev->next = ns->next;
+         ns->next->prev = ns->prev;
+       }
+      else
+       done = 1;
+      leave_crit();
 
-         while (info_size >= min_size)
+      if (ns)
+       {
+         BYTE *p = ns->notifications;
+         FILE_NOTIFY_INFORMATION *fni = (PFILE_NOTIFY_INFORMATION)p;
+         const DWORD min_size
+           = offsetof (FILE_NOTIFY_INFORMATION, FileName) + sizeof(wchar_t);
+         DWORD info_size = ns->size;
+         Lisp_Object cs = Qutf_16le;
+         Lisp_Object obj = w32_get_watch_object (ns->desc);
+
+         /* notifications size could be zero when the buffer of
+            notifications overflowed on the OS level, or when the
+            directory being watched was itself deleted.  Do nothing in
+            that case.  */
+         if (info_size
+             && !NILP (obj) && CONSP (obj))
            {
-             Lisp_Object utf_16_fn
-               = make_unibyte_string ((char *)fni->FileName,
-                                      fni->FileNameLength);
-             /* Note: mule-conf is preloaded, so utf-16le must
-                already be defined at this point.  */
-             Lisp_Object fname
-               = code_convert_string_norecord (utf_16_fn, cs, 0);
-             Lisp_Object action = lispy_file_action (fni->Action);
-
-             event->kind = FILE_NOTIFY_EVENT;
-             event->timestamp = msg->msg.time;
-             event->modifiers = 0;
-             event->frame_or_window = callback;
-             event->arg = list3 (make_pointer_integer (notifications_desc),
-                                 action, fname);
-             kbd_buffer_store_event (event);
-             (*evcount)++;
-
-             if (!fni->NextEntryOffset)
-               break;
-             p += fni->NextEntryOffset;
-             fni = (PFILE_NOTIFY_INFORMATION)p;
-             info_size -= fni->NextEntryOffset;
+             Lisp_Object callback = XCDR (obj);
+
+             while (info_size >= min_size)
+               {
+                 Lisp_Object utf_16_fn
+                   = make_unibyte_string ((char *)fni->FileName,
+                                          fni->FileNameLength);
+                 /* Note: mule-conf is preloaded, so utf-16le must
+                    already be defined at this point.  */
+                 Lisp_Object fname
+                   = code_convert_string_norecord (utf_16_fn, cs, 0);
+                 Lisp_Object action = lispy_file_action (fni->Action);
+
+                 event->kind = FILE_NOTIFY_EVENT;
+                 event->timestamp = msg->msg.time;
+                 event->modifiers = 0;
+                 event->frame_or_window = callback;
+                 event->arg = list3 (make_pointer_integer (ns->desc),
+                                     action, fname);
+                 kbd_buffer_store_event (event);
+                 (*evcount)++;
+                 if (!fni->NextEntryOffset)
+                   break;
+                 p += fni->NextEntryOffset;
+                 fni = (PFILE_NOTIFY_INFORMATION)p;
+                 info_size -= fni->NextEntryOffset;
+               }
            }
+         /* Free this notifications set. */
+         xfree (ns->notifications);
+         xfree (ns);
        }
-      notification_buffer_in_use = 0;
     }
-  else
-    DebPrint (("We were promised notifications, but in-use flag is zero!\n"));
-  leave_crit ();
-
   /* We've stuffed all the events ourselves, so w32_read_socket shouldn't.  */
   event->kind = NO_EVENT;
 }
@@ -6951,6 +6965,8 @@ w32_init_main_thread (void)
   DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
                   GetCurrentProcess (), &hMainThread, 0, TRUE,
                   DUPLICATE_SAME_ACCESS);
+
+
 }
 
 DWORD WINAPI w32_msg_worker (void * arg);
index 2fed56ed797751db973ad9441ecb0ac3933b1378..8585c8190db721a57a21e3c53f8af2b50f16f35a 100644 (file)
@@ -727,10 +727,18 @@ extern void x_delete_display (struct w32_display_info *dpyinfo);
 
 extern void x_query_color (struct frame *, XColor *);
 
-extern volatile int notification_buffer_in_use;
-extern BYTE file_notifications[16384];
-extern DWORD notifications_size;
-extern void *notifications_desc;
+#define FILE_NOTIFICATIONS_SIZE 16384
+/* Notifications come in sets.  We use a doubly linked list with a
+   sentinel to communicate those sets from the watching threads to the
+   main thread.  */
+struct notifications_set {
+  LPBYTE notifications;
+  DWORD size;
+  void *desc;
+  struct notifications_set *next;
+  struct notifications_set *prev;
+};
+extern struct notifications_set *notifications_set_head;
 extern Lisp_Object w32_get_watch_object (void *);
 extern Lisp_Object lispy_file_action (DWORD);
 extern int handle_file_notifications (struct input_event *);
@@ -738,6 +746,16 @@ extern int handle_file_notifications (struct input_event *);
 extern void w32_initialize_display_info (Lisp_Object);
 extern void initialize_w32_display (struct terminal *, int *, int *);
 
+#ifdef WINDOWSNT
+/* Keyboard hooks.  */
+extern void setup_w32_kbdhook (void);
+extern void remove_w32_kbdhook (void);
+extern int check_w32_winkey_state (int);
+#define w32_kbdhook_active (os_subtype != OS_9X)
+#else
+#define w32_kbdhook_active 0
+#endif
+
 /* Keypad command key support.  W32 doesn't have virtual keys defined
    for the function keys on the keypad (they are mapped to the standard
    function keys), so we define our own.  */
index 04bf5ce733e45dcb57a1e58a63dc83e6cf1c7a44..b5b22c9aa5207435d509e2219031a4b7c634ca0f 100644 (file)
@@ -48,6 +48,21 @@ init_crit (void)
      when the input queue is empty, so make it a manual reset event. */
   input_available = CreateEvent (NULL, TRUE, FALSE, NULL);
 
+#if HAVE_W32NOTIFY
+  /* Initialize the linked list of notifications sets that will be
+     used to communicate between the watching worker threads and the
+     main thread.  */
+  notifications_set_head = malloc (sizeof(struct notifications_set));
+  if (notifications_set_head)
+    {
+      memset (notifications_set_head, 0, sizeof(struct notifications_set));
+      notifications_set_head->next
+       = notifications_set_head->prev = notifications_set_head;
+    }
+  else
+    DebPrint(("Out of memory: can't initialize notifications sets."));
+#endif
+
 #ifdef WINDOWSNT
   keyboard_handle = input_available;
 #endif /* WINDOWSNT */
@@ -76,6 +91,23 @@ delete_crit (void)
       CloseHandle (interrupt_handle);
       interrupt_handle = NULL;
     }
+
+#if HAVE_W32NOTIFY
+  if (notifications_set_head)
+    {
+      /* Free any remaining notifications set that could be left over.  */
+      while (notifications_set_head->next != notifications_set_head)
+       {
+         struct notifications_set *ns = notifications_set_head->next;
+         notifications_set_head->next = ns->next;
+         ns->next->prev = notifications_set_head;
+         if (ns->notifications)
+           free (ns->notifications);
+         free (ns);
+       }
+    }
+  free (notifications_set_head);
+#endif
 }
 
 void
index 733cf75d1321b87ced5a51767c496f7fdbcedbce..cf7fa44ae41dc05e8df01fb877f29af27c65f0cc 100644 (file)
@@ -57,6 +57,7 @@ static bool foreach_window_1 (struct window *,
 static bool window_resize_check (struct window *, bool);
 static void window_resize_apply (struct window *, bool);
 static void select_window_1 (Lisp_Object, bool);
+static void run_window_configuration_change_hook (struct frame *);
 
 static struct window *set_window_fringes (struct window *, Lisp_Object,
                                          Lisp_Object, Lisp_Object);
@@ -720,6 +721,36 @@ the height of the screen areas spanned by its children.  */)
   return make_number (decode_valid_window (window)->pixel_height);
 }
 
+DEFUN ("window-pixel-width-before-size-change",
+       Fwindow_pixel_width_before_size_change,
+       Swindow_pixel_width_before_size_change, 0, 1, 0,
+       doc: /* Return pixel width of window WINDOW before last size changes.
+WINDOW must be a valid window and defaults to the selected one.
+
+The return value is the pixel width of WINDOW at the last time
+`window-size-change-functions' was run.  It's zero if WINDOW was made
+after that.  */)
+  (Lisp_Object window)
+{
+  return (make_number
+         (decode_valid_window (window)->pixel_width_before_size_change));
+}
+
+DEFUN ("window-pixel-height-before-size-change",
+       Fwindow_pixel_height_before_size_change,
+       Swindow_pixel_height_before_size_change, 0, 1, 0,
+       doc: /* Return pixel height of window WINDOW before last size changes.
+WINDOW must be a valid window and defaults to the selected one.
+
+The return value is the pixel height of WINDOW at the last time
+`window-size-change-functions' was run.  It's zero if WINDOW was made
+after that.  */)
+  (Lisp_Object window)
+{
+  return (make_number
+         (decode_valid_window (window)->pixel_height_before_size_change));
+}
+
 DEFUN ("window-total-height", Fwindow_total_height, Swindow_total_height, 0, 2, 0,
        doc: /* Return the height of window WINDOW in lines.
 WINDOW must be a valid window and defaults to the selected one.
@@ -2828,9 +2859,12 @@ selected frame and no others.  */)
 
 
 static Lisp_Object
-resize_root_window (Lisp_Object window, Lisp_Object delta, Lisp_Object horizontal, Lisp_Object ignore, Lisp_Object pixelwise)
+resize_root_window (Lisp_Object window, Lisp_Object delta,
+                   Lisp_Object horizontal, Lisp_Object ignore,
+                   Lisp_Object pixelwise)
 {
-  return call5 (Qwindow_resize_root_window, window, delta, horizontal, ignore, pixelwise);
+  return call5 (Qwindow__resize_root_window, window, delta,
+               horizontal, ignore, pixelwise);
 }
 
 /* Placeholder used by temacs -nw before window.el is loaded.  */
@@ -2846,14 +2880,14 @@ DEFUN ("window--sanitize-window-sizes", Fwindow__sanitize_window_sizes,
 Lisp_Object
 sanitize_window_sizes (Lisp_Object frame, Lisp_Object horizontal)
 {
-  return call2 (Qwindow_sanitize_window_sizes, frame, horizontal);
+  return call2 (Qwindow__sanitize_window_sizes, frame, horizontal);
 }
 
 
 static Lisp_Object
 window_pixel_to_total (Lisp_Object frame, Lisp_Object horizontal)
 {
-  return call2 (Qwindow_pixel_to_total, frame, horizontal);
+  return call2 (Qwindow__pixel_to_total, frame, horizontal);
 }
 
 
@@ -2879,6 +2913,7 @@ window-start value is reasonable when this function is called.  */)
   Lisp_Object sibling, pwindow, swindow IF_LINT (= Qnil), delta;
   ptrdiff_t startpos IF_LINT (= 0), startbyte IF_LINT (= 0);
   int top IF_LINT (= 0), new_top;
+  bool resize_failed = false;
 
   w = decode_valid_window (window);
   XSETWINDOW (window, w);
@@ -2978,8 +3013,6 @@ window-start value is reasonable when this function is called.  */)
 
   fset_redisplay (f);
   Vwindow_list = Qnil;
-  FRAME_WINDOW_SIZES_CHANGED (f) = true;
-  bool resize_failed = false;
 
   if (!WINDOW_LEAF_P (w))
     {
@@ -3157,7 +3190,7 @@ select_frame_norecord (Lisp_Object frame)
     Fselect_frame (frame, Qt);
 }
 
-void
+static void
 run_window_configuration_change_hook (struct frame *f)
 {
   ptrdiff_t count = SPECPDL_INDEX ();
@@ -3229,6 +3262,76 @@ If WINDOW is omitted or nil, it defaults to the selected window.  */)
   return Qnil;
 }
 
+
+/* Compare old and present pixel sizes of windows in tree rooted at W.
+   Return true iff any of these windows differs in size.  */
+
+static bool
+window_size_changed (struct window *w)
+{
+  if (w->pixel_width != w->pixel_width_before_size_change
+      || w->pixel_height != w->pixel_height_before_size_change)
+    return true;
+
+  if (WINDOW_INTERNAL_P (w))
+    {
+      w = XWINDOW (w->contents);
+      while (w)
+       {
+         if (window_size_changed (w))
+           return true;
+
+         w = NILP (w->next) ? 0 : XWINDOW (w->next);
+       }
+    }
+
+  return false;
+}
+
+/* Set before size change pixel sizes of windows in tree rooted at W to
+   their present pixel sizes.  */
+
+static void
+window_set_before_size_change_sizes (struct window *w)
+{
+  w->pixel_width_before_size_change = w->pixel_width;
+  w->pixel_height_before_size_change = w->pixel_height;
+
+  if (WINDOW_INTERNAL_P (w))
+    {
+      w = XWINDOW (w->contents);
+      while (w)
+       {
+         window_set_before_size_change_sizes (w);
+         w = NILP (w->next) ? 0 : XWINDOW (w->next);
+       }
+    }
+}
+
+
+void
+run_window_size_change_functions (Lisp_Object frame)
+{
+  struct frame *f = XFRAME (frame);
+  struct window *r = XWINDOW (FRAME_ROOT_WINDOW (f));
+  Lisp_Object functions = Vwindow_size_change_functions;
+
+  if (FRAME_WINDOW_CONFIGURATION_CHANGED (f)
+      || window_size_changed (r))
+    {
+      while (CONSP (functions))
+       {
+         if (!EQ (XCAR (functions), Qt))
+           safe_call1 (XCAR (functions), frame);
+         functions = XCDR (functions);
+       }
+
+      window_set_before_size_change_sizes (r);
+      FRAME_WINDOW_CONFIGURATION_CHANGED (f) = false;
+    }
+}
+
+
 /* Make WINDOW display BUFFER.  RUN_HOOKS_P means it's allowed
    to run hooks.  See make_frame for a case where it's not allowed.
    KEEP_MARGINS_P means that the current margins, fringes, and
@@ -3263,15 +3366,9 @@ set_window_buffer (Lisp_Object window, Lisp_Object buffer,
 
   if (!(keep_margins_p && samebuf))
     { /* If we're not actually changing the buffer, don't reset hscroll
-        and vscroll.  This case happens for example when called from
-        change_frame_size_1, where we use a dummy call to
-        Fset_window_buffer on the frame's selected window (and no
-        other) just in order to run window-configuration-change-hook
-        (no longer true since change_frame_size_1 directly calls
-        run_window_configuration_change_hook).  Resetting hscroll and
-        vscroll here is problematic for things like image-mode and
-        doc-view-mode since it resets the image's position whenever we
-        resize the frame.  */
+        and vscroll.  Resetting hscroll and vscroll here is problematic
+        for things like image-mode and doc-view-mode since it resets
+        the image's position whenever we resize the frame.  */
       w->hscroll = w->min_hscroll = w->hscroll_whole = 0;
       w->suspend_auto_hscroll = false;
       w->vscroll = 0;
@@ -3283,10 +3380,8 @@ set_window_buffer (Lisp_Object window, Lisp_Object buffer,
       w->start_at_line_beg = false;
       w->force_start = false;
     }
-  /* Maybe we could move this into the `if' but it's not obviously safe and
-     I doubt it's worth the trouble.  */
-  wset_redisplay (w);
 
+  wset_redisplay (w);
   wset_update_mode_line (w);
 
   /* We must select BUFFER to run the window-scroll-functions and to look up
@@ -3314,7 +3409,7 @@ set_window_buffer (Lisp_Object window, Lisp_Object buffer,
 
   if (run_hooks_p)
     {
-      if (! NILP (Vwindow_scroll_functions))
+      if (!NILP (Vwindow_scroll_functions))
        run_hook_with_args_2 (Qwindow_scroll_functions, window,
                              Fmarker_position (w->start));
       if (!samebuf)
@@ -3559,6 +3654,8 @@ make_window (void)
   w->phys_cursor_width = -1;
 #endif
   w->sequence_number = ++sequence_number;
+  w->pixel_width_before_size_change = 0;
+  w->pixel_height_before_size_change = 0;
   w->scroll_bar_width = -1;
   w->scroll_bar_height = -1;
   w->column_number_displayed = -1;
@@ -3922,7 +4019,6 @@ be applied on the Elisp level.  */)
   window_resize_apply (r, horflag);
 
   fset_redisplay (f);
-  FRAME_WINDOW_SIZES_CHANGED (f) = true;
 
   adjust_frame_glyphs (f);
   unblock_input ();
@@ -4089,7 +4185,6 @@ resize_frame_windows (struct frame *f, int size, bool horflag, bool pixelwise)
        }
     }
 
-  FRAME_WINDOW_SIZES_CHANGED (f) = true;
   fset_redisplay (f);
 }
 
@@ -4216,7 +4311,6 @@ set correctly.  See the code of `split-window' for how this is done.  */)
     p = XWINDOW (o->parent);
 
   fset_redisplay (f);
-  FRAME_WINDOW_SIZES_CHANGED (f) = true;
   new = make_window ();
   n = XWINDOW (new);
   wset_frame (n, frame);
@@ -4385,7 +4479,6 @@ Signal an error when WINDOW is the only window on its frame.  */)
 
       fset_redisplay (f);
       Vwindow_list = Qnil;
-      FRAME_WINDOW_SIZES_CHANGED (f) = true;
 
       wset_next (w, Qnil);  /* Don't delete w->next too.  */
       free_window_matrices (w);
@@ -4453,9 +4546,6 @@ Signal an error when WINDOW is the only window on its frame.  */)
        }
       else
        unblock_input ();
-
-      /* Must be run by the caller:
-        run_window_configuration_change_hook (f);  */
     }
   else
     /* We failed: Relink WINDOW into window tree.  */
@@ -4498,7 +4588,7 @@ grow_mini_window (struct window *w, int delta, bool pixelwise)
     {
       root = FRAME_ROOT_WINDOW (f);
       r = XWINDOW (root);
-      height = call3 (Qwindow_resize_root_window_vertically,
+      height = call3 (Qwindow__resize_root_window_vertically,
                      root, make_number (- delta), pixelwise ? Qt : Qnil);
       if (INTEGERP (height) && window_resize_check (r, false))
        {
@@ -4529,10 +4619,12 @@ grow_mini_window (struct window *w, int delta, bool pixelwise)
          /* Enforce full redisplay of the frame.  */
          /* FIXME: Shouldn't window--resize-root-window-vertically do it?  */
          fset_redisplay (f);
-         FRAME_WINDOW_SIZES_CHANGED (f) = true;
          adjust_frame_glyphs (f);
          unblock_input ();
        }
+      else
+       error ("Failed to grow minibuffer window");
+
     }
 }
 
@@ -4553,7 +4645,7 @@ shrink_mini_window (struct window *w, bool pixelwise)
     {
       root = FRAME_ROOT_WINDOW (f);
       r = XWINDOW (root);
-      delta = call3 (Qwindow_resize_root_window_vertically,
+      delta = call3 (Qwindow__resize_root_window_vertically,
                     root, make_number (height - unit),
                     pixelwise ? Qt : Qnil);
       if (INTEGERP (delta) && window_resize_check (r, false))
@@ -4569,7 +4661,6 @@ shrink_mini_window (struct window *w, bool pixelwise)
          /* Enforce full redisplay of the frame.  */
          /* FIXME: Shouldn't window--resize-root-window-vertically do it?  */
          fset_redisplay (f);
-         FRAME_WINDOW_SIZES_CHANGED (f) = true;
          adjust_frame_glyphs (f);
          unblock_input ();
        }
@@ -4577,6 +4668,8 @@ shrink_mini_window (struct window *w, bool pixelwise)
         one window frame here.  The same routine will be needed when
         shrinking the frame (and probably when making the initial
         *scratch* window).  For the moment leave things as they are.  */
+      else
+       error ("Failed to shrink minibuffer window");
     }
 }
 
@@ -4612,7 +4705,6 @@ DEFUN ("resize-mini-window-internal", Fresize_mini_window_internal, Sresize_mini
       w->top_line = r->top_line + r->total_lines;
 
       fset_redisplay (f);
-      FRAME_WINDOW_SIZES_CHANGED (f) = true;
       adjust_frame_glyphs (f);
       unblock_input ();
       return Qt;
@@ -5950,6 +6042,7 @@ struct saved_window
 
   Lisp_Object window, buffer, start, pointm, old_pointm;
   Lisp_Object pixel_left, pixel_top, pixel_height, pixel_width;
+  Lisp_Object pixel_height_before_size_change, pixel_width_before_size_change;
   Lisp_Object left_col, top_line, total_cols, total_lines;
   Lisp_Object normal_cols, normal_lines;
   Lisp_Object hscroll, min_hscroll, hscroll_whole, suspend_auto_hscroll;
@@ -6065,6 +6158,12 @@ the return value is nil.  Otherwise the value is t.  */)
       struct window *root_window;
       struct window **leaf_windows;
       ptrdiff_t i, k, n_leaf_windows;
+      /* Records whether a window has been added or removed wrt the
+        original configuration.  */
+      bool window_changed = false;
+      /* Records whether a window has changed its buffer wrt the
+        original configuration.  */
+      bool buffer_changed = false;
 
       /* Don't do this within the main loop below: This may call Lisp
         code and is thus potentially unsafe while input is blocked.  */
@@ -6073,6 +6172,12 @@ the return value is nil.  Otherwise the value is t.  */)
          p = SAVED_WINDOW_N (saved_windows, k);
          window = p->window;
          w = XWINDOW (window);
+
+         if (NILP (w->contents))
+           /* A dead window that will be resurrected, the window
+              configuration will change.  */
+           window_changed = true;
+
          if (BUFFERP (w->contents)
              && !EQ (w->contents, p->buffer)
              && BUFFER_LIVE_P (XBUFFER (p->buffer)))
@@ -6102,7 +6207,6 @@ the return value is nil.  Otherwise the value is t.  */)
        }
 
       fset_redisplay (f);
-      FRAME_WINDOW_SIZES_CHANGED (f) = true;
 
       /* Problem: Freeing all matrices and later allocating them again
         is a serious redisplay flickering problem.  What we would
@@ -6158,6 +6262,10 @@ the return value is nil.  Otherwise the value is t.  */)
          w->pixel_top = XFASTINT (p->pixel_top);
          w->pixel_width = XFASTINT (p->pixel_width);
          w->pixel_height = XFASTINT (p->pixel_height);
+         w->pixel_width_before_size_change
+           = XFASTINT (p->pixel_width_before_size_change);
+         w->pixel_height_before_size_change
+           = XFASTINT (p->pixel_height_before_size_change);
          w->left_col = XFASTINT (p->left_col);
          w->top_line = XFASTINT (p->top_line);
          w->total_cols = XFASTINT (p->total_cols);
@@ -6205,6 +6313,9 @@ the return value is nil.  Otherwise the value is t.  */)
          if (BUFFERP (p->buffer) && BUFFER_LIVE_P (XBUFFER (p->buffer)))
            /* If saved buffer is alive, install it.  */
            {
+             if (!EQ (w->contents, p->buffer))
+               /* Record buffer configuration change.  */
+               buffer_changed = true;
              wset_buffer (w, p->buffer);
              w->start_at_line_beg = !NILP (p->start_at_line_beg);
              set_marker_restricted (w->start, p->start, w->contents);
@@ -6238,6 +6349,8 @@ the return value is nil.  Otherwise the value is t.  */)
          else if (!NILP (w->start))
            /* Leaf window has no live buffer, get one.  */
            {
+             /* Record buffer configuration change.  */
+             buffer_changed = true;
              /* Get the buffer via other_buffer_safely in order to
                 avoid showing an unimportant buffer and, if necessary, to
                 recreate *scratch* in the course (part of Juanma's bs-show
@@ -6285,7 +6398,10 @@ the return value is nil.  Otherwise the value is t.  */)
       /* Now, free glyph matrices in windows that were not reused.  */
       for (i = 0; i < n_leaf_windows; i++)
        if (NILP (leaf_windows[i]->contents))
-         free_window_matrices (leaf_windows[i]);
+         {
+           free_window_matrices (leaf_windows[i]);
+           window_changed = true;
+         }
 
       /* Allow x_set_window_size again and apply frame size changes if
         needed.  */
@@ -6305,7 +6421,8 @@ the return value is nil.  Otherwise the value is t.  */)
 
       /* Record the selected window's buffer here.  The window should
         already be the selected one from the call above.  */
-      select_window (data->current_window, Qnil, false);
+      if (WINDOW_LIVE_P (data->current_window))
+       select_window (data->current_window, Qnil, false);
 
       /* Fselect_window will have made f the selected frame, so we
         reselect the proper frame here.  Fhandle_switch_frame will change the
@@ -6315,7 +6432,32 @@ the return value is nil.  Otherwise the value is t.  */)
       if (FRAME_LIVE_P (XFRAME (data->selected_frame)))
        do_switch_frame (data->selected_frame, 0, 0, Qnil);
 
-      run_window_configuration_change_hook (f);
+      if (window_changed)
+       /* At least one window has been added or removed.  Run
+          `window-configuration-change-hook' and make sure
+          `window-size-change-functions' get run later.
+
+          We have to do this in order to capture the following
+          scenario: Suppose our frame contains two live windows W1 and
+          W2 and ‘set-window-configuration’ replaces them by two
+          windows W3 and W4 that were dead the last time
+          run_window_size_change_functions was run.  If W3 and W4 have
+          the same values for their old and new pixel sizes but these
+          values differ from those of W1 and W2, the sizes of our
+          frame's two live windows changed but window_size_changed has
+          no means to detect that fact.
+
+          Obviously, this will get us false positives, for example,
+          when we restore the original configuration with W1 and W2
+          before run_window_size_change_functions gets called.  */
+       {
+         run_window_configuration_change_hook (f);
+         FRAME_WINDOW_CONFIGURATION_CHANGED (f) = true;
+       }
+      else if (buffer_changed)
+       /* At least one window has changed its buffer.  Run
+          `window-configuration-change-hook' only.  */
+       run_window_configuration_change_hook (f);
     }
 
   if (!NILP (new_current_buffer))
@@ -6466,6 +6608,10 @@ save_window_save (Lisp_Object window, struct Lisp_Vector *vector, ptrdiff_t i)
       p->pixel_top = make_number (w->pixel_top);
       p->pixel_width = make_number (w->pixel_width);
       p->pixel_height = make_number (w->pixel_height);
+      p->pixel_width_before_size_change
+       = make_number (w->pixel_width_before_size_change);
+      p->pixel_height_before_size_change
+       = make_number (w->pixel_height_before_size_change);
       p->left_col = make_number (w->left_col);
       p->top_line = make_number (w->top_line);
       p->total_cols = make_number (w->total_cols);
@@ -7166,10 +7312,11 @@ syms_of_window (void)
   DEFSYM (Qwindow_valid_p, "window-valid-p");
   DEFSYM (Qwindow_deletable_p, "window-deletable-p");
   DEFSYM (Qdelete_window, "delete-window");
-  DEFSYM (Qwindow_resize_root_window, "window--resize-root-window");
-  DEFSYM (Qwindow_resize_root_window_vertically, "window--resize-root-window-vertically");
-  DEFSYM (Qwindow_sanitize_window_sizes, "window--sanitize-window-sizes");
-  DEFSYM (Qwindow_pixel_to_total, "window--pixel-to-total");
+  DEFSYM (Qwindow__resize_root_window, "window--resize-root-window");
+  DEFSYM (Qwindow__resize_root_window_vertically,
+         "window--resize-root-window-vertically");
+  DEFSYM (Qwindow__sanitize_window_sizes, "window--sanitize-window-sizes");
+  DEFSYM (Qwindow__pixel_to_total, "window--pixel-to-total");
   DEFSYM (Qsafe, "safe");
   DEFSYM (Qdisplay_buffer, "display-buffer");
   DEFSYM (Qreplace_buffer_in_windows, "replace-buffer-in-windows");
@@ -7248,6 +7395,16 @@ selected; while the global part is run only once for the modified frame,
 with the relevant frame selected.  */);
   Vwindow_configuration_change_hook = Qnil;
 
+  DEFVAR_LISP ("window-size-change-functions", Vwindow_size_change_functions,
+    doc: /* Functions called during redisplay, if window sizes have changed.
+The value should be a list of functions that take one argument.
+During the first part of redisplay, for each frame, if any of its windows
+have changed size since the last redisplay, or have been split or deleted,
+all the functions in the list are called, with the frame as argument.
+If redisplay decides to resize the minibuffer window, it calls these
+functions on behalf of that as well.  */);
+  Vwindow_size_change_functions = Qnil;
+
   DEFVAR_LISP ("recenter-redisplay", Vrecenter_redisplay,
               doc: /* Non-nil means `recenter' redraws entire frame.
 If this option is non-nil, then the `recenter' command with a nil
@@ -7376,6 +7533,8 @@ displayed after a scrolling operation to be somewhat inaccurate.  */);
   defsubr (&Swindow_use_time);
   defsubr (&Swindow_pixel_width);
   defsubr (&Swindow_pixel_height);
+  defsubr (&Swindow_pixel_width_before_size_change);
+  defsubr (&Swindow_pixel_height_before_size_change);
   defsubr (&Swindow_total_width);
   defsubr (&Swindow_total_height);
   defsubr (&Swindow_normal_size);
index 0cfff88be51d1182dc6bc02a1af97d1cf8cdbb5a..1fd19369c33b2d51b170f3936d5aee8dadcc719a 100644 (file)
@@ -214,6 +214,11 @@ struct window
     int pixel_width;
     int pixel_height;
 
+    /* The pixel sizes of the window at the last time
+       `window-size-change-functions' was run.  */
+    int pixel_width_before_size_change;
+    int pixel_height_before_size_change;
+
     /* The size of the window.  */
     int total_cols;
     int total_lines;
@@ -499,15 +504,17 @@ wset_next_buffers (struct window *w, Lisp_Object val)
 #define WINDOW_LEAF_P(W) \
   (BUFFERP ((W)->contents))
 
-/* True if W is a member of horizontal combination.  */
+/* Non-nil if W is internal.  */
+#define WINDOW_INTERNAL_P(W) \
+  (WINDOWP ((W)->contents))
 
+/* True if W is a member of horizontal combination.  */
 #define WINDOW_HORIZONTAL_COMBINATION_P(W) \
-  (WINDOWP ((W)->contents) && (W)->horizontal)
+  (WINDOW_INTERNAL_P (W) && (W)->horizontal)
 
 /* True if W is a member of vertical combination.  */
-
 #define WINDOW_VERTICAL_COMBINATION_P(W) \
-  (WINDOWP ((W)->contents) && !(W)->horizontal)
+  (WINDOW_INTERNAL_P (W) && !(W)->horizontal)
 
 /* WINDOW's XFRAME.  */
 #define WINDOW_XFRAME(W) (XFRAME (WINDOW_FRAME ((W))))
@@ -786,7 +793,7 @@ wset_next_buffers (struct window *w, Lisp_Object val)
    || WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (W))
 
 #if (defined (HAVE_WINDOW_SYSTEM)                                      \
-     && ((defined (USE_TOOLKIT_SCROLL_BARS) && !defined (HAVE_NS))     \
+     && ((defined (USE_TOOLKIT_SCROLL_BARS))   \
         || defined (HAVE_NTGUI)))
 # define USE_HORIZONTAL_SCROLL_BARS true
 #else
@@ -1013,7 +1020,7 @@ extern void grow_mini_window (struct window *, int, bool);
 extern void shrink_mini_window (struct window *, bool);
 extern int window_relative_x_coord (struct window *, enum window_part, int);
 
-void run_window_configuration_change_hook (struct frame *f);
+void run_window_size_change_functions (Lisp_Object);
 
 /* Make WINDOW display BUFFER.  RUN_HOOKS_P means it's allowed
    to run hooks.  See make_frame for a case where it's not allowed.  */
index cc2c951ce5c17997470b5b0807940e839cc9b7e8..d0ff95257cefa2263a6944591779676d1253e499 100644 (file)
@@ -7080,6 +7080,19 @@ get_next_display_element (struct it *it)
                  goto display_control;
                }
 
+             /* Handle non-ascii hyphens in the mode where it only
+                gets highlighting.  */
+
+             if (nonascii_hyphen_p && EQ (Vnobreak_char_display, Qt))
+               {
+                 /* Merge `nobreak-space' into the current face.  */
+                 face_id = merge_faces (it->f, Qnobreak_hyphen, 0,
+                                        it->face_id);
+                 XSETINT (it->ctl_chars[0], '-');
+                 ctl_len = 1;
+                 goto display_control;
+               }
+
              /* Handle sequences that start with the "escape glyph".  */
 
              /* the default escape glyph is \.  */
@@ -7096,15 +7109,6 @@ get_next_display_element (struct it *it)
                         ? merge_faces (it->f, Qt, lface_id, it->face_id)
                         : merge_escape_glyph_face (it));
 
-             /* Draw non-ASCII hyphen with just highlighting: */
-
-             if (nonascii_hyphen_p && EQ (Vnobreak_char_display, Qt))
-               {
-                 XSETINT (it->ctl_chars[0], '-');
-                 ctl_len = 1;
-                 goto display_control;
-               }
-
              /* Draw non-ASCII space/hyphen with escape glyph: */
 
              if (nonascii_space_p || nonascii_hyphen_p)
@@ -9827,26 +9831,28 @@ the maximum pixel-height of all text lines.
 
 The optional argument FROM, if non-nil, specifies the first text
 position and defaults to the minimum accessible position of the buffer.
-If FROM is t, use the minimum accessible position that is not a newline
-character.  TO, if non-nil, specifies the last text position and
+If FROM is t, use the minimum accessible position that starts a
+non-empty line.  TO, if non-nil, specifies the last text position and
 defaults to the maximum accessible position of the buffer.  If TO is t,
-use the maximum accessible position that is not a newline character.
+use the maximum accessible position that ends a non-empty line.
 
 The optional argument X-LIMIT, if non-nil, specifies the maximum text
 width that can be returned.  X-LIMIT nil or omitted, means to use the
-pixel-width of WINDOW's body; use this if you do not intend to change
-the width of WINDOW.  Use the maximum width WINDOW may assume if you
-intend to change WINDOW's width.  In any case, text whose x-coordinate
-is beyond X-LIMIT is ignored.  Since calculating the width of long lines
-can take some time, it's always a good idea to make this argument as
-small as possible; in particular, if the buffer contains long lines that
-shall be truncated anyway.
+pixel-width of WINDOW's body; use this if you want to know how high
+WINDOW should be become in order to fit all of its buffer's text with
+the width of WINDOW unaltered.  Use the maximum width WINDOW may assume
+if you intend to change WINDOW's width.  In any case, text whose
+x-coordinate is beyond X-LIMIT is ignored.  Since calculating the width
+of long lines can take some time, it's always a good idea to make this
+argument as small as possible; in particular, if the buffer contains
+long lines that shall be truncated anyway.
 
 The optional argument Y-LIMIT, if non-nil, specifies the maximum text
-height that can be returned.  Text lines whose y-coordinate is beyond
-Y-LIMIT are ignored.  Since calculating the text height of a large
-buffer can take some time, it makes sense to specify this argument if
-the size of the buffer is unknown.
+height (excluding the height of the mode- or header-line, if any) that
+can be returned.  Text lines whose y-coordinate is beyond Y-LIMIT are
+ignored.  Since calculating the text height of a large buffer can take
+some time, it makes sense to specify this argument if the size of the
+buffer is large or unknown.
 
 Optional argument MODE-AND-HEADER-LINE nil or omitted means do not
 include the height of the mode- or header-line of WINDOW in the return
@@ -9864,7 +9870,7 @@ include the height of both, if present, in the return value.  */)
   ptrdiff_t start, end, pos;
   struct text_pos startp;
   void *itdata = NULL;
-  int c, max_y = -1, x = 0, y = 0;
+  int c, max_x = 0, max_y = 0, x = 0, y = 0;
 
   CHECK_BUFFER (buffer);
   b = XBUFFER (buffer);
@@ -9909,11 +9915,13 @@ include the height of both, if present, in the return value.  */)
       end = max (start, min (XINT (to), ZV));
     }
 
-  if (!NILP (y_limit))
-    {
-      CHECK_NUMBER (y_limit);
-      max_y = min (XINT (y_limit), INT_MAX);
-    }
+  if (!NILP (x_limit) && RANGED_INTEGERP (0, x_limit, INT_MAX))
+    max_x = XINT (x_limit);
+
+  if (NILP (y_limit))
+    max_y = INT_MAX;
+  else if (RANGED_INTEGERP (0, y_limit, INT_MAX))
+    max_y = XINT (y_limit);
 
   itdata = bidi_shelve_cache ();
   SET_TEXT_POS (startp, start, CHAR_TO_BYTE (start));
@@ -9923,27 +9931,30 @@ include the height of both, if present, in the return value.  */)
     x = move_it_to (&it, end, -1, max_y, -1, MOVE_TO_POS | MOVE_TO_Y);
   else
     {
-      CHECK_NUMBER (x_limit);
-      it.last_visible_x = min (XINT (x_limit), INFINITY);
+      it.last_visible_x = max_x;
       /* Actually, we never want move_it_to stop at to_x.  But to make
         sure that move_it_in_display_line_to always moves far enough,
-        we set it to INT_MAX and specify MOVE_TO_X.  */
-      x = move_it_to (&it, end, INT_MAX, max_y, -1,
-                     MOVE_TO_POS | MOVE_TO_X | MOVE_TO_Y);
+        we set it to INT_MAX and specify MOVE_TO_X.  Also bound width
+        value by X-LIMIT.  */
+      x = min (move_it_to (&it, end, INT_MAX, max_y, -1,
+                          MOVE_TO_POS | MOVE_TO_X | MOVE_TO_Y),
+              max_x);
     }
 
-  y = it.current_y + it.max_ascent + it.max_descent;
+  /* Subtract height of header-line which was counted automatically by
+     start_display.  */
+  y = min (it.current_y + it.max_ascent + it.max_descent
+          - WINDOW_HEADER_LINE_HEIGHT (w),
+          max_y);
 
-  if (!EQ (mode_and_header_line, Qheader_line)
-      && !EQ (mode_and_header_line, Qt))
-    /* Do not count the header-line which was counted automatically by
-       start_display.  */
-    y = y - WINDOW_HEADER_LINE_HEIGHT (w);
+  if (EQ (mode_and_header_line, Qheader_line)
+      || EQ (mode_and_header_line, Qt))
+    /* Re-add height of header-line as requested.  */
+    y = y + WINDOW_HEADER_LINE_HEIGHT (w);
 
   if (EQ (mode_and_header_line, Qmode_line)
       || EQ (mode_and_header_line, Qt))
-    /* Do count the mode-line which is not included automatically by
-       start_display.  */
+    /* Add height of mode-line as requested.  */
     y = y + WINDOW_MODE_LINE_HEIGHT (w);
 
   bidi_unshelve_cache (itdata, false);
@@ -10521,25 +10532,21 @@ update_echo_area (void)
 static void
 ensure_echo_area_buffers (void)
 {
-  int i;
-
-  for (i = 0; i < 2; ++i)
+  for (int i = 0; i < 2; i++)
     if (!BUFFERP (echo_buffer[i])
        || !BUFFER_LIVE_P (XBUFFER (echo_buffer[i])))
       {
-       char name[30];
-       Lisp_Object old_buffer;
-       int j;
-
-       old_buffer = echo_buffer[i];
-       echo_buffer[i] = Fget_buffer_create
-         (make_formatted_string (name, " *Echo Area %d*", i));
+       Lisp_Object old_buffer = echo_buffer[i];
+       static char const name_fmt[] = " *Echo Area %d*";
+       char name[sizeof name_fmt + INT_STRLEN_BOUND (int)];
+       AUTO_STRING_WITH_LEN (lname, name, sprintf (name, name_fmt, i));
+       echo_buffer[i] = Fget_buffer_create (lname);
        bset_truncate_lines (XBUFFER (echo_buffer[i]), Qnil);
        /* to force word wrap in echo area -
           it was decided to postpone this*/
        /* XBUFFER (echo_buffer[i])->word_wrap = Qt; */
 
-       for (j = 0; j < 2; ++j)
+       for (int j = 0; j < 2; j++)
          if (EQ (old_buffer, echo_area_buffer[j]))
            echo_area_buffer[j] = echo_buffer[i];
       }
@@ -11826,24 +11833,7 @@ prepare_menu_bars (void)
              && !XBUFFER (w->contents)->text->redisplay)
            continue;
 
-         /* If a window on this frame changed size, report that to
-            the user and clear the size-change flag.  */
-         if (FRAME_WINDOW_SIZES_CHANGED (f))
-           {
-             Lisp_Object functions;
-
-             /* Clear flag first in case we get an error below.  */
-             FRAME_WINDOW_SIZES_CHANGED (f) = false;
-             functions = Vwindow_size_change_functions;
-
-             while (CONSP (functions))
-               {
-                 if (!EQ (XCAR (functions), Qt))
-                   call1 (XCAR (functions), frame);
-                 functions = XCDR (functions);
-               }
-           }
-
+         run_window_size_change_functions (frame);
          menu_bar_hooks_run = update_menu_bar (f, false, menu_bar_hooks_run);
 #ifdef HAVE_WINDOW_SYSTEM
          update_tool_bar (f, false);
@@ -13518,7 +13508,7 @@ redisplay_internal (void)
   specbind (Qinhibit_free_realized_faces, Qnil);
 
   /* Record this function, so it appears on the profiler's backtraces.  */
-  record_in_backtrace (Qredisplay_internal, 0, 0);
+  record_in_backtrace (Qredisplay_internal_xC_functionx, 0, 0);
 
   FOR_EACH_FRAME (tail, frame)
     XFRAME (frame)->already_hscrolled_p = false;
@@ -13639,24 +13629,12 @@ redisplay_internal (void)
         it's too late for the hooks in window-size-change-functions,
         which have been examined already in prepare_menu_bars.  So in
         that case we call the hooks here only for the selected frame.  */
-      if (sf->redisplay && FRAME_WINDOW_SIZES_CHANGED (sf))
+      if (sf->redisplay)
        {
-         Lisp_Object functions;
          ptrdiff_t count1 = SPECPDL_INDEX ();
 
          record_unwind_save_match_data ();
-
-         /* Clear flag first in case we get an error below.  */
-         FRAME_WINDOW_SIZES_CHANGED (sf) = false;
-         functions = Vwindow_size_change_functions;
-
-         while (CONSP (functions))
-           {
-             if (!EQ (XCAR (functions), Qt))
-               call1 (XCAR (functions), selected_frame);
-             functions = XCDR (functions);
-           }
-
+         run_window_size_change_functions (selected_frame);
          unbind_to (count1, Qnil);
        }
 
@@ -13678,22 +13656,10 @@ redisplay_internal (void)
     {
       if (sf->redisplay)
        {
-         Lisp_Object functions;
          ptrdiff_t count1 = SPECPDL_INDEX ();
 
          record_unwind_save_match_data ();
-
-         /* Clear flag first in case we get an error below.  */
-         FRAME_WINDOW_SIZES_CHANGED (sf) = false;
-         functions = Vwindow_size_change_functions;
-
-         while (CONSP (functions))
-           {
-             if (!EQ (XCAR (functions), Qt))
-               call1 (XCAR (functions), selected_frame);
-             functions = XCDR (functions);
-           }
-
+         run_window_size_change_functions (selected_frame);
          unbind_to (count1, Qnil);
        }
 
@@ -14070,9 +14036,6 @@ redisplay_internal (void)
     }
   else if (FRAME_VISIBLE_P (sf) && !FRAME_OBSCURED_P (sf))
     {
-      Lisp_Object mini_window = FRAME_MINIBUF_WINDOW (sf);
-      struct frame *mini_frame;
-
       displayed_buffer = XBUFFER (XWINDOW (selected_window)->contents);
       /* Use list_of_error, not Qerror, so that
         we catch only errors and don't run the debugger.  */
@@ -14080,8 +14043,8 @@ redisplay_internal (void)
                                 list_of_error,
                                 redisplay_window_error);
       if (update_miniwindow_p)
-       internal_condition_case_1 (redisplay_window_1, mini_window,
-                                  list_of_error,
+       internal_condition_case_1 (redisplay_window_1,
+                                  FRAME_MINIBUF_WINDOW (sf), list_of_error,
                                   redisplay_window_error);
 
       /* Compare desired and current matrices, perform output.  */
@@ -14131,8 +14094,8 @@ redisplay_internal (void)
         have put text on a frame other than the selected one, so the
         above call to update_frame would not have caught it.  Catch
         it here.  */
-      mini_window = FRAME_MINIBUF_WINDOW (sf);
-      mini_frame = XFRAME (WINDOW_FRAME (XWINDOW (mini_window)));
+      Lisp_Object mini_window = FRAME_MINIBUF_WINDOW (sf);
+      struct frame *mini_frame = XFRAME (WINDOW_FRAME (XWINDOW (mini_window)));
 
       if (mini_frame != sf && FRAME_WINDOW_P (mini_frame))
        {
@@ -16122,6 +16085,7 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
   bool last_line_misfit = false;
   ptrdiff_t beg_unchanged, end_unchanged;
   int frame_line_height;
+  bool use_desired_matrix;
 
   SET_TEXT_POS (lpoint, PT, PT_BYTE);
   opoint = lpoint;
@@ -16844,7 +16808,7 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
   startp = run_window_scroll_functions (window, it.current.pos);
 
   /* Redisplay the window.  */
-  bool use_desired_matrix = false;
+  use_desired_matrix = false;
   if (!current_matrix_up_to_date_p
       || windows_or_buffers_changed
       || f->cursor_type_changed
@@ -31167,7 +31131,7 @@ syms_of_xdisp (void)
   /* Non-nil means don't actually do any redisplay.  */
   DEFSYM (Qinhibit_redisplay, "inhibit-redisplay");
 
-  DEFSYM (Qredisplay_internal, "redisplay_internal (C function)");
+  DEFSYM (Qredisplay_internal_xC_functionx, "redisplay_internal (C function)");
 
   DEFVAR_BOOL("inhibit-message", inhibit_message,
               doc:  /* Non-nil means calls to `message' are not displayed.
@@ -31238,8 +31202,10 @@ They are still logged to the *Messages* buffer.  */);
   /* Name and number of the face used to highlight escape glyphs.  */
   DEFSYM (Qescape_glyph, "escape-glyph");
 
-  /* Name and number of the face used to highlight non-breaking spaces.  */
+  /* Name and number of the face used to highlight non-breaking
+     spaces/hyphens.  */
   DEFSYM (Qnobreak_space, "nobreak-space");
+  DEFSYM (Qnobreak_hyphen, "nobreak-hyphen");
 
   /* The symbol 'image' which is the car of the lists used to represent
      images in Lisp.  Also a tool bar style.  */
@@ -31351,7 +31317,7 @@ The face used for trailing whitespace is `trailing-whitespace'.  */);
     doc: /* Control highlighting of non-ASCII space and hyphen chars.
 If the value is t, Emacs highlights non-ASCII chars which have the
 same appearance as an ASCII space or hyphen, using the `nobreak-space'
-or `escape-glyph' face respectively.
+or `nobreak-hyphen' face respectively.
 
 U+00A0 (no-break space), U+00AD (soft hyphen), U+2010 (hyphen), and
 U+2011 (non-breaking hyphen) are affected.
@@ -31504,16 +31470,6 @@ If nil, disable message logging.  If t, log messages but don't truncate
 the buffer when it becomes large.  */);
   Vmessage_log_max = make_number (1000);
 
-  DEFVAR_LISP ("window-size-change-functions", Vwindow_size_change_functions,
-    doc: /* Functions called during redisplay, if window sizes have changed.
-The value should be a list of functions that take one argument.
-During the first part of redisplay, for each frame, if any of its windows
-have changed size since the last redisplay, or have been split or deleted,
-all the functions in the list are called, with the frame as argument.
-If redisplay decides to resize the minibuffer window, it calls these
-functions on behalf of that as well.  */);
-  Vwindow_size_change_functions = Qnil;
-
   DEFVAR_LISP ("window-scroll-functions", Vwindow_scroll_functions,
     doc: /* List of functions to call before redisplaying a window with scrolling.
 Each function is called with two arguments, the window and its new
index b22af5c830d0debd05865dcc2c22dbf0e0dd8f36..9ff77738c11cfa3a1cc6390a3e8e9f2363897073 100644 (file)
@@ -1313,7 +1313,6 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
     }
 #endif /* not USE_X_TOOLKIT && not USE_GTK */
   adjust_frame_glyphs (f);
-  run_window_configuration_change_hook (f);
 }
 
 
@@ -3129,7 +3128,7 @@ x_default_font_parameter (struct frame *f, Lisp_Object parms)
     {
       /* Remember the explicit font parameter, so we can re-apply it after
         we've applied the `default' face settings.  */
-      AUTO_FRAME_ARG (arg, Qfont_param, font_param);
+      AUTO_FRAME_ARG (arg, Qfont_parameter, font_param);
       x_set_frame_parameters (f, arg);
     }
 
@@ -5318,8 +5317,6 @@ no value of TYPE (always string in the MS Windows case).  */)
                                Tool tips
  ***********************************************************************/
 
-static Lisp_Object x_create_tip_frame (struct x_display_info *,
-                                       Lisp_Object, Lisp_Object);
 static void compute_tip_xy (struct frame *, Lisp_Object, Lisp_Object,
                             Lisp_Object, int, int, int *, int *);
 
@@ -5363,9 +5360,7 @@ unwind_create_tip_frame (Lisp_Object frame)
    when this happens.  */
 
 static Lisp_Object
-x_create_tip_frame (struct x_display_info *dpyinfo,
-                    Lisp_Object parms,
-                    Lisp_Object text)
+x_create_tip_frame (struct x_display_info *dpyinfo, Lisp_Object parms)
 {
   struct frame *f;
   Lisp_Object frame;
@@ -5373,8 +5368,6 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
   int width, height;
   ptrdiff_t count = SPECPDL_INDEX ();
   bool face_change_before = face_change;
-  Lisp_Object buffer;
-  struct buffer *old_buffer;
   int x_width = 0, x_height = 0;
 
   if (!dpyinfo->terminal->name)
@@ -5390,23 +5383,9 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
     error ("Invalid frame name--not a string or nil");
 
   frame = Qnil;
-  f = make_frame (true);
+  f = make_frame (false);
+  f->wants_modeline = false;
   XSETFRAME (frame, f);
-
-  AUTO_STRING (tip, " *tip*");
-  buffer = Fget_buffer_create (tip);
-  /* Use set_window_buffer instead of Fset_window_buffer (see
-     discussion of bug#11984, bug#12025, bug#12026).  */
-  set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, false, false);
-  old_buffer = current_buffer;
-  set_buffer_internal_1 (XBUFFER (buffer));
-  bset_truncate_lines (current_buffer, Qnil);
-  specbind (Qinhibit_read_only, Qt);
-  specbind (Qinhibit_modification_hooks, Qt);
-  Ferase_buffer ();
-  Finsert (1, &text);
-  set_buffer_internal_1 (old_buffer);
-
   record_unwind_protect (unwind_create_tip_frame, frame);
 
   f->terminal = dpyinfo->terminal;
@@ -5648,8 +5627,6 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
   {
     Lisp_Object bg = Fframe_parameter (frame, Qbackground_color);
 
-    /* Set tip_frame here, so that */
-    tip_frame = frame;
     call2 (Qface_set_after_frame_default, frame, Qnil);
 
     if (!EQ (bg, Fframe_parameter (frame, Qbackground_color)))
@@ -5788,6 +5765,85 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object
 }
 
 
+/* Hide tooltip.  Delete its frame if DELETE is true.  */
+static Lisp_Object
+x_hide_tip (bool delete)
+{
+  if (!NILP (tip_timer))
+    {
+      call1 (Qcancel_timer, tip_timer);
+      tip_timer = Qnil;
+    }
+
+
+  if (NILP (tip_frame)
+      || (!delete && FRAMEP (tip_frame)
+         && !FRAME_VISIBLE_P (XFRAME (tip_frame))))
+    return Qnil;
+  else
+    {
+      ptrdiff_t count;
+      Lisp_Object was_open = Qnil;
+
+      count = SPECPDL_INDEX ();
+      specbind (Qinhibit_redisplay, Qt);
+      specbind (Qinhibit_quit, Qt);
+
+#ifdef USE_GTK
+      {
+       /* When using system tooltip, tip_frame is the Emacs frame on
+          which the tip is shown.  */
+       struct frame *f = XFRAME (tip_frame);
+
+       if (FRAME_LIVE_P (f) && xg_hide_tooltip (f))
+         {
+           tip_frame = Qnil;
+           was_open = Qt;
+         }
+      }
+#endif
+
+      if (FRAMEP (tip_frame))
+       {
+         if (delete)
+           {
+             delete_frame (tip_frame, Qnil);
+             tip_frame = Qnil;
+           }
+         else
+           x_make_frame_invisible (XFRAME (tip_frame));
+
+         was_open = Qt;
+
+#ifdef USE_LUCID
+         /* Bloodcurdling hack alert: The Lucid menu bar widget's
+            redisplay procedure is not called when a tip frame over
+            menu items is unmapped.  Redisplay the menu manually...  */
+         {
+           Widget w;
+           struct frame *f = SELECTED_FRAME ();
+           if (FRAME_X_P (f) && FRAME_LIVE_P (f))
+             {
+               w = f->output_data.x->menubar_widget;
+
+               if (!DoesSaveUnders (FRAME_DISPLAY_INFO (f)->screen)
+                   && w != NULL)
+                 {
+                   block_input ();
+                   xlwmenu_redisplay (w);
+                   unblock_input ();
+                 }
+             }
+         }
+#endif /* USE_LUCID */
+       }
+      else
+       tip_frame = Qnil;
+
+      return unbind_to (count, was_open);
+    }
+}
+
 DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
        doc: /* Show STRING in a "tooltip" window on frame FRAME.
 A tooltip window is a small X window displaying a string.
@@ -5820,15 +5876,17 @@ A tooltip's maximum size is specified by `x-max-tooltip-size'.
 Text larger than the specified size is clipped.  */)
   (Lisp_Object string, Lisp_Object frame, Lisp_Object parms, Lisp_Object timeout, Lisp_Object dx, Lisp_Object dy)
 {
-  struct frame *f;
+  struct frame *f, *tip_f;
   struct window *w;
   int root_x, root_y;
   struct buffer *old_buffer;
   struct text_pos pos;
-  int i, width, height;
-  bool seen_reversed_p;
+  int width, height;
   int old_windows_or_buffers_changed = windows_or_buffers_changed;
   ptrdiff_t count = SPECPDL_INDEX ();
+  ptrdiff_t count_1;
+  Lisp_Object window, size;
+  AUTO_STRING (tip, " *tip*");
 
   specbind (Qinhibit_redisplay, Qt);
 
@@ -5877,22 +5935,23 @@ Text larger than the specified size is clipped.  */)
   if (NILP (last_show_tip_args))
     last_show_tip_args = Fmake_vector (make_number (3), Qnil);
 
-  if (!NILP (tip_frame))
+  if (FRAMEP (tip_frame) && FRAME_LIVE_P (XFRAME (tip_frame)))
     {
       Lisp_Object last_string = AREF (last_show_tip_args, 0);
       Lisp_Object last_frame = AREF (last_show_tip_args, 1);
       Lisp_Object last_parms = AREF (last_show_tip_args, 2);
 
-      if (EQ (frame, last_frame)
-         && !NILP (Fequal (last_string, string))
+      if (FRAME_VISIBLE_P (XFRAME (tip_frame))
+         && EQ (frame, last_frame)
+         && !NILP (Fequal_including_properties (last_string, string))
          && !NILP (Fequal (last_parms, parms)))
        {
-         struct frame *tip_f = XFRAME (tip_frame);
-
          /* Only DX and DY have changed.  */
+         tip_f = XFRAME (tip_frame);
          if (!NILP (tip_timer))
            {
              Lisp_Object timer = tip_timer;
+
              tip_timer = Qnil;
              call1 (Qcancel_timer, timer);
            }
@@ -5903,41 +5962,102 @@ Text larger than the specified size is clipped.  */)
          XMoveWindow (FRAME_X_DISPLAY (tip_f), FRAME_X_WINDOW (tip_f),
                       root_x, root_y);
          unblock_input ();
+
          goto start_timer;
        }
-    }
+      else if (tooltip_reuse_hidden_frame && EQ (frame, last_frame))
+       {
+         bool delete = false;
+         Lisp_Object tail, elt, parm, last;
+
+         /* Check if every parameter in PARMS has the same value in
+            last_parms unless it should be ignored by means of
+            Vtooltip_reuse_hidden_frame_parameters.  This may destruct
+            last_parms which, however, will be recreated below.  */
+         for (tail = parms; CONSP (tail); tail = XCDR (tail))
+           {
+             elt = XCAR (tail);
+             parm = Fcar (elt);
+             /* The left, top, right and bottom parameters are handled
+                by compute_tip_xy so they can be ignored here.  */
+             if (!EQ (parm, Qleft) && !EQ (parm, Qtop)
+                 && !EQ (parm, Qright) && !EQ (parm, Qbottom))
+               {
+                 last = Fassq (parm, last_parms);
+                 if (NILP (Fequal (Fcdr (elt), Fcdr (last))))
+                   {
+                     /* We lost, delete the old tooltip.  */
+                     delete = true;
+                     break;
+                   }
+                 else
+                   last_parms = call2 (Qassq_delete_all, parm, last_parms);
+               }
+             else
+               last_parms = call2 (Qassq_delete_all, parm, last_parms);
+           }
 
-  /* Hide a previous tip, if any.  */
-  Fx_hide_tip ();
+         /* Now check if every parameter in what is left of last_parms
+            with a non-nil value has an association in PARMS unless it
+            should be ignored by means of
+            Vtooltip_reuse_hidden_frame_parameters.  */
+         for (tail = last_parms; CONSP (tail); tail = XCDR (tail))
+           {
+             elt = XCAR (tail);
+             parm = Fcar (elt);
+             if (!EQ (parm, Qleft) && !EQ (parm, Qtop) && !EQ (parm, Qright)
+                 && !EQ (parm, Qbottom) && !NILP (Fcdr (elt)))
+               {
+                 /* We lost, delete the old tooltip.  */
+                 delete = true;
+                 break;
+               }
+           }
+
+         x_hide_tip (delete);
+       }
+      else
+       x_hide_tip (true);
+    }
+  else
+    x_hide_tip (true);
 
   ASET (last_show_tip_args, 0, string);
   ASET (last_show_tip_args, 1, frame);
   ASET (last_show_tip_args, 2, parms);
 
-  /* Add default values to frame parameters.  */
-  if (NILP (Fassq (Qname, parms)))
-    parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
-  if (NILP (Fassq (Qinternal_border_width, parms)))
-    parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms);
-  if (NILP (Fassq (Qborder_width, parms)))
-    parms = Fcons (Fcons (Qborder_width, make_number (1)), parms);
-  if (NILP (Fassq (Qbottom_divider_width, parms)))
-    parms = Fcons (Fcons (Qbottom_divider_width, make_number (0)), parms);
-  if (NILP (Fassq (Qright_divider_width, parms)))
-    parms = Fcons (Fcons (Qright_divider_width, make_number (0)), parms);
-  if (NILP (Fassq (Qborder_color, parms)))
-    parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms);
-  if (NILP (Fassq (Qbackground_color, parms)))
-    parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
-                  parms);
-
-  /* Create a frame for the tooltip, and record it in the global
-     variable tip_frame.  */
-  frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, string);
-  f = XFRAME (frame);
-
-  /* Set up the frame's root window.  */
-  w = XWINDOW (FRAME_ROOT_WINDOW (f));
+  if (!FRAMEP (tip_frame) || !FRAME_LIVE_P (XFRAME (tip_frame)))
+    {
+      /* Add default values to frame parameters.  */
+      if (NILP (Fassq (Qname, parms)))
+       parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
+      if (NILP (Fassq (Qinternal_border_width, parms)))
+       parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms);
+      if (NILP (Fassq (Qborder_width, parms)))
+       parms = Fcons (Fcons (Qborder_width, make_number (1)), parms);
+      if (NILP (Fassq (Qborder_color, parms)))
+       parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms);
+      if (NILP (Fassq (Qbackground_color, parms)))
+       parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
+                      parms);
+
+      /* Create a frame for the tooltip, and record it in the global
+        variable tip_frame.  */
+      if (NILP (tip_frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms)))
+       /* Creating the tip frame failed.  */
+       return unbind_to (count, Qnil);
+    }
+
+  tip_f = XFRAME (tip_frame);
+  window = FRAME_ROOT_WINDOW (tip_f);
+  set_window_buffer (window, Fget_buffer_create (tip), false, false);
+  w = XWINDOW (window);
+  w->pseudo_window_p = true;
+
+  /* Set up the frame's root window.  Note: The following code does not
+     try to size the window or its frame correctly.  Its only purpose is
+     to make the subsequent text size calculations work.  The right
+     sizes should get installed when the toolkit gets back to us.  */
   w->left_col = 0;
   w->top_line = 0;
   w->pixel_left = 0;
@@ -5956,130 +6076,47 @@ Text larger than the specified size is clipped.  */)
       w->total_lines = 40;
     }
 
-  w->pixel_width = w->total_cols * FRAME_COLUMN_WIDTH (f);
-  w->pixel_height = w->total_lines * FRAME_LINE_HEIGHT (f);
-
-  FRAME_TOTAL_COLS (f) = w->total_cols;
-  adjust_frame_glyphs (f);
-  w->pseudo_window_p = true;
+  w->pixel_width = w->total_cols * FRAME_COLUMN_WIDTH (tip_f);
+  w->pixel_height = w->total_lines * FRAME_LINE_HEIGHT (tip_f);
+  FRAME_TOTAL_COLS (tip_f) = w->total_cols;
+  adjust_frame_glyphs (tip_f);
 
-  /* Display the tooltip text in a temporary buffer.  */
+  /* Insert STRING into root window's buffer and fit the frame to the
+     buffer.  */
+  count_1 = SPECPDL_INDEX ();
   old_buffer = current_buffer;
-  set_buffer_internal_1 (XBUFFER (XWINDOW (FRAME_ROOT_WINDOW (f))->contents));
+  set_buffer_internal_1 (XBUFFER (w->contents));
   bset_truncate_lines (current_buffer, Qnil);
+  specbind (Qinhibit_read_only, Qt);
+  specbind (Qinhibit_modification_hooks, Qt);
+  specbind (Qinhibit_point_motion_hooks, Qt);
+  Ferase_buffer ();
+  Finsert (1, &string);
   clear_glyph_matrix (w->desired_matrix);
   clear_glyph_matrix (w->current_matrix);
   SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
-  try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
-
-  /* Compute width and height of the tooltip.  */
-  width = height = 0;
-  seen_reversed_p = false;
-  for (i = 0; i < w->desired_matrix->nrows; ++i)
-    {
-      struct glyph_row *row = &w->desired_matrix->rows[i];
-      struct glyph *last;
-      int row_width;
-
-      /* Stop at the first empty row at the end.  */
-      if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
-       break;
-
-      /* Let the row go over the full width of the frame.  */
-      row->full_width_p = true;
-
-      row_width = row->pixel_width;
-      if (row->used[TEXT_AREA])
-       {
-         /* There's a glyph at the end of rows that is used to place
-            the cursor there.  Don't include the width of this glyph.  */
-         if (!row->reversed_p)
-           {
-             last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
-             if (NILP (last->object))
-               row_width -= last->pixel_width;
-           }
-         else
-           {
-             /* There could be a stretch glyph at the beginning of R2L
-                rows that is produced by extend_face_to_end_of_line.
-                Don't count that glyph.  */
-             struct glyph *g = row->glyphs[TEXT_AREA];
-
-             if (g->type == STRETCH_GLYPH && NILP (g->object))
-               {
-                 row_width -= g->pixel_width;
-                 seen_reversed_p = true;
-               }
-           }
-       }
-
-      height += row->height;
-      width = max (width, row_width);
-    }
-
-  /* If we've seen partial-length R2L rows, we need to re-adjust the
-     tool-tip frame width and redisplay it again, to avoid over-wide
-     tips due to the stretch glyph that extends R2L lines to full
-     width of the frame.  */
-  if (seen_reversed_p)
-    {
-      /* w->total_cols and FRAME_TOTAL_COLS want the width in columns,
-        not in pixels.  */
-      w->pixel_width = width;
-      width /= WINDOW_FRAME_COLUMN_WIDTH (w);
-      w->total_cols = width;
-      FRAME_TOTAL_COLS (f) = width;
-      SET_FRAME_WIDTH (f, width);
-      adjust_frame_glyphs (f);
-      clear_glyph_matrix (w->desired_matrix);
-      clear_glyph_matrix (w->current_matrix);
-      try_window (FRAME_ROOT_WINDOW (f), pos, 0);
-      width = height = 0;
-      /* Recompute width and height of the tooltip.  */
-      for (i = 0; i < w->desired_matrix->nrows; ++i)
-       {
-         struct glyph_row *row = &w->desired_matrix->rows[i];
-         struct glyph *last;
-         int row_width;
-
-         if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
-           break;
-         row->full_width_p = true;
-         row_width = row->pixel_width;
-         if (row->used[TEXT_AREA] && !row->reversed_p)
-           {
-             last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
-             if (NILP (last->object))
-               row_width -= last->pixel_width;
-           }
-
-         height += row->height;
-         width = max (width, row_width);
-       }
-    }
-
-  /* Add the frame's internal border to the width and height the X
-     window should have.  */
-  height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
-  width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
-
-  /* Move the tooltip window where the mouse pointer is.  Resize and
-     show it.  */
-  compute_tip_xy (f, parms, dx, dy, width, height, &root_x, &root_y);
-
+  try_window (window, pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
+  /* Calculate size of tooltip window.  */
+  size = Fwindow_text_pixel_size (window, Qnil, Qnil, Qnil,
+                                 make_number (w->pixel_height), Qnil);
+  /* Add the frame's internal border to calculated size.  */
+  width = XINT (Fcar (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+  height = XINT (Fcdr (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+
+  /* Calculate position of tooltip frame.  */
+  compute_tip_xy (tip_f, parms, dx, dy, width, height, &root_x, &root_y);
+
+  /* Show tooltip frame.  */
   block_input ();
-  XMoveResizeWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+  XMoveResizeWindow (FRAME_X_DISPLAY (tip_f), FRAME_X_WINDOW (tip_f),
                     root_x, root_y, width, height);
-  XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
+  XMapRaised (FRAME_X_DISPLAY (tip_f), FRAME_X_WINDOW (tip_f));
   unblock_input ();
 
-  /* Draw into the window.  */
   w->must_be_updated_p = true;
   update_single_window (w);
-
-  /* Restore original current buffer.  */
   set_buffer_internal_1 (old_buffer);
+  unbind_to (count_1, Qnil);
   windows_or_buffers_changed = old_windows_or_buffers_changed;
 
  start_timer:
@@ -6096,66 +6133,9 @@ DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0,
 Value is t if tooltip was open, nil otherwise.  */)
   (void)
 {
-  ptrdiff_t count;
-  Lisp_Object deleted, frame, timer;
-
-  /* Return quickly if nothing to do.  */
-  if (NILP (tip_timer) && NILP (tip_frame))
-    return Qnil;
-
-  frame = tip_frame;
-  timer = tip_timer;
-  tip_frame = tip_timer = deleted = Qnil;
-
-  count = SPECPDL_INDEX ();
-  specbind (Qinhibit_redisplay, Qt);
-  specbind (Qinhibit_quit, Qt);
-
-  if (!NILP (timer))
-    call1 (Qcancel_timer, timer);
-
-#ifdef USE_GTK
-  {
-    /* When using system tooltip, tip_frame is the Emacs frame on which
-       the tip is shown.  */
-    struct frame *f = XFRAME (frame);
-    if (FRAME_LIVE_P (f) && xg_hide_tooltip (f))
-      frame = Qnil;
-  }
-#endif
-
-  if (FRAMEP (frame))
-    {
-      delete_frame (frame, Qnil);
-      deleted = Qt;
-
-#ifdef USE_LUCID
-      /* Bloodcurdling hack alert: The Lucid menu bar widget's
-        redisplay procedure is not called when a tip frame over menu
-        items is unmapped.  Redisplay the menu manually...  */
-      {
-        Widget w;
-        struct frame *f = SELECTED_FRAME ();
-        if (FRAME_X_P (f) && FRAME_LIVE_P (f))
-          {
-          w = f->output_data.x->menubar_widget;
-
-          if (!DoesSaveUnders (FRAME_DISPLAY_INFO (f)->screen)
-              && w != NULL)
-            {
-              block_input ();
-              xlwmenu_redisplay (w);
-              unblock_input ();
-            }
-        }
-      }
-#endif /* USE_LUCID */
-    }
-
-  return unbind_to (count, deleted);
+  return x_hide_tip (!tooltip_reuse_hidden_frame);
 }
 
-
 \f
 /***********************************************************************
                        File selection dialog
@@ -6483,7 +6463,7 @@ nil, it defaults to the selected frame. */)
     default_name = xlispstrdup (font_param);
   else
     {
-      font_param = Fframe_parameter (frame, Qfont_param);
+      font_param = Fframe_parameter (frame, Qfont_parameter);
       if (STRINGP (font_param))
         default_name = xlispstrdup (font_param);
     }
@@ -6815,8 +6795,9 @@ syms_of_xfns (void)
   DEFSYM (Qundefined_color, "undefined-color");
   DEFSYM (Qcompound_text, "compound-text");
   DEFSYM (Qcancel_timer, "cancel-timer");
-  DEFSYM (Qfont_param, "font-parameter");
+  DEFSYM (Qfont_parameter, "font-parameter");
   DEFSYM (Qmono, "mono");
+  DEFSYM (Qassq_delete_all, "assq-delete-all");
 
 #ifdef USE_CAIRO
   DEFSYM (Qpdf, "pdf");
index b1175d14a1afe69e50da20c8f6414cb8c3160587..03e9053f297a7bfa3a222203399500c28435cee2 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -45,7 +45,7 @@ DEF_DLL_FN (void, xmlCheckVersion, (int));
 static bool
 libxml2_loaded_p (void)
 {
-  Lisp_Object found = Fassq (Qlibxml2_dll, Vlibrary_cache);
+  Lisp_Object found = Fassq (Qlibxml2, Vlibrary_cache);
 
   return CONSP (found) && EQ (XCDR (found), Qt);
 }
@@ -96,7 +96,7 @@ init_libxml2_functions (void)
     {
       HMODULE library;
 
-      if (!(library = w32_delayed_load (Qlibxml2_dll)))
+      if (!(library = w32_delayed_load (Qlibxml2)))
        {
          message1 ("libxml2 library not found");
          return false;
@@ -105,12 +105,12 @@ init_libxml2_functions (void)
       if (! load_dll_functions (library))
        goto bad_library;
 
-      Vlibrary_cache = Fcons (Fcons (Qlibxml2_dll, Qt), Vlibrary_cache);
+      Vlibrary_cache = Fcons (Fcons (Qlibxml2, Qt), Vlibrary_cache);
       return true;
     }
 
  bad_library:
-  Vlibrary_cache = Fcons (Fcons (Qlibxml2_dll, Qnil), Vlibrary_cache);
+  Vlibrary_cache = Fcons (Fcons (Qlibxml2, Qnil), Vlibrary_cache);
 
   return false;
 #else  /* !WINDOWSNT */
index 123e46374a28762a11796735070db22851748514..8de436f119d5d45821d8085f2ae8aeb60c9b9881 100644 (file)
@@ -215,7 +215,7 @@ symbol_to_x_atom (struct x_display_info *dpyinfo, Lisp_Object sym)
   if (EQ (sym, QDELETE))    return dpyinfo->Xatom_DELETE;
   if (EQ (sym, QMULTIPLE))  return dpyinfo->Xatom_MULTIPLE;
   if (EQ (sym, QINCR))     return dpyinfo->Xatom_INCR;
-  if (EQ (sym, QEMACS_TMP)) return dpyinfo->Xatom_EMACS_TMP;
+  if (EQ (sym, Q_EMACS_TMP_)) return dpyinfo->Xatom_EMACS_TMP;
   if (EQ (sym, QTARGETS))   return dpyinfo->Xatom_TARGETS;
   if (EQ (sym, QNULL))     return dpyinfo->Xatom_NULL;
   if (!SYMBOLP (sym)) emacs_abort ();
@@ -273,7 +273,7 @@ x_atom_to_symbol (struct x_display_info *dpyinfo, Atom atom)
   if (atom == dpyinfo->Xatom_INCR)
     return QINCR;
   if (atom == dpyinfo->Xatom_EMACS_TMP)
-    return QEMACS_TMP;
+    return Q_EMACS_TMP_;
   if (atom == dpyinfo->Xatom_TARGETS)
     return QTARGETS;
   if (atom == dpyinfo->Xatom_NULL)
@@ -2679,7 +2679,7 @@ A value of 0 means wait as long as necessary.  This is initialized from the
   DEFSYM (QDELETE, "DELETE");
   DEFSYM (QMULTIPLE, "MULTIPLE");
   DEFSYM (QINCR, "INCR");
-  DEFSYM (QEMACS_TMP, "_EMACS_TMP_");
+  DEFSYM (Q_EMACS_TMP_, "_EMACS_TMP_");
   DEFSYM (QTARGETS, "TARGETS");
   DEFSYM (QATOM, "ATOM");
   DEFSYM (QCLIPBOARD_MANAGER, "CLIPBOARD_MANAGER");
index 42e23401c7dae794c534e79ad5b5fa118401f14c..a7ec8e0c7e2f549b78b6a1fbea6fe7a41cf4187d 100644 (file)
@@ -204,7 +204,7 @@ smc_save_yourself_CB (SmcConn smcConn,
   props[props_idx]->vals[0].value = SDATA (user_login_name);
   ++props_idx;
 
-  char *cwd = get_current_dir_name ();
+  char *cwd = emacs_get_current_dir_name ();
   if (cwd)
     {
       props[props_idx] = &prop_ptr[props_idx];
@@ -401,7 +401,7 @@ x_session_initialize (struct x_display_info *dpyinfo)
   ptrdiff_t name_len = 0;
 
   /* libSM seems to crash if pwd is missing - see bug#18851.  */
-  if (! get_current_dir_name ())
+  if (! emacs_get_current_dir_name ())
     {
       fprintf (stderr, "Disabling session management due to pwd error: %s\n",
                emacs_strerror (errno));
index 2f8e07759093b09fc6f3be7aab5bb93b20b2a0e7..28856cfe192d1d533cad7977d17682228d79998e 100644 (file)
@@ -7895,10 +7895,6 @@ handle_one_xevent (struct x_display_info *dpyinfo,
             /* Force a redisplay sooner or later to update the
               frame titles in case this is the second frame.  */
             record_asynch_buffer_change ();
-
-#ifdef USE_GTK
-          xg_frame_resized (f, -1, -1);
-#endif
         }
       goto OTHER;
 
similarity index 73%
rename from test/automated/Makefile.in
rename to test/Makefile.in
index 9c9b3be1e0b3de74d0821ead129cf0a2bed9a2ce..26d7e591c7a2b23b77fa5064418d3c4512a6d47a 100644 (file)
@@ -21,7 +21,8 @@
 
 ## Some targets:
 ## check: re-run all tests, writing to .log files.
-## check-maybe: run all tests whose .log file needs updating
+## check-maybe: run all tests which are outdated with their .log file
+## or the source files they are testing.
 ## filename.log: run tests from filename.el(c) if .log file needs updating
 ## filename: re-run tests from filename.el(c), with no logging
 
@@ -32,12 +33,14 @@ SHELL = @SHELL@
 srcdir = @srcdir@
 VPATH = $(srcdir)
 
+MKDIR_P = @MKDIR_P@
+
 SEPCHAR = @SEPCHAR@
 
 # We never change directory before running Emacs, so a relative file
 # name is fine, and makes life easier.  If we need to change
 # directory, we can use emacs --chdir.
-EMACS = ../../src/emacs
+EMACS = ../src/emacs
 
 EMACS_EXTRAOPT=
 
@@ -104,7 +107,7 @@ SELECTOR_ACTUAL=$(SELECTOR_EXPENSIVE)
 endif
 
 
-%.log: ${srcdir}/%.el
+%.log: %.el
        @if grep '^;.*no-byte-compile: t' $< > /dev/null; then \
          loadfile=$<; \
        else \
@@ -113,12 +116,18 @@ endif
        fi; \
        echo Testing $$loadfile; \
        stat=OK ; \
+       ${MKDIR_P} $(dir $@) ; \
        $(emacs) -l ert -l $$loadfile \
          --eval "(ert-run-tests-batch-and-exit ${SELECTOR_ACTUAL})" ${WRITE_LOG}
 
-ELFILES = $(sort $(wildcard ${srcdir}/*.el))
-LOGFILES = $(patsubst %.el,%.log,$(notdir ${ELFILES}))
-TESTS = ${LOGFILES:.log=}
+ELFILES = $(shell find ${srcdir} -path "${srcdir}/manual" -prune -o \
+               -path "*resources" -prune -o -name "*el" -print)
+## .elc files may be in a different directory for out of source builds
+ELCFILES = $(patsubst %.el,%.elc, \
+               $(patsubst $(srcdir)%,.%,$(ELFILES)))
+LOGFILES = $(patsubst %.elc,%.log,${ELCFILES})
+LOGSAVEFILES  = $(patsubst %.elc,%.log~,${ELCFILES})
+TESTS = $(subst ${srcdir}/,,$(LOGFILES:.log=))
 
 ## If we have to interrupt a hanging test, preserve the log so we can
 ## see what the problem was.
@@ -127,14 +136,23 @@ TESTS = ${LOGFILES:.log=}
 .PHONY: ${TESTS}
 
 ## The short aliases that always re-run the tests, with no logging.
+## Define an alias both with and without the directory name for ease
+## of use.
 define test_template
 $(1):
-       @test ! -f $(1).log || mv $(1).log $(1).log~
-       @${MAKE} $(1).log WRITE_LOG=
+       @test ! -f ./$(1).log || mv ./$(1).log ./$(1).log~
+       @${MAKE} ./$(1).log WRITE_LOG=
+
+$(notdir $(1)): $(1)
 endef
 
 $(foreach test,${TESTS},$(eval $(call test_template,${test})))
 
+## Include dependencies between test files and the files they test.
+## We could do this without the file and eval directly, but then we
+## would have to run Emacs for every make invocation, and it might not
+## be available during clean.
+-include make-test-deps.mk
 ## Rerun all default tests.
 check: mostlyclean
        @${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}"
@@ -144,7 +162,11 @@ check: mostlyclean
 check-expensive: mostlyclean
        @${MAKE} check-doit SELECTOR="${SELECTOR_EXPENSIVE}"
 
-## Only re-run default tests whose .log is older than the test.
+## Re-run all tests which are outdated. A test is outdated if its
+## logfile is out-of-date with either the test file, or the source
+## files that the tests depend on. The source file dependencies are
+## determined by a heuristic and does not identify the full dependency
+## graph. See make-test-deps.emacs-lisp for details.
 .PHONY: check-maybe
 check-maybe:
        @${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}"
@@ -157,17 +179,22 @@ check-doit: ${LOGFILES}
 .PHONY: mostlyclean clean bootstrap-clean distclean maintainer-clean
 
 mostlyclean:
-       -@for f in *.log; do test ! -f $$f || mv $$f $$f~; done
+       -@for f in ${LOGFILES}; do test ! -f $$f || mv $$f $$f~; done
 
 clean:
-       -rm -f *.log *.log~
+       -rm -f ${LOGFILES} ${LOGSAVEFILES}
+       -rm make-test-deps.mk
 
 bootstrap-clean: clean
-       -rm -f ${srcdir}/*.elc
+       -rm -f ${ELCFILES}
 
 distclean: clean
        rm -f Makefile
 
 maintainer-clean: distclean bootstrap-clean
 
+make-test-deps.mk: $(ELFILES) make-test-deps.emacs-lisp
+       $(EMACS) --batch -l $(srcdir)/make-test-deps.emacs-lisp \
+       --eval "(make-test-deps \"$(srcdir)\")" \
+       2> $@
 # Makefile ends here.
index d2aee9bf57b92df2325d5b736e6039469a250800..2994fca6c859aee4235207fcf1ce74dd338c0324 100644 (file)
@@ -8,8 +8,7 @@ Emacs uses ERT, Emacs Lisp Regression Testing, for testing.  See (info
 "(ert)") or https://www.gnu.org/software/emacs/manual/html_node/ert/
 for more information on writing and running tests.
 
-All ERT test files are supposed to run from subdirectory automated/.
-The Makefile in that directory supports the following targets:
+The Makefile in this directory supports the following targets:
 
 * make check
   Run all tests as defined in the directory.  Expensive tests are
diff --git a/test/data/net/cert.pem b/test/data/net/cert.pem
new file mode 100644 (file)
index 0000000..4df4e92
--- /dev/null
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIELTCCAxWgAwIBAgIJAI6LqlFyaPRkMA0GCSqGSIb3DQEBCwUAMIGsMQswCQYD
+VQQGEwJBVTEYMBYGA1UECAwPTmV3IFNvdXRoIFdhbGVzMQ8wDQYDVQQHDAZTeWRu
+ZXkxITAfBgNVBAoMGEVtYWNzIFRlc3QgU2VydmljZXNzIExMQzESMBAGA1UECwwJ
+QXV0b21hdGVkMRcwFQYDVQQDDA50ZXN0LmVtYWNzLnpvdDEiMCAGCSqGSIb3DQEJ
+ARYTZW1hY3MtZGV2ZWxAZnNmLm9yZzAeFw0xNjAyMDgwNDA0MzJaFw0xNjAzMDkw
+NDA0MzJaMIGsMQswCQYDVQQGEwJBVTEYMBYGA1UECAwPTmV3IFNvdXRoIFdhbGVz
+MQ8wDQYDVQQHDAZTeWRuZXkxITAfBgNVBAoMGEVtYWNzIFRlc3QgU2VydmljZXNz
+IExMQzESMBAGA1UECwwJQXV0b21hdGVkMRcwFQYDVQQDDA50ZXN0LmVtYWNzLnpv
+dDEiMCAGCSqGSIb3DQEJARYTZW1hY3MtZGV2ZWxAZnNmLm9yZzCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAM52lP7k1rBpctBX1irRVgDerxqlFSTkvg8L
+WmRCfwm3XY8EZWqM/8Eex5soH7myRlWfUH/cKxbqScZqXotj0hlPxdRkM6gWgHS9
+Mml7wnz2LZGvD5PfMfs+yBHKAMrqortFXCKksHsYIJ66l9gJMm1G5XjWha6CaEr/
+k2bE5Ovw0fB2B4vH0OqhJzGyenJOspXZz1ttn3h3UC5fbDXS8fUM9k/FbgJKypWr
+zB3P12GcMR939FsR5sqa8nNoCMw+WBzs4XuM5Ad+s/UtEaZvmtwvLwmdB7cgCEyM
+x5gaM969SlpOmuy7dDTCCK3lBl6B5dgFKvVcChYwSW+xJz5tfL0CAwEAAaNQME4w
+HQYDVR0OBBYEFG3YhH7ZzEdOGstkT67uUh1RylNjMB8GA1UdIwQYMBaAFG3YhH7Z
+zEdOGstkT67uUh1RylNjMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
+ADnJL2tBMnPepywA57yDfJz54FvrqRd+UAjSiB7/QySDpHnTM3b3sXWfwAkXPTjM
+c+jRW2kfdnL6OQW2tpcpPZANGnwK8MJrtGcbHhtPXjgDRhVZp64hsB7ayS+l0Dm7
+2ZBbi2SF8FgZVcQy0WD01ir2raSODo124dMrq+3aHP77YLbiNEKj+wFoDbndQ1FQ
+gtIJBE80FADoqc7LnBrpA20aVlfqhKZqe+leYDSZ+CE1iwlPdvD+RTUxVDs5EfpB
+qVOHDlzEfVmcMnddKTV8pNYuo93AG4s0KdrGG9RwSvtLaOoHd2i6RmIs+Yiumbau
+mXodMxxAEW/cM7Ita/2QVmk=
+-----END CERTIFICATE-----
diff --git a/test/data/net/key.pem b/test/data/net/key.pem
new file mode 100644 (file)
index 0000000..5db58f5
--- /dev/null
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDOdpT+5NawaXLQ
+V9Yq0VYA3q8apRUk5L4PC1pkQn8Jt12PBGVqjP/BHsebKB+5skZVn1B/3CsW6knG
+al6LY9IZT8XUZDOoFoB0vTJpe8J89i2Rrw+T3zH7PsgRygDK6qK7RVwipLB7GCCe
+upfYCTJtRuV41oWugmhK/5NmxOTr8NHwdgeLx9DqoScxsnpyTrKV2c9bbZ94d1Au
+X2w10vH1DPZPxW4CSsqVq8wdz9dhnDEfd/RbEebKmvJzaAjMPlgc7OF7jOQHfrP1
+LRGmb5rcLy8JnQe3IAhMjMeYGjPevUpaTprsu3Q0wgit5QZegeXYBSr1XAoWMElv
+sSc+bXy9AgMBAAECggEAaqHkIiGeoE5V9jTncAXeHWTlmyVX3k4luy9p6A5P/nyt
+3YevuXBJRzzWatQ2Tno8yUwXD3Ju7s7ie4/EdMmBYYFJ84AtDctRXPm6Z7B7qn6a
+2ntH2F+WOOUb/9QMxMCae44/H8VfQLQdZN2KPxHA8Z+ENPzW3mKL6vBE+PcIJLK2
+kTXQdCEIuUb1v4kxKYfjyyHAQ9yHvocUvZdodGHrpmWOr/2QCrqCjwiKnXyvdJMi
+JQ4a3dU+JG5Zwr2hScyeLgS4p+M3A2NY+oIACn2rCcsIKC6uvBK3wAbhssaY8z9c
+5kap862oMBNmPCxPuQTIIO7ptla0EWHktpFxnu7GIQKBgQDvKyXt82zGHiOZ9acx
+4fV7t3NF2MNd9fOn59NYWYRSs2gaEjit6BnsCgiKZOJJ2YFsggBiQMiWuEzwqIdW
+bOH8W5AubTxnE2OjeIpH5r8AXI6I/pKdOedM86oeElbL0p53OZqSqBK6vA5SnE76
+fZwC505h/mqH2E6AdKpcyL7sJwKBgQDc/jc4MkVnqF7xcYoJrYEbnkhwqRxIM+0Y
+HY2qXszWQPgjae3NK1rw/PEOATzWrHLvRS/utQ8yeLUAZIGsFY8+c1kjvkvl4ZK2
+OnsEOVLmEwjDqqnq3JFYCVSkXfLBGRD3wGldzkCQljOiGuJ/Co1rGHk7CfBmxX2p
+kxdts5OKewKBgQDTRsSc7Zs7cMh2a0GlmTyoa6iTHSeIy4rQ2sQimgGApSfjUBFt
+30l28G4XA4O7RT9FwZnhMeWA75JYTigwOsNvkNtPiAQB8mjksclGNxqnkRwA/RI7
+fjlMCzxOkFjIeWivXd2kjIDvIM1uQNKsCWZWUks12e/1zSmb5HPSvyuZpQKBgQDQ
+qVgKP604ysmav9HOgXy+Tx2nAoYpxp2/f2gbzZcrVfz1szdN2fnsQWh6CMEhEYMU
+WQeBJIRM65w72qp1iYXPOaqZDT0suWiFl4I/4sBbbO2BkssNb2Xs8iJxcCOeH8Td
+qVfTssNTwf7OuQPTYGtXC6ysCh5ra13Tl4cvlbdhsQKBgFHXP+919wSncLS+2ySD
+waBzG6GyVOgV+FE3DrM3Xp4S6fldWYAndKHQ1HjJVDY8SkC2Tk1D7QSQnmS+ZzYs
+YqzcnkPCTHLb6wCErs4ZiW0gn9xJnfxyv6wPujsayL4TMsmsqkj/IAB61UjwaA/a
+Z+rUw/WkcNPD59AD1J0eeSZu
+-----END PRIVATE KEY-----
diff --git a/test/data/shr/div-div.html b/test/data/shr/div-div.html
new file mode 100644 (file)
index 0000000..1c191ae
--- /dev/null
@@ -0,0 +1 @@
+<div>foo</div><div>Bar</div>
diff --git a/test/data/shr/div-div.txt b/test/data/shr/div-div.txt
new file mode 100644 (file)
index 0000000..62715e1
--- /dev/null
@@ -0,0 +1,2 @@
+foo
+Bar
diff --git a/test/data/shr/div-p.html b/test/data/shr/div-p.html
new file mode 100644 (file)
index 0000000..fcbdfc4
--- /dev/null
@@ -0,0 +1 @@
+<div>foo</div><p>Bar</p>
diff --git a/test/data/shr/div-p.txt b/test/data/shr/div-p.txt
new file mode 100644 (file)
index 0000000..859d731
--- /dev/null
@@ -0,0 +1,3 @@
+foo
+
+Bar
diff --git a/test/data/shr/li-div.html b/test/data/shr/li-div.html
new file mode 100644 (file)
index 0000000..eca3c51
--- /dev/null
@@ -0,0 +1,10 @@
+<ul>
+  <li>
+    <div>
+      <p >This is the first paragraph of a list item.</div>
+    <p >This is the second paragraph of a list item.</li>
+  <li>
+    <div>This is the first paragraph of a list item.</div>
+    <div>This is the second paragraph of a list item.</div>
+  </li>
+</ul>
diff --git a/test/data/shr/li-div.txt b/test/data/shr/li-div.txt
new file mode 100644 (file)
index 0000000..9fc54f2
--- /dev/null
@@ -0,0 +1,6 @@
+* This is the first paragraph of a list item.
+
+  This is the second paragraph of a list item.
+
+* This is the first paragraph of a list item.
+  This is the second paragraph of a list item.
diff --git a/test/data/shr/li-empty.html b/test/data/shr/li-empty.html
new file mode 100644 (file)
index 0000000..05cfee7
--- /dev/null
@@ -0,0 +1 @@
+<ol><li></li><li></li><li></li></ol>
diff --git a/test/data/shr/li-empty.txt b/test/data/shr/li-empty.txt
new file mode 100644 (file)
index 0000000..906fd8d
--- /dev/null
@@ -0,0 +1,3 @@
+1%20
+2%20
+3%20
diff --git a/test/data/shr/nonbr.html b/test/data/shr/nonbr.html
new file mode 100644 (file)
index 0000000..56282cf
--- /dev/null
@@ -0,0 +1 @@
+<div class="gmail_extra">(progn</div><div class="gmail_extra">  (setq minibuffer-prompt-properties &#39;(read-only t cursor-intangible t face minibuffer-prompt))</div><div class="gmail_extra"><br></div><div class="gmail_extra">  (defun turn-on-cursor-intangible-mode ()</div><div class="gmail_extra">    &quot;Turns on cursor-intangible-mode.&quot;</div><div class="gmail_extra">    (interactive)</div><div class="gmail_extra">    (cursor-intangible-mode 1))</div><div class="gmail_extra">  (define-globalized-minor-mode global-cursor-intangible-mode cursor-intangible-mode turn-on-cursor-intangible-mode)</div><div class="gmail_extra"><br></div><div class="gmail_extra">  (global-cursor-intangible-mode 1))</div><div class="gmail_extra"><br></div>
diff --git a/test/data/shr/nonbr.txt b/test/data/shr/nonbr.txt
new file mode 100644 (file)
index 0000000..0c3cffa
--- /dev/null
@@ -0,0 +1,12 @@
+(progn
+  (setq minibuffer-prompt-properties '(read-only t cursor-intangible t face
+minibuffer-prompt))
+
+  (defun turn-on-cursor-intangible-mode ()
+    "Turns on cursor-intangible-mode."
+    (interactive)
+    (cursor-intangible-mode 1))
+  (define-globalized-minor-mode global-cursor-intangible-mode
+cursor-intangible-mode turn-on-cursor-intangible-mode)
+
+  (global-cursor-intangible-mode 1))
diff --git a/test/data/shr/ul-empty.html b/test/data/shr/ul-empty.html
new file mode 100644 (file)
index 0000000..e5a75ab
--- /dev/null
@@ -0,0 +1,4 @@
+<ul>
+<li></li>
+</ul>
+Lala
diff --git a/test/data/shr/ul-empty.txt b/test/data/shr/ul-empty.txt
new file mode 100644 (file)
index 0000000..8993555
--- /dev/null
@@ -0,0 +1,3 @@
+* 
+
+Lala 
\ No newline at end of file
diff --git a/test/file-organisation.org b/test/file-organisation.org
new file mode 100644 (file)
index 0000000..226e12d
--- /dev/null
@@ -0,0 +1,54 @@
+#+TITLE: The Location of Emacs-Lisp Tests
+
+
+
+* The Main Emacs Repository
+
+The Emacs repository contains a very large number of Emacs-Lisp files, many of
+which pre-date both formal package support for Emacs and automated unit
+testing.
+
+All paths are relative to the Emacs root directory.
+
+** Source
+
+Lisp files are stored in the ~lisp~ directory or its sub-directories.
+Sub-directories are in many cases themed after packages (~gnus~, ~org~,
+~calc~), related functionality (~net~, ~emacs-lisp~, ~progmodes~) or status
+(~obsolete~).
+
+C source is stored in the ~src~ directory, which is flat.
+
+** Test Files
+
+Automated tests should be stored in the ~test/automated/lisp~ directory. Tests
+should reflect the directory structure of the source tree; so tests for files
+in the ~emacs-lisp~ source directory should reside in the
+~test/lisp/emacs-lisp~ directory.
+
+Tests should normally reside in a file with ~-tests~ added to the name of
+the tested source file; hence ~ert.el~ is tested in ~ert-tests.el~, or
+~pcase.el~ is tested in ~pcase-tests.el~. Exceptionally, tests for a
+single feature may be placed into multiple files of any name which are
+themselves placed in a directory named after the feature with ~-tests~
+appended, such as ~/test/lisp/emacs-lisp/eieio-tests~
+
+Where features of the C source are tested using Emacs-Lisp test files, these
+should reside in ~/test/src~ and be named after the C file.
+
+A few test suites which predate this scheme and do not fit cleanly
+into it are placed in ~/test/lisp/legacy~.
+
+There are also some test materials that cannot be run automatically
+(i.e. via ert). These should be placed in ~/test/manual~
+
+** Resource Files
+
+Resource files for tests (containing test data) should reside in a directory
+named after the feature with a ~-resources~ suffix, and located in the same
+directory as the feature. Hence, the lisp file ~flymake.el~ should have test
+files in ~/test/automated/lisp/progmodes/flymake-tests.el~ should reside in a
+directory called ~/test/automated/lisp/progmodes/flymake-resources~.
+
+No guidance is given for the organization of resource files inside the
+~-resource~ directory; files can be organized at the author's discretion.
similarity index 73%
rename from test/automated/abbrev-tests.el
rename to test/lisp/abbrev-tests.el
index 66413c5a59072a1d8104a223af5b286bd26ccf42..0d93e268a99882f917a7318afa5cfdf2c993669d 100644 (file)
@@ -1,4 +1,4 @@
-;;; abbrev-tests.el --- Test suite for abbrevs.
+;;; abbrev-tests.el --- Test suite for abbrevs  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
 
   (abbrev-table-put ert-test-abbrevs :ert-test "ert-test-value")
   ert-test-abbrevs)
 
+(ert-deftest abbrev-table-p-test ()
+  (should-not (abbrev-table-p 42))
+  (should-not (abbrev-table-p "aoeu"))
+  (should-not (abbrev-table-p '()))
+  (should-not (abbrev-table-p []))
+  ;; Missing :abbrev-table-modiff counter:
+  (should-not (abbrev-table-p (obarray-make)))
+  (let* ((table (obarray-make)))
+    (abbrev-table-put table :abbrev-table-modiff 42)
+    (should (abbrev-table-p table))))
+
+(ert-deftest abbrev-make-abbrev-table-test ()
+  ;; Table without properties:
+  (let ((table (make-abbrev-table)))
+    (should (abbrev-table-p table))
+    (should (= (length table) obarray-default-size)))
+  ;; Table with one property 'foo with value 'bar:
+  (let ((table (make-abbrev-table '(foo bar))))
+    (should (abbrev-table-p table))
+    (should (= (length table) obarray-default-size))
+    (should (eq (abbrev-table-get table 'foo) 'bar))))
+
+(ert-deftest abbrev-table-get-put-test ()
+  (let ((table (make-abbrev-table)))
+    (should-not (abbrev-table-get table 'foo))
+    (should (= (abbrev-table-put table 'foo 42) 42))
+    (should (= (abbrev-table-get table 'foo) 42))
+    (should (eq (abbrev-table-put table 'foo 'bar) 'bar))
+    (should (eq (abbrev-table-get table 'foo) 'bar))))
+
 (ert-deftest copy-abbrev-table-test ()
   (defvar foo-abbrev-table nil)         ; Avoid compiler warning
   (define-abbrev-table 'foo-abbrev-table
     (should (equal t (abbrev-table-empty-p ert-test-abbrevs)))))
 
 (provide 'abbrev-tests)
-
 ;;; abbrev-tests.el ends here
similarity index 77%
rename from test/automated/auto-revert-tests.el
rename to test/lisp/autorevert-tests.el
index a6f8cb29563fa5a6da59889b10b446a392390036..2f951c0c9aa67432bf8531373d27f22ab4a8029c 100644 (file)
       (ignore-errors (delete-directory tmpdir1 'recursive))
       (ignore-errors (delete-directory tmpdir2 'recursive)))))
 
-(ert-deftest auto-revert-test02-auto-revert-tail-mode ()
+;; This is inspired by Bug#23276.
+(ert-deftest auto-revert-test02-auto-revert-deleted-file ()
+  "Check autorevert for a deleted file."
+  :tags '(:expensive-test)
+
+  (let ((tmpfile (make-temp-file "auto-revert-test"))
+        buf)
+    (unwind-protect
+       (progn
+          (with-current-buffer (get-buffer-create "*Messages*")
+            (narrow-to-region (point-max) (point-max)))
+          (write-region "any text" nil tmpfile nil 'no-message)
+         (setq buf (find-file-noselect tmpfile))
+         (with-current-buffer buf
+            (should (string-equal (buffer-string) "any text"))
+            ;; `buffer-stale--default-function' checks for
+            ;; `verify-visited-file-modtime'.  We must ensure that
+            ;; it returns nil.
+            (sleep-for 1)
+            (auto-revert-mode 1)
+            (should auto-revert-mode)
+
+            ;; Remove file while reverting.  We simulate this by
+            ;; modifying `before-revert-hook'.
+            (add-hook
+             'before-revert-hook
+             (lambda () (delete-file buffer-file-name))
+             nil t)
+            (with-current-buffer (get-buffer-create "*Messages*")
+              (narrow-to-region (point-max) (point-max)))
+           (sleep-for 1)
+            (write-region "another text" nil tmpfile nil 'no-message)
+
+           ;; Check, that the buffer hasn't been reverted.  File
+           ;; notification should be disabled, falling back to
+           ;; polling.
+            (auto-revert--wait-for-revert buf)
+            (should (string-match "any text" (buffer-string)))
+            (should-not auto-revert-use-notify)
+
+            ;; Once the file has been recreated, the buffer shall be
+            ;; reverted.
+            (kill-local-variable 'before-revert-hook)
+            (with-current-buffer (get-buffer-create "*Messages*")
+              (narrow-to-region (point-max) (point-max)))
+           (sleep-for 1)
+            (write-region "another text" nil tmpfile nil 'no-message)
+
+           ;; Check, that the buffer has been reverted.
+            (auto-revert--wait-for-revert buf)
+            (should (string-match "another text" (buffer-string)))
+
+            ;; An empty file shall still be reverted.
+            (with-current-buffer (get-buffer-create "*Messages*")
+              (narrow-to-region (point-max) (point-max)))
+           (sleep-for 1)
+            (write-region "" nil tmpfile nil 'no-message)
+
+           ;; Check, that the buffer has been reverted.
+            (auto-revert--wait-for-revert buf)
+            (should (string-equal "" (buffer-string)))))
+
+      ;; Exit.
+      (with-current-buffer "*Messages*" (widen))
+      (ignore-errors
+        (with-current-buffer buf (set-buffer-modified-p nil))
+        (kill-buffer buf))
+      (ignore-errors (delete-file tmpfile)))))
+
+(ert-deftest auto-revert-test03-auto-revert-tail-mode ()
   "Check autorevert tail mode."
   ;; `auto-revert-buffers' runs every 5".  And we must wait, until the
   ;; file has been reverted.
       (ignore-errors (kill-buffer buf))
       (ignore-errors (delete-file tmpfile)))))
 
-(ert-deftest auto-revert-test03-auto-revert-mode-dired ()
+(ert-deftest auto-revert-test04-auto-revert-mode-dired ()
   "Check autorevert for dired."
   ;; `auto-revert-buffers' runs every 5".  And we must wait, until the
   ;; file has been reverted.
similarity index 99%
rename from test/automated/icalendar-tests.el
rename to test/lisp/calendar/icalendar-tests.el
index 2c13a363213a2670b06df705413833ac5d34bc42..20d88349bbc3ae7342fd38a166d54c1ec17233ba 100644 (file)
@@ -32,6 +32,7 @@
 ;;; Code:
 
 (require 'ert)
+(require 'ert-x)
 (require 'icalendar)
 
 ;; ======================================================================
 (ert-deftest icalendar--create-uid ()
   "Test for `icalendar--create-uid'."
   (let* ((icalendar-uid-format "xxx-%t-%c-%h-%u-%s")
-         t-ct
          (icalendar--uid-count 77)
          (entry-full "30.06.1964 07:01 blahblah")
          (hash (format "%d" (abs (sxhash entry-full))))
          (contents "DTSTART:19640630T070100\nblahblah")
-         (username (or user-login-name "UNKNOWN_USER"))
-         )
-    (fset 't-ct (symbol-function 'current-time))
-    (unwind-protect
-       (progn
-         (fset 'current-time (lambda () '(1 2 3)))
-         (should (= 77 icalendar--uid-count))
-         (should (string=  (concat "xxx-123-77-" hash "-" username "-19640630")
-                           (icalendar--create-uid entry-full contents)))
-         (should (= 78 icalendar--uid-count)))
-      ;; restore 'current-time
-      (fset 'current-time (symbol-function 't-ct)))
+         (username (or user-login-name "UNKNOWN_USER")))
+    (ert-with-function-mocked current-time (lambda () '(1 2 3))
+      (should (= 77 icalendar--uid-count))
+      (should (string=  (concat "xxx-123-77-" hash "-" username "-19640630")
+                        (icalendar--create-uid entry-full contents)))
+      (should (= 78 icalendar--uid-count)))
     (setq contents "blahblah")
     (setq icalendar-uid-format "yyy%syyy")
     (should (string=  (concat "yyyDTSTARTyyy")
diff --git a/test/lisp/calendar/parse-time-tests.el b/test/lisp/calendar/parse-time-tests.el
new file mode 100644 (file)
index 0000000..9bcf2b4
--- /dev/null
@@ -0,0 +1,49 @@
+;; parse-time-tests.el --- Test suite for parse-time.el
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Lars Ingebrigtsen <larsi@gnus.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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'ert)
+(require 'parse-time)
+
+(ert-deftest parse-time-tests ()
+  (should (equal (parse-time-string "Mon, 22 Feb 2016 19:35:42 +0100")
+                 '(42 35 19 22 2 2016 1 nil 3600)))
+  (should (equal (parse-time-string "22 Feb 2016 19:35:42 +0100")
+                 '(42 35 19 22 2 2016 nil nil 3600)))
+  (should (equal (parse-time-string "22 Feb 2016 +0100")
+                 '(nil nil nil 22 2 2016 nil nil 3600)))
+  (should (equal (parse-time-string "Mon, 22 Feb 16 19:35:42 +0100")
+                 '(42 35 19 22 2 2016 1 nil 3600)))
+  (should (equal (parse-time-string "Mon, 22 February 2016 19:35:42 +0100")
+                 '(42 35 19 22 2 2016 1 nil 3600)))
+  (should (equal (parse-time-string "Mon, 22 feb 2016 19:35:42 +0100")
+                 '(42 35 19 22 2 2016 1 nil 3600)))
+  (should (equal (parse-time-string "Monday, 22 february 2016 19:35:42 +0100")
+                 '(42 35 19 22 2 2016 1 nil 3600)))
+  (should (equal (parse-time-string "Monday, 22 february 2016 19:35:42 PDT")
+                 '(42 35 19 22 2 2016 1 t -25200))))
+
+(provide 'parse-time-tests)
+
+;;; parse-time-tests.el ends here
diff --git a/test/lisp/dired-tests.el b/test/lisp/dired-tests.el
new file mode 100644 (file)
index 0000000..3efe259
--- /dev/null
@@ -0,0 +1,35 @@
+;;; dired-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015-2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'dired)
+
+
+(ert-deftest dired-autoload ()
+  "Tests to see whether dired-x has been autoloaded"
+  (should
+   (fboundp 'dired-jump))
+  (should
+   (autoloadp
+    (symbol-function
+     'dired-jump))))
+
+(provide 'dired-tests)
+;; dired-tests.el ends here
similarity index 99%
rename from test/automated/eieio-tests.el
rename to test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
index bdf66c946f072c9cb3c211563ae26214ea2aaf4a..9665beb490ea8813b06accfbe401d7bf30cbe083 100644 (file)
@@ -895,6 +895,12 @@ Subclasses to override slot attributes.")
 (ert-deftest eieio-test-37-obsolete-name-in-constructor ()
   (should (equal (eieio--testing "toto") '("toto" 2))))
 
+(ert-deftest eieio-autoload ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'eieio--defalias)))
+
+
 (provide 'eieio-tests)
 
 ;;; eieio-tests.el ends here
similarity index 89%
rename from test/automated/ert-x-tests.el
rename to test/lisp/emacs-lisp/ert-x-tests.el
index ef8642aebfb2d9454a68aab2b78cee32edeb1911..a2665e7c3900d85faa2ae915e0518fd25a207360 100644 (file)
@@ -275,6 +275,49 @@ desired effect."
              (should (equal (c x) (lisp x))))))
 
 
+(defun ert--dummy-id (a)
+  "Identity function.  Used for tests only."
+  a)
+
+(ert-deftest ert-with-function-mocked ()
+  (let ((mock-id  (lambda (_) 21)))
+    (should (eq 42 (ert--dummy-id 42)))
+
+    (ert-with-function-mocked ert--dummy-id nil
+       (fset 'ert--dummy-id mock-id)
+       (should (eq 21 (ert--dummy-id 42))))
+    (should (eq 42 (ert--dummy-id 42)))
+
+    (ert-with-function-mocked ert--dummy-id mock-id
+       (should (eq 21 (ert--dummy-id 42))))
+    (should (eq 42 (ert--dummy-id 42)))
+
+    (should
+     (catch 'exit
+       (ert-with-function-mocked ert--dummy-id mock-id
+         (should (eq 21 (ert--dummy-id 42))))
+         (throw 'exit t)))
+    (should (eq 42 (ert--dummy-id 42)))
+
+    (should
+     (string= "Foo"
+              (condition-case err
+                  (progn
+                    (ert-with-function-mocked ert--dummy-id mock-id
+                      (should (eq 21 (ert--dummy-id 42))))
+                    (user-error "Foo"))
+                (user-error (cadr err)))))
+    (should (eq 42 (ert--dummy-id 42)))
+
+    (should
+     (string= "`ert--dummy-id' unexpectedly called."
+              (condition-case err
+                  (ert-with-function-mocked ert--dummy-id nil
+                    (ert--dummy-id 42))
+                (ert-test-failed (cadr err)))))
+    (should (eq 42 (ert--dummy-id 42)))))
+
+
 (provide 'ert-x-tests)
 
 ;;; ert-x-tests.el ends here
diff --git a/test/lisp/emacs-lisp/lisp-tests.el b/test/lisp/emacs-lisp/lisp-tests.el
new file mode 100644 (file)
index 0000000..4fe20f0
--- /dev/null
@@ -0,0 +1,211 @@
+;;; lisp-tests.el --- Test Lisp editing commands     -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2013-2016  Free Software Foundation, Inc.
+
+;; Author: Aaron S. Hawley <aaron.s.hawley@gmail.com>
+;; Keywords: internal
+
+;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Testing of `forward-sexp' and related functions.
+
+;;; Code:
+
+(require 'ert)
+(require 'python)
+
+(ert-deftest lisp-forward-sexp-1-empty-parens ()
+  "Test basics of \\[forward-sexp]."
+  (with-temp-buffer
+    (insert "()")
+    (goto-char (point-min))
+    (should (null
+      (forward-sexp 1)))))
+
+(ert-deftest lisp-forward-sexp-1-error-mismatch ()
+  "Test basics of \\[forward-sexp]."
+  (with-temp-buffer
+    (insert "(")
+    (goto-char (point-min))
+    (should-error
+      (forward-sexp 1))))
+
+(ert-deftest lisp-backward-sexp-1-empty-parens ()
+  "Test basics of \\[backward-sexp]."
+  (with-temp-buffer
+    (insert "()")
+    (should (null
+      (forward-sexp -1)))))
+
+(ert-deftest lisp-backward-sexp-1-error-mismatch ()
+  "Test mismatched parens with \\[backward-sexp]."
+  (with-temp-buffer
+    (insert "(")
+    (should-error
+      (forward-sexp -1))))
+
+(ert-deftest lisp-forward-sexp-1-eobp ()
+  "Test \\[forward-sexp] at `eobp'."
+  (with-temp-buffer
+    (insert "()")
+    (should (null ;; (should-error ;; No, per #13994
+      (forward-sexp 1)))))
+
+(ert-deftest lisp-backward-sexp-1-eobp ()
+  "Test \\[backward-sexp] at `bobp'."
+  (with-temp-buffer
+    (insert "()")
+    (goto-char (point-min))
+    (should (null ;; (should-error ;; No, per #13994
+     (forward-sexp -1)))))
+
+(ert-deftest lisp-forward-sexp-2-eobp ()
+  "Test \\[forward-sexp] beyond `eobp'."
+  (with-temp-buffer
+    (insert "()")
+    (goto-char (point-min))
+    (should (null ;; (should-error ;; No, per #13994
+     (forward-sexp 2)))
+    (should (eobp))))
+
+(ert-deftest lisp-backward-sexp-2-bobp ()
+  "Test \\[backward-sexp] beyond `bobp'."
+  (with-temp-buffer
+    (insert "()")
+    (should (null ;; (should-error ;; No, per #13994
+     (forward-sexp -2)))
+    (should (bobp))))
+
+(ert-deftest lisp-forward-sexp-2-eobp-and-subsequent ()
+  "Test \\[forward-sexp] beyond `eobp' and again."
+  (with-temp-buffer
+    (insert "()")
+    (goto-char (point-min))
+    (should (null ;; (should-error ;; No, per #13994
+     (forward-sexp 2)))
+    (should (eobp))
+    (should (null ;; (should-error ;; No, per #13994
+     (forward-sexp 1)))))
+
+(ert-deftest lisp-backward-sexp-2-bobp-and-subsequent ()
+  "Test \\[backward-sexp] ahead of `bobp' and again."
+  (with-temp-buffer
+    (insert "()")
+    (should (null ;; (should-error ;; No, per #13994
+     (forward-sexp -2)))
+    (should (bobp))
+    (should (null ;; (should-error ;; No, per #13994
+     (forward-sexp -1)))))
+
+(ert-deftest lisp-delete-pair-parens ()
+  "Test \\[delete-pair] with parens."
+  (with-temp-buffer
+    (insert "(foo)")
+    (goto-char (point-min))
+    (delete-pair)
+    (should (string-equal "foo" (buffer-string)))))
+
+(ert-deftest lisp-delete-pair-quotation-marks ()
+  "Test \\[delete-pair] with quotation marks."
+  (with-temp-buffer
+    (insert "\"foo\"")
+    (goto-char (point-min))
+    (delete-pair)
+    (should (string-equal "foo" (buffer-string)))))
+
+(ert-deftest lisp-delete-pair-quotes-in-text-mode ()
+  "Test \\[delete-pair] against string in Text Mode for #15014."
+  (with-temp-buffer
+    (text-mode)
+    (insert "\"foo\"")
+    (goto-char (point-min))
+    (delete-pair)
+    (should (string-equal "fo\"" (buffer-string)))))
+
+(ert-deftest lisp-delete-pair-quotes-text-mode-syntax-table ()
+  "Test \\[delete-pair] with modified Text Mode syntax for #15014."
+  (with-temp-buffer
+    (text-mode)
+    (let ((st (copy-syntax-table text-mode-syntax-table)))
+      (with-syntax-table st
+        ;; (modify-syntax-entry ?\" "." text-mode-syntax-table)
+        (modify-syntax-entry ?\" "$" st)
+        (insert "\"foo\"")
+        (goto-char (point-min))
+        (delete-pair)
+        (should (string-equal "foo" (buffer-string)))))))
+
+(ert-deftest lisp-forward-sexp-elisp-inside-symbol ()
+  "Test \\[forward-sexp] on symbol in Emacs Lisp Mode for #20492."
+  (with-temp-buffer
+    (emacs-lisp-mode)
+    (insert "hide-ifdef-env ")
+    (insert (concat (number-sequence 32 126)))
+    (goto-char (point-min))
+    (re-search-forward "hide" nil t) ;; (forward-char 4)
+    (should (looking-at "-"))
+    (forward-sexp)
+    (should (looking-at " "))))
+
+(ert-deftest lisp-forward-sexp-elisp-quoted-symbol ()
+  "Test \\[forward-sexp] on symbol in Emacs Lisp Mode for #20492."
+  (with-temp-buffer
+    (emacs-lisp-mode)
+    (insert "`hide-ifdef-env'.")
+    (goto-char (point-min))
+    (re-search-forward "hide" nil t) ;; (forward-char 5)
+    (should (= ?- (char-after)))
+    (forward-sexp)
+    (should (= ?. (char-before)))))
+
+(ert-deftest lisp-forward-sexp-python-triple-quoted-string ()
+  "Test \\[forward-sexp] on Python doc strings for #11321."
+  (with-temp-buffer
+    (insert "\"\"\"Triple-quoted string\"\"\"")
+    (goto-char (point-min))
+    (let ((python-indent-guess-indent-offset nil))
+      (python-mode))
+    (forward-sexp)
+    (should (eobp))))
+
+(ert-deftest lisp-forward-sexp-python-triple-quotes-string ()
+  "Test \\[forward-sexp] on Python doc strings for #11321."
+  (with-temp-buffer
+    (insert "'''Triple-quoted string'''")
+    (goto-char (point-min))
+    (let ((python-indent-guess-indent-offset nil))
+      (python-mode))
+    (forward-sexp)
+    (should (eobp))))
+
+(ert-deftest lisp-forward-sexp-emacs-lisp-semi-char-error ()
+  "Test \\[forward-sexp] on expression with unquoted semicolon per #4030."
+  (with-temp-buffer
+    (emacs-lisp-mode)
+    (insert "(insert ?;)")
+    (goto-char (point-min))
+    (should-error (forward-sexp)))) ;; FIXME: Shouldn't be an error.
+
+(ert-deftest lisp-forward-sexp-emacs-lisp-quote-char ()
+  "Test \\[forward-sexp] on expression with unquoted quote per #4030."
+  (with-temp-buffer
+    (emacs-lisp-mode)
+    (insert "(insert ?\")")
+    (goto-char (point-min))
+    (should-error (forward-sexp)))) ;; FIXME: Shouldn't be an error.
+
+(provide 'lisp-tests)
+;;; lisp-tests.el ends here
similarity index 96%
rename from test/automated/package-test.el
rename to test/lisp/emacs-lisp/package-tests.el
index 55806454741703cdf5b80bf7d98a1a5020a2b22c..70e129cc4f577384eea360c653308ced0e17d9af 100644 (file)
@@ -97,7 +97,7 @@
                                (multi-file (0 1))))
   "`package-desc' used for testing dependencies.")
 
-(defvar package-test-data-dir (expand-file-name "data/package" package-test-file-dir)
+(defvar package-test-data-dir (expand-file-name "package-resources" package-test-file-dir)
   "Base directory of package test files.")
 
 (defvar package-test-fake-contents-file
@@ -190,18 +190,18 @@ Must called from within a `tar-mode' buffer."
 
 (ert-deftest package-test-desc-from-buffer ()
   "Parse an elisp buffer to get a `package-desc' object."
-  (with-package-test (:basedir "data/package" :file "simple-single-1.3.el")
+  (with-package-test (:basedir "package-resources" :file "simple-single-1.3.el")
     (should (equal (package-buffer-info) simple-single-desc)))
-  (with-package-test (:basedir "data/package" :file "simple-depend-1.0.el")
+  (with-package-test (:basedir "package-resources" :file "simple-depend-1.0.el")
     (should (equal (package-buffer-info) simple-depend-desc)))
-  (with-package-test (:basedir "data/package"
+  (with-package-test (:basedir "package-resources"
                                :file "multi-file-0.2.3.tar")
     (tar-mode)
     (should (equal (package-tar-file-info) multi-file-desc))))
 
 (ert-deftest package-test-install-single ()
   "Install a single file without using an archive."
-  (with-package-test (:basedir "data/package" :file "simple-single-1.3.el")
+  (with-package-test (:basedir "package-resources" :file "simple-single-1.3.el")
     (should (package-install-from-buffer))
     (package-initialize)
     (should (package-installed-p 'simple-single))
@@ -244,7 +244,7 @@ Must called from within a `tar-mode' buffer."
 
 (ert-deftest package-test-macro-compilation ()
   "Install a package which includes a dependency."
-  (with-package-test (:basedir "data/package")
+  (with-package-test (:basedir "package-resources")
     (package-install-file (expand-file-name "macro-problem-package-1.0/"))
     (require 'macro-problem)
     ;; `macro-problem-func' uses a macro from `macro-aux'.
@@ -283,7 +283,7 @@ Must called from within a `tar-mode' buffer."
 (ert-deftest package-test-install-prioritized ()
   "Install a lower version from a higher-prioritized archive."
   (with-package-test ()
-    (let* ((newer-version (expand-file-name "data/package/newer-versions"
+    (let* ((newer-version (expand-file-name "package-resources/newer-versions"
                                             package-test-file-dir))
            (package-archives `(("older" . ,package-test-data-dir)
                                ("newer" . ,newer-version)))
@@ -299,7 +299,7 @@ Must called from within a `tar-mode' buffer."
 
 (ert-deftest package-test-install-multifile ()
   "Check properties of the installed multi-file package."
-  (with-package-test (:basedir "data/package" :install '(multi-file))
+  (with-package-test (:basedir "package-resources" :install '(multi-file))
     (let ((autoload-file
            (expand-file-name "multi-file-autoloads.el"
                              (expand-file-name
@@ -350,7 +350,7 @@ Must called from within a `tar-mode' buffer."
       (package-menu-execute)
       (should (package-installed-p 'simple-single))
       (let ((package-test-data-dir
-             (expand-file-name "data/package/newer-versions" package-test-file-dir)))
+             (expand-file-name "package-resources/newer-versions" package-test-file-dir)))
         (setq package-archives `(("gnu" . ,package-test-data-dir)))
         (package-menu-refresh)
 
@@ -470,7 +470,7 @@ Must called from within a `tar-mode' buffer."
                     (delete-directory homedir t)))))
   (let* ((keyring (expand-file-name "key.pub" package-test-data-dir))
         (package-test-data-dir
-          (expand-file-name "data/package/signed" package-test-file-dir)))
+          (expand-file-name "package-resources/signed" package-test-file-dir)))
     (with-package-test ()
       (package-initialize)
       (package-import-keyring keyring)
@@ -522,7 +522,7 @@ Must called from within a `tar-mode' buffer."
 
 (ert-deftest package-x-test-upload-buffer ()
   "Test creating an \"archive-contents\" file"
-  (with-package-test (:basedir "data/package"
+  (with-package-test (:basedir "package-resources"
                                :file "simple-single-1.3.el"
                                :upload-base t)
     (package-upload-buffer)
@@ -546,7 +546,7 @@ Must called from within a `tar-mode' buffer."
 
 (ert-deftest package-x-test-upload-new-version ()
   "Test uploading a new version of a package"
-  (with-package-test (:basedir "data/package"
+  (with-package-test (:basedir "package-resources"
                                :file "simple-single-1.3.el"
                                :upload-base t)
     (package-upload-buffer)
@@ -613,6 +613,7 @@ Must called from within a `tar-mode' buffer."
                simple-depend-desc-2)))
     (should
      (equal (package--sort-by-dependence delete-list)
+
             (list simple-depend-desc-2 simple-depend-desc-1 new-pkg-desc
                   multi-file-desc simple-depend-desc simple-single-desc)))
     (should
similarity index 95%
rename from test/automated/seq-tests.el
rename to test/lisp/emacs-lisp/seq-tests.el
index a8ca48b1328268a568277fc11d0e06152eca0296..50543de8ada93817a93d69a0c36ad190cb36b4ec 100644 (file)
@@ -97,6 +97,16 @@ Evaluate BODY for each created sequence.
   (with-test-sequences (seq '())
     (should (seq-empty-p (seq-take-while #'test-sequences-oddp seq)))))
 
+(ert-deftest test-seq-map-indexed ()
+  (should (equal (seq-map-indexed (lambda (elt i)
+                                    (list elt i))
+                                  nil)
+                 nil))
+  (should (equal (seq-map-indexed (lambda (elt i)
+                                    (list elt i))
+                                  '(a b c d))
+                 '((a 0) (b 1) (c 2) (d 3)))))
+
 (ert-deftest test-seq-filter ()
   (with-test-sequences (seq '(6 7 8 9 10))
     (should (equal (seq-filter #'test-sequences-evenp seq) '(6 8 10)))
@@ -337,5 +347,10 @@ Evaluate BODY for each created sequence.
     (should (= (seq-position seq 'a #'eq) 0))
     (should (null (seq-position seq (make-symbol "a") #'eq)))))
 
+(ert-deftest test-seq-sort-by ()
+  (let ((seq ["x" "xx" "xxx"]))
+    (should (equal (seq-sort-by #'seq-length #'> seq)
+                   ["xxx" "xx" "x"]))))
+
 (provide 'seq-tests)
 ;;; seq-tests.el ends here
diff --git a/test/lisp/erc/erc-track-tests.el b/test/lisp/erc/erc-track-tests.el
new file mode 100644 (file)
index 0000000..24dfcfb
--- /dev/null
@@ -0,0 +1,118 @@
+;;; erc-track-tests.el --- Tests for erc-track.
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Mario Lang <mlang@delysid.org>
+;; Author: Vivek Dasmohapatra <vivek@etla.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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'erc-track)
+
+(ert-deftest erc-track--shorten-aggressive-nil ()
+  "Test non-aggressive erc track buffer name shortening."
+  (let (erc-track-shorten-aggressively)
+    (should
+     (equal (erc-unique-channel-names '("#emacs" "#vi" "#electronica" "#folk")
+                                      '("#emacs" "#vi"))
+            '("#em" "#vi")))
+    (should
+     (equal (erc-unique-channel-names '("#linux-de" "#linux-fr")
+                                      '("#linux-de" "#linux-fr"))
+            '("#linux-de" "#linux-fr")))
+    (should
+     (equal (erc-unique-channel-names
+             '("#dunnet" "#lisp" "#sawfish" "#fsf" "#guile" "#testgnome"
+               "#gnu" "#fsbot" "#hurd" "#hurd-bunny" "#emacs")
+             '("#hurd-bunny" "#hurd" "#sawfish" "#lisp"))
+            '("#hurd-" "#hurd" "#s" "#l")))
+    (should
+     (equal (erc-unique-substrings '("#emacs" "#vi" "#electronica" "#folk"))
+            '("#em" "#vi" "#el" "#f")))
+    (should
+     (equal (erc-unique-channel-names
+             '("#emacs" "#burse" "+linux.de" "#starwars"
+               "#bitlbee" "+burse" "#ratpoison")
+             '("+linux.de" "#starwars" "#burse"))
+            '("+l" "#s" "#bu")))
+    (should
+     (equal (erc-unique-channel-names '("fsbot" "#emacs" "deego") '("fsbot"))
+            '("fs")))
+    (should
+     (equal (erc-unique-channel-names '("fsbot" "#emacs" "deego")
+                                      '("fsbot")
+                                      (lambda (s) (> (length s) 4)) 1)
+            '("f")))
+    (should
+     (equal (erc-unique-channel-names '("fsbot" "#emacs" "deego")
+                                      '("fsbot")
+                                      (lambda (s) (> (length s) 4)) 2)
+            '("fs")))
+    (should
+     (equal (erc-unique-channel-names '("deego" "#hurd" "#hurd-bunny" "#emacs")
+                                      '("#hurd" "#hurd-bunny"))
+            '("#hurd" "#hurd-")))
+    (should
+     (and
+      (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
+      (not   (erc-unique-substring-1 "a" '("xyz" "xab")))
+      (equal (erc-unique-substrings '("abc" "xyz" "xab")) '("abc" "xyz" "xab"))
+      (equal (erc-unique-substrings '("abc" "abcdefg")) '("abc" "abcd")))) ))
+
+(ert-deftest erc-track--shorten-aggressive-t ()
+  "Test aggressive erc track buffer name shortening."
+  (let ((erc-track-shorten-aggressively t))
+    (should
+     (equal (erc-unique-channel-names '("#emacs" "#vi" "#electronica" "#folk")
+                                      '("#emacs" "#vi"))
+            '("#em" "#v")))
+    (should
+     (equal (erc-unique-channel-names '("#linux-de" "#linux-fr")
+                                      '("#linux-de" "#linux-fr"))
+            '("#linux-d" "#linux-f")))
+    (should
+     (equal (erc-unique-substrings '("#emacs" "#vi" "#electronica" "#folk"))
+            '("#em" "#v" "#el" "#f")))
+    (should
+     (and
+      (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
+      (not   (erc-unique-substring-1 "a" '("xyz" "xab")))
+      (equal (erc-unique-substrings '("abc" "xyz" "xab")) '("ab" "xy" "xa"))
+      (equal (erc-unique-substrings '("abc" "abcdefg")) '("abc" "abcd")))) ))
+
+(ert-deftest erc-track--shorten-aggressive-max ()
+  "Test maximally aggressive erc track buffer name shortening."
+  (let ((erc-track-shorten-aggressively 'max))
+    (should
+     (equal (erc-unique-channel-names '("#emacs" "#vi" "#electronica" "#folk")
+                                      '("#emacs" "#vi"))
+            '("#e" "#v"))) ))
+
+(ert-deftest erc-track--erc-faces-in ()
+  "`erc-faces-in' should pick up both 'face and 'font-lock-face properties."
+  (let ((str0 "is bold")
+        (str1 "is bold")
+        ;;(char-property-alias-alist '((face font-lock-face)))
+        )
+    (put-text-property 3 (length str0) 'font-lock-face
+                       '(bold erc-current-nick-face) str0)
+    (put-text-property 3 (length str1) 'face
+                       '(bold erc-current-nick-face) str1)
+    (should (erc-faces-in str0))
+    (should (erc-faces-in str1)) ))
similarity index 93%
rename from test/automated/file-notify-tests.el
rename to test/lisp/filenotify-tests.el
index 9f0c0ed0dc1609f87226d5170f7c93ed03d727f3..9c19e63e62a961b604cb0cd4874a20614af1c788 100644 (file)
@@ -140,7 +140,7 @@ being the result.")
          (setq desc
                (file-notify-add-watch
                 file-notify-test-remote-temporary-file-directory
-                '(change) 'ignore))))
+                '(change) #'ignore))))
       (setq file-notify--test-remote-enabled-checked (cons t desc))
       (when desc (file-notify-rm-watch desc))))
   ;; Return result.
@@ -180,7 +180,7 @@ remote host, or nil."
   (message "Library: `%s'" (file-notify--test-library))
   (should
    (setq file-notify--test-desc
-         (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
+         (file-notify-add-watch temporary-file-directory '(change) #'ignore)))
 
   ;; Cleanup.
   (file-notify--test-cleanup))
@@ -199,23 +199,23 @@ remote host, or nil."
   ;; Check, that different valid parameters are accepted.
   (should
    (setq file-notify--test-desc
-         (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
+         (file-notify-add-watch temporary-file-directory '(change) #'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
   (should
    (setq file-notify--test-desc
          (file-notify-add-watch
-          temporary-file-directory '(attribute-change) 'ignore)))
+          temporary-file-directory '(attribute-change) #'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
   (should
    (setq file-notify--test-desc
          (file-notify-add-watch
-          temporary-file-directory '(change attribute-change) 'ignore)))
+          temporary-file-directory '(change attribute-change) #'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
   (write-region "any text" nil file-notify--test-tmpfile nil 'no-message)
   (should
    (setq file-notify--test-desc
          (file-notify-add-watch
-          file-notify--test-tmpfile '(change attribute-change) 'ignore)))
+          file-notify--test-tmpfile '(change attribute-change) #'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
   (delete-file file-notify--test-tmpfile)
 
@@ -238,7 +238,7 @@ remote host, or nil."
   (should
    (equal (should-error
            (file-notify-add-watch
-            file-notify--test-tmpfile1 '(change attribute-change) 'ignore))
+            file-notify--test-tmpfile1 '(change attribute-change) #'ignore))
           `(file-notify-error
             "Directory does not exist" ,file-notify--test-tmpfile)))
 
@@ -361,7 +361,7 @@ longer than timeout seconds for the events to be delivered."
            (setq file-notify--test-desc
                  (file-notify-add-watch
                   file-notify--test-tmpfile
-                  '(change) 'file-notify--test-event-handler)))
+                  '(change) #'file-notify--test-event-handler)))
           (file-notify--test-with-events
               (cond
                ;; cygwin recognizes only `deleted' and `stopped' events.
@@ -381,7 +381,7 @@ longer than timeout seconds for the events to be delivered."
         (setq file-notify--test-desc
               (file-notify-add-watch
                file-notify--test-tmpfile
-               '(change) 'file-notify--test-event-handler)))
+               '(change) #'file-notify--test-event-handler)))
         (file-notify--test-with-events
            (cond
             ;; cygwin recognizes only `deleted' and `stopped' events.
@@ -397,7 +397,6 @@ longer than timeout seconds for the events to be delivered."
               '((changed deleted stopped)
                 (changed changed deleted stopped)))
             (t '(changed changed deleted stopped)))
-          (read-event nil nil file-notify--test-read-event-timeout)
           (write-region
            "another text" nil file-notify--test-tmpfile nil 'no-message)
           (read-event nil nil file-notify--test-read-event-timeout)
@@ -414,7 +413,7 @@ longer than timeout seconds for the events to be delivered."
                 file-notify--test-desc
                 (file-notify-add-watch
                  temporary-file-directory
-                 '(change) 'file-notify--test-event-handler)))
+                 '(change) #'file-notify--test-event-handler)))
          (file-notify--test-with-events
              (cond
               ;; w32notify does not raise `deleted' and `stopped'
@@ -429,11 +428,10 @@ longer than timeout seconds for the events to be delivered."
               ((string-equal (file-notify--test-library) "kqueue")
                '(created changed deleted stopped))
               (t '(created changed deleted deleted stopped)))
-           (read-event nil nil file-notify--test-read-event-timeout)
            (write-region
             "any text" nil file-notify--test-tmpfile nil 'no-message)
            (read-event nil nil file-notify--test-read-event-timeout)
-           (delete-directory temporary-file-directory 'recursive))
+            (delete-directory temporary-file-directory 'recursive))
           (file-notify-rm-watch file-notify--test-desc))
 
         ;; Check copy of files inside a directory.
@@ -445,7 +443,7 @@ longer than timeout seconds for the events to be delivered."
                 file-notify--test-desc
                 (file-notify-add-watch
                  temporary-file-directory
-                 '(change) 'file-notify--test-event-handler)))
+                 '(change) #'file-notify--test-event-handler)))
          (file-notify--test-with-events
              (cond
               ;; w32notify does not distinguish between `changed' and
@@ -464,7 +462,6 @@ longer than timeout seconds for the events to be delivered."
                '(created changed created changed deleted stopped))
               (t '(created changed created changed
                    deleted deleted deleted stopped)))
-           (read-event nil nil file-notify--test-read-event-timeout)
            (write-region
             "any text" nil file-notify--test-tmpfile nil 'no-message)
            (read-event nil nil file-notify--test-read-event-timeout)
@@ -475,7 +472,7 @@ longer than timeout seconds for the events to be delivered."
            (read-event nil nil file-notify--test-read-event-timeout)
            (set-file-times file-notify--test-tmpfile '(0 0))
            (read-event nil nil file-notify--test-read-event-timeout)
-           (delete-directory temporary-file-directory 'recursive))
+            (delete-directory temporary-file-directory 'recursive))
           (file-notify-rm-watch file-notify--test-desc))
 
         ;; Check rename of files inside a directory.
@@ -487,7 +484,7 @@ longer than timeout seconds for the events to be delivered."
                 file-notify--test-desc
                 (file-notify-add-watch
                  temporary-file-directory
-                 '(change) 'file-notify--test-event-handler)))
+                 '(change) #'file-notify--test-event-handler)))
          (file-notify--test-with-events
              (cond
               ;; w32notify does not raise `deleted' and `stopped'
@@ -502,14 +499,13 @@ longer than timeout seconds for the events to be delivered."
               ((string-equal (file-notify--test-library) "kqueue")
                '(created changed renamed deleted stopped))
               (t '(created changed renamed deleted deleted stopped)))
-           (read-event nil nil file-notify--test-read-event-timeout)
            (write-region
             "any text" nil file-notify--test-tmpfile nil 'no-message)
            (read-event nil nil file-notify--test-read-event-timeout)
            (rename-file file-notify--test-tmpfile file-notify--test-tmpfile1)
            ;; After the rename, we won't get events anymore.
            (read-event nil nil file-notify--test-read-event-timeout)
-           (delete-directory temporary-file-directory 'recursive))
+            (delete-directory temporary-file-directory 'recursive))
           (file-notify-rm-watch file-notify--test-desc))
 
         ;; Check attribute change.  Does not work for cygwin.
@@ -521,20 +517,22 @@ longer than timeout seconds for the events to be delivered."
           (setq file-notify--test-desc
                 (file-notify-add-watch
                  file-notify--test-tmpfile
-                 '(attribute-change) 'file-notify--test-event-handler)))
+                 '(attribute-change) #'file-notify--test-event-handler)))
          (file-notify--test-with-events
              (cond
               ;; w32notify does not distinguish between `changed' and
-              ;; `attribute-changed'.
+              ;; `attribute-changed'.  Under MS Windows 7, we get
+              ;; four `changed' events, and under MS Windows 10 just
+              ;; two.  Strange.
               ((string-equal (file-notify--test-library) "w32notify")
-               '(changed changed changed changed))
+               '((changed changed)
+                 (changed changed changed changed)))
               ;; For kqueue and in the remote case, `write-region'
               ;; raises also an `attribute-changed' event.
               ((or (string-equal (file-notify--test-library) "kqueue")
                    (file-remote-p temporary-file-directory))
                '(attribute-changed attribute-changed attribute-changed))
               (t '(attribute-changed attribute-changed)))
-           (read-event nil nil file-notify--test-read-event-timeout)
            (write-region
             "any text" nil file-notify--test-tmpfile nil 'no-message)
            (read-event nil nil file-notify--test-read-event-timeout)
@@ -670,6 +668,7 @@ longer than timeout seconds for the events to be delivered."
               (file-notify-add-watch
                file-notify--test-tmpfile
                '(change) #'file-notify--test-event-handler)))
+       (should (file-notify-valid-p file-notify--test-desc))
         (file-notify--test-with-events
             (cond
              ;; cygwin recognizes only `deleted' and `stopped' events.
@@ -685,8 +684,6 @@ longer than timeout seconds for the events to be delivered."
               '((changed deleted stopped)
                 (changed changed deleted stopped)))
             (t '(changed changed deleted stopped)))
-          (should (file-notify-valid-p file-notify--test-desc))
-         (read-event nil nil file-notify--test-read-event-timeout)
           (write-region
            "another text" nil file-notify--test-tmpfile nil 'no-message)
          (read-event nil nil file-notify--test-read-event-timeout)
@@ -707,6 +704,7 @@ longer than timeout seconds for the events to be delivered."
               (file-notify-add-watch
                temporary-file-directory
                '(change) #'file-notify--test-event-handler)))
+       (should (file-notify-valid-p file-notify--test-desc))
        (file-notify--test-with-events
         (cond
          ;; w32notify does not raise `deleted' and `stopped' events
@@ -721,8 +719,6 @@ longer than timeout seconds for the events to be delivered."
          ((string-equal (file-notify--test-library) "kqueue")
           '(created changed deleted stopped))
          (t '(created changed deleted deleted stopped)))
-        (should (file-notify-valid-p file-notify--test-desc))
-        (read-event nil nil file-notify--test-read-event-timeout)
         (write-region
          "any text" nil file-notify--test-tmpfile nil 'no-message)
         (read-event nil nil file-notify--test-read-event-timeout)
@@ -743,9 +739,9 @@ longer than timeout seconds for the events to be delivered."
 
   (unwind-protect
       (progn
-        (setq file-notify--test-tmpfile
-             (file-name-as-directory (file-notify--test-make-temp-name)))
-        (make-directory file-notify--test-tmpfile)
+       (should
+        (setq file-notify--test-tmpfile
+              (make-temp-file "file-notify-test-parent" t)))
        (should
         (setq file-notify--test-desc
               (file-notify-add-watch
@@ -765,9 +761,9 @@ longer than timeout seconds for the events to be delivered."
 
   (unwind-protect
       (progn
-       (setq file-notify--test-tmpfile
-             (file-name-as-directory (file-notify--test-make-temp-name)))
-        (make-directory file-notify--test-tmpfile)
+       (should
+        (setq file-notify--test-tmpfile
+              (make-temp-file "file-notify-test-parent" t)))
        (should
         (setq file-notify--test-desc
               (file-notify-add-watch
@@ -795,13 +791,14 @@ longer than timeout seconds for the events to be delivered."
   ;; Under cygwin events arrive in random order.  Impossible to define a test.
   (skip-unless (not (eq system-type 'cygwin)))
 
-  (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
-  (make-directory file-notify--test-tmpfile)
+  (should
+   (setq file-notify--test-tmpfile
+        (make-temp-file "file-notify-test-parent" t)))
   (should
    (setq file-notify--test-desc
         (file-notify-add-watch
          file-notify--test-tmpfile
-         '(change) 'file-notify--test-event-handler)))
+         '(change) #'file-notify--test-event-handler)))
   (unwind-protect
       (let ((n 1000)
             source-file-list target-file-list
@@ -1058,6 +1055,47 @@ the file watch."
 (file-notify--deftest-remote file-notify-test08-watched-file-in-watched-dir
   "Check `file-notify-test08-watched-file-in-watched-dir' for remote files.")
 
+(ert-deftest file-notify-test09-sufficient-resources ()
+  "Check that file notification does not use too many resources."
+  :tags '(:expensive-test)
+  (skip-unless (file-notify--test-local-enabled))
+  ;; This test is intended for kqueue only.
+  (skip-unless (string-equal (file-notify--test-library) "kqueue"))
+
+  (should
+   (setq file-notify--test-tmpfile
+        (make-temp-file "file-notify-test-parent" t)))
+  (unwind-protect
+      (let ((temporary-file-directory file-notify--test-tmpfile)
+           descs)
+       (should-error
+        (while t
+          ;; We watch directories, because we want to reach the upper
+          ;; limit.  Watching a file might not be sufficient, because
+          ;; most of the libraries implement this as watching the
+          ;; upper directory.
+          (setq file-notify--test-tmpfile1
+                (make-temp-file "file-notify-test-parent" t)
+                descs
+                (cons
+                 (should
+                  (file-notify-add-watch
+                   file-notify--test-tmpfile1 '(change) #'ignore))
+                 descs)))
+        :type 'file-notify-error)
+       ;; Remove watches.  If we don't do it prior removing
+       ;; directories, Emacs crashes in batch mode.
+       (dolist (desc descs)
+        (file-notify-rm-watch desc))
+       ;; Remove directories.
+        (delete-directory file-notify--test-tmpfile 'recursive))
+
+    ;; Cleanup.
+    (file-notify--test-cleanup)))
+
+(file-notify--deftest-remote file-notify-test09-sufficient-resources
+  "Check `file-notify-test09-sufficient-resources' for remote files.")
+
 (defun file-notify-test-all (&optional interactive)
   "Run all tests for \\[file-notify]."
   (interactive "p")
similarity index 53%
rename from test/automated/message-mode-tests.el
rename to test/lisp/gnus/message-tests.el
index 3afa1569f64cdaaba73ee0d88d4428cce012e3cd..ae34f24d741434420daabc028f24b49a82f96f54 100644 (file)
                             (point)))))
       (set-buffer-modified-p nil))))
 
+
+(ert-deftest message-strip-subject-trailing-was ()
+  (ert-with-function-mocked message-talkative-question nil
+    (with-temp-buffer
+      (let ((no-was "Re: Foo ")
+            (with-was "Re: Foo \t (was: Bar ) ")
+            (stripped-was "Re: Foo")
+            reply)
+
+        ;; Test unconditional stripping
+        (setq-local message-subject-trailing-was-query t)
+        (should (string= no-was (message-strip-subject-trailing-was no-was)))
+        (should (string= stripped-was
+                         (message-strip-subject-trailing-was with-was)))
+
+        ;; Test asking
+        (setq-local message-subject-trailing-was-query 'ask)
+        (fset 'message-talkative-question
+              (lambda (_ question show text)
+                (should (string= "Strip `(was: <old subject>)' in subject? "
+                                 question))
+                (should show)
+                (should (string-match
+                         (concat
+                          "Strip `(was: <old subject>)' in subject "
+                          "and use the new one instead\\?\n\n"
+                          "Current subject is:   \"\\(.*\\)\"\n\n"
+                          "New subject would be: \"\\(.*\\)\"\n\n"
+                          "See the variable "
+                          "`message-subject-trailing-was-query' "
+                          "to get rid of this query.")
+                         text))
+                (should (string= (match-string 1 text) with-was))
+                (should (string= (match-string 2 text) stripped-was))
+                reply))
+        (message-strip-subject-trailing-was with-was)
+        (should (string= with-was
+                         (message-strip-subject-trailing-was with-was)))
+        (setq reply t)
+        (should (string= stripped-was
+                         (message-strip-subject-trailing-was with-was)))))))
+
+
 (provide 'message-mode-tests)
 
 ;;; message-mode-tests.el ends here
diff --git a/test/lisp/htmlfontify-tests.el b/test/lisp/htmlfontify-tests.el
new file mode 100644 (file)
index 0000000..012e170
--- /dev/null
@@ -0,0 +1,34 @@
+;;; htmlfontify-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015-2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'htmlfontify)
+
+(ert-deftest htmlfontify-autoload ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'htmlfontify-load-rgb-file))
+  (should
+   (autoloadp
+    (symbol-function
+     'htmlfontify-load-rgb-file))))
+
+(provide 'htmlfontify-tests)
+;; htmlfontify-tests.el ends here
diff --git a/test/lisp/ibuffer-tests.el b/test/lisp/ibuffer-tests.el
new file mode 100644 (file)
index 0000000..de281c0
--- /dev/null
@@ -0,0 +1,34 @@
+;;; ibuffer-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015-2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'ibuffer)
+
+(ert-deftest ibuffer-autoload ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'ibuffer-mark-unsaved-buffers))
+  (should
+   (autoloadp
+    (symbol-function
+     'ibuffer-mark-unsaved-buffers))))
+
+(provide 'ibuffer-tests)
+;; ibuffer-tests.el ends here
diff --git a/test/lisp/mail/rmail-tests.el b/test/lisp/mail/rmail-tests.el
new file mode 100644 (file)
index 0000000..2f18372
--- /dev/null
@@ -0,0 +1,35 @@
+;;; rmail-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015-2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'rmail)
+
+
+(ert-deftest rmail-autoload ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'rmail-edit-current-message))
+  (should
+   (autoloadp
+    (symbol-function
+     'rmail-edit-current-message))))
+
+(provide 'rmail-tests)
+;; rmail-tests.el ends here
diff --git a/test/lisp/net/network-stream-tests.el b/test/lisp/net/network-stream-tests.el
new file mode 100644 (file)
index 0000000..c9b7cc7
--- /dev/null
@@ -0,0 +1,276 @@
+;;; network-stream-tests.el --- tests for network processes       -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Lars Ingebrigtsen <larsi@gnus.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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+
+;;; Code:
+
+(require 'gnutls)
+
+(ert-deftest make-local-unix-server ()
+  (skip-unless (featurep 'make-network-process '(:family local)))
+  (let* ((file (make-temp-name "/tmp/server-test"))
+         (server
+          (make-network-process
+           :name "server"
+           :server t
+           :buffer (get-buffer-create "*server*")
+           :noquery t
+           :family 'local
+           :service file)))
+    (should (equal (process-contact server :local) file))
+    (delete-file (process-contact server :local))))
+
+(ert-deftest make-ipv4-tcp-server-with-unspecified-port ()
+  (let ((server
+         (make-network-process
+          :name "server"
+          :server t
+          :noquery t
+          :family 'ipv4
+          :service t
+          :host 'local)))
+    (should (and (arrayp (process-contact server :local))
+                 (numberp (aref (process-contact server :local) 4))
+                 (> (aref (process-contact server :local) 4) 0)))
+    (delete-process server)))
+
+(ert-deftest make-ipv4-tcp-server-with-specified-port ()
+  (let ((server
+         (make-network-process
+          :name "server"
+          :server t
+          :noquery t
+          :family 'ipv4
+          :service 57869
+          :host 'local)))
+    (should (and (arrayp (process-contact server :local))
+                 (= (aref (process-contact server :local) 4) 57869)))
+    (delete-process server)))
+
+(defun make-server (host)
+  (make-network-process
+   :name "server"
+   :server t
+   :noquery t
+   :family 'ipv4
+   :coding 'raw-text-unix
+   :buffer (get-buffer-create "*server*")
+   :service t
+   :sentinel 'server-sentinel
+   :filter 'server-process-filter
+   :host host))
+
+(defun server-sentinel (_proc _msg)
+  )
+
+(defun server-process-filter (proc string)
+  (message "Received %s" string)
+  (let ((prev (process-get proc 'previous-string)))
+    (when prev
+      (setq string (concat prev string))
+      (process-put proc 'previous-string nil)))
+  (if (and (not (string-match "\n" string))
+           (> (length string) 0))
+      (process-put proc 'previous-string string))
+  (let ((command (split-string string)))
+    (cond
+     ((equal (car command) "echo")
+      (process-send-string proc (concat (cadr command) "\n")))
+     (t
+      ))))
+
+(ert-deftest echo-server-with-dns ()
+  (let* ((server (make-server (system-name)))
+         (port (aref (process-contact server :local) 4))
+         (proc (make-network-process :name "foo"
+                                     :buffer (generate-new-buffer "*foo*")
+                                     :host (system-name)
+                                     :service port)))
+    (with-current-buffer (process-buffer proc)
+      (process-send-string proc "echo foo")
+      (sleep-for 0.1)
+      (should (equal (buffer-string) "foo\n")))
+    (delete-process server)))
+
+(ert-deftest echo-server-with-localhost ()
+  (let* ((server (make-server 'local))
+         (port (aref (process-contact server :local) 4))
+         (proc (make-network-process :name "foo"
+                                     :buffer (generate-new-buffer "*foo*")
+                                     :host "localhost"
+                                     :service port)))
+    (with-current-buffer (process-buffer proc)
+      (process-send-string proc "echo foo")
+      (sleep-for 0.1)
+      (should (equal (buffer-string) "foo\n")))
+    (delete-process server)))
+
+(ert-deftest echo-server-with-ip ()
+  (let* ((server (make-server 'local))
+         (port (aref (process-contact server :local) 4))
+         (proc (make-network-process :name "foo"
+                                     :buffer (generate-new-buffer "*foo*")
+                                     :host "127.0.0.1"
+                                     :service port)))
+    (with-current-buffer (process-buffer proc)
+      (process-send-string proc "echo foo")
+      (sleep-for 0.1)
+      (should (equal (buffer-string) "foo\n")))
+    (delete-process server)))
+
+(ert-deftest echo-server-nowait ()
+  (let* ((server (make-server 'local))
+         (port (aref (process-contact server :local) 4))
+         (proc (make-network-process :name "foo"
+                                     :buffer (generate-new-buffer "*foo*")
+                                     :host "localhost"
+                                     :nowait t
+                                     :service port)))
+    (should (eq (process-status proc) 'connect))
+    (while (eq (process-status proc) 'connect)
+      (sit-for 0.1))
+    (with-current-buffer (process-buffer proc)
+      (process-send-string proc "echo foo")
+      (sleep-for 0.1)
+      (should (equal (buffer-string) "foo\n")))
+    (delete-process server)))
+
+(defun make-tls-server (port)
+  (start-process "gnutls" (generate-new-buffer "*tls*")
+                 "gnutls-serv" "--http"
+                 "--x509keyfile" "data/net/key.pem"
+                 "--x509certfile" "data/net/cert.pem"
+                 "--port" (format "%s" port)))
+
+(ert-deftest connect-to-tls-ipv4-wait ()
+  (skip-unless (executable-find "gnutls-serv"))
+  (skip-unless (gnutls-available-p))
+  (let ((server (make-tls-server 44332))
+        (times 0)
+        proc status)
+    (sleep-for 1)
+    (with-current-buffer (process-buffer server)
+      (message "gnutls-serv: %s" (buffer-string)))
+
+    ;; It takes a while for gnutls-serv to start.
+    (while (and (null (ignore-errors
+                        (setq proc (make-network-process
+                                    :name "bar"
+                                    :buffer (generate-new-buffer "*foo*")
+                                    :host "localhost"
+                                    :service 44332))))
+                (< (setq times (1+ times)) 10))
+      (sit-for 0.1))
+    (should proc)
+    (gnutls-negotiate :process proc
+                      :type 'gnutls-x509pki
+                      :hostname "localhost")
+    (delete-process server)
+    (setq status (gnutls-peer-status proc))
+    (should (consp status))
+    (delete-process proc)
+    ;; This sleep-for is needed for the native MS-Windows build.  If
+    ;; it is removed, the next test mysteriously fails because the
+    ;; initial part of the echo is not received.
+    (sleep-for 0.1)
+    (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
+      (should (stringp issuer))
+      (setq issuer (split-string issuer ","))
+      (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
+
+(ert-deftest connect-to-tls-ipv4-nowait ()
+  (skip-unless (executable-find "gnutls-serv"))
+  (skip-unless (gnutls-available-p))
+  (let ((server (make-tls-server 44331))
+        (times 0)
+        proc status)
+    (sleep-for 1)
+    (with-current-buffer (process-buffer server)
+      (message "gnutls-serv: %s" (buffer-string)))
+
+    ;; It takes a while for gnutls-serv to start.
+    (while (and (null (ignore-errors
+                        (setq proc (make-network-process
+                                    :name "bar"
+                                    :buffer (generate-new-buffer "*foo*")
+                                    :nowait t
+                                    :tls-parameters
+                                    (cons 'gnutls-x509pki
+                                          (gnutls-boot-parameters
+                                           :hostname "localhost"))
+                                    :host "localhost"
+                                    :service 44331))))
+                (< (setq times (1+ times)) 10))
+      (sit-for 0.1))
+    (should proc)
+    (while (eq (process-status proc) 'connect)
+      (sit-for 0.1))
+    (delete-process server)
+    (setq status (gnutls-peer-status proc))
+    (should (consp status))
+    (delete-process proc)
+    (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
+      (should (stringp issuer))
+      (setq issuer (split-string issuer ","))
+      (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
+
+(ert-deftest connect-to-tls-ipv6-nowait ()
+  (skip-unless (executable-find "gnutls-serv"))
+  (skip-unless (gnutls-available-p))
+  (skip-unless (not (eq system-type 'windows-nt)))
+  (skip-unless (featurep 'make-network-process '(:family ipv6)))
+  (let ((server (make-tls-server 44333))
+        (times 0)
+        proc status)
+    (sleep-for 1)
+    (with-current-buffer (process-buffer server)
+      (message "gnutls-serv: %s" (buffer-string)))
+
+    ;; It takes a while for gnutls-serv to start.
+    (while (and (null (ignore-errors
+                        (setq proc (make-network-process
+                                    :name "bar"
+                                    :buffer (generate-new-buffer "*foo*")
+                                    :family 'ipv6
+                                    :nowait t
+                                    :tls-parameters
+                                    (cons 'gnutls-x509pki
+                                          (gnutls-boot-parameters
+                                           :hostname "localhost"))
+                                    :host "::1"
+                                    :service 44333))))
+                (< (setq times (1+ times)) 10))
+      (sit-for 0.1))
+    (should proc)
+    (while (eq (process-status proc) 'connect)
+      (sit-for 0.1))
+    (delete-process server)
+    (setq status (gnutls-peer-status proc))
+    (should (consp status))
+    (delete-process proc)
+    (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
+      (should (stringp issuer))
+      (setq issuer (split-string issuer ","))
+      (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
+
+;;; network-stream-tests.el ends here
diff --git a/test/lisp/net/shr-tests.el b/test/lisp/net/shr-tests.el
new file mode 100644 (file)
index 0000000..ab6fc93
--- /dev/null
@@ -0,0 +1,54 @@
+;;; network-stream-tests.el --- tests for network processes       -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Lars Ingebrigtsen <larsi@gnus.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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'shr)
+
+(defun shr-test (name)
+  (with-temp-buffer
+    (insert-file-contents (format "data/shr/%s.html" name))
+    (let ((dom (libxml-parse-html-region (point-min) (point-max)))
+          (shr-width 80)
+          (shr-use-fonts nil))
+      (erase-buffer)
+      (shr-insert-document dom)
+      (cons (buffer-substring-no-properties (point-min) (point-max))
+            (with-temp-buffer
+              (insert-file-contents (format "data/shr/%s.txt" name))
+              (while (re-search-forward "%\\([0-9A-F][0-9A-F]\\)" nil t)
+                (replace-match (string (string-to-number (match-string 1) 16))
+                               t t))
+              (buffer-string))))))
+
+(ert-deftest rendering ()
+  (skip-unless (fboundp 'libxml-parse-html-region))
+  (dolist (file (directory-files "data/shr" nil "\\.html\\'"))
+    (let* ((name (replace-regexp-in-string "\\.html\\'" "" file))
+           (result (shr-test name)))
+      (unless (equal (car result) (cdr result))
+        (should (not (list name (car result) (cdr result))))))))
+
+(require 'shr)
+
+;;; shr-stream-tests.el ends here
similarity index 98%
rename from test/automated/compile-tests.el
rename to test/lisp/progmodes/compile-tests.el
index 6821a6bfae5113c4d6fde81938a0334f446bb194..89615760c77775bd68b083a81005e9d8dd77abc8 100644 (file)
      1 nil 302 "\\lib\\python\\Products\\PythonScripts\\PythonScript.py")
     ("File \"/tmp/foo.py\", line 10"
      1 nil 10 "/tmp/foo.py")
+    ;; cmake cmake-info
+    ("CMake Error at CMakeLists.txt:23 (hurz):"
+     1 nil 23 "CMakeLists.txt")
+    ("CMake Warning at cmake/modules/UseUG.cmake:73 (find_package):"
+     1 nil 73 "cmake/modules/UseUG.cmake")
+    ("  cmake/modules/DuneGridMacros.cmake:19 (include)"
+     1 nil 19 "cmake/modules/DuneGridMacros.cmake")
     ;; comma
     ("\"foo.f\", line 3: Error: syntax error near end of statement"
      1 nil 3 "foo.f")
similarity index 95%
rename from test/automated/elisp-mode-tests.el
rename to test/lisp/progmodes/elisp-mode-tests.el
index f3f15ad3dbd62547e7af2ec72c0f1cebdf58078f..1679af308213b8d74bfe2d61d50349a607288388 100644 (file)
@@ -244,7 +244,7 @@ to (xref-elisp-test-descr-to-target xref)."
     (xref-make "(cl-defstruct (xref-elisp-location (:constructor xref-make-elisp-location)))"
                (xref-make-elisp-location
                 'xref-elisp-location 'define-type
-                (expand-file-name "../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
+                (expand-file-name "../../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
     ;; It's not worth adding another special case to `xref-elisp-test-descr-to-target' for this
     "(cl-defstruct (xref-elisp-location")
    ))
@@ -255,11 +255,11 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(defalias Buffer-menu-sort)"
              (xref-make-elisp-location
               'Buffer-menu-sort 'defalias
-              (expand-file-name "../../lisp/buff-menu.elc" emacs-test-dir)))
+              (expand-file-name "../../../lisp/buff-menu.elc" emacs-test-dir)))
    (xref-make "(defun tabulated-list-sort)"
              (xref-make-elisp-location
               'tabulated-list-sort nil
-              (expand-file-name "../../lisp/emacs-lisp/tabulated-list.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/emacs-lisp/tabulated-list.el" emacs-test-dir)))
    ))
 
 ;; FIXME: defconst
@@ -406,27 +406,27 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(cl-defgeneric xref-location-marker)"
              (xref-make-elisp-location
               'xref-location-marker 'cl-defgeneric
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-elisp-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-elisp-location) 'cl-defmethod
-              (expand-file-name "../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-file-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-file-location) 'cl-defmethod
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-buffer-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-buffer-location) 'cl-defmethod
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-bogus-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-bogus-location) 'cl-defmethod
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-etags-location)))"
               (xref-make-elisp-location
                '(xref-location-marker xref-etags-location) 'cl-defmethod
-               (expand-file-name "../../lisp/progmodes/etags.el" emacs-test-dir)))
+               (expand-file-name "../../../lisp/progmodes/etags.el" emacs-test-dir)))
    ))
 
 (xref-elisp-deftest find-defs-defgeneric-eval
@@ -528,7 +528,7 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(defun xref-find-definitions)"
              (xref-make-elisp-location
               'xref-find-definitions nil
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))))
 
 (xref-elisp-deftest find-defs-defun-eval
   (elisp--xref-find-definitions (eval '(defun stephe-leake-defun ())))
@@ -561,7 +561,7 @@ to (xref-elisp-test-descr-to-target xref)."
     (xref-make "(defun abbrev-mode)"
                (xref-make-elisp-location
                 'abbrev-mode nil
-                (expand-file-name "../../lisp/abbrev.el" emacs-test-dir)))
+                (expand-file-name "../../../lisp/abbrev.el" emacs-test-dir)))
     "(define-minor-mode abbrev-mode"))
   )
 
@@ -582,7 +582,7 @@ to (xref-elisp-test-descr-to-target xref)."
     (xref-make "(defun compilation-minor-mode)"
                (xref-make-elisp-location
                 'compilation-minor-mode nil
-                (expand-file-name "../../lisp/progmodes/compile.el" emacs-test-dir)))
+                (expand-file-name "../../../lisp/progmodes/compile.el" emacs-test-dir)))
     "(define-minor-mode compilation-minor-mode")
    ))
 
@@ -592,7 +592,7 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(defvar xref--marker-ring)"
              (xref-make-elisp-location
               'xref--marker-ring 'defvar
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
     ))
 
 (xref-elisp-deftest find-defs-defvar-c
@@ -615,11 +615,11 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(defvar font-lock-keyword-face)"
              (xref-make-elisp-location
               'font-lock-keyword-face 'defvar
-              (expand-file-name "../../lisp/font-lock.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/font-lock.el" emacs-test-dir)))
    (xref-make "(defface font-lock-keyword-face)"
              (xref-make-elisp-location
               'font-lock-keyword-face 'defface
-              (expand-file-name "../../lisp/font-lock.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/font-lock.el" emacs-test-dir)))
    ))
 
 (xref-elisp-deftest find-defs-face-eval
@@ -633,7 +633,7 @@ to (xref-elisp-test-descr-to-target xref)."
     (xref-make "(feature xref)"
              (xref-make-elisp-location
               'xref 'feature
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
     ";;; Code:")
    ))
 
similarity index 97%
rename from test/automated/flymake-tests.el
rename to test/lisp/progmodes/flymake-tests.el
index f3b830d36542690d92c7adbd1c10b20698b058ad..386516190bb42461f6ac18e29eca489e223803c5 100644 (file)
@@ -26,7 +26,7 @@
 (require 'flymake)
 
 (defvar flymake-tests-data-directory
-  (expand-file-name "data/flymake" (getenv "EMACS_TEST_DIRECTORY"))
+  (expand-file-name "lisp/progmodes/flymake-resources" (getenv "EMACS_TEST_DIRECTORY"))
   "Directory containing flymake test data.")
 
 \f
similarity index 56%
rename from lisp/obsolete/keyswap.el
rename to test/lisp/ps-print-tests.el
index ee3ba108093f682c72949da41c5360d18a52eec4..9ebd31b746054f5517842f8d155b3b63573a3b1e 100644 (file)
@@ -1,10 +1,8 @@
-;;; keyswap.el --- swap BS and DEL keys
+;;; ps-print-tests.el --- Test suite for ps-print.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1992, 2001-2016 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
 
-;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
-;; Keywords: terminals
-;; Obsolete-since: 22.1
+;; Author: Phillip Lord <phillip.lord@russet.org.uk>
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Commentary:
 
-;; This package is meant to be called by other terminal packages.
-
 ;;; Code:
-
-(let ((the-table (make-string 128 0)))
-  (let ((i 0))
-    (while (< i 128)
-      (aset the-table i i)
-      (setq i (1+ i))))
-  ;; Swap ^H and DEL
-  (aset the-table ?\177 ?\^h)
-  (aset the-table ?\^h ?\177)
-  (setq keyboard-translate-table the-table))
-
-;;; keyswap.el ends here
+(require 'ps-print)
+(require 'ert)
+
+;;; Autoload tests
+(ert-deftest ps-mule-autoload ()
+  "Tests to see whether ps-mule has been autoloaded"
+  (should
+   (fboundp 'ps-mule-initialize))
+  (should
+   (autoloadp
+    (symbol-function
+     'ps-mule-initialize))))
diff --git a/test/lisp/textmodes/css-mode-tests.el b/test/lisp/textmodes/css-mode-tests.el
new file mode 100644 (file)
index 0000000..4c0a357
--- /dev/null
@@ -0,0 +1,83 @@
+;;; css-mode-tests.el --- Test suite for CSS mode  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Simen Heggestøyl <simenheg@gmail.com>
+;; Keywords: internal
+
+;; This file is part of GNU Emacs.
+
+;; 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 <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'css-mode)
+(require 'ert)
+(require 'seq)
+
+(ert-deftest css-test-property-values ()
+  ;; The `float' property has a flat value list.
+  (should
+   (equal (sort (css--property-values "float") #'string-lessp)
+          '("left" "none" "right")))
+
+  ;; The `list-style' property refers to several other properties.
+  (should
+   (equal (sort (css--property-values "list-style") #'string-lessp)
+          (sort (seq-uniq
+                 (append (css--property-values "list-style-type")
+                         (css--property-values "list-style-position")
+                         (css--property-values "list-style-image")))
+                #'string-lessp)))
+
+  ;; The `position' property is tricky because it's also the name of a
+  ;; value class.
+  (should
+   (equal (sort (css--property-values "position") #'string-lessp)
+          '("absolute" "fixed" "relative" "static")))
+
+  ;; The `background-position' property should refer to the `position'
+  ;; value class, not the property of the same name.
+  (should
+   (equal (css--property-values "background-position")
+          (css--value-class-lookup 'position)))
+
+  ;; Check that the `color' property doesn't cause infinite recursion
+  ;; because it refers to the value class of the same name.
+  (should (= (length (css--property-values "color")) 18)))
+
+(ert-deftest css-test-property-value-cache ()
+  "Test that `css--property-value-cache' is in use."
+  (should-not (gethash "word-wrap" css--property-value-cache))
+  (let ((word-wrap-values (css--property-values "word-wrap")))
+    (should (equal (gethash "word-wrap" css--property-value-cache)
+                   word-wrap-values))))
+
+(ert-deftest css-test-property-values-no-duplicates ()
+  "Test that `css--property-values' returns no duplicates."
+  ;; The `flex' property is prone to duplicate values; if they aren't
+  ;; removed, it'll contain at least two instances of `auto'.
+  (should
+   (equal (sort (css--property-values "flex") #'string-lessp)
+          '("auto" "calc()" "content" "none"))))
+
+(ert-deftest css-test-value-class-lookup ()
+  (should
+   (equal (sort (css--value-class-lookup 'position) #'string-lessp)
+          '("bottom" "calc()" "center" "left" "right" "top"))))
+
+(provide 'css-mode-tests)
+;;; css-mode-tests.el ends here
similarity index 96%
rename from test/automated/reftex-tests.el
rename to test/lisp/textmodes/reftex-tests.el
index 0f1186d8a825cdc85fd9939bf539b923c57e31f9..12ec7f5a394dbad2da852f39fe8a59221a218fe5 100644 (file)
     (should (string= (reftex-format-citation entry "%l:%A:%y:%t %j %P %a")
                      "Foo13:Jane Roe:2013:Some Article Some Journal 1 Jane Roe, John Doe \\& Jane Taxpayer"))))
 
+
+;;; Autoload tests
+
+;; Test to check whether reftex autoloading mechanisms are working
+;; correctly.
+(ert-deftest reftex-autoload-auc ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'reftex-arg-label))
+  (should
+   (autoloadp
+    (symbol-function
+     'reftex-arg-label))))
+
+
 (provide 'reftex-tests)
 ;;; reftex-tests.el ends here.
diff --git a/test/lisp/url/url-auth-tests.el b/test/lisp/url/url-auth-tests.el
new file mode 100644 (file)
index 0000000..bc30f35
--- /dev/null
@@ -0,0 +1,255 @@
+;;; url-auth-tests.el --- Test suite for url-auth.
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; Author: Jarno Malmari <jarno@malmari.fi>
+
+;; 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Test HTTP authentication methods.
+
+;;; Code:
+
+(require 'ert)
+(require 'url-auth)
+
+(defvar url-auth-test-challenges nil
+  "List of challenges for testing.
+Each challenge is a plist.  Values are as presented by the
+server's WWW-Authenticate header field.")
+
+;; Set explicitly for easier modification for re-runs.
+(setq url-auth-test-challenges
+      (list
+       (list :qop "auth"
+             :nonce "uBr3+qkQBybTr/dKWkmpUqVO7SaEwWYzyTKO7g==$"
+             :uri "/random/path"
+             :method "GET"
+             :realm "Some test realm"
+             :cnonce "YWU4NDcxYWMxMDAxMjlkMjAwMDE4MjI5MDAwMGY4NGQ="
+             :nc "00000001"
+             :username "jytky"
+             :password "xi5Ac2HEfKt1lKKO05DCSqsK0u7hqqtsT"
+             :expected-ha1 "af521db3a83abd91262fead04fa31892"
+             :expected-ha2 "e490a6a147c79404b365d1f6059ddda5"
+             :expected-response "ecb6396e93b9e09e31f19264cfd8f854")
+       (list :nonce "a1be8a3065e00c5bf190ad499299aea5"
+             :opaque "d7c2a27230fc8c74bb6e06be8c9cd189"
+             :realm "The Test Realm"
+             :username "user"
+             :password "passwd"
+             :uri "/digest-auth/auth/user/passwd"
+             :method "GET"
+             :expected-ha1 "19c41161a8720edaeb7922ef8531137d"
+             :expected-ha2 "b44272ea65ee4af7fb26c5dba58f6863"
+             :expected-response "46c47a6d8e1fa95a3efcf49724af3fe7")
+       (list :nonce "servernonce"
+             :username "user"
+             :password "passwd"
+             :realm "The Test Realm 1"
+             :uri "/digest-auth/auth/user/passwd"
+             :method "GET"
+             :expected-ha1 "00f848f943c9a05dd06c932a7334f120"
+             :expected-ha2 "b44272ea65ee4af7fb26c5dba58f6863"
+             :expected-response "b8a48cdc9aa9e514509a5a5c53d4e8cf")
+       (list :nonce "servernonce"
+             :username "user"
+             :password "passwd"
+             :realm "The Test Realm 2"
+             :uri "/digest-auth/auth/user/passwd"
+             :method "GET"
+             :expected-ha1 "74d6abd3651d6b8260733d8a4c37ec1a"
+             :expected-ha2 "b44272ea65ee4af7fb26c5dba58f6863"
+             :expected-response "0d84884d967e04440efc77e9e2b5b561")))
+
+(ert-deftest url-auth-test-digest-create-key ()
+  "Check user credentials in their hashed form."
+  (dolist (challenge url-auth-test-challenges)
+    (let ((key (url-digest-auth-create-key (plist-get challenge :username)
+                                           (plist-get challenge :password)
+                                           (plist-get challenge :realm)
+                                           (plist-get challenge :method)
+                                           (plist-get challenge :uri))))
+      (should (= (length key) 2))
+      (should (string= (nth 0 key) (plist-get challenge :expected-ha1)))
+      (should (string= (nth 1 key) (plist-get challenge :expected-ha2)))
+      )))
+
+(ert-deftest url-auth-test-digest-auth-retrieve-cache ()
+  "Check how the entry point retrieves cached authentication.
+Essential is how realms and paths are matched."
+
+  (let* ((url-digest-auth-storage
+          '(("example.org:80"
+             ("/path/auth1" "auth1user" "key")
+             ("/path" "pathuser" "key")
+             ("/" "rootuser" "key")
+             ("realm1" "realm1user" "key")
+             ("realm2" "realm2user" "key")
+             ("/path/auth2" "auth2user" "key"))
+            ("example.org:443"
+             ("realm" "secure_user" "key"))
+            ("rootless.org:80"          ; no "/" entry for this on purpose
+             ("/path" "pathuser" "key")
+             ("realm" "realmuser" "key"))))
+         (attrs (list (cons "nonce" "servernonce")))
+         auth)
+
+    (dolist (row (list
+                  ;; If :expected-user is `nil' it indicates
+                  ;; authentication information shouldn't be found.
+
+                  ;; non-existent server
+                  (list :url "http://other.com/path"
+                        :realm nil :expected-user nil)
+
+                  ;; unmatched port
+                  (list :url "http://example.org:444/path"
+                        :realm nil :expected-user nil)
+
+                  ;; root, no realm
+                  (list :url "http://example.org/"
+                        :realm nil :expected-user "rootuser")
+
+                  ;; root, no realm, explicit port
+                  (list :url "http://example.org:80/"
+                        :realm nil :expected-user "rootuser")
+
+                  (list :url "http://example.org/unknown"
+                        :realm nil :expected-user "rootuser")
+
+                  ;; realm specified, overrides any path
+                  (list :url "http://example.org/"
+                        :realm "realm1" :expected-user "realm1user")
+
+                  ;; realm specified, overrides any path
+                  (list :url "http://example.org/"
+                        :realm "realm2" :expected-user "realm2user")
+
+                  ;; authentication determined by path
+                  (list :url "http://example.org/path/auth1/query"
+                        :realm nil :expected-user "auth1user")
+
+                  ;; /path shadows /path/auth2, hence pathuser is expected
+                  (list :url "http://example.org/path/auth2/query"
+                        :realm nil :expected-user "pathuser")
+
+                  (list :url "https://example.org/path"
+                        :realm nil :expected-user "secure_user")
+
+                  ;; not really secure user but using the same port
+                  (list :url "http://example.org:443/path"
+                        :realm nil :expected-user "secure_user")
+
+                  ;; preferring realm user over path, even though no
+                  ;; realm specified (not sure why)
+                  (list :url "http://rootless.org/"
+                        :realm nil :expected-user "realmuser")
+                  ;; second variant for the same case
+                  (list :url "http://rootless.org/unknown/path"
+                        :realm nil :expected-user "realmuser")
+
+                  ;; path match
+                  (list :url "http://rootless.org/path/query?q=a"
+                        :realm nil :expected-user "pathuser")
+
+                  ;; path match, realm match, prefer realm
+                  (list :url "http://rootless.org/path/query?q=a"
+                        :realm "realm" :expected-user "realmuser")
+                  ))
+      (setq auth (url-digest-auth (plist-get row :url)
+                                  nil nil
+                                  (plist-get row :realm) attrs))
+      (if (plist-get row :expected-user)
+          (progn (should auth)
+                 (should (string-match ".*username=\"\\(.*?\\)\".*" auth))
+                 (should (string= (match-string 1 auth)
+                                  (plist-get row :expected-user))))
+        (should-not auth)))))
+
+(ert-deftest url-auth-test-digest-auth ()
+  "Check common authorization string contents.
+Challenges with qop are not checked for response since a unique
+cnonce is used for generating them which is not mocked by the
+test and cannot be passed by arguments to `url-digest-auth'."
+  (dolist (challenge url-auth-test-challenges)
+    (let* ((attrs (append
+                   (list (cons "nonce" (plist-get challenge :nonce)))
+                   (if (plist-get challenge :qop)
+                       (list (cons "qop" (plist-get challenge :qop))))))
+           (url (concat "http://example.org" (plist-get challenge :uri)))
+           url-digest-auth-storage
+           auth)
+      ;; Add authentication info to cache so `url-digest-auth' can
+      ;; complete without prompting minibuffer input.
+      (setq url-digest-auth-storage
+            (list
+             (list "example.org:80"
+                   (cons (or (plist-get challenge :realm) "/")
+                         (cons (plist-get challenge :username)
+                               (url-digest-auth-create-key
+                                (plist-get challenge :username)
+                                (plist-get challenge :password)
+                                (plist-get challenge :realm)
+                                (plist-get challenge :method)
+                                (plist-get challenge :uri)))))))
+      (setq auth (url-digest-auth (url-generic-parse-url url) nil nil
+                                  (plist-get challenge :realm) attrs))
+      (should auth)
+      (should (string-prefix-p "Digest " auth))
+      (should (string-match ".*username=\"\\(.*?\\)\".*" auth))
+      (should (string= (match-string 1 auth)
+                       (plist-get challenge :username)))
+      (should (string-match ".*realm=\"\\(.*?\\)\".*" auth))
+      (should (string= (match-string 1 auth)
+                       (plist-get challenge :realm)))
+
+      (if (plist-member challenge :qop)
+          (progn
+            ;; We don't know these, just check that they exists.
+            (should (string-match-p ".*response=\".*?\".*" auth))
+            ;; url-digest-auth doesn't return these AFAICS.
+;;;            (should (string-match-p ".*nc=\".*?\".*" auth))
+;;;            (should (string-match-p ".*cnonce=\".*?\".*" auth))
+            )
+        (should (string-match ".*response=\"\\(.*?\\)\".*" auth))
+        (should (string= (match-string 1 auth)
+                         (plist-get challenge :expected-response))))
+      )))
+
+(ert-deftest url-auth-test-digest-auth-opaque ()
+  "Check that `opaque' value is added to result when presented by
+the server."
+  (let* ((url-digest-auth-storage
+          '(("example.org:80" ("/" "user" "key"))))
+         (attrs (list (cons "nonce" "anynonce")))
+         auth)
+    ;; Get authentication info from cache without `opaque'.
+    (setq auth (url-digest-auth "http://example.org/path" nil nil nil attrs))
+    (should auth)
+    (should-not (string-match-p "opaque=" auth))
+
+    ;; Add `opaque' to attributes.
+    (push (cons "opaque" "opaque-value") attrs)
+    (setq auth (url-digest-auth "http://example.org/path" nil nil nil attrs))
+    (should auth)
+    (should (string-match ".*opaque=\"\\(.*?\\)\".*" auth))
+    (should (string= (match-string 1 auth) "opaque-value"))))
+
+(provide 'url-auth-tests)
+;;; url-auth-tests.el ends here
similarity index 96%
rename from test/automated/vc-bzr.el
rename to test/lisp/vc/vc-bzr-tests.el
index 82721eeee4e3d673f8a486c196c7c9fc78729c3b..98d176ca1ee637ad8126dc7001494f019e8a8933 100644 (file)
@@ -25,6 +25,7 @@
 ;;; Code:
 
 (require 'ert)
+(require 'ert-x)
 (require 'vc-bzr)
 (require 'vc-dir)
 
           (while (vc-dir-busy)
             (sit-for 0.1))
           (vc-dir-mark-all-files t)
-          (let ((f (symbol-function 'y-or-n-p)))
-            (unwind-protect
-                (progn
-                  (fset 'y-or-n-p (lambda (prompt) t))
-                  (vc-next-action nil))
-              (fset 'y-or-n-p f)))
+          (ert-with-function-mocked y-or-n-p (lambda (_) t)
+            (vc-next-action nil))
           (should (get-buffer "*vc-log*")))
       (delete-directory homedir t))))
 
similarity index 75%
rename from test/automated/vc-tests.el
rename to test/lisp/vc/vc-tests.el
index 5042196f4252cb023dae3672069e31e6bef88106..ac10ce2337a3e8d9ca03adab9b159af154349d3e 100644 (file)
 (require 'ert)
 (require 'vc)
 
+(declare-function w32-application-type "w32proc")
+
 ;; The working horses.
 
 (defvar vc-test--cleanup-hook nil
@@ -117,7 +119,7 @@ Don't set it globally, the functions shall be let-bound.")
 
 (defun vc-test--revision-granularity-function (backend)
   "Run the `vc-revision-granularity' backend function."
-  (funcall (intern (downcase (format "vc-%s-revision-granularity" backend)))))
+  (vc-call-backend backend 'revision-granularity))
 
 (defun vc-test--create-repo-function (backend)
   "Run the `vc-create-repo' backend function.
@@ -201,19 +203,28 @@ For backends which dont support it, it is emulated."
       ;; Save exit.
       (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
 
-;; Why isn't there `vc-unregister'?
+;; FIXME: Why isn't there `vc-unregister'?
 (defun vc-test--unregister-function (backend file)
   "Run the `vc-unregister' backend function.
-For backends which dont support it, `vc-not-supported' is signalled."
-
-  (let ((symbol (intern (downcase (format "vc-%s-unregister" backend)))))
-    (if (functionp symbol)
-       (funcall symbol file)
-      ;; CVS, SVN, SCCS, SRC and Mtn are not supported.
-      (signal 'vc-not-supported (list 'unregister backend)))))
+For backends which don't support it, `vc-not-supported' is signalled."
+  ;; CVS, SVN, SCCS, SRC and Mtn are not supported, and will signal
+  ;; `vc-not-supported'.
+  (prog1
+      (vc-call-backend backend 'unregister file)
+    (vc-file-clearprops file)))
+
+(defmacro vc-test--run-maybe-unsupported-function (func &rest args)
+  "Run FUNC withs ARGS as arguments.
+Catch the `vc-not-supported' error."
+  `(let (err)
+    (condition-case err
+        (funcall ,func ,@args)
+      (vc-not-supported 'vc-not-supported)
+      (t (signal (car err) (cdr err))))))
 
 (defun vc-test--register (backend)
-  "Register and unregister a file."
+  "Register and unregister a file.
+This checks also `vc-backend' and `vc-responsible-backend'."
 
   (let ((vc-handled-backends `(,backend))
        (default-directory
@@ -232,32 +243,56 @@ For backends which dont support it, `vc-not-supported' is signalled."
          ;; Create empty repository.
          (make-directory default-directory)
          (vc-test--create-repo-function backend)
+          ;; For file oriented backends CVS, RCS and SVN the backend is
+          ;; returned, and the directory is registered already.
+          (should (if (vc-backend default-directory)
+                      (vc-registered default-directory)
+                    (not (vc-registered default-directory))))
+          (should (eq (vc-responsible-backend default-directory) backend))
 
          (let ((tmp-name1 (expand-file-name "foo" default-directory))
                (tmp-name2 "bla"))
            ;; Register files.  Check for it.
            (write-region "foo" nil tmp-name1 nil 'nomessage)
            (should (file-exists-p tmp-name1))
+            (should-not (vc-backend tmp-name1))
+            (should (eq (vc-responsible-backend tmp-name1) backend))
            (should-not (vc-registered tmp-name1))
+
            (write-region "bla" nil tmp-name2 nil 'nomessage)
            (should (file-exists-p tmp-name2))
+            (should-not (vc-backend tmp-name2))
+            (should (eq (vc-responsible-backend tmp-name2) backend))
            (should-not (vc-registered tmp-name2))
+
            (vc-register (list backend (list tmp-name1 tmp-name2)))
            (should (file-exists-p tmp-name1))
+            (should (eq (vc-backend tmp-name1) backend))
+            (should (eq (vc-responsible-backend tmp-name1) backend))
            (should (vc-registered tmp-name1))
+
            (should (file-exists-p tmp-name2))
+            (should (eq (vc-backend tmp-name2) backend))
+            (should (eq (vc-responsible-backend tmp-name2) backend))
            (should (vc-registered tmp-name2))
 
+            ;; `vc-backend' accepts also a list of files,
+            ;; `vc-responsible-backend' doesn't.
+            (should (vc-backend (list tmp-name1 tmp-name2)))
+
            ;; Unregister the files.
-           (condition-case err
-               (progn
-                 (vc-test--unregister-function backend tmp-name1)
-                 (should-not (vc-registered tmp-name1))
-                 (vc-test--unregister-function backend tmp-name2)
-                 (should-not (vc-registered tmp-name2)))
-             ;; CVS, SVN, SCCS, SRC and Mtn are not supported.
-             (vc-not-supported t))
-           ;; The files shall still exist.
+            (unless (eq (vc-test--run-maybe-unsupported-function
+                        'vc-test--unregister-function backend tmp-name1)
+                       'vc-not-supported)
+              (should-not (vc-backend tmp-name1))
+              (should-not (vc-registered tmp-name1)))
+            (unless (eq (vc-test--run-maybe-unsupported-function
+                        'vc-test--unregister-function backend tmp-name2)
+                       'vc-not-supported)
+              (should-not (vc-backend tmp-name2))
+              (should-not (vc-registered tmp-name2)))
+
+            ;; The files shall still exist.
            (should (file-exists-p tmp-name1))
            (should (file-exists-p tmp-name2))))
 
@@ -281,70 +316,42 @@ For backends which dont support it, `vc-not-supported' is signalled."
           'vc-test--cleanup-hook
           `(lambda () (delete-directory ,default-directory 'recursive)))
 
-         ;; Create empty repository.  Check repository state.
+         ;; Create empty repository.
          (make-directory default-directory)
          (vc-test--create-repo-function backend)
 
-         ;; nil: Hg Mtn RCS
-          ;; added: Git
-          ;; unregistered: CVS SCCS SRC
-         ;; up-to-date: Bzr SVN
-          (message "vc-state1 %s" (vc-state default-directory))
-         ;;(should (eq (vc-state default-directory)
-                     ;;(vc-state default-directory backend)))
-         (should (memq (vc-state default-directory)
-                       '(nil added unregistered up-to-date)))
-
          (let ((tmp-name (expand-file-name "foo" default-directory)))
-           ;; Check state of an empty file.
+           ;; Check state of a nonexistent file.
 
-           ;; nil: Hg Mtn SRC SVN
-            ;; added: Git
-           ;; unregistered: RCS SCCS
-           ;; up-to-date: Bzr CVS
             (message "vc-state2 %s" (vc-state tmp-name))
-           ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
-           (should (memq (vc-state tmp-name)
-                         '(nil added unregistered up-to-date)))
+           (should (null (vc-state tmp-name)))
 
            ;; Write a new file.  Check state.
            (write-region "foo" nil tmp-name nil 'nomessage)
 
-            ;; nil: Mtn
-            ;; added: Git
-            ;; unregistered: Hg RCS SCCS SRC SVN
-            ;; up-to-date: Bzr CVS
             (message "vc-state3 %s" (vc-state tmp-name))
-           ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
-           (should (memq (vc-state tmp-name)
-                         '(nil added unregistered up-to-date)))
+           (should (null (vc-state tmp-name)))
 
            ;; Register a file.  Check state.
            (vc-register
             (list backend (list (file-name-nondirectory tmp-name))))
 
-            ;; added: Git Mtn
-            ;; unregistered: Hg RCS SCCS SRC SVN
-            ;; up-to-date: Bzr CVS
+            ;; FIXME: nil is definitely wrong.
+           ;; nil: SRC
+            ;; added: Bzr CVS Git Hg Mtn SVN
+           ;; up-to-date: RCS SCCS
             (message "vc-state4 %s" (vc-state tmp-name))
-           ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
-           (should (memq (vc-state tmp-name)
-                          '(nil added unregistered up-to-date)))
+           (should (memq (vc-state tmp-name) '(nil added up-to-date)))
 
            ;; Unregister the file.  Check state.
-           (condition-case nil
-               (progn
-                 (vc-test--unregister-function backend tmp-name)
-
-                 ;; added: Git
-                 ;; unregistered: Hg RCS
-                 ;; unsupported: CVS Mtn SCCS SRC SVN
-                 ;; up-to-date: Bzr
-                  (message "vc-state5 %s" (vc-state tmp-name))
-                 ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
-                 (should (memq (vc-state tmp-name)
-                               '(nil added unregistered up-to-date))))
-             (vc-not-supported (message "vc-state5 unsupported")))))
+            (if (eq (vc-test--run-maybe-unsupported-function
+                     'vc-test--unregister-function backend tmp-name)
+                    'vc-not-supported)
+                (message "vc-state5 unsupported")
+              ;; nil: Bzr Git Hg RCS
+              ;; unsupported: CVS Mtn SCCS SRC SVN
+              (message "vc-state5 %s" (vc-state tmp-name))
+              (should (null (vc-state tmp-name))))))
 
       ;; Save exit.
       (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
@@ -371,60 +378,51 @@ For backends which dont support it, `vc-not-supported' is signalled."
          (make-directory default-directory)
          (vc-test--create-repo-function backend)
 
-         ;; nil: CVS Git Mtn RCS SCCS
-         ;; "0": Bzr Hg SRC SVN
+          ;; FIXME: Is the value for SVN correct?
+         ;; nil: Bzr CVS Git Hg Mtn RCS SCCS SRC
+         ;; "0": SVN
           (message
            "vc-working-revision1 %s" (vc-working-revision default-directory))
-         ;;(should (eq (vc-working-revision default-directory)
-                     ;;(vc-working-revision default-directory backend)))
-         (should (member (vc-working-revision default-directory) '(nil "0")))
+          (should (member (vc-working-revision default-directory) '(nil "0")))
 
          (let ((tmp-name (expand-file-name "foo" default-directory)))
            ;; Check initial working revision, should be nil until
             ;; it's registered.
 
-           ;; nil: CVS Git Mtn RCS SCCS SVN
-           ;; "0": Bzr Hg SRC
             (message "vc-working-revision2 %s" (vc-working-revision tmp-name))
-           ;;(should (eq (vc-working-revision tmp-name)
-                       ;;(vc-working-revision tmp-name backend)))
-           (should (member (vc-working-revision tmp-name) '(nil "0")))
+            (should-not (vc-working-revision tmp-name))
 
            ;; Write a new file.  Check working revision.
            (write-region "foo" nil tmp-name nil 'nomessage)
 
-           ;; nil: CVS Git Mtn RCS SCCS SVN
-           ;; "0": Bzr Hg SRC
             (message "vc-working-revision3 %s" (vc-working-revision tmp-name))
-           ;;(should (eq (vc-working-revision tmp-name)
-                       ;;(vc-working-revision tmp-name backend)))
-           (should (member (vc-working-revision tmp-name) '(nil "0")))
+            (should-not (vc-working-revision tmp-name))
 
            ;; Register a file.  Check working revision.
            (vc-register
             (list backend (list (file-name-nondirectory tmp-name))))
 
-           ;; nil: Mtn Git RCS SCCS
+            ;; XXX: nil is fine, at least in Git's case, because
+           ;; `vc-register' only makes the file `added' in this case.
+           ;; nil: Git Mtn
            ;; "0": Bzr CVS Hg SRC SVN
+           ;; "1.1": RCS SCCS
             (message "vc-working-revision4 %s" (vc-working-revision tmp-name))
-           ;;(should (eq (vc-working-revision tmp-name)
-                       ;;(vc-working-revision tmp-name backend)))
-           (should (member (vc-working-revision tmp-name) '(nil "0")))
+            (should (member (vc-working-revision tmp-name) '(nil "0" "1.1")))
+
+            ;; TODO: Call `vc-checkin', and check the resulting
+            ;; working revision.  None of the return values should be
+            ;; nil then.
 
            ;; Unregister the file.  Check working revision.
-           (condition-case nil
-               (progn
-                 (vc-test--unregister-function backend tmp-name)
-
-                 ;; nil: Git RCS
-                 ;; "0": Bzr Hg
-                 ;; unsupported: CVS Mtn SCCS SRC SVN
-                  (message
-                   "vc-working-revision5 %s" (vc-working-revision tmp-name))
-                 ;;(should (eq (vc-working-revision tmp-name)
-                             ;;(vc-working-revision tmp-name backend)))
-                 (should (member (vc-working-revision tmp-name) '(nil "0"))))
-             (vc-not-supported (message "vc-working-revision5 unsupported")))))
+            (if (eq (vc-test--run-maybe-unsupported-function
+                     'vc-test--unregister-function backend tmp-name)
+                    'vc-not-supported)
+                (message "vc-working-revision5 unsupported")
+              ;; nil: Bzr Git Hg RCS
+              ;; unsupported: CVS Mtn SCCS SRC SVN
+              (message "vc-working-revision5 %s" (vc-working-revision tmp-name))
+              (should-not (vc-working-revision tmp-name)))))
 
       ;; Save exit.
       (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
@@ -451,9 +449,8 @@ For backends which dont support it, `vc-not-supported' is signalled."
          (vc-test--create-repo-function backend)
 
          ;; Surprisingly, none of the backends returns 'announce.
-         ;; nil: RCS
           ;; implicit: Bzr CVS Git Hg Mtn SRC SVN
-          ;; locking: SCCS
+          ;; locking: RCS SCCS
           (message
            "vc-checkout-model1 %s"
            (vc-checkout-model backend default-directory))
@@ -461,11 +458,10 @@ For backends which dont support it, `vc-not-supported' is signalled."
                        '(announce implicit locking)))
 
          (let ((tmp-name (expand-file-name "foo" default-directory)))
-           ;; Check checkout model of an empty file.
+           ;; Check checkout model of a nonexistent file.
 
-           ;; nil: RCS
            ;; implicit: Bzr CVS Git Hg Mtn SRC SVN
-           ;; locking: SCCS
+           ;; locking: RCS SCCS
             (message
              "vc-checkout-model2 %s" (vc-checkout-model backend tmp-name))
            (should (memq (vc-checkout-model backend tmp-name)
@@ -474,9 +470,8 @@ For backends which dont support it, `vc-not-supported' is signalled."
            ;; Write a new file.  Check checkout model.
            (write-region "foo" nil tmp-name nil 'nomessage)
 
-           ;; nil: RCS
            ;; implicit: Bzr CVS Git Hg Mtn SRC SVN
-           ;; locking: SCCS
+           ;; locking: RCS SCCS
             (message
              "vc-checkout-model3 %s" (vc-checkout-model backend tmp-name))
            (should (memq (vc-checkout-model backend tmp-name)
@@ -486,27 +481,25 @@ For backends which dont support it, `vc-not-supported' is signalled."
            (vc-register
             (list backend (list (file-name-nondirectory tmp-name))))
 
-           ;; nil: RCS
            ;; implicit: Bzr CVS Git Hg Mtn SRC SVN
-           ;; locking: SCCS
+           ;; locking: RCS SCCS
             (message
              "vc-checkout-model4 %s" (vc-checkout-model backend tmp-name))
            (should (memq (vc-checkout-model backend tmp-name)
                          '(announce implicit locking)))
 
            ;; Unregister the file.  Check checkout model.
-           (condition-case nil
-               (progn
-                 (vc-test--unregister-function backend tmp-name)
-
-                 ;; nil: RCS
-                 ;; implicit: Bzr Git Hg
-                 ;; unsupported: CVS Mtn SCCS SRC SVN
-                  (message
-                   "vc-checkout-model5 %s" (vc-checkout-model backend tmp-name))
-                 (should (memq (vc-checkout-model backend tmp-name)
-                               '(announce implicit locking))))
-             (vc-not-supported (message "vc-checkout-model5 unsupported")))))
+            (if (eq (vc-test--run-maybe-unsupported-function
+                     'vc-test--unregister-function backend tmp-name)
+                    'vc-not-supported)
+                (message "vc-checkout-model5 unsupported")
+              ;; implicit: Bzr Git Hg
+              ;; locking: RCS
+              ;; unsupported: CVS Mtn SCCS SRC SVN
+              (message
+               "vc-checkout-model5 %s" (vc-checkout-model backend tmp-name))
+              (should (memq (vc-checkout-model backend tmp-name)
+                            '(announce implicit locking))))))
 
       ;; Save exit.
       (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
@@ -605,8 +598,6 @@ For backends which dont support it, `vc-not-supported' is signalled."
            ,(intern (format "vc-test-%s04-checkout-model" backend-string)) ()
          ,(format "Check `vc-checkout-model' for the %s backend."
                   backend-string)
-         ;; FIXME make this pass.
-         :expected-result ,(if (equal backend 'RCS) :failed :passed)
          (skip-unless
           (ert-test-passed-p
            (ert-test-most-recent-result
diff --git a/test/make-test-deps.emacs-lisp b/test/make-test-deps.emacs-lisp
new file mode 100644 (file)
index 0000000..9edeef3
--- /dev/null
@@ -0,0 +1,98 @@
+;; -*- emacs-lisp -*-
+
+;; Copyright (C) 2015-2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file generates dependencies between test files and the files
+;; that they test.
+
+;; It has an .emacs-lisp extension because it makes the Makefile easier!
+
+(require 'seq)
+
+(defun make-test-deps (src-dir)
+  (let ((src-dir (file-truename src-dir)))
+    (message
+     "%s"
+     (concat
+      (make-test-deps-lisp src-dir)
+      (make-test-deps-src src-dir)))))
+
+(defun make-test-deps-lisp (src-dir)
+  (mapconcat
+   (lambda (file-without-suffix)
+     (format "./%s-tests.log: %s/../%s.el\n"
+             file-without-suffix
+             src-dir
+             file-without-suffix))
+   (make-test-test-files src-dir "lisp") ""))
+
+(defun make-test-deps-src (src-dir)
+  (mapconcat
+   (lambda (file-without-suffix)
+     (format "./%s-tests.log: %s/../%s.c\n"
+             file-without-suffix
+             src-dir
+             file-without-suffix))
+   (make-test-test-files src-dir "src") ""))
+
+(defun make-test-test-files (src-dir sub-src-dir)
+  (make-test-munge-files
+   src-dir
+   (directory-files-recursively
+    (concat src-dir "/"  sub-src-dir)
+    ".*-tests.el$")))
+
+(defun make-test-munge-files (src-dir files)
+  (make-test-sans-suffix
+   (make-test-de-stem
+    src-dir
+    (make-test-no-legacy
+     (make-test-no-test-dir
+      (make-test-no-resources
+       files))))))
+
+(defun make-test-sans-suffix (files)
+  (mapcar
+   (lambda (file)
+     (substring file 0 -9))
+   files))
+
+(defun make-test-de-stem (stem files)
+  (mapcar
+   (lambda (file)
+     (substring
+      file
+      (+ 1 (length stem))))
+   files))
+
+(defun make-test-no-legacy (list)
+  (make-test-remove list "legacy/"))
+
+(defun make-test-no-resources (list)
+  (make-test-remove list "-resources/"))
+
+(defun make-test-no-test-dir (list)
+  (make-test-remove list "-tests/"))
+
+(defun make-test-remove (list match)
+  (seq-remove
+   (lambda (file)
+     (string-match-p match file))
+   list))
similarity index 100%
rename from test/biditest.el
rename to test/manual/biditest.el
similarity index 98%
rename from test/etags/Makefile
rename to test/manual/etags/Makefile
index 6e335711ff2525932a53422a3d11473aa6ed2900..07ad0f46416ed937820564e0bd49d691eff20856 100644 (file)
@@ -33,8 +33,8 @@ SRCS=${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
      ${PROLSRC} ${PYTSRC} ${RBSRC} ${TEXSRC} ${YSRC}
 NONSRCS=./f-src/entry.strange ./erl-src/lists.erl ./cp-src/clheir.hpp.gz
 
-ETAGS_PROG=../../lib-src/etags
-CTAGS_PROG=../../lib-src/ctags
+ETAGS_PROG=../../../lib-src/etags
+CTAGS_PROG=../../../lib-src/ctags
 
 REGEX=/[ \t]*DEFVAR_[A-Z_ \t\n(]+"\([^"]+\)"/
 xx="this line is here because of a fontlock bug
similarity index 96%
rename from test/etags/cp-src/functions.cpp
rename to test/manual/etags/cp-src/functions.cpp
index fb546ed4de81dcad6dd2fac2a2dc17909d961b09..764498d4084f0a228f6480ff986ab4b3282b8307 100644 (file)
@@ -1,7 +1,7 @@
 #include "main.hpp"
 #pragma ident  "@(#)functions.cpp      1.0     98/11/12 (c) Rupak Rathore"
 
-// Constructor default argument initialises to today's values
+// Constructor default argument initializes to today's values
 void Date::setDate ( int d , int m , int y ){
        time_t t;
        struct tm * ptm;
@@ -9,9 +9,9 @@ void Date::setDate ( int d , int m , int y ){
        if ( date != NULL )
                delete date;
        date = NULL;
-       if ( d == 0 && m == 0 && y == 0 ) // explicity called or default constructor hence leave it.
+       if ( d == 0 && m == 0 && y == 0 ) //Explicitly called or default constructor hence leave it.
                return;
-       if ( d < 0 && m < 0 && d < 0 ) // Special instruction to intialise to today's value
+       if ( d < 0 && m < 0 && d < 0 ) //Special instruction to initialize to today's value
                d=m=y=0;
        date = new tm;
        ptm=localtime ( &t ) ;
similarity index 99%
rename from test/etags/html-src/software.html
rename to test/manual/etags/html-src/software.html
index b5de1e6d686756a8f3be30caf9ac482f79f9add2..dbf822819933cb52109b91e83cb78da0243c13a4 100644 (file)
@@ -123,7 +123,7 @@ HREF="ftp://fly.cnuce.cnr.it/pub/software/octave/leasqr/">published</A> it.
 Since then, the original authors Richard I. Shrager, A.Jutan, Ray Muzic, and
 Sean Brennan agreed to put it under the <A
 HREF="http://www.gnu.org/licenses/gpl.html">GPL</A>.  Matthias Jueschke tested
-the program using a non-linear optimisation <A
+the program using a non-linear optimization <A
 HREF="http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml">test suite</A>,
 and was satisfied with the results.
 
diff --git a/test/manual/etags/ruby-src/test1.ruby b/test/manual/etags/ruby-src/test1.ruby
new file mode 100644 (file)
index 0000000..26b7d53
--- /dev/null
@@ -0,0 +1,29 @@
+class A
+ def a()
+  super(" do ")
+ end
+ def b()
+ end
+end
+
+module A
+  class B
+    ABC = 4
+
+    def foo!
+    end
+
+    def self._bar?(abc)
+    end
+
+    class << self
+      def qux=(tee)
+      end
+    end
+  end
+end
+
+A::Constant = 5
+
+# def foo_in_comment
+# end
similarity index 100%
rename from test/indent/js.js
rename to test/manual/indent/js.js
similarity index 100%
rename from test/rmailmm.el
rename to test/manual/rmailmm.el
similarity index 93%
rename from test/automated/finalizer-tests.el
rename to test/src/alloc-tests.el
index 5aa35f4a2ac00fe93b7a9640e593c72d5daef5da..97c6b4f807091c3cb04b96c840a11887400c0c8c 100644 (file)
@@ -1,4 +1,4 @@
-;;; finalizer-tests.el --- Finalizer tests -*- lexical-binding: t -*-
+;;; alloc-tests.el --- alloc tests -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
 
similarity index 92%
rename from test/automated/zlib-tests.el
rename to test/src/decompress-tests.el
index 7ece58d97c904f2df92814adee0411165bf0c56a..f0264ec548deb7edfe6b2b11b7b046d4cc717f30 100644 (file)
@@ -1,4 +1,4 @@
-;;; zlib-tests.el --- Test suite for zlib.
+;;; decompress-tests.el --- Test suite for decompress.
 
 ;; Copyright (C) 2013-2016 Free Software Foundation, Inc.
 
@@ -40,6 +40,6 @@
               (buffer-string))
             "foo\n"))))
 
-(provide 'zlib-tests)
+(provide 'decompress-tests)
 
-;;; zlib-tests.el ends here.
+;;; decompress-tests.el ends here.
similarity index 79%
rename from test/automated/fns-tests.el
rename to test/src/fns-tests.el
index 762f7bdd94fcd504d1094846fb2f294b0296afef..848589692ea25a2bc77dd59a2428e8a29d5fd446 100644 (file)
              (string-collate-lessp
               a b (if (eq system-type 'windows-nt) "enu_USA" "en_US.UTF-8")))))
     '("Adrian" "Ævar" "Agustín" "Eli"))))
+
+(ert-deftest fns-tests-string-version-lessp ()
+  (should (string-version-lessp "foo2.png" "foo12.png"))
+  (should (not (string-version-lessp "foo12.png" "foo2.png")))
+  (should (string-version-lessp "foo12.png" "foo20000.png"))
+  (should (not (string-version-lessp "foo20000.png" "foo12.png")))
+  (should (string-version-lessp "foo.png" "foo2.png"))
+  (should (not (string-version-lessp "foo2.png" "foo.png")))
+  (should (equal (sort '("foo12.png" "foo2.png" "foo1.png")
+                       'string-version-lessp)
+                 '("foo1.png" "foo2.png" "foo12.png")))
+  (should (string-version-lessp "foo2" "foo1234"))
+  (should (not (string-version-lessp "foo1234" "foo2")))
+  (should (string-version-lessp "foo.png" "foo2"))
+  (should (string-version-lessp "foo1.25.5.png" "foo1.125.5"))
+  (should (string-version-lessp "2" "1245"))
+  (should (not (string-version-lessp "1245" "2"))))
+
+(ert-deftest fns-tests-func-arity ()
+  (should (equal (func-arity 'car) '(1 . 1)))
+  (should (equal (func-arity 'caar) '(1 . 1)))
+  (should (equal (func-arity 'format) '(1 . many)))
+  (require 'info)
+  (should (equal (func-arity 'Info-goto-node) '(1 . 3)))
+  (should (equal (func-arity (lambda (&rest x))) '(0 . many)))
+  (should (equal (func-arity (eval (lambda (x &optional y)) nil)) '(1 . 2)))
+  (should (equal (func-arity (eval (lambda (x &optional y)) t)) '(1 . 2)))
+  (should (equal (func-arity 'let) '(1 . unevalled))))
+
+(ert-deftest fns-tests-hash-buffer ()
+  (should (equal (sha1 "foo") "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"))
+  (should (equal (with-temp-buffer
+                   (insert "foo")
+                   (buffer-hash))
+                 (sha1 "foo")))
+  ;; This tests whether the presence of a gap in the middle of the
+  ;; buffer is handled correctly.
+  (should (equal (with-temp-buffer
+                   (insert "foo")
+                   (goto-char 2)
+                   (insert " ")
+                   (backward-delete-char 1)
+                   (buffer-hash))
+                 (sha1 "foo"))))
diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el
new file mode 100644 (file)
index 0000000..1a82d13
--- /dev/null
@@ -0,0 +1,107 @@
+;;; lread-tests.el --- tests for lread.c -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Philipp Stephani <phst@google.com>
+
+;; This file is part of GNU Emacs.
+
+;; 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 <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Unit tests for code in src/lread.c.
+
+;;; Code:
+
+(ert-deftest lread-char-number ()
+  (should (equal (read "?\\N{U+A817}") #xA817)))
+
+(ert-deftest lread-char-name-1 ()
+  (should (equal (read "?\\N{SYLOTI  NAGRI LETTER \n DHO}")
+                 #xA817)))
+(ert-deftest lread-char-name-2 ()
+  (should (equal (read "?\\N{BED}") #x1F6CF)))
+(ert-deftest lread-char-name-3 ()
+  (should (equal (read "?\\N{U+BED}") #xBED)))
+(ert-deftest lread-char-name-4 ()
+  (should (equal (read "?\\N{VARIATION SELECTOR-1}") #xFE00)))
+(ert-deftest lread-char-name-5 ()
+  (should (equal (read "?\\N{VARIATION SELECTOR-16}") #xFE0F)))
+(ert-deftest lread-char-name-6 ()
+  (should (equal (read "?\\N{VARIATION SELECTOR-17}") #xE0100)))
+(ert-deftest lread-char-name-7 ()
+  (should (equal (read "?\\N{VARIATION SELECTOR-256}") #xE01EF)))
+(ert-deftest lread-char-name-8 ()
+  (should (equal (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-F900}") #xF900)))
+(ert-deftest lread-char-name-9 ()
+  (should (equal (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-FAD9}") #xFAD9)))
+(ert-deftest lread-char-name-10 ()
+  (should (equal (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-2F800}") #x2F800)))
+(ert-deftest lread-char-name-11 ()
+  (should (equal (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-2FA1D}") #x2FA1D)))
+
+(ert-deftest lread-char-invalid-number ()
+  (should-error (read "?\\N{U+110000}") :type 'invalid-read-syntax))
+
+(ert-deftest lread-char-invalid-name-1 ()
+  (should-error (read "?\\N{DOES NOT EXIST}")) :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-2 ()
+  (should-error (read "?\\N{VARIATION SELECTOR-0}")) :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-3 ()
+  (should-error (read "?\\N{VARIATION SELECTOR-257}"))
+  :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-4 ()
+  (should-error (read "?\\N{VARIATION SELECTOR--0}"))
+  :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-5 ()
+  (should-error (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-F8FF}"))
+  :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-6 ()
+  (should-error (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-FADA}"))
+  :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-7 ()
+  (should-error (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-2F7FF}"))
+  :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-8 ()
+  (should-error (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-2FA1E}"))
+  :type 'invalid-read-syntax)
+
+(ert-deftest lread-char-non-ascii-name ()
+  (should-error (read "?\\N{LATIN CAPITAL LETTER Ø}")
+                :type 'invalid-read-syntax))
+
+(ert-deftest lread-char-empty-name ()
+  (should-error (read "?\\N{}") :type 'invalid-read-syntax))
+
+(ert-deftest lread-char-surrogate-1 ()
+  (should-error (read "?\\N{U+D800}") :type 'invalid-read-syntax))
+(ert-deftest lread-char-surrogate-2 ()
+  (should-error (read "?\\N{U+D801}") :type 'invalid-read-syntax))
+(ert-deftest lread-char-surrogate-3 ()
+  (should-error (read "?\\N{U+Dffe}") :type 'invalid-read-syntax))
+(ert-deftest lread-char-surrogate-4 ()
+  (should-error (read "?\\N{U+DFFF}") :type 'invalid-read-syntax))
+
+(ert-deftest lread-string-char-number-1 ()
+  (should (equal (read "\"a\\N{U+A817}b\"") "a\uA817b")))
+(ert-deftest lread-string-char-number-2 ()
+  (should-error (read "?\\N{0.5}") :type 'invalid-read-syntax))
+(ert-deftest lread-string-char-number-3 ()
+  (should-error (read "?\\N{U+-0}") :type 'invalid-read-syntax))
+
+(ert-deftest lread-string-char-name ()
+  (should (equal (read "\"a\\N{SYLOTI NAGRI  LETTER DHO}b\"") "a\uA817b")))
+
+;;; lread-tests.el ends here