emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 52beda9 3/4: Merge branch 'master' of git.sv.gnu.or


From: Kenichi Handa
Subject: [Emacs-diffs] master 52beda9 3/4: Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
Date: Mon, 05 Oct 2015 14:00:20 +0000

branch: master
commit 52beda922d2cb523a03661bf74b8678c8b45e440
Merge: 94ed516 1ac5a9c
Author: K. Handa <address@hidden>
Commit: K. Handa <address@hidden>

    Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
---
 .gitattributes                                  |    4 +
 CONTRIBUTE                                      |   12 +-
 ChangeLog.2                                     | 1620 +++++++++++++++++++--
 INSTALL.REPO                                    |    2 +-
 Makefile.in                                     |    4 +-
 admin/FOR-RELEASE                               |   22 +-
 admin/MAINTAINERS                               |  686 ++++++++-
 admin/README                                    |    2 +-
 admin/authors.el                                |    2 +-
 admin/charsets/compact.awk                      |    3 +-
 admin/charsets/eucjp-ms.awk                     |    3 +-
 admin/charsets/gb180302.awk                     |    5 +-
 admin/charsets/gb180304.awk                     |    5 +-
 admin/coccinelle/vector_contents.cocci          |    2 +-
 admin/make-emacs                                |    2 +-
 admin/make-tarball.txt                          |    8 +-
 admin/notes/bugtracker                          |   16 +-
 admin/notes/copyright                           |    2 +-
 admin/notes/elpa                                |    2 +-
 admin/notes/git-workflow                        |   10 +-
 admin/notes/hydra                               |   10 +-
 admin/notes/multi-tty                           |  160 +-
 admin/notes/newfile                             |    2 +-
 admin/notes/repo                                |    8 +-
 admin/notes/unicode                             |    6 +-
 admin/quick-install-emacs                       |   14 +-
 autogen.sh                                      |   16 +-
 build-aux/gitlog-to-changelog                   |    2 +-
 configure.ac                                    |    8 +-
 doc/emacs/abbrevs.texi                          |    6 +-
 doc/emacs/ack.texi                              |   39 +-
 doc/emacs/anti.texi                             |    4 +-
 doc/emacs/arevert-xtra.texi                     |    4 +-
 doc/emacs/basic.texi                            |    7 +-
 doc/emacs/buffers.texi                          |    4 +-
 doc/emacs/building.texi                         |   14 +-
 doc/emacs/cal-xtra.texi                         |    4 +-
 doc/emacs/calendar.texi                         |   32 +-
 doc/emacs/cmdargs.texi                          |   16 +-
 doc/emacs/commands.texi                         |    2 +-
 doc/emacs/custom.texi                           |   43 +-
 doc/emacs/dired.texi                            |   26 +-
 doc/emacs/display.texi                          |   74 +-
 doc/emacs/emacs.texi                            |   22 +-
 doc/emacs/emerge-xtra.texi                      |    4 +-
 doc/emacs/entering.texi                         |    4 +-
 doc/emacs/files.texi                            |   38 +-
 doc/emacs/fixit.texi                            |    4 +-
 doc/emacs/fortran-xtra.texi                     |   14 +-
 doc/emacs/frames.texi                           |   30 +-
 doc/emacs/glossary.texi                         |   14 +-
 doc/emacs/help.texi                             |    5 +-
 doc/emacs/indent.texi                           |    6 +-
 doc/emacs/killing.texi                          |   38 +-
 doc/emacs/kmacro.texi                           |    8 +-
 doc/emacs/macos.texi                            |    6 +-
 doc/emacs/maintaining.texi                      |   52 +-
 doc/emacs/mark.texi                             |    6 +-
 doc/emacs/mini.texi                             |   23 +-
 doc/emacs/misc.texi                             |   38 +-
 doc/emacs/modes.texi                            |    5 +-
 doc/emacs/msdos-xtra.texi                       |    2 +-
 doc/emacs/mule.texi                             |   22 +-
 doc/emacs/package.texi                          |    4 +-
 doc/emacs/picture-xtra.texi                     |    8 +-
 doc/emacs/programs.texi                         |   27 +-
 doc/emacs/regs.texi                             |    6 +-
 doc/emacs/rmail.texi                            |   16 +-
 doc/emacs/screen.texi                           |   12 +-
 doc/emacs/search.texi                           |   12 +-
 doc/emacs/sending.texi                          |   10 +-
 doc/emacs/text.texi                             |   30 +-
 doc/emacs/trouble.texi                          |   24 +-
 doc/emacs/vc1-xtra.texi                         |    2 +-
 doc/emacs/windows.texi                          |   10 +-
 doc/emacs/xresources.texi                       |   14 +-
 doc/lispintro/emacs-lisp-intro.texi             |  354 +++---
 doc/lispref/abbrevs.texi                        |    6 +-
 doc/lispref/anti.texi                           |    4 +-
 doc/lispref/back.texi                           |    2 +-
 doc/lispref/backups.texi                        |    2 +-
 doc/lispref/buffers.texi                        |    8 +-
 doc/lispref/commands.texi                       |   18 +-
 doc/lispref/compile.texi                        |    6 +-
 doc/lispref/control.texi                        |   14 +-
 doc/lispref/customize.texi                      |   16 +-
 doc/lispref/debugging.texi                      |    4 +-
 doc/lispref/display.texi                        |  115 +-
 doc/lispref/edebug.texi                         |   42 +-
 doc/lispref/elisp.texi                          |   14 +-
 doc/lispref/eval.texi                           |   10 +-
 doc/lispref/files.texi                          |   32 +-
 doc/lispref/frames.texi                         |  114 +-
 doc/lispref/functions.texi                      |   18 +-
 doc/lispref/hash.texi                           |   26 +-
 doc/lispref/help.texi                           |   34 +-
 doc/lispref/hooks.texi                          |    2 +-
 doc/lispref/internals.texi                      |    6 +-
 doc/lispref/intro.texi                          |    8 +-
 doc/lispref/keymaps.texi                        |   52 +-
 doc/lispref/lay-flat.texi                       |    4 +-
 doc/lispref/lists.texi                          |   14 +-
 doc/lispref/loading.texi                        |    6 +-
 doc/lispref/macros.texi                         |    6 +-
 doc/lispref/markers.texi                        |   14 +-
 doc/lispref/minibuf.texi                        |   12 +-
 doc/lispref/modes.texi                          |   61 +-
 doc/lispref/nonascii.texi                       |   10 +-
 doc/lispref/numbers.texi                        |   38 +-
 doc/lispref/objects.texi                        |   32 +-
 doc/lispref/os.texi                             |   35 +-
 doc/lispref/package.texi                        |    2 +-
 doc/lispref/positions.texi                      |   16 +-
 doc/lispref/processes.texi                      |   42 +-
 doc/lispref/searching.texi                      |   10 +-
 doc/lispref/sequences.texi                      |   31 +-
 doc/lispref/streams.texi                        |    6 +-
 doc/lispref/strings.texi                        |   12 +-
 doc/lispref/symbols.texi                        |    4 +-
 doc/lispref/syntax.texi                         |   27 +-
 doc/lispref/text.texi                           |   72 +-
 doc/lispref/tips.texi                           |    8 +-
 doc/lispref/variables.texi                      |   35 +-
 doc/lispref/windows.texi                        |   50 +-
 doc/misc/calc.texi                              |   11 +-
 doc/misc/cc-mode.texi                           |    2 +-
 doc/misc/ediff.texi                             |    2 +-
 doc/misc/efaq.texi                              |    4 +-
 doc/misc/gnus-faq.texi                          |    2 +-
 doc/misc/reftex.texi                            |    3 +
 doc/misc/texinfo.tex                            | 1193 ++++++++++-----
 doc/misc/tramp.texi                             |    2 +-
 doc/misc/url.texi                               |    2 +-
 etc/AUTHORS                                     |    2 +-
 etc/NEWS                                        |   28 +-
 etc/PROBLEMS                                    |    8 +
 etc/emacs-buffer.gdb                            |   24 +-
 etc/images/README                               |    7 +
 etc/images/connect.pbm                          |  Bin 0 -> 81 bytes
 etc/images/custom/down-pushed.pbm               |    3 +
 etc/images/custom/down.pbm                      |    3 +
 etc/images/custom/right-pushed.pbm              |    3 +
 etc/images/custom/right.pbm                     |    3 +
 etc/images/describe.pbm                         |  Bin 0 -> 81 bytes
 etc/images/disconnect.pbm                       |  Bin 0 -> 81 bytes
 etc/images/ezimage/bits.pbm                     |    3 +
 etc/images/ezimage/bitsbang.pbm                 |    3 +
 etc/images/ezimage/box-minus.pbm                |    3 +
 etc/images/ezimage/box-plus.pbm                 |    3 +
 etc/images/ezimage/box.pbm                      |  Bin 0 -> 54 bytes
 etc/images/ezimage/checkmark.pbm                |    3 +
 etc/images/ezimage/dir-minus.pbm                |  Bin 0 -> 54 bytes
 etc/images/ezimage/dir-plus.pbm                 |  Bin 0 -> 54 bytes
 etc/images/ezimage/dir.pbm                      |  Bin 0 -> 54 bytes
 etc/images/ezimage/doc-minus.pbm                |    3 +
 etc/images/ezimage/doc-plus.pbm                 |    3 +
 etc/images/ezimage/doc.pbm                      |    3 +
 etc/images/ezimage/info.pbm                     |    3 +
 etc/images/ezimage/key.pbm                      |    3 +
 etc/images/ezimage/label.pbm                    |    3 +
 etc/images/ezimage/lock.pbm                     |    3 +
 etc/images/ezimage/mail.pbm                     |  Bin 0 -> 54 bytes
 etc/images/ezimage/page-minus.pbm               |  Bin 0 -> 54 bytes
 etc/images/ezimage/page-plus.pbm                |  Bin 0 -> 54 bytes
 etc/images/ezimage/page.pbm                     |  Bin 0 -> 54 bytes
 etc/images/ezimage/tag-gt.pbm                   |    3 +
 etc/images/ezimage/tag-minus.pbm                |  Bin 0 -> 54 bytes
 etc/images/ezimage/tag-plus.pbm                 |  Bin 0 -> 54 bytes
 etc/images/ezimage/tag-type.pbm                 |  Bin 0 -> 54 bytes
 etc/images/ezimage/tag-v.pbm                    |  Bin 0 -> 54 bytes
 etc/images/ezimage/tag.pbm                      |  Bin 0 -> 54 bytes
 etc/images/ezimage/unlock.pbm                   |    3 +
 etc/images/gnus/important.pbm                   |  Bin 0 -> 81 bytes
 etc/images/gnus/mail-send.pbm                   |    3 +
 etc/images/gnus/receipt.pbm                     |    3 +
 etc/images/gnus/toggle-subscription.pbm         |  Bin 0 -> 81 bytes
 etc/images/gnus/unimportant.pbm                 |  Bin 0 -> 81 bytes
 etc/images/gud/all.pbm                          |  Bin 0 -> 81 bytes
 etc/images/gud/rcont.pbm                        |    3 +
 etc/images/gud/recstart.pbm                     |    3 +
 etc/images/gud/recstop.pbm                      |    3 +
 etc/images/gud/rfinish.pbm                      |    3 +
 etc/images/gud/rnext.pbm                        |    3 +
 etc/images/gud/rnexti.pbm                       |    3 +
 etc/images/gud/rstep.pbm                        |    3 +
 etc/images/gud/rstepi.pbm                       |    3 +
 etc/images/gud/thread.pbm                       |  Bin 0 -> 81 bytes
 etc/images/lock-broken.pbm                      |    3 +
 etc/images/lock-ok.pbm                          |  Bin 0 -> 81 bytes
 etc/images/lock.pbm                             |  Bin 0 -> 81 bytes
 etc/images/mail/copy.pbm                        |  Bin 0 -> 81 bytes
 etc/images/mail/forward.pbm                     |  Bin 0 -> 81 bytes
 etc/images/mail/not-spam.pbm                    |  Bin 0 -> 81 bytes
 etc/images/mail/outbox.pbm                      |    3 +
 etc/images/mail/preview.pbm                     |  Bin 0 -> 81 bytes
 etc/images/mail/save-draft.pbm                  |  Bin 0 -> 81 bytes
 etc/images/mh-logo.pbm                          |    3 +
 etc/images/mpc/add.pbm                          |  Bin 0 -> 81 bytes
 etc/images/mpc/ffwd.pbm                         |  Bin 0 -> 81 bytes
 etc/images/mpc/next.pbm                         |  Bin 0 -> 81 bytes
 etc/images/mpc/pause.pbm                        |  Bin 0 -> 81 bytes
 etc/images/mpc/play.pbm                         |  Bin 0 -> 81 bytes
 etc/images/mpc/prev.pbm                         |  Bin 0 -> 81 bytes
 etc/images/mpc/rewind.pbm                       |  Bin 0 -> 81 bytes
 etc/images/mpc/stop.pbm                         |  Bin 0 -> 81 bytes
 etc/images/redo.pbm                             |  Bin 0 -> 81 bytes
 etc/images/separator.pbm                        |    3 +
 etc/images/smilies/braindamaged.pbm             |    3 +
 etc/images/smilies/cry.pbm                      |    3 +
 etc/images/smilies/dead.pbm                     |    3 +
 etc/images/smilies/evil.pbm                     |    3 +
 etc/images/smilies/forced.pbm                   |    3 +
 etc/images/smilies/grin.pbm                     |    3 +
 etc/images/smilies/indifferent.pbm              |    3 +
 etc/images/sort-ascending.pbm                   |    3 +
 etc/images/sort-column-ascending.pbm            |    3 +
 etc/images/sort-criteria.pbm                    |    3 +
 etc/images/sort-descending.pbm                  |    3 +
 etc/images/sort-row-ascending.pbm               |    3 +
 etc/images/unchecked.pbm                        |    3 +
 etc/images/zoom-in.pbm                          |  Bin 0 -> 81 bytes
 etc/publicsuffix.txt                            | 1856 +++++++++++++++++++++--
 leim/README                                     |    4 +-
 lib-src/Makefile.in                             |   18 +-
 lib-src/etags.c                                 |   74 +-
 lib-src/movemail.c                              |    7 +-
 lib-src/rcs2log                                 |    8 +-
 lib/acl-internal.c                              |    2 +-
 lib/acl-internal.h                              |    2 +-
 lib/c-ctype.c                                   |  394 +-----
 lib/c-ctype.h                                   |  850 ++++++++---
 lib/get-permissions.c                           |    2 +-
 lib/qcopy-acl.c                                 |    2 +-
 lib/set-permissions.c                           |    2 +-
 lib/stdalign.in.h                               |    9 +-
 lisp/ChangeLog.17                               |    5 +
 lisp/Makefile.in                                |   12 +-
 lisp/README                                     |    3 +-
 lisp/allout.el                                  |   13 +-
 lisp/bindings.el                                |    4 +-
 lisp/bookmark.el                                |    2 +-
 lisp/calc/calc-ext.el                           |   18 +-
 lisp/calc/calc-help.el                          |    2 +-
 lisp/calc/calc-map.el                           |    1 +
 lisp/calc/calc-menu.el                          |    7 +
 lisp/calc/calc-stat.el                          |   11 +
 lisp/calc/calc-store.el                         |   12 +-
 lisp/calendar/time-date.el                      |    9 +-
 lisp/calendar/todo-mode.el                      |   21 +-
 lisp/cedet/ede/auto.el                          |    4 +-
 lisp/cedet/ede/generic.el                       |    2 +
 lisp/cedet/ede/proj-obj.el                      |    2 +-
 lisp/cedet/ede/proj-shared.el                   |    2 +-
 lisp/cedet/mode-local.el                        |    8 +-
 lisp/cedet/semantic/complete.el                 |    2 +-
 lisp/cedet/semantic/tag.el                      |    2 +-
 lisp/cedet/semantic/wisent/comp.el              |    2 +-
 lisp/cedet/semantic/wisent/wisent.el            |    2 +-
 lisp/cmuscheme.el                               |    4 +-
 lisp/comint.el                                  |    2 +-
 lisp/custom.el                                  |    9 +-
 lisp/dabbrev.el                                 |    2 +-
 lisp/emacs-lisp/advice.el                       |    5 +-
 lisp/emacs-lisp/avl-tree.el                     |    2 +-
 lisp/emacs-lisp/bytecomp.el                     |   14 +-
 lisp/emacs-lisp/cconv.el                        |    2 +-
 lisp/emacs-lisp/check-declare.el                |    2 +-
 lisp/emacs-lisp/checkdoc.el                     |    2 +-
 lisp/emacs-lisp/cl-generic.el                   |    7 +-
 lisp/emacs-lisp/easy-mmode.el                   |    2 +-
 lisp/emacs-lisp/edebug.el                       |   74 +-
 lisp/emacs-lisp/eieio-core.el                   |   13 +-
 lisp/emacs-lisp/ert-x.el                        |    6 +-
 lisp/emacs-lisp/ert.el                          |   12 +-
 lisp/emacs-lisp/find-func.el                    |    2 +-
 lisp/emacs-lisp/gv.el                           |    2 +-
 lisp/emacs-lisp/lisp-mode.el                    |  126 +-
 lisp/emacs-lisp/lisp.el                         |    3 +-
 lisp/emacs-lisp/map-ynp.el                      |    4 +-
 lisp/emacs-lisp/package.el                      |    4 +-
 lisp/emacs-lisp/regexp-opt.el                   |    2 +-
 lisp/emacs-lisp/rx.el                           |    4 +-
 lisp/emacs-lisp/seq.el                          |   21 +-
 lisp/emacs-lisp/shadow.el                       |    4 +-
 lisp/emacs-lisp/smie.el                         |   19 +-
 lisp/emacs-lisp/syntax.el                       |   98 +-
 lisp/emacs-lisp/timer.el                        |   34 +-
 lisp/emulation/edt-mapper.el                    |    2 +-
 lisp/emulation/edt.el                           |   24 +-
 lisp/emulation/viper-cmd.el                     |   14 +-
 lisp/emulation/viper-ex.el                      |    4 +-
 lisp/emulation/viper-init.el                    |    6 +-
 lisp/emulation/viper-macs.el                    |    6 +-
 lisp/emulation/viper-mous.el                    |    6 +-
 lisp/emulation/viper-util.el                    |    8 +-
 lisp/emulation/viper.el                         |    2 +-
 lisp/epg.el                                     |    2 +-
 lisp/erc/erc-backend.el                         |    2 +-
 lisp/erc/erc-match.el                           |    2 +-
 lisp/erc/erc-networks.el                        |    2 +-
 lisp/erc/erc-services.el                        |    2 +-
 lisp/erc/erc.el                                 |   10 +-
 lisp/eshell/em-glob.el                          |    4 +-
 lisp/eshell/em-hist.el                          |    2 +-
 lisp/eshell/em-ls.el                            |    2 +-
 lisp/eshell/em-unix.el                          |    2 +-
 lisp/eshell/esh-mode.el                         |    7 +-
 lisp/eshell/esh-util.el                         |    2 +-
 lisp/expand.el                                  |    6 +-
 lisp/faces.el                                   |    8 +-
 lisp/filenotify.el                              |   86 +-
 lisp/files.el                                   |    4 +-
 lisp/filesets.el                                |   80 +-
 lisp/find-cmd.el                                |   28 +-
 lisp/find-dired.el                              |    4 +-
 lisp/find-file.el                               |    4 +-
 lisp/foldout.el                                 |    2 +-
 lisp/follow.el                                  |  392 +++--
 lisp/font-core.el                               |   15 +-
 lisp/font-lock.el                               |   37 +-
 lisp/format.el                                  |    8 +-
 lisp/gnus/ChangeLog.2                           |    2 +-
 lisp/gnus/auth-source.el                        |   14 +-
 lisp/gnus/gnus-art.el                           |   16 +-
 lisp/gnus/gnus-bookmark.el                      |   26 +-
 lisp/gnus/gnus-cus.el                           |    2 +-
 lisp/gnus/gnus-group.el                         |   16 +-
 lisp/gnus/gnus-mlspl.el                         |    2 +-
 lisp/gnus/gnus-registry.el                      |    2 +-
 lisp/gnus/gnus-salt.el                          |    2 +-
 lisp/gnus/gnus-sieve.el                         |    8 +-
 lisp/gnus/gnus-util.el                          |    2 +-
 lisp/gnus/gnus.el                               |    8 +-
 lisp/gnus/message.el                            |    8 +-
 lisp/gnus/mm-decode.el                          |    2 +-
 lisp/gnus/mm-uu.el                              |    6 +-
 lisp/gnus/nndoc.el                              |    2 +-
 lisp/gnus/nnheader.el                           |    2 +-
 lisp/gnus/nnmaildir.el                          |    2 +-
 lisp/gnus/nntp.el                               |    4 +-
 lisp/gnus/registry.el                           |   10 +-
 lisp/gnus/rfc1843.el                            |    4 +-
 lisp/gnus/rfc2047.el                            |    4 +-
 lisp/gnus/spam-report.el                        |    2 +-
 lisp/help-fns.el                                |    2 +-
 lisp/help.el                                    |    6 +-
 lisp/hfy-cmap.el                                |    2 +-
 lisp/htmlfontify.el                             |    8 +-
 lisp/ibuffer.el                                 |    6 +-
 lisp/ido.el                                     |    4 +-
 lisp/image-dired.el                             |    6 +-
 lisp/image.el                                   |    2 +-
 lisp/info-look.el                               |    2 +-
 lisp/info.el                                    |   46 +-
 lisp/international/isearch-x.el                 |    1 +
 lisp/international/iso-cvt.el                   |    2 +-
 lisp/international/latin1-disp.el               |    2 +-
 lisp/international/mule-cmds.el                 |   14 +-
 lisp/international/mule-util.el                 |   77 +-
 lisp/international/mule.el                      |    4 +-
 lisp/international/ogonek.el                    |    2 +-
 lisp/international/titdic-cnv.el                |    2 +-
 lisp/jit-lock.el                                |   16 +-
 lisp/language/japan-util.el                     |    8 +-
 lisp/leim/quail/cyrillic.el                     |    2 +-
 lisp/leim/quail/japanese.el                     |    2 +-
 lisp/leim/quail/latin-alt.el                    |    2 +-
 lisp/leim/quail/latin-ltx.el                    |    2 +-
 lisp/leim/quail/thai.el                         |    2 +-
 lisp/loadhist.el                                |    1 -
 lisp/lpr.el                                     |    2 +-
 lisp/mail/feedmail.el                           |   45 +-
 lisp/mail/mail-extr.el                          |   30 +-
 lisp/mail/mailclient.el                         |   60 +-
 lisp/mail/mspools.el                            |    2 +-
 lisp/mail/rmail.el                              |    6 +-
 lisp/mail/rmailmm.el                            |   12 +-
 lisp/mail/undigest.el                           |    2 +-
 lisp/man.el                                     |    2 +-
 lisp/mh-e/mh-alias.el                           |    2 +-
 lisp/mh-e/mh-comp.el                            |    4 +-
 lisp/mh-e/mh-e.el                               |    4 +-
 lisp/mh-e/mh-folder.el                          |    2 +-
 lisp/mh-e/mh-letter.el                          |    4 +-
 lisp/mh-e/mh-mime.el                            |   28 +-
 lisp/mh-e/mh-search.el                          |    2 +-
 lisp/mh-e/mh-utils.el                           |    2 +-
 lisp/mh-e/mh-xface.el                           |    2 +-
 lisp/mouse.el                                   |    4 +-
 lisp/mpc.el                                     |   14 +-
 lisp/msb.el                                     |    2 +-
 lisp/net/ange-ftp.el                            |    8 +-
 lisp/net/dbus.el                                |   40 +-
 lisp/net/eww.el                                 |    2 +-
 lisp/net/gnutls.el                              |    6 +-
 lisp/net/net-utils.el                           |    2 +-
 lisp/net/newst-backend.el                       |    6 +-
 lisp/net/newst-reader.el                        |    2 +-
 lisp/net/rcirc.el                               |    2 +-
 lisp/net/rlogin.el                              |    2 +-
 lisp/net/secrets.el                             |    6 +-
 lisp/net/shr-color.el                           |    4 +-
 lisp/net/soap-client.el                         |    2 +-
 lisp/net/tramp-adb.el                           |    3 +-
 lisp/net/tramp-gvfs.el                          |   50 +-
 lisp/net/tramp-sh.el                            |   88 +-
 lisp/net/tramp-smb.el                           |    1 +
 lisp/net/tramp.el                               |   44 +-
 lisp/net/zeroconf.el                            |   10 +-
 lisp/newcomment.el                              |   67 +-
 lisp/nxml/nxml-mode.el                          |   13 +
 lisp/obsolete/fast-lock.el                      |    2 +-
 lisp/obsolete/lazy-lock.el                      |    3 +-
 lisp/obsolete/longlines.el                      |    4 +-
 lisp/org/ob-core.el                             |    4 +-
 lisp/org/ob-dot.el                              |    2 +-
 lisp/org/ob-latex.el                            |    2 +-
 lisp/org/ob-lilypond.el                         |    2 +-
 lisp/org/ob-lob.el                              |    8 +-
 lisp/org/ob-octave.el                           |    4 +-
 lisp/org/ob-ref.el                              |    4 +-
 lisp/org/ob-sql.el                              |    4 +-
 lisp/org/ob-sqlite.el                           |    2 +-
 lisp/org/ob-tangle.el                           |    2 +-
 lisp/org/org-agenda.el                          |    3 +-
 lisp/org/org-bibtex.el                          |    2 +-
 lisp/org/org-clock.el                           |    2 +-
 lisp/org/org-colview.el                         |    4 +-
 lisp/org/org-crypt.el                           |    7 +-
 lisp/org/org-docview.el                         |    2 +-
 lisp/org/org-element.el                         |   20 +-
 lisp/org/org-entities.el                        |    4 +-
 lisp/org/org-footnote.el                        |    2 +-
 lisp/org/org-list.el                            |   28 +-
 lisp/org/org-table.el                           |    6 +-
 lisp/org/org.el                                 |   62 +-
 lisp/org/ox-html.el                             |    2 +-
 lisp/org/ox-icalendar.el                        |    2 +-
 lisp/org/ox-latex.el                            |   56 +-
 lisp/org/ox-man.el                              |    8 +-
 lisp/org/ox-odt.el                              |   42 +-
 lisp/org/ox-publish.el                          |    4 +-
 lisp/org/ox-texinfo.el                          |   44 +-
 lisp/org/ox.el                                  |   58 +-
 lisp/play/doctor.el                             |    2 +-
 lisp/play/gametree.el                           |    2 +-
 lisp/play/tetris.el                             |   12 +-
 lisp/progmodes/ada-mode.el                      |    4 +-
 lisp/progmodes/ada-xref.el                      |    8 +-
 lisp/progmodes/antlr-mode.el                    |   32 +-
 lisp/progmodes/cc-align.el                      |   16 +-
 lisp/progmodes/cc-awk.el                        |    6 +-
 lisp/progmodes/cc-cmds.el                       |   14 +-
 lisp/progmodes/cc-defs.el                       |    4 +-
 lisp/progmodes/cc-engine.el                     |   26 +-
 lisp/progmodes/cc-fonts.el                      |   14 +-
 lisp/progmodes/cc-langs.el                      |   56 +-
 lisp/progmodes/cc-mode.el                       |    5 +-
 lisp/progmodes/cc-vars.el                       |    2 +-
 lisp/progmodes/cfengine.el                      |    4 +-
 lisp/progmodes/cmacexp.el                       |    2 +-
 lisp/progmodes/compile.el                       |   30 +-
 lisp/progmodes/cperl-mode.el                    |   22 +-
 lisp/progmodes/dcl-mode.el                      |   22 +-
 lisp/progmodes/ebnf2ps.el                       |    4 +-
 lisp/progmodes/elisp-mode.el                    |   17 +-
 lisp/progmodes/f90.el                           |   22 +-
 lisp/progmodes/flymake.el                       |    8 +-
 lisp/progmodes/fortran.el                       |    8 +-
 lisp/progmodes/gdb-mi.el                        |    2 +
 lisp/progmodes/glasses.el                       |    4 +-
 lisp/progmodes/gud.el                           |   10 +-
 lisp/progmodes/idlw-help.el                     |    4 +-
 lisp/progmodes/idlw-shell.el                    |   12 +-
 lisp/progmodes/idlwave.el                       |    4 +-
 lisp/progmodes/inf-lisp.el                      |    2 +-
 lisp/progmodes/js.el                            |   34 +-
 lisp/progmodes/m4-mode.el                       |   10 +-
 lisp/progmodes/make-mode.el                     |    2 +-
 lisp/progmodes/mantemp.el                       |    2 +-
 lisp/progmodes/perl-mode.el                     |    2 +-
 lisp/progmodes/prog-mode.el                     |    4 +-
 lisp/progmodes/prolog.el                        |   48 +-
 lisp/progmodes/python.el                        |   22 +-
 lisp/progmodes/ruby-mode.el                     |   11 +-
 lisp/progmodes/scheme.el                        |    2 +-
 lisp/progmodes/sh-script.el                     |   16 +-
 lisp/progmodes/sql.el                           |   18 +-
 lisp/progmodes/vera-mode.el                     |    2 +-
 lisp/progmodes/verilog-mode.el                  |  144 +-
 lisp/progmodes/vhdl-mode.el                     |   92 +-
 lisp/progmodes/xscheme.el                       |    6 +-
 lisp/ps-print.el                                |    8 +-
 lisp/replace.el                                 |    4 +-
 lisp/simple.el                                  |   32 +
 lisp/sort.el                                    |    2 +-
 lisp/speedbar.el                                |    2 +-
 lisp/startup.el                                 |   77 +-
 lisp/subr.el                                    |   13 -
 lisp/term.el                                    |    2 +-
 lisp/term/README                                |   32 +-
 lisp/term/ns-win.el                             |    2 +-
 lisp/term/tty-colors.el                         |    8 +-
 lisp/textmodes/bibtex.el                        |    8 +-
 lisp/textmodes/conf-mode.el                     |    6 +-
 lisp/textmodes/css-mode.el                      |   10 +-
 lisp/textmodes/ispell.el                        |   12 +-
 lisp/textmodes/makeinfo.el                      |    2 +-
 lisp/textmodes/page-ext.el                      |    4 +-
 lisp/textmodes/refer.el                         |   10 +-
 lisp/textmodes/reftex-cite.el                   |   10 +-
 lisp/textmodes/reftex-parse.el                  |    2 +-
 lisp/textmodes/reftex-vars.el                   |    3 +-
 lisp/textmodes/reftex.el                        |    6 +-
 lisp/textmodes/rst.el                           |   26 +-
 lisp/textmodes/sgml-mode.el                     |    2 +-
 lisp/textmodes/tex-mode.el                      |   34 +-
 lisp/textmodes/texinfmt.el                      |    8 +-
 lisp/textmodes/texinfo.el                       |    2 +-
 lisp/textmodes/texnfo-upd.el                    |   18 +-
 lisp/thingatpt.el                               |    2 +-
 lisp/tutorial.el                                |   10 +-
 lisp/type-break.el                              |    2 +-
 lisp/url/url-cookie.el                          |    4 +-
 lisp/url/url-dav.el                             |    2 +-
 lisp/url/url-gw.el                              |    2 +-
 lisp/url/url-handlers.el                        |    4 +-
 lisp/url/url-http.el                            |    8 +-
 lisp/vc/add-log.el                              |    2 +-
 lisp/vc/diff-mode.el                            |    4 +-
 lisp/vc/ediff-diff.el                           |    2 +-
 lisp/vc/ediff-init.el                           |    2 +-
 lisp/vc/ediff-ptch.el                           |    8 +-
 lisp/vc/ediff-util.el                           |   18 +-
 lisp/vc/ediff-wind.el                           |    4 +-
 lisp/vc/ediff.el                                |    4 +-
 lisp/vc/log-edit.el                             |    2 +-
 lisp/vc/vc-annotate.el                          |    2 +-
 lisp/vc/vc-bzr.el                               |    2 +-
 lisp/vc/vc-cvs.el                               |   52 +-
 lisp/vc/vc-dav.el                               |    2 +-
 lisp/vc/vc-git.el                               |    2 +-
 lisp/vc/vc-hg.el                                |    2 +-
 lisp/vc/vc-mtn.el                               |    2 +-
 lisp/vc/vc-rcs.el                               |   26 +-
 lisp/vc/vc-sccs.el                              |    3 +-
 lisp/vc/vc-src.el                               |    2 +-
 lisp/vc/vc-svn.el                               |    2 +-
 lisp/vc/vc.el                                   |   32 +-
 lisp/vcursor.el                                 |    4 +-
 lisp/whitespace.el                              |   19 +-
 lisp/wid-edit.el                                |    9 +-
 lisp/winner.el                                  |    5 +
 lisp/woman.el                                   |   12 +-
 nt/emacs-x64.manifest                           |   18 +-
 nt/emacs-x86.manifest                           |    8 +-
 nt/subdirs.el                                   |    3 -
 src/README                                      |   13 +-
 src/buffer.c                                    |   16 +-
 src/bytecode.c                                  |    4 +-
 src/callproc.c                                  |    4 +-
 src/category.c                                  |    4 +-
 src/chartab.c                                   |    2 +-
 src/cmds.c                                      |    2 +-
 src/coding.c                                    |    9 +-
 src/data.c                                      |    9 +-
 src/dbusbind.c                                  |   10 +-
 src/dispextern.h                                |    4 -
 src/dispnew.c                                   |    4 +-
 src/doc.c                                       |    2 +-
 src/doprnt.c                                    |    2 +-
 src/editfns.c                                   |    6 +-
 src/eval.c                                      |   41 +-
 src/fileio.c                                    |   34 +-
 src/floatfns.c                                  |    8 +-
 src/fns.c                                       |   24 +-
 src/font.c                                      |  115 ++-
 src/fontset.c                                   |   95 --
 src/frame.c                                     |    7 +-
 src/frame.h                                     |    7 +-
 src/gfilenotify.c                               |   92 +-
 src/image.c                                     |   40 +-
 src/indent.c                                    |   38 +-
 src/inotify.c                                   |   49 +-
 src/keyboard.c                                  |    4 +-
 src/keymap.c                                    |    6 +-
 src/lisp.h                                      |   10 +-
 src/lread.c                                     |    2 +-
 src/macfont.m                                   |    8 +-
 src/menu.c                                      |    4 +-
 src/minibuf.c                                   |    4 +-
 src/nsfns.m                                     |    8 +-
 src/nsselect.m                                  |    6 +-
 src/nsterm.m                                    |   10 +-
 src/print.c                                     |    4 +-
 src/process.c                                   |   44 +-
 src/process.h                                   |   20 +-
 src/search.c                                    |    2 +-
 src/syntax.c                                    |  141 ++-
 src/syntax.h                                    |   33 +-
 src/term.c                                      |    7 +
 src/termhooks.h                                 |    6 +
 src/terminal.c                                  |   65 +
 src/textprop.c                                  |    2 +-
 src/vm-limit.c                                  |   18 +-
 src/w16select.c                                 |    2 +-
 src/w32fns.c                                    |   12 +-
 src/w32notify.c                                 |   39 +-
 src/window.c                                    |   22 +-
 src/xdisp.c                                     |  141 +-
 src/xfaces.c                                    |   64 +-
 src/xfns.c                                      |   14 +-
 src/xselect.c                                   |   16 +-
 src/xterm.c                                     |   11 +-
 test/automated/Makefile.in                      |    2 +-
 test/automated/auto-revert-tests.el             |   62 +-
 test/automated/compile-tests.el                 |    8 +-
 test/automated/elisp-mode-tests.el              |   44 +-
 test/automated/ert-x-tests.el                   |    4 +-
 test/automated/file-notify-tests.el             |  317 ++++-
 test/automated/icalendar-tests.el               |   10 +-
 test/automated/info-xref.el                     |    2 +-
 test/automated/seq-tests.el                     |   10 +
 test/etags/el-src/emacs/lisp/progmodes/etags.el |    2 +-
 test/indent/prolog.prolog                       |   27 +-
 625 files changed, 10504 insertions(+), 5086 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index 21af4e6..ac26a2b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -44,3 +44,7 @@ doc/misc/texinfo.tex -whitespace=blank-at-eol
 *.sig binary
 *.tiff binary
 etc/e/eterm-color binary
+
+# Hooks for non-default diff hunk headers; see autogen.sh.
+*.el diff=elisp
+*.texi diff=texinfo
diff --git a/CONTRIBUTE b/CONTRIBUTE
index 7e697dd..609ab7a 100644
--- a/CONTRIBUTE
+++ b/CONTRIBUTE
@@ -204,6 +204,14 @@ then exclude that commit from the merge to trunk.
 See all the files in admin/notes/* .  In particular, see
 admin/notes/newfile, see admin/notes/repo.
 
+The file admin/MAINTAINERS records the areas of interest of frequent
+Emacs contributors.  If you are making changes in one of the files
+mentioned there, it is a good idea to consult the person who expressed
+an interest in that file, and/or get his/her feedback for the changes.
+If you are a frequent contributor and have interest in maintaining
+specific files, please record those interests in that file, so that
+others could be aware of that.
+
 *** git vs rename
 
 Git does not explicitly represent a file renaming; it uses a percent
@@ -234,7 +242,9 @@ by following links from 
http://savannah.gnu.org/mail/?group=emacs .
 
 To email a patch you can use a shell command like 'git format-patch -1'
 to create a file, and then attach the file to your email.  This nicely
-packages the patch's commit message and changes.
+packages the patch's commit message and changes.  To send just one
+such patch without additional remarks, you can use a command like
+'git send-email address@hidden 0001-DESCRIPTION.patch'.
 
 ** Document your changes.
 
diff --git a/ChangeLog.2 b/ChangeLog.2
index c4912f7..0fb3df6 100644
--- a/ChangeLog.2
+++ b/ChangeLog.2
@@ -1,3 +1,1427 @@
+2015-09-20  Eli Zaretskii  <address@hidden>
+
+       Improve documentation of 'run-at-time'
+       * lisp/emacs-lisp/timer.el (run-at-time): Improve the doc string.
+       In particular, don't refer to 'diary-entry-time', because it is
+       unavailable until diary-lib is loaded.  Also, refer to
+       'timer-duration-words', not 'timer-duration', as the latter's doc
+       string says nothing about the accepted strings.
+
+2015-09-19  Jay Belanger  <address@hidden>
+
+       * lisp/calc/calc-ext.el (calc-do-prefix-help): Tidy up error message.
+
+2015-09-19  Ken Manheimer  <address@hidden>
+
+       Repair pdbtrack remote file tracking
+       * lisp/progmodes/python.el (python-pdbtrack-set-tracked-buffer):
+       Rectify pdbtrack so it follows transitions from one remote source
+       file to the next.
+
+2015-09-19  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/timer.el (run-at-time): Docstring formatting
+
+2015-09-19  Eli Zaretskii  <address@hidden>
+
+       Adapt vc-src to the old-new vc-checkin API
+       * lisp/vc/vc-src.el (vc-src-checkin): Accept and ignore an
+       additional optional parameter.
+
+2015-09-19  Simen Heggestøyl  <address@hidden>
+
+       Add overflow module to CSS property list
+       * lisp/textmodes/css-mode.el (css-property-ids): Add properties from CSS
+       Overflow Module Level 3.
+
+2015-09-19  Eli Zaretskii  <address@hidden>
+
+       Fix documentation of "C-u C-x v v"
+       * doc/emacs/maintaining.texi (Advanced C-x v v): Make the
+       documentation of "C-u C-x v v" match what the code does.
+
+       Resurrect the ability to specify a revision in vc-next-action
+       * lisp/vc/vc-bzr.el (vc-bzr-checkin):
+       * lisp/vc/vc-dav.el (vc-dav-checkin):
+       * lisp/vc/vc-git.el (vc-git-checkin):
+       * lisp/vc/vc-hg.el (vc-hg-checkin):
+       * lisp/vc/vc-mtn.el (vc-mtn-checkin): Accept and silently ignore
+       an additional optional argument, the revision to checkin.
+       * lisp/vc/vc-sccs.el (vc-sccs-checkin):
+       * lisp/vc/vc-cvs.el (vc-cvs-checkin):
+       * lisp/vc/vc-rcs.el (vc-rcs-checkin): Allow to optionally specify
+       a revision to checkin.
+       * lisp/vc/vc.el (vc-next-action): Allow to optionally specify the
+       revision when checking in files.
+       See http://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00688.html
+       for the details.
+
+2015-09-18  Wilson Snyder  <address@hidden>
+
+       Fix checkdoc warnings.
+       * lisp/progmodes/verilog-mode.el (verilog-forward-sexp-function)
+       (verilog-decls-princ, verilog-modport-princ)
+       (verilog-modi-modport-lookup-one): Fix checkdoc warnings.
+
+2015-09-17  Jay Belanger  <address@hidden>
+
+       Fix the routine for help on Calc's prefixes.
+       * lisp/calc/calc-ext.el (calc-prefix-help-retry): New variable.
+       (calc-do-prefix-help): Use `read-char' to determine the next Calc
+       command.
+
+2015-09-17  Stefan Monnier  <address@hidden>
+
+       * lisp/font-lock.el (font-lock-beginning-of-syntax-function): Remove
+       (font-lock-fontify-block): Don't let-bind it.
+       (font-lock-compile-keywords): Don't use it.
+       (font-lock-set-defaults): Don't set it.  Allow the variable alist to
+       start one slot earlier, instead.
+       * lisp/emacs-lisp/syntax.el (font-lock-beginning-of-syntax-function):
+       Don't declare.
+       (syntax-ppss): Don't use it either.
+       * lisp/font-core.el (font-lock-defaults): Remove SYNTAX-BEGIN
+       from docstring.
+       * doc/emacs/display.texi (Font Lock): Don't mention
+       font-lock-beginning-of-syntax-function.
+       * doc/lispref/modes.texi (Font Lock Basics): Update description of
+       font-lock-defaults.
+       (Syntactic Font Lock): Remove font-lock-beginning-of-syntax-function.
+       * lisp/loadhist.el (unload-feature-special-hooks):
+       Remove font-lock-beginning-of-syntax-function.
+       * lisp/obsolete/lazy-lock.el (lazy-lock-fontify-region):
+       * lisp/emacs-lisp/lisp.el (beginning-of-defun-raw): Don't let-bind
+       font-lock-beginning-of-syntax-function.
+
+2015-09-17  Paul Eggert  <address@hidden>
+
+       Backslash cleanup in Elisp source files
+       This patch should not change behavior.  It typically omits backslashes
+       where they are redundant (e.g., in the string literal "^\$").
+       In a few places, insert backslashes where they make regular
+       expressions clearer: e.g., replace "^\*" (equivalent to "^*") with
+       "^\\*", which has the same effect as a regular expression.
+       Also, use ‘\ %’ instead of ‘\%’ when avoiding confusion with SCCS IDs,
+       and similarly use ‘\ $’ instead of ‘\$’ when avoiding confusion with
+       RCS IDs, as that makes it clearer that the backslash is intended.
+
+       Some more minor backslash fixes
+       * test/automated/compile-tests.el (compile-tests--test-regexps-data):
+       * test/automated/info-xref.el (info-xref-test-write-file):
+       Double backslashes in strings.
+
+       Fix several backslash typos in Elisp strings
+       * lisp/calendar/todo-mode.el (todo-files, todo-rename-file)
+       (todo-find-filtered-items-file, todo-reset-nondiary-marker)
+       (todo-reset-done-string, todo-reset-comment-string)
+       (todo-reset-highlight-item):
+       * lisp/erc/erc-networks.el (erc-networks-alist):
+       * lisp/gnus/gnus-art.el (gnus-button-handle-library):
+       * lisp/gnus/gnus-group.el (gnus-read-ephemeral-gmane-group-url):
+       * lisp/gnus/nntp.el (nntp-via-shell-prompt)
+       (nntp-telnet-shell-prompt):
+       * lisp/gnus/spam-report.el (spam-report-gmane-regex):
+       * lisp/image-dired.el (image-dired-rotate-original):
+       (image-dired-get-exif-file-name):
+       * lisp/international/latin1-disp.el (latin1-display-ucs-per-lynx):
+       * lisp/mail/undigest.el (rmail-digest-parse-rfc1153strict):
+       * lisp/mh-e/mh-letter.el (mh-file-is-vcard-p):
+       * lisp/mh-e/mh-mime.el (mh-file-mime-type-substitutions):
+       * lisp/net/shr-color.el (shr-color->hexadecimal):
+       * lisp/org/org-bibtex.el (org-bibtex-fields):
+       * lisp/org/org-docview.el (org-docview-export):
+       * lisp/org/org-entities.el (org-entities):
+       * lisp/org/ox-icalendar.el (org-icalendar-cleanup-string):
+       * lisp/progmodes/cperl-mode.el (cperl-indent-exp):
+       * lisp/progmodes/ebnf2ps.el (ebnf-file-suffix-regexp)
+       (ebnf-style-database):
+       * lisp/progmodes/idlw-help.el (idlwave-do-context-help1):
+       * lisp/progmodes/ruby-mode.el (ruby-imenu-create-index-in-block):
+       * lisp/progmodes/sql.el (sql-product-alist):
+       * lisp/progmodes/verilog-mode.el (verilog-error-regexp-emacs-alist)
+       (verilog-error-font-lock-keywords)
+       (verilog-assignment-operator-re):
+       * lisp/progmodes/vhdl-mode.el (vhdl-compiler-alist):
+       * lisp/textmodes/reftex-parse.el (reftex-parse-from-file):
+       * lisp/vc/add-log.el (change-log-version-number-regexp-list):
+       Fix typo by replacing ‘\’ with ‘\\’ in a string literal.
+       For example, to get the regular expression ‘\.’ use the string
+       literal "\\.", not "\." (which is equivalent to ".").
+       * lisp/emulation/viper-util.el (viper-glob-unix-files):
+       Remove stray ‘\j’ from string.
+       * lisp/gnus/nntp.el (nntp-via-shell-prompt)
+       (nntp-telnet-shell-prompt):
+       Treat > like $ when matching a shell prompt.
+       * lisp/progmodes/make-mode.el (makefile-browse):
+       Properly quote a diagnostic.
+
+       Fix minor quoting problems in diagnostics
+       * lisp/tutorial.el (tutorial--describe-nonstandard-key):
+       * lisp/vc/ediff-ptch.el (ediff-fixup-patch-map):
+       Follow text-quoting-style in diagnostic, and quote a file name.
+
+2015-09-17  Eli Zaretskii  <address@hidden>
+
+       * doc/lispref/frames.texi (Cursor Parameters): Document 
'x-stretch-cursor'.
+
+2015-09-16  Paul Eggert  <address@hidden>
+
+       Omit unnecessary \ before paren in C docstrings
+       Although \( is needed in docstrings in Elisp code, it is not needed in
+       docstrings in C code, since C function definitiions do not start with
+       a parenthesis.  The backslashes made the docstrings a bit harder to
+       read and to format in columns.  Also, some C docstrings had ( in
+       column 1 and this did not appear to be causing any problems.  So,
+       simplify C docstrings by replacing \( with ( and \) with ).
+
+       A few more minor quoting fixes in a script and a text file
+
+       Minor quoting fixes in scripts and doc
+       Prefer straight quotes in random script files, as they are not 
converted.
+       Prefer grave quotes in a couple of places in the manual that were missed
+       earlier, as these quotes are converted.
+
+       Minor backslash fixes in manuals and scripts
+       * Makefile.in (install-arch-indep):
+       * admin/charsets/compact.awk:
+       * admin/charsets/gb180302.awk (gb_to_index):
+       * admin/charsets/gb180304.awk (gb_to_index):
+       Avoid undefined behavior in Awk regular expression backslashes.
+       * doc/misc/efaq.texi (Matching parentheses):
+       Omit unnecessary backslashes.
+       * doc/misc/gnus-faq.texi (FAQ 5-8):
+       Avoid undefined behavior in suggested sed backslash usage.
+
+       Add -Wswitch to --enable-gcc-warnings
+       Make --enable-gcc-warnings a bit pickier, by also using -Wswitch.
+       * configure.ac (WERROR_CFLAGS): Don’t add -Wno-switch.
+       * lib-src/etags.c (main, consider_token, C_entries):
+       * src/coding.c (encode_invocation_designation):
+       * src/data.c (Ftype_of):
+       * src/eval.c (Fdefvaralias, default_toplevel_binding)
+       (Fbacktrace__locals, mark_specpdl):
+       * src/lisp.h (record_xmalloc):
+       * src/syntax.c (scan_lists, scan_sexps_forward):
+       * src/window.c (window_relative_x_coord):
+       * src/xdisp.c (push_it, pop_it):
+       * src/xterm.c (xg_scroll_callback, x_check_fullscreen):
+       Error out or do nothing (as appropriate) if a switch statement
+       with an enum value does not cover all of the enum.
+       * src/dispextern.h (struct iterator_stack_entry.u.comp):
+       Remove unused member discovered by using -Wswitch.
+       * src/lisp.h (record_xmalloc): Add a ‘+ 0’ to pacify -Wswitch.
+       * src/vm-limit.c (check_memory_limits):
+       Simplify warning-diagnostic computation by using a table.
+
+       etags ‘fatal’ function is now printf-like
+       * lib-src/etags.c (fatal): Now printf-like.  All callers changed.
+       Also, now static; not clear why it needed to be extern.
+       (verror): New function, with most of the old contents of ‘error’.
+       (fatal, error): Use it.
+
+2015-09-16  Eli Zaretskii  <address@hidden>
+
+       More adaptations in file-notify-tests.el
+       * test/automated/file-notify-tests.el
+       (file-notify-test05-dir-validity): Skip for w32notify in
+       batch-mode.  (Bug#21432)
+
+2015-09-16  Michael Albinus  <address@hidden>
+
+       Adapt test in file-notify-tests.el
+       * test/automated/file-notify-tests.el
+       (file-notify-test04-file-validity): Skip for w32notify in
+       batch-mode.  Add test lost last commit.
+
+2015-09-16  Dima Kogan  <address@hidden>
+
+       winner no longer holds on to dead frames
+       * lisp/winner.el (winner-change-fun): Cull dead frames.
+       This prevents a potentially massive memory leak.  See:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00619.html
+
+2015-09-16  Michael Albinus  <address@hidden>
+
+       Use common report_file_notify_error function
+       * src/fileio.c (report_file_notify_error): New function.
+       * src/inotify.c (report_inotify_error): Remove function.
+       (inotify_callback, symbol_to_inotifymask, Finotify_add_watch)
+       (Finotify_rm_watch): Use report_file_notify_error.
+       * src/lisp.h (report_file_notify_error): Declare external function.
+       * src/w32notify.c (report_w32notify_error): Remove function.
+       (Fw32notify_add_watch, Fw32notify_rm_watch):
+       Use report_file_notify_error.
+
+2015-09-16  Jay Belanger  <address@hidden>
+
+       Fix documentation.
+       * doc/misc/calc.texi (Single-Variable Statistics): Fix the wording of
+       the documentation of the root mean square.
+
+2015-09-16  Martin Rudalics  <address@hidden>
+
+       Remove tool_bar_redisplayed_once and associated code.
+       * src/frame.h (tool_bar_redisplayed_once): Remove slot.
+       * src/frame.c (make_frame, x_set_font): Remove initialization of
+       f->tool_bar_redisplayed_once.
+       * src/w32fns.c (x_change_tool_bar_height):
+       * src/xfns.c (x_change_tool_bar_height): Don't check for
+       f->tool_bar_redisplayed_once.
+       * src/xdisp.c (redisplay_internal): Remove handling of
+       f->tool_bar_redisplayed_once.
+
+2015-09-16  Eli Zaretskii  <address@hidden>
+
+       Restore some of the quoting in the manuals
+       * doc/lispref/windows.texi (Coordinates and Windows)
+       (Coordinates and Windows):
+       * doc/lispref/variables.texi (Lexical Binding)
+       (File Local Variables):
+       * doc/lispref/text.texi (Format Properties):
+       * doc/lispref/symbols.texi (Symbol Components):
+       * doc/lispref/strings.texi (Creating Strings):
+       * doc/lispref/sequences.texi (Sequence Functions):
+       * doc/lispref/searching.texi (Regexp Special, Regexp Search)
+       (Search and Replace):
+       * doc/lispref/processes.texi (Bindat Spec):
+       * doc/lispref/os.texi (Idle Timers):
+       * doc/lispref/objects.texi (Basic Char Syntax):
+       * doc/lispref/numbers.texi (Float Basics, Random Numbers):
+       * doc/lispref/nonascii.texi (Character Properties):
+       * doc/lispref/modes.texi (Major Mode Conventions, Mode Hooks)
+       (Mode Line Variables):
+       * doc/lispref/minibuf.texi (Text from Minibuffer):
+       * doc/lispref/loading.texi (Autoload):
+       * doc/lispref/keymaps.texi (Controlling Active Maps):
+       * doc/lispref/frames.texi (Frame Layout, Size and Position)
+       (Size Parameters, Implied Frame Resizing):
+       * doc/lispref/files.texi (Changing Files, Magic File Names):
+       * doc/lispref/eval.texi (Self-Evaluating Forms):
+       * doc/lispref/display.texi (Progress, Abstract Display)
+       (Abstract Display Example, Bidirectional Display):
+       * doc/lispref/commands.texi (Event Mod):
+       * doc/emacs/windows.texi (Displaying Buffers):
+       * doc/emacs/trouble.texi (Bug Criteria, Checklist):
+       * doc/emacs/text.texi (Enriched Text):
+       * doc/emacs/programs.texi (MixedCase Words):
+       * doc/emacs/picture-xtra.texi (Insert in Picture)
+       (Tabs in Picture):
+       * doc/emacs/misc.texi (Emacs Server, Printing):
+       * doc/emacs/mini.texi (Minibuffer History):
+       * doc/emacs/maintaining.texi (Old Revisions, VC Change Log)
+       (Pulling / Pushing):
+       * doc/emacs/killing.texi (Yanking, Cut and Paste, Clipboard):
+       * doc/emacs/help.texi (Help, Help Echo):
+       * doc/emacs/glossary.texi (Glossary):
+       * doc/emacs/frames.texi (Mouse Commands, Creating Frames)
+       (Frame Commands):
+       * doc/emacs/files.texi (Reverting, Saving, Directories):
+       * doc/emacs/entering.texi (Exiting):
+       * doc/emacs/emacs.texi (Top):
+       * doc/emacs/cmdargs.texi (Window Size X, Icons X):
+       * doc/emacs/anti.texi (Antinews): Restore quoting of text where
+       appropriate or replace quoting with @dfn.
+       * doc/misc/ediff.texi (Window and Frame Configuration):
+       * doc/lispref/processes.texi (Network Feature Testing):
+       * doc/lispref/display.texi (Display Margins): Quote the phrase
+       after "a.k.a." where appropriate.
+
+2015-09-16  Tassilo Horn  <address@hidden>
+
+       Clarify reftex-extra-bindings docs.
+       * lisp/textmodes/reftex-vars.el (reftex-extra-bindings):
+       * doc/misc/reftex.texi (Key Bindings): Document that the variable
+       only has an effect at load-time.
+
+2015-09-16  Daniel McClanahan  <address@hidden>  (tiny change)
+
+       Fix search argument in ‘lisp--el-match-keyword’ (Bug#21492) (Bug#21493)
+       * lisp/emacs-lisp/lisp-mode.el (lisp--el-match-keyword): Fix
+       search argument.  (Bug#21492) (Bug#21493)
+
+2015-09-16  Tassilo Horn  <address@hidden>
+
+       Add pretty symbols for \qquad and \varrho.
+       * lisp/textmodes/tex-mode.el (tex--prettify-symbols-alist): Add pretty
+       symbols for \qquad and \varrho.
+
+2015-09-15  Jay Belanger  <address@hidden>
+
+       Add new functions for the root mean square of a (Calc) vector
+       * lisp/calc/calc-stats.el (calcFunc-rms, calc-vector-rms):
+       New functions.
+       * lisp/calc/calc-ext.el (calc-init-extensions): Add keybinding for
+       `calc-vector-rms', add autoloads for `calc-vector-rms' and
+       `calcFunc-rms'.
+       * lisp/calc/calc-map.el (calc-u-oper-keys):  Add entry for
+       `calcFunc-rms'.
+       * lisp/calc/calc-menu.el (calc-vectors-menu): Add entry for
+       `calc-vector-rms'.
+       * doc/misc/calc.texi (Single-Variable Statistics): Document the rms
+       command.
+
+2015-09-15  Stephen Leake  <address@hidden>
+
+       Add monotone EDE generic project
+       * lisp/cedet/ede/generic.el (ede-enable-generic-projects): Add monotone
+       generic project.
+
+       Revert premature commit
+       * doc/lispref/files.texi: Revert premature commit of change to
+       file-name-all-completions.
+
+       Fix a bug in elisp--xref-find-definitions related to cl-generic defaults
+       * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions): Fix bug
+       with cl-generic defaults.
+       (elisp--xref-find-references): Add doc string.
+       * test/automated/elisp-mode-tests.el (xref-elisp-generic-*): Improve
+       tests to find bug.
+
+       Fix bugs in eieio-oref-default related to class symbols
+       * lisp/emacs-lisp/eieio-core.el (class-p): Handle symbol properly.
+       (eieio-oref-default): Handle class properly.
+
+2015-09-15  Paul Eggert  <address@hidden>
+
+       Quote “fullboth” when defining it
+       * doc/lispref/frames.texi (Size Parameters): Use @dfn for “fullboth”
+       and rewrite the containing paragraph, which was awkward.  (Bug#21472).
+
+2015-09-15  Eli Zaretskii  <address@hidden>
+
+       Minor doc fix in emacs/ack.texi
+       * doc/emacs/ack.texi (Acknowledgments): Fix an xref missing the
+       first argument.
+
+2015-09-15  Michael Albinus  <address@hidden>
+
+       Adapt tests in auto-revert-tests.el
+       * test/automated/auto-revert-tests.el (auto-revert--timeout):
+       Make it a defconst.
+       (auto-revert--wait-for-revert): New defun.
+       (auto-revert-test00-auto-revert-mode)
+       (auto-revert-test01-auto-revert-tail-mode)
+       (auto-revert-test02-auto-revert-mode-dired): Use it.
+
+2015-09-15  Stefan Monnier  <address@hidden>
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode-symbol-regexp): New const
+       Use it everywhere "\\(\\sw\\|\\s_\\|\\\\.\\)+" was used.
+       (cl-lib-fdefs): Add defgeneric.
+       (cl-kw): Add all elements of eieio-kw and cl-lib-kw.
+       (eieio-kw, cl-lib-kw, el-kw): Remove.
+
+2015-09-15  Paul Eggert  <address@hidden>
+
+       Quote less in manuals
+       The manuals often used quotes ``...'' when it is better to use @dfn or
+       @code or capitalized words or no quoting at all.  For example, there is
+       no need for the `` and '' in “if a variable has one effect for
+       @code{nil} values and another effect for address@hidden'' values”.
+       Reword the Emacs, Lisp intro, and Lisp reference manuals to eliminate
+       unnecessary quoting like this, and to use @dfn etc. instead when called
+       for (Bug#21472).
+
+2015-09-15  Mark Oteiza  <address@hidden>
+
+       lisp/custom.el (load-theme): Only compute hash when needed.
+
+2015-09-15  Paul Eggert  <address@hidden>
+
+       Pacify --enable-gcc-warnings
+       * src/inotify.c (report_inotify_error): Declare it _Noreturn.
+
+2015-09-15  Michael Albinus  <address@hidden>
+
+       Improve error reports in inotify.c
+       * src/inotify.c (report_inotify_error): New function.  Clone of
+       report_w32notify_error.
+       (inotify_callback, symbol_to_inotifymask, Finotify_add_watch)
+       (Finotify_rm_watch): Use it.
+
+2015-09-15  Eli Zaretskii  <address@hidden>
+
+       Fix the file-notify tests for watch validation on w32
+       * test/automated/file-notify-tests.el
+       (file-notify-test04-file-validity): Move the directory deletion
+       out of the file-notify--test-with-events macro.
+       (file-notify-test04-file-validity)
+       (file-notify-test05-dir-validity): Enlarge the timeout of
+       read-event to 0.5, as 0.1 is borderline on w32.  (Bug#21432)
+
+2015-09-15  Tassilo Horn  <address@hidden>
+
+       Use OPEN BOX instead of space for \quad.
+       * lisp/textmodes/tex-mode.el (tex--prettify-symbols-alist): Use OPEN BOX
+       character for \quad instead of a space.
+
+2015-09-15  Eli Zaretskii  <address@hidden>
+
+       Add missing *.pbm images
+       * etc/images/connect.pbm: New file.
+       * etc/images/custom/down-pushed.pbm: New file.
+       * etc/images/custom/down.pbm: New file.
+       * etc/images/custom/right-pushed.pbm: New file.
+       * etc/images/custom/right.pbm: New file.
+       * etc/images/describe.pbm: New file.
+       * etc/images/disconnect.pbm: New file.
+       * etc/images/ezimage/bits.pbm: New file.
+       * etc/images/ezimage/bitsbang.pbm: New file.
+       * etc/images/ezimage/box-minus.pbm: New file.
+       * etc/images/ezimage/box-plus.pbm: New file.
+       * etc/images/ezimage/box.pbm: New file.
+       * etc/images/ezimage/checkmark.pbm: New file.
+       * etc/images/ezimage/dir-minus.pbm: New file.
+       * etc/images/ezimage/dir-plus.pbm: New file.
+       * etc/images/ezimage/dir.pbm: New file.
+       * etc/images/ezimage/doc-minus.pbm: New file.
+       * etc/images/ezimage/doc-plus.pbm: New file.
+       * etc/images/ezimage/doc.pbm: New file.
+       * etc/images/ezimage/info.pbm: New file.
+       * etc/images/ezimage/key.pbm: New file.
+       * etc/images/ezimage/label.pbm: New file.
+       * etc/images/ezimage/lock.pbm: New file.
+       * etc/images/ezimage/mail.pbm: New file.
+       * etc/images/ezimage/page-minus.pbm: New file.
+       * etc/images/ezimage/page-plus.pbm: New file.
+       * etc/images/ezimage/page.pbm: New file.
+       * etc/images/ezimage/tag-gt.pbm: New file.
+       * etc/images/ezimage/tag-minus.pbm: New file.
+       * etc/images/ezimage/tag-plus.pbm: New file.
+       * etc/images/ezimage/tag-type.pbm: New file.
+       * etc/images/ezimage/tag-v.pbm: New file.
+       * etc/images/ezimage/tag.pbm: New file.
+       * etc/images/ezimage/unlock.pbm: New file.
+       * etc/images/gnus/important.pbm: New file.
+       * etc/images/gnus/mail-send.pbm: New file.
+       * etc/images/gnus/receipt.pbm: New file.
+       * etc/images/gnus/toggle-subscription.pbm: New file.
+       * etc/images/gnus/unimportant.pbm: New file.
+       * etc/images/gud/all.pbm: New file.
+       * etc/images/gud/rcont.pbm: New file.
+       * etc/images/gud/recstart.pbm: New file.
+       * etc/images/gud/recstop.pbm: New file.
+       * etc/images/gud/rfinish.pbm: New file.
+       * etc/images/gud/rnext.pbm: New file.
+       * etc/images/gud/rnexti.pbm: New file.
+       * etc/images/gud/rstep.pbm: New file.
+       * etc/images/gud/rstepi.pbm: New file.
+       * etc/images/gud/thread.pbm: New file.
+       * etc/images/lock-broken.pbm: New file.
+       * etc/images/lock-ok.pbm: New file.
+       * etc/images/lock.pbm: New file.
+       * etc/images/mail/copy.pbm: New file.
+       * etc/images/mail/forward.pbm: New file.
+       * etc/images/mail/not-spam.pbm: New file.
+       * etc/images/mail/outbox.pbm: New file.
+       * etc/images/mail/preview.pbm: New file.
+       * etc/images/mail/save-draft.pbm: New file.
+       * etc/images/mh-logo.pbm: New file.
+       * etc/images/mpc/add.pbm: New file.
+       * etc/images/mpc/ffwd.pbm: New file.
+       * etc/images/mpc/next.pbm: New file.
+       * etc/images/mpc/pause.pbm: New file.
+       * etc/images/mpc/play.pbm: New file.
+       * etc/images/mpc/prev.pbm: New file.
+       * etc/images/mpc/rewind.pbm: New file.
+       * etc/images/mpc/stop.pbm: New file.
+       * etc/images/redo.pbm: New file.
+       * etc/images/smilies/braindamaged.pbm: New file.
+       * etc/images/smilies/cry.pbm: New file.
+       * etc/images/smilies/dead.pbm: New file.
+       * etc/images/smilies/evil.pbm: New file.
+       * etc/images/smilies/forced.pbm: New file.
+       * etc/images/smilies/grin.pbm: New file.
+       * etc/images/smilies/indifferent.pbm: New file.
+       * etc/images/sort-ascending.pbm: New file.
+       * etc/images/sort-column-ascending.pbm: New file.
+       * etc/images/sort-criteria.pbm: New file.
+       * etc/images/sort-descending.pbm: New file.
+       * etc/images/sort-row-ascending.pbm: New file.
+       * etc/images/unchecked.pbm: New file.
+       * etc/images/zoom-in.pbm: New file.
+       * etc/images/README: Update instructions for PBM files.
+
+       Add separator.pbm tool-bar image
+       * etc/images/separator.pbm: New file.  Having it avoids the side
+       effect of changing the tool-bar height when the default font's size
+       changes and XPM image support is not available, due to the SPC
+       characters that are left in the Lisp string used to display the tool
+       bar, because there are no images to display instead of those SPC
+       characters.
+
+       Make show-paren-match face visible on mono-color displays
+       * lisp/faces.el (show-paren-match): Use the underline face for
+       mono-color displays.  (Bug#21481)
+
+2015-09-14  Paul Eggert  <address@hidden>
+
+       Don’t double-encode non-ASCII mail clipboard
+       * lisp/mail/mailclient.el (mailclient-send-it):
+       Also fix the case when mailclient-place-body-on-clipboard-flag
+       is non-nil.  Problem reported by Eli Zaretskii (Bug#21471#37).
+
+2015-09-14  Michael Albinus  <address@hidden>
+
+       Adapt file-notify-tests.el test cases
+       * lisp/filenotify.el (file-notify-rm-watch): Ignore `file-notify-error'.
+       * src/inotify.c (Finotify_valid_p): Adapt docstring.
+       * test/automated/file-notify-tests.el ()
+       (file-notify-test03-autorevert)
+       (file-notify-test04-file-validity)
+       (file-notify-test04-file-validity-remote)
+       (file-notify-test05-dir-validity)
+       (file-notify-test05-dir-validity-remote): Adapt docstring.
+       (file-notify-test04-file-validity): Let events arrive before
+       calling final `file-notify-valid-p'.  Do not ignore errors.
+       (file-notify-test05-dir-validity): Do not manipulate
+       `temporary-file-directory', it isn't necessary.  Let events arrive
+       before calling final `file-notify-valid-p'.  Do not ignore errors.
+
+2015-09-14  Paul Eggert  <address@hidden>
+
+       Don’t double-encode non-ASCII for mail client
+       * lisp/mail/mailclient.el (mailclient-encode-string-as-url):
+       Use RFC 6068’s list of unreserved characters.
+       (mailclient-send-it): When encoding the body as a URL,
+       first decode it as per Content-Type: and Content-Transfer-Encoding:,
+       as URLs must use percent-encoded UTF-8 (Bug#21471).
+       * doc/misc/url.texi (mailto): Update RFC number.
+
+2015-09-14  Stefan Monnier  <address@hidden>
+
+       * lisp/progmodes/cc-langs.el (c-make-init-lang-vars-fun): Use dolist.
+
+2015-09-14  Alan Mackenzie  <address@hidden>
+
+       Replace `cadar' with `cadr/car', since `cadar' is problematic on Emacs.
+       (c-make-init-lang-vars-fun): Replace two occurrences of `cadar' with
+       `cadr/car'.
+
+2015-09-14  Eli Zaretskii  <address@hidden>
+
+       Clarify documentation of char-table extra slots
+       * doc/lispref/sequences.texi (Char-Tables): Clarify that extra
+       slot numbers are zero-based.  (Bug#21467)
+
+2015-09-14  Alan Mackenzie  <address@hidden>
+
+       Elisp mode: Make font-lock and imenu handle escaped characters in 
symbols
+       Fixes debbugs#21449.
+       lisp/emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression)
+       (lisp--el-match-keyword, lisp-el-font-lock-keywords-1)
+       (lisp-cl-font-lock-keywords-1, lisp-el-font-lock-keywords-2)
+       (lisp-cl-font-lock-keywords-2, lisp-string-in-doc-position-p):
+       Insert "\\|\\\\." into regexps which match symbols.
+
+2015-09-14  Eli Zaretskii  <address@hidden>
+
+       Improve the doc string of w32notify-valid-p
+       * src/w32notify.c (Fw32notify_valid_p): Mention in the doc string
+       that removing a watch makes its object invalid.
+
+2015-09-14  Tassilo Horn  <address@hidden>
+
+       Fix tests for file-notify-valid-p.
+       * test/automated/file-notify-tests.el (file-notify--test-cleanup):
+       Use delete-directory to delete file-notify--test-tmpfile if it is
+       a directory.  Likewise for file-notify--test-tmpfile1.
+       (file-notify-test04-file-validity)
+       (file-notify-test05-dir-validity): Delete the parent directory of
+       the test.  Ignore errors when cleaning up after the test.
+
+2015-09-14  Eli Zaretskii  <address@hidden>
+
+       Report file-notify-error in w32notify.c
+       * src/w32notify.c (report_w32notify_error): New function.
+       (Fw32notify_add_watch, Fw32notify_rm_watch): Use it to report
+       errors, instead of calling report_file_error.  (Bug#21432)
+
+       Implement w32notify-valid-p
+       * src/w32notify.c (Fw32notify_valid_p): New function.  (Bug#21432)
+       * lisp/filenotify.el (w32notify-valid-p): No longer an alias for
+       'identity'.
+
+2015-09-14  Tassilo Horn  <address@hidden>
+
+       Test file-notify-valid-p.
+       * test/automated/file-notify-tests.el
+       (file-notify-test04-file-validity, file-notify-test05-dir-validity): New
+       tests.
+
+2015-09-13  Eli Zaretskii  <address@hidden>
+
+       Fix markup in ELisp manual
+       * doc/lispref/frames.texi (Font and Color Parameters): Fix markup
+       of the 'alpha' parameter value.  (Bug#21470)
+
+2015-09-13  Michael Albinus  <address@hidden>
+
+       Introduce `file-notify-valid-p'
+       * lisp/filenotify.el (file-notify-valid-p): New defun.
+       (gfile-valid-p, w32notify-valid-p): Make them an alias to `identity'.
+       * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist)
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist)
+       * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist)
+       * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist)
+       <file-notify-valid-p>: Add handler.
+       * lisp/net/tramp.el (tramp-file-name-for-operation):
+       Add `file-notify-valid-p'.
+       (tramp-handle-file-notify-valid-p): New defun.
+       * src/inotify.c (Finotify_valid_p): New defun.
+       (syms_of_inotify): Declare Sinotify_valid_p.
+
+2015-09-13  Paul Eggert  <address@hidden>
+
+       Port Unicode char detection to FreeBSD+svgalib
+       Problem reported by Ashish SHUKLA in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00531.html
+       * configure.ac: Check for struct unipair.unicode instead of for
+       <linux/kd.h>, since that’s more specific to what the code actually 
needs.
+       * src/terminal.c: Use HAVE_STRUCT_UNIPAIR_UNICODE, not HAVE_LINUX_KD_H.
+
+       * src/indent.c (Fvertical_motion): Simplify bugfix (Bug#21468).
+
+2015-09-13  Eli Zaretskii  <address@hidden>
+
+       Fix vertical cursor motion across overlay strings with newlines
+       * src/indent.c (Fvertical_motion): Don't leave point in the middle
+       of an overlay string with newlines, as that will position the
+       cursor after the string at whatever column is there.  (Bug#21468)
+
+2015-09-12  Michael Albinus  <address@hidden>
+
+       Fix tests in file-notify-tests.el
+       * test/automated/file-notify-tests.el: Remove Tramp declarations.
+       (file-notify-test00-availability): Print remote command w/o Tramp
+       internal functions.
+       (file-notify-test02-events, file-notify-test02-events-remote):
+       Adapt docstring.
+       (file-notify-test03-autorevert): Use `format-message' when
+       inspecting *Messages* buffer.
+
+2015-09-12  Stefan Monnier  <address@hidden>
+
+       Bind inhibit-modification-hooks rather than a/b-c-f
+       * lisp/wid-edit.el (widget-editable-list-insert-before)
+       (widget-editable-list-delete-at):
+       * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres)
+       (cperl-font-lock-unfontify-region-function):
+       * lisp/progmodes/antlr-mode.el (save-buffer-state-x):
+       * lisp/obsolete/longlines.el (longlines-mode):
+       * lisp/obsolete/fast-lock.el (save-buffer-state):
+       * lisp/mouse.el (mouse-save-then-kill-delete-region):
+       * lisp/gnus/message.el (message-hide-headers):
+       * lisp/eshell/esh-mode.el (eshell-send-input, eshell-output-filter):
+       * lisp/ibuffer.el (ibuffer-update-title-and-summary)
+       (ibuffer-redisplay-engine): Bind inhibit-modification-hooks to t rather
+       than after/before-change-functions to nil.
+
+2015-09-11  Stefan Monnier  <address@hidden>
+
+       (jit-lock-deferred-fontify): Pay attention to skipped redisplays
+       * lisp/jit-lock.el (jit-lock-deferred-fontify): Make sure we refresh
+       the buffers, even if the forced redisplay is interrupted.
+
+       * lisp/emacs-lisp/eieio-core.el (class-p): Accept class objects
+
+       Merge syntax-propertize--done and parse-sexp-propertize-done
+       * lisp/emacs-lisp/syntax.el (syntax-propertize--done): Remove.
+       (syntax-propertize): Set syntax-propertize--done even if
+       syntax-propertize-function is nil.  Avoid recursive invocations.
+       (syntax-propertize-chunks): New var.
+       (internal--syntax-propertize): Use it.  Rename from 
syntax--jit-propertize.
+       Simplify.
+       (parse-sexp-propertize-function): Don't set any more.
+       * src/syntax.c (SETUP_SYNTAX_TABLE): Call parse_sexp_propertize as 
needed.
+       (parse_sexp_propertize): Don't assume charpos is not yet propertized.
+       Call Qinternal__syntax_propertize instead of
+       Vparse_sexp_propertize_function.  Truncate e_property if needed.
+       (update_syntax_table_forward): Streamline.
+       (syms_of_syntax): Define Qinternal__syntax_propertize.
+       (syntax_propertize__done): Rename from parse_sexp_propertize_done.
+
+2015-09-11  Paul Eggert  <address@hidden>
+
+       Prefer straight quoting in some text files
+       Mostly this just changes ` to ' in static text.  Some exceptions:
+       * INSTALL.REPO: Use curved quotes, as the diagnostic in question
+       typically does that now.
+       * admin/quick-install-emacs (TRY, top level):
+       Use straight quoting in diagnostics.
+       * src/README: Fix working-directory confusion.
+
+       * CONTRIBUTE: Move send-email here from git-workflow.
+
+2015-09-11  Michael Albinus  <address@hidden>
+
+       Improve file notifications in Tramp
+       * lisp/net/tramp-sh.el (tramp-sh-handle-file-notify-add-watch):
+       Set proper events to watch for.
+       (tramp-sh-file-gvfs-monitor-dir-process-filter): Report only
+       watched events.
+
+2015-09-11  Eli Zaretskii  <address@hidden>
+
+       Fix NS build with --enable-checking='glyphs'
+       * src/nsfns.m (unwind_create_frame): Make the preprocessor
+       conditionals for referencing 'dpyinfo' consistent throughout the
+       function.  (Bug#21426)
+
+2015-09-10  Nicolas Petton  <address@hidden>
+
+       Add seq-find
+       This function is similar to `seq-some' but returns the found element.
+       In the cases where nil can be the found element, a sentinel optional
+       argument can be provided to avoid ambiguities.
+       * lisp/emacs-lisp/seq.el (seq-find): New function.
+       * test/automated/seq-tests.el (test-seq-find): Add tests for `seq-find'.
+       * doc/lispref/sequences.texi (Sequence Functions): Add documentation for
+       seq-find.
+
+2015-09-10  Tassilo Horn  <address@hidden>
+
+       Document file-notify--test-with-events.
+       * test/automated/file-notify-tests.el (file-notify--test-with-events):
+       Add docstring.
+
+2015-09-10  Michael Albinus  <address@hidden>
+
+       Report used native library in file-notify-tests.el
+       * test/automated/file-notify-tests.el
+       (tramp-get-remote-gvfs-monitor-dir)
+       (tramp-get-remote-inotifywait): Declare them.
+       (file-notify-test00-availability): Print used native library.
+
+2015-09-10  Mark Oteiza  <address@hidden>
+
+       * lisp/mpc.el (mpc--proc-connect): Use file-name-absolute-p.
+       (mpc-file-local-copy): Check for absolute path.  Check more config
+       locations.
+
+2015-09-10  Eli Zaretskii  <address@hidden>
+
+       Improve documentation of categories
+       * doc/lispref/syntax.texi (Categories): Clarify the example of
+       using define-category and modify-category-entry.  (Bug#21448)
+
+2015-09-10  Paul Eggert  <address@hidden>
+
+       Revert some stray curved quotes I missed earlier
+       Problem reported by David Kastrup in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00440.html
+       * lisp/international/mule-cmds.el (leim-list-header):
+       Use format-message with an ASCII-only format.
+
+       Prefer NUMBERP to spelling it out
+       * src/editfns.c (styled_format):
+       * src/frame.h (NUMVAL):
+       * src/image.c (parse_image_spec):
+       * src/lisp.h (CHECK_NUMBER_OR_FLOAT)
+       (CHECK_NUMBER_OR_FLOAT_COERCE_MARKER):
+       * src/process.c (Fsignal_process):
+       * src/xdisp.c (calc_pixel_width_or_height, on_hot_spot_p):
+       * src/xfaces.c (check_lface_attrs):
+       * src/xselect.c (x_fill_property_data, x_send_client_event):
+       Use NUMBERP rather than INTEGERP || FLOATP.
+
+2015-09-10  Tassilo Horn  <address@hidden>
+
+       Improve file-notify-tests
+       * test/automated/file-notify-tests.el: Use lexical-binding
+       (file-notify--test-cleanup): New function.
+       (file-notify-test00-availability, file-notify-test01-add-watch)
+       (file-notify-test02-events, file-notify-test03-autorevert): Use it.
+       (file-notify--test-with-events): New macro.
+       (file-notify-test02-events): Use it.
+
+2015-09-10  Paul Eggert  <address@hidden>
+
+       Add patch-sending instructions to git-workflow
+       From a suggestion by Mitchel Humpherys in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00421.html
+       * admin/notes/git-workflow (Sending patches): New section.
+
+       Port to GIFLIB 5.0.6 and later
+       Problem reported by Mitchel Humpherys in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00420.html
+       * src/image.c (HAVE_GIFERRORSTRING) [HAVE_GIF]: New macro.
+       (GifErrorString, init_gif_functions) [HAVE_GIF && WINDOWSNT]:
+       (gif_load) [HAVE_GIF]: Use it.
+
+2015-09-10  Glenn Morris  <address@hidden>
+
+       * lisp/cedet/ede/auto.el (ede-project-autoload): Doc fix.
+
+2015-09-09  Glenn Morris  <address@hidden>
+
+       * test/automated/file-notify-tests.el (file-notify-test02-events):
+       Fix recent change.
+
+2015-09-09  Paul Eggert  <address@hidden>
+
+       Refix movemail GCC pacification
+       Problem reported by Ken Brown in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00406.html
+       * lib-src/movemail.c (main): Fix previous change.
+
+2015-09-09  Stefan Monnier  <address@hidden>
+
+       (time-to-seconds, time-less-p): Mark unused vars with underscore
+       * lisp/calendar/time-date.el (time-to-seconds, time-less-p):
+       Mark unused vars with underscore.
+
+       * src/syntax.c (SETUP_SYNTAX_TABLE): Move truncation...
+       (parse_sexp_propertize): ...from here.
+
+       * lisp/filenotify.el: Use lexical-binding
+       (file-notify-add-watch): Avoid add-to-list.
+
+2015-09-09  Tassilo Horn  <address@hidden>
+
+       Start checking event types in file-notify tests
+       * test/automated/file-notify-tests.el (file-notify--test-events): New
+       variable.
+       (file-notify--test-event-handler): Append received event to
+       file-notify--test-events for later analysis.
+       (file-notify-test02-events): Assert that the expected notifications have
+       arrived in the expected order.
+
+2015-09-09  Paul Eggert  <address@hidden>
+
+       Merge from gnulib and texinfo
+       This incorporates:
+       2015-08-03 Improve port of stdalign to C++11
+       * lib/stdalign.in.h: Copy from gnulib.
+       * doc/misc/texinfo.tex: Copy from texinfo.
+
+2015-09-09  Stefan Monnier  <address@hidden>
+
+       Make syntax.c call syntax-propertize on demand
+       * lisp/emacs-lisp/syntax.el (syntax--jit-propertize): New function.
+       (parse-sexp-propertize-function): Use it.
+       (syntax-propertize): Disable parse-sexp-propertize-function.
+       * src/syntax.c (parse_sexp_propertize, update_syntax_table_forward):
+       New functions.
+       (syms_of_syntax): New vars `parse-sexp-propertize-done' and
+       `parse-sexp-propertize-function'.
+       * src/syntax.h (struct gl_state_s): Add `e_property_truncated' field.
+       (UPDATE_SYNTAX_TABLE_FORWARD): Use update_syntax_table_forward.
+       (SETUP_BUFFER_SYNTAX_TABLE): Set e_property_truncated.
+       * lisp/progmodes/elisp-mode.el (elisp-byte-code-syntax-propertize):
+       Don't assume `point' is set.
+
+2015-09-09  Eli Zaretskii  <address@hidden>
+
+       Fix indentation of an @example in ELisp manual
+       * doc/lispref/syntax.texi (Categories): Untabify the example.
+       (Bug#21448)
+
+2015-09-09  Paul Eggert  <address@hidden>
+
+       Define internal-char-font even if --without-x
+       The function is used now even in non-graphical environments.
+       Problem reported by Glenn Morris in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00401.html
+       * src/font.c (Finternal_char_font): Move here ...
+       * src/fontset.c (Finternal_char_font): ... from here.
+
+2015-09-09  Stefan Monnier  <address@hidden>
+
+       * lisp/emacs-lisp/cl-generic.el (cl-generic-generalizers): Remove
+       warning.
+
+2015-09-09  Eli Zaretskii  <address@hidden>
+
+       Fix display of complex local data types in GDB-MI
+       * lisp/progmodes/gdb-mi.el (gdb-locals-handler-custom): If a
+       variable has no value, display "<complex data type>" as a
+       placeholder, instead of a confusing "nil".  (Bug#21438)
+
+2015-09-09  Oleh Krehel  <address@hidden>
+
+       Remove redundant redefinition of seq-drop-while from seq.el
+       * lisp/emacs-lisp/seq.el (seq-drop-while): Define only once.
+
+2015-09-09  Phil Sainty  <address@hidden>
+
+       * lisp/emacs-lisp/package.el (package--ensure-init-file)
+       More robust check for `package-initialize' calls in init file.
+       This function accepts an optional argument, but calls passing
+       an argument would not have been detected.
+
+2015-09-09  Paul Eggert  <address@hidden>
+
+       Port movemail to RHEL 6 with --enable-gcc-warnings
+       * lib-src/movemail.c (main): Declare local only if needed.
+
+       Port recent Linux console changes to RHEL 6
+       * src/terminal.c [HAVE_LINUX_KD_H]: Include <sys/ioctl.h>.
+
+       Improvements for curved quotes on Linux consule
+       This should help Emacs work better out-of-the-box on Linux consoles,
+       which have only limited support for displaying Unicode characters.
+       Also, undo the recent change that caused text-quoting-style to
+       affect quote display on terminals, so that the two features are
+       independent.  See Alan Mackenzie in:
+       http://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00244.html
+       Finally, add a style parameter to startup--setup-quote-display,
+       so that this function can also be invoked after startup, with
+       different styles depending on user preference at the time.
+       * configure.ac: Check for linux/kd.h header.
+       * doc/emacs/display.texi (Text Display): Document quote display.
+       * doc/lispref/display.texi (Active Display Table):
+       * etc/NEWS:
+       * lisp/startup.el (startup--setup-quote-display, command-line):
+       text-quoting-style no longer affects quote display.
+       * doc/lispref/frames.texi (Terminal Parameters): Fix typo.
+       * lisp/international/mule-util.el (char-displayable-p):
+       * lisp/startup.el (startup--setup-quote-display):
+       On a text terminal supporting glyph codes, use the reported
+       glyph codes instead of the terminal coding system, as this
+       is more accurate on the Linux console.
+       * lisp/startup.el (startup--setup-quote-display):
+       New optional arg STYLE.
+       * src/fontset.c (Finternal_char_font):
+       Report glyph codes for a text terminal, if they are available.
+       Currently this is supported only for the Linux console.
+       * src/termhooks.h (struct terminal): New member glyph-code-table.
+       * src/terminal.c [HAVE_LINUX_KD_H]: Include <errno.h>, <linux/kd.h>.
+       (calculate_glyph_code_table) [HAVE_LINUX_KD_H]: New function.
+       (terminal_glyph_code): New function.
+
+2015-09-08  Juri Linkov  <address@hidden>
+
+       * lisp/info.el (Info-fontify-node): Don't stop at the non-title
+       underline.  (Bug#21433)
+
+2015-09-08  Stefan Monnier  <address@hidden>
+
+       * lisp/calendar/time-date.el (with-decoded-time-value): Fix debug spec.
+
+2015-09-08  Tassilo Horn  <address@hidden>
+
+       Fix double-reporting of rename events with inotify
+       * lisp/filenotify.el (file-notify-callback): Fix double-reporting
+       of rename events with inotify (bug#21435).
+
+2015-09-08  Vasilij Schneidermann  <address@hidden>  (tiny change)
+
+       * lisp/play/tetris.el (tetris-move-down): New command (bug#21360).
+       (tetris-mode-map): Use it.
+
+2015-09-08  Stefan Monnier  <address@hidden>
+
+       Remove a few simple cases of global redisplay
+       * src/dispnew.c (redraw_frame): Don't redisplay all frames.
+       * src/xdisp.c (echo_area_display): Set the frame's `redisplay' bit
+       rather than returning a "resized_p" boolean.
+       (redisplay_internal): Adjust call accordingly.
+       * src/xfaces.c (free_realized_faces): Don't redisplay all frames.
+       (free_all_realized_faces): Set windows_or_buffers_changed so as to ease
+       tracking of this undesirable situation.
+
+       * src/process.c (status_notify): Avoid global redisplay (bug#11822)
+       * src/process.c (status_notify): Only set the update_mode_line on the
+       relevant buffers rather than setting it globally.
+
+2015-09-07  Stefan Monnier  <address@hidden>
+
+       * lisp/electric.el (electric-quote-post-self-insert-function):
+       Don't use syntax-ppss if comment-use-syntax is nil (e.g. message-mode).
+       (electric-quote-mode): Activate everywhere in message-mode.
+
+2015-09-07  Paul Eggert  <address@hidden>
+
+       Go back to grave quoting in source-code docstrings etc.
+       This reverts almost all my recent changes to use curved quotes
+       in docstrings and/or strings used for error diagnostics.
+       There are a few exceptions, e.g., Bahá’í proper names.
+       * admin/unidata/unidata-gen.el (unidata-gen-table):
+       * lisp/abbrev.el (expand-region-abbrevs):
+       * lisp/align.el (align-region):
+       * lisp/allout.el (allout-mode, allout-solicit-alternate-bullet)
+       (outlineify-sticky):
+       * lisp/apropos.el (apropos-library):
+       * lisp/bookmark.el (bookmark-default-annotation-text):
+       * lisp/button.el (button-category-symbol, button-put)
+       (make-text-button):
+       * lisp/calc/calc-aent.el (math-read-if, math-read-factor):
+       * lisp/calc/calc-embed.el (calc-do-embedded):
+       * lisp/calc/calc-ext.el (calc-user-function-list):
+       * lisp/calc/calc-graph.el (calc-graph-show-dumb):
+       * lisp/calc/calc-help.el (calc-describe-key)
+       (calc-describe-thing, calc-full-help):
+       * lisp/calc/calc-lang.el (calc-c-language)
+       (math-parse-fortran-vector-end, math-parse-tex-sum)
+       (math-parse-eqn-matrix, math-parse-eqn-prime)
+       (calc-yacas-language, calc-maxima-language, calc-giac-language)
+       (math-read-giac-subscr, math-read-math-subscr)
+       (math-read-big-rec, math-read-big-balance):
+       * lisp/calc/calc-misc.el (calc-help, report-calc-bug):
+       * lisp/calc/calc-mode.el (calc-auto-why, calc-save-modes)
+       (calc-auto-recompute):
+       * lisp/calc/calc-prog.el (calc-fix-token-name)
+       (calc-read-parse-table-part, calc-user-define-invocation)
+       (math-do-arg-check):
+       * lisp/calc/calc-store.el (calc-edit-variable):
+       * lisp/calc/calc-units.el (math-build-units-table-buffer):
+       * lisp/calc/calc-vec.el (math-read-brackets):
+       * lisp/calc/calc-yank.el (calc-edit-mode):
+       * lisp/calc/calc.el (calc, calc-do, calc-user-invocation):
+       * lisp/calendar/appt.el (appt-display-message):
+       * lisp/calendar/diary-lib.el (diary-check-diary-file)
+       (diary-mail-entries, diary-from-outlook):
+       * lisp/calendar/icalendar.el (icalendar-export-region)
+       (icalendar--convert-float-to-ical)
+       (icalendar--convert-date-to-ical)
+       (icalendar--convert-ical-to-diary)
+       (icalendar--convert-recurring-to-diary)
+       (icalendar--add-diary-entry):
+       * lisp/calendar/time-date.el (format-seconds):
+       * lisp/calendar/timeclock.el (timeclock-mode-line-display)
+       (timeclock-make-hours-explicit, timeclock-log-data):
+       * lisp/calendar/todo-mode.el (todo-prefix, todo-delete-category)
+       (todo-item-mark, todo-check-format)
+       (todo-insert-item--next-param, todo-edit-item--next-key)
+       (todo-mode):
+       * lisp/cedet/ede/pmake.el (ede-proj-makefile-insert-dist-rules):
+       * lisp/cedet/mode-local.el (describe-mode-local-overload)
+       (mode-local-print-binding, mode-local-describe-bindings-2):
+       * lisp/cedet/semantic/complete.el (semantic-displayor-show-request):
+       * lisp/cedet/srecode/srt-mode.el (srecode-macro-help):
+       * lisp/cus-start.el (standard):
+       * lisp/cus-theme.el (describe-theme-1):
+       * lisp/custom.el (custom-add-dependencies, custom-check-theme)
+       (custom--sort-vars-1, load-theme):
+       * lisp/descr-text.el (describe-text-properties-1, describe-char):
+       * lisp/dired-x.el (dired-do-run-mail):
+       * lisp/dired.el (dired-log):
+       * lisp/emacs-lisp/advice.el (ad-read-advised-function)
+       (ad-read-advice-class, ad-read-advice-name, ad-enable-advice)
+       (ad-disable-advice, ad-remove-advice, ad-set-argument)
+       (ad-set-arguments, ad--defalias-fset, ad-activate)
+       (ad-deactivate):
+       * lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand)
+       (byte-compile-unfold-lambda, byte-optimize-form-code-walker)
+       (byte-optimize-while, byte-optimize-apply):
+       * lisp/emacs-lisp/byte-run.el (defun, defsubst):
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode)
+       (byte-compile-log-file, byte-compile-format-warn)
+       (byte-compile-nogroup-warn, byte-compile-arglist-warn)
+       (byte-compile-cl-warn)
+       (byte-compile-warn-about-unresolved-functions)
+       (byte-compile-file, byte-compile--declare-var)
+       (byte-compile-file-form-defmumble, byte-compile-form)
+       (byte-compile-normal-call, byte-compile-check-variable)
+       (byte-compile-variable-ref, byte-compile-variable-set)
+       (byte-compile-subr-wrong-args, byte-compile-setq-default)
+       (byte-compile-negation-optimizer)
+       (byte-compile-condition-case--old)
+       (byte-compile-condition-case--new, byte-compile-save-excursion)
+       (byte-compile-defvar, byte-compile-autoload)
+       (byte-compile-lambda-form)
+       (byte-compile-make-variable-buffer-local, display-call-tree)
+       (batch-byte-compile):
+       * lisp/emacs-lisp/cconv.el (cconv-convert, cconv--analyze-use):
+       * lisp/emacs-lisp/chart.el (chart-space-usage):
+       * lisp/emacs-lisp/check-declare.el (check-declare-scan)
+       (check-declare-warn, check-declare-file)
+       (check-declare-directory):
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine)
+       (checkdoc-message-text-engine):
+       * lisp/emacs-lisp/cl-extra.el (cl-parse-integer)
+       (cl--describe-class):
+       * lisp/emacs-lisp/cl-generic.el (cl-defgeneric)
+       (cl--generic-describe, cl-generic-generalizers):
+       * lisp/emacs-lisp/cl-macs.el (cl--parse-loop-clause, cl-tagbody)
+       (cl-symbol-macrolet):
+       * lisp/emacs-lisp/cl.el (cl-unload-function, flet):
+       * lisp/emacs-lisp/copyright.el (copyright)
+       (copyright-update-directory):
+       * lisp/emacs-lisp/edebug.el (edebug-read-list):
+       * lisp/emacs-lisp/eieio-base.el (eieio-persistent-read):
+       * lisp/emacs-lisp/eieio-core.el (eieio--slot-override)
+       (eieio-oref):
+       * lisp/emacs-lisp/eieio-opt.el (eieio-help-constructor):
+       * lisp/emacs-lisp/eieio-speedbar.el:
+       (eieio-speedbar-child-make-tag-lines)
+       (eieio-speedbar-child-description):
+       * lisp/emacs-lisp/eieio.el (defclass, change-class):
+       * lisp/emacs-lisp/elint.el (elint-file, elint-get-top-forms)
+       (elint-init-form, elint-check-defalias-form)
+       (elint-check-let-form):
+       * lisp/emacs-lisp/ert.el (ert-get-test, ert-results-mode-menu)
+       (ert-results-pop-to-backtrace-for-test-at-point)
+       (ert-results-pop-to-messages-for-test-at-point)
+       (ert-results-pop-to-should-forms-for-test-at-point)
+       (ert-describe-test):
+       * lisp/emacs-lisp/find-func.el (find-function-search-for-symbol)
+       (find-function-library):
+       * lisp/emacs-lisp/generator.el (iter-yield):
+       * lisp/emacs-lisp/gv.el (gv-define-simple-setter):
+       * lisp/emacs-lisp/lisp-mnt.el (lm-verify):
+       * lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning):
+       * lisp/emacs-lisp/map-ynp.el (map-y-or-n-p):
+       * lisp/emacs-lisp/nadvice.el (advice--make-docstring)
+       (advice--make, define-advice):
+       * lisp/emacs-lisp/package-x.el (package-upload-file):
+       * lisp/emacs-lisp/package.el (package-version-join)
+       (package-disabled-p, package-activate-1, package-activate)
+       (package--download-one-archive)
+       (package--download-and-read-archives)
+       (package-compute-transaction, package-install-from-archive)
+       (package-install, package-install-selected-packages)
+       (package-delete, package-autoremove, describe-package-1)
+       (package-install-button-action, package-delete-button-action)
+       (package-menu-hide-package, package-menu--list-to-prompt)
+       (package-menu--perform-transaction)
+       (package-menu--find-and-notify-upgrades):
+       * lisp/emacs-lisp/pcase.el (pcase-exhaustive, pcase--u1):
+       * lisp/emacs-lisp/re-builder.el (reb-enter-subexp-mode):
+       * lisp/emacs-lisp/ring.el (ring-previous, ring-next):
+       * lisp/emacs-lisp/rx.el (rx-check, rx-anything)
+       (rx-check-any-string, rx-check-any, rx-check-not, rx-=)
+       (rx-repeat, rx-check-backref, rx-syntax, rx-check-category)
+       (rx-form):
+       * lisp/emacs-lisp/smie.el (smie-config-save):
+       * lisp/emacs-lisp/subr-x.el (internal--check-binding):
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-put-tag):
+       * lisp/emacs-lisp/testcover.el (testcover-1value):
+       * lisp/emacs-lisp/timer.el (timer-event-handler):
+       * lisp/emulation/viper-cmd.el (viper-toggle-parse-sexp-ignore-comments)
+       (viper-toggle-search-style, viper-kill-buffer)
+       (viper-brac-function):
+       * lisp/emulation/viper-macs.el (viper-record-kbd-macro):
+       * lisp/env.el (setenv):
+       * lisp/erc/erc-button.el (erc-nick-popup):
+       * lisp/erc/erc.el (erc-cmd-LOAD, erc-handle-login, english):
+       * lisp/eshell/em-dirs.el (eshell/cd):
+       * lisp/eshell/em-glob.el (eshell-glob-regexp)
+       (eshell-glob-entries):
+       * lisp/eshell/em-pred.el (eshell-parse-modifiers):
+       * lisp/eshell/esh-opt.el (eshell-show-usage):
+       * lisp/facemenu.el (facemenu-add-new-face)
+       (facemenu-add-new-color):
+       * lisp/faces.el (read-face-name, read-face-font, describe-face)
+       (x-resolve-font-name):
+       * lisp/files-x.el (modify-file-local-variable):
+       * lisp/files.el (locate-user-emacs-file, find-alternate-file)
+       (set-auto-mode, hack-one-local-variable--obsolete)
+       (dir-locals-set-directory-class, write-file, basic-save-buffer)
+       (delete-directory, copy-directory, recover-session)
+       (recover-session-finish, insert-directory)
+       (file-modes-char-to-who, file-modes-symbolic-to-number)
+       (move-file-to-trash):
+       * lisp/filesets.el (filesets-add-buffer, filesets-remove-buffer):
+       * lisp/find-cmd.el (find-generic, find-to-string):
+       * lisp/finder.el (finder-commentary):
+       * lisp/font-lock.el (font-lock-fontify-buffer):
+       * lisp/format.el (format-write-file, format-find-file)
+       (format-insert-file):
+       * lisp/frame.el (get-device-terminal, select-frame-by-name):
+       * lisp/fringe.el (fringe--check-style):
+       * lisp/gnus/nnmairix.el (nnmairix-widget-create-query):
+       * lisp/help-fns.el (help-fns--key-bindings)
+       (help-fns--compiler-macro, help-fns--parent-mode)
+       (help-fns--obsolete, help-fns--interactive-only)
+       (describe-function-1, describe-variable):
+       * lisp/help.el (describe-mode)
+       (describe-minor-mode-from-indicator):
+       * lisp/image.el (image-type):
+       * lisp/international/ccl.el (ccl-dump):
+       * lisp/international/fontset.el (x-must-resolve-font-name):
+       * lisp/international/mule-cmds.el (prefer-coding-system)
+       (select-safe-coding-system-interactively)
+       (select-safe-coding-system, activate-input-method)
+       (toggle-input-method, describe-current-input-method)
+       (describe-language-environment):
+       * lisp/international/mule-conf.el (code-offset):
+       * lisp/international/mule-diag.el (describe-character-set)
+       (list-input-methods-1):
+       * lisp/mail/feedmail.el (feedmail-run-the-queue):
+       * lisp/mouse.el (minor-mode-menu-from-indicator):
+       * lisp/mpc.el (mpc-playlist-rename):
+       * lisp/msb.el (msb--choose-menu):
+       * lisp/net/ange-ftp.el (ange-ftp-shell-command):
+       * lisp/net/imap.el (imap-interactive-login):
+       * lisp/net/mairix.el (mairix-widget-create-query):
+       * lisp/net/newst-backend.el (newsticker--sentinel-work):
+       * lisp/net/newst-treeview.el (newsticker--treeview-load):
+       * lisp/net/rlogin.el (rlogin):
+       * lisp/obsolete/iswitchb.el (iswitchb-possible-new-buffer):
+       * lisp/obsolete/otodo-mode.el (todo-more-important-p):
+       * lisp/obsolete/pgg-gpg.el (pgg-gpg-process-region):
+       * lisp/obsolete/pgg-pgp.el (pgg-pgp-process-region):
+       * lisp/obsolete/pgg-pgp5.el (pgg-pgp5-process-region):
+       * lisp/org/ob-core.el (org-babel-goto-named-src-block)
+       (org-babel-goto-named-result):
+       * lisp/org/ob-fortran.el (org-babel-fortran-ensure-main-wrap):
+       * lisp/org/ob-ref.el (org-babel-ref-resolve):
+       * lisp/org/org-agenda.el (org-agenda-prepare):
+       * lisp/org/org-clock.el (org-clock-notify-once-if-expired)
+       (org-clock-resolve):
+       * lisp/org/org-ctags.el (org-ctags-ask-rebuild-tags-file-then-find-tag):
+       * lisp/org/org-feed.el (org-feed-parse-atom-entry):
+       * lisp/org/org-habit.el (org-habit-parse-todo):
+       * lisp/org/org-mouse.el (org-mouse-popup-global-menu)
+       (org-mouse-context-menu):
+       * lisp/org/org-table.el (org-table-edit-formulas):
+       * lisp/org/ox.el (org-export-async-start):
+       * lisp/proced.el (proced-log):
+       * lisp/progmodes/ada-mode.el (ada-get-indent-case)
+       (ada-check-matching-start, ada-goto-matching-start):
+       * lisp/progmodes/ada-prj.el (ada-prj-display-page):
+       * lisp/progmodes/ada-xref.el (ada-find-executable):
+       * lisp/progmodes/ebrowse.el (ebrowse-tags-apropos):
+       * lisp/progmodes/etags.el (etags-tags-apropos-additional):
+       * lisp/progmodes/flymake.el (flymake-parse-err-lines)
+       (flymake-start-syntax-check-process):
+       * lisp/progmodes/python.el (python-shell-get-process-or-error)
+       (python-define-auxiliary-skeleton):
+       * lisp/progmodes/sql.el (sql-comint):
+       * lisp/progmodes/verilog-mode.el (verilog-load-file-at-point):
+       * lisp/progmodes/vhdl-mode.el (vhdl-widget-directory-validate):
+       * lisp/recentf.el (recentf-open-files):
+       * lisp/replace.el (query-replace-read-from)
+       (occur-after-change-function, occur-1):
+       * lisp/scroll-bar.el (scroll-bar-columns):
+       * lisp/server.el (server-get-auth-key):
+       * lisp/simple.el (execute-extended-command)
+       (undo-outer-limit-truncate, list-processes--refresh)
+       (compose-mail, set-variable, choose-completion-string)
+       (define-alternatives):
+       * lisp/startup.el (site-run-file, tty-handle-args, command-line)
+       (command-line-1):
+       * lisp/subr.el (noreturn, define-error, add-to-list)
+       (read-char-choice, version-to-list):
+       * lisp/term/common-win.el (x-handle-xrm-switch)
+       (x-handle-name-switch, x-handle-args):
+       * lisp/term/x-win.el (x-handle-parent-id, x-handle-smid):
+       * lisp/textmodes/reftex-ref.el (reftex-label):
+       * lisp/textmodes/reftex-toc.el (reftex-toc-rename-label):
+       * lisp/textmodes/two-column.el (2C-split):
+       * lisp/tutorial.el (tutorial--describe-nonstandard-key)
+       (tutorial--find-changed-keys):
+       * lisp/type-break.el (type-break-noninteractive-query):
+       * lisp/wdired.el (wdired-do-renames, wdired-do-symlink-changes)
+       (wdired-do-perm-changes):
+       * lisp/whitespace.el (whitespace-report-region):
+       Prefer grave quoting in source-code strings used to generate help
+       and diagnostics.
+       * lisp/faces.el (face-documentation):
+       No need to convert quotes, since the result is a docstring.
+       * lisp/info.el (Info-virtual-index-find-node)
+       (Info-virtual-index, info-apropos):
+       Simplify by generating only curved quotes, since info files are
+       typically that ways nowadays anyway.
+       * lisp/international/mule-diag.el (list-input-methods):
+       Don’t assume text quoting style is curved.
+       * lisp/org/org-bibtex.el (org-bibtex-fields):
+       Revert my recent changes, going back to the old quoting style.
+
+2015-09-07  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el: Reduce autoloading before compiling
+       (package--autoloads-file-name)
+       (package--activate-autoloads-and-load-path): New function.
+       (package-activate-1): Delegate autoloading and load-path
+       configuration to `package--activate-autoloads-and-load-path'.
+       (package--compile): Before compilation, call
+       `package--activate-autoloads-and-load-path' instead of
+       `package-activate-1'.
+
+2015-09-07  Stefan Monnier  <address@hidden>
+
+       * src/keyboard.c (read_key_sequence): Complete last fix (bug#21403).
+
+2015-09-07  Eli Zaretskii  <address@hidden>
+
+       Fix deletion of symlinks to directories on MS-Windows
+       * src/w32.c (sys_unlink): If 'unlink' fails, and the argument is a
+       symlink to a directory, try again with 'rmdir'.
+       (is_symlink): If the argument is a symlink to a directory, set a
+       bit in the return value to indicate that fact.
+
+2015-09-07  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el (package-initialize): Set enable-at-startup
+       When `package-initialize' is called as part of loading the init file,
+       the user probably doesn't want it to be called again afterwards. In this
+       situation, `package-initialize' now sets `package-enable-at-startup' to
+       nil to prevent that. The user can have the old behaviour by setting this
+       variable to t after the call to `package-initialize'.  (Bug#21423)
+       * doc/emacs/package.texi (Package Installation): Document it.
+       * doc/lispref/package.texi (Packaging Basics): Document it.
+       * etc/NEWS: Document it.
+
+2015-09-06  Thomas Fitzsimmons  <address@hidden>
+
+       Bump version of ntlm.el to 2.00
+       * lisp/net/ntlm.el: Bump version to 2.00.  New maintainer.  Add comm
+       keyword.
+
+2015-09-06  Adam Sjøgren  <address@hidden>
+
+       * doc/misc/gnus.texi (Mail Source Specifiers):
+       Allow :mailbox to be a list.
+
+2015-09-06  Dmitry Gutov  <address@hidden>
+
+       Allow even one non-regular character before the implicit tag name
+       * lisp/progmodes/etags.el (etags-tags-completion-table):
+       Allow even one non-regular character before the implicit tag name.
+       Reported at http://emacs.stackexchange.com/questions/15269/.
+
+2015-09-06  Thomas Fitzsimmons  <address@hidden>
+
+       Add support for NTLMv2 authentication
+       * net/ntlm.el (ntlm): New customization group.
+       (ntlm-compatibility-level): New defcustom.
+       (ntlm-compute-timestamp): New function.
+       (ntlm-generate-nonce): Likewise.
+       (ntlm-build-auth-response): Add support for NTLMv2 authentication.
+
+2015-09-06  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el: Rename custom faces
+       All of the recently introduced faces, like `package-name-face', have
+       been renamed to no end in `-face' to comply with the convention
+       described in (info "(elisp) Defining Faces").
+       (package-name, package-description)
+       (package-status-built-in, package-status-external)
+       (package-status-available, package-status-new)
+       (package-status-held, package-status-disabled)
+       (package-status-installed, package-status-dependency)
+       (package-status-unsigned, package-status-incompat)
+       (package-status-avail-obso): New faces.
+       (package-menu--print-info-simple): Use them.
+
+2015-09-06  Adam Sjøgren  <address@hidden>
+
+       mail-source.el: Make the imap mail-source's :mailbox handle a list
+       * lisp/gnus/mail-source.el (mail-source-fetch-imap):
+       Allow :mailbox to be  a list.
+
+2015-09-06  Eric Abrahamsen  <address@hidden>
+
+       nnimap.el:  Handle nil arg to nnimap-request-group
+       * lisp/gnus/nnimap.el (nnimap-request-group):  Handle nil "info" arg.
+       This arg isn't always passed in, check it's not nil before making it
+       into a list.  The active arg will also be nil if the group is new,
+       check for that.
+
+2015-09-06  Michael Albinus  <address@hidden>
+
+       File notifications: Support renaming over directory boundaries
+       * lisp/filenotify.el (file-notify-handle-event):
+       (file-notify--pending-event): Adapt docstring.
+       (file-notify--descriptor, file-notify-callback): Reimplement in
+       order to support renaming over directory boundaries.
+       (file-notify-add-watch): Adapt `file-notify--descriptor' call.
+       * doc/lispref/os.texi (File Notifications): Remove limitation of
+       file renaming to the same directory.
+
 2015-09-05  Paul Eggert  <address@hidden>
 
        Spelling fix (Bug#21420)
@@ -97,7 +1521,8 @@
        reusing stale face IDs for 'escape-glyph' and 'glyphless-char'
        faces, which could case a segfault if the frame's face cache was
        freed since the last redisplay.  (Bug#21394)
-       * src/xfaces.c (free_realized_faces): Call 
forget_escape_and_glyphless_faces.
+       * src/xfaces.c (free_realized_faces): Call
+       forget_escape_and_glyphless_faces.
        * src/dispextern.h (forget_escape_and_glyphless_faces): Add prototype.
 
 2015-09-04  Paul Eggert  <address@hidden>
@@ -224,7 +1649,7 @@
        Fix typo
        * ftfont.c (ftfont_drive_otf): otf_positioning_type_components_mask -> 
OTF_positioning_type_components_mask.
 
-       fix previous change
+       Fix previous change
        * ftfont.c (ftfont_drive_otf): Remember some bits of
        OTF_Glyph->positioning_type in MFLTGlyphFT->libotf_positioning_type.
 
@@ -300,7 +1725,7 @@
 
 2015-09-01  Paul Eggert  <address@hidden>
 
-       Rework quoting in tutorial
+       Rework quoting in Emacs Lisp Introduction
        * doc/lispintro/emacs-lisp-intro.texi (Sample let Expression)
        (if in more detail, type-of-animal in detail, else): Rework the
        early example to use " rather than ' so that we don’t burden
@@ -418,7 +1843,7 @@
 
        isearch: Document character folding mode.
        * isearch.el (isearch-forward): Mention `isearch-toggle-character-fold'
-       in docstring.
+       in doc string.
 
 2015-08-31  Paul Eggert  <address@hidden>
 
@@ -629,6 +2054,7 @@
        Minor documentation and NEWS tweak
        * doc/lispintro/emacs-lisp-intro.texi (fwd-para let): Add an index
        entry.
+       * NEWS: Fix a typo in character-fold-to-regexp.
 
 2015-08-30  Michael Albinus  <address@hidden>
 
@@ -667,7 +2093,7 @@
        * lisp/progmodes/which-func.el (which-func-ff-hook): Look for new
        imenu-unavailable error symbol instead of trying to match message
        exactly.
-       * lisp/imenu.el (imenu-unavailable): New error
+       * lisp/imenu.el (imenu-unavailable): New error.
        (imenu-unavailable-error): New function.
 
 2015-08-29  Eli Zaretskii  <address@hidden>
@@ -945,7 +2371,7 @@
 
 2015-08-26  Michael Albinus  <address@hidden>
 
-       * lisp/net/tramp-cache.el (top): Use `message' but `format-message'.
+       * lisp/net/tramp-cache.el (top): Use `message', not `format-message'.
 
 2015-08-26  Paul Eggert  <address@hidden>
 
@@ -1209,7 +2635,8 @@
 
 2015-08-24  YAMAMOTO Mitsuharu  <address@hidden>
 
-       * src/macfont.m (macfont_create_family_with_symbol): Accept localized 
names.
+       * src/macfont.m (macfont_create_family_with_symbol): Accept
+       localized names.
 
 2015-08-24  Paul Eggert  <address@hidden>
 
@@ -1741,7 +3168,8 @@
        * lisp/progmodes/python.el
        (python-shell-tramp-refresh-process-environment): New function.
        (python-shell-with-environment): Use it.
-       * test/automated/python-tests.el (python-shell-with-environment-2): 
Update.
+       * test/automated/python-tests.el (python-shell-with-environment-2):
+       Update.
 
        python.el: Enhancements to process environment setup.
        * lisp/progmodes/python.el (python-shell-process-environment)
@@ -1831,7 +3259,8 @@
 2015-08-21  Martin Rudalics  <address@hidden>
 
        Document `window-use-time' in Elisp manual
-       * doc/lispref/windows.texi (Selecting Windows): Document 
`window-use-time'.
+       * doc/lispref/windows.texi (Selecting Windows): Document
+       `window-use-time'.
 
 2015-08-21  Eli Zaretskii  <address@hidden>
 
@@ -2114,8 +3543,8 @@
        (top-level) Set the `delete-selection' property of `self-insert-command'
        to `delete-selection-uses-region-p'.
        progmodes/cc-cmds.el (top-level): Give the `delete-selection' property
-       for c-electric-\(brace\|paren\) the value 
`delete-selection-uses-region-p'
-       when the latter function exists.
+       for c-electric-\(brace\|paren\) the value
+       `delete-selection-uses-region-p' when the latter function exists.
 
 2015-08-19  Paul Eggert  <address@hidden>
 
@@ -2158,7 +3587,7 @@
        clause of `isearch-search-fun-default'. That lax variable does not
        refer to lax-whitespacing.  Related to (bug#21777).
        This reverts commit a5bdb872edb9f031fe041faf9a8c0be432e5f64c.
-       * character-fold.el (character-fold-search): Set to nil
+       * character-fold.el (character-fold-search): Set to nil.
        Default to nil for now, until someone implements proper
        lax-whitespacing with char-fold searching.
 
@@ -2215,8 +3644,7 @@
        * lisp/gnus/message.el (message-delete-overlay, message-make-overlay)
        (message-overlay-get, message-overlay-put, message-overlays-in):
        * lisp/gnus/sieve.el (sieve-make-overlay, sieve-overlay-put)
-       (sieve-overlays-at):
-       Remove.
+       (sieve-overlays-at): Remove.
 
 2015-08-19  Martin Rudalics  <address@hidden>
 
@@ -2427,7 +3855,8 @@
 
 2015-08-17  Ronnie Schnell  <address@hidden>
 
-       Update version number in header (now matches help)
+       * lisp/play/dunnet.el: Update version number in header (now
+       matches help).
 
 2015-08-17  Paul Eggert  <address@hidden>
 
@@ -2551,38 +3980,41 @@
 2015-08-16  Wilson Snyder  <address@hidden>
 
        Update verilog-mode.el to 2015-05-14-6232468-vpo-GNU.
-           * losp/progmodes/verilog-mode.el: Fix some non-automated indent
-           issues and comments, bug943.  (verilog-type-font-keywords): Cycle
-           delay operators like ##1 and ##[0:$] are now highlighted in their
-           entirety similarly to the # delay-control operator.  Likewise, the
-           followed-by operators #-# and #=# are no longer partially
-           highlighed.  (verilog-backward-syntactic-ws-quick,
-           verilog-skip-backward-comments): Minor performance improvements to
-           buffer traversal functions for reduced latency.  (verilog-calc-1,
-           verilog-in-deferred-immediate-final-p): When the keyword 'final'
-           follows 'assert/assume/cover', then it is part of a deferred
-           immediate assertion item and should not be treated as a final
-           construct for indentation.  Reported by Yuri Sugihara.
-           (verilog-do-indent): Virtual task/function/class definition lines
-           should not be considered as declarations.  Reported by Enzo Chi.
-           (verilog-do-indent): Do not falsely indent to '=' of
-           property/sequence operators on subsequent lines of a multi-line
-           statement.  (verilog-assignment-operator-re): Fix '!==' operator
-           and add support for '<->', ':/', '#-#', and '#=#' operators.
-           (verilog-calculate-indent, verilog-label-be): Enable
-           case-sensitive regular expression parsing when looking for
-           keywords.  (verilog-calc-1): Detect 'pure virtual method'
-           declarations which exist in abstract classes.  Reported by Enzo
-           Chi and Kaushal Modi.  (verilog-backward-ws&directives): When
-           moving back to the start of a line and the preceeding line ended
-           with an escaped-newline, then jump up one line.  This properly
-           consumes a multi-line pre-processor directive.  Reported by
-           Kaushal Modi.  (verilog-dpi-import-export-re,
-           verilog-extended-complete-re, verilog-calc-1): Teach verilog-mode
-           to properly indent after a DPI import/export statement that
-           resides outside of a module.  Reported by Kaushal Modi.
-           (verilog-extended-complete-re): Update regexp to match both
-           "DPI-C" and "DPI".  Reported by Kaushal Modi.
+       * lisp/progmodes/verilog-mode.el: Fix some non-automated indent
+       issues and comments, bug#943.
+       (verilog-type-font-keywords): Cycle delay operators like ##1 and
+       ##[0:$] are now highlighted in their entirety similarly to the #
+       delay-control operator.  Likewise, the followed-by operators #-#
+       and #=# are no longer partially highlighed.
+       (verilog-backward-syntactic-ws-quick)
+       (verilog-skip-backward-comments): Minor performance improvements
+       to buffer traversal functions for reduced latency.
+       (verilog-calc-1, verilog-in-deferred-immediate-final-p): When the
+       keyword 'final' follows 'assert/assume/cover', then it is part of
+       a deferred immediate assertion item and should not be treated as a
+       final construct for indentation.  Reported by Yuri Sugihara.
+       (verilog-do-indent): Virtual task/function/class definition lines
+       should not be considered as declarations.  Reported by Enzo Chi.
+       (verilog-do-indent): Do not falsely indent to '=' of
+       property/sequence operators on subsequent lines of a multi-line
+       statement.
+       (verilog-assignment-operator-re): Fix '!==' operator and add
+       support for '<->', ':/', '#-#', and '#=#' operators.
+       (verilog-calculate-indent, verilog-label-be): Enable
+       case-sensitive regular expression parsing when looking for
+       keywords.
+       (verilog-calc-1): Detect 'pure virtual method' declarations which
+       exist in abstract classes.  Reported by Enzo Chi and Kaushal Modi.
+       (verilog-backward-ws&directives): When moving back to the start of
+       a line and the preceeding line ended with an escaped-newline, then
+       jump up one line.  This properly consumes a multi-line
+       pre-processor directive.  Reported by Kaushal Modi.
+       (verilog-dpi-import-export-re, verilog-extended-complete-re)
+       (verilog-calc-1): Teach verilog-mode to properly indent after a
+       DPI import/export statement that resides outside of a module.
+       Reported by Kaushal Modi.
+       (verilog-extended-complete-re): Update regexp to match both
+       "DPI-C" and "DPI".  Reported by Kaushal Modi.
 
 2015-08-15  Paul Eggert  <address@hidden>
 
@@ -2636,7 +4068,7 @@
 2015-08-15  Dani Moncayo  <address@hidden>
 
        Remove 'nt/zipdist.bat' (no longer used)
-       * nt/zipdist.bat: Remove - no longer used.
+       * nt/zipdist.bat: Remove -- no longer used.
 
 2015-08-15  Jürgen Hötzel  <address@hidden>
 
@@ -2757,7 +4189,7 @@
 
 2015-08-14  Stefan Monnier  <address@hidden>
 
-       * src/keyboard.c: Use false/true instead of 0/1 for booleans
+       * src/keyboard.c: Use false/true instead of 0/1 for booleans.
        * src/keyboard.h (struct kboard): Mark kbd_queue_has_data as boolean.
 
 2015-08-14  Michael Albinus  <address@hidden>
@@ -2885,10 +4317,9 @@
        (c-not-decl-init-keywords, c-not-primitive-type-keywords)
        (c-paren-any-kwds, c-<>-sexp-kwds, c-block-stmt-kwds, c-expr-kwds)
        (c-decl-block-key, c-keywords, c-keywords-obarray)
-       (c-regular-keywords-regexp, c-primary-expr-regexp,
-       c-primary-expr-regexp)
-       (c-block-prefix-disallowed-chars, c-known-type-key,
-       c-nonlabel-token-key)
+       (c-regular-keywords-regexp, c-primary-expr-regexp)
+       (c-primary-expr-regexp, c-block-prefix-disallowed-chars)
+       (c-known-type-key, c-nonlabel-token-key)
        (c-make-init-lang-vars-fun): Use the new macros rather than the old
        names.
 
@@ -2896,8 +4327,8 @@
 
        loadhist.el (read-feature): Conform to completing-read
        * lisp/loadhist.el (read-feature): According to `completing-read'
-         documentation, if collection is a list, then it must be a list of
-         strings. And not a list of symbols like before.
+       documentation, if collection is a list, then it must be a list of
+       strings, not a list of symbols like before.
 
 2015-08-12  David Kastrup  <address@hidden>
 
@@ -2947,7 +4378,7 @@
 
 2015-08-12  Artur Malabarba  <address@hidden>
 
-       * emacs-lisp/lisp-mnt.el (lm-header): save-excursion
+       * emacs-lisp/lisp-mnt.el (lm-header): Add save-excursion.
 
 2015-08-11  Fabián Ezequiel Gallina  <address@hidden>
 
@@ -2995,8 +4426,8 @@
 2015-08-11  Stefan Monnier  <address@hidden>
 
        * lisp/replace.el (perform-replace): Document `replacements'.
-       (perform-replace): Move the description of the format of `replacements' 
from
-       the body's comment to the docstring.
+       (perform-replace): Move the description of the format of `replacements'
+       from the body's comment to the doc string.
 
 2015-08-11  Jürgen Hötzel  <address@hidden>
 
@@ -3007,13 +4438,13 @@
 2015-08-10  Stephen Leake  <address@hidden>
 
        Rewrite elisp--xref-find-definitions to handle many more cases; add 
tests.
-       * lisp/progmodes/elisp-mode.el (elisp--xref-identifier-location): 
deleted
-       (elisp--xref-format-cl-defmethod): new
-       (find-feature-regexp): new
-       (find-alias-regexp): new
-       (elisp--xref-make-xref): new
-       (elisp--xref-find-definitions): Rewrite using the above, handle many 
more
-       cases. Always output all available definitions.
+       * lisp/progmodes/elisp-mode.el (elisp--xref-identifier-location):
+       Function deleted.
+       (elisp--xref-format-cl-defmethod): New defconst.
+       (find-feature-regexp, find-alias-regexp): New defcustoms.
+       (elisp--xref-make-xref): New function.
+       (elisp--xref-find-definitions): Rewrite using the above, handle many
+       more cases.  Always output all available definitions.
        (xref-location-marker): No need for special cases.
        * test/automated/elisp-mode-tests.el: Add more tests of
        elisp--xref-find-definitions, improve current tests.
@@ -3031,8 +4462,8 @@
 
        Set file buffer as current for "--file"
        * lisp/startup.el (command-line-1): Set file buffer as current before
-       it is displayed so it can be used with options like
-       "--eval".  (Bug#21095)
+       it is displayed so it can be used with options like "--eval".
+       (Bug#21095)
 
 2015-08-10  Eli Zaretskii  <address@hidden>
 
@@ -3043,10 +4474,10 @@
 
 2015-08-10  Alan Mackenzie  <address@hidden>
 
-       Fix "Invalid search bound (wrong side of point)" in fontification.
-       progmodes/cc-fonts.el (c-font-lock-declarators): After skipping an
-       initialization expression, check point is not beyond the fontification
-       limit.
+       Fix "Invalid search bound (wrong side of point)" in fontification
+       * lisp/progmodes/cc-fonts.el (c-font-lock-declarators): After skipping
+       an initialization expression, check point is not beyond the
+       fontification limit.
 
 2015-08-09  Paul Eggert  <address@hidden>
 
@@ -3118,10 +4549,10 @@
 
 2015-08-09  Ivan Kanis  <address@hidden>
 
-       fix link to source code in help window
-       * lisp/help-fns.el (find-lisp-object-file-name): remove code that
+       Fix link to source code in help window
+       * lisp/help-fns.el (find-lisp-object-file-name): Remove code that
        will never work due to Glenn Morris change a6d63d9 on Apr 20 2013
-       'No longer include timestamp in header of .elc files'. Add code
+       'No longer include timestamp in header of .elc files'.  Add code
        that will return .el source file in load-path.
 
 2015-08-09  Artur Malabarba  <address@hidden>
@@ -3161,10 +4592,6 @@
        (org-reftex-citation): Add `org--' prefix to dynamically scoped
        `rds' var.
 
-2015-08-08  Nicolas Petton  <address@hidden>
-
-       Merge remote-tracking branch 
'origin/fix/subsequence-error-with-negative-sequences'
-
 2015-08-08  Paul Eggert  <address@hidden>
 
        Electric quote if coding is undecided or no conv
@@ -3203,17 +4630,16 @@
 
 2015-08-07  Phillip Lord  <address@hidden>
 
-       Improve error signalling for seq-subseq.
-
+       Improve error signalling for seq-subseq
        * lisp/seq.el (seq-subseq): The existing behaviour is to error
        when indexes are too large, but to silently ignore numbers which
        are too negative for lists.  String and vector handling errors in
-       both cases. This has been regularlised. Error signalling behaviour
-       has been explicitly added to the docstring.
+       both cases.  This has been regularized.  Error signaling behavior
+       has been explicitly added to the doc string.
 
        * lisp/cl-extra.el (cl-subseq): Defers to (seq-subseq) and is
-       therefore also impacted by this change. The docstring has been
-       updated to reflect this.
+       therefore also impacted by this change.  Update the doc string
+       to reflect this.
 
        * test/automated/seq-tests.el (test-seq-subseq): Tests have been
        added for these exceptional cases, as well as one non exceptional
@@ -3233,11 +4659,11 @@
 
 2015-08-07  Stephen Leake  <address@hidden>
 
-       lisp/window.el: fix typo, more `display-buffer-use-some-frame'
-       * lisp/window.el: fix typo that broke build
-       (display-buffer--action-function-custom-type): add
-       `display-buffer-use-some-frame'
-       (display-buffer): add `display-buffer-use-some-frame' to doc string
+       Fix typo in lisp/window.el, more `display-buffer-use-some-frame'
+       * lisp/window.el: Fix typo that broke build.
+       (display-buffer--action-function-custom-type): Add
+       `display-buffer-use-some-frame'.
+       (display-buffer): Add `display-buffer-use-some-frame' to doc string.
 
        Add support for 'inhibit-same-window in 'display-buffer-use-some-frame'
        * lisp/window.el (display-buffer-use-some-frame): Add support for
@@ -3305,11 +4731,11 @@
 
 2015-08-05  Artur Malabarba  <address@hidden>
 
-       * lisp/replace.el (replace-character-fold): Default to nil
+       * lisp/replace.el (replace-character-fold): Default to nil.
 
-       * lisp/character-fold.el: Fix lax whitespace
+       * lisp/character-fold.el: Fix lax whitespace.
        (character-fold-table): Don't make space match other whitespace chars.
-       (character-fold-to-regexp): Simplify lax behaviour.
+       (character-fold-to-regexp): Simplify lax behavior.
 
 2015-08-05  Dmitry Gutov  <address@hidden>
 
@@ -3374,8 +4800,8 @@
        Improve ansi-color filtering of unrecognized escape sequences
        * lisp/ansi-color.el (ansi-color-drop-regexp): Recognize mode-setting
        escape sequences.
-       (ansi-color-filter-apply): Filter out unrecognized escape sequences
-       (ansi-color-apply): Filter out unrecognized escape sequences
+       (ansi-color-filter-apply, ansi-color-apply): Filter out
+       unrecognized escape sequences.
 
 2015-08-04  Artur Malabarba  <address@hidden>
 
@@ -3445,10 +4871,6 @@
        Consistently use "all:" to describe the all: target,
        replacing three different and confusingly-quoted usages.
 
-2015-08-02  Eli Zaretskii  <address@hidden>
-
-       Whitespace fixes
-
 2015-08-02  Evgeny Fraimovitch  <address@hidden>  (tiny change)
 
        Don't abort emacsclientw when -a was specified
@@ -12027,7 +13449,7 @@
 
 This file records repository revisions from
 commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
-commit 88b9a8000da6cf2d4aede86e9eae4f00016d0d6b (inclusive).
+commit 00a65e3238a888fc92b0c2aab8cb5bda8bd99c29 (inclusive).
 See ChangeLog.1 for earlier changes.
 
 ;; Local Variables:
diff --git a/INSTALL.REPO b/INSTALL.REPO
index 3431ee4..7c956f0 100644
--- a/INSTALL.REPO
+++ b/INSTALL.REPO
@@ -42,7 +42,7 @@ subdirectories of 'lisp/', e.g., 'mh-e/' and 'calendar/') 
will need to be
 updated to reflect new autoloaded functions.  If you see errors (rather
 than warnings) about undefined lisp functions during compilation, that
 may be the reason.  Finally, sometimes there can be build failures
-related to '*loaddefs.el' (e.g., "required feature `esh-groups' was not
+related to '*loaddefs.el' (e.g., "required feature ‘esh-groups’ was not
 provided").  In that case, follow the instructions below.
 
 To update loaddefs.el (and similar files), do:
diff --git a/Makefile.in b/Makefile.in
index 3cfbe57..4ee84f9 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -593,8 +593,8 @@ install-arch-indep: lisp install-info install-man 
${INSTALL_ARCH_INDEP_EXTRA}
              rm -f $${subdir}/.gitignore ; \
              rm -f $${subdir}/.arch-inventory ; \
              rm -f $${subdir}/.DS_Store ; \
-             rm -f $${subdir}/\#* ; \
-             rm -f $${subdir}/.\#* ; \
+             rm -f $${subdir}/#* ; \
+             rm -f $${subdir}/.#* ; \
              rm -f $${subdir}/*~ ; \
              rm -f $${subdir}/*.orig ; \
              rm -f $${subdir}/ChangeLog* ; \
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE
index bdd2694..327723f 100644
--- a/admin/FOR-RELEASE
+++ b/admin/FOR-RELEASE
@@ -72,7 +72,7 @@ pages of the manuals, and even if they do, the resulting page 
breaks
 depend on what paper and font size they use.  This also means that if
 you _are_ going to do this, it should be done with the paper and font
 size that the GNU Press are going to use when they print the manuals.
-I think this is different to what you get if you just use eg `make
+I think this is different to what you get if you just use eg 'make
 emacs.pdf' (e.g., enable "smallbook").
 
 ** Check the keybindings in the refcards are correct, and add any new ones.
@@ -112,21 +112,21 @@ sk        Miroslav Vaško
 ** Check for modes which bind M-s that conflicts with a new global binding M-s
 and change key bindings where necessary.  The current list of modes:
 
-1. Gnus binds `M-s' to `gnus-summary-search-article-forward'.
+1. Gnus binds 'M-s' to 'gnus-summary-search-article-forward'.
 
-2. Minibuffer binds `M-s' to `next-matching-history-element'
+2. Minibuffer binds 'M-s' to 'next-matching-history-element'
    (not useful any more since C-s can now search in the history).
 
-3. `center-line' in Text mode was already moved to the text formatting
-   keymap as `M-o M-s' (thus this binding is not necessary any more
-   in `nroff-mode-map' too and can be removed now from the nroff mode
-   because it can now use the global key binding `M-o M-s' `center-line').
+3. 'center-line' in Text mode was already moved to the text formatting
+   keymap as 'M-o M-s' (thus this binding is not necessary any more
+   in 'nroff-mode-map' too and can be removed now from the nroff mode
+   because it can now use the global key binding 'M-o M-s' 'center-line').
 
-4. PCL-CVS binds `M-s' to `cvs-status', and log-edit-mode binds it to
-   `log-edit-comment-search-forward'.  Perhaps search commands
-   on the global key binding `M-s' are useless in these modes.
+4. PCL-CVS binds 'M-s' to 'cvs-status', and log-edit-mode binds it to
+   'log-edit-comment-search-forward'.  Perhaps search commands
+   on the global key binding 'M-s' are useless in these modes.
 
-5. Rmail binds `\es' to `rmail-search'/`rmail-summary-search'.
+5. Rmail binds '\es' to 'rmail-search'/'rmail-summary-search'.
 
 
 * DOCUMENTATION
diff --git a/admin/MAINTAINERS b/admin/MAINTAINERS
index 61c70c1..da56466 100644
--- a/admin/MAINTAINERS
+++ b/admin/MAINTAINERS
@@ -24,6 +24,8 @@ Eli Zaretskii
        src/bidi.c
        bidirectional editing support in xdisp.c and elsewhere
        lisp/term/tty-colors.el
+       test/biditest.el
+       test/redisplay-testsuite.el
 
        The MS-DOS (a.k.a. DJGPP) port:
            config.bat
@@ -50,7 +52,7 @@ Stefan Monnier
        minor-mode/major-mode infrastructure
        text filling
        minibuffer completion
-       lisp/textmodes/outline.el
+       lisp/outline.el
 
 Miles Bader
        src/xfaces.c
@@ -74,6 +76,38 @@ Bastien Guerry
             lisp/org/*
            doc/misc/org.texi
 
+Artur Malabarba
+       lisp/emacs-lisp/package.el
+       lisp/emacs-lisp/let-alist.el
+       lisp/character-fold.el
+
+Michael Albinus
+        Tramp
+            lisp/net/tramp*.el
+            lisp/url/url-tramp.el
+            doc/misc/tramp*.texi
+            test/automated/tramp-tests.el
+
+        D-Bus
+           src/dbusbind.c
+           lisp/net/dbus.el
+           lisp/net/secrets.el
+            lisp/net/zeroconf.el
+           doc/misc/dbus.texi
+            test/automated/dbus-tests.el
+
+        File Notifications
+           src/gfilenotify.c
+           lisp/filenotify.el
+           test/automated/file-notify-tests.el
+
+Simen Heggestøyl
+       lisp/textmodes/css-mode.el
+
+Nicolas Petton
+       lisp/emacs-lisp/map.el
+       lisp/emacs-lisp/seq.el
+
 ==============================================================================
 2.
 ==============================================================================
@@ -85,7 +119,6 @@ Kelvin White
 
 Eli Zaretskii
        doc/*
-       lispref/*
 
        src/xfaces.c
        src/xdisp.c
@@ -94,20 +127,37 @@ Eli Zaretskii
        src/dispextern.h
        src/frame.c
        src/dired.c
+       src/fileio.c
        src/unexw32.c
        src/w32*.[ch]
        src/window.c
+       src/indent.c
+       src/region-cache.[ch]
        nt/*
 
+       lib-src/ntlib.[ch]
+       lib-src/etags.c
+
        lisp/arc-mode.el
        lisp/menu-bar.el
        lisp/hexl.el
        lisp/info.el
        lisp/ls-lisp.el
        lisp/startup.el
+       lisp/filenotify.el
        lisp/w32*.el
+       lisp/term/w32*.el
+       lisp/progmodes/gdb-mi.el
+       lisp/textmodes/ispell.el
+       lisp/textmodes/flyspell.el
+       lisp/mail/rmail*.el
+
+       Mule
 
        admin/unidata/*
+       admin/nt/dump.bat
+
+       test/etags/*
 
 Stefan Monnier
        src/intervals.c
@@ -123,82 +173,566 @@ Miles Bader
        src/editfns.c
        lisp/textmodes/refill.el
 
+Artur Malabarba
+        lisp/isearch.el
+
+Paul Eggert
+       .dir-locals.el
+       .gitattributes
+       .gitignore
+       GNUmakefile
+       Makefile.in
+       admin/merge-gnulib
+       admin/merge-pkg-config
+       admin/update-copyright
+       autogen.sh
+       build-aux/*
+       configure.ac
+       lib/*
+       lib-src/* (except for files others want to maintain)
+       m4/*
+       make-dist
+       src/* (except for *.m, *w32*, bitmaps, files others want to maintain)
+
+Michael Albinus
+       src/inotify.c
+        lisp/autorevert.el
+       lisp/notifications.el
+        test/automated/auto-revert-tests.el
+       test/automated/inotify-test.el
+       test/automated/vc-tests.el
+
+Nicolas Petton
+       lisp/emacs-lisp/subr-x.el
+       lisp/arc-mode.el
+
+Xue Fuqiao
+       doc/lispref/*
+
 ==============================================================================
 3.
 ==============================================================================
 
-src/Makefile.in
-src/abbrev.c
-src/alloc.c
-src/alloca.c
-src/alloca.s
-src/atimer.c
+admin/admin.el
+admin/authors.el
+admin/build-configs
+admin/bzrmerge.el
+admin/charsets/*
+admin/check-doc-strings
+admin/cus-test.el
+admin/diff-tar-files
+admin/find-gc.el
+admin/gitmerge.el
+admin/make-emacs
+admin/quick-install-emacs
+admin/unidata/blocks.awk
+etc/edt-user.el
+etc/forms/forms-d2.el
+etc/forms/forms-pass.el
+etc/nxml/*
+etc/themes/*
+leim/*
+lisp/abbrev.el
+lisp/align.el
+lisp/allout-widgets.el
+lisp/allout.el
+lisp/ansi-color.el
+lisp/apropos.el
+lisp/array.el
+lisp/autoarg.el
+lisp/autoinsert.el
+lisp/autorevert.el
+lisp/avoid.el
+lisp/battery.el
+lisp/bindings.el
+lisp/bookmark.el
+lisp/bs.el
+lisp/buff-menu.el
+lisp/calculator.el
+lisp/calendar/*
+lisp/case-table.el
+lisp/cdl.el
+lisp/cedet/*
+lisp/chistory.el
+lisp/cmuscheme.el
+lisp/color.el
+lisp/completion.el
+lisp/composite.el
+lisp/cus-dep.el
+lisp/cus-edit.el
+lisp/cus-face.el
+lisp/cus-start.el
+lisp/cus-theme.el
+lisp/custom.el
+lisp/dabbrev.el
+lisp/delim-col.el
+lisp/delsel.el
+lisp/descr-text.el
+lisp/desktop.el
+lisp/dframe.el
+lisp/dired-aux.el
+lisp/dired-x.el
+lisp/dired.el
+lisp/dirtrack.el
+lisp/disp-table.el
+lisp/dnd.el
+lisp/doc-view.el
+lisp/dom.el
+lisp/double.el
+lisp/dynamic-setting.el
+lisp/ebuff-menu.el
+lisp/echistory.el
+lisp/edmacro.el
+lisp/ehelp.el
+lisp/elec-pair.el
+lisp/electric.el
+lisp/elide-head.el
+lisp/emacs-lisp/advice.el
+lisp/emacs-lisp/autoload.el
+lisp/emacs-lisp/avl-tree.el
+lisp/emacs-lisp/backquote.el
+lisp/emacs-lisp/benchmark.el
+lisp/emacs-lisp/bindat.el
+lisp/emacs-lisp/byte-opt.el
+lisp/emacs-lisp/byte-run.el
+lisp/emacs-lisp/bytecomp.el
+lisp/emacs-lisp/cconv.el
+lisp/emacs-lisp/chart.el
+lisp/emacs-lisp/check-declare.el
+lisp/emacs-lisp/checkdoc.el
+lisp/emacs-lisp/cl-extra.el
+lisp/emacs-lisp/cl-generic.el
+lisp/emacs-lisp/cl-indent.el
+lisp/emacs-lisp/cl-lib.el
+lisp/emacs-lisp/cl-macs.el
+lisp/emacs-lisp/cl-preloaded.el
+lisp/emacs-lisp/cl-seq.el
+lisp/emacs-lisp/cl.el
+lisp/emacs-lisp/copyright.el
+lisp/emacs-lisp/crm.el
+lisp/emacs-lisp/cursor-sensor.el
+lisp/emacs-lisp/debug.el
+lisp/emacs-lisp/derived.el
+lisp/emacs-lisp/disass.el
+lisp/emacs-lisp/easy-mmode.el
+lisp/emacs-lisp/edebug.el
+lisp/emacs-lisp/eieio-base.el
+lisp/emacs-lisp/eieio-compat.el
+lisp/emacs-lisp/eieio-core.el
+lisp/emacs-lisp/eieio-custom.el
+lisp/emacs-lisp/eieio-datadebug.el
+lisp/emacs-lisp/eieio-opt.el
+lisp/emacs-lisp/eieio-speedbar.el
+lisp/emacs-lisp/eieio.el
+lisp/emacs-lisp/eldoc.el
+lisp/emacs-lisp/elint.el
+lisp/emacs-lisp/elp.el
+lisp/emacs-lisp/ert-x.el
+lisp/emacs-lisp/ert.el
+lisp/emacs-lisp/ewoc.el
+lisp/emacs-lisp/find-func.el
+lisp/emacs-lisp/float-sup.el
+lisp/emacs-lisp/generator.el
+lisp/emacs-lisp/generic.el
+lisp/emacs-lisp/gv.el
+lisp/emacs-lisp/helper.el
+lisp/emacs-lisp/inline.el
+lisp/emacs-lisp/lisp-mnt.el
+lisp/emacs-lisp/lisp-mode.el
+lisp/emacs-lisp/lisp.el
+lisp/emacs-lisp/macroexp.el
+lisp/emacs-lisp/map-ynp.el
+lisp/emacs-lisp/nadvice.el
+lisp/emacs-lisp/package-x.el
+lisp/emacs-lisp/pcase.el
+lisp/emacs-lisp/pp.el
+lisp/emacs-lisp/re-builder.el
+lisp/emacs-lisp/regexp-opt.el
+lisp/emacs-lisp/regi.el
+lisp/emacs-lisp/ring.el
+lisp/emacs-lisp/rx.el
+lisp/emacs-lisp/shadow.el
+lisp/emacs-lisp/smie.el
+lisp/emacs-lisp/syntax.el
+lisp/emacs-lisp/tabulated-list.el
+lisp/emacs-lisp/tcover-ses.el
+lisp/emacs-lisp/tcover-unsafep.el
+lisp/emacs-lisp/testcover.el
+lisp/emacs-lisp/timer.el
+lisp/emacs-lisp/tq.el
+lisp/emacs-lisp/trace.el
+lisp/emacs-lisp/unsafep.el
+lisp/emacs-lisp/warnings.el
+lisp/emacs-lock.el
+lisp/emulation/*
+lisp/env.el
+lisp/epa-dired.el
+lisp/epa-file.el
+lisp/epa-hook.el
+lisp/epa-mail.el
+lisp/epa.el
+lisp/epg-config.el
+lisp/epg.el
+lisp/eshell/*
+lisp/expand.el
+lisp/ezimage.el
+lisp/face-remap.el
+lisp/facemenu.el
+lisp/faces.el
+lisp/ffap.el
+lisp/filecache.el
+lisp/files-x.el
+lisp/files.el
+lisp/filesets.el
+lisp/find-cmd.el
+lisp/find-dired.el
+lisp/find-file.el
+lisp/find-lisp.el
+lisp/finder.el
+lisp/flow-ctrl.el
+lisp/foldout.el
+lisp/follow.el
+lisp/font-core.el
+lisp/font-lock.el
+lisp/format-spec.el
+lisp/format.el
+lisp/forms.el
+lisp/frame.el
+lisp/frameset.el
+lisp/fringe.el
+lisp/generic-x.el
+lisp/gnus/*
+lisp/gs.el
+lisp/help-at-pt.el
+lisp/help-fns.el
+lisp/help-macro.el
+lisp/help-mode.el
+lisp/help.el
+lisp/hex-util.el
+lisp/hfy-cmap.el
+lisp/hi-lock.el
+lisp/hilit-chg.el
+lisp/hippie-exp.el
+lisp/hl-line.el
+lisp/htmlfontify.el
+lisp/ibuf-ext.el
+lisp/ibuf-macs.el
+lisp/ibuffer.el
+lisp/icomplete.el
+lisp/ido.el
+lisp/ielm.el
+lisp/iimage.el
+lisp/image-dired.el
+lisp/image-mode.el
+lisp/image.el
+lisp/imenu.el
+lisp/indent.el
+lisp/info-look.el
+lisp/info-xref.el
+lisp/informat.el
+lisp/international/*
+lisp/isearch.el
+lisp/isearchb.el
+lisp/jit-lock.el
+lisp/jka-cmpr-hook.el
+lisp/jka-compr.el
+lisp/json.el
+lisp/kermit.el
+lisp/kmacro.el
+lisp/language/*
+lisp/leim/*
+lisp/linum.el
+lisp/loadhist.el
+lisp/loadup.el
+lisp/locate.el
+lisp/lpr.el
+lisp/macros.el
+lisp/mail/binhex.el
+lisp/mail/blessmail.el
+lisp/mail/emacsbug.el
+lisp/mail/feedmail.el
+lisp/mail/footnote.el
+lisp/mail/hashcash.el
+lisp/mail/mail-extr.el
+lisp/mail/mail-hist.el
+lisp/mail/mail-utils.el
+lisp/mail/mailabbrev.el
+lisp/mail/mailalias.el
+lisp/mail/mailclient.el
+lisp/mail/mailheader.el
+lisp/mail/metamail.el
+lisp/mail/mspools.el
+lisp/mail/reporter.el
+lisp/mail/rfc2368.el
+lisp/mail/rfc822.el
+lisp/mail/sendmail.el
+lisp/mail/smtpmail.el
+lisp/mail/supercite.el
+lisp/mail/uce.el
+lisp/mail/undigest.el
+lisp/mail/unrmail.el
+lisp/mail/uudecode.el
+lisp/makesum.el
+lisp/man.el
+lisp/master.el
+lisp/mb-depth.el
+lisp/md4.el
+lisp/mh-e/*
+lisp/midnight.el
+lisp/minibuffer.el
+lisp/misc.el
+lisp/misearch.el
+lisp/mouse-copy.el
+lisp/mouse-drag.el
+lisp/mouse.el
+lisp/mpc.el
+lisp/msb.el
+lisp/mwheel.el
+lisp/net/*
+lisp/newcomment.el
+lisp/novice.el
+lisp/nxml/*
+lisp/obsolete/*
+lisp/paren.el
+lisp/password-cache.el
+lisp/pcmpl-cvs.el
+lisp/pcmpl-gnu.el
+lisp/pcmpl-linux.el
+lisp/pcmpl-rpm.el
+lisp/pcmpl-unix.el
+lisp/pcmpl-x.el
+lisp/pcomplete.el
+lisp/play/*
+lisp/printing.el
+lisp/proced.el
+lisp/profiler.el
+lisp/progmodes/ada-mode.el
+lisp/progmodes/ada-prj.el
+lisp/progmodes/ada-stmt.el
+lisp/progmodes/ada-xref.el
+lisp/progmodes/antlr-mode.el
+lisp/progmodes/asm-mode.el
+lisp/progmodes/autoconf.el
+lisp/progmodes/bat-mode.el
+lisp/progmodes/bug-reference.el
+lisp/progmodes/cc-align.el
+lisp/progmodes/cc-awk.el
+lisp/progmodes/cc-bytecomp.el
+lisp/progmodes/cc-cmds.el
+lisp/progmodes/cc-defs.el
+lisp/progmodes/cc-engine.el
+lisp/progmodes/cc-fonts.el
+lisp/progmodes/cc-guess.el
+lisp/progmodes/cc-langs.el
+lisp/progmodes/cc-menus.el
+lisp/progmodes/cc-mode.el
+lisp/progmodes/cc-styles.el
+lisp/progmodes/cc-vars.el
+lisp/progmodes/cfengine.el
+lisp/progmodes/cmacexp.el
+lisp/progmodes/compile.el
+lisp/progmodes/cperl-mode.el
+lisp/progmodes/cpp.el
+lisp/progmodes/cwarn.el
+lisp/progmodes/dcl-mode.el
+lisp/progmodes/ebnf-abn.el
+lisp/progmodes/ebnf-bnf.el
+lisp/progmodes/ebnf-dtd.el
+lisp/progmodes/ebnf-ebx.el
+lisp/progmodes/ebnf-iso.el
+lisp/progmodes/ebnf-otz.el
+lisp/progmodes/ebnf-yac.el
+lisp/progmodes/ebnf2ps.el
+lisp/progmodes/ebrowse.el
+lisp/progmodes/elisp-mode.el
+lisp/progmodes/etags.el
+lisp/progmodes/executable.el
+lisp/progmodes/f90.el
+lisp/progmodes/flymake.el
+lisp/progmodes/fortran.el
+lisp/progmodes/glasses.el
+lisp/progmodes/grep.el
+lisp/progmodes/gud.el
+lisp/progmodes/hideif.el
+lisp/progmodes/hideshow.el
+lisp/progmodes/icon.el
+lisp/progmodes/idlw-complete-structtag.el
+lisp/progmodes/idlw-help.el
+lisp/progmodes/idlw-shell.el
+lisp/progmodes/idlw-toolbar.el
+lisp/progmodes/idlwave.el
+lisp/progmodes/inf-lisp.el
+lisp/progmodes/js.el
+lisp/progmodes/ld-script.el
+lisp/progmodes/m4-mode.el
+lisp/progmodes/make-mode.el
+lisp/progmodes/mantemp.el
+lisp/progmodes/meta-mode.el
+lisp/progmodes/mixal-mode.el
+lisp/progmodes/modula2.el
+lisp/progmodes/octave.el
+lisp/progmodes/opascal.el
+lisp/progmodes/pascal.el
+lisp/progmodes/prog-mode.el
+lisp/progmodes/project.el
+lisp/progmodes/prolog.el
+lisp/progmodes/ps-mode.el
+lisp/progmodes/python.el
+lisp/progmodes/ruby-mode.el
+lisp/progmodes/scheme.el
+lisp/progmodes/sh-script.el
+lisp/progmodes/simula.el
+lisp/progmodes/sql.el
+lisp/progmodes/subword.el
+lisp/progmodes/vera-mode.el
+lisp/progmodes/verilog-mode.el
+lisp/progmodes/vhdl-mode.el
+lisp/progmodes/which-func.el
+lisp/progmodes/xref.el
+lisp/progmodes/xscheme.el
+lisp/ps-bdf.el
+lisp/ps-def.el
+lisp/ps-mule.el
+lisp/ps-print.el
+lisp/ps-samp.el
+lisp/recentf.el
+lisp/rect.el
+lisp/register.el
+lisp/repeat.el
+lisp/replace.el
+lisp/reposition.el
+lisp/reveal.el
+lisp/rot13.el
+lisp/ruler-mode.el
+lisp/savehist.el
+lisp/saveplace.el
+lisp/sb-image.el
+lisp/scroll-all.el
+lisp/scroll-bar.el
+lisp/scroll-lock.el
+lisp/select.el
+lisp/server.el
+lisp/ses.el
+lisp/shadowfile.el
+lisp/simple.el
+lisp/skeleton.el
+lisp/sort.el
+lisp/soundex.el
+lisp/speedbar.el
+lisp/strokes.el
+lisp/subr.el
+lisp/t-mouse.el
+lisp/tabify.el
+lisp/talk.el
+lisp/tar-mode.el
+lisp/tempo.el
+lisp/term.el
+lisp/term/AT386.el
+lisp/term/bobcat.el
+lisp/term/common-win.el
+lisp/term/cygwin.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/rxvt.el
+lisp/term/screen.el
+lisp/term/sun.el
+lisp/term/tvi970.el
+lisp/term/vt100.el
+lisp/term/vt200.el
+lisp/term/wyse50.el
+lisp/term/x-win.el
+lisp/term/xterm.el
+lisp/textmodes/artist.el
+lisp/textmodes/bib-mode.el
+lisp/textmodes/bibtex-style.el
+lisp/textmodes/bibtex.el
+lisp/textmodes/conf-mode.el
+lisp/textmodes/dns-mode.el
+lisp/textmodes/enriched.el
+lisp/textmodes/fill.el
+lisp/textmodes/makeinfo.el
+lisp/textmodes/nroff-mode.el
+lisp/textmodes/page-ext.el
+lisp/textmodes/page.el
+lisp/textmodes/paragraphs.el
+lisp/textmodes/picture.el
+lisp/textmodes/po.el
+lisp/textmodes/refbib.el
+lisp/textmodes/refer.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-vars.el
+lisp/textmodes/reftex.el
+lisp/textmodes/remember.el
+lisp/textmodes/rst.el
+lisp/textmodes/sgml-mode.el
+lisp/textmodes/table.el
+lisp/textmodes/texinfmt.el
+lisp/textmodes/texinfo.el
+lisp/textmodes/texnfo-upd.el
+lisp/textmodes/text-mode.el
+lisp/textmodes/tildify.el
+lisp/textmodes/two-column.el
+lisp/textmodes/underline.el
+lisp/thingatpt.el
+lisp/thumbs.el
+lisp/time-stamp.el
+lisp/time.el
+lisp/timezone.el
+lisp/tmm.el
+lisp/tool-bar.el
+lisp/tooltip.el
+lisp/tree-widget.el
+lisp/tutorial.el
+lisp/type-break.el
+lisp/uniquify.el
+lisp/url/*
+lisp/userlock.el
+lisp/vc/*
+lisp/vcursor.el
+lisp/version.el
+lisp/view.el
+lisp/vt-control.el
+lisp/vt100-led.el
+lisp/wdired.el
+lisp/whitespace.el
+lisp/wid-browse.el
+lisp/wid-edit.el
+lisp/widget.el
+lisp/windmove.el
+lisp/window.el
+lisp/winner.el
+lisp/woman.el
+lisp/x-dnd.el
+lisp/xml.el
+lisp/xt-mouse.el
+lwlib/*
+oldXMenu/*
 src/bitmaps/
-src/buffer.c
-src/callint.c
-src/callproc.c
-src/casefiddle.c
-src/casetab.c
-src/category.c
-src/ccl.c
-src/charset.c
-src/cm.c
-src/cmds.c
-src/coding.c
-src/composite.c
-src/config.in
-src/data.c
-src/doc.c
-src/doprnt.c
-src/ecrt0.c
-src/emacs.c
-src/epaths.in
-src/fileio.c
-src/filelock.c
-src/filemode.c
-src/firstfile.c
-src/floatfns.c
-src/fringe.c
-src/fns.c
-src/fontset.c
-src/getloadavg.c
-src/gmalloc.c
-src/gtkutil.c
-src/indent.c
-src/insdel.c
-src/image.c
-src/lastfile.c
-src/lread.c
-src/macros.c
-src/makefile.w32-in
-src/marker.c
-src/md5.c
-src/minibuf.c
-src/mktime.c
-src/pre-crt0.c
-src/prefix-args.c
-src/print.c
-src/process.c
-src/ralloc.c
-src/region-cache.c
-src/scroll.c
-src/search.c
-src/sound.c
-src/strftime.c
-src/sysdep.c
-src/termcap.c
-src/terminfo.c
-src/textprop.c
-src/tparam.c
-src/undo.c
-src/unexaix.c
-src/unexalpha.c
-src/unexelf.c
-src/unexhp9k800.c
-src/vm-limit.c
-src/widget.c
-src/xfns.c
-src/xmenu.c
-src/xrdb.c
-src/xselect.c
-src/xterm.c
+src/cygw32.c
+src/cygw32.h
+src/macfont.m
+src/nsfns.m
+src/nsfont.m
+src/nsimage.m
+src/nsmenu.m
+src/nsselect.m
+src/nsterm.m
+test/automated/*
+test/cedet/*
+test/rmailmm.el
+
+
+;;; Local Variables:
+;;;   coding: utf-8
+;;; End:
diff --git a/admin/README b/admin/README
index 786c502..2286e35 100644
--- a/admin/README
+++ b/admin/README
@@ -37,7 +37,7 @@ Build Emacs in various ways.
 
 ** quick-install-emacs
 
-Install emacs quickly (`incrementally').
+Install emacs quickly ("incrementally").
 
 ** alloc-colors.c
 
diff --git a/admin/authors.el b/admin/authors.el
index 0afb3a8..092da68 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -212,7 +212,7 @@ If REALNAME is nil, ignore that author.")
     "Michael McNamara"
     "Mike McEwan"
     "Nelson Jose dos Santos Ferreira"
-    "Peter von der Ahe"
+    "Peter von der Ahé"
     "Peter O'Gorman"
     "Piet van Oostrum"
     "Roland McGrath"
diff --git a/admin/charsets/compact.awk b/admin/charsets/compact.awk
index b7d1fd1..21e03ee 100644
--- a/admin/charsets/compact.awk
+++ b/admin/charsets/compact.awk
@@ -69,7 +69,7 @@ function decode_hex(str, idx) {
   return n;
 }
 
-/^\#/ {
+/^#/ {
   print;
   next;
 }
@@ -119,4 +119,3 @@ END {
        printf "0x%04X-0x%04X 0x%04X\n", from_code, to_code, from_unicode;
     }
 }
-
diff --git a/admin/charsets/eucjp-ms.awk b/admin/charsets/eucjp-ms.awk
index 59c6388..24152b4 100644
--- a/admin/charsets/eucjp-ms.awk
+++ b/admin/charsets/eucjp-ms.awk
@@ -24,7 +24,7 @@
 #  http://home.m05.itscom.net/numa/cde/ucs-conv/appendix.html
 # This program reads the mapping file EUC-JP-MS (of glibc) and
 # generates the Elisp file eucjp-ms.el that defines two translation
-# tables `eucjp-ms-decode' and `eucjp-ms-encode'.
+# tables 'eucjp-ms-decode' and 'eucjp-ms-encode'.
 
 BEGIN {
   FS = "[ \t][ \t]*"
@@ -109,4 +109,3 @@ END {
   print "";
   print "(provide 'eucjp-ms)";
 }
-
diff --git a/admin/charsets/gb180302.awk b/admin/charsets/gb180302.awk
index 40d92bf..4947f96 100644
--- a/admin/charsets/gb180302.awk
+++ b/admin/charsets/gb180302.awk
@@ -53,7 +53,7 @@ function decode_hex(str) {
 function gb_to_index(gb) {
   b0 = int(gb / 256);
   b1 = gb % 256;
-  idx = (((b0 - 129)) * 191 + b1 - 64); 
+  idx = (((b0 - 129)) * 191 + b1 - 64);
 #  if (b1 >= 128)
 #    idx--;
   return idx
@@ -67,7 +67,7 @@ function index_to_gb(idx) {
   return (b0 * 256 + b1);
 }
 
-/^\#/ {
+/^#/ {
   print;
   next;
 }
@@ -108,4 +108,3 @@ END {
     printf "0x%04X-0x%04X 0x%04X\n",
       index_to_gb(from_gb), index_to_gb(to_gb), from_unicode;
 }
-
diff --git a/admin/charsets/gb180304.awk b/admin/charsets/gb180304.awk
index 3c16cb5..81d7e73 100644
--- a/admin/charsets/gb180304.awk
+++ b/admin/charsets/gb180304.awk
@@ -49,7 +49,7 @@ function decode_hex(str) {
 function gb_to_index(gb) {
   b0 = int(gb / 256);
   b1 = gb % 256;
-  idx = (((b0 - 129)) * 191 + b1 - 64); 
+  idx = (((b0 - 129)) * 191 + b1 - 64);
 #  if (b1 >= 127)
 #    idx--;
   return idx
@@ -65,7 +65,7 @@ function index_to_gb(idx) {
   return sprintf("%02X%02X%02X%02X", b0, b1, b2, b3);
 }
 
-/^\#/ {
+/^#/ {
   print;
   next;
 }
@@ -119,4 +119,3 @@ END {
        }
     }
 }
-
diff --git a/admin/coccinelle/vector_contents.cocci 
b/admin/coccinelle/vector_contents.cocci
index 3c696ff..10b01f2 100644
--- a/admin/coccinelle/vector_contents.cocci
+++ b/admin/coccinelle/vector_contents.cocci
@@ -1,4 +1,4 @@
-// Avoid direct access to `contents' member of
+// Avoid direct access to 'contents' member of
 // Lisp_Vector, use AREF and ASET where possible.
 @expression@
 identifier I1, I2;
diff --git a/admin/make-emacs b/admin/make-emacs
index f0c5370..24e9844 100755
--- a/admin/make-emacs
+++ b/admin/make-emacs
@@ -100,7 +100,7 @@ chdir $root if cwd () eq "/";
 chdir "./src";
 print "Build in ", cwd (), "\n";
 
-# If first arg is `all' or if `--all' specified, ensure a clean
+# If first arg is 'all' or if '--all' specified, ensure a clean
 # build.
 
 if (@ARGV && $ARGV[0] eq "all")
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index d326282..0730b94 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -13,13 +13,13 @@ Steps to take before starting on the first pretest in any 
release sequence:
     have them available for the duration of the release process.
 
 2.  Consider increasing the value of the variable
-    `customize-changed-options-previous-release' in cus-edit.el to
+    'customize-changed-options-previous-release' in cus-edit.el to
     refer to a newer version of Emacs.  (This is probably needed only
     when preparing the first pretest for a major Emacs release.)
     Commit cus-edit.el if changed.
 
 3.  Remove any old pretests from ftp://alpha.gnu.org/gnu/emacs/pretest.
-    You can use `gnupload --delete' (see below for more gnupload details).
+    You can use 'gnupload --delete' (see below for more gnupload details).
 
 General steps (for each step, check for possible errors):
 
@@ -96,12 +96,12 @@ General steps (for each step, check for possible errors):
 
     If this is the first pretest of a major release, just comparing
     with the previous release may overlook many new files.  You can try
-    something like `find . | sort' in a clean repository, and compare the
+    something like 'find . | sort' in a clean repository, and compare the
     results against the new tar contents.
 
 7.   tar -xf emacs-NEW.tar; cd emacs-NEW
      ./configure --prefix=/tmp/emacs && make && make install
-    Use `script' or M-x compile to save the compilation log in
+    Use 'script' or M-x compile to save the compilation log in
     compile-NEW.log and compare it against an old one.  The easiest way
     to do that is to visit the old log in Emacs, change the version
     number of the old Emacs to __, do the same with the new log and do
diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker
index fd7bd08..fb65bbe 100644
--- a/admin/notes/bugtracker
+++ b/admin/notes/bugtracker
@@ -334,7 +334,7 @@ 
http://debbugs.gnu.org/cgi/pkgreport.cgi?users=emacs;tag=calendar
 *** To merge bugs:
 Eg when bad replies create a bunch of new bugs for the same report.
 Bugs must all be in the same state (e.g. same package(s) and severity
--- see `reassign' and `severity' below), but need not have the same
+-- see 'reassign' and 'severity' below), but need not have the same
 tags (tags are merged). E.g.:
 
 merge 123 124 125 ...
@@ -343,8 +343,8 @@ Note that merging does not affect titles.  In particular, a 
"retitle"
 of merged bugs only affects individual bugs, not all of them.
 
 *** Forcing a merge:
-Like `merge', but bugs need not be in the same state.  The packages
-must still match though (see `reassign' below).  The first one listed
+Like 'merge', but bugs need not be in the same state.  The packages
+must still match though (see 'reassign' below).  The first one listed
 is the master.  E.g.:
 
 forcemerge 123 124 125 ...
@@ -383,7 +383,7 @@ See http://debbugs.gnu.org/Developer#severities for the 
meanings.
 *** To set the owner of a bug:
 owner 123 A Hacker <address@hidden>
 
-The shorthand `!' means your own address.
+The shorthand '!' means your own address.
 
 *** To remove the owner of a bug:
 noowner 123
@@ -408,7 +408,7 @@ reassign 1234 emacs
 Note that reassigning clears the list of found versions, even if the
 new packages includes the original one.
 
-** To remove spam from the tracker, move it to the `spam' pseudo-package:
+** To remove spam from the tracker, move it to the 'spam' pseudo-package:
 reassign 123 spam
 
 (Should not be necessary any more, now that the input is moderated.)
@@ -468,10 +468,10 @@ time, rather than by increasing bug number
 *** When you fix a bug, it can be helpful to put the bug number in the
 change log entry, for example:
 
-   * foo.el (foofunc): Fix the `foo' case.  (Bug#123)
+   * lisp/menu-bar.el (menu-set-font): Doc fix.  (Bug#21303)
 
 Then the relevant bug can be found for easy reference.  If it's an
-obvious fix (e.g. a typo), there's no need to clutter the log with the
+obvious fix (e.g., a typo), there's no need to clutter the log with the
 bug number.
 
 Similarly, when you close a bug, it can be helpful to include the
@@ -480,7 +480,7 @@ can see exactly what the fix was.
 
 *** bug-reference-mode
 
-Activate `bug-reference-mode' in ChangeLogs to get clickable links to
+Activate 'bug-reference-mode' in ChangeLogs to get clickable links to
 the bug web-pages.
 
 *** Debian stuff
diff --git a/admin/notes/copyright b/admin/notes/copyright
index 45b7c61..3ba9c55 100644
--- a/admin/notes/copyright
+++ b/admin/notes/copyright
@@ -132,7 +132,7 @@ lib-src/rcs2log           # Copyright
 Cocoa/Emacs.base/Contents/Info.plist
 Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings
 GNUstep/Emacs.base/Resources/Info-gnustep.plist
-   `set-copyright' in admin.el will do all the above.
+   'set-copyright' in admin.el will do all the above.
 
 aclocal.m4
 configure
diff --git a/admin/notes/elpa b/admin/notes/elpa
index 3922604..4c0f198 100644
--- a/admin/notes/elpa
+++ b/admin/notes/elpa
@@ -13,7 +13,7 @@ daily.  This script (which is kept in 
elpa/admin/update-archive.sh) generates
 the content visible at http://elpa.gnu.org/packages.
 
 A new package is released as soon as the "version number" of that package is
-changed.  So you can use `elpa' to work on a package without fear of releasing
+changed.  So you can use 'elpa' to work on a package without fear of releasing
 those changes prematurely.  And once the code is ready, just bump the
 version number to make a new release of the package.
 
diff --git a/admin/notes/git-workflow b/admin/notes/git-workflow
index d1d105a..3c2c76c 100644
--- a/admin/notes/git-workflow
+++ b/admin/notes/git-workflow
@@ -33,7 +33,7 @@ You now have both branches conveniently accessible, and you 
can do
 Fixing bugs
 ===========
 
-You edit the files in either branch, `M-x vc-dir', and check in your
+You edit the files in either branch, 'M-x vc-dir', and check in your
 changes.  Then you need to push the data to the main repository.  This
 will usually fail, since somebody else has pushed other changes in the
 meantime.  To fix this, say
@@ -46,6 +46,14 @@ top of that.  Then say
 git push
 
 
+Sending patches
+===============
+
+If you lack push access or would like feedback before pushing a patch,
+you commit your change locally and then send a patch file as a bug report
+as described in ../../CONTRIBUTE.
+
+
 Backporting to emacs-24
 =======================
 
diff --git a/admin/notes/hydra b/admin/notes/hydra
index 80ce787..ce4a683 100644
--- a/admin/notes/hydra
+++ b/admin/notes/hydra
@@ -16,8 +16,8 @@ 
http://lists.gnu.org/archive/html/hydra-users/2013-08/msg00000.html
 
 * Mail notifications
 In addition to the web interface, Hydra can send notifications by
-email when the build status of a project changes—e.g., from
-`SUCCEEDED' to `FAILED'.  It sends notifications about build status in
+email when the build status of a project changes, e.g., from
+SUCCEEDED to FAILED.  It sends notifications about build status in
 Emacs trunk to address@hidden
 
 If you want to receive these notifications, please subscribe at
@@ -25,16 +25,16 @@ http://lists.gnu.org/mailman/listinfo/emacs-buildstatus
 
 * The Emacs jobset consists of the following jobs:
 
-** The `tarball' job
+** The 'tarball' job
 which gets a checkout from the repository, and does a bootstrap followed
 by running make-dist to create a tarball.  If this job fails, all the
 others will too (because they use the tarball as input).
 
-** The `build' job
+** The 'build' job
 which starts from the tarball and does a normal build
 
 ** The 'coverage' job
-does a gcov build and then runs `make check'.  Fails if any test fails.
+does a gcov build and then runs 'make check'.  Fails if any test fails.
 
 * Nix expressions
 The recipe for GNU Emacs are available via Git:
diff --git a/admin/notes/multi-tty b/admin/notes/multi-tty
index c547e14..868d451 100644
--- a/admin/notes/multi-tty
+++ b/admin/notes/multi-tty
@@ -82,7 +82,7 @@ Known problems:
          minibuffer prompt (which is a kind of recursive editing) on
          another display.  To unfreeze your session, switch to that
          display and complete the recursive edit, for example by
-         pressing C-] (`abort-recursive-edit').
+         pressing C-] ('abort-recursive-edit').
 
          I am sorry to say that currently there is no way to break
          out of this "single-kboard mode" from a frozen display.  If
@@ -209,11 +209,11 @@ following:
 THINGS TO DO
 ------------
 
-** See if `tty-defined-color-alist' needs to be terminal-local.
+** See if 'tty-defined-color-alist' needs to be terminal-local.
    Update: Dan says it should be, so convert it.
 
 ** Mikhail Gusarov suggest to add a hook akin to
-   `after-make-frame-functions' that is called whenever Emacs connects
+   'after-make-frame-functions' that is called whenever Emacs connects
    to a new terminal.  Good idea!
 
 ** emacsclient -t on the console does not work after su.  You have to
@@ -237,16 +237,16 @@ THINGS TO DO
    proxy idea.
 
 ** lisp/vc.el depends on the terminal type during load time.
-   `vc-annotate-color-map' is one example that needs to be fixed.
+   'vc-annotate-color-map' is one example that needs to be fixed.
 
-** Understand how `quit_throw_to_read_char' works, and fix any bugs
+** Understand how 'quit_throw_to_read_char' works, and fix any bugs
    that come to light.
 
 ** See if getcjmp can be eliminated somehow.  Why does Emacs allow
    asynchronous input processing while it's reading input anyway?
 
-** `delete-frame' events are handled by `special-event-map'
-   immediately when read by `read_char'.  This is fine but it prevents
+** 'delete-frame' events are handled by 'special-event-map'
+   immediately when read by 'read_char'.  This is fine but it prevents
    higher-level keymaps from binding that event to get notified of the
    deleted frame.
 
@@ -254,26 +254,26 @@ THINGS TO DO
    deletions after they have happened, usually because they want to
    clean up after the deleted frame.  Not all frame-local states can
    be stored as a frame parameter.  For example,
-   `display-splash-screen' uses `recursive-edit' with a special keymap
+   'display-splash-screen' uses 'recursive-edit' with a special keymap
    override to create its buffer---and it leads to all kinds of
    nastiness if Emacs stays in this recursive edit mode after the
    frame containing the splash screen is deleted.  Basically, the
    splash-screen implementation wants to throw out of the recursive
    edit when the frame is deleted; however, it is not legal to throw
-   from `delete-frame-functions' because `delete-frame' must not fail.
-   (Introducing `delete-frame-after-functions' would not help either
-   because `delete-frame' may not fail at that time either.)
+   from 'delete-frame-functions' because 'delete-frame' must not fail.
+   (Introducing 'delete-frame-after-functions' would not help either
+   because 'delete-frame' may not fail at that time either.)
 
-   Currently `fancy-splash-screens' installs a
-   `delete-frame-functions' hook that sets up a timer to exit the
+   Currently 'fancy-splash-screens' installs a
+   'delete-frame-functions' hook that sets up a timer to exit the
    recursive edit.  This is an adequate solution, but it would perhaps
-   be better to have something like a `frame-deleted' event that could
+   be better to have something like a 'frame-deleted' event that could
    be bound in the normal way.
 
-** Trouble: `setenv' doesn't actually set environment variables in the
+** Trouble: 'setenv' doesn't actually set environment variables in the
    Emacs process.  This defeats the purpose of the elaborate
-   `server-with-environment' magic around the `tgetent' call in
-   `init_tty'.  D'oh.
+   'server-with-environment' magic around the 'tgetent' call in
+   'init_tty'.  D'oh.
 
 ** (Possibly) create hooks in struct device for creating frames on a
    specific terminal, and eliminate the hackish terminal-related frame
@@ -290,9 +290,9 @@ THINGS TO DO
    as static, removing it from dispextern.h.
    Move fatal to emacs.c and declare it somewhere.
 
-** Search for `suspend-emacs' references and replace them with
-   `suspend-frame', if necessary.  Ditto for `save-buffers-kill-emacs'
-   vs. `save-buffers-kill-display'.
+** Search for 'suspend-emacs' references and replace them with
+   'suspend-frame', if necessary.  Ditto for 'save-buffers-kill-emacs'
+   vs. 'save-buffers-kill-display'.
 
 ** Emacs crashes when a tty frame is resized so that there is no space
    for all its windows.  (Tom Schutzer-Weissmann)
@@ -315,7 +315,7 @@ THINGS TO DO
    impression that the various multidisplay fixes will only get
    released in GTK+ 2.10.
 
-** Audit `face-valid-attribute-values' usage in customize and
+** Audit 'face-valid-attribute-values' usage in customize and
    elsewhere.  Its return value depends on the current window system.
    Replace static initializers using it with runtime functions.  For
    example, custom's buttons are broken on non-initial device types.
@@ -325,9 +325,9 @@ THINGS TO DO
 
 ** frames-on-display-list should also accept frames.
 
-** Consider the `tty-type' frame parameter and the `display-tty-type'
+** Consider the 'tty-type' frame parameter and the 'display-tty-type'
    function.  They serve the exact same purpose.  I think it may be
-   a good idea to eliminate one of them, preferably `tty-type'.
+   a good idea to eliminate one of them, preferably 'tty-type'.
 
 ** The handling of lisp/term/*.el, and frame creation in general, is a
    big, big mess.  How come the terminal-specific file is loaded by
@@ -340,27 +340,23 @@ THINGS TO DO
    changed in CVS, and frame.el in multi-tty has not yet been adapted
    for the changes.  (It needs to look at
    default-frame-background-mode.)  (Update: maybe it is fixed now;
-   needs testing.) (Note that the byte compiler has this to say about
-   term/rxvt.el:)
+   needs testing.)
 
-       term/rxvt.el:309:17:Warning: assignment to free variable
-           `default-frame-background-mode'
-
-** I think `(set-)terminal-local-value' and the terminal parameter
+** I think '(set-)terminal-local-value' and the terminal parameter
    mechanism should be integrated into a single framework.
 
-   (Update: `(set-)terminal-local-value' is now eliminated, but the
+   (Update: '(set-)terminal-local-value' is now eliminated, but the
    terminal-local variables should still be accessible as terminal
-   parameters.  This also applies to `display-name' and similar
+   parameters.  This also applies to 'display-name' and similar
    functions.)
 
 ** Add the following hooks: after-delete-frame-hook (for server.el,
    instead of delete-frame-functions),
    after-delete-terminal-functions, after-create-terminal-functions.
 
-** BULK RENAME: The `display-' prefix of new Lisp-level functions
-   conflicts with stuff like `display-time-mode'.  Use `device-'
-   or `terminal-' instead.  I think I prefer `terminal-'.
+** BULK RENAME: The 'display-' prefix of new Lisp-level functions
+   conflicts with stuff like 'display-time-mode'.  Use 'device-'
+   or 'terminal-' instead.  I think I prefer 'terminal-'.
 
    It turns out that most of the offending Lisp functions were defined
    in the trunk.  Therefore, compatibility aliases should be defined
@@ -466,7 +462,7 @@ THINGS TO DO
 
 ** With iswitchb-default-method set to 'always-frame, only frames on
    the current display should be considered.  This might involve
-   extending `get-buffer-window'.
+   extending 'get-buffer-window'.
 
 ** Have a look at Vlocale_coding_system.  Seems like it would be a
    tedious job to localize it, although most references use it for
@@ -537,7 +533,7 @@ DIARY OF CHANGES
 
 -- Change make-terminal-frame to support specifying another tty.
 
-   (Done, new frame parameters: `tty' and `tty-type'.)
+   (Done, new frame parameters: 'tty' and 'tty-type'.)
 
 -- Implement support for reading from multiple terminals.
 
@@ -549,7 +545,7 @@ DIARY OF CHANGES
 
    (Update2: After enabling X, they don't.)
 
--- other-frame should cycle through the frames on the `current'
+-- other-frame should cycle through the frames on the 'current'
    terminal only.
 
    (Done, by trivially modifying next_frame and prev_frame.)
@@ -606,7 +602,7 @@ DIARY OF CHANGES
 
    (Update^3: Not any more.)
 
--- Make make-terminal-frame look up the `tty' and `tty-type' frame
+-- Make make-terminal-frame look up the 'tty' and 'tty-type' frame
    parameters from the currently selected terminal before the global
    default.
 
@@ -824,7 +820,7 @@ DIARY OF CHANGES
 
    (Done, breaking interactive temacs.)
 
--- The command `emacsclient -t -e '(delete-frame)'' fails to exit.
+-- The command "emacsclient -t -e '(delete-frame)'" fails to exit.
 
    (Fixed.)
 
@@ -934,7 +930,7 @@ DIARY OF CHANGES
    frame sets single_kboard).  Update: the face problems are caused by
    bugs in term.el, not in multi-tty.  The lockup is caused by
    single_kboard mode, and is not easily resolvable.  The best thing to
-   do is to simply refuse to create a tty frame of type `eterm'.
+   do is to simply refuse to create a tty frame of type 'eterm'.
 
    (Fixed, changed emacsclient to check for TERM=eterm.  The face
    complaints seem to be caused by bugs in term.el; they are not
@@ -943,14 +939,14 @@ DIARY OF CHANGES
 -- Find out the best way to support suspending Emacs with multiple
    ttys.  My guess: disable it on the controlling tty, but from other
    ttys pass it on to emacsclient somehow.  (It is (I hope) trivial to
-   extend emacsclient to handle suspend/resume.  A `kill -STOP' almost
+   extend emacsclient to handle suspend/resume.  A 'kill -STOP' almost
    works right now.)
 
    (Done.  I needed to play with signal handling and the server
    protocol a bit to make emacsclient behave as a normal UNIX program
    wrt foreground/background process groups.)
 
--- There is a flicker during the startup of `emacs -nw'; it's as if
+-- There is a flicker during the startup of 'emacs -nw'; it's as if
    the terminal is initialized, reset and then initialized again.
    Debug this.  (Hint: narrow_foreground_group is called twice during
    startup.)
@@ -973,7 +969,7 @@ DIARY OF CHANGES
 
    (It was an internal interface that may be changed when necessary.)
 
--- Change Lisp code not to (getenv "TERM"); use the `tty-type' frame
+-- Change Lisp code not to (getenv "TERM"); use the 'tty-type' frame
    parameter or the frame-tty-type function instead.  (M-x tags-search
    "TERM" helps with this.)  Update: Actually, all getenv invocations
    should be checked for multi-tty compatibility, and an interface
@@ -983,7 +979,7 @@ DIARY OF CHANGES
    calls should be mostly left as they are.)
 
 -- Add an elaborate mechanism for display-local variables.  (There are
-   already a few of these; search for `terminal-local' in the Elisp
+   already a few of these; search for 'terminal-local' in the Elisp
    manual.)
 
    (Not needed.  Display-local variables could be emulated by
@@ -1002,7 +998,7 @@ DIARY OF CHANGES
    emacsclient process for server tty frames.)
    (Update: Not really; Vlocale_coding_system is still global.)
 
--- Make `struct display' accessible to Lisp programs.  Accessor functions:
+-- Make 'struct display' accessible to Lisp programs.  Accessor functions:
 
        (displayp OBJECT):  Returns t if OBJECT is a display.
                => Implemented as display-live-p.
@@ -1020,7 +1016,7 @@ DIARY OF CHANGES
                => Already implemented, see frames-on-display-list.
 
        (display-type DISPLAY):  Returns the type of DISPLAY, as a
-               symbol.  (See `framep'.)
+               symbol.  (See 'framep'.)
                => Implemented as display-live-p.
 
        (display-device DISPLAY): Returns the name of the device that
@@ -1053,7 +1049,7 @@ DIARY OF CHANGES
    (Done.)
 
 -- Support multiple character locales.  A version of
-   `set-locale-environment' needs to be written for setting up
+   'set-locale-environment' needs to be written for setting up
    display-local settings on ttys.  I think calling
    set-display-table-and-terminal-coding-system and
    set-keyboard-coding-system would be enough.  The language
@@ -1066,7 +1062,7 @@ DIARY OF CHANGES
    them to tweak only frame-local settings, if possible.  (They tend
    to call define-key to set function key sequences a lot.)
 
-   (Done, by making `function-key-map' terminal-local (i.e., part of
+   (Done, by making 'function-key-map' terminal-local (i.e., part of
    struct kboard).  This has probably covered all the remaining problems.)
 
 -- xt-mouse.el needs to be adapted for multi-tty.  It currently
@@ -1083,8 +1079,8 @@ DIARY OF CHANGES
 
    This only seems to affect displays that are of the same terminfo
    type as the selected one. Interestingly, in screen Emacs normally
-   reports the up arrow key as `M-o A', but after the above SNAFU, it
-   complains about `M-[ a'.  UNIX ttys are a complete mystery to me,
+   reports the up arrow key as 'M-o A', but after the above SNAFU, it
+   complains about 'M-[ a'.  UNIX ttys are a complete mystery to me,
    but it seems the reset-reinitialize cycle somehow leaves the
    non-selected terminals in a different state than usual.  I have no
    idea how this could happen.
@@ -1132,15 +1128,15 @@ DIARY OF CHANGES
    clear what binding is in effect in any given time.  See if
    current_kboard (or at least the terminal-local bindings exported to
    Lisp) might be changed to be tied to the selected frame instead.
-   Currently, `function-key-map' and `key-translation-map' may be
+   Currently, 'function-key-map' and 'key-translation-map' may be
    accessed reliably only using the hackish
-   `(set-)terminal-local-value' functions.
+   '(set-)terminal-local-value' functions.
 
-   Perhaps there should be a difference between `last-command' &co.
+   Perhaps there should be a difference between 'last-command' &co.
    and these more conventional configuration variables.
-   (E.g. `symbol-value' would use current_kboard to access
-   `last-command', but SELECTED_FRAME()->display->kboard to get the
-   value of `function-key-map'.
+   (E.g. 'symbol-value' would use current_kboard to access
+   'last-command', but SELECTED_FRAME()->display->kboard to get the
+   value of 'function-key-map'.
 
    (Fixed in patch-434.)
 
@@ -1151,7 +1147,7 @@ DIARY OF CHANGES
    below" was the set-input-mode madness.)
 
    (Update: this bug was fixed for good in patch-449.  It was tracked
-   down to a bug in `read_key_sequence': it failed to reinitialize its
+   down to a bug in 'read_key_sequence': it failed to reinitialize its
    local function-key-map/key-translation-map references when it
    switched keyboards.  I don't understand why did this bug only
    appear on brand new frames, though!)
@@ -1163,35 +1159,35 @@ DIARY OF CHANGES
 -- Implement automatic forwarding of client environment variables to
    forked processes, as discussed on the multi-tty list.  Terminal
    parameters are now accessible in C code, so the biggest obstacle is
-   gone.  The `getenv_internal' and `child_setup' functions in
+   gone.  The 'getenv_internal' and 'child_setup' functions in
    callproc.c must be changed to support the following variable:
 
        terminal-local-environment-variables is a variable defined in ...
 
        Enable or disable terminal-local environment variables.
 
-       If set to t, `getenv', `setenv' and subprocess creation
+       If set to t, 'getenv', 'setenv' and subprocess creation
        functions use the environment variables of the emacsclient
        process that created the selected frame, ignoring
-       `process-environment'.
+       'process-environment'.
 
-       If set to nil, Emacs uses `process-environment' and ignores
+       If set to nil, Emacs uses 'process-environment' and ignores
        the client environment.
 
-       Otherwise, `terminal-local-environment-variables' should be a
+       Otherwise, 'terminal-local-environment-variables' should be a
        list of variable names (represented by Lisp strings) to look
        up in the client environment.  The rest will come from
-       `process-environment'.
+       'process-environment'.
 
-   (Implemented in patch-461; `terminal-getenv', `terminal-setenv' and
-   `with-terminal-environment' are now replaced by extensions to
-   `getenv' and `setenv', and the new `local-environment-variables'
+   (Implemented in patch-461; 'terminal-getenv', 'terminal-setenv' and
+   'with-terminal-environment' are now replaced by extensions to
+   'getenv' and 'setenv', and the new 'local-environment-variables'
    facility.  Yay!)
 
    (Updated in patch-465 to fix the semantics of let-binding
-   `process-environment'.  `process-environment' was changed to
+   'process-environment'.  'process-environment' was changed to
    override all local/global environment variables, and a new variable
-   `global-environment' was introduced to have `process-environment's
+   'global-environment' was introduced to have 'process-environment's
    old meaning.)
 
    (Updated in patch-466 to fix the case when two emacsclient sessions
@@ -1199,27 +1195,27 @@ DIARY OF CHANGES
    environment lists are now stored as frame parameters, so the
    C-level terminal parameters are not strictly necessary any more.)
 
--- `Fdelete_frame' is called from various critical places where it is
+-- 'Fdelete_frame' is called from various critical places where it is
    not acceptable for the frame deletion to fail, e.g. from
-   x_connection_closed after an X error.  `Fdelete_frame' now protects
-   against `delete-frame-functions' throwing an error and preventing a
+   x_connection_closed after an X error.  'Fdelete_frame' now protects
+   against 'delete-frame-functions' throwing an error and preventing a
    frame delete. (patch-475)
 
 -- Fix set-input-mode for multi-tty.  It's a truly horrible interface;
    what if we'd blow it up into several separate functions (with a
    compatibility definition)?
 
-   (Done.  See `set-input-interrupt-mode', `set-output-flow-control',
-   `set-input-meta-mode' and `set-quit-char'.) (patch-457)
+   (Done.  See 'set-input-interrupt-mode', 'set-output-flow-control',
+   'set-input-meta-mode' and 'set-quit-char'.) (patch-457)
 
--- Let-binding `overriding-terminal-local-map' on a brand new frame
-   does not seem to work correctly.  (See `fancy-splash-screens'.)
+-- Let-binding 'overriding-terminal-local-map' on a brand new frame
+   does not seem to work correctly.  (See 'fancy-splash-screens'.)
    The keymap seems to be set up right, but events go to another
-   terminal.  Or is it `unread-command-events' that gets Emacs
+   terminal.  Or is it 'unread-command-events' that gets Emacs
    confused?  Investigate.
 
    (Emacs was confused because a process filter entered
-   `recursive-edit' while Emacs was reading input.  I added support
+   'recursive-edit' while Emacs was reading input.  I added support
    for this in the input system.) (patch-489)
 
 -- I smell something funny around pop_kboard's "deleted kboard" case.
@@ -1244,7 +1240,7 @@ DIARY OF CHANGES
    synchronously (with wait_reading_process_input), or asynchronously
    by SIGIO or polling (SIGALRM).  C-g either sets the Vquit_flag,
    signals a 'quit condition (when immediate_quit), or throws to
-   `getcjmp' when Emacs was waiting for input when the C-g event
+   'getcjmp' when Emacs was waiting for input when the C-g event
    arrived.)
 
 -- Replace wrong_kboard_jmpbuf with a special return value of
@@ -1253,7 +1249,7 @@ DIARY OF CHANGES
 
    (Done in patch-500.)
 
--- `tool-bar-mode', `scroll-bar-mode', `menu-bar-mode' and
+-- 'tool-bar-mode', 'scroll-bar-mode', 'menu-bar-mode' and
    'fringe-mode' are modes global to the entire Emacs session, not
    just a single frame or a single terminal.  This means that their
    status sometimes differs from what's actually displayed on the
@@ -1266,7 +1262,7 @@ DIARY OF CHANGES
 
    (Done in patch-537.)
 
--- The `default-directory' variable should somehow be set to the
+-- The 'default-directory' variable should somehow be set to the
    cwd of the emacsclient process when the user runs emacsclient
    without file arguments.  Perhaps it is OK to just override the
    directory of the *scratch* buffer.
@@ -1278,9 +1274,9 @@ DIARY OF CHANGES
    frame parameter) is not filled with the correct background color.
 
    It seems the border contents are drawn onto by the
-   update_single_window call in `x-show-tip'.  After some debugging, I
+   update_single_window call in 'x-show-tip'.  After some debugging, I
    think the window's background color is not set up
-   correctly---calling `x_clear_area' fills the specified area with
+   correctly---calling 'x_clear_area' fills the specified area with
    black, not light yellow.
 
    (Done in patch-544.  A background_pixel field was defined both in
diff --git a/admin/notes/newfile b/admin/notes/newfile
index a682fec..072e966 100644
--- a/admin/notes/newfile
+++ b/admin/notes/newfile
@@ -6,7 +6,7 @@ CHECKLIST FOR ADDING A NEW FILE TO EMACS -*- outline -*-
 format, copyright and license notice, etc).
 
 ** Make sure the filename does not cause the DOS port any problems (8+3).
-Run the `doschk' program like this:
+Run the 'doschk' program like this:
 
     find /path/to/emacs -print | doschk
 
diff --git a/admin/notes/repo b/admin/notes/repo
index f38fd2c..b27a3f4 100644
--- a/admin/notes/repo
+++ b/admin/notes/repo
@@ -73,7 +73,7 @@ removes a file, then remove the corresponding files by hand.
 You may see conflicts in autoload md5sums in comments.  Strictly
 speaking, the right thing to do is merge everything else, resolve the
 conflict by choosing either the master or branch version, then run
-`make -C lisp autoloads' to update the md5sums to the correct master
+'make -C lisp autoloads' to update the md5sums to the correct master
 value before committing.
 
 * Re-adding a file that has been removed from the repository
@@ -96,12 +96,12 @@ which is often more appropriate.
 
 * Undoing a commit (uncommitting)
 
-If you have not pushed the commit, you may be able to use `git reset
+If you have not pushed the commit, you may be able to use 'git reset
 --hard' with a hash argument to revert the your local repo copy to the
 pre-commit state.
 
 If you have pushed  commit, resetting will be ineffective because it
-will only vanish the commit in your local copy.  Instead, use `git
+will only vanish the commit in your local copy.  Instead, use 'git
 revert', giving it the commit ID as argument. This will create a
 new commit that backs out the change. Then push that.
 
@@ -115,7 +115,7 @@ again.
 * Bisecting
 
 This is a semi-automated way to find the revision that introduced a bug.
-Browse `git help bisect' for technical instructions.
+Browse 'git help bisect' for technical instructions.
 
 * Maintaining ChangeLog history
 
diff --git a/admin/notes/unicode b/admin/notes/unicode
index 079173f..bdef4cb 100644
--- a/admin/notes/unicode
+++ b/admin/notes/unicode
@@ -97,11 +97,11 @@ regard to completeness.
 
  * iso-2022 charsets get unified on i/o.
 
-       With the change on 2003-01-06, decoding routines put `charset'
-       property to decoded text, and iso-2022 encoder pay attention
+       With the change on 2003-01-06, decoding routines put the 'charset'
+       property onto decoded text, and iso-2022 encoder pay attention
        to it.  Thus, for instance, reading and writing by
        iso-2022-7bit preserve the original designation sequences.
-       The property name `preferred-charset' may be better?
+       The property name 'preferred-charset' may be better?
 
        We may have to utilize this property to decide a font.
 
diff --git a/admin/quick-install-emacs b/admin/quick-install-emacs
index 911b39b..55510fb 100755
--- a/admin/quick-install-emacs
+++ b/admin/quick-install-emacs
@@ -40,7 +40,7 @@ VERBOSE=''
 
 me="`basename $0`"
 
-# Install commands (if the user specifies the `--verbose' option, it is
+# Install commands (if the user specifies the '--verbose' option, it is
 # passed to these commands, so that feature only works if these commands
 # implement it too)
 LINK='cp -lf'
@@ -58,7 +58,7 @@ unset LANG LC_ALL LC_MESSAGES
 
 # Some messages
 USAGE="Usage: $me [OPTION...] BUILD_TREE [PREFIX]"
-TRY="Try "\`"$me --help' for more information."
+TRY="Try '$me --help' for more information."
 
 # Parse command-line options
 while :; do
@@ -93,7 +93,7 @@ Install emacs quickly
       --help                 display this help and exit
       --version              output version information and exit
 
-$me install emacs \`incrementally,' that is, it will
+$me install emacs "incrementally", that is, it will
 install only those files that have changed since the last time it was
 invoked, and remove any obsolete files from the installation
 directories.  It also uses hard-links into the source and build trees to
@@ -104,9 +104,9 @@ and build directories reside.
 
 Optionally, $me can also remove old versions of
 automatically generated files that are version-specific (such as the
-versioned emacs executables in the \`src' directory).
-The latter action is called \`pruning,' and
-can be enabled using the \`-p' or \`--prune' options.
+versioned emacs executables in the 'src' directory).
+The latter action is called "pruning", and
+can be enabled using the '-p' or '--prune' options.
 EOF
       exit 0
       ;;
@@ -124,7 +124,7 @@ EOF
       set -- `echo $FIRST | sed 's/-\(.\)\(.*\)/-\1 -\2/'` "$@"
       ;;
     -*)
-      echo 1>&2 "$me: unrecognized option "\`"$1'"
+      echo 1>&2 "$me: unrecognized option '$1'"
       echo 1>&2 "$TRY"
       exit 1
       ;;
diff --git a/autogen.sh b/autogen.sh
index bc9c5a0..926915c 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -216,8 +216,20 @@ autoreconf -fi -I m4 || exit $?
 ## cause 'make' to needlessly run 'autoheader'.
 echo timestamp > src/stamp-h.in || exit
 
-## Install Git hooks, if using Git.
-if test -d .git/hooks; then
+
+## Configure Git, if using Git.
+if test -d .git; then
+
+    # Configure 'git diff' hunk header format.
+
+    git config 'diff.elisp.xfuncname' \
+       '^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)' || exit
+    git config 'diff.texinfo.xfuncname' \
+       'address@hidden:space:]]+([^,[:space:]][^,]+)' || exit
+
+
+    # Install Git hooks.
+
     tailored_hooks=
     sample_hooks=
 
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index 0cab1bf..a0e0a05 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -333,7 +333,7 @@ sub git_dir_option($)
           $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
         }
 
-      my @line = split /\s*\n/, $rest;
+      my @line = split /[ \t]*\n/, $rest;
       my $author_line = shift @line;
       defined $author_line
         or die "$ME:$.: unexpected EOF\n";
diff --git a/configure.ac b/configure.ac
index 9f8089f..d537f73 100644
--- a/configure.ac
+++ b/configure.ac
@@ -929,9 +929,12 @@ else
   nw="$nw -Wsuggest-attribute=pure"
 
   # This part is merely for shortening the command line,
+  # since -Wall implies -Wswitch.
+  nw="$nw -Wswitch"
+
+  # This part is merely for shortening the command line,
   # since -Wno-FOO needs to be added below regardless.
   nw="$nw -Wmissing-field-initializers"
-  nw="$nw -Wswitch"
   nw="$nw -Wtype-limits"
   nw="$nw -Wunused-parameter"
 
@@ -948,7 +951,6 @@ else
   gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one
   gl_WARN_ADD([-Wno-sign-compare])     # Too many warnings for now
   gl_WARN_ADD([-Wno-type-limits])      # Too many warnings for now
-  gl_WARN_ADD([-Wno-switch])           # Too many warnings for now
   gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
   gl_WARN_ADD([-Wno-format-nonliteral])
 
@@ -3998,6 +4000,8 @@ AC_SUBST(KRB4LIB)
 
 AC_CHECK_HEADERS(valgrind/valgrind.h)
 
+AC_CHECK_MEMBERS([struct unipair.unicode], [], [], [[#include <linux/kd.h>]])
+
 AC_CHECK_FUNCS_ONCE(tzset)
 
 ok_so_far=yes
diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi
index a3cb989..23d7e28 100644
--- a/doc/emacs/abbrevs.texi
+++ b/doc/emacs/abbrevs.texi
@@ -20,7 +20,7 @@ to expand the letters in the buffer before point by looking 
for other
 words in the buffer that start with those letters.  @xref{Dynamic
 Abbrevs}.
 
-  ``Hippie'' expansion generalizes abbreviation expansion.
+  A third kind, @dfn{hippie expansion}, generalizes abbreviation expansion.
 @xref{Hippie Expand, , Hippie Expansion, autotype, Features for
 Automatic Typing}.
 
@@ -250,10 +250,10 @@ keeps track of this to help you see which abbrevs you 
actually use, so
 that you can eliminate those that you don't use often.  The string at
 the end of the line is the expansion.
 
-  Some abbrevs are marked with @samp{(sys)}.  These ``system'' abbrevs
+  Some abbrevs are marked with @samp{(sys)}.  These @dfn{system abbrevs}
 (@pxref{Abbrevs,,, elisp, The Emacs Lisp Reference Manual}) are
 pre-defined by various modes, and are not saved to your abbrev file.
-To disable a ``system'' abbrev, define an abbrev of the same name that
+To disable a system abbrev, define an abbrev of the same name that
 expands to itself, and save it to your abbrev file.
 
 @findex edit-abbrevs
diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi
index f612a7b..3eac9b3 100644
--- a/doc/emacs/ack.texi
+++ b/doc/emacs/ack.texi
@@ -155,7 +155,7 @@ directory changes in shell buffers; @file{filecache.el}, 
which records
 which directories your files are in; @file{locate.el}, which
 interfaces to the @code{locate} command; @file{find-lisp.el}, an Emacs
 Lisp emulation of the @command{find} program; @file{net-utils.el}; and
-the ``generic mode'' feature.
+the generic mode feature.
 
 @item
 Emmanuel Briot wrote @file{xml.el}, an XML parser for Emacs; and
@@ -196,7 +196,8 @@ for editing IDL and WAVE CL.
 Bob Chassell wrote @file{texnfo-upd.el}, @file{texinfo.el}, and
 @file{makeinfo.el}, modes and utilities for working with Texinfo files;
 and @file{page-ext.el}, commands for extended page handling.  He also
-wrote the ``Introduction to programming in Emacs Lisp'' manual.
+wrote the Emacs Lisp introduction.  @xref{Top,,,eintr, Introduction to
+Programming in Emacs Lisp}.
 
 @item
 Jihyun Cho wrote @file{hanja-util.el} and @file{hangul.el}, utilities
@@ -247,10 +248,10 @@ for compiled Emacs Lisp code.
 
 @item
 Mathias Dahl wrote @file{image-dired.el}, a package for viewing image
-files as ``thumbnails''.
+files as thumbnails.
 
 @item
-Julien Danjou wrote an implementation of ``Desktop Notifications''
+Julien Danjou wrote an implementation of desktop notifications
 (@file{notifications.el}, and related packages for ERC and Gnus);
 and @file{color.el}, a library for general color manipulation.
 He also made various contributions to Gnus.
@@ -544,11 +545,11 @@ diary entries to and from the iCalendar format;
 @file{bubbles.el}, a puzzle game.
 
 @item
-Kyle Jones wrote @file{life.el}, a package to play Conway's ``life'' game.
+Kyle Jones wrote @file{life.el}, a package to play Conway's Game of Life.
 
 @item
 Terry Jones wrote @file{shadow.el}, a package for finding potential
-load-path problems when some Lisp file ``shadows'' another.
+load-path problems when some Lisp file shadows another.
 
 @item
 Simon Josefsson wrote @file{dns-mode.el}, an editing mode for Domain
@@ -708,7 +709,7 @@ Leo Liu wrote @file{pcmpl-x.el}, providing completion for
 miscellaneous external tools; and revamped support for Octave in Emacs 24.4.
 
 @item
-Károly Lőrentey wrote the ``multi-terminal'' code, which allows
+Károly Lőrentey wrote the multi-terminal code, which allows
 Emacs to run on graphical and text terminals simultaneously.
 
 @item
@@ -726,7 +727,7 @@ Autoconf files; @file{cfengine.el}, a mode for editing 
Cfengine files;
 @file{elide-head.el}, a package for eliding boilerplate text from file
 headers; @file{hl-line.el}, a minor mode for highlighting the line in
 the current window on which point is; @file{cap-words.el}, a minor mode
-for motion in ``CapitalizedWordIdentifiers''; @file{latin1-disp.el}, a
+for motion in @code{CapitalizedWordIdentifiers}; @file{latin1-disp.el}, a
 package that lets you display ISO 8859 characters on Latin-1 terminals
 by setting up appropriate display tables; the version of
 @file{python.el} used prior to Emacs 24.3; @file{smiley.el}, a
@@ -822,7 +823,7 @@ command with its arguments.
 
 @item
 Richard Mlynarik wrote @file{cl-indent.el}, a package for indenting
-Common Lisp code; @file{ebuff-menu.el}, an ``electric'' browser for
+Common Lisp code; @file{ebuff-menu.el}, an electric browser for
 buffer listings; @file{ehelp.el}, bindings for browsing help screens;
 and @file{rfc822.el}, a parser for E-mail addresses in the RFC-822 format,
 used in mail messages and news articles.
@@ -848,7 +849,7 @@ text; @file{smerge-mode.el}, a minor mode for resolving 
@code{diff3}
 conflicts; @file{diff-mode.el}, a mode for viewing and editing context
 diffs; @file{css-mode.el} for Cascading Style Sheets;
 @file{bibtex-style.el} for address@hidden Style files; @file{mpc.el}, a
-client for the ``Music Player Daemon''; @file{smie.el}, a generic
+client for the Music Player Daemon (MPD); @file{smie.el}, a generic
 indentation engine; and @file{pcase.el}, implementing ML-style pattern
 matching.  In Emacs 24, he integrated the lexical binding code,
 cleaned up the CL namespace (making it acceptable to use CL
@@ -930,7 +931,7 @@ Jeff Peck wrote @file{sun.el}, key bindings for sunterm 
keys.
 
 @item
 Damon Anton Permezel wrote @file{hanoi.el}, an animated demonstration of
-the ``Towers of Hanoi'' puzzle.
+the Towers of Hanoi puzzle.
 
 @item
 William M. Perry wrote @file{mailcap.el} (with Lars Magne
@@ -1003,7 +1004,7 @@ source code version control systems, with Paul Eggert; 
@file{gud.el},
 a package for running source-level debuggers like GDB and SDB in
 Emacs; @file{asm-mode.el}, a mode for editing assembly language code;
 @file{AT386.el}, terminal support package for IBM's AT keyboards;
address@hidden, support for ``fortune-cookie'' programs like
address@hidden, support for fortune-cookie programs like
 @file{yow.el} and @file{spook.el}; @file{finder.el}, a package for
 finding Emacs Lisp packages by keyword and topic; @file{keyswap.el},
 code to swap the @key{BS} and @key{DEL} keys; @file{loadhist.el},
@@ -1055,7 +1056,7 @@ DSSSL code.
 
 @item
 Martin Rudalics implemented improved display-buffer handling in Emacs 24;
-and implemented ``pixel-wise'' resizing of windows and frames.
+and implemented pixel-wise resizing of windows and frames.
 
 @item
 Ivar Rummelhoff wrote @file{winner.el}, which records recent window
@@ -1177,7 +1178,7 @@ selecting regions to follow many other systems.
 @item
 Richard Stallman invented Emacs.  He is the original author of GNU
 Emacs, and has been Emacs maintainer over several non-contiguous
-periods.  In addition to much of the ``core'' Emacs code, he has
+periods.  In addition to much of the core Emacs code, he has
 written @file{easymenu.el}, a facility for defining Emacs menus;
 @file{image-mode.el}, support for visiting image files;
 @file{menu-bar.el}, the Emacs menu bar support code;
@@ -1193,8 +1194,8 @@ Ake Stenhoff and Lars Lindberg wrote @file{imenu.el}, a 
framework for
 browsing indices made from buffer contents.
 
 @item
-Peter Stephenson wrote @file{vcursor.el}, which implements a ``virtual
-cursor'' that you can move with the keyboard and use for copying text.
+Peter Stephenson wrote @file{vcursor.el}, which implements a virtual
+cursor that you can move with the keyboard and use for copying text.
 
 @item
 Ken Stevens wrote @file{ispell.el}, a spell-checker interface.
@@ -1230,7 +1231,7 @@ the keyboard.
 
 @item
 Jean-Philippe Theberge wrote @file{thumbs.el}, a package for viewing
-image files as ``thumbnails''.
+image files as thumbnails.
 
 @item
 Spencer Thomas wrote the original @file{dabbrev.el}, providing a command
@@ -1274,7 +1275,7 @@ for Gnus; and @file{timezone.el}, providing functions for 
dealing with
 time zones.
 
 @item
-Neil W. Van Dyke wrote @file{webjump.el}, a ``hot links'' package.
+Neil W. Van Dyke wrote @file{webjump.el}, a Web hotlist package.
 
 @item
 Didier Verna wrote @file{rect.el}, a package of functions for
@@ -1373,7 +1374,7 @@ manual pages without the @code{man} command.
 @item
 Masatake Yamato wrote @file{ld-script.el}, an editing mode for GNU
 linker scripts, and contributed subword handling and style
-``guessing'' in CC mode.
+guessing in CC mode.
 
 @item
 Jonathan Yavner wrote @file{testcover.el}, a package for keeping track
diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi
index def5411..d702ff7 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -22,12 +22,12 @@ cursor to the right and left respectively.  Also, 
@key{RIGHT} and
 expect, rather than moving forward or backward based on the underlying
 ``paragraph direction''.
 
-Users of ``right-to-left'' languages, like Arabic and Hebrew, may
+Users of right-to-left languages, like Arabic and Hebrew, may
 adapt by reading and/or editing text in left-to-right order.
 
 @item
 The Emacs Lisp package manager has been removed.  Instead of using a
-``user interface'' (@kbd{M-x list-packages}), additional Lisp packages
+user interface (@kbd{M-x list-packages}), additional Lisp packages
 must now be installed by hand, which is the most flexible and
 ``Lispy'' method anyway.  Typically, this just involves editing your
 init file to add the package installation directory to the load path
diff --git a/doc/emacs/arevert-xtra.texi b/doc/emacs/arevert-xtra.texi
index 9d35610..69431c6 100644
--- a/doc/emacs/arevert-xtra.texi
+++ b/doc/emacs/arevert-xtra.texi
@@ -17,13 +17,13 @@ of buffers for which it is implemented (listed in the menu 
below).
 Like file buffers, non-file buffers should normally not revert while
 you are working on them, or while they contain information that might
 get lost after reverting.  Therefore, they do not revert if they are
-``modified''.  This can get tricky, because deciding when a non-file
+modified.  This can get tricky, because deciding when a non-file
 buffer should be marked modified is usually more difficult than for
 file buffers.
 
 Another tricky detail is that, for efficiency reasons, Auto Revert
 often does not try to detect all possible changes in the buffer, only
-changes that are ``major'' or easy to detect.  Hence, enabling
+changes that are major or easy to detect.  Hence, enabling
 auto-reverting for a non-file buffer does not always guarantee that
 all information in the buffer is up-to-date, and does not necessarily
 make manual reverts useless.
diff --git a/doc/emacs/basic.texi b/doc/emacs/basic.texi
index 0a43910..e5d34c6 100644
--- a/doc/emacs/basic.texi
+++ b/doc/emacs/basic.texi
@@ -1,3 +1,4 @@
address@hidden -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
 @c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
@@ -424,7 +425,7 @@ On some text terminals, Emacs may not recognize the 
@key{DEL} key
 properly.  @xref{DEL Does Not Delete}, if you encounter this problem.
 
   The @key{Delete} (@code{delete-forward-char}) command deletes in the
-``opposite direction'': it deletes the character after point, i.e., the
+opposite direction: it deletes the character after point, i.e., the
 character under the cursor.  If point was at the end of a line, this
 joins the following line onto this one.  Like @address@hidden, it
 deletes the text in the region if the region is active (@pxref{Mark}).
@@ -762,7 +763,7 @@ down one line, as you might expect---the @samp{0} is 
treated as part
 of the prefix argument.
 
 (What if you do want to insert five copies of @samp{0}?  Type @kbd{M-5
-C-u 0}.  Here, @kbd{C-u} ``terminates'' the prefix argument, so that
+C-u 0}.  Here, @kbd{C-u} terminates the prefix argument, so that
 the next keystroke begins the command that you want to execute.  Note
 that this meaning of @kbd{C-u} applies only to this case.  For the
 usual role of @kbd{C-u}, see below.)
@@ -780,7 +781,7 @@ multiplies the argument for the next command by four.  
@kbd{C-u C-u}
 multiplies it by sixteen.  Thus, @kbd{C-u C-u C-f} moves forward
 sixteen characters.  Other useful combinations are @kbd{C-u C-n},
 @kbd{C-u C-u C-n} (move down a good fraction of a screen), @kbd{C-u
-C-u C-o} (make ``a lot'' of blank lines), and @kbd{C-u C-k} (kill four
+C-u C-o} (make sixteen blank lines), and @kbd{C-u C-k} (kill four
 lines).
 
   You can use a numeric argument before a self-inserting character to
diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi
index c217c09..5a4d1ab 100644
--- a/doc/emacs/buffers.texi
+++ b/doc/emacs/buffers.texi
@@ -94,7 +94,7 @@ now displayed in any window.
 
   While entering the buffer name, you can use the usual completion and
 history commands (@pxref{Minibuffer}).  Note that @kbd{C-x b}, and
-related commands, use ``permissive completion with confirmation'' for
+related commands, use @dfn{permissive completion with confirmation} for
 minibuffer completion: if you type @key{RET} immediately after
 completing up to a nonexistent buffer name, Emacs prints
 @samp{[Confirm]} and you must type a second @key{RET} to submit that
@@ -180,7 +180,7 @@ buffers that were current most recently come first.
 
   @samp{.} in the first field of a line indicates that the buffer is
 current.  @samp{%} indicates a read-only buffer.  @samp{*} indicates
-that the buffer is ``modified''.  If several buffers are modified, it
+that the buffer is modified.  If several buffers are modified, it
 may be time to save some with @kbd{C-x s} (@pxref{Save Commands}).
 Here is an example of a buffer list:
 
diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index 1d40a2d..fbef9fe 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -322,7 +322,7 @@ nohup @var{command}; sleep 1
 @end example
 
 @ifnottex
-  On the MS-DOS ``operating system'', asynchronous subprocesses are
+  On MS-DOS, asynchronous subprocesses are
 not supported, so @kbd{M-x compile} runs the compilation command
 synchronously (i.e., you must wait until the command finishes before
 you can do anything else in Emacs).  @xref{MS-DOS}.
@@ -334,7 +334,7 @@ you can do anything else in Emacs).  @xref{MS-DOS}.
   Just as you can run a compiler from Emacs and then visit the lines
 with compilation errors, you can also run @command{grep} and then
 visit the lines on which matches were found.  This works by treating
-the matches reported by @command{grep} as if they were ``errors''.
+the matches reported by @command{grep} as if they were errors.
 The output buffer uses Grep mode, which is a variant of Compilation
 mode (@pxref{Compilation Mode}).
 
@@ -800,12 +800,12 @@ the command to @kbd{C-c @var{binding}} in the GUD 
buffer's mode and to
 @table @samp
 @item %f
 The name of the current source file.  If the current buffer is the GUD
-buffer, then the ``current source file'' is the file that the program
+buffer, then the current source file is the file that the program
 stopped in.
 
 @item %l
 The number of the current source line.  If the current buffer is the GUD
-buffer, then the ``current source line'' is the line that the program
+buffer, then the current source line is the line that the program
 stopped in.
 
 @item %e
@@ -848,7 +848,7 @@ GUD}).  You must use this if you want to debug multiple 
programs
 within one Emacs session, as that is currently unsupported by @kbd{M-x
 gdb}.
 
-  Internally, @kbd{M-x gdb} informs GDB that its ``screen size'' is
+  Internally, @kbd{M-x gdb} informs GDB that its screen size is
 unlimited; for correct operation, you must not change GDB's screen
 height and width values during the debugging session.
 
@@ -893,8 +893,8 @@ displays the following frame layout:
 
 @findex gdb-restore-windows
 @findex gdb-many-windows
-  If you ever change the window layout, you can restore the ``many
-windows'' layout by typing @kbd{M-x gdb-restore-windows}.  To toggle
+  If you ever change the window layout, you can restore the many-windows
+layout by typing @kbd{M-x gdb-restore-windows}.  To toggle
 between the many windows layout and a simple layout with just the GUD
 interaction buffer and a source file, type @kbd{M-x gdb-many-windows}.
 
diff --git a/doc/emacs/cal-xtra.texi b/doc/emacs/cal-xtra.texi
index ed85045..3b5b3c5 100644
--- a/doc/emacs/cal-xtra.texi
+++ b/doc/emacs/cal-xtra.texi
@@ -143,7 +143,7 @@ all) of the variables 
@code{calendar-bahai-all-holidays-flag},
   Each of the holiday variables is a list of @dfn{holiday forms}, each
 form describing a holiday (or sometimes a list of holidays).  Here is
 a table of the possible kinds of holiday form.  Day numbers and month
-numbers count starting from 1, but ``dayname'' numbers count Sunday as
+numbers count starting from 1, but @dfn{dayname} numbers count Sunday as
 0.  The argument @var{string} is always the description of the
 holiday, as a string.
 
@@ -840,7 +840,7 @@ Renew medication (5th time)
 @noindent
 in the fancy diary display on September 7, 2012.
 
-  There is an ``early reminder'' diary sexp that includes its entry in the
+  There is an early-reminder diary sexp that includes its entry in the
 diary not only on the date of occurrence, but also on earlier dates.
 For example, if you want a reminder a week before your anniversary, you
 can use
diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi
index e9c8b73..bc13d4b 100644
--- a/doc/emacs/calendar.texi
+++ b/doc/emacs/calendar.texi
@@ -57,7 +57,7 @@ For more advanced topics,
   Calendar mode provides commands to move through the calendar in
 logical units of time such as days, weeks, months, and years.  If you
 move outside the three months originally displayed, the calendar
-display ``scrolls'' automatically through time to make the selected
+display scrolls automatically through time to make the selected
 date visible.  Moving to a date lets you view its holidays or diary
 entries, or convert it to other calendars; moving by long time periods
 is also useful simply to scroll the calendar.
@@ -269,7 +269,7 @@ contents one month backwards in time.
 @kindex M-v @r{(Calendar mode)}
 @findex calendar-scroll-right-three-months
   The commands @kbd{C-v} and @kbd{M-v} scroll the calendar by an entire
-``screenful''---three months---in analogy with the usual meaning of
+screenful---three months---in analogy with the usual meaning of
 these commands.  @kbd{C-v} makes later dates visible and @kbd{M-v} makes
 earlier dates visible.  These commands take a numeric argument as a
 repeat count; in particular, since @kbd{C-u} multiplies the next command
@@ -432,8 +432,8 @@ Generate a Filofax-style calendar for one year
 (@code{cal-tex-cursor-filofax-year}).
 @end table
 
-  Some of these commands print the calendar sideways (in ``landscape
-mode''), so it can be wider than it is long.  Some of them use Filofax
+  Some of these commands print the calendar sideways (in landscape
+mode), so it can be wider than it is long.  Some of them use Filofax
 paper size (3.75in x 6.75in).  All of these commands accept a prefix
 argument, which specifies how many days, weeks, months or years to print
 (starting always with the selected one).
@@ -631,8 +631,8 @@ for all users in a @file{default.el} file.  @xref{Init 
File}.
 
   These calendar commands display the dates and times of the phases of
 the moon (new moon, first quarter, full moon, last quarter).  This
-feature is useful for debugging problems that ``depend on the phase of
-the moon''.
+feature is useful for debugging problems that depend on the phase of
+the moon.
 
 @table @kbd
 @item M
@@ -665,7 +665,7 @@ See the discussion in the previous section.  
@xref{Sunrise/Sunset}.
 
 @cindex Gregorian calendar
   The Emacs calendar displayed is @emph{always} the Gregorian calendar,
-sometimes called the ``new style'' calendar, which is used in most of
+sometimes called the New Style calendar, which is used in most of
 the world today.  However, this calendar did not exist before the
 sixteenth century and was not widely used before the eighteenth century;
 it did not fully displace the Julian calendar and gain universal
@@ -759,13 +759,13 @@ official calendar of Iran will be at that time.
 into solar years.  The years go in cycles of sixty, each year containing
 either twelve months in an ordinary year or thirteen months in a leap
 year; each month has either 29 or 30 days.  Years, ordinary months, and
-days are named by combining one of ten ``celestial stems'' with one of
-twelve ``terrestrial branches'' for a total of sixty names that are
+days are named by combining one of ten @dfn{celestial stems} with one of
+twelve @dfn{terrestrial branches} for a total of sixty names that are
 repeated in a cycle of sixty.
 
 @cindex Bahá'í calendar
   The Bahá'í calendar system is based on a solar cycle of 19 months with
-19 days each.  The four remaining ``intercalary'' days are placed
+19 days each.  The four remaining intercalary days are placed
 between the 18th and 19th months.
 
 @node To Other Calendar
@@ -908,7 +908,7 @@ Islamic, or French names.
 @findex calendar-hebrew-list-yahrzeits
 @cindex yahrzeits
   One common issue concerning the Hebrew calendar is the computation
-of the anniversary of a date of death, called a ``yahrzeit''.  The Emacs
+of the anniversary of a date of death, called a @dfn{yahrzeit}.  The Emacs
 calendar includes a facility for such calculations.  If you are in the
 calendar, the command @kbd{M-x calendar-hebrew-list-yahrzeits} asks you for
 a range of years and then displays a list of the yahrzeit dates for those
@@ -1463,11 +1463,11 @@ variable @code{diary-outlook-formats}.  Other mail 
clients can set
 @c FIXME the name of the RFC is hardly very relevant.
 @cindex iCalendar support
   The icalendar package allows you to transfer data between your Emacs
-diary file and iCalendar files, which are defined in ``RFC
+diary file and iCalendar files, which are defined in @cite{RFC
 2445---Internet Calendaring and Scheduling Core Object Specification
-(iCalendar)'' (as well as the earlier vCalendar format).
+(iCalendar)} (as well as the earlier vCalendar format).
 
address@hidden  Importing works for ``ordinary'' (i.e., non-recurring) events, 
but
address@hidden  Importing works for ordinary (i.e., non-recurring) events, but
 @c (at present) may not work correctly (if at all) for recurring events.
 @c Exporting of diary files into iCalendar files should work correctly
 @c for most diary entries.  This feature is a work in progress, so the
@@ -1601,11 +1601,11 @@ timeclock-change}.
   Once you've collected data from a number of time intervals, you can use
 @kbd{M-x timeclock-workday-remaining} to see how much time is left to
 work today (assuming a typical average of 8 hours a day), and @kbd{M-x
-timeclock-when-to-leave} which will calculate when you're ``done''.
+timeclock-when-to-leave} which will calculate when you're done.
 
 @vindex timeclock-modeline-display
 @findex timeclock-modeline-display
-  If you want Emacs to display the amount of time ``left'' of your
+  If you want Emacs to display the amount of time left of your
 workday in the mode line, either customize the
 @code{timeclock-modeline-display} variable and set its value to
 @code{t}, or invoke the @kbd{M-x timeclock-modeline-display} command.
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index 60fe977..fcaf87f 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -443,8 +443,8 @@ some other programs.  Emacs does not require any of these 
environment
 variables to be set, but it uses their values if they are set.
 
 @c This used to be @vtable, but that enters the variables alone into
address@hidden the Variable Index, which in some cases, like ``HOME'', might be
address@hidden confused with keys by that name, and other cases, like ``NAME'',
address@hidden the Variable Index, which in some cases, like HOME, might be
address@hidden confused with keys by that name, and other cases, like NAME,
 @c might be confused with general-purpose phrases.
 @table @env
 @item CDPATH
@@ -582,7 +582,7 @@ The name of the news server.  Used by the mh and Gnus 
packages.
 @item ORGANIZATION
 @vindex ORGANIZATION, environment variable
 The name of the organization to which you belong.  Used for setting the
-``Organization:'' header in your posts from the Gnus package.
address@hidden:} header in your posts from the Gnus package.
 @item PATH
 @vindex PATH, environment variable
 A colon-separated list of directories containing executable files.
@@ -808,7 +808,7 @@ Use @var{font} as the default font.
 @end table
 
 When passing a font name to Emacs on the command line, you may need to
-``quote'' it, by enclosing it in quotation marks, if it contains
+quote it, by enclosing it in quotation marks, if it contains
 characters that the shell treats specially (e.g., spaces).  For
 example:
 
@@ -1036,7 +1036,7 @@ tool bar when it processes the specified geometry.
   When using one of @samp{--fullscreen}, @samp{--maximized},
 @samp{--fullwidth} or @samp{--fullheight}, some window managers require
 you to set the variable @code{frame-resize-pixelwise} to a address@hidden
-value to make a frame appear truly ``maximized'' or ``fullscreen''.
+value to make a frame appear truly maximized or full-screen.
 
  Some window managers have options that can make them ignore both
 program-specified and user-specified positions.  If these are set,
@@ -1115,7 +1115,7 @@ for the initial Emacs frame.
 @opindex --iconic
 @itemx --iconic
 @cindex start iconified, command-line argument
-Start Emacs in an iconified (``minimized'') state.
+Start Emacs in an iconified state.
 
 @item -nbi
 @opindex -nbi
@@ -1125,9 +1125,9 @@ Start Emacs in an iconified (``minimized'') state.
 Disable the use of the Emacs icon.
 @end table
 
-  Most window managers allow you to ``iconify'' (or ``minimize'') an
+  Most window managers allow you to iconify (or ``minimize'') an
 Emacs frame, hiding it from sight.  Some window managers replace
-iconified windows with tiny ``icons'', while others remove them
+iconified windows with tiny icons, while others remove them
 entirely from sight.  The @samp{-iconic} option tells Emacs to begin
 running in an iconified state, rather than showing a frame right away.
 The text frame doesn't appear until you deiconify (or ``un-minimize'')
diff --git a/doc/emacs/commands.texi b/doc/emacs/commands.texi
index fb77c77..98e1253 100644
--- a/doc/emacs/commands.texi
+++ b/doc/emacs/commands.texi
@@ -70,7 +70,7 @@ where the @key{META} key does not function reliably.
   On graphical displays, the window manager might block some keyboard
 inputs, including @address@hidden, @address@hidden, @kbd{C-M-d}
 and @kbd{C-M-l}.  If you have this problem, you can either customize
-your window manager to not block those keys, or ``rebind'' the
+your window manager to not block those keys, or rebind the
 affected Emacs commands (@pxref{Customization}).
 
 @cindex input event
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index 43c61d7..76c7261 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -1,3 +1,4 @@
address@hidden -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
 @c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
@@ -28,7 +29,7 @@ Reference Manual}.
                           to decide what to do; by setting variables,
                           you can control their functioning.
 * Key Bindings::        The keymaps say what command each key runs.
-                          By changing them, you can ``redefine keys''.
+                          By changing them, you can redefine keys.
 * Init File::           How to write common customizations in the
                           initialization file.
 @end menu
@@ -728,7 +729,7 @@ maximum length of the kill ring (@pxref{Earlier Kills}); if 
you give
 @code{kill-ring-max} a string value, commands such as @kbd{C-y}
 (@code{yank}) will signal an error.  On the other hand, some variables
 don't care about type; for instance, if a variable has one effect for
address@hidden values and another effect for address@hidden'' values,
address@hidden values and another effect for address@hidden values,
 then any value that is not the symbol @code{nil} induces the second
 effect, regardless of its type (by convention, we usually use the
 value @code{t}---a symbol which stands for ``true''---to specify a
@@ -773,22 +774,22 @@ C-h v fill-column @key{RET}
 displays something like this:
 
 @example
-fill-column is a variable defined in `C source code'.
-fill-column's value is 70
+fill-column is a variable defined in ‘C source code’.
+Its value is 70
 
-Automatically becomes buffer-local when set.
-This variable is safe as a file local variable if its value
-satisfies the predicate @code{integerp}.
+  Automatically becomes buffer-local when set.
+  This variable is safe as a file local variable if its value
+  satisfies the predicate ‘integerp’.
 
 Documentation:
 Column beyond which automatic line-wrapping should happen.
-Interactively, you can set the local value with C-x f.
+Interactively, you can set the buffer local value using C-x f.
 
 You can customize this variable.
 @end example
 
 @noindent
-The line that says ``You can customize the variable'' indicates that
+The line that says @samp{You can customize the variable} indicates that
 this variable is a user option.  @kbd{C-h v} is not restricted to user
 options; it allows non-customizable variables too.
 
@@ -1156,7 +1157,7 @@ the list.  Here is an example:
 # End:
 @end example
 
-  Some ``variable names'' have special meanings in a local variables
+  Some names have special meanings in a local variables
 list:
 
 @itemize
@@ -1761,7 +1762,7 @@ and @kbd{C-c p} in Texinfo mode:
 alphabetical characters are case-insensitive.  In other words,
 @kbd{C-A} does the same thing as @kbd{C-a}, and @kbd{M-A} does the
 same thing as @kbd{M-a}.  This concerns only alphabetical characters,
-and does not apply to ``shifted'' versions of other keys; for
+and does not apply to shifted versions of other keys; for
 instance, @kbd{C-@@} is not the same as @kbd{C-2}.
 
   A @key{Control}-modified alphabetical character is always considered
@@ -1784,9 +1785,9 @@ to them.  The modifier bits are labeled as @samp{s-}, 
@samp{H-} and
 @samp{A-} respectively.
 
   Even if your keyboard lacks these additional modifier keys, you can
-enter it using @kbd{C-x @@}: @kbd{C-x @@ h} adds the ``hyper'' flag to
-the next character, @kbd{C-x @@ s} adds the ``super'' flag, and
address@hidden @@ a} adds the ``alt'' flag.  For instance, @kbd{C-x @@ h
+enter it using @kbd{C-x @@}: @kbd{C-x @@ h} adds the Hyper flag to
+the next character, @kbd{C-x @@ s} adds the Super flag, and
address@hidden @@ a} adds the Alt flag.  For instance, @kbd{C-x @@ h
 C-a} is a way to enter @kbd{Hyper-Control-a}.  (Unfortunately, there
 is no way to add two modifiers by using @kbd{C-x @@} twice for the
 same character, because the first one goes to work on the @kbd{C-x}.)
@@ -1836,7 +1837,7 @@ key.
   @xref{Init Rebinding}, for examples of binding function keys.
 
 @cindex keypad
-  Many keyboards have a ``numeric keypad'' on the right hand side.
+  Many keyboards have a numeric keypad on the right hand side.
 The numeric keys in the keypad double up as cursor motion keys,
 toggled by a key labeled @samp{Num Lock}.  By default, Emacs
 translates these keys to the corresponding keys in the main keyboard.
@@ -1866,13 +1867,13 @@ prefix arguments.
 started out as names for certain @acronym{ASCII} control characters,
 used so often that they have special keys of their own.  For instance,
 @key{TAB} was another name for @kbd{C-i}.  Later, users found it
-convenient to distinguish in Emacs between these keys and the ``same''
+convenient to distinguish in Emacs between these keys and the corresponding
 control characters typed with the @key{Ctrl} key.  Therefore, on most
 modern terminals, they are no longer the same: @key{TAB} is different
 from @kbd{C-i}.
 
   Emacs can distinguish these two kinds of input if the keyboard does.
-It treats the ``special'' keys as function keys named @code{tab},
+It treats the special keys as function keys named @code{tab},
 @code{return}, @code{backspace}, @code{linefeed}, @code{escape}, and
 @code{delete}.  These function keys translate automatically into the
 corresponding @acronym{ASCII} characters @emph{if} they have no
@@ -1882,7 +1883,7 @@ need to pay attention to the distinction unless they care 
to.
   If you do not want to distinguish between (for example) @key{TAB} and
 @kbd{C-i}, make just one binding, for the @acronym{ASCII} character @key{TAB}
 (octal code 011).  If you do want to distinguish, make one binding for
-this @acronym{ASCII} character, and another for the ``function key'' 
@code{tab}.
+this @acronym{ASCII} character, and another for the function key @code{tab}.
 
   With an ordinary @acronym{ASCII} terminal, there is no way to distinguish
 between @key{TAB} and @kbd{C-i} (and likewise for other such pairs),
@@ -1937,7 +1938,7 @@ single click definition has run when the first click was 
received.
   This constrains what you can do with double clicks, but user interface
 designers say that this constraint ought to be followed in any case.  A
 double click should do something similar to the single click, only
-``more so''.  The command for the double-click event should perform the
+more so.  The command for the double-click event should perform the
 extra work for the double click.
 
   If a double-click event has no binding, it changes to the
@@ -1984,8 +1985,8 @@ or @samp{triple-}, which always precede @samp{drag-} or 
@samp{down-}.
 
   A frame includes areas that don't show text from the buffer, such as
 the mode line and the scroll bar.  You can tell whether a mouse button
-comes from a special area of the screen by means of dummy ``prefix
-keys''.  For example, if you click the mouse in the mode line, you get
+comes from a special area of the screen by means of dummy prefix
+keys.  For example, if you click the mouse in the mode line, you get
 the prefix key @code{mode-line} before the ordinary mouse-button symbol.
 Thus, here is how to define the command for clicking the first button in
 a mode line to run @code{scroll-up-command}:
diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi
index 4adb698..b00c974 100644
--- a/doc/emacs/dired.texi
+++ b/doc/emacs/dired.texi
@@ -14,7 +14,7 @@ optionally some of its subdirectories as well.  You can use 
the normal
 Emacs commands to move around in this buffer, and special Dired
 commands to operate on the listed files.
 
-    The Dired buffer is ``read-only'', and inserting text in it is not
+    The Dired buffer is read-only, and inserting text in it is not
 allowed.  Ordinary printing characters such as @kbd{d} and @kbd{x} are
 redefined for special Dired commands.  Some Dired commands @dfn{mark}
 or @dfn{flag} the @dfn{current file} (that is, the file on the current
@@ -924,7 +924,7 @@ from the name of the old file.
   The four regular-expression substitution commands effectively
 perform a search-and-replace on the selected file names.  They read
 two arguments: a regular expression @var{from}, and a substitution
-pattern @var{to}; they match each ``old'' file name against
+pattern @var{to}; they match each old file name against
 @var{from}, and then replace the matching part with @var{to}.  You can
 use @samp{\&} and @address@hidden in @var{to} to refer to all or
 part of what the pattern matched in the old file name, as in
@@ -1262,7 +1262,7 @@ and erases all flags and marks.
 @findex wdired-change-to-wdired-mode
   Wdired is a special mode that allows you to perform file operations
 by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands
-for ``writable''.)  To enter Wdired mode, type @kbd{C-x C-q}
+for ``writable'').  To enter Wdired mode, type @kbd{C-x C-q}
 (@code{dired-toggle-read-only}) while in a Dired buffer.
 Alternatively, use the @samp{Immediate / Edit File Names} menu item.
 
@@ -1307,7 +1307,7 @@ buffer containing image-dired, corresponding to the 
marked files.
   You can also enter Image-Dired directly by typing @kbd{M-x
 image-dired}.  This prompts for a directory; specify one that has
 image files.  This creates thumbnails for all the images in that
-directory, and displays them all in the ``thumbnail buffer''.  This
+directory, and displays them all in the thumbnail buffer.  This
 takes a long time if the directory contains many image files, and it
 asks for confirmation if the number of image files exceeds
 @code{image-dired-show-all-from-dir-max-files}.
@@ -1348,9 +1348,9 @@ with a certain tag, you can use @kbd{C-t d} to view them.
 
   You can also tag a file directly from the thumbnail buffer by typing
 @kbd{t t} and you can remove a tag by typing @kbd{t r}.  There is also
-a special ``tag'' called ``comment'' for each file (it is not a tag in
+a special tag called ``comment'' for each file (it is not a tag in
 the exact same sense as the other tags, it is handled slightly
-different).  That is used to enter a comment or description about the
+differently).  That is used to enter a comment or description about the
 image.  You comment a file from the thumbnail buffer by typing
 @kbd{c}.  You will be prompted for a comment.  Type @kbd{C-t c} to add
 a comment from Dired (@code{image-dired-dired-comment-files}).
@@ -1375,7 +1375,7 @@ the directory already exists.
 @findex dired-do-isearch
 @findex dired-do-isearch-regexp
   The command @kbd{M-s a C-s} (@code{dired-do-isearch}) begins a
-``multi-file'' incremental search on the marked files.  If a search
+multi-file incremental search on the marked files.  If a search
 fails at the end of a file, typing @kbd{C-s} advances to the next
 marked file and repeats the search; at the end of the last marked
 file, the search wraps around to the first marked file.  The command
@@ -1425,21 +1425,21 @@ will operate on the selected files.
 @findex dired-compare-directories
   The command @kbd{M-x dired-compare-directories} is used to compare
 the current Dired buffer with another directory.  It marks all the files
-that are ``different'' between the two directories.  It puts these marks
+that differ between the two directories.  It puts these marks
 in all Dired buffers where these files are listed, which of course includes
 the current buffer.
 
   The default comparison method (used if you type @key{RET} at the
-prompt) is to compare just the file names---each file name that does
-not appear in the other directory is ``different''.  You can specify
+prompt) is to compare just the file names---file names differ if
+they do not appear in the other directory.  You can specify
 more stringent comparisons by entering a Lisp expression, which can
 refer to the variables @code{size1} and @code{size2}, the respective
 file sizes; @code{mtime1} and @code{mtime2}, the last modification
 times in seconds, as floating point numbers; and @code{fa1} and
 @code{fa2}, the respective file attribute lists (as returned by the
 function @code{file-attributes}).  This expression is evaluated for
-each pair of like-named files, and if the expression's value is
address@hidden, those files are considered ``different''.
+each pair of like-named files, and files differ if the expression's
+value is address@hidden
 
   For instance, the sequence @code{M-x dired-compare-directories
 @key{RET} (> mtime1 mtime2) @key{RET}} marks files newer in this
@@ -1448,7 +1448,7 @@ directory than in this one.  It also marks files with no 
counterpart,
 in both directories, as always.
 
 @cindex drag and drop, Dired
-  On the X Window System, Emacs supports the ``drag and drop''
+  On the X Window System, Emacs supports the drag and drop
 protocol.  You can drag a file object from another program, and drop
 it onto a Dired buffer; this either moves, copies, or creates a link
 to the file in that directory.  Precisely which action is taken is
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index 601a40b..a722ec4 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1,3 +1,4 @@
address@hidden -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
 @c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
@@ -47,18 +48,18 @@ the text is displayed.
 displays only a portion of it.  @dfn{Scrolling} commands change which
 portion of the buffer is displayed.
 
-  Scrolling ``forward'' or ``up'' advances the portion of the buffer
+  Scrolling forward or up advances the portion of the buffer
 displayed in the window; equivalently, it moves the buffer text
-upwards relative to the window.  Scrolling ``backward'' or ``down''
+upwards relative to the window.  Scrolling backward or down
 displays an earlier portion of the buffer, and moves the text
 downwards relative to the window.
 
-  In Emacs, scrolling ``up'' or ``down'' refers to the direction that
+  In Emacs, scrolling up or down refers to the direction that
 the text moves in the window, @emph{not} the direction that the window
 moves relative to the text.  This terminology was adopted by Emacs
 before the modern meaning of ``scrolling up'' and ``scrolling down''
 became widespread.  Hence, the strange result that @key{PageDown}
-scrolls ``up'' in the Emacs sense.
+scrolls up in the Emacs sense.
 
   The portion of a buffer displayed in a window always contains point.
 If you move point past the bottom or top of the window, scrolling
@@ -468,7 +469,7 @@ and visits it with View mode enabled.
 @cindex synchronizing windows
 
   @dfn{Follow mode} is a minor mode that makes two windows, both
-showing the same buffer, scroll as a single tall ``virtual window''.
+showing the same buffer, scroll as a single tall virtual window.
 To use Follow mode, go to a frame with just one window, split it into
 two side-by-side windows using @kbd{C-x 3}, and then type @kbd{M-x
 follow-mode}.  From then on, you can edit the buffer in either of the
@@ -637,7 +638,7 @@ This face is used to highlight the current Isearch match
 This face is used to highlight the current Query Replace match
 (@pxref{Replace}).
 @item lazy-highlight
-This face is used to highlight ``lazy matches'' for Isearch and Query
+This face is used to highlight lazy matches for Isearch and Query
 Replace (matches other than the current one).
 @item region
 This face is used for displaying an active region (@pxref{Mark}).
@@ -654,7 +655,7 @@ Whitespace}).
 The face for displaying control characters and escape sequences
 (@pxref{Text Display}).
 @item nobreak-space
-The face for displaying ``no-break'' space characters (@pxref{Text
+The face for displaying no-break space characters (@pxref{Text
 Display}).
 @end table
 
@@ -667,7 +668,7 @@ frame:
 @cindex faces for mode lines
 This face is used for the mode line of the currently selected window,
 and for menu bars when toolkit menus are not used.  By default, it's
-drawn with shadows for a ``raised'' effect on graphical displays, and
+drawn with shadows for a raised effect on graphical displays, and
 drawn as the inverse of the default face on non-windowed terminals.
 @item mode-line-inactive
 @cindex mode-line-inactive face
@@ -854,7 +855,6 @@ and the default level otherwise, use the value
 '((c-mode . 1) (c++-mode . 1)))
 @end example
 
address@hidden font-lock-beginning-of-syntax-function
 @cindex incorrect fontification
 @cindex parenthesis in column zero and fontification
 @cindex brace in column zero and fontification
@@ -867,19 +867,6 @@ any string or comment.  Therefore, you should avoid 
placing an
 open-parenthesis or open-brace in the leftmost column, if it is inside
 a string or comment.  @xref{Left Margin Paren}, for details.
 
address@hidden slow display during scrolling
-  The variable @code{font-lock-beginning-of-syntax-function}, which is
-always buffer-local, specifies how Font Lock mode can find a position
-guaranteed to be outside any comment or string.  In modes which use
-the leftmost column parenthesis convention, the default value of the
-variable is @code{beginning-of-defun}---that tells Font Lock mode to
-use the convention.  If you set this variable to @code{nil}, Font Lock
-no longer relies on the convention.  This avoids incorrect results,
-but the price is that, in some cases, fontification for a changed text
-must rescan buffer text from the beginning of the buffer.  This can
-considerably slow down redisplay while scrolling, particularly if you
-are close to the end of a large buffer.
-
 @findex font-lock-add-keywords
   Font Lock highlighting patterns already exist for most modes, but
 you may want to fontify additional patterns.  You can use the function
@@ -1073,16 +1060,16 @@ variable @code{fringe-mode}.
   The most common use of the fringes is to indicate a continuation
 line (@pxref{Continuation Lines}).  When one line of text is split
 into multiple screen lines, the left fringe shows a curving arrow for
-each screen line except the first, indicating that ``this is not the
-real beginning''.  The right fringe shows a curving arrow for each
-screen line except the last, indicating that ``this is not the real
-end''.  If the line's direction is right-to-left (@pxref{Bidirectional
+each screen line except the first, indicating that this is not the
+real beginning.  The right fringe shows a curving arrow for each
+screen line except the last, indicating that this is not the real
+end.  If the line's direction is right-to-left (@pxref{Bidirectional
 Editing}), the meanings of the curving arrows in the fringes are
 swapped.
 
   The fringes indicate line truncation (@pxref{Line Truncation}) with
-short horizontal arrows meaning ``there's more text on this line which
-is scrolled horizontally out of view''.  Clicking the mouse on one of
+short horizontal arrows meaning there's more text on this line which
+is scrolled horizontally out of view.  Clicking the mouse on one of
 the arrows scrolls the display horizontally in the direction of the
 arrow.
 
@@ -1145,8 +1132,8 @@ setting the buffer-local variable 
@code{show-trailing-whitespace} to
 @code{trailing-whitespace}.
 
   This feature does not apply when point is at the end of the line
-containing the whitespace.  Strictly speaking, that is ``trailing
-whitespace'' nonetheless, but displaying it specially in that case
+containing the whitespace.  Strictly speaking, that is trailing
+whitespace nonetheless, but displaying it specially in that case
 looks ugly while you are typing in new text.  In this special case,
 the location of point is enough to show you that the spaces are
 present.
@@ -1178,7 +1165,7 @@ indicate-empty-lines t)}.
 @findex whitespace-mode
 @vindex whitespace-style
   Whitespace mode is a buffer-local minor mode that lets you
-``visualize'' many kinds of whitespace in the buffer, by either
+visualize many kinds of whitespace in the buffer, by either
 drawing the whitespace characters with a special face or displaying
 them as special glyphs.  To toggle this mode, type @kbd{M-x
 whitespace-mode}.  The kinds of whitespace visualized are determined
@@ -1358,7 +1345,7 @@ the mail indicator prominent.  Use 
@code{display-time-mail-file} to
 specify the mail file to check, or set
 @code{display-time-mail-directory} to specify the directory to check
 for incoming mail (any nonempty regular file in the directory is
-considered as ``newly arrived mail'').
+considered to be newly arrived mail).
 
 @cindex battery status (on mode line)
 @findex display-battery-mode
@@ -1480,6 +1467,15 @@ customizing the variable 
@code{glyphless-char-display-control}.
 @xref{Glyphless Chars,, Glyphless Character Display, elisp, The Emacs
 Lisp Reference Manual}, for details.
 
address@hidden curly quotes
address@hidden curved quotes
address@hidden escape-glyph face
+  If the curved quotes @samp{‘}, @samp{’}, @samp{“}, and @samp{”} are
+known to look just like @acronym{ASCII} characters, they are shown
+with the @code{escape-glyph} face.  Curved quotes that cannot be
+displayed are shown as their @acronym{ASCII} approximations @samp{`},
address@hidden'}, and @samp{"} with the @code{escape-glyph} face.
+
 @node Cursor Display
 @section Displaying the Cursor
 @cindex text cursor
@@ -1487,8 +1483,8 @@ Lisp Reference Manual}, for details.
 @vindex visible-cursor
   On a text terminal, the cursor's appearance is controlled by the
 terminal, largely out of the control of Emacs.  Some terminals offer
-two different cursors: a ``visible'' static cursor, and a ``very
-visible'' blinking cursor.  By default, Emacs uses the very visible
+two different cursors: a visible static cursor, and a very
+visible blinking cursor.  By default, Emacs uses the very visible
 cursor, and switches to it when you start or resume Emacs.  If the
 variable @code{visible-cursor} is @code{nil} when Emacs starts or
 resumes, it uses the normal cursor.
@@ -1528,7 +1524,7 @@ altogether, change the variable @code{blink-cursor-mode} 
to @code{nil}
 
 @noindent
 to your init file.  Alternatively, you can change how the cursor
-looks when it ``blinks off'' by customizing the list variable
+looks when it blinks off by customizing the list variable
 @code{blink-cursor-alist}.  Each element in the list should have the
 form @code{(@var{on-type} . @var{off-type})}; this means that if the
 cursor is displayed as @var{on-type} when it blinks on (where
@@ -1537,7 +1533,7 @@ displayed as @var{off-type} when it blinks off.
 
 @vindex x-stretch-cursor
 @cindex wide block cursor
-  Some characters, such as tab characters, are ``extra wide''.  When
+  Some characters, such as tab characters, are extra wide.  When
 the cursor is positioned over such a character, it is normally drawn
 with the default character width.  You can make the cursor stretch to
 cover wide characters, by changing the variable
@@ -1662,14 +1658,14 @@ there is something to echo.  @xref{Echo Area}.
   On graphical displays, Emacs displays the mouse pointer as an
 hourglass if Emacs is busy.  To disable this feature, set the variable
 @code{display-hourglass} to @code{nil}.  The variable
address@hidden determines the number of seconds of ``busy
-time'' before the hourglass is shown; the default is 1.
address@hidden determines the number of seconds of busy
+time before the hourglass is shown; the default is 1.
 
 @vindex make-pointer-invisible
   If the mouse pointer lies inside an Emacs frame, Emacs makes it
 invisible each time you type a character to insert text, to prevent it
 from obscuring the text.  (To be precise, the hiding occurs when you
-type a ``self-inserting'' character.  @xref{Inserting Text}.)  Moving
+type a self-inserting character.  @xref{Inserting Text}.)  Moving
 the mouse pointer makes it visible again.  To disable this feature,
 set the variable @code{make-pointer-invisible} to @code{nil}.
 
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index ec82a07..27bb77d 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -160,7 +160,7 @@ Fundamental Editing Commands
 * Help::                Commands for asking Emacs about its commands.
 
 Important Text-Changing Commands
-* Mark::                The mark: how to delimit a ``region'' of text.
+* Mark::                The mark: how to delimit a region of text.
 * Killing::             Killing (cutting) and yanking (copying) text.
 * Registers::           Saving a text string or a location in the buffer.
 * Display::             Controlling what text is displayed.
@@ -172,7 +172,7 @@ Major Structures of Emacs
 * Files::               All about handling files.
 * Buffers::             Multiple buffers; editing several files at once.
 * Windows::             Viewing multiple pieces of text in one frame.
-* Frames::              Using multiple ``windows'' on your display.
+* Frames::              Using multiple windows on your display.
 * International::       Using address@hidden character sets.
 
 Advanced Features
@@ -200,7 +200,7 @@ Advanced Features
 @end ifnottex
 * Editing Binary Files::  Editing binary files with Hexl mode.
 * Saving Emacs Sessions:: Saving Emacs state from one session to the next.
-* Recursive Edit::      Performing edits while ``within another command''.
+* Recursive Edit::      Performing edits while within another command.
 * Hyperlinking::        Following links in buffers.
 * Amusements::          Various games and hacks.
 * Packages::            Installing additional features.
@@ -301,7 +301,7 @@ Help
 * Language Help::       Help relating to international language support.
 * Misc Help::           Other help commands.
 * Help Files::          Commands to display auxiliary help files.
-* Help Echo::           Help on active text and tooltips (``balloon help'').
+* Help Echo::           Help on active text and tooltips.
 
 The Mark and the Region
 
@@ -337,7 +337,7 @@ Yanking
 * Earlier Kills::       Yanking something killed some time ago.
 * Appending Kills::     Several kills in a row all yank together.
 
-``Cut and Paste'' Operations on Graphical Displays
+Cut and Paste Operations on Graphical Displays
 
 * Clipboard::           How Emacs uses the system clipboard.
 * Primary Selection::   The temporarily selected text selection.
@@ -390,7 +390,7 @@ Searching and Replacement
 * Symbol Search::          Search for a source code symbol.
 * Regexp Search::          Search for match for a regexp.
 * Regexps::                Syntax of regular expressions.
-* Regexp Backslash::       Regular expression constructs starting with '\'.
+* Regexp Backslash::       Regular expression constructs starting with `\'.
 * Regexp Example::         A complex regular expression explained.
 * Search Case::            To ignore case while searching, or not.
 * Replace::                Search, and replace some or all matches.
@@ -464,7 +464,7 @@ Saving Files
 * Customize Save::      Customizing the saving of files.
 * Interlocking::        How Emacs protects against simultaneous editing
                           of one file by two users.
-* File Shadowing::      Copying files to ``shadows'' automatically.
+* File Shadowing::      Copying files to shadows automatically.
 * Time Stamps::         Emacs can update time stamps on saved files.
 
 Backup Files
@@ -597,7 +597,7 @@ Commands for Human Languages
 * TeX Mode::            Editing TeX and LaTeX files.
 * HTML Mode::           Editing HTML and SGML files.
 * Nroff Mode::          Editing input to the nroff formatter.
-* Enriched Text::       Editing text ``enriched'' with fonts, colors, etc.
+* Enriched Text::       Editing text enriched with fonts, colors, etc.
 * Text Based Tables::   Commands for editing text-based tables.
 * Two-Column::          Splitting text columns into separate windows.
 
@@ -638,7 +638,7 @@ Enriched Text
 * Enriched Indentation::    Changing the left and right margins.
 * Enriched Justification::  Centering, setting text flush with the
                               left or right margin, etc.
-* Enriched Properties::     The ``special'' text properties submenu.
+* Enriched Properties::     The ``Special text properties'' submenu.
 
 @c The automatic texinfo menu update inserts some duplicate items here
 @c (faces, colors, indentation, justification, properties), because
@@ -895,7 +895,7 @@ Editing Pictures
 
 * Basic Picture::         Basic concepts and simple commands of Picture Mode.
 * Insert in Picture::     Controlling direction of cursor motion
-                            after ``self-inserting'' characters.
+                            after self-inserting characters.
 * Tabs in Picture::       Various features for tab stops and indentation.
 * Rectangles in Picture:: Clearing and superimposing rectangles.
 @end ifnottex
@@ -1092,7 +1092,7 @@ Customization
                           to decide what to do; by setting variables,
                           you can control their functioning.
 * Key Bindings::        The keymaps say what command each key runs.
-                          By changing them, you can ``redefine'' keys.
+                          By changing them, you can redefine keys.
 * Init File::           How to write common customizations in the
                           initialization file.
 
diff --git a/doc/emacs/emerge-xtra.texi b/doc/emacs/emerge-xtra.texi
index 25bbcaa..836b27c 100644
--- a/doc/emacs/emerge-xtra.texi
+++ b/doc/emacs/emerge-xtra.texi
@@ -151,7 +151,7 @@ input.  The mode line indicates Auto Advance mode with 
@samp{A}.
   If Skip Prefers mode is in effect, the @kbd{n} and @kbd{p} commands
 skip over differences in states ``prefer-A'' and ``prefer-B''
 (@pxref{State of Difference}).  Thus you see only differences for
-which neither version is presumed ``correct''.  The mode line
+which neither version is presumed correct.  The mode line
 indicates Skip Prefers mode with @samp{S}.  This mode is only relevant
 when there is an ancestor.
 
@@ -183,7 +183,7 @@ produces this state; the mode line indicates it with 
@samp{B}.
 The difference is showing the A or the B state by default, because you
 haven't made a choice.  All differences start in the default-A state
 (and thus the merge buffer is a copy of the A buffer), except those for
-which one alternative is ``preferred'' (see below).
+which one alternative is preferred (see below).
 
 When you select a difference, its state changes from default-A or
 default-B to plain A or address@hidden  Thus, the selected difference never has
diff --git a/doc/emacs/entering.texi b/doc/emacs/entering.texi
index fc9ea38..8b8a918 100644
--- a/doc/emacs/entering.texi
+++ b/doc/emacs/entering.texi
@@ -100,7 +100,7 @@ display them initially.
 Kill Emacs (@code{save-buffers-kill-terminal}).
 @item C-z
 On a text terminal, suspend Emacs; on a graphical display,
-``minimize'' the selected frame (@code{suspend-emacs}).
+iconify (or ``minimize'') the selected frame (@code{suspend-emacs}).
 @end table
 
 @kindex C-x C-c
@@ -116,7 +116,7 @@ subprocesses are still running, since killing Emacs will 
also kill the
 subprocesses (@pxref{Shell}).
 
   @kbd{C-x C-c} behaves specially if you are using Emacs as a server.
-If you type it from a ``client frame'', it closes the client
+If you type it from a client frame, it closes the client
 connection.  @xref{Emacs Server}.
 
   Emacs can, optionally, record certain session information when you
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index 5985d8b..5752d02 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -55,8 +55,8 @@ the file name, using the minibuffer (@pxref{Minibuffer File}).
 history commands (@pxref{Minibuffer}).  Note that file name completion
 ignores file names whose extensions appear in the variable
 @code{completion-ignored-extensions} (@pxref{Completion Options}).
-Note also that most commands use ``permissive completion with
-confirmation'' for reading file names: you are allowed to submit a
+Note also that most commands use permissive completion with
+confirmation for reading file names: you are allowed to submit a
 nonexistent file name, but if you type @key{RET} immediately after
 completing up to a nonexistent file name, Emacs prints
 @samp{[Confirm]} and you must type a second @key{RET} to confirm.
@@ -96,9 +96,9 @@ minibuffer, with a directory omitted, specifies the file
 @file{/u/rms/gnu/new/foo}.
 
   When typing a file name into the minibuffer, you can make use of a
-couple of shortcuts: a double slash is interpreted as ``ignore
-everything before the second slash in the pair'', and @samp{~/} is
-interpreted as your home directory.  @xref{Minibuffer File}.
+couple of shortcuts: a double slash ignores everything before the
+second slash in the pair, and @samp{~/} is your home directory.
address@hidden File}.
 
 @cindex environment variables in file names
 @cindex expansion of environment variables
@@ -232,7 +232,7 @@ after the directory part; this is convenient if you made a 
slight
 error in typing the name.
 
 @vindex find-file-run-dired
-  If you ``visit'' a file that is actually a directory, Emacs invokes
+  If you visit a file that is actually a directory, Emacs invokes
 Dired, the Emacs directory browser.  @xref{Dired}.  You can disable
 this behavior by setting the variable @code{find-file-run-dired} to
 @code{nil}; in that case, it is an error to try to visit a directory.
@@ -274,13 +274,13 @@ new frame, or selects any existing frame showing the 
specified file.
   On graphical displays, there are two additional methods for visiting
 files.  Firstly, when Emacs is built with a suitable GUI toolkit,
 commands invoked with the mouse (by clicking on the menu bar or tool
-bar) use the toolkit's standard ``File Selection'' dialog instead of
+bar) use the toolkit's standard file selection dialog instead of
 prompting for the file name in the minibuffer.  On GNU/Linux and Unix
 platforms, Emacs does this when built with GTK, LessTif, and Motif
 toolkits; on MS-Windows and Mac, the GUI version does that by default.
 For information on how to customize this, see @ref{Dialog Boxes}.
 
-  Secondly, Emacs supports ``drag and drop'': dropping a file into an
+  Secondly, Emacs supports drag and drop: dropping a file into an
 ordinary Emacs window visits the file using that window.  As an
 exception, dropping a file into a window displaying a Dired buffer
 moves or copies the file into the displayed directory.  For details,
@@ -288,7 +288,7 @@ see @ref{Drag and Drop}, and @ref{Misc Dired Features}.
 
   On text-mode terminals and on graphical displays when Emacs was
 built without a GUI toolkit, you can visit files via the menu-bar
-``File'' menu, which has a ``Visit New File'' item.
address@hidden menu, which has a @samp{Visit New File} item.
 
   Each time you visit a file, Emacs automatically scans its contents
 to detect what character encoding and end-of-line convention it uses,
@@ -443,7 +443,7 @@ minibuffer.  Then it marks the buffer as visiting that file 
name, and
 changes the buffer name correspondingly.  @code{set-visited-file-name}
 does not save the buffer in the newly visited file; it just alters the
 records inside Emacs in case you do save later.  It also marks the
-buffer as ``modified'' so that @kbd{C-x C-s} in that buffer
+buffer as modified so that @kbd{C-x C-s} in that buffer
 @emph{will} save.
 
 @kindex C-x C-w
@@ -902,7 +902,7 @@ way that, if the file was edited only slightly, you will be 
at
 approximately the same part of the text as before.  But if you have
 made major changes, point may end up in a totally different location.
 
-  Reverting marks the buffer as ``not modified''.  It also clears the
+  Reverting marks the buffer as not modified.  It also clears the
 buffer's undo history (@pxref{Undo}).  Thus, the reversion cannot be
 undone---if you change your mind yet again, you can't use the undo
 commands to bring the reverted changes back.
@@ -1167,7 +1167,7 @@ implies the effect of 
@code{find-file-existing-other-name}.
 @cindex directory name abbreviation
 @vindex directory-abbrev-alist
   Sometimes, a directory is ordinarily accessed through a symbolic
-link, and you may want Emacs to preferentially show its ``linked''
+link, and you may want Emacs to preferentially show its linked
 name.  To do this, customize @code{directory-abbrev-alist}.  Each
 element in this list should have the form @code{(@var{from}
 . @var{to})}, which means to replace @var{from} with @var{to} whenever
@@ -1325,7 +1325,7 @@ prefix argument turns that off.
   You can use @kbd{M-x smerge-mode} to turn on Smerge mode, a minor
 mode for editing output from the @command{diff3} program.  This is
 typically the result of a failed merge from a version control system
-``update'' outside VC, due to conflicting changes to a file.  Smerge
+update outside VC, due to conflicting changes to a file.  Smerge
 mode provides commands to resolve conflicts by selecting specific
 changes.
 
@@ -1364,10 +1364,10 @@ contents of the hunk.
 read-only, you need to make it writable first.  @xref{Misc Buffer}.)
 Whenever you change a hunk, Diff mode attempts to automatically
 correct the line numbers in the hunk headers, to ensure that the patch
-remains ``correct''.  To disable automatic line number correction,
+remains correct.  To disable automatic line number correction,
 change the variable @code{diff-update-on-the-fly} to @code{nil}.
 
-  Diff mode treats each hunk as an ``error message'', similar to
+  Diff mode treats each hunk as an error message, similar to
 Compilation mode.  Thus, you can use commands such as @kbd{C-x `} to
 visit the corresponding source locations.  @xref{Compilation Mode}.
 
@@ -1585,7 +1585,7 @@ rename-file}.  @xref{VC Delete/Rename}.
 @cindex hard links (creation)
   @kbd{M-x add-name-to-file} adds an additional name to an existing
 file without removing its old name.  The new name is created as a
-``hard link'' to the existing file.  The new name must belong on the
+hard link to the existing file.  The new name must belong on the
 same file system that the file is on.  On MS-Windows, this command
 works only if the file resides in an NTFS file system.  On MS-DOS, it
 works by copying the file.
@@ -1612,7 +1612,7 @@ mark (@pxref{Mark Ring}).
 
 @findex insert-file-literally
   @kbd{M-x insert-file-literally} is like @kbd{M-x insert-file},
-except the file is inserted ``literally'': it is treated as a sequence
+except the file is inserted literally: it is treated as a sequence
 of @acronym{ASCII} characters with no special encoding or conversion,
 similar to the @kbd{M-x find-file-literally} command
 (@pxref{Visiting}).
@@ -2008,7 +2008,7 @@ enable ImageMagick for all possible image types, change
 @code{imagemagick-types-inhibit} lists the image types which should
 never be rendered using ImageMagick, regardless of the value of
 @code{imagemagick-enabled-types} (the default list includes types like
address@hidden and @code{HTML}, which ImageMagick can render as an ``image''
address@hidden and @code{HTML}, which ImageMagick can render as an image
 but Emacs should not).  To disable ImageMagick entirely, change
 @code{imagemagick-types-inhibit} to @code{t}.
 
@@ -2055,7 +2055,7 @@ files in a fileset, and @kbd{M-x filesets-close} to close 
them.  Use
 a fileset.  These commands are also available from the @samp{Filesets}
 menu, where each existing fileset is represented by a submenu.
 
-   @xref{Version Control}, for a different concept of ``filesets'':
+   @xref{Version Control}, for a different concept of filesets:
 groups of files bundled together for version control operations.
 Filesets of that type are unnamed, and do not persist across Emacs
 sessions.
diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi
index 953b22f..993f0dc 100644
--- a/doc/emacs/fixit.texi
+++ b/doc/emacs/fixit.texi
@@ -286,7 +286,7 @@ messages.  @xref{Sending Mail}.
 
   When one of these commands encounters what appears to be an
 incorrect word, it asks you what to do.  It usually displays a list of
-numbered ``near-misses''---words that are close to the incorrect word.
+numbered @dfn{near-misses}---words that are close to the incorrect word.
 Then you must type a single-character response.  Here are the valid
 responses:
 
@@ -331,7 +331,7 @@ file.
 
 @item l @var{word} @key{RET}
 Look in the dictionary for words that match @var{word}.  These words
-become the new list of ``near-misses''; you can select one of them as
+become the new list of near-misses; you can select one of them as
 the replacement by typing a digit.  You can use @samp{*} in @var{word} as a
 wildcard.
 
diff --git a/doc/emacs/fortran-xtra.texi b/doc/emacs/fortran-xtra.texi
index 155e998..870bfcd 100644
--- a/doc/emacs/fortran-xtra.texi
+++ b/doc/emacs/fortran-xtra.texi
@@ -13,9 +13,9 @@
 @cindex Fortran 77 and Fortran 90, 95, 2003, 2008
 @findex f90-mode
 @findex fortran-mode
-  Fortran mode is meant for editing ``fixed form'' (and also ``tab
-format'') source code (normally Fortran 77).  For editing more modern
-``free form'' source code (Fortran 90, 95, 2003, 2008), use F90 mode
+  Fortran mode is meant for editing fixed form (and also tab
+format) source code (normally Fortran 77).  For editing more modern
+free-form source code (Fortran 90, 95, 2003, 2008), use F90 mode
 (@code{f90-mode}).  Emacs normally uses Fortran mode for files with
 extension @samp{.f}, @samp{.F} or @samp{.for}, and F90 mode for the
 extensions @samp{.f90}, @samp{.f95}, @samp{.f03} and @samp{.f08}.
@@ -70,7 +70,7 @@ command runs the hook @code{fortran-mode-hook}.
 @subsection Motion Commands
 
   In addition to the normal commands for moving by and operating on
-``defuns'' (Fortran subprograms---functions and subroutines, as well
+defuns (Fortran subprograms---functions and subroutines, as well
 as modules for F90 mode, using the commands @code{fortran-end-of-subprogram}
 and @code{fortran-beginning-of-subprogram}), Fortran mode provides
 special commands to move by statements and other program units.
@@ -207,8 +207,8 @@ the Fortran standard counts from 1.)  The variable
 @code{fortran-continuation-string} specifies what character to put in
 column 5.  A line that starts with a tab character followed by any digit
 except @samp{0} is also a continuation line.  We call this style of
-continuation @dfn{tab format}.  (Fortran 90 introduced ``free form'',
-with another style of continuation lines).
+continuation @dfn{tab format}.  (Fortran 90 introduced free-form
+continuation lines.)
 
 @vindex indent-tabs-mode @r{(Fortran mode)}
 @vindex fortran-analyze-depth
@@ -499,7 +499,7 @@ will confuse font-lock.)
 
 @table @kbd
 @item C-c C-r
-Display a ``column ruler'' momentarily above the current line
+Display a column ruler momentarily above the current line
 (@code{fortran-column-ruler}).
 @item C-c C-w
 Split the current window horizontally temporarily so that it is
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index 2ae7300..a171db7 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -7,7 +7,7 @@
 @cindex frames
 
   When Emacs is started on a graphical display, e.g., on the X Window
-System, it occupies a graphical system-level ``window''.  In this
+System, it occupies a graphical system-level display region.  In this
 manual, we call this a @dfn{frame}, reserving the word ``window'' for
 the part of the frame used for displaying a buffer.  A frame initially
 contains one window, but it can be subdivided into multiple windows
@@ -28,7 +28,7 @@ displays (@pxref{Exiting}).  To close just the selected 
frame, type
   This chapter describes Emacs features specific to graphical displays
 (particularly mouse commands), and features for managing multiple
 frames.  On text terminals, many of these features are unavailable.
-However, it is still possible to create multiple ``frames'' on text
+However, it is still possible to create multiple frames on text
 terminals; such frames are displayed one at a time, filling the entire
 terminal screen (@pxref{Non-Window Terminals}).  It is also possible
 to use the mouse on some text terminals (@pxref{Text-Only Mouse}, for
@@ -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}).
@@ -217,7 +217,7 @@ also copied to the kill ring.
 @item Double-Mouse-1
 Select the text around the word which you click on.
 
-Double-clicking on a character with ``symbol'' syntax (such as
+Double-clicking on a character with symbol syntax (such as
 underscore, in C mode) selects the symbol surrounding that character.
 Double-clicking on a character with open- or close-parenthesis syntax
 selects the parenthetical grouping which that character starts or
@@ -388,7 +388,7 @@ boundary to the left or right.
   The prefix key @kbd{C-x 5} is analogous to @kbd{C-x 4}.  Whereas
 each @kbd{C-x 4} command pops up a buffer in a different window in the
 selected frame (@pxref{Pop Up Window}), the @kbd{C-x 5} commands use a
-different frame.  If an existing visible or iconified (``minimized'')
+different frame.  If an existing visible or iconified (a.k.a.@: ``minimized'')
 frame already displays the requested buffer, that frame is raised and
 deiconified (``un-minimized''); otherwise, a new frame is created on
 the current display terminal.
@@ -444,7 +444,7 @@ error if there is only one frame.
 @item C-z
 @kindex C-z @r{(X windows)}
 @findex suspend-frame
-Minimize (or ``iconify'') the selected Emacs frame
+Minimize (or iconify) the selected Emacs frame
 (@code{suspend-frame}).  @xref{Exiting}.
 
 @item C-x 5 o
@@ -467,8 +467,8 @@ maximized, it fills the screen.
 @item <F11>
 @kindex <F11>
 @findex toggle-frame-fullscreen
-Toggle fullscreen mode for the current frame.  (The difference
-between ``fullscreen'' and ``maximized'' is normally that the former
+Toggle full-screen mode for the current frame.  (The difference
+between full-screen and maximized is normally that the former
 hides window manager decorations, giving slightly more screen space to
 Emacs itself.)
 @end table
@@ -476,7 +476,7 @@ Emacs itself.)
 @vindex frame-resize-pixelwise
   Note that with some window managers you may have to customize the
 variable @code{frame-resize-pixelwise} to a address@hidden value in
-order to make a frame truly ``maximized'' or ``fullscreen''.  This
+order to make a frame truly maximized or full-screen.  This
 variable, when set to a address@hidden value, in general allows
 resizing frames at pixel resolution, rather than in integral multiples
 of lines and columns.
@@ -485,7 +485,7 @@ of lines and columns.
 frame.  However, it will refuse to delete the last frame in an Emacs
 session, to prevent you from losing the ability to interact with the
 Emacs session.  Note that when Emacs is run as a daemon (@pxref{Emacs
-Server}), there is always a ``virtual frame'' that remains after all
+Server}), there is always a virtual frame that remains after all
 the ordinary, interactive frames are deleted.  In this case, @kbd{C-x
 5 0} can delete the last interactive frame; you can use
 @command{emacsclient} to reconnect to the Emacs session.
@@ -565,7 +565,7 @@ command can be helpful.  It describes the character at 
point, and
 names the font that it's rendered in.
 
 @cindex fontconfig
-  On X, there are four different ways to express a ``font name''.  The
+  On X, there are four different ways to express a font name.  The
 first is to use a @dfn{Fontconfig pattern}.  Fontconfig patterns have
 the following form:
 
@@ -738,8 +738,8 @@ have.  Normally you should use @samp{iso8859} for 
@var{registry} and
 @samp{1} for @var{encoding}.
 @end table
 
-  The fourth and final method of specifying a font is to use a ``font
-nickname''.  Certain fonts have shorter nicknames, which you can use
+  The fourth and final method of specifying a font is to use a font
+nickname.  Certain fonts have shorter nicknames, which you can use
 instead of a normal font specification.  For instance, @samp{6x13} is
 equivalent to
 
@@ -1138,8 +1138,8 @@ suppressed all dialog boxes with the variable 
@code{use-dialog-box}.
 @vindex x-gtk-file-dialog-help-text
 @cindex hidden files, in GTK+ file chooser
 @cindex help text, in GTK+ file chooser
-  When Emacs is compiled with GTK+ support, it uses the GTK+ ``file
-chooser'' dialog.  Emacs adds an additional toggle button to this
+  When Emacs is compiled with GTK+ support, it uses the GTK+ file
+chooser dialog.  Emacs adds an additional toggle button to this
 dialog, which you can use to enable or disable the display of hidden
 files (files starting with a dot) in that dialog.  If you want this
 toggle to be activated by default, change the variable
diff --git a/doc/emacs/glossary.texi b/doc/emacs/glossary.texi
index 9101f1c..e66cd79 100644
--- a/doc/emacs/glossary.texi
+++ b/doc/emacs/glossary.texi
@@ -135,7 +135,7 @@ X}).  Borders are not the same as fringes (q.v.).
 @item Buffer
 The buffer is the basic editing unit; one buffer corresponds to one text
 being edited.  You normally have several buffers, but at any time you are
-editing only one, the ``current buffer'', though several can be visible
+editing only one, the current buffer, though several can be visible
 when you are using multiple windows or frames (q.v.).  Most buffers
 are visiting (q.v.@:) some file.  @xref{Buffers}.
 
@@ -265,7 +265,7 @@ normally (but see @ref{Glossary---Truncation}) takes up 
more than one
 screen line when displayed.  We say that the text line is continued, and all
 screen lines used for it after the first are called continuation
 lines.  @xref{Continuation Lines}.  A related Emacs feature is
-``filling'' (q.v.).
+filling (q.v.).
 
 @item Control Character
 A control character is a character that you type by holding down the
@@ -285,7 +285,7 @@ The particular form of copyleft used by the GNU project is 
called the
 GNU General Public License.  @xref{Copying}.
 
 @item @key{Ctrl}
-The @key{Ctrl} or ``control'' key is what you hold down
+The @key{Ctrl} or control key is what you hold down
 in order to enter a control character (q.v.).  @xref{Glossary---C-}.
 
 @item Current Buffer
@@ -367,8 +367,8 @@ Deletion means erasing text without copying it into the 
kill ring
 @anchor{Glossary---Deletion of Files}
 @item Deletion of Files
 Deleting a file means erasing it from the file system.
-(Note that some systems use the concept of a ``trash can'', or ``recycle
-bin'', to allow you to ``undelete'' files.)
+(Note that some systems use the concept of a trash can, or recycle
+bin, to allow you to undelete files.)
 @xref{Misc File Ops,Misc File Ops,Miscellaneous File Operations}.
 
 @item Deletion of Messages
@@ -1076,7 +1076,7 @@ command, using @kbd{C-g} (or @address@hidden on MS-DOS).  
@xref{Quitting}.
 Quoting means depriving a character of its usual special significance.
 The most common kind of quoting in Emacs is with @kbd{C-q}.  What
 constitutes special significance depends on the context and on
-convention.  For example, an ``ordinary'' character as an Emacs command
+convention.  For example, an ordinary character as an Emacs command
 inserts itself; so in this context, a special character is any character
 that does not normally insert itself (such as @key{DEL}, for example),
 and quoting it makes it insert itself as if it were not special.  Not
@@ -1121,7 +1121,7 @@ Many commands operate on the text of the region.  
@xref{Mark,Region}.
 @item Register
 Registers are named slots in which text, buffer positions, or
 rectangles can be saved for later use.  @xref{Registers}.  A related
-Emacs feature is ``bookmarks'' (q.v.).
+Emacs feature is bookmarks (q.v.).
 
 @anchor{Glossary---Regular Expression}
 @item Regular Expression
diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi
index 6984250..a9c63b9 100644
--- a/doc/emacs/help.texi
+++ b/doc/emacs/help.texi
@@ -614,7 +614,7 @@ Project (@code{describe-gnu-project}).
 Display information about ordering printed copies of Emacs manuals
 (@code{view-order-manuals}).
 @item C-h C-n
-Display the ``news'' file, which lists the new features in this
+Display the news, which lists the new features in this
 version of Emacs (@code{view-emacs-news}).
 @item C-h C-o
 Display how to order or download the latest version of
@@ -634,7 +634,8 @@ Emacs (@code{describe-no-warranty}).
 
 @cindex tooltips
 @cindex balloon help
-  In Emacs, stretches of ``active text'' (text that does something
address@hidden active text
+  In Emacs, stretches of @dfn{active text} (text that does something
 special in response to mouse clicks or @key{RET}) often have
 associated help text.  This includes hyperlinks in Emacs buffers, as
 well as parts of the mode line.  On graphical displays, as well as
diff --git a/doc/emacs/indent.texi b/doc/emacs/indent.texi
index b45839e..76dfa55 100644
--- a/doc/emacs/indent.texi
+++ b/doc/emacs/indent.texi
@@ -35,7 +35,7 @@ mode and related major modes, @key{TAB} normally inserts some
 combination of space and tab characters to advance point to the next
 tab stop (@pxref{Tab Stops}).  For this purpose, the position of the
 first non-whitespace character on the preceding line is treated as an
-additional tab stop, so you can use @key{TAB} to ``align'' point with
+additional tab stop, so you can use @key{TAB} to align point with
 the preceding line.  If the region is active (@pxref{Using Region}),
 @key{TAB} acts specially: it indents each line in the region so that
 its first non-whitespace character is aligned with the preceding line.
@@ -98,7 +98,7 @@ argument, in which case do nothing.
 @kindex M-^
 @findex delete-indentation
 Merge the previous and the current line (@code{delete-indentation}).
-This ``joins'' the two lines cleanly, by replacing any indentation at
+This joins the two lines cleanly, by replacing any indentation at
 the front of the current line, together with the line boundary, with a
 single space.
 
@@ -123,7 +123,7 @@ that column number.
 @findex indent-rigidly
 @cindex remove indentation
 This command is used to change the indentation of all lines that begin
-in the region, moving the affected lines as a ``rigid'' unit.
+in the region, moving the affected lines as a rigid unit.
 
 If called with no argument, the command activates a transient mode for
 adjusting the indentation of the affected lines interactively.  While
diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi
index 7581f34..d453647 100644
--- a/doc/emacs/killing.texi
+++ b/doc/emacs/killing.texi
@@ -358,34 +358,34 @@ So, to recover the text of the next-to-the-last kill, 
first use
 with the previous kill.  @kbd{M-y} is allowed only after a @kbd{C-y}
 or another @kbd{M-y}.
 
-  You can understand @kbd{M-y} in terms of a ``last yank'' pointer which
-points at an entry in the kill ring.  Each time you kill, the ``last
-yank'' pointer moves to the newly made entry at the front of the ring.
address@hidden yanks the entry which the ``last yank'' pointer points to.
address@hidden moves the ``last yank'' pointer to a different entry, and the
+  You can understand @kbd{M-y} in terms of a last-yank pointer which
+points at an entry in the kill ring.  Each time you kill, the last-yank
+pointer moves to the newly made entry at the front of the ring.
address@hidden yanks the entry which the last-yank pointer points to.
address@hidden moves the last-yank pointer to a different entry, and the
 text in the buffer changes to match.  Enough @kbd{M-y} commands can move
 the pointer to any entry in the ring, so you can get any entry into the
 buffer.  Eventually the pointer reaches the end of the ring; the next
 @kbd{M-y} loops back around to the first entry again.
 
-  @kbd{M-y} moves the ``last yank'' pointer around the ring, but it does
+  @kbd{M-y} moves the last-yank pointer around the ring, but it does
 not change the order of the entries in the ring, which always runs from
 the most recent kill at the front to the oldest one still remembered.
 
   @kbd{M-y} can take a numeric argument, which tells it how many entries
-to advance the ``last yank'' pointer by.  A negative argument moves the
+to advance the last-yank pointer by.  A negative argument moves the
 pointer toward the front of the ring; from the front of the ring, it
-moves ``around'' to the last entry and continues forward from there.
+moves around to the last entry and continues forward from there.
 
   Once the text you are looking for is brought into the buffer, you can
 stop doing @kbd{M-y} commands and it will stay there.  It's just a copy
 of the kill ring entry, so editing it in the buffer does not change
-what's in the ring.  As long as no new killing is done, the ``last
-yank'' pointer remains at the same place in the kill ring, so repeating
+what's in the ring.  As long as no new killing is done, the last-yank
+pointer remains at the same place in the kill ring, so repeating
 @kbd{C-y} will yank another copy of the same previous kill.
 
   When you call @kbd{C-y} with a numeric argument, that also sets the
-``last yank'' pointer to the entry that it yanks.
+last-yank pointer to the entry that it yanks.
 
 @node Appending Kills
 @subsection Appending Kills
@@ -546,9 +546,9 @@ containing the last stretch of text selected in an X 
application
 (usually by dragging the mouse).  Typically, this text can be inserted
 into other X applications by @kbd{mouse-2} clicks.  The primary
 selection is separate from the clipboard.  Its contents are more
-``fragile''; they are overwritten each time you select text with the
-mouse, whereas the clipboard is only overwritten by explicit ``cut''
-or ``copy'' commands.
+fragile; they are overwritten each time you select text with the
+mouse, whereas the clipboard is only overwritten by explicit cut
+or copy commands.
 
   Under X, whenever the region is active (@pxref{Mark}), the text in
 the region is saved in the primary selection.  This applies regardless
@@ -727,9 +727,9 @@ rectangle, depending on the command that uses them.
 @table @kbd
 @item C-x r k
 Kill the text of the region-rectangle, saving its contents as the
-``last killed rectangle'' (@code{kill-rectangle}).
+last killed rectangle (@code{kill-rectangle}).
 @item C-x r M-w
-Save the text of the region-rectangle as the ``last killed rectangle''
+Save the text of the region-rectangle as the last killed rectangle
 (@code{copy-rectangle-as-kill}).
 @item C-x r d
 Delete the text of the region-rectangle (@code{delete-rectangle}).
@@ -776,7 +776,7 @@ region-rectangle is like erasing the specified text on each 
line of
 the rectangle; if there is any following text on the line, it moves
 backwards to fill the gap.
 
-  ``Killing'' a rectangle is not killing in the usual sense; the
+  Killing a rectangle is not killing in the usual sense; the
 rectangle is not stored in the kill ring, but in a special place that
 only records the most recent rectangle killed.  This is because
 yanking a rectangle is so different from yanking linear text that
@@ -786,8 +786,8 @@ for rectangles.
 @kindex C-x r M-w
 @findex copy-rectangle-as-kill
   @kbd{C-x r M-w} (@code{copy-rectangle-as-kill}) is the equivalent of
address@hidden for rectangles: it records the rectangle as the ``last
-killed rectangle'', without deleting the text from the buffer.
address@hidden for rectangles: it records the rectangle as the last
+killed rectangle, without deleting the text from the buffer.
 
 @kindex C-x r y
 @findex yank-rectangle
diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi
index 039358b..2cbcc8b 100644
--- a/doc/emacs/kmacro.texi
+++ b/doc/emacs/kmacro.texi
@@ -194,9 +194,9 @@ C-x C-k C-p C-p C-k C-k C-k C-n C-n C-k C-p C-k C-d
 @end example
 
 @noindent
-will rotate the keyboard macro ring to the ``second previous'' macro,
+will rotate the keyboard macro ring to the second-previous macro,
 execute the resulting head macro three times, rotate back to the
-original head macro, execute that once, rotate to the ``previous''
+original head macro, execute that once, rotate to the previous
 macro, execute that, and finally delete it from the macro ring.
 
 @findex kmacro-end-or-call-macro-repeat
@@ -224,8 +224,8 @@ immediately by repeating just @kbd{C-n} and @kbd{C-p} until 
the
 desired macro is at the head of the ring.  To execute the new macro
 ring head immediately, just type @kbd{C-k}.
 
-  Note that Emacs treats the head of the macro ring as the ``last
-defined keyboard macro''.  For instance, @key{F4} will execute that
+  Note that Emacs treats the head of the macro ring as the last
+defined keyboard macro.  For instance, @key{F4} will execute that
 macro, and @kbd{C-x C-k n} will give it a name.
 
 @vindex kmacro-ring-max
diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi
index 97d423e..c046825 100644
--- a/doc/emacs/macos.texi
+++ b/doc/emacs/macos.texi
@@ -66,7 +66,7 @@ file names.
   On GNUstep, in an X-windows environment you need to use @kbd{Cmd-c}
 instead of one of the @kbd{C-w} or @kbd{M-w} commands to transfer text
 to the X primary selection; otherwise, Emacs will use the
-``clipboard'' selection.  Likewise, @kbd{Cmd-y} (instead of @kbd{C-y})
+clipboard selection.  Likewise, @kbd{Cmd-y} (instead of @kbd{C-y})
 yanks from the X primary selection instead of the kill-ring or
 clipboard.
 
@@ -131,9 +131,9 @@ at the command-line before starting Emacs:
 @section Windowing System Events under Mac OS / GNUstep
 
   Nextstep applications receive a number of special events which have
-no X equivalent.  These are sent as specially defined ``keys'', which
+no X equivalent.  These are sent as specially defined key events, which
 do not correspond to any sequence of keystrokes.  Under Emacs, these
-``key'' events can be bound to functions just like ordinary
+key events can be bound to functions just like ordinary
 keystrokes.  Here is a list of these events.
 
 @table @key
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 8ec1cd2..a571ea7 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -8,7 +8,7 @@
   This chapter describes Emacs features for maintaining large
 programs.  If you are maintaining a large Lisp program, then in
 addition to the features described here, you may find
-the @file{ERT} (``Emacs Lisp Regression Testing'') library useful
+the Emacs Lisp Regression Testing (ERT) library useful
 (@pxref{Top,,ERT,ert, Emacs Lisp Regression Testing}).
 
 @menu
@@ -395,7 +395,7 @@ instance, @samp{jim}), that is displayed as 
@samp{RCS:jim:1.3}.
 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
+indicator to pop up a tool-tip, which displays a more verbose
 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.
@@ -441,14 +441,14 @@ VC fileset.
 @findex vc-next-action
 @kindex C-x v v
   The principal VC command is a multi-purpose command, @kbd{C-x v v}
-(@code{vc-next-action}), which performs the ``most appropriate''
+(@code{vc-next-action}), which performs the most appropriate
 action on the current VC fileset: either registering it with a version
 control system, or committing it, or unlocking it, or merging changes
 into it.  The precise actions are described in detail in the following
 subsections.  You can use @kbd{C-x v v} either in a file-visiting
 buffer or in a VC Directory buffer.
 
-  Note that VC filesets are distinct from the ``named filesets'' used
+  Note that VC filesets are distinct from the named filesets used
 for viewing and visiting files in functional groups
 (@pxref{Filesets}).  Unlike named filesets, VC filesets are not named
 and don't persist across sessions.
@@ -469,8 +469,8 @@ and don't persist across sessions.
 @item
 If there is more than one file in the VC fileset and the files have
 inconsistent version control statuses, signal an error.  (Note,
-however, that a fileset is allowed to include both ``newly-added''
-files and ``modified'' files; @pxref{Registering}.)
+however, that a fileset is allowed to include both newly-added
+files and modified files; @pxref{Registering}.)
 
 @item
 If none of the files in the VC fileset are registered with a version
@@ -502,7 +502,7 @@ if each work file in the VC fileset is up-to-date.  If any 
file has
 been changed in the repository, offer to update it.
 @end itemize
 
-  These rules also apply when you use RCS in its ``non-locking'' mode,
+  These rules also apply when you use RCS in its non-locking mode,
 except that changes are not automatically merged from the repository.
 Nothing informs you if another user has committed changes in the same
 file since you began editing it; when you commit your revision, his
@@ -547,7 +547,7 @@ the lock and make the file read-only again.
 
 @item
 If each file is locked by another user, ask whether you want to
-``steal the lock''.  If you say yes, the file becomes locked by you,
+steal the lock.  If you say yes, the file becomes locked by you,
 and a warning message is sent to the user who had formerly locked the
 file.
 @end itemize
@@ -582,11 +582,11 @@ If the fileset is unmodified (and unlocked), this checks 
the specified
 revision into the working tree.  You can also specify a revision on
 another branch by giving its revision or branch ID (@pxref{Switching
 Branches}).  An empty argument (i.e., @kbd{C-u C-x v v @key{RET}})
-checks out the latest (``head'') revision on the current branch.
+checks out the latest (head) revision on the current branch.
 
-This signals an error on a decentralized version control system.
+This is silently ignored on a decentralized version control system.
 Those systems do not let you specify your own revision IDs, nor do
-they use the concept of ``checking out'' individual files.
+they use the concept of checking out individual files.
 @end itemize
 
 @node Log Buffer
@@ -634,7 +634,7 @@ support it, the header is treated as part of the log entry.
 @findex log-edit-show-files
 @kindex C-c C-d @r{(Log Edit mode)}
 @findex log-edit-show-diff
-  While in the @file{*vc-log*} buffer, the ``current VC fileset'' is
+  While in the @file{*vc-log*} buffer, the current VC fileset is
 considered to be the fileset that will be committed if you type
 @address@hidden C-c}}.  To view a list of the files in the VC fileset,
 type @address@hidden C-f}} (@code{log-edit-show-files}).  To view a diff
@@ -710,7 +710,7 @@ under, it prompts for a repository type, creates a new 
repository, and
 registers the file into that repository.
 
   On most version control systems, registering a file with @kbd{C-x v
-i} or @kbd{C-x v v} adds it to the ``working tree'' but not to the
+i} or @kbd{C-x v v} adds it to the working tree but not to the
 repository.  Such files are labeled as @samp{added} in the VC
 Directory buffer, and show a revision ID of @samp{@@@@} in the mode
 line.  To make the registration take effect in the repository, you
@@ -824,8 +824,8 @@ window.
 @kindex C-x v g
   Many version control systems allow you to view files @dfn{annotated}
 with per-line revision information, by typing @kbd{C-x v g}
-(@code{vc-annotate}).  This creates a new buffer (the ``annotate
-buffer'') displaying the file's text, with each line colored to show
+(@code{vc-annotate}).  This creates a new ``annotate'' buffer
+displaying the file's text, with each line colored to show
 how old it is.  Red text is new, blue is old, and intermediate colors
 indicate intermediate ages.  By default, the color is scaled over the
 full range of ages, such that the oldest changes are blue, and the
@@ -836,7 +836,7 @@ arguments using the minibuffer: the revision to display and 
annotate
 (instead of the current file contents), and the time span in days the
 color range should cover.
 
-  From the annotate buffer, these and other color scaling options are
+  From the ``annotate'' buffer, these and other color scaling options are
 available from the @samp{VC-Annotate} menu.  In this buffer, you can
 also use the following keys to browse the annotations of past revisions,
 view diffs, or view log entries:
@@ -901,11 +901,11 @@ Display the change history for the current repository
 (@code{vc-print-root-log}).
 
 @item C-x v I
-Display the changes that a pull operation will retrieve
+Display the changes that a ``pull'' operation will retrieve
 (@code{vc-log-incoming}).
 
 @item C-x v O
-Display the changes that will be sent by the next push operation
+Display the changes that will be sent by the next ``push'' operation
 (@code{vc-log-outgoing}).
 @end table
 
@@ -941,13 +941,13 @@ revision at point.  A second @key{RET} hides it again.
   On a decentralized version control system, the @kbd{C-x v I}
 (@code{vc-log-incoming}) command displays a log buffer showing the
 changes that will be applied, the next time you run the version
-control system's ``pull'' command to get new revisions from another
+control system's pull command to get new revisions from another
 repository (@pxref{Pulling / Pushing}).  This other repository is the default
 one from which changes are pulled, as defined by the version control
 system; with a prefix argument, @code{vc-log-incoming} prompts for a
 specific repository.  Similarly, @kbd{C-x v O}
 (@code{vc-log-outgoing}) shows the changes that will be sent to
-another repository, the next time you run the ``push'' command; with a
+another repository, the next time you run the push command; with a
 prefix argument, it prompts for a specific destination repository.
 
   In the @file{*vc-change-log*} buffer, you can use the following keys
@@ -1104,7 +1104,7 @@ PCL-CVS, pcl-cvs, PCL-CVS---The Emacs Front-End to CVS}.
   The VC Directory buffer contains a list of version-controlled files
 and their version control statuses.  It lists files in the current
 directory (the one specified when you called @kbd{C-x v d}) and its
-subdirectories, but only those with a ``noteworthy'' status.  Files
+subdirectories, but only those with a noteworthy status.  Files
 that are up-to-date (i.e., the same as in the repository) are
 omitted.  If all the files in a subdirectory are up-to-date, the
 subdirectory is not listed either.  As an exception, if a file has
@@ -1169,7 +1169,7 @@ directories that are used internally by version control 
systems.
 @subsubsection VC Directory Commands
 
   Emacs provides several commands for navigating the VC Directory
-buffer, and for ``marking'' files as belonging to the current VC
+buffer, and for marking files as belonging to the current VC
 fileset.
 
 @table @kbd
@@ -1291,8 +1291,8 @@ bring them back at a later time).
 
   One use of version control is to support multiple independent lines
 of development, which are called @dfn{branches}.  Amongst other
-things, branches can be used for maintaining separate ``stable'' and
-``development'' versions of a program, and for developing unrelated
+things, branches can be used for maintaining separate stable and
+development versions of a program, and for developing unrelated
 features in isolation from one another.
 
   VC's support for branch operations is currently fairly limited.  For
@@ -2407,11 +2407,11 @@ information about the project.
 
   A project may contain one or more @dfn{targets}.  A target can be an
 object file, executable program, or some other type of file, which is
-``built'' from one or more of the files in the project.
+built from one or more of the files in the project.
 
   To add a new @dfn{target} to a project, type @kbd{C-c . t}
 (@code{M-x ede-new-target}).  This command also asks if you wish to
-``add'' the current file to that target, which means that the target
+add the current file to that target, which means that the target
 is to be built from that file.  After you have defined a target, you
 can add more files to it by typing @kbd{C-c . a}
 (@code{ede-add-file}).
diff --git a/doc/emacs/mark.texi b/doc/emacs/mark.texi
index c975f6e..09c766b 100644
--- a/doc/emacs/mark.texi
+++ b/doc/emacs/mark.texi
@@ -43,7 +43,7 @@ Ordinarily, only the selected window highlights its region; 
however,
 if the variable @code{highlight-nonselected-windows} is
 address@hidden, each window highlights its own region.
 
-  There is another kind of region: the ``rectangular region''.
+  There is another kind of region: the rectangular region.
 @xref{Rectangles}.
 
 @menu
@@ -105,7 +105,7 @@ region also automatically deactivate the mark, like 
@kbd{C-x C-u} in
 the above example.
 
   Instead of setting the mark in order to operate on a region, you can
-also use it to ``remember'' a position in the buffer (by typing
+also use it to remember a position in the buffer (by typing
 @address@hidden address@hidden), and later jump back there (by typing
 @kbd{C-u address@hidden).  @xref{Mark Ring}, for details.
 
@@ -275,7 +275,7 @@ active.  If you change the value to @code{kill}, these 
commands
 behavior.  Such commands usually have the word @code{region} in their
 names, like @kbd{C-w} (@code{kill-region}) and @code{C-x C-u}
 (@code{upcase-region}).  If the mark is inactive, they operate on the
-``inactive region''---that is, on the text between point and the
address@hidden region}---that is, on the text between point and the
 position at which the mark was last set (@pxref{Mark Ring}).  To
 disable this behavior, change the variable
 @code{mark-even-if-inactive} to @code{nil}.  Then these commands will
diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi
index f0bedf8..2493fda 100644
--- a/doc/emacs/mini.texi
+++ b/doc/emacs/mini.texi
@@ -1,3 +1,4 @@
address@hidden -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
 @c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
@@ -108,8 +109,8 @@ Find file: /u2/emacs/src//etc/termcap
 @cindex double slash in file name
 @cindex slashes repeated in file name
 @findex file-name-shadow-mode
-Emacs interprets a double slash as ``ignore everything before the
-second slash in the pair''.  In the example above,
+A double slash causes Emacs to ignore everything before the
+second slash in the pair.  In the example above,
 @file{/u2/emacs/src/} is ignored, so the argument you supplied is
 @file{/etc/termcap}.  The ignored part of the file name is dimmed if
 the terminal allows it.  (To disable this dimming, turn off File Name
@@ -435,10 +436,10 @@ This behavior is used by most commands that read file 
names, like
 @cindex completion style
 
   Completion commands work by narrowing a large list of possible
-completion alternatives to a smaller subset that ``matches'' what you
+completion alternatives to a smaller subset that matches what you
 have typed in the minibuffer.  In @ref{Completion Example}, we gave a
 simple example of such matching.  The procedure of determining what
-constitutes a ``match'' is quite intricate.  Emacs attempts to offer
+constitutes a match is quite intricate.  Emacs attempts to offer
 plausible completions under most circumstances.
 
   Emacs performs completion using one or more @dfn{completion
@@ -545,7 +546,7 @@ ignored as a completion alternative.  Any element ending in 
a slash
 @code{".o"}, @code{".elc"}, and @code{"~"}.  For example, if a
 directory contains @samp{foo.c} and @samp{foo.elc}, @samp{foo}
 completes to @samp{foo.c}.  However, if @emph{all} possible
-completions end in ``ignored'' strings, they are not ignored: in the
+completions end in otherwise-ignored strings, they are not ignored: in the
 previous example, @samp{foo.e} completes to @samp{foo.elc}.  Emacs
 disregards @code{completion-ignored-extensions} when showing
 completion alternatives in the completion list.
@@ -564,7 +565,7 @@ completion list buffer.
 
 @vindex completion-cycle-threshold
   If @code{completion-cycle-threshold} is address@hidden, completion
-commands can ``cycle'' through completion alternatives.  Normally, if
+commands can cycle through completion alternatives.  Normally, if
 there is more than one completion alternative for the text in the
 minibuffer, a completion command completes up to the longest common
 substring.  If you change @code{completion-cycle-threshold} to
@@ -620,7 +621,7 @@ fetching later entries into the minibuffer.
 entries in the minibuffer history (e.g., if you haven't previously
 typed @kbd{M-p}), Emacs tries fetching from a list of default
 arguments: values that you are likely to enter.  You can think of this
-as moving through the ``future history'' list.
+as moving through the ``future history''.
 
   If you edit the text inserted by the @kbd{M-p} or @kbd{M-n}
 minibuffer history commands, this does not change its entry in the
@@ -754,12 +755,12 @@ input is ignored.
 @node Yes or No Prompts
 @section Yes or No Prompts
 
-  An Emacs command may require you to answer a ``yes or no'' question
+  An Emacs command may require you to answer a yes-or-no question
 during the course of its execution.  Such queries come in two main
 varieties.
 
 @cindex y or n prompt
-  For the first type of ``yes or no'' query, the prompt ends with
+  For the first type of yes-or-no query, the prompt ends with
 @samp{(y or n)}.  Such a query does not actually use the minibuffer;
 the prompt appears in the echo area, and you answer by typing either
 @samp{y} or @samp{n}, which immediately delivers the response.  For
@@ -768,7 +769,7 @@ buffer, and enter the name of an existing file, Emacs 
issues a prompt
 like this:
 
 @smallexample
-File `foo.el' exists; overwrite? (y or n)
+File ‘foo.el’ exists; overwrite? (y or n)
 @end smallexample
 
 @noindent
@@ -783,7 +784,7 @@ window; and @kbd{C-M-S-v} scrolls backward in the next 
window.  Typing
 (@pxref{Quitting}).
 
 @cindex yes or no prompt
-  The second type of ``yes or no'' query is typically employed if
+  The second type of yes-or-no query is typically employed if
 giving the wrong answer would have serious consequences; it uses the
 minibuffer, and features a prompt ending with @samp{(yes or no)}.  For
 example, if you invoke @kbd{C-x k} (@code{kill-buffer}) on a
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index db096c7..7fad826 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -331,7 +331,7 @@ Certificate Authorities which issue new certificates for 
third-party
 services, you may want to keep track of these changes.
 
 @item Diffie-Hellman low prime bits
-When doing the public key exchange, the number of ``prime bits''
+When doing the public key exchange, the number of prime bits
 should be high to ensure that the channel can't be eavesdropped on by
 third parties.  If this number is too low, you will be warned.
 
@@ -1486,8 +1486,8 @@ this buffer just like it does with a terminal in ordinary 
Term mode.
 most common speed is 9600 bits per second.  You can change the speed
 interactively by clicking on the mode line.
 
-  A serial port can be configured even more by clicking on ``8N1'' in
-the mode line.  By default, a serial port is configured as ``8N1'',
+  A serial port can be configured even more by clicking on @samp{8N1} in
+the mode line.  By default, a serial port is configured as @samp{8N1},
 which means that each byte consists of 8 data bits, No parity check
 bit, and 1 stopbit.
 
@@ -1548,7 +1548,7 @@ variable to @samp{emacsclient +%d %s}.}
 
 @vindex server-name
   You can run multiple Emacs servers on the same machine by giving
-each one a unique ``server name'', using the variable
+each one a unique @dfn{server name}, using the variable
 @code{server-name}.  For example, @kbd{M-x set-variable @key{RET}
 server-name @key{RET} foo @key{RET}} sets the server name to
 @samp{foo}.  The @code{emacsclient} program can specify a server by
@@ -1605,7 +1605,7 @@ still use Emacs to edit the file.
 @kbd{C-x #} (@code{server-edit}) in its buffer.  This saves the file
 and sends a message back to the @command{emacsclient} program, telling
 it to exit.  Programs that use @env{EDITOR} usually wait for the
-``editor''---in this case @command{emacsclient}---to exit before doing
+editor---in this case @command{emacsclient}---to exit before doing
 something else.
 
   You can also call @command{emacsclient} with multiple file name
@@ -1625,7 +1625,7 @@ create it.  However, if you set 
@code{server-kill-new-buffers} to
 @code{nil}, then a different criterion is used: finishing with a
 server buffer kills it if the file name matches the regular expression
 @code{server-temp-file-regexp}.  This is set up to distinguish certain
-``temporary'' files.
+temporary files.
 
   Each @kbd{C-x #} checks for other pending external requests to edit
 various files, and selects the next such file.  You can switch to a
@@ -1716,8 +1716,8 @@ evaluate, @emph{not} as a list of files to visit.
 @cindex @env{EMACS_SERVER_FILE} environment variable
 Specify a @dfn{server file} for connecting to an Emacs server via TCP.
 
-An Emacs server usually uses an operating system feature called a
-``local socket'' to listen for connections.  Some operating systems,
+An Emacs server usually uses a
+local socket to listen for connections.  Some operating systems,
 such as Microsoft Windows, do not support local sockets; in that case,
 the server communicates with @command{emacsclient} via TCP.
 
@@ -1811,7 +1811,7 @@ print hardcopies from Dired (@pxref{Operating on Files}) 
and the diary
 (@pxref{Displaying the Diary}).  You can also ``print'' an Emacs
 buffer to HTML with the command @kbd{M-x htmlfontify-buffer}, which
 converts the current buffer to a HTML file, replacing Emacs faces with
-CSS-based markup.  Furthermore, Org mode allows you to ``print'' Org
+CSS-based markup.  Furthermore, Org mode allows you to print Org
 files to a variety of formats, such as PDF (@pxref{Org Mode}).
 
 @table @kbd
@@ -1984,7 +1984,7 @@ additional paper sizes by changing the variable
 @vindex ps-landscape-mode
   The variable @code{ps-landscape-mode} specifies the orientation of
 printing on the page.  The default is @code{nil}, which stands for
-``portrait'' mode.  Any address@hidden value specifies ``landscape''
+portrait mode.  Any address@hidden value specifies landscape
 mode.
 
 @vindex ps-number-of-columns
@@ -2232,10 +2232,10 @@ Insert a byte with a code typed in octal.
 Insert a byte with a code typed in hex.
 
 @item C-x [
-Move to the beginning of a 1k-byte ``page''.
+Move to the beginning of a 1k-byte page.
 
 @item C-x ]
-Move to the end of a 1k-byte ``page''.
+Move to the end of a 1k-byte page.
 
 @item M-g
 Move to an address specified in hex.
@@ -2316,7 +2316,7 @@ usually turned on.
 However, this may be slow if there are a lot of buffers in the
 desktop.  You can specify the maximum number of buffers to restore
 immediately with the variable @code{desktop-restore-eager}; the
-remaining buffers are restored ``lazily'', when Emacs is idle.
+remaining buffers are restored lazily, when Emacs is idle.
 
 @findex desktop-clear
 @vindex desktop-globals-to-clear
@@ -2391,7 +2391,7 @@ stack overflow) from time to time.  So remember to exit 
or abort the
 recursive edit when you no longer need it.
 
   In general, we try to minimize the use of recursive editing levels in
-GNU Emacs.  This is because they constrain you to ``go back'' in a
+GNU Emacs.  This is because they constrain you to go back in a
 particular order---from the innermost level toward the top level.  When
 possible, we present different activities in separate buffers so that
 you can switch between them as you please.  Some commands switch to a
@@ -2401,7 +2401,7 @@ the order you choose.
 
 @ignore
 @c Apart from edt and viper, this is all obsolete.
address@hidden (Can't believe we were saying ``most other editors'' into 2014!)
address@hidden (Can't believe we were saying "most other editors" into 2014!)
 @c There seems no point having a node just for those, which both have
 @c their own manuals.
 @node Emulation
@@ -2460,8 +2460,8 @@ Viper, viper}.
 @findex vi-mode
 @kbd{M-x vi-mode} enters a major mode that replaces the previously
 established major mode.  All of the vi commands that, in real vi, enter
-``input'' mode are programmed instead to return to the previous major
-mode.  Thus, ordinary Emacs serves as vi's ``input'' mode.
+input mode are programmed instead to return to the previous major
+mode.  Thus, ordinary Emacs serves as vi's input mode.
 
 Because vi emulation works through major modes, it does not work
 to switch buffers during emulation.  Return to normal Emacs first.
@@ -2472,7 +2472,7 @@ to the @code{vi-mode} command.
 @item vi (alternate emulator)
 @findex vip-mode
 @kbd{M-x vip-mode} invokes another vi emulator, said to resemble real vi
-more thoroughly than @kbd{M-x vi-mode}.  ``Input'' mode in this emulator
+more thoroughly than @kbd{M-x vi-mode}.  Input mode in this emulator
 is changed from ordinary Emacs so you can use @key{ESC} to go back to
 emulated vi command mode.  To get from emulated vi command mode back to
 ordinary Emacs, type @kbd{C-z}.
@@ -2704,7 +2704,7 @@ bored, try an argument of 9.  Sit back and watch.
 
 @findex life
 @cindex Life
-  @kbd{M-x life} runs Conway's ``Life'' cellular automaton.
+  @kbd{M-x life} runs Conway's Game of Life cellular automaton.
 
 @findex landmark
 @cindex landmark game
diff --git a/doc/emacs/modes.texi b/doc/emacs/modes.texi
index d442f85..4abbb59 100644
--- a/doc/emacs/modes.texi
+++ b/doc/emacs/modes.texi
@@ -1,3 +1,4 @@
address@hidden -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
 @c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
@@ -251,7 +252,7 @@ In Binary Overwrite mode, digits after @kbd{C-q} specify an 
octal
 character code, as usual.
 
 @item
-Visual Line mode performs ``word wrapping'', causing long lines to be
+Visual Line mode performs word wrapping, causing long lines to be
 wrapped at word boundaries.  @xref{Visual Line Mode}.
 @end itemize
 
@@ -451,6 +452,6 @@ the file's @samp{-*-} line or local variables list (if any).
 a new major mode if the new file name implies a mode (@pxref{Saving}).
 (@kbd{C-x C-s} does this too, if the buffer wasn't visiting a file.)
 However, this does not happen if the buffer contents specify a major
-mode, and certain ``special'' major modes do not allow the mode to
+mode, and certain special major modes do not allow the mode to
 change.  You can turn off this mode-changing feature by setting
 @code{change-major-mode-with-file-name} to @code{nil}.
diff --git a/doc/emacs/msdos-xtra.texi b/doc/emacs/msdos-xtra.texi
index 9996158..c8e2669 100644
--- a/doc/emacs/msdos-xtra.texi
+++ b/doc/emacs/msdos-xtra.texi
@@ -9,7 +9,7 @@
 @cindex MS-DOS peculiarities
 
   This section briefly describes the peculiarities of using Emacs on
-the MS-DOS ``operating system''.
+MS-DOS.
 @iftex
 Information about Emacs and Microsoft's current operating system
 Windows is in the main Emacs manual
diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi
index 477f24e..88bbccd 100644
--- a/doc/emacs/mule.texi
+++ b/doc/emacs/mule.texi
@@ -172,9 +172,9 @@ system encodes the character safely and with a single byte
 one byte, Emacs shows @samp{file ...}.
 
   As a special case, if the character lies in the range 128 (0200
-octal) through 159 (0237 octal), it stands for a ``raw'' byte that
+octal) through 159 (0237 octal), it stands for a raw byte that
 does not correspond to any specific displayable character.  Such a
-``character'' lies within the @code{eight-bit-control} character set,
+character lies within the @code{eight-bit-control} character set,
 and is displayed as an escaped octal character code.  In this case,
 @kbd{C-x =} shows @samp{part of display ...} instead of @samp{file}.
 
@@ -642,7 +642,7 @@ automatically.  For example:
 @end lisp
 
 @noindent
-This automatically activates the input method ``german-prefix'' in
+This automatically activates the input method @code{german-prefix} in
 Text mode.
 
 @findex quail-set-keyboard-layout
@@ -696,8 +696,8 @@ system; for example, to visit a file encoded in codepage 
850, type
   In addition to converting various representations of address@hidden
 characters, a coding system can perform end-of-line conversion.  Emacs
 handles three different conventions for how to separate lines in a file:
-newline (``unix''), carriage-return linefeed (``dos''), and just
-carriage-return (``mac'').
+newline (Unix), carriage-return linefeed (DOS), and just
+carriage-return (Mac).
 
 @table @kbd
 @item C-h C @var{coding} @key{RET}
@@ -1647,7 +1647,7 @@ so far.
 @cindex 8-bit display
   Normally non-ISO-8859 characters (decimal codes between 128 and 159
 inclusive) are displayed as octal escapes.  You can change this for
-non-standard ``extended'' versions of ISO-8859 character sets by using the
+non-standard extended versions of ISO-8859 character sets by using the
 function @code{standard-display-8bit} in the @code{disp-table} library.
 
   There are two ways to input single-byte address@hidden
@@ -1681,7 +1681,7 @@ characters present directly on the keyboard or using 
@key{Compose} or
 @cindex compose character
 @cindex dead character
 @item
-You can use the key @kbd{C-x 8} as a ``compose character'' prefix for
+You can use the key @kbd{C-x 8} as a compose-character prefix for
 entry of address@hidden Latin-1 and a few other printing
 characters.  @kbd{C-x 8} is good for insertion (in the minibuffer as
 well as other buffers), for searching, and in any other context where
@@ -1691,7 +1691,7 @@ a key sequence is allowed.
 library is loaded, the @key{Alt} modifier key, if the keyboard has
 one, serves the same purpose as @kbd{C-x 8}: use @key{Alt} together
 with an accent character to modify the following letter.  In addition,
-if the keyboard has keys for the Latin-1 ``dead accent characters'',
+if the keyboard has keys for the Latin-1 dead accent characters,
 they too are defined to compose with the following character, once
 @code{iso-transl} is loaded.
 
@@ -1709,13 +1709,13 @@ addition to some charsets of its own (such as 
@code{emacs},
 @code{unicode-bmp}, and @code{eight-bit}).  All supported characters
 belong to one or more charsets.
 
-  Emacs normally ``does the right thing'' with respect to charsets, so
+  Emacs normally does the right thing with respect to charsets, so
 that you don't have to worry about them.  However, it is sometimes
 helpful to know some of the underlying details about charsets.
 
   One example is font selection (@pxref{Fonts}).  Each language
-environment (@pxref{Language Environments}) defines a ``priority
-list'' for the various charsets.  When searching for a font, Emacs
+environment (@pxref{Language Environments}) defines a priority
+list for the various charsets.  When searching for a font, Emacs
 initially attempts to find one that can display the highest-priority
 charsets.  For instance, in the Japanese language environment, the
 charset @code{japanese-jisx0208} has the highest priority, so Emacs
diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi
index 19d861a..1a6a735 100644
--- a/doc/emacs/package.texi
+++ b/doc/emacs/package.texi
@@ -111,7 +111,7 @@ Remove any installation or deletion mark previously added 
to the
 current line by an @kbd{i} or @kbd{d} command.
 
 @item U
-Mark all package with a newer available version for ``upgrading''
+Mark all package with a newer available version for upgrading
 (@code{package-menu-mark-upgrades}).  This places an installation mark
 on the new available versions, and a deletion mark on the old
 installed versions.
@@ -246,7 +246,7 @@ version @var{version} of the package named @var{name}.  
Here,
 @var{version} should be a version string (corresponding to a specific
 version of the package), or @code{t} (which means to load any
 installed version), or @code{nil} (which means no version; this
-``disables'' the package, preventing it from being loaded).  A list
+disables the package, preventing it from being loaded).  A list
 element can also be the symbol @code{all}, which means to load the
 latest installed version of any package not named by the other list
 elements.  The default value is just @code{'(all)}.
diff --git a/doc/emacs/picture-xtra.texi b/doc/emacs/picture-xtra.texi
index a9ad2d5..8a087ac 100644
--- a/doc/emacs/picture-xtra.texi
+++ b/doc/emacs/picture-xtra.texi
@@ -53,7 +53,7 @@ Additional extensions to Picture mode can be found in
 @menu
 * Basic Picture::         Basic concepts and simple commands of Picture Mode.
 * Insert in Picture::     Controlling direction of cursor motion
-                            after ``self-inserting'' characters.
+                            after self-inserting characters.
 * Tabs in Picture::       Various features for tab stops and indentation.
 * Rectangles in Picture:: Clearing and superimposing rectangles.
 @end menu
@@ -143,10 +143,10 @@ Picture}).
 @kindex C-c ' @r{(Picture mode)}
 @kindex C-c / @r{(Picture mode)}
 @kindex C-c \ @r{(Picture mode)}
-  Since ``self-inserting'' characters in Picture mode overwrite and move
+  Since self-inserting characters in Picture mode overwrite and move
 point, there is no essential restriction on how point should be moved.
 Normally point moves right, but you can specify any of the eight
-orthogonal or diagonal directions for motion after a ``self-inserting''
+orthogonal or diagonal directions for motion after a self-inserting
 character.  This is useful for drawing lines in the buffer.
 
 @table @kbd
@@ -185,7 +185,7 @@ Move down and right (``southeast'') after insertion
 @findex picture-motion-reverse
   Two motion commands move based on the current Picture insertion
 direction.  The command @kbd{C-c C-f} (@code{picture-motion}) moves in the
-same direction as motion after ``insertion'' currently does, while @kbd{C-c
+same direction as motion after insertion currently does, while @kbd{C-c
 C-b} (@code{picture-motion-reverse}) moves in the opposite direction.
 
 @node Tabs in Picture
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi
index ea8f82f..1f2c8b1 100644
--- a/doc/emacs/programs.texi
+++ b/doc/emacs/programs.texi
@@ -741,10 +741,10 @@ because of the parentheses.
   The following commands move over groupings delimited by parentheses
 (or whatever else serves as delimiters in the language you are working
 with).  They ignore strings and comments, including any parentheses
-within them, and also ignore parentheses that are ``quoted'' with an
+within them, and also ignore parentheses that are quoted with an
 escape character.  These commands are mainly intended for editing
 programs, but can be useful for editing any text containing
-parentheses.  They are referred to internally as ``list'' commands
+parentheses.  They are referred to internally as ``list commands''
 because in Lisp these groupings are lists.
 
   These commands assume that the starting point is not inside a string
@@ -766,7 +766,7 @@ Move down in parenthesis structure (@code{down-list}).
 @kindex C-M-p
 @findex forward-list
 @findex backward-list
-  The ``list'' commands @kbd{C-M-n} (@code{forward-list}) and
+  The list commands @kbd{C-M-n} (@code{forward-list}) and
 @kbd{C-M-p} (@code{backward-list}) move forward or backward over one
 (or @var{n}) parenthetical groupings.
 
@@ -940,7 +940,7 @@ you use it.
 
   When a region is active (@pxref{Mark}), @kbd{M-;} either adds
 comment delimiters to the region, or removes them.  If every line in
-the region is already a comment, it ``uncomments'' each of those lines
+the region is already a comment, it uncomments each of those lines
 by removing their comment delimiters.  Otherwise, it adds comment
 delimiters to enclose the text in the region.
 
@@ -1134,7 +1134,7 @@ You can also use @kbd{M-x info-lookup-file} to look for 
documentation
 for a file name.
 
   If you use @kbd{C-h S} in a major mode that does not support it,
-it asks you to specify the ``symbol help mode''.  You should enter
+it asks you to specify the symbol help mode.  You should enter
 a command such as @code{c-mode} that would select a major
 mode which @kbd{C-h S} does support.
 
@@ -1381,8 +1381,8 @@ see @ref{Top, Semantic,, semantic, Semantic}.
 see the Semantic Info manual, which is distributed with Emacs.
 @end iftex
 
-  Most of the ``language aware'' features in Emacs, such as Font Lock
-mode (@pxref{Font Lock}), rely on ``rules of thumb''@footnote{Regular
+  Most of the language-aware features in Emacs, such as Font Lock
+mode (@pxref{Font Lock}), rely on rules of address@hidden
 expressions and syntax tables.} that usually give good results but are
 never completely exact.  In contrast, the parsers used by Semantic
 have an exact understanding of programming language syntax.  This
@@ -1478,15 +1478,16 @@ support Outline minor mode (@pxref{Outline Mode}), 
which can be used
 with the Foldout package (@pxref{Foldout}).
 
 @ifinfo
-  The ``automatic typing'' features may be useful for writing programs.
+  The automatic typing features may be useful for writing programs.
 @xref{Top,,Autotyping, autotype, Autotyping}.
 @end ifinfo
 
 @findex prettify-symbols-mode
   Prettify Symbols mode is a buffer-local minor mode that replaces
-certain strings with more ``attractive'' versions for display
+certain strings with more attractive versions for display
 purposes.  For example, in Emacs Lisp mode, it replaces the string
-``lambda'' with the Greek lambda character.  You may wish to use this
address@hidden with the Greek lambda character @samp{λ}.  You may wish
+to use this
 in non-programming modes as well.  You can customize the mode by
 adding more entries to @code{prettify-symbols-alist}.  There is also a
 global version, @code{global-prettify-symbols-mode}, which enables the
@@ -1600,7 +1601,7 @@ Move point to the end of the innermost C statement or 
sentence; like
   In C mode and related modes, certain printing characters are
 @dfn{electric}---in addition to inserting themselves, they also
 reindent the current line, and optionally also insert newlines.  The
-``electric'' characters are @address@hidden, @address@hidden, @kbd{:}, @kbd{#},
+electric characters are @address@hidden, @address@hidden, @kbd{:}, @kbd{#},
 @kbd{;}, @kbd{,}, @kbd{<}, @kbd{>}, @kbd{/}, @kbd{*}, @kbd{(}, and
 @kbd{)}.
 
@@ -1797,7 +1798,7 @@ it work.
 Hide-ifdef minor mode hides selected code within @samp{#if} and
 @samp{#ifdef} preprocessor blocks.  If you change the variable
 @code{hide-ifdef-shadow} to @code{t}, Hide-ifdef minor mode
-``shadows'' preprocessor blocks by displaying them with a less
+shadows preprocessor blocks by displaying them with a less
 prominent face, instead of hiding them entirely.  See the
 documentation string of @code{hide-ifdef-mode} for more information.
 
@@ -1805,7 +1806,7 @@ documentation string of @code{hide-ifdef-mode} for more 
information.
 @cindex related files
 @findex ff-find-related-file
 @vindex ff-related-file-alist
-Find a file ``related'' in a special way to the file visited by the
+Find a file related in a special way to the file visited by the
 current buffer.  Typically this will be the header file corresponding
 to a C/C++ source file, or vice versa.  The variable
 @code{ff-related-file-alist} specifies how to compute related file
diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi
index fd48f34..d8841ca 100644
--- a/doc/emacs/regs.texi
+++ b/doc/emacs/regs.texi
@@ -32,7 +32,7 @@ Display a description of what register @var{r} contains.
 @vindex register-preview-delay
 @cindex preview of registers
   All of the commands that prompt for a register will display a
-``preview'' window that lists the existing registers (if there are
+preview window that lists the existing registers (if there are
 any) after a short delay.  To change the length of the delay,
 customize @code{register-preview-delay}.  To prevent this display, set
 that option to @code{nil}.  You can explicitly request a preview
@@ -121,7 +121,7 @@ reactivates the mark where it was last set.  The mark is 
deactivated
 at the end of this command.  @xref{Mark}.  @kbd{C-u C-x r s @var{r}},
 the same command with a prefix argument, copies the text into register
 @var{r} and deletes the text from the buffer as well; you can think of
-this as ``moving'' the region text into the register.
+this as moving the region text into the register.
 
 @findex append-to-register
 @findex prepend-to-register
@@ -285,7 +285,7 @@ restore a frameset.)
   @dfn{Bookmarks} are somewhat like registers in that they record
 positions you can jump to.  Unlike registers, they have long names, and
 they persist automatically from one Emacs session to the next.  The
-prototypical use of bookmarks is to record ``where you were reading'' in
+prototypical use of bookmarks is to record where you were reading in
 various files.
 
 @table @kbd
diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi
index 6cad280..6e2a60b 100644
--- a/doc/emacs/rmail.texi
+++ b/doc/emacs/rmail.texi
@@ -82,7 +82,7 @@ file after merging new mail from an inbox file (@pxref{Rmail 
Inbox}).
   You can exit Rmail with @kbd{q} (@code{rmail-quit}); this expunges
 and saves the Rmail file, then buries the Rmail buffer as well as its
 summary buffer, if present (@pxref{Rmail Summary}).  But there is no
-need to ``exit'' formally.  If you switch from Rmail to editing in
+need to exit formally.  If you switch from Rmail to editing in
 other buffers, and never switch back, you have exited.  Just make sure
 to save the Rmail file eventually (like any other file you have
 changed).  @kbd{C-x s} is a suitable way to do this (@pxref{Save
@@ -794,7 +794,7 @@ message as the text, and a subject of the form 
@address@hidden:
 @var{subject}]}, where @var{from} and @var{subject} are the sender and
 subject of the original message.  All you have to do is fill in the
 recipients and send.  When you forward a message, recipients get a
-message which is ``from'' you, and which has the original message in
+message which is from you, and which has the original message in
 its contents.
 
 @vindex rmail-enable-mime-composing
@@ -817,7 +817,7 @@ following the current one.
 
 @findex rmail-resend
   @dfn{Resending} is an alternative similar to forwarding; the
-difference is that resending sends a message that is ``from'' the
+difference is that resending sends a message that is from the
 original sender, just as it reached you---with a few added header fields
 (@samp{Resent-From} and @samp{Resent-To}) to indicate that it came via
 you.  To resend a message in Rmail, use @kbd{C-u f}.  (@kbd{f} runs
@@ -1213,14 +1213,14 @@ Toggle between @acronym{MIME} display and raw message
 immediately after its tagline, as part of the Rmail buffer, while
 @acronym{MIME} parts of other types are represented only by their
 taglines, with their actual contents hidden.  In either case, you can
-toggle a @acronym{MIME} part between its ``displayed'' and ``hidden''
+toggle a @acronym{MIME} part between its displayed and hidden
 states by typing @key{RET} anywhere in the part---or anywhere in its
 tagline (except for buttons for other actions, if there are any).  Type
 @key{RET} (or click with the mouse) to activate a tagline button, and
 @key{TAB} to cycle point between tagline buttons.
 
   The @kbd{v} (@code{rmail-mime}) command toggles between the default
address@hidden display described above, and a ``raw'' display showing
address@hidden display described above, and a raw display showing
 the undecoded @acronym{MIME} data.  With a prefix argument, this
 command toggles the display of only an entity at point.
 
@@ -1372,8 +1372,8 @@ which applies the code when displaying the text.
 your Rmail file (@pxref{Rmail Inbox}).  When loaded for the first time,
 Rmail attempts to locate the @code{movemail} program and determine its
 version.  There are two versions of the @code{movemail} program: the
-native one, shipped with GNU Emacs (the ``emacs version'') and the one
-included in GNU mailutils (the ``mailutils version'',
+native one, shipped with GNU Emacs (the Emacs version) and the one
+included in GNU mailutils (the mailutils version,
 @pxref{movemail,,,mailutils,GNU mailutils}).  They support the same
 command line syntax and the same basic subset of options.  However, the
 Mailutils version offers additional features.
@@ -1489,7 +1489,7 @@ versions of POP.
 @cindex POP mailboxes
   No matter which flavor of @code{movemail} you use, you can specify
 a POP inbox by using a POP @dfn{URL} (@pxref{Movemail}).  A POP
address@hidden is a ``file name'' of the form
address@hidden is of the form
 @samp{pop://@var{username}@@@var{hostname}}, where
 @var{hostname} is the host name or IP address of the remote mail
 server and @var{username} is the user name on that server.
diff --git a/doc/emacs/screen.texi b/doc/emacs/screen.texi
index 920aa08..37e0e7e 100644
--- a/doc/emacs/screen.texi
+++ b/doc/emacs/screen.texi
@@ -8,7 +8,7 @@
 @cindex frame
 
   On a graphical display, such as on GNU/Linux using the X Window
-System, Emacs occupies a ``graphical window''.  On a text terminal,
+System, Emacs occupies a graphical window.  On a text terminal,
 Emacs occupies the entire terminal screen.  We will use the term
 @dfn{frame} to mean a graphical window or terminal screen occupied by
 Emacs.  Emacs behaves very similarly on both kinds of frames.  It
@@ -27,7 +27,7 @@ information when Emacs asks for it.
 above the echo area, is called @dfn{the window}.  Henceforth in this
 manual, we will use the word ``window'' in this sense.  Graphical
 display systems commonly use the word ``window'' with a different
-meaning; but, as stated above, we refer to those ``graphical windows''
+meaning; but, as stated above, we refer to those graphical windows
 as ``frames''.
 
   An Emacs window is where the @dfn{buffer}---the text you are
@@ -206,11 +206,11 @@ terminal output.  Furthermore, if you are using an input 
method,
 string is displayed, that indicates a nontrivial end-of-line
 convention for encoding a file.  Usually, lines of text are separated
 by @dfn{newline characters} in a file, but two other conventions are
-sometimes used.  The MS-DOS convention uses a ``carriage-return''
-character followed by a ``linefeed'' character; when editing such
+sometimes used.  The MS-DOS convention uses a carriage-return
+character followed by a linefeed character; when editing such
 files, the colon changes to either a backslash (@samp{\}) or
 @samp{(DOS)}, depending on the operating system.  Another convention,
-employed by older Macintosh systems, uses a ``carriage-return''
+employed by older Macintosh systems, uses a carriage-return
 character instead of a newline; when editing such files, the colon
 changes to either a forward slash (@samp{/}) or @samp{(Mac)}.  On some
 systems, Emacs displays @samp{(Unix)} instead of the colon for files
@@ -219,7 +219,7 @@ that use newline as the line separator.
   The next element on the mode line is the string indicated by
 @var{ch}.  This shows two dashes (@samp{--}) if the buffer displayed
 in the window has the same contents as the corresponding file on the
-disk; i.e., if the buffer is ``unmodified''.  If the buffer is
+disk; i.e., if the buffer is unmodified.  If the buffer is
 modified, it shows two stars (@samp{**}).  For a read-only buffer, it
 shows @samp{%*} if the buffer is modified, and @samp{%%} otherwise.
 
diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi
index a0dfe22..ae275d1 100644
--- a/doc/emacs/search.texi
+++ b/doc/emacs/search.texi
@@ -24,7 +24,7 @@ thing, but search for patterns instead of fixed strings.
 * Symbol Search::             Search for a source code symbol.
 * Regexp Search::             Search for match for a regexp.
 * Regexps::                   Syntax of regular expressions.
-* Regexp Backslash::          Regular expression constructs starting with '\'.
+* Regexp Backslash::          Regular expression constructs starting with `\'.
 * Regexp Example::            A complex regular expression explained.
 * Search Case::               To ignore case while searching, or not.
 * Replace::                   Search, and replace some or all matches.
@@ -146,8 +146,8 @@ you don't like this feature, you can disable it by setting
 
   After exiting a search, you can search for the same string again by
 typing just @kbd{C-s C-s}.  The first @kbd{C-s} is the key that
-invokes incremental search, and the second @kbd{C-s} means ``search
-again''.  Similarly, @kbd{C-r C-r} searches backward for the last
+invokes incremental search, and the second @kbd{C-s} means to search
+again.  Similarly, @kbd{C-r C-r} searches backward for the last
 search string.  In determining the last search string, it doesn't
 matter whether the string was searched for with @kbd{C-s} or
 @kbd{C-r}.
@@ -423,7 +423,7 @@ because that is used to display the minibuffer.
 
 If an incremental search fails in the minibuffer, it tries searching
 the minibuffer history.  @xref{Minibuffer History}.  You can visualize
-the minibuffer and its history as a series of ``pages'', with the
+the minibuffer and its history as a series of pages, with the
 earliest history element on the first page and the current minibuffer
 on the last page.  A forward search, @kbd{C-s}, searches forward to
 later pages; a reverse search, @kbd{C-r}, searches backwards to
@@ -893,11 +893,11 @@ This last application is not a consequence of the idea of 
a
 parenthetical grouping; it is a separate feature that is assigned as a
 second meaning to the same @samp{\( @dots{} \)} construct.  In practice
 there is usually no conflict between the two meanings; when there is
-a conflict, you can use a ``shy'' group.
+a conflict, you can use a shy group.
 
 @item \(?: @dots{} \)
 @cindex shy group, in regexp
-specifies a ``shy'' group that does not record the matched substring;
+specifies a shy group that does not record the matched substring;
 you can't refer back to it with @address@hidden (see below).  This is
 useful in mechanically combining regular expressions, so that you can
 add groups for syntactic purposes without interfering with the
diff --git a/doc/emacs/sending.texi b/doc/emacs/sending.texi
index 49a4aa7..c5ca73b 100644
--- a/doc/emacs/sending.texi
+++ b/doc/emacs/sending.texi
@@ -136,7 +136,7 @@ Use both address and full name, as in:@*
 Use both address and full name, as in:@*
 @samp{Elvis Parsley <king@@grassland.com>}.
 @item any other value
-Use @code{angles} normally.  But if the address must be ``quoted'' to
+Use @code{angles} normally.  But if the address must be quoted to
 remain syntactically valid under the @code{angles} format but not
 under the @code{parens} format, use @code{parens} instead.  This is
 the default.
@@ -159,7 +159,7 @@ directed at them.
 
 @item BCC
 Additional mailing address(es) to send the message to, which should
-not appear in the header of the message actually sent.  ``BCC'' stands
+not appear in the header of the message actually sent.  @samp{BCC} stands
 for @dfn{blind carbon copies}.
 
 @item FCC
@@ -276,7 +276,7 @@ of the address, such as the person's full name.  Emacs puts 
them in if
 they are needed.  For instance, it inserts the above address as
 @samp{"John Q. Smith" <none@@example.com>}.
 
-  Emacs also recognizes ``include'' commands in @file{.mailrc}.  They
+  Emacs also recognizes include commands in @file{.mailrc}.  They
 look like this:
 
 @example
@@ -341,7 +341,7 @@ Send the message, and leave the mail buffer selected 
(@code{message-send}).
 @vindex message-kill-buffer-on-exit
   The usual command to send a message is @kbd{C-c C-c}
 (@code{mail-send-and-exit}).  This sends the message and then
-``buries'' the mail buffer, putting it at the lowest priority for
+buries the mail buffer, putting it at the lowest priority for
 reselection.  If you want it to kill the mail buffer instead, change
 the variable @code{message-kill-buffer-on-exit} to @code{t}.
 
@@ -648,7 +648,7 @@ it all.  Whether or not this is true, it at least amuses 
some people.
 
 @findex fortune-to-signature
 @cindex fortune cookies
-  You can use the @code{fortune} program to put a ``fortune cookie''
+  You can use the @code{fortune} program to put a fortune cookie
 message into outgoing mail.  To do this, add
 @code{fortune-to-signature} to @code{mail-setup-hook}:
 
diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi
index 389ef5e..7f3afd7 100644
--- a/doc/emacs/text.texi
+++ b/doc/emacs/text.texi
@@ -1,3 +1,4 @@
address@hidden -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
 @c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
@@ -33,7 +34,7 @@ publish them in many formats.
 @cindex mode, XML
 @cindex mode, nXML
 @findex nxml-mode
-  Emacs has other major modes for text which contains ``embedded''
+  Emacs has other major modes for text which contains embedded
 commands, such as @TeX{} and @LaTeX{} (@pxref{TeX Mode}); HTML and
 SGML (@pxref{HTML Mode}); XML
 @ifinfo
@@ -45,9 +46,8 @@ SGML (@pxref{HTML Mode}); XML
 and Groff and Nroff (@pxref{Nroff Mode}).
 
 @cindex ASCII art
-  If you need to edit pictures made out of text characters (commonly
-referred to as ``ASCII art''), use Picture mode, a special major mode
-for editing such pictures.
+  If you need to edit ASCII art pictures made out of text characters,
+use Picture mode, a special major mode for editing such pictures.
 @iftex
 @xref{Picture Mode,,, emacs-xtra, Specialized Emacs Features}.
 @end iftex
@@ -60,7 +60,7 @@ for editing such pictures.
 @cindex templates
 @cindex autotyping
 @cindex automatic typing
-  The ``automatic typing'' features may be useful when writing text.
+  The automatic typing features may be useful when writing text.
 @inforef{Top,The Autotype Manual,autotype}.
 @end ifinfo
 
@@ -78,7 +78,7 @@ for editing such pictures.
 * TeX Mode::            Editing TeX and LaTeX files.
 * HTML Mode::           Editing HTML and SGML files.
 * Nroff Mode::          Editing input to the nroff formatter.
-* Enriched Text::       Editing text ``enriched'' with fonts, colors, etc.
+* Enriched Text::       Editing text enriched with fonts, colors, etc.
 * Text Based Tables::   Commands for editing text-based tables.
 * Two-Column::          Splitting text columns into separate windows.
 @end menu
@@ -683,7 +683,7 @@ delimiter on each line.
 prefix for each paragraph automatically.  This command divides the
 region into paragraphs, treating every change in the amount of
 indentation as the start of a new paragraph, and fills each of these
-paragraphs.  Thus, all the lines in one ``paragraph'' have the same
+paragraphs.  Thus, all the lines in one paragraph have the same
 amount of indentation.  That indentation serves as the fill prefix for
 that paragraph.
 
@@ -1073,7 +1073,7 @@ revealing parts of the buffer, based on the outline 
structure.  These
 commands are not undoable; their effects are simply not recorded by
 the undo mechanism, so you can undo right past them (@pxref{Undo}).
 
-  Many of these commands act on the ``current'' heading line.  If
+  Many of these commands act on the current heading line.  If
 point is on a heading line, that is the current heading line; if point
 is on a body line, the current heading line is the nearest preceding
 header line.
@@ -1205,7 +1205,7 @@ buffers.
 
 @cindex folding editing
   The Foldout package extends Outline mode and Outline minor mode with
-``folding'' commands.  The idea of folding is that you zoom in on a
+folding commands.  The idea of folding is that you zoom in on a
 nested portion of the outline, while hiding its relatives at higher
 levels.
 
@@ -1235,7 +1235,7 @@ show-subtree}), by specifying a zero argument: @kbd{M-0 
C-c C-z}.
 
   While you're zoomed in, you can still use Outline mode's exposure and
 hiding functions without disturbing Foldout.  Also, since the buffer is
-narrowed, ``global'' editing actions will only affect text under the
+narrowed, global editing actions will only affect text under the
 zoomed-in heading.  This is useful for restricting changes to a
 particular chapter or section of your document.
 
@@ -1967,7 +1967,7 @@ used as a cheap preview (@code{sgml-tags-invisible}).
   The major mode for editing XML documents is called nXML mode.  This
 is a powerful major mode that can recognize many existing XML schema
 and use them to provide completion of XML elements via
address@hidden@key{TAB}}, as well as ``on-the-fly'' XML
address@hidden@key{TAB}}, as well as on-the-fly XML
 validation with error highlighting.  To enable nXML mode in an
 existing buffer, type @kbd{M-x nxml-mode}, or, equivalently, @kbd{M-x
 xml-mode}.  Emacs uses nXML mode for files which have the extension
@@ -2048,7 +2048,7 @@ number (the header level).
 @cindex text/enriched MIME format
 
   Enriched mode is a minor mode for editing formatted text files in a
-WYSIWYG (``what you see is what you get'') fashion.  When Enriched
+WYSIWYG (What You See Is What You Get) fashion.  When Enriched
 mode is enabled, you can apply various formatting properties to the
 text in the buffer, such as fonts and colors; upon saving the buffer,
 those properties are saved together with the text, using the MIME
@@ -2072,7 +2072,7 @@ serves as an example of the features of Enriched mode.
 * Enriched Indentation::    Changing the left and right margins.
 * Enriched Justification::  Centering, setting text flush with the
                               left or right margin, etc.
-* Enriched Properties::     The ``special'' text properties submenu.
+* Enriched Properties::     The ``special text properties'' submenu.
 @end menu
 
 @node Enriched Mode
@@ -2832,8 +2832,8 @@ puts the text after the separator into the right-hand 
buffer, and
 deletes the separator.  Lines that don't have the column separator at
 the proper place remain unsplit; they stay in the left-hand buffer, and
 the right-hand buffer gets an empty line to correspond.  (This is the
-way to write a line that ``spans both columns while in two-column
-mode'': write it in the left-hand buffer, and put an empty line in the
+way to write a line that spans both columns while in two-column
+mode: write it in the left-hand buffer, and put an empty line in the
 right-hand buffer.)
 
 @kindex F2 RET
diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi
index 2233376..087681b 100644
--- a/doc/emacs/trouble.texi
+++ b/doc/emacs/trouble.texi
@@ -78,8 +78,8 @@ actually executed as a command if you type it while Emacs is 
waiting for
 input.  In that case, the command it runs is @code{keyboard-quit}.
 
   On a text terminal, if you quit with @kbd{C-g} a second time before
-the first @kbd{C-g} is recognized, you activate the ``emergency
-escape'' feature and return to the shell.  @xref{Emergency Escape}.
+the first @kbd{C-g} is recognized, you activate the emergency-escape
+feature and return to the shell.  @xref{Emergency Escape}.
 
 @cindex NFS and quitting
   There are some situations where you cannot quit.  When Emacs is
@@ -118,7 +118,7 @@ it executes as an ordinary command, and Emacs doesn't 
notice it until
 it is ready for the next command.
 
 @findex top-level
-  The command @kbd{M-x top-level} is equivalent to ``enough''
+  The command @kbd{M-x top-level} is equivalent to enough
 @kbd{C-]} commands to get you out of all the levels of recursive edits
 that you are in; it also exits the minibuffer if it is active.
 @kbd{C-]} gets you out one level at a time, but @kbd{M-x top-level}
@@ -507,7 +507,7 @@ by the Emacs maintainers, are shown by @kbd{M-x 
debbugs-gnu-usertags}.
 The @samp{bug-gnu-emacs} mailing list (also available as the newsgroup
 @samp{gnu.emacs.bug}).  You can read the list archives at
 @url{http://lists.gnu.org/mailman/listinfo/bug-gnu-emacs}.  This list
-works as a ``mirror'' of the Emacs bug reports and follow-up messages
+works as a mirror of the Emacs bug reports and follow-up messages
 which are sent to the bug tracker.  It also contains old bug reports
 from before the bug tracker was introduced (in early 2008).
 
@@ -538,10 +538,10 @@ not feel obliged to read this list before reporting a bug.
 @cindex bug criteria
 @cindex what constitutes an Emacs bug
 
-  If Emacs accesses an invalid memory location (``segmentation
-fault''), or exits with an operating system error message that
-indicates a problem in the program (as opposed to something like
-``disk full''), then it is certainly a bug.
+  If Emacs accesses an invalid memory location (a.k.a.@:
+``segmentation fault'') or exits with an operating system error
+message that indicates a problem in the program (as opposed to
+something like ``disk full''), then it is certainly a bug.
 
   If the Emacs display does not correspond properly to the contents of
 the buffer, then it is a bug.  But you should check that features like
@@ -618,7 +618,7 @@ large file, and Emacs displayed @samp{I feel pretty 
today}.''  This is
 what we mean by ``guessing explanations''.  The problem might be due
 to the fact that there is a @samp{z} in the file name.  If this is so,
 then when we got your report, we would try out the problem with some
-``large file'', probably with no @samp{z} in its name, and not see any
+large file, probably with no @samp{z} in its name, and not see any
 problem.  There is no way we could guess that we should try visiting a
 file with a @samp{z} in its name.
 
@@ -1345,16 +1345,16 @@ Emacs has additional style and coding conventions:
 @item
 @ifset WWW_GNU_ORG
 @ifhtml
-the ``Tips'' Appendix in the Emacs Lisp Reference
+the ``Tips and Conventions'' Appendix in the Emacs Lisp Reference
 @url{http://www.gnu.org/software/emacs/manual/html_node/elisp/Tips.html}.
 @end ifhtml
 @ifnothtml
address@hidden, ``Tips'' Appendix in the Emacs Lisp Reference, Tips
address@hidden, ``Tips and Conventions'' Appendix in the Emacs Lisp Reference, 
Tips
 Appendix, elisp, Emacs Lisp Reference}.
 @end ifnothtml
 @end ifset
 @ifclear WWW_GNU_ORG
address@hidden, ``Tips'' Appendix in the Emacs Lisp Reference, Tips
address@hidden, ``Tips and Conventions'' Appendix in the Emacs Lisp Reference, 
Tips
 Appendix, elisp, Emacs Lisp Reference}.
 @end ifclear
 
diff --git a/doc/emacs/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi
index 8dccbf9..3eb9b03 100644
--- a/doc/emacs/vc1-xtra.texi
+++ b/doc/emacs/vc1-xtra.texi
@@ -430,7 +430,7 @@ that @kbd{C-x v ~} saves old versions to
 @end ifnottex
 except for the additional dot (@samp{.}) after the version.  The
 relevant VC commands can use both kinds of version backups.  The main
-difference is that the ``manual'' version backups made by @kbd{C-x v
+difference is that the manual version backups made by @kbd{C-x v
 ~} are not deleted automatically when you commit.
 
 @cindex locking (CVS)
diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi
index 24cc946..d844f3e 100644
--- a/doc/emacs/windows.texi
+++ b/doc/emacs/windows.texi
@@ -334,7 +334,7 @@ heights of all the windows in the selected frame.
 @node Displaying Buffers
 @section Displaying a Buffer in a Window
 
-  It is a common Emacs operation to display or ``pop up'' some buffer
+  It is a common Emacs operation to display or pop up some buffer
 in response to a user command.  There are several different ways in
 which commands do this.
 
@@ -345,7 +345,7 @@ usually work by calling @code{switch-to-buffer} internally
 (@pxref{Select Buffer}).
 
 @findex display-buffer
-  Some commands try to display ``intelligently'', trying not to take
+  Some commands try to display intelligently, trying not to take
 over the selected window, e.g., by splitting off a new window and
 displaying the desired buffer there.  Such commands, which include the
 various help commands (@pxref{Help}), work by calling
@@ -398,7 +398,7 @@ variables are @code{nil}, so this step is skipped.
 
 @item
 Otherwise, if the buffer is already displayed in an existing window,
-``reuse'' that window.  Normally, only windows on the selected frame
+reuse that window.  Normally, only windows on the selected frame
 are considered, but windows on other frames are also reusable if you
 change @code{pop-up-frames} (see below) to @code{t}.
 
@@ -444,7 +444,7 @@ and display the buffer there.
 @cindex window configuration changes, undoing
   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 you can ``undo'' them.  You can toggle Winner mode
+windows), so that you can undo them.  You can toggle Winner mode
 with @kbd{M-x winner-mode}, or by customizing the variable
 @code{winner-mode}.  When the mode is enabled, @kbd{C-c left}
 (@code{winner-undo}) undoes the last window configuration change.  If
@@ -462,7 +462,7 @@ buffer.  @xref{Follow Mode}.
   The Windmove package defines commands for moving directionally
 between neighboring windows in a frame.  @kbd{M-x windmove-right}
 selects the window immediately to the right of the currently selected
-one, and similarly for the ``left'', ``up'', and ``down''
+one, and similarly for the left, up, and down
 counterparts.  @kbd{M-x windmove-default-keybindings} binds these
 commands to @kbd{S-right} etc.; doing so disables shift selection for
 those keys (@pxref{Shift Selection}).
diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi
index 25552d1..afd2766 100644
--- a/doc/emacs/xresources.texi
+++ b/doc/emacs/xresources.texi
@@ -12,10 +12,10 @@ resources, as is usual for programs that use X.
 graphical widgets, such as the menu-bar, scroll-bar, and dialog boxes,
 is determined by
 @ifnottex
-``GTK resources'', which we will also describe.
+GTK resources, which we will also describe.
 @end ifnottex
 @iftex
-``GTK resources''.
+GTK resources.
 @end iftex
 When Emacs is built without GTK+ support, the appearance of these
 widgets is determined by additional X resources.
@@ -238,8 +238,8 @@ this way.
 
 @ifnottex
 @item @code{privateColormap} (class @code{PrivateColormap})
-If @samp{on}, use a private color map, in the case where the ``default
-visual'' of class PseudoColor and Emacs is using it.
+If @samp{on}, use a private color map, in the case where the default
+visual of class PseudoColor and Emacs is using it.
 
 @item @code{reverseVideo} (class @code{ReverseVideo})
 Switch foreground and background default colors if @samp{on}, use colors as
@@ -677,7 +677,7 @@ class @code{GtkDialog}.  For file selection, Emacs uses a 
widget named
 @code{emacs-filedialog}, of class @code{GtkFileSelection}.
 
   Because the widgets for pop-up menus and dialogs are free-standing
-windows and not ``contained'' in the @code{Emacs} widget, their GTK+
+windows and not contained in the @code{Emacs} widget, their GTK+
 absolute names do not start with @samp{Emacs}.  To customize these
 widgets, use wildcards like this:
 
@@ -747,8 +747,8 @@ This is the default state for widgets.
 @item ACTIVE
 This is the state for a widget that is ready to do something.  It is
 also for the trough of a scroll bar, i.e., @code{bg[ACTIVE] = "red"}
-sets the scroll bar trough to red.  Buttons that have been pressed but
-not released yet (``armed'') are in this state.
+sets the scroll bar trough to red.  Buttons that have been armed
+(pressed but not released yet) are in this state.
 @item PRELIGHT
 This is the state for a widget that can be manipulated, when the mouse
 pointer is over it---for example when the mouse is over the thumb in
diff --git a/doc/lispintro/emacs-lisp-intro.texi 
b/doc/lispintro/emacs-lisp-intro.texi
index d353241..22e50e9 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -1,4 +1,4 @@
-\input texinfo                                      @c -*-texinfo-*-
+\input texinfo                       @c -*- mode: texinfo; coding: utf-8 -*-
 @comment %**start of header
 @setfilename ../../info/eintr.info
 @c setfilename emacs-lisp-intro.info
@@ -808,7 +808,7 @@ In addition, I have written several programs as extended 
examples.
 Although these are examples, the programs are real.  I use them.
 Other people use them.  You may use them.  Beyond the fragments of
 programs used for illustrations, there is very little in here that is
-``just for teaching purposes''; what you see is used.  This is a great
+just for teaching purposes; what you see is used.  This is a great
 advantage of Emacs Lisp: it is easy to learn to use it for work.
 @end ignore
 
@@ -854,12 +854,12 @@ information so you won't be surprised later when the 
additional
 information is formally introduced.)
 
 When you read this text, you are not expected to learn everything the
-first time.  Frequently, you need only make, as it were, a ``nodding
-acquaintance'' with some of the items mentioned.  My hope is that I have
+first time.  Frequently, you need make only a nodding
+acquaintance with some of the items mentioned.  My hope is that I have
 structured the text and given you enough hints that you will be alert to
 what is important, and concentrate on it.
 
-You will need to ``dive into'' some paragraphs; there is no other way
+You will need to dive into some paragraphs; there is no other way
 to read them.  But I have tried to keep down the number of such
 paragraphs.  This book is intended as an approachable hill, rather than
 as a daunting mountain.
@@ -928,7 +928,7 @@ along with the key that is labeled @key{ALT} and, at the 
same time,
 press the @key{\} key.
 
 In addition to typing a lone keychord, you can prefix what you type
-with @kbd{C-u}, which is called the ``universal argument''.  The
+with @kbd{C-u}, which is called the @dfn{universal argument}.  The
 @kbd{C-u} keychord passes an argument to the subsequent command.
 Thus, to indent a region of plain text by 6 spaces, mark the region,
 and then type @address@hidden 6 M-C-\}}.  (If you do not specify a number,
@@ -1265,9 +1265,9 @@ hand parenthesis of the following list and then type 
@kbd{C-x C-e}:
 
 @c use code for the number four, not samp.
 @noindent
-You will see the number @code{4} appear in the echo area.  (In the
-jargon, what you have just done is ``evaluate the list.''  The echo area
-is the line at the bottom of the screen that displays or ``echoes''
+You will see the number @code{4} appear in the echo area.  (What
+you have just done is evaluate the list.  The echo area
+is the line at the bottom of the screen that displays or echoes
 text.)  Now try the same thing with a quoted list:  place the cursor
 right after the following list and type @kbd{C-x C-e}:
 
@@ -1284,7 +1284,7 @@ In both cases, what you are doing is giving a command to 
the program
 inside of GNU Emacs called the @dfn{Lisp interpreter}---giving the
 interpreter a command to evaluate the expression.  The name of the Lisp
 interpreter comes from the word for the task done by a human who comes
-up with the meaning of an expression---who ``interprets'' it.
+up with the meaning of an expression---who interprets it.
 
 You can also evaluate an atom that is not part of a list---one that is
 not surrounded by parentheses; again, the Lisp interpreter translates
@@ -1307,7 +1307,7 @@ signposts to a traveler in a strange country; deciphering 
them can be
 hard, but once understood, they can point the way.
 
 The error message is generated by a built-in GNU Emacs debugger.  We
-will ``enter the debugger''.  You get out of the debugger by typing @code{q}.
+will enter the debugger.  You get out of the debugger by typing @code{q}.
 
 What we will do is evaluate a list that is not quoted and does not
 have a meaningful command as its first element.  Here is a list almost
@@ -1405,7 +1405,7 @@ definition of any set of instructions for the computer to 
carry out.
 The slightly odd word, @samp{void-function}, is designed to cover the
 way Emacs Lisp is implemented, which is that when a symbol does not
 have a function definition attached to it, the place that should
-contain the instructions is ``void''.
+contain the instructions is void.
 
 On the other hand, since we were able to add 2 plus 2 successfully, by
 evaluating @code{(+ 2 2)}, we can infer that the symbol @code{+} must
@@ -1596,16 +1596,15 @@ instructions it found in the function definition, or 
perhaps it will
 give up on that function and produce an error message.  (The interpreter
 may also find itself tossed, so to speak, to a different function or it
 may attempt to repeat continually what it is doing for ever and ever in
-what is called an ``infinite loop''.  These actions are less common; and
+an infinite loop.  These actions are less common; and
 we can ignore them.)  Most frequently, the interpreter returns a value.
 
 @cindex @samp{side effect} defined
 At the same time the interpreter returns a value, it may do something
 else as well, such as move a cursor or copy a file; this other kind of
 action is called a @dfn{side effect}.  Actions that we humans think are
-important, such as printing results, are often ``side effects'' to the
-Lisp interpreter.  The jargon can sound peculiar, but it turns out that
-it is fairly easy to learn to use side effects.
+important, such as printing results, are often side effects to the
+Lisp interpreter.  It is fairly easy to learn to use side effects.
 
 In summary, evaluating a symbolic expression most commonly causes the
 Lisp interpreter to return a value and perhaps carry out a side effect;
@@ -1642,8 +1641,8 @@ evaluate, the interpreter prints that value in the echo 
area.
 Now it is easy to understand the name of the command invoked by the
 keystrokes @kbd{C-x C-e}: the name is @code{eval-last-sexp}.  The
 letters @code{sexp} are an abbreviation for ``symbolic expression'', and
address@hidden is an abbreviation for ``evaluate''.  The command means
-``evaluate last symbolic expression''.
address@hidden is an abbreviation for ``evaluate''.  The command
+evaluates the last symbolic expression.
 
 As an experiment, you can try evaluating the expression by putting the
 cursor at the beginning of the next line immediately following the
@@ -1948,8 +1947,9 @@ following:
 @noindent
 The value produced by evaluating this expression is @code{"abcdef"}.
 
address@hidden substring
 A function such as @code{substring} uses both a string and numbers as
-arguments.  The function returns a part of the string, a substring of
+arguments.  The function returns a part of the string, a @dfn{substring} of
 the first argument.  This function takes three arguments.  Its first
 argument is the string of characters, the second and third arguments
 are numbers that indicate the beginning (inclusive) and end
@@ -1973,7 +1973,7 @@ Note that the string passed to @code{substring} is a 
single atom even
 though it is made up of several words separated by spaces.  Lisp counts
 everything between the two quotation marks as part of the string,
 including the spaces.  You can think of the @code{substring} function as
-a kind of ``atom smasher'' since it takes an otherwise indivisible atom
+a kind of atom smasher since it takes an otherwise indivisible atom
 and extracts a part.  However, @code{substring} is only able to extract
 a substring from an argument that is a string, not from another type of
 atom such as a number or symbol.
@@ -2403,7 +2403,7 @@ list.  This latter way of thinking is very common and in 
forthcoming
 chapters we shall come upon at least one symbol that has ``pointer'' as
 part of its name.  The name is chosen because the symbol has a value,
 specifically a list, attached to it; or, expressed another way,
-the symbol is set to ``point'' to the list.
+the symbol is set to point to the list.
 
 @node Counting
 @subsection Counting
@@ -2508,8 +2508,8 @@ of which the function is the first element.
 
 @item
 A function always returns a value when it is evaluated (unless it gets
-an error); in addition, it may also carry out some action called a
-``side effect''.  In many cases, a function's primary purpose is to
+an error); in addition, it may also carry out some action that is a
+side effect.  In many cases, a function's primary purpose is to
 create a side effect.
 @end itemize
 
@@ -2870,7 +2870,7 @@ there until the command finishes running).
 Also, we have just introduced another jargon term, the word @dfn{call}.
 When you evaluate a list in which the first symbol is a function, you
 are calling that function.  The use of the term comes from the notion of
-the function as an entity that can do something for you if you ``call''
+the function as an entity that can do something for you if you call
 it---just as a plumber is an entity who can fix a leak if you call him
 or her.
 
@@ -3156,7 +3156,7 @@ to evaluate this yet!
 
 @noindent
 The symbol @code{number}, specified in the function definition in the
-next section, is given or ``bound to'' the value 3 in the actual use of
+next section, is bound to the value 3 in the actual use of
 the function.  Note that although @code{number} was inside parentheses
 in the function definition, the argument passed to the
 @code{multiply-by-seven} function is not in parentheses.  The
@@ -3167,7 +3167,7 @@ definition begins.
 If you evaluate this example, you are likely to get an error message.
 (Go ahead, try it!)  This is because we have written the function
 definition, but not yet told the computer about the definition---we have
-not yet installed (or ``loaded'') the function definition in Emacs.
+not yet loaded the function definition in Emacs.
 Installing a function is the process that tells the Lisp interpreter the
 definition of the function.  Installation is described in the next
 section.
@@ -3257,8 +3257,8 @@ add the number to itself seven times instead of 
multiplying the number
 by seven.  It produces the same answer, but by a different path.  At
 the same time, we will add a comment to the code; a comment is text
 that the Lisp interpreter ignores, but that a human reader may find
-useful or enlightening.  The comment is that this is the ``second
-version''.
+useful or enlightening.  The comment is that this is the second
+version.
 
 @smallexample
 @group
@@ -3361,7 +3361,7 @@ it could not be used as an example of key binding.)
 (@xref{Keybindings, , Some Keybindings}, to learn how to bind a command
 to a key.)
 
-A prefix argument is passed to an interactive function by typing the
+A @dfn{prefix argument} is passed to an interactive function by typing the
 @key{META} key followed by a number, for example, @kbd{M-3 M-e}, or by
 typing @kbd{C-u} and then a number, for example, @kbd{C-u 3 M-e} (if you
 type @kbd{C-u} without a number, it defaults to 4).
@@ -3460,7 +3460,7 @@ is
 
 The first part of the argument to @code{interactive} is @samp{p}, with
 which you are already familiar.  This argument tells Emacs to
-interpret a ``prefix'', as a number to be passed to the function.  You
+interpret a prefix, as a number to be passed to the function.  You
 can specify a prefix either by typing @kbd{C-u} followed by a number
 or by typing @key{META} followed by a number.  The prefix is the
 number of specified characters.  Thus, if your prefix is three and the
@@ -3616,14 +3616,14 @@ Another way to think about @code{let} is that it is 
like a @code{setq}
 that is temporary and local.  The values set by @code{let} are
 automatically undone when the @code{let} is finished.  The setting
 only affects expressions that are inside the bounds of the @code{let}
-expression.  In computer science jargon, we would say ``the binding of
+expression.  In computer science jargon, we would say the binding of
 a symbol is visible only in functions called in the @code{let} form;
-in Emacs Lisp, scoping is dynamic, not lexical.''
+in Emacs Lisp, scoping is dynamic, not lexical.
 
 @code{let} can create more than one variable at once.  Also,
 @code{let} gives each variable it creates an initial value, either a
-value specified by you, or @code{nil}.  (In the jargon, this is called
-``binding the variable to the value''.)  After @code{let} has created
+value specified by you, or @code{nil}.  (In the jargon, this is
+binding the variable to the value.)  After @code{let} has created
 and bound the variables, it executes the code in the body of the
 @code{let}, and returns the value of the last expression in the body,
 as the value of the whole @code{let} expression.  (``Execute'' is a jargon
@@ -3790,8 +3790,8 @@ make decisions.  You can write function definitions 
without using
 included here.  It is used, for example, in the code for the
 function @code{beginning-of-buffer}.
 
-The basic idea behind an @code{if}, is that address@hidden a test is true,
address@hidden an expression is evaluated.''  If the test is not true, the
+The basic idea behind an @code{if}, is that @emph{if} a test is true,
address@hidden an expression is evaluated.  If the test is not true, the
 expression is not evaluated.  For example, you might make a decision
 such as, ``if it is warm and sunny, then go to the beach!''
 
@@ -3815,7 +3815,7 @@ argument is often called the @dfn{then-part}.
 
 Also, when an @code{if} expression is written, the true-or-false-test
 is usually written on the same line as the symbol @code{if}, but the
-action to carry out if the test is true, the ``then-part'', is written
+action to carry out if the test is true, the then-part, is written
 on the second and subsequent lines.  This makes the @code{if}
 expression easier to read.
 
@@ -4612,7 +4612,7 @@ file, you can use the @code{find-tag} function to jump to 
it.
 Lisp, and C, and it works with non-programming text as well.  For
 example, @code{find-tag} will jump to the various nodes in the
 Texinfo source file of this document.
-The @code{find-tag} function depends on ``tags tables'' that record
+The @code{find-tag} function depends on @dfn{tags tables} that record
 the locations of the functions, variables, and other items to which
 @code{find-tag} jumps.
 
@@ -4630,7 +4630,7 @@ screen.  To switch back to your current buffer, type 
@kbd{C-x b
 @cindex TAGS table, specifying
 @findex find-tag
 Depending on how the initial default values of your copy of Emacs are
-set, you may also need to specify the location of your ``tags table'',
+set, you may also need to specify the location of your tags table,
 which is a file called @file{TAGS}.  For example, if you are
 interested in Emacs sources, the tags table you will most likely want,
 if it has already been created for you, will be in a subdirectory of
@@ -4964,8 +4964,7 @@ current buffer to a specified buffer.
 The @code{append-to-buffer} command uses the
 @code{insert-buffer-substring} function to copy the region.
 @code{insert-buffer-substring} is described by its name: it takes a
-string of characters from part of a buffer, a ``substring'', and
-inserts them into another buffer.
+substring from a buffer, and inserts it into another buffer.
 
 Most of @code{append-to-buffer} is
 concerned with setting up the conditions for
@@ -5712,8 +5711,8 @@ then the buffer itself must be got.
 
 You can imagine yourself at a conference where an usher is wandering
 around holding a list with your name on it and looking for you: the
-usher is ``bound'' to your name, not to you; but when the usher finds
-you and takes your arm, the usher becomes ``bound'' to you.
+usher is bound to your name, not to you; but when the usher finds
+you and takes your arm, the usher becomes bound to you.
 
 @need 800
 In Lisp, you might describe this situation like this:
@@ -5764,8 +5763,7 @@ so the true-or-false-test looks like this:
 @noindent
 @code{not} is a function that returns true if its argument is false
 and false if its argument is true.  So if @code{(bufferp buffer)}
-returns true, the @code{not} expression returns false and vice versa:
-what is ``not true'' is false and what is ``not false'' is true.
+returns true, the @code{not} expression returns false and vice versa.
 
 Using this test, the @code{if} expression works as follows: when the
 value of the variable @code{buffer} is actually a buffer rather than
@@ -6163,7 +6161,7 @@ was that function called several times, it gave the size 
of the whole
 buffer, not the accessible part.  The computation makes much more
 sense when it handles just the accessible part.  (@xref{Narrowing &
 Widening, , Narrowing and Widening}, for more information on focusing
-attention to an ``accessible'' part.)
+attention to an accessible part.)
 
 @need 800
 The line looks like this:
@@ -6191,8 +6189,8 @@ This expression is a multiplication, with two arguments 
to the function
 
 The first argument is @code{(prefix-numeric-value arg)}.  When
 @code{"P"} is used as the argument for @code{interactive}, the value
-passed to the function as its argument is passed a ``raw prefix
-argument'', and not a number.  (It is a number in a list.)  To perform
+passed to the function as its argument is passed a @dfn{raw prefix
+argument}, and not a number.  (It is a number in a list.)  To perform
 the arithmetic, a conversion is necessary, and
 @code{prefix-numeric-value} does the job.
 
@@ -6411,7 +6409,7 @@ tenths of the way through the buffer, which is a nicety 
that is,
 perhaps, not necessary, but which, if it did not occur, would be sure
 to draw complaints.  (The @code{(not (consp arg))} portion is so that
 if you specify the command with a @kbd{C-u}, but without a number,
-that is to say, if the ``raw prefix argument'' is simply a cons cell,
+that is to say, if the raw prefix argument is simply a cons cell,
 the command does not put you at the beginning of the second line.)
 
 @node Second Buffer Related Review
@@ -6440,7 +6438,7 @@ is optional; this means that the function can be 
evaluated without the
 argument, if desired.
 
 @item prefix-numeric-value
-Convert the ``raw prefix argument'' produced by @code{(interactive
+Convert the raw prefix argument produced by @code{(interactive
 "P")} to a numeric value.
 
 @item forward-line
@@ -6946,10 +6944,10 @@ non-destructive---that is, they do not modify or change 
lists to which
 they are applied.  This is very important for how they are used.
 
 Also, in the first chapter, in the discussion about atoms, I said that
-in Lisp, ``certain kinds of atom, such as an array, can be separated
+in Lisp, certain kinds of atom, such as an array, can be separated
 into parts; but the mechanism for doing this is different from the
 mechanism for splitting a list.  As far as Lisp is concerned, the
-atoms of a list are unsplittable.''  (@xref{Lisp Atoms}.)  The
+atoms of a list are unsplittable.  (@xref{Lisp Atoms}.)  The
 @code{car} and @code{cdr} functions are used for splitting lists and
 are considered fundamental to Lisp.  Since they cannot split or gain
 access to the parts of an array, an array is considered an atom.
@@ -6983,8 +6981,8 @@ appear in the echo area.  @code{cons} causes the creation 
of a new
 list in which the element is followed by the elements of the original
 list.
 
-We often say that address@hidden puts a new element at the beginning of
-a list; it attaches or pushes elements onto the list'', but this
+We often say that @code{cons} puts a new element at the beginning of
+a list, or that it attaches or pushes elements onto the list, but this
 phrasing can be misleading, since @code{cons} does not change an
 existing list, but creates a new one.
 
@@ -7281,9 +7279,9 @@ This can be very convenient.
 
 Note that the elements are numbered from zero, not one.  That is to
 say, the first element of a list, its @sc{car} is the zeroth element.
-This is called ``zero-based'' counting and often bothers people who
+This zero-based counting often bothers people who
 are accustomed to the first element in a list being number one, which
-is ``one-based''.
+is one-based.
 
 @need 1250
 For example:
@@ -7422,7 +7420,7 @@ variable which has a list as its value, and the list to 
which the
 @noindent
 If you evaluate this expression, the list @code{(cat dog)} will appear
 in the echo area.  This is the value returned by the function.  The
-result we are interested in is the ``side effect'', which we can see by
+result we are interested in is the side effect, which we can see by
 evaluating the variable @code{domesticated-animals}:
 
 @smallexample
@@ -7454,9 +7452,9 @@ fish.  Replace the rest of that list with a list of other 
fish.
 @cindex Erasing text
 @cindex Deleting text
 
-Whenever you cut or clip text out of a buffer with a ``kill'' command in
+Whenever you cut or clip text out of a buffer with a @dfn{kill} command in
 GNU Emacs, it is stored in a list and you can bring it back with a
-``yank'' command.
address@hidden command.
 
 (The use of the word ``kill'' in Emacs for processes which specifically
 @emph{do not} destroy the values of the entities is an unfortunate
@@ -7537,7 +7535,7 @@ than nothing at all.
 The list that holds the pieces of text is called the @dfn{kill ring}.
 This chapter leads up to a description of the kill ring and how it is
 used by first tracing how the @code{zap-to-char} function works.  This
-function uses (or ``calls'') a function that invokes a function that
+function calls a function that invokes a function that
 manipulates the kill ring.  Thus, before reaching the mountains, we
 climb the foothills.
 
@@ -7648,7 +7646,7 @@ The part within quotation marks, @code{"p\ncZap to 
char:@: "}, specifies
 two different things.  First, and most simply, is the @samp{p}.
 This part is separated from the next part by a newline, @samp{\n}.
 The @samp{p} means that the first argument to the function will be
-passed the value of a ``processed prefix''.  The prefix argument is
+passed the value of a @dfn{processed prefix}.  The prefix argument is
 passed by typing @kbd{C-u} and a number, or @kbd{M-} and a number.  If
 the function is called interactively without a prefix, 1 is passed to
 this argument.
@@ -7719,7 +7717,7 @@ function @code{char-to-string} to ensure that the 
computer treats that
 character as a string.)  If the search is backwards,
 @code{search-forward} leaves point just before the first character in
 the target.  Also, @code{search-forward} returns @code{t} for true.
-(Moving point is therefore a ``side effect''.)
+(Moving point is therefore a side effect.)
 
 @need 1250
 In @code{zap-to-char}, the @code{search-forward} function looks like this:
@@ -8219,7 +8217,7 @@ Technically speaking, @code{when} is a Lisp macro.  A 
Lisp macro
 enables you to define new control constructs and other language
 features.  It tells the interpreter how to compute another Lisp
 expression which will in turn compute the value.  In this case, the
-``other expression'' is an @code{if} expression.
+other expression is an @code{if} expression.
 
 The @code{kill-region} function definition also has an @code{unless}
 macro; it is the converse of @code{when}.  The @code{unless} macro is
@@ -8253,7 +8251,7 @@ The then-part is evaluated if the previous command was 
another call to
 
 @code{yank-handler} is an optional argument to @code{kill-region} that
 tells the @code{kill-append} and @code{kill-new} functions how deal
-with properties added to the text, such as ``bold'' or ``italics''.
+with properties added to the text, such as bold or italics.
 
 @code{last-command} is a variable that comes with Emacs that we have
 not seen before.  Normally, whenever a function is executed, Emacs
@@ -8341,7 +8339,7 @@ document from the beginning, understanding these parts of 
a function is
 almost becoming routine.
 
 The documentation is somewhat confusing unless you remember that the
-word ``kill'' has a meaning different from usual.  The ``Transient Mark''
+word ``kill'' has a meaning different from usual.  The Transient Mark
 and @code{interprogram-cut-function} comments explain certain
 side-effects.
 
@@ -8493,8 +8491,8 @@ a moment.
 
 (Also, the function provides an optional argument called
 @code{yank-handler}; when invoked, this argument tells the function
-how to deal with properties added to the text, such as ``bold'' or
-``italics''.)
+how to deal with properties added to the text, such as bold or
+italics.)
 
 @c !!! bug in GNU Emacs 22 version of  kill-append ?
 It has a @code{let*} function to set the value of the first element of
@@ -8652,7 +8650,7 @@ As usual, we can look at this function in parts.
 
 The function definition has an optional @code{yank-handler} argument,
 which when invoked tells the function how to deal with properties
-added to the text, such as ``bold'' or ``italics''.  We will skip that.
+added to the text, such as bold or italics.  We will skip that.
 
 @need 1200
 The first line of the documentation makes sense:
@@ -8896,7 +8894,7 @@ It starts with an @code{if} expression
 In this case, the expression tests first to see whether
 @code{menu-bar-update-yank-menu} exists as a function, and if so,
 calls it.  The @code{fboundp} function returns true if the symbol it
-is testing has a function definition that ``is not void''.  If the
+is testing has a function definition that is not void.  If the
 symbol's function definition were void, we would receive an error
 message, as we did when we created errors intentionally (@pxref{Making
 Errors, , Generate an Error Message}).
@@ -8970,7 +8968,7 @@ expression is true, @code{kill-append} prepends the 
string to the just
 previously clipped text.  For a detailed discussion, see
 @ref{kill-append function, , The @code{kill-append} function}.)
 
-If you then yank back the text, i.e., ``paste'' it, you get both
+If you then yank back the text, i.e., paste it, you get both
 pieces of text at once.  That way, if you delete two words in a row,
 and then yank them back, you get both words, in their proper order,
 with one yank.  (The @address@hidden(< end beg))}} expression makes sure the
@@ -9076,7 +9074,7 @@ The sixth part is nearly like the argument that follows 
the
 @code{interactive} declaration in a function written in Lisp: a letter
 followed, perhaps, by a prompt.  The only difference from the Lisp is
 when the macro is called with no arguments.  Then you write a @code{0}
-(which is a ``null string''), as in this macro.
+(which is a null string), as in this macro.
 
 If you were to specify arguments, you would place them between
 quotation marks.  The C macro for @code{goto-char} includes
@@ -9088,13 +9086,13 @@ and provides a prompt.
 The seventh part is a documentation string, just like the one for a
 function written in Emacs Lisp.  This is written as a C comment.  (When
 you build Emacs, the program @command{lib-src/make-docfile} extracts
-these comments and uses them to make the ``real'' documentation.)
+these comments and uses them to make the documentation.)
 @end itemize
 
 @need 1200
 In a C macro, the formal parameters come next, with a statement of
-what kind of object they are, followed by what might be called the ``body''
-of the macro.  For @code{delete-and-extract-region} the ``body''
+what kind of object they are, followed by the body
+of the macro.  For @code{delete-and-extract-region} the body
 consists of the following four lines:
 
 @smallexample
@@ -9126,7 +9124,7 @@ also be a C union instead of an integer type.}.
 In early versions of Emacs, these two numbers were thirty-two bits
 long, but the code is slowly being generalized to handle other
 lengths.  Three of the available bits are used to specify the type of
-information; the remaining bits are used as ``content''.
+information; the remaining bits are used as content.
 
 @samp{XINT} is a C macro that extracts the relevant number from the
 longer collection of bits; the three other bits are discarded.
@@ -9822,7 +9820,7 @@ and in one of its drawers you found a map giving you 
directions to
 where the buried treasure lies.
 
 (In addition to its name, symbol definition, and variable value, a
-symbol has a ``drawer'' for a @dfn{property list} which can be used to
+symbol has a drawer for a @dfn{property list} which can be used to
 record other information.  Property lists are not discussed here; see
 @ref{Property Lists, , Property Lists, elisp, The GNU Emacs Lisp
 Reference Manual}.)
@@ -9916,8 +9914,8 @@ What does the @code{more-flowers} list now contain?
 @cindex Retrieving text
 @cindex Pasting text
 
-Whenever you cut text out of a buffer with a ``kill'' command in GNU Emacs,
-you can bring it back with a ``yank'' command.  The text that is cut out of
+Whenever you cut text out of a buffer with a kill command in GNU Emacs,
+you can bring it back with a yank command.  The text that is cut out of
 the buffer is put in the kill ring and the yank commands insert the
 appropriate contents of the kill ring back into a buffer (not necessarily
 the original buffer).
@@ -10073,7 +10071,7 @@ These two ways of talking about the same thing sound 
confusing at first but
 make sense on reflection.  The kill ring is generally thought of as the
 complete structure of data that holds the information of what has recently
 been cut out of the Emacs buffers.  The @code{kill-ring-yank-pointer}
-on the other hand, serves to indicate---that is, to ``point to''---that part
+on the other hand, serves to indicate---that is, to point to---that part
 of the kill ring of which the first element (the @sc{car}) will be
 inserted.
 
@@ -10157,7 +10155,7 @@ their kin; but you can use recursion, which provides a 
very powerful
 way to think about and then to solve address@hidden can write
 recursive functions to be frugal or wasteful of mental or computer
 resources; as it happens, methods that people find easy---that are
-frugal of ``mental resources''---sometimes use considerable computer
+frugal of mental resources---sometimes use considerable computer
 resources.  Emacs was designed to run on machines that we now consider
 limited and its default settings are conservative.  You may want to
 increase the values of @code{max-specpdl-size} and
@@ -10220,7 +10218,7 @@ evaluated.  This process is called a loop since the 
Lisp interpreter
 repeats the same thing again and again, like an airplane doing a loop.
 When the result of evaluating the true-or-false-test is false, the
 Lisp interpreter does not evaluate the rest of the @code{while}
-expression and ``exits the loop''.
+expression and exits the loop.
 
 Clearly, if the value returned by evaluating the first argument to
 @code{while} is always true, the body following will be evaluated
@@ -10381,7 +10379,7 @@ expression, @code{(print-elements-of-list animals)}, by 
typing
 to be printed in the @file{*scratch*} buffer instead of being printed
 in the echo area.  (Otherwise you will see something like this in your
 echo area: @code{^Jgazelle^J^Jgiraffe^J^Jlion^J^Jtiger^Jnil}, in which
-each @samp{^J} stands for a ``newline''.)
+each @samp{^J} stands for a newline.)
 
 @need 1500
 In a recent instance of GNU Emacs, you can evaluate these expressions
@@ -10950,8 +10948,8 @@ provide for looping.  Sometimes these are quicker to 
write than the
 equivalent @code{while} loop.  Both are Lisp macros.  (@xref{Macros, ,
 Macros, elisp, The GNU Emacs Lisp Reference Manual}. )
 
address@hidden works like a @code{while} loop that address@hidden down a
-list'':  @code{dolist} automatically shortens the list each time it
address@hidden works like a @code{while} loop that @sc{cdr}s down a
+list:  @code{dolist} automatically shortens the list each time it
 loops---takes the @sc{cdr} of the list---and binds the @sc{car} of
 each shorter version of the list to the first of its arguments.
 
@@ -11052,7 +11050,7 @@ of the work you have to do when writing a @code{while} 
expression.
 
 Like a @code{while} loop, a @code{dolist} loops.  What is different is
 that it automatically shortens the list each time it loops---it
address@hidden down the list'' on its own---and it automatically binds
address@hidden down the list on its own---and it automatically binds
 the @sc{car} of each shorter version of the list to the first of its
 arguments.
 
@@ -11127,8 +11125,8 @@ the same name.  However, even though the program has 
the same name, it
 is not the same entity.  It is different.  In the jargon, it is a
 different ``instance''.
 
-Eventually, if the program is written correctly, the ``slightly
-different arguments'' will become sufficiently different from the first
+Eventually, if the program is written correctly, the slightly
+different arguments will become sufficiently different from the first
 arguments that the final instance will stop.
 
 @menu
@@ -11168,8 +11166,8 @@ install a function definition, that is, when you 
evaluate a
 @code{defun} macro, you install the necessary equipment to build
 robots.  It is as if you were in a factory, setting up an assembly
 line.  Robots with the same name are built according to the same
-blueprints.  So they have, as it were, the same ``model number'', but a
-different ``serial number''.
+blueprints.  So they have the same model number, but a
+different serial number.
 
 We often say that a recursive function ``calls itself''.  What we mean
 is that the instructions in a recursive function cause the Lisp
@@ -11282,7 +11280,7 @@ Uses recursion."
 The @code{print-elements-recursively} function first tests whether
 there is any content in the list; if there is, the function prints the
 first element of the list, the @sc{car} of the list.  Then the
-function ``invokes itself'', but gives itself as its argument, not the
+function invokes itself, but gives itself as its argument, not the
 whole list, but the second and subsequent elements of the list, the
 @sc{cdr} of the list.
 
@@ -11298,7 +11296,7 @@ a different individual from the first, but is the same 
model.
 When the second evaluation occurs, the @code{when} expression is
 evaluated and if true, prints the first element of the list it
 receives as its argument (which is the second element of the original
-list).  Then the function ``calls itself'' with the @sc{cdr} of the list
+list).  Then the function calls itself with the @sc{cdr} of the list
 it is invoked with, which (the second time around) is the @sc{cdr} of
 the @sc{cdr} of the original list.
 
@@ -11307,7 +11305,7 @@ mean is that the Lisp interpreter assembles and 
instructs a new
 instance of the program.  The new instance is a clone of the first,
 but is a separate individual.
 
-Each time the function ``invokes itself'', it invokes itself on a
+Each time the function invokes itself, it does so on a
 shorter version of the original list.  It creates a new instance that
 works on a shorter list.
 
@@ -11725,7 +11723,7 @@ the @code{accumulate} recursive pattern, an action is 
performed on
 every element of a list and the result of that action is accumulated
 with the results of performing the action on the other elements.
 
-This is very like the ``every'' pattern using @code{cons}, except that
+This is very like the @code{every} pattern using @code{cons}, except that
 @code{cons} is not used, but some other combiner.
 
 @need 1500
@@ -11776,7 +11774,7 @@ In the @code{keep} recursive pattern, each element of a 
list is tested;
 the element is acted on and the results are kept only if the element
 meets a criterion.
 
-Again, this is very like the ``every'' pattern, except the element is
+Again, this is very like the @code{every} pattern, except the element is
 skipped unless it meets a criterion.
 
 @need 1500
@@ -11926,12 +11924,12 @@ more steps.
 The solution to the problem of deferred operations is to write in a
 manner that does not defer address@hidden phrase @dfn{tail
 recursive} is used to describe such a process, one that uses
-``constant space''.}.  This requires
+constant space.}.  This requires
 writing to a different pattern, often one that involves writing two
-function definitions, an ``initialization'' function and a ``helper''
+function definitions, an initialization function and a helper
 function.
 
-The ``initialization'' function sets up the job; the ``helper'' function
+The initialization function sets up the job; the helper function
 does the work.
 
 @need 1200
@@ -11942,7 +11940,7 @@ so simple, I find them hard to understand.
 @group
 (defun triangle-initialization (number)
   "Return the sum of the numbers 1 through NUMBER inclusive.
-This is the `initialization' component of a two function
+This is the initialization component of a two function
 duo that uses recursion."
   (triangle-recursive-helper 0 0 number))
 @end group
@@ -11952,7 +11950,7 @@ duo that uses recursion."
 @group
 (defun triangle-recursive-helper (sum counter number)
   "Return SUM, using COUNTER, through NUMBER inclusive.
-This is the “helper” component of a two function duo
+This is the helper component of a two function duo
 that uses recursion."
   (if (> counter number)
       sum
@@ -11973,18 +11971,18 @@ Install both function definitions by evaluating them, 
then call
 @end group
 @end smallexample
 
-The ``initialization'' function calls the first instance of the ``helper''
+The initialization function calls the first instance of the helper
 function with three arguments: zero, zero, and a number which is the
 number of rows in the triangle.
 
-The first two arguments passed to the ``helper'' function are
+The first two arguments passed to the helper function are
 initialization values.  These values are changed when
 @code{triangle-recursive-helper} invokes new address@hidden
 jargon is mildly confusing:  @code{triangle-recursive-helper} uses a
 process that is iterative in a procedure that is recursive.  The
 process is called iterative because the computer need only record the
 three values, @code{sum}, @code{counter}, and @code{number}; the
-procedure is recursive because the function ``calls itself''.  On the
+procedure is recursive because the function calls itself.  On the
 other hand, both the process and the procedure used by
 @code{triangle-recursively} are called recursive.  The word
 ``recursive'' has different meanings in the two contexts.}
@@ -12338,7 +12336,7 @@ search is successful, it leaves point immediately after 
the last
 character in the target.  If the search is backwards, it leaves point
 just before the first character in the target.  You may tell
 @code{re-search-forward} to return @code{t} for true.  (Moving point
-is therefore a ``side effect''.)
+is therefore a side effect.)
 
 Like @code{search-forward}, the @code{re-search-forward} function takes
 four arguments:
@@ -12640,7 +12638,7 @@ evaluates its then-part; otherwise, the Emacs Lisp 
interpreter
 evaluates the else-part.  The true-or-false-test of the @code{if}
 expression is the regular expression search.
 
-It may seem odd to have what looks like the ``real work'' of
+It may seem odd to have what looks like the real work of
 the @code{forward-sentence} function buried here, but this is a common
 way this kind of operation is carried out in Lisp.
 
@@ -13372,7 +13370,7 @@ of which I load 12---you can create a @file{TAGS} file 
for the Emacs
 Lisp files in that directory.
 
 @need 1250
-The @code{etags} program takes all the usual shell ``wildcards''.  For
+The @code{etags} program takes all the usual shell wildcards.  For
 example, if you have two directories for which you want a single
 @file{TAGS} file, type @address@hidden *.el ../elisp/*.el}}, where
 @file{../elisp/} is the second directory:
@@ -13411,7 +13409,7 @@ program to attempt to find it.
 Type @address@hidden locate @key{RET} TAGS @key{RET}}} and Emacs will list
 for you the full path names of all your @file{TAGS} files.  On my
 system, this command lists 34 @file{TAGS} files.  On the other hand, a
-``plain vanilla'' system I recently installed did not contain any
+plain vanilla system I recently installed did not contain any
 @file{TAGS} files.
 
 If the tags table you want has been created, you can use the @code{M-x
@@ -13724,7 +13722,7 @@ single backslash has special meaning to the Emacs Lisp 
interpreter.
 It indicates that the following character is interpreted differently
 than usual.  For example, the two characters, @samp{\n}, stand for
 @samp{newline}, rather than for a backslash followed by @samp{n}.  Two
-backslashes in a row stand for an ordinary, ``unspecial'' backslash, so
+backslashes in a row stand for an ordinary, unspecial backslash, so
 Emacs Lisp interpreter ends of seeing a single backslash followed by a
 letter.  So it discovers the letter is special.)
 
@@ -14116,8 +14114,8 @@ the region, as returned by the recursive call; and then 
the
 user.
 
 Often, one thinks of the binding within a @code{let} expression as
-somehow secondary to the ``primary'' work of a function.  But in this
-case, what you might consider the ``primary'' job of the function,
+somehow secondary to the primary work of a function.  But in this
+case, what you might consider the primary job of the function,
 counting words, is done within the @code{let} expression.
 
 @need 1250
@@ -14158,8 +14156,8 @@ Using @code{let}, the function definition looks like 
this:
 
 Next, we need to write the recursive counting function.
 
-A recursive function has at least three parts: the ``do-again-test'', the
-``next-step-expression'', and the recursive call.
+A recursive function has at least three parts: the do-again-test, the
+next-step-expression, and the recursive call.
 
 The do-again-test determines whether the function will or will not be
 called again.  Since we are counting words in a region and can use a
@@ -14183,7 +14181,7 @@ the expression that moves point forward, word by word.
 
 The third part of a recursive function is the recursive call.
 
-Somewhere, also, we also need a part that does the ``work'' of the
+Somewhere, also, we also need a part that does the work of the
 function, a part that does the counting.  A vital part!
 
 @need 1250
@@ -14511,7 +14509,7 @@ When we first start thinking about how to count the 
words in a
 function definition, the first question is (or ought to be) what are
 we going to count?  When we speak of ``words'' with respect to a Lisp
 function definition, we are actually speaking, in large part, of
-``symbols''.  For example, the following @code{multiply-by-seven}
+symbols.  For example, the following @code{multiply-by-seven}
 function contains the five symbols @code{defun},
 @code{multiply-by-seven}, @code{number}, @code{*}, and @code{7}.  In
 addition, in the documentation string, it contains the four words
@@ -14572,9 +14570,9 @@ character.  (For more information, @pxref{Syntax 
Tables, , Syntax
 Tables, elisp, The GNU Emacs Lisp Reference Manual}.)
 
 Syntax tables specify which characters belong to which categories.
-Usually, a hyphen is not specified as a ``word constituent character''.
-Instead, it is specified as being in the ``class of characters that are
-part of symbol names but not words.''  This means that the
+Usually, a hyphen is not specified as a word constituent character.
+Instead, it is specified as being in the class of characters that are
+part of symbol names but not words.  This means that the
 @address@hidden function treats it in the same way it treats
 an interword white space, which is why @address@hidden
 counts @samp{multiply-by-seven} as three words.
@@ -14593,8 +14591,8 @@ Alternatively, we can redefine the regexp used in the
 procedure has the merit of clarity, but the task is a little tricky.
 
 @need 1200
-The first part is simple enough: the pattern must match ``at least one
-character that is a word or symbol constituent''.  Thus:
+The first part is simple enough: the pattern must match at least one
+character that is a word or symbol constituent.  Thus:
 
 @smallexample
 "\\(\\w\\|\\s_\\)+"
@@ -14610,8 +14608,8 @@ following the group indicates that the word or symbol 
constituent
 characters must be matched at least once.
 
 However, the second part of the regexp is more difficult to design.
-What we want is to follow the first part with ``optionally one or more
-characters that are not constituents of a word or symbol''.  At first,
+What we want is to follow the first part with optionally one or more
+characters that are not constituents of a word or symbol.  At first,
 I thought I could define this with the following:
 
 @smallexample
@@ -14977,7 +14975,7 @@ The task is easy: use @code{find-file-noselect} and 
@code{set-buffer}.
 @section @code{lengths-list-file} in Detail
 
 The core of the @code{lengths-list-file} function is a @code{while}
-loop containing a function to move point forward ``defun by defun'' and
+loop containing a function to move point forward defun by defun, and
 a function to count the number of words and symbols in each defun.
 This core must be surrounded by functions that do various other tasks,
 including finding the file, and ensuring that point starts out at the
@@ -15043,14 +15041,14 @@ Next comes a call to widen the buffer if it is 
narrowed.  This
 function is usually not needed---Emacs creates a fresh buffer if none
 already exists; but if a buffer visiting the file already exists Emacs
 returns that one.  In this case, the buffer may be narrowed and must
-be widened.  If we wanted to be fully ``user-friendly'', we would
+be widened.  If we wanted to be fully user-friendly, we would
 arrange to save the restriction and the location of point, but we
 won't.
 
 The @code{(goto-char (point-min))} expression moves point to the
 beginning of the buffer.
 
-Then comes a @code{while} loop in which the ``work'' of the function is
+Then comes a @code{while} loop in which the work of the function is
 carried out.  In the loop, Emacs determines the length of each
 definition and constructs a lengths' list containing the information.
 
@@ -15271,11 +15269,11 @@ Besides a @code{while} loop, you can work on each of 
a list of files
 with recursion.  A recursive version of @code{lengths-list-many-files}
 is short and simple.
 
-The recursive function has the usual parts: the ``do-again-test'', the
-``next-step-expression'', and the recursive call.  The ``do-again-test''
+The recursive function has the usual parts: the do-again-test, the
+next-step-expression, and the recursive call.  The do-again-test
 determines whether the function should call itself again, which it
 will do if the @code{list-of-files} contains any remaining elements;
-the ``next-step-expression'' resets the @code{list-of-files} to the
+the next-step-expression resets the @code{list-of-files} to the
 @sc{cdr} of itself, so eventually the list will be empty; and the
 recursive call calls itself on the shorter list.  The complete
 function is shorter than this description!
@@ -15376,7 +15374,7 @@ numbers.
 @end ifnottex
 
 Based on what we have done before, we can readily foresee that it
-should not be too hard to write a function that address@hidden'' down the
+should not be too hard to write a function that @sc{cdr}s down the
 lengths' list, looks at each element, determines which length range it
 is in, and increments a counter for that range.
 
@@ -15396,7 +15394,7 @@ that we will need.
 Emacs contains a function to sort lists, called (as you might guess)
 @code{sort}.  The @code{sort} function takes two arguments, the list
 to be sorted, and a predicate that determines whether the first of
-two list elements is ``less'' than the second.
+two list elements is less than the second.
 
 As we saw earlier (@pxref{Wrong Type of Argument, , Using the Wrong
 Type Object as an Argument}), a predicate is a function that
@@ -15515,7 +15513,7 @@ as a list that looks like this (but with more elements):
 The @code{directory-files-and-attributes} function returns a list of
 lists.  Each of the lists within the main list consists of 13
 elements.  The first element is a string that contains the name of the
-file---which, in GNU/Linux, may be a ``directory file'', that is to
+file---which, in GNU/Linux, may be a @dfn{directory file}, that is to
 say, a file with the special attributes of a directory.  The second
 element of the list is @code{t} for a directory, a string
 for symbolic link (the string is the name linked to), or @code{nil}.
@@ -15580,8 +15578,8 @@ the function comes upon a sub-directory, it should go 
into that
 sub-directory and repeat its actions.
 
 However, we should note that every directory contains a name that
-refers to itself, called @file{.}, (``dot'') and a name that refers to
-its parent directory, called @file{..} (``double dot'').  (In
+refers to itself, called @file{.} (``dot''), and a name that refers to
+its parent directory, called @file{..} (``dot dot'').  (In
 @file{/}, the root directory, @file{..} refers to itself, since
 @file{/} has no parent.)  Clearly, we do not want our
 @code{files-in-below-directory} function to enter those directories,
@@ -15614,7 +15612,7 @@ Let's write a function definition to do these tasks.  
We will use a
 @code{while} loop to move from one filename to another within a
 directory, checking what needs to be done; and we will use a recursive
 call to repeat the actions on each sub-directory.  The recursive
-pattern is ``accumulate''
+pattern is Accumulate
 (@pxref{Accumulate}),
 using @code{append} as the combiner.
 
@@ -15866,7 +15864,7 @@ produces:
 (4 3 2 1)
 @end smallexample
 
-Note that the @code{nreverse} function is ``destructive''---that is,
+Note that the @code{nreverse} function is destructive---that is,
 it changes the list to which it is applied; this contrasts with the
 @code{car} and @code{cdr} functions, which are non-destructive.  In
 this case, we do not want the original @code{defuns-per-range-list},
@@ -16072,7 +16070,7 @@ the function to label the axes automatically.
 
 Since Emacs is designed to be flexible and work with all kinds of
 terminals, including character-only terminals, the graph will need to
-be made from one of the ``typewriter'' symbols.  An asterisk will do; as
+be made from one of the typewriter symbols.  An asterisk will do; as
 we enhance the graph-printing function, we can make the choice of
 symbol a user option.
 
@@ -16239,7 +16237,7 @@ Wrong type of argument:  number-or-marker-p, (3 4 6 5 7 
3)
 
 @findex apply
 We need a function that passes a list of arguments to a function.
-This function is @code{apply}.  This function ``applies'' its first
+This function is @code{apply}.  This function applies its first
 argument (a function) to its remaining arguments, the last of which
 may be a list.
 
@@ -16257,7 +16255,7 @@ returns 8.
 without a book such as this.  It is possible to discover other
 functions, like @code{search-forward} or @code{insert-rectangle}, by
 guessing at a part of their names and then using @code{apropos}.  Even
-though its base in metaphor is clear---``apply'' its first argument to
+though its base in metaphor is clear---apply its first argument to
 the rest---I doubt a novice would come up with that particular word
 when using @code{apropos} or other aid.  Of course, I could be wrong;
 after all, the function was first named by someone who had to invent
@@ -16345,7 +16343,7 @@ returns
 
 As written, @code{column-of-graph} contains a major flaw: the symbols
 used for the blank and for the marked entries in the column are
-``hard-coded'' as a space and asterisk.  This is fine for a prototype,
+hard-coded as a space and asterisk.  This is fine for a prototype,
 but you, or another user, may wish to use other symbols.  For example,
 in testing the graph function, you many want to use a period in place
 of the space, to make sure the point is being repositioned properly
@@ -16424,7 +16422,7 @@ is no more than a bar graph in which the part of each 
bar that is
 below the top is blank.  To construct a column for a line graph, the
 function first constructs a list of blanks that is one shorter than
 the value, then it uses @code{cons} to attach a graph symbol to the
-list; then it uses @code{cons} again to attach the ``top blanks'' to
+list; then it uses @code{cons} again to attach the top blanks to
 the list.
 
 It is easy to see how to write such a function, but since we don't
@@ -16540,7 +16538,7 @@ The one unexpected expression in this function is the
 @address@hidden(sit-for 0)}} expression in the @code{while} loop.  This
 expression makes the graph printing operation more interesting to
 watch than it would be otherwise.  The expression causes Emacs to
-``sit'' or do nothing for a zero length of time and then redraw the
address@hidden or do nothing for a zero length of time and then redraw the
 screen.  Placed here, it causes Emacs to redraw the screen column by
 column.  Without it, Emacs would not redraw the screen until the
 function exits.
@@ -16602,14 +16600,14 @@ Emacs will print a graph like this:
 @findex recursive-graph-body-print
 
 The @code{graph-body-print} function may also be written recursively.
-The recursive solution is divided into two parts: an outside ``wrapper''
+The recursive solution is divided into two parts: an outside wrapper
 that uses a @code{let} expression to determine the values of several
 variables that need only be found once, such as the maximum height of
 the graph, and an inside function that is called recursively to print
 the graph.
 
 @need 1250
-The ``wrapper'' is uncomplicated:
+The wrapper is uncomplicated:
 
 @smallexample
 @group
@@ -16627,13 +16625,13 @@ The numbers-list consists of the Y-axis values."
 @end smallexample
 
 The recursive function is a little more difficult.  It has four parts:
-the ``do-again-test'', the printing code, the recursive call, and the
-``next-step-expression''.  The ``do-again-test'' is a @code{when}
+the do-again-test, the printing code, the recursive call, and the
+next-step-expression.  The do-again-test is a @code{when}
 expression that determines whether the @code{numbers-list} contains
 any remaining elements; if it does, the function prints one column of
 the graph using the printing code and calls itself again.  The
 function calls itself again according to the value produced by the
-``next-step-expression'' which causes the call to act on a shorter
+next-step-expression which causes the call to act on a shorter
 version of the @code{numbers-list}.
 
 @smallexample
@@ -16709,8 +16707,8 @@ Write a line graph version of the graph printing 
functions.
 @cindex Initialization file
 
 ``You don't have to like Emacs to like it''---this seemingly
-paradoxical statement is the secret of GNU Emacs.  The plain, ``out of
-the box'' Emacs is a generic tool.  Most people who use it, customize
+paradoxical statement is the secret of GNU Emacs.  The plain, out-of-the-box
+Emacs is a generic tool.  Most people who use it, customize
 it to suit themselves.
 
 GNU Emacs is mostly written in Emacs Lisp; this means that by writing
@@ -16748,7 +16746,7 @@ person hopes to do with an unadorned file?  Fundamental 
mode is the
 right default for such a file, just as C mode is the right default for
 editing C code.  (Enough programming languages have syntaxes
 that enable them to share or nearly share features, so C mode is
-now provided by CC mode, the ``C Collection''.)
+now provided by CC mode, the C Collection.)
 
 But when you do know who is going to use Emacs---you,
 yourself---then it makes sense to customize Emacs.
@@ -16793,8 +16791,8 @@ have the same form as your @file{.emacs} file, but are 
loaded by
 everyone.
 
 Two site-wide initialization files, @file{site-load.el} and
address@hidden, are loaded into Emacs and then ``dumped'' if a
-``dumped'' version of Emacs is created, as is most common.  (Dumped
address@hidden, are loaded into Emacs and then dumped if a
+dumped version of Emacs is created, as is most common.  (Dumped
 copies of Emacs load more quickly.  However, once a file is loaded and
 dumped, a change to it does not lead to a change in Emacs unless you
 load it yourself or re-dump Emacs.  @xref{Building Emacs, , Building
@@ -17077,7 +17075,7 @@ remember to look here to remind myself.
 @node Text and Auto-fill
 @section Text and Auto Fill Mode
 
-Now we come to the part that ``turns on'' Text mode and
+Now we come to the part that turns on Text mode and
 Auto Fill mode.
 
 @smallexample
@@ -17109,7 +17107,7 @@ on C mode.  Also, Emacs looks at first nonblank line of 
the file; if
 the line says @address@hidden C -*-}}, Emacs turns on C mode.  Emacs
 possesses a list of extensions and specifications that it uses
 automatically.  In addition, Emacs looks near the last page for a
-per-buffer, ``local variables list'', if any.
+per-buffer, local variables list, if any.
 
 @ifinfo
 @xref{Choosing Modes, , How Major Modes are Chosen, emacs, The GNU
@@ -17162,7 +17160,7 @@ In this line, the @code{add-hook} command adds
 @code{turn-on-auto-fill} is the name of a program, that, you guessed
 it!, turns on Auto Fill mode.
 
-Every time Emacs turns on Text mode, Emacs runs the commands ``hooked''
+Every time Emacs turns on Text mode, Emacs runs the commands hooked
 onto Text mode.  So every time Emacs turns on Text mode, Emacs also
 turns on Auto Fill mode.
 
@@ -17199,7 +17197,7 @@ fill commands to insert two spaces after a colon:
 @node Mail Aliases
 @section Mail Aliases
 
-Here is a @code{setq} that ``turns on'' mail aliases, along with more
+Here is a @code{setq} that turns on mail aliases, along with more
 reminders.
 
 @smallexample
@@ -17219,7 +17217,7 @@ This @code{setq} command sets the value of the variable
 says, in effect, ``Yes, use mail aliases.''
 
 Mail aliases are convenient short names for long email addresses or
-for lists of email addresses.  The file where you keep your ``aliases''
+for lists of email addresses.  The file where you keep your aliases
 is @file{~/.mailrc}.  You write an alias like this:
 
 @smallexample
@@ -17294,9 +17292,9 @@ This also shows how to set a key globally, for all 
modes.
 @findex global-set-key
 The command is @code{global-set-key}.  It is followed by the
 keybinding.  In a @file{.emacs} file, the keybinding is written as
-shown: @code{\C-c} stands for ``control-c'', which means ``press the
-control key and the @key{c} key at the same time''.  The @code{w} means
-``press the @key{w} key''.  The keybinding is surrounded by double
+shown: @code{\C-c} stands for Control-C, which means to press the
+control key and the @key{c} key at the same time.  The @code{w} means
+to press the @key{w} key.  The keybinding is surrounded by double
 quotation marks.  In documentation, you would write this as
 @address@hidden w}}.  (If you were binding a @key{META} key, such as
 @kbd{M-c}, rather than a @key{CTRL} key, you would write
@@ -17317,12 +17315,12 @@ adapt what is there.
 As for the keybinding itself: @kbd{C-c w}.  This combines the prefix
 key, @kbd{C-c}, with a single character, in this case, @kbd{w}.  This
 set of keys, @kbd{C-c} followed by a single character, is strictly
-reserved for individuals' own use.  (I call these ``own'' keys, since
+reserved for individuals' own use.  (I call these @dfn{own} keys, since
 these are for my own use.)  You should always be able to create such a
 keybinding for your own use without stomping on someone else's
 keybinding.  If you ever write an extension to Emacs, please avoid
 taking any of these keys for public use.  Create a key like @kbd{C-c
-C-w} instead.  Otherwise, we will run out of ``own'' keys.
+C-w} instead.  Otherwise, we will run out of own keys.
 
 @need 1250
 Here is another keybinding, with a comment:
@@ -17565,13 +17563,13 @@ first use such a function, while its containing file 
is evaluated.
 Rarely used functions are frequently autoloaded.  The
 @file{loaddefs.el} library contains thousands of autoloaded functions,
 from @code{5x5} to @code{zone}.  Of course, you may
-come to use a ``rare'' function frequently.  When you do, you should
+come to use a rare function frequently.  When you do, you should
 load that function's file with a @code{load} expression in your
 @file{.emacs} file.
 
 In my @file{.emacs} file, I load 14 libraries that contain functions
 that would otherwise be autoloaded.  (Actually, it would have been
-better to include these files in my ``dumped'' Emacs, but I forgot.
+better to include these files in my dumped Emacs, but I forgot.
 @xref{Building Emacs, , Building Emacs, elisp, The GNU Emacs Lisp
 Reference Manual}, and the @file{INSTALL} file for more about
 dumping.)
@@ -17932,7 +17930,7 @@ This avoids problems with symbolic links.
 @end group
 @end smallexample
 
-If you want to write with Chinese ``GB'' characters, set this instead:
+If you want to write with Chinese GB characters, set this instead:
 
 @smallexample
 @group
@@ -18122,7 +18120,7 @@ window.)
 @code{:eval} says to evaluate the following form and use the result as
 a string to display.  In this case, the expression displays the first
 component of the full system name.  The end of the first component is
-a @samp{.} (``period''), so I use the @code{string-match} function to
+a @samp{.} (period), so I use the @code{string-match} function to
 tell me the length of the first component.  The substring from the
 zeroth character to that length is the name of the machine.
 
@@ -18144,11 +18142,11 @@ or ``All''.  (A lower case @samp{p} tell you the 
percentage above the
 @emph{top} of the window.)  @samp{%-} inserts enough dashes to fill
 out the line.
 
-Remember, ``You don't have to like Emacs to like it''---your own
+Remember, you don't have to like Emacs to like it---your own
 Emacs can have different colors, different commands, and different
 keys than a default Emacs.
 
-On the other hand, if you want to bring up a plain ``out of the box''
+On the other hand, if you want to bring up a plain out-of-the-box
 Emacs, with no customization, type:
 
 @smallexample
@@ -18249,9 +18247,9 @@ Debugger entered--Lisp error: (void-function 1=)
 long lines.  As usual, you can quit the debugger by typing @kbd{q} in
 the @file{*Backtrace*} buffer.)
 
-In practice, for a bug as simple as this, the ``Lisp error'' line will
+In practice, for a bug as simple as this, the Lisp error line will
 tell you what you need to know to correct the definition.  The
-function @code{1=} is ``void''.
+function @code{1=} is void.
 
 @ignore
 @need 800
@@ -18547,7 +18545,7 @@ beginning of the @code{if} line of the function.  Also, 
you will see
 an arrowhead at the left hand side of that line.  The arrowhead marks
 the line where the function is executing.  (In the following examples,
 we show the arrowhead with @samp{=>}; in a windowing system, you may
-see the arrowhead as a solid triangle in the window ``fringe''.)
+see the arrowhead as a solid triangle in the window fringe.)
 
 @smallexample
 =>@point{}(if (= number 1)
@@ -18582,7 +18580,7 @@ Result: 3 (#o3, #x3, ?\C-c)
 
 @noindent
 This means the value of @code{number} is 3, which is octal three,
-hexadecimal three, and @sc{ascii} ``control-c'' (the third letter of the
+hexadecimal three, and @sc{ascii} Control-C (the third letter of the
 alphabet, in case you need to know this information).
 
 You can continue moving through the code until you reach the line with
@@ -18629,7 +18627,7 @@ Lisp Reference Manual}.
 Install the @address@hidden function and then cause it to
 enter the built-in debugger when you call it.  Run the command on a
 region containing two words.  You will need to press @kbd{d} a
-remarkable number of times.  On your system, is a ``hook'' called after
+remarkable number of times.  On your system, is a hook called after
 the command finishes?  (For information on hooks, see @ref{Command
 Overview, , Command Loop Overview, elisp, The GNU Emacs Lisp Reference
 Manual}.)
@@ -18750,7 +18748,7 @@ customize the @code{interactive} expression without 
using the standard
 character codes; and it shows how to create a temporary buffer.
 
 (The @code{indent-to} function is written in C rather than Emacs Lisp;
-it is a ``built-in'' function.  @code{help-follow} takes you to its
+it is a built-in function.  @code{help-follow} takes you to its
 source as does @code{find-tag}, when properly set up.)
 
 You can look at a function's source using @code{find-tag}, which is
@@ -19120,7 +19118,7 @@ The @code{if} expression has two parts, one if there 
exists
 @code{interprogram-paste} and one if not.
 
 @need 2000
-Let us consider the ``if not'' or else-part of the @code{current-kill}
+Let us consider the else-part of the @code{current-kill}
 function.  (The then-part uses the @code{kill-new} function, which
 we have already described.  @xref{kill-new function, , The
 @code{kill-new} function}.)
@@ -19201,7 +19199,7 @@ not necessarily an error, and therefore should not be 
labeled as one,
 even in the bowels of a computer.  As it is, the code in Emacs implies
 that a human who is acting virtuously, by exploring his or her
 environment, is making an error.  This is bad.  Even though the computer
-takes the same steps as it does when there is an ``error'', a term such as
+takes the same steps as it does when there is an error, a term such as
 ``cancel'' would have a clearer connotation.
 
 @ifnottex
@@ -19817,9 +19815,9 @@ For example, if you evaluate the following, the result 
is 15:
 (* (1+ (/ 12 5)) 5)
 @end smallexample
 
-All through this discussion, we have been using ``five'' as the value
+All through this discussion, we have been using 5 as the value
 for spacing labels on the Y axis; but we may want to use some other
-value.  For generality, we should replace ``five'' with a variable to
+value.  For generality, we should replace 5 with a variable to
 which we can assign a value.  The best name I can think of for this
 variable is @code{Y-axis-label-spacing}.
 
@@ -20326,7 +20324,7 @@ First, we create a numbered element with blank spaces 
before each number:
 @end smallexample
 
 Next, we create the function to print the numbered line, starting with
-the number ``1'' under the first column:
+the number 1 under the first column:
 
 @findex print-X-axis-numbered-line
 @smallexample
@@ -20844,8 +20842,8 @@ Thus,
 @end smallexample
 
 @noindent
-is a function definition that says ``return the value resulting from
-dividing whatever is passed to me as @code{arg} by 50''.
+is a function that returns the value resulting from
+dividing whatever is passed to it as @code{arg} by 50.
 
 @need 1200
 Earlier, for example, we had a function @code{multiply-by-seven}; it
diff --git a/doc/lispref/abbrevs.texi b/doc/lispref/abbrevs.texi
index 998f63e..bcbea87 100644
--- a/doc/lispref/abbrevs.texi
+++ b/doc/lispref/abbrevs.texi
@@ -134,7 +134,7 @@ abbrev in an abbrev table.
 
   When a major mode defines a system abbrev, it should call
 @code{define-abbrev} and specify @code{t} for the @code{:system}
-property.  Be aware that any saved non-``system'' abbrevs are restored
+property.  Be aware that any saved non-system abbrevs are restored
 at startup, i.e., before some major modes are loaded.  Therefore, major
 modes should not assume that their abbrev tables are empty when they
 are first loaded.
@@ -145,13 +145,13 @@ This function defines an abbrev named @var{name}, in
 with properties @var{props} (@pxref{Abbrev Properties}).  The return
 value is @var{name}.  The @code{:system} property in @var{props} is
 treated specially here: if it has the value @code{force}, then it will
-overwrite an existing definition even for a non-``system'' abbrev of
+overwrite an existing definition even for a non-system abbrev of
 the same name.
 
 @var{name} should be a string.  The argument @var{expansion} is
 normally the desired expansion (a string), or @code{nil} to undefine
 the abbrev.  If it is anything but a string or @code{nil}, then the
-abbreviation ``expands'' solely by running @var{hook}.
+abbreviation expands solely by running @var{hook}.
 
 The argument @var{hook} is a function or @code{nil}.  If @var{hook} is
 address@hidden, then it is called with no arguments after the abbrev is
diff --git a/doc/lispref/anti.texi b/doc/lispref/anti.texi
index 2784fd9..2fc43da 100644
--- a/doc/lispref/anti.texi
+++ b/doc/lispref/anti.texi
@@ -66,7 +66,7 @@ Internal windows are no longer visible to Lisp; functions 
such as
 and window-local buffer lists have all been removed.  Functions for
 resizing windows can delete windows if they become too small.
 
-The ``action function'' feature for controlling buffer display has
+The action-function feature for controlling buffer display has
 been removed, including @code{display-buffer-overriding-action} and
 related variables, as well as the @var{action} argument to
 @code{display-buffer} and other functions.  The way to
@@ -78,7 +78,7 @@ other variables.
 The standard completion interface has been simplified, eliminating the
 @code{completion-extra-properties} variable, the @code{metadata}
 action flag for completion functions, and the concept of
-``completion categories''.  Lisp programmers may now find the choice
+completion categories.  Lisp programmers may now find the choice
 of methods for tuning completion less bewildering, but if a package
 finds the streamlined interface insufficient for its needs, it must
 implement its own specialized completion feature.
diff --git a/doc/lispref/back.texi b/doc/lispref/back.texi
index 3433277..c4f2b5e 100644
--- a/doc/lispref/back.texi
+++ b/doc/lispref/back.texi
@@ -17,7 +17,7 @@
   Most of the GNU Emacs text editor is written in the programming
 language called Emacs Lisp.  You can write new code in Emacs Lisp and
 install it as an extension to the editor.  However, Emacs Lisp is more
-than a mere ``extension language''; it is a full computer programming
+than a mere extension language; it is a full computer programming
 language in its own right.  You can use it as you would any other
 programming language.
 
diff --git a/doc/lispref/backups.texi b/doc/lispref/backups.texi
index 0a1b5a2..d37df25 100644
--- a/doc/lispref/backups.texi
+++ b/doc/lispref/backups.texi
@@ -398,7 +398,7 @@ those versions by excluding them from the @sc{cdr} of the 
value.
 @xref{Numbered Backups}.
 
 In this example, the value says that @file{~rms/foo.~5~} is the name
-to use for the new backup file, and @file{~rms/foo.~3~} is an ``excess''
+to use for the new backup file, and @file{~rms/foo.~3~} is an excess
 version that the caller should consider deleting now.
 
 @smallexample
diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi
index 71261e0..45a21c8 100644
--- a/doc/lispref/buffers.texi
+++ b/doc/lispref/buffers.texi
@@ -23,7 +23,7 @@ not be displayed in any windows.
 * Buffer File Name::    The buffer file name indicates which file is visited.
 * Buffer Modification:: A buffer is @dfn{modified} if it needs to be saved.
 * Modification Time::   Determining whether the visited file was changed
-                         ``behind Emacs's back''.
+                         behind Emacs's back.
 * Read Only Buffers::   Modifying text is not allowed in a read-only buffer.
 * Buffer List::         How to look at all the existing buffers.
 * Creating Buffers::    Functions that create buffers.
@@ -893,7 +893,7 @@ another buffer is shown in it.  More precisely, if the 
selected window
 is dedicated (@pxref{Dedicated Windows}) and there are other windows on
 its frame, the window is deleted.  If it is the only window on its frame
 and that frame is not the only frame on its terminal, the frame is
-``dismissed'' by calling the function specified by
+dismissed by calling the function specified by
 @code{frame-auto-hide-function} (@pxref{Quitting Windows}).  Otherwise,
 it calls @code{switch-to-prev-buffer} (@pxref{Window History}) to show
 another buffer in that window.  If @var{buffer-or-name} is displayed in
@@ -1032,7 +1032,7 @@ memory for other uses or to be returned to the operating 
system.  If
 buffer.
 
 Any processes that have this buffer as the @code{process-buffer} are
-sent the @code{SIGHUP} (``hangup'') signal, which normally causes them
+sent the @code{SIGHUP} (hangup) signal, which normally causes them
 to terminate.  @xref{Signals to Processes}.
 
 If the buffer is visiting a file and contains unsaved changes,
@@ -1139,7 +1139,7 @@ be a live buffer or the name (a string) of an existing 
buffer.  If
 @var{name} is the name of an existing buffer, an error is signaled.
 
 If @var{clone} is address@hidden, then the indirect buffer originally
-shares the ``state'' of @var{base-buffer} such as major mode, minor
+shares the state of @var{base-buffer} such as major mode, minor
 modes, buffer local variables and so on.  If @var{clone} is omitted
 or @code{nil} the indirect buffer's state is set to the default state
 for new buffers.
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi
index 5930540..7ddf5ee 100644
--- a/doc/lispref/commands.texi
+++ b/doc/lispref/commands.texi
@@ -132,7 +132,7 @@ byte compiler to warn if the command is called from Lisp.  
The output
 of @code{describe-function} will include similar information.
 The value of the property can be: a string, which the byte-compiler
 will use directly in its warning (it should end with a period, and not
-start with a capital, e.g., ``use @dots{} instead.''); @code{t}; any
+start with a capital, e.g., @code{"use (system-name) instead."}); @code{t}; any
 other symbol, which should be an alternative function to use in Lisp
 code.
 
@@ -1557,8 +1557,8 @@ the command binding of the double click event to assume 
that the
 single-click command has already run.  It must produce the desired
 results of a double click, starting from the results of a single click.
 
-This is convenient, if the meaning of a double click somehow ``builds
-on'' the meaning of a single click---which is recommended user interface
+This is convenient, if the meaning of a double click somehow builds
+on the meaning of a single click---which is recommended user interface
 design practice for double clicks.
 
 If you click a button, then press it down again and start moving the
@@ -2444,7 +2444,7 @@ same symbol that would normally represent that 
combination of mouse
 button and modifier keys.  The information about the window part is kept
 elsewhere in the event---in the coordinates.  But
 @code{read-key-sequence} translates this information into imaginary
-``prefix keys'', all of which are symbols: @code{header-line},
+prefix keys, all of which are symbols: @code{header-line},
 @code{horizontal-scroll-bar}, @code{menu-bar}, @code{mode-line},
 @code{vertical-line}, and @code{vertical-scroll-bar}.  You can define
 meanings for mouse clicks in special window parts by defining key
@@ -2587,7 +2587,7 @@ If you wish to read a single key taking these 
translations into
 account, use the function @code{read-key}:
 
 @defun read-key &optional prompt
-This function reads a single key.  It is ``intermediate'' between
+This function reads a single key.  It is intermediate between
 @code{read-key-sequence} and @code{read-event}.  Unlike the former, it
 reads a single key, not a key sequence.  Unlike the latter, it does
 not return a raw event, but decodes and translates the user input
@@ -2633,7 +2633,7 @@ character for this purpose, but as a character with no 
modifiers.
 Thus, setting @code{extra-keyboard-modifiers} to zero cancels any
 modification.
 
-When using a window system, the program can ``press'' any of the
+When using a window system, the program can press any of the
 modifier keys in this way.  Otherwise, only the @key{CTL} and @key{META}
 keys can be virtually pressed.
 
@@ -2783,7 +2783,7 @@ What character @kbd{1 7 7}-
 @node Event Input Misc
 @subsection Miscellaneous Event Input Features
 
-This section describes how to ``peek ahead'' at events without using
+This section describes how to peek ahead at events without using
 them up, how to check for pending input, and how to discard pending
 input.  See also the function @code{read-passwd} (@pxref{Reading a
 Password}).
@@ -3048,7 +3048,7 @@ usual result of this---a quit---is prevented.  Eventually,
 binding is unwound at the end of a @code{let} form.  At that time, if
 @code{quit-flag} is still address@hidden, the requested quit happens
 immediately.  This behavior is ideal when you wish to make sure that
-quitting does not happen within a ``critical section'' of the program.
+quitting does not happen within a critical section of the program.
 
 @cindex @code{read-quoted-char} quitting
   In some functions (such as @code{read-quoted-char}), @kbd{C-g} is
@@ -3311,7 +3311,7 @@ using the minibuffer.  Usually it is more convenient for 
the user if you
 change the major mode of the current buffer temporarily to a special
 major mode, which should have a command to go back to the previous mode.
 (The @kbd{e} command in Rmail uses this technique.)  Or, if you wish to
-give the user different text to edit ``recursively'', create and select
+give the user different text to edit recursively, create and select
 a new buffer in a special mode.  In this mode, define a command to
 complete the processing and go back to the previous buffer.  (The
 @kbd{m} command in Rmail does this.)
diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi
index 4a246dd..8c23086 100644
--- a/doc/lispref/compile.texi
+++ b/doc/lispref/compile.texi
@@ -140,7 +140,7 @@ definition of @var{symbol} (@pxref{Byte-Code Objects}).
 
 If @var{symbol}'s definition is a byte-code function object,
 @code{byte-compile} does nothing and returns @code{nil}.  It does not
-``compile the symbol's definition again'', since the original
+compile the symbol's definition again, since the original
 (non-compiled) code has already been replaced in the symbol's function
 cell by the byte-compiled code.
 
@@ -242,7 +242,7 @@ $ emacs -batch -f batch-byte-compile *.el
 
   When Emacs loads functions and variables from a byte-compiled file,
 it normally does not load their documentation strings into memory.
-Each documentation string is ``dynamically'' loaded from the
+Each documentation string is dynamically loaded from the
 byte-compiled file only when needed.  This saves memory, and speeds up
 loading by skipping the processing of the documentation strings.
 
@@ -280,7 +280,7 @@ Internally, the dynamic loading of documentation strings is
 accomplished by writing compiled files with a special Lisp reader
 construct, @samp{#@@@var{count}}.  This construct skips the next
 @var{count} characters.  It also uses the @samp{#$} construct, which
-stands for ``the name of this file, as a string''.  Do not use these
+stands for the name of this file, as a string.  Do not use these
 constructs in Lisp source files; they are not designed to be clear to
 humans reading the file.
 
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index 421f5cc..fca16da 100644
--- a/doc/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -73,7 +73,7 @@ The value of the last form in the body becomes the value of 
the entire
 two or more forms in succession and use the value of the last of them.
 But programmers found they often needed to use a @code{progn} in the
 body of a function, where (at that time) only one form was allowed.  So
-the body of a function was made into an ``implicit @code{progn}'':
+the body of a function was made into an implicit @code{progn}:
 several forms are allowed just as in the body of an actual @code{progn}.
 Many other control structures likewise contain an implicit @code{progn}.
 As a result, @code{progn} is not used as much as it was many years ago.
@@ -220,11 +220,11 @@ list is the @var{condition}; the remaining elements, if 
any, the
 
 @code{cond} tries the clauses in textual order, by evaluating the
 @var{condition} of each clause.  If the value of @var{condition} is
address@hidden, the clause ``succeeds''; then @code{cond} evaluates its
address@hidden, the clause succeeds; then @code{cond} evaluates its
 @var{body-forms}, and returns the value of the last of @var{body-forms}.
 Any remaining clauses are ignored.
 
-If the value of @var{condition} is @code{nil}, the clause ``fails'', so
+If the value of @var{condition} is @code{nil}, the clause fails, so
 the @code{cond} moves on to the following clause, trying its @var{condition}.
 
 A clause may also look like this:
@@ -571,7 +571,7 @@ The value of a @code{while} form is always @code{nil}.
 @end group
 @end example
 
-To write a ``repeat...until'' loop, which will execute something on each
+To write a repeat-until loop, which will execute something on each
 iteration and then do the end-test, put the body followed by the
 end-test in a @code{progn} as the first argument of @code{while}, as
 shown here:
@@ -673,7 +673,7 @@ the iterator's final value.
 
 It's important to note that generator function bodies only execute
 inside calls to @code{iter-next}.  A call to a function defined with
address@hidden produces an iterator; you must ``drive'' this
address@hidden produces an iterator; you must drive this
 iterator with @code{iter-next} for anything interesting to happen.
 Each call to a generator function produces a @emph{different}
 iterator, each with its own state.
@@ -858,7 +858,7 @@ error is signaled with data @code{(@var{tag} @var{value})}.
 @subsection Examples of @code{catch} and @code{throw}
 
   One way to use @code{catch} and @code{throw} is to exit from a doubly
-nested loop.  (In most languages, this would be done with a ``goto''.)
+nested loop.  (In most languages, this would be done with a @code{goto}.)
 Here we compute @code{(foo @var{i} @var{j})} for @var{i} and @var{j}
 varying from 0 to 9:
 
@@ -972,7 +972,7 @@ returns to a point that is set up to handle the error
 (@pxref{Processing of Errors}).  Here we describe how to signal an
 error.
 
-  Most errors are signaled ``automatically'' within Lisp primitives
+  Most errors are signaled automatically within Lisp primitives
 which you call for other purposes, such as if you try to take the
 @sc{car} of an integer or move forward a character at the end of the
 buffer.  You can also signal errors explicitly with the functions
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index f984dbe..51d729f 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -365,7 +365,7 @@ should describe how to do the same job in hand-written Lisp 
code.
 Specify @var{getfunction} as the way to extract the value of this
 option.  The function @var{getfunction} should take one argument, a
 symbol, and should return whatever customize should use as the
-``current value'' for that symbol (which need not be the symbol's Lisp
+current value for that symbol (which need not be the symbol's Lisp
 value).  The default is @code{default-value}.
 
 You have to really understand the workings of Custom to use
@@ -441,7 +441,7 @@ those other variables already have their intended values.
 @end table
 
   It is useful to specify the @code{:require} keyword for an option
-that ``turns on'' a certain feature.  This causes Emacs to load the
+that turns on a certain feature.  This causes Emacs to load the
 feature, if it is not already loaded, whenever the option is set.
 @xref{Common Keywords}.  Here is an example, from the library
 @file{saveplace.el}:
@@ -723,7 +723,7 @@ simply atoms, which stand for themselves.  For example:
 @end example
 
 @noindent
-specifies that there are three ``known'' keys, namely @code{"foo"},
+specifies that there are three known keys, namely @code{"foo"},
 @code{"bar"} and @code{"baz"}, which will always be shown first.
 
 You may want to restrict the value type for specific keys, for
@@ -842,7 +842,7 @@ symbols, and symbols are not treated like other Lisp 
expressions.
 
 @item (radio @address@hidden)
 This is similar to @code{choice}, except that the choices are displayed
-using ``radio buttons'' rather than a menu.  This has the advantage of
+using radio buttons rather than a menu.  This has the advantage of
 displaying documentation for the choices when applicable and so is often
 a good choice for a choice between constant functions
 (@code{function-item} customization types).
@@ -1378,8 +1378,8 @@ the theme; this is the description shown when the user 
invokes the
 Themes*} buffer.
 
 Two special theme names are disallowed (using them causes an error):
address@hidden is a ``dummy'' theme that stores the user's direct
-customization settings, and @code{changed} is a ``dummy'' theme that
address@hidden is a dummy theme that stores the user's direct
+customization settings, and @code{changed} is a dummy theme that
 stores changes made outside of the Customize system.
 @end defmac
 
@@ -1422,7 +1422,7 @@ where the list entries have the same meanings as in
 @end defun
 
   In theory, a theme file can also contain other Lisp forms, which
-would be evaluated when loading the theme, but that is ``bad form''.
+would be evaluated when loading the theme, but that is bad form.
 To protect against loading themes containing malicious code, Emacs
 displays the source file and asks for confirmation from the user
 before loading any non-built-in theme for the first time.
@@ -1440,7 +1440,7 @@ it returns @code{nil}.
 @defvar custom-known-themes
 The value of this variable is a list of themes loaded into Emacs.
 Each theme is represented by a Lisp symbol (the theme name).  The
-default value of this variable is a list containing two ``dummy''
+default value of this variable is a list containing two dummy
 themes: @code{(user changed)}.  The @code{changed} theme stores
 settings made before any Custom themes are applied (e.g., variables
 set outside of Customize).  The @code{user} theme stores settings the
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index 47b2499..e82efbb 100644
--- a/doc/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -684,11 +684,11 @@ If @var{frame-number} is out of range, 
@code{backtrace-frame} returns
 @cindex debugging invalid Lisp syntax
 
   The Lisp reader reports invalid syntax, but cannot say where the real
-problem is.  For example, the error ``End of file during parsing'' in
+problem is.  For example, the error @samp{End of file during parsing} in
 evaluating an expression indicates an excess of open parentheses (or
 square brackets).  The reader detects this imbalance at the end of the
 file, but it cannot figure out where the close parenthesis should have
-been.  Likewise, ``Invalid read syntax: ")"'' indicates an excess close
+been.  Likewise, @samp{Invalid read syntax: ")"} indicates an excess close
 parenthesis or missing open parenthesis, but does not say where the
 missing parenthesis belongs.  How, then, to find what to change?
 
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 14e2cd3..452462a 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -126,7 +126,7 @@ it waits for input, or when the function @code{redisplay} 
is called.
 @cindex @samp{\} in display
 
   When a line of text extends beyond the right edge of a window, Emacs
-can @dfn{continue} the line (make it ``wrap'' to the next screen
+can @dfn{continue} the line (make it wrap to the next screen
 line), or @dfn{truncate} the line (limit it to one screen line).  The
 additional screen lines used to display a long text line are called
 @dfn{continuation} lines.  Continuation is not the same as filling;
@@ -138,7 +138,7 @@ boundary.  @xref{Filling}.
 indicate truncated and continued lines (@pxref{Fringes}).  On a text
 terminal, a @samp{$} in the rightmost column of the window indicates
 truncation; a @samp{\} on the rightmost column indicates a line that
-``wraps''.  (The display table can specify alternate characters to use
+wraps.  (The display table can specify alternate characters to use
 for this; @pxref{Display Tables}).
 
 @defopt truncate-lines
@@ -380,7 +380,7 @@ function.
 
 The arguments @var{min-value} and @var{max-value} should be numbers
 standing for the starting and final states of the operation.  For
-instance, an operation that ``scans'' a buffer should set these to the
+instance, an operation that scans a buffer should set these to the
 results of @code{point-min} and @code{point-max} correspondingly.
 @var{max-value} should be greater than @var{min-value}.
 
@@ -439,13 +439,13 @@ presented to the user.
 
 @defun progress-reporter-done reporter
 This function should be called when the operation is finished.  It
-prints the message of @var{reporter} followed by word ``done'' in the
+prints the message of @var{reporter} followed by word @samp{done} in the
 echo area.
 
 You should always call this function and not hope for
address@hidden to print ``100%''.  Firstly, it may
address@hidden to print @samp{100%}.  Firstly, it may
 never print it, there are many good reasons for this not to happen.
-Secondly, ``done'' is more explicit.
+Secondly, @samp{done} is more explicit.
 @end defun
 
 @defmac dotimes-with-progress-reporter (var count [result]) message 
address@hidden
@@ -500,13 +500,13 @@ facility combines successive identical messages.  It also 
combines
 successive related messages for the sake of two cases: question
 followed by answer, and a series of progress messages.
 
-  A ``question followed by an answer'' means two messages like the
+  A question followed by an answer has two messages like the
 ones produced by @code{y-or-n-p}: the first is @address@hidden,
 and the second is @address@hidden@var{answer}}.  The first
 message conveys no additional information beyond what's in the second,
 so logging the second message discards the first from the log.
 
-  A ``series of progress messages'' means successive messages like
+  A series of progress messages has successive messages like
 those produced by @code{make-progress-reporter}.  They have the form
 @address@hidden@var{how-far}}, where @var{base} is the same each
 time, while @var{how-far} varies.  Logging each message in the series
@@ -1419,7 +1419,7 @@ The return value is @var{overlay}.
 This is the only valid way to change the endpoints of an overlay.  Do
 not try modifying the markers in the overlay by hand, as that fails to
 update other vital data structures and can cause some overlays to be
-``lost''.
+lost.
 @end defun
 
 @defun remove-overlays &optional start end name value
@@ -1496,7 +1496,7 @@ foo
 @end example
 
   Emacs stores the overlays of each buffer in two lists, divided
-around an arbitrary ``center position''.  One list extends backwards
+around an arbitrary center position.  One list extends backwards
 through the buffer from that center position, and the other extends
 forwards from that center position.  The center position can be anywhere
 in the buffer.
@@ -1796,10 +1796,9 @@ overlays that specify property @var{prop} for the 
character at point:
 
 @defun overlays-in beg end
 This function returns a list of the overlays that overlap the region
address@hidden through @var{end}.  ``Overlap'' means that at least one
-character is contained within the overlay and also contained within the
-specified region; however, empty overlays (@pxref{Managing Overlays,
-empty overlay}) are included in the result if they are located at
address@hidden through @var{end}.  An overlay overlaps with a region if it
+contains one or more characters in the region; empty overlays
+(@pxref{Managing Overlays, empty overlay}) overlap if they are at
 @var{beg}, strictly between @var{beg} and @var{end}, or at @var{end}
 when @var{end} denotes the position at the end of the buffer.
 @end defun
@@ -2729,8 +2728,8 @@ Manual}.
 @item
 If the text lies within an overlay with a address@hidden @code{face}
 property, Emacs applies the face(s) specified by that property.  If
-the overlay has a @code{mouse-face} property and the mouse is ``near
-enough'' to the overlay, Emacs applies the face or face attributes
+the overlay has a @code{mouse-face} property and the mouse is near
+enough to the overlay, Emacs applies the face or face attributes
 specified by the @code{mouse-face} property instead.  @xref{Overlay
 Properties}.
 
@@ -2836,7 +2835,7 @@ remappings for face @var{face} in the current buffer.  
The remaining
 arguments, @var{specs}, should form either a list of face names, or a
 property list of attribute/value pairs.
 
-The return value is a Lisp object that serves as a ``cookie''; you can
+The return value is a Lisp object that serves as a cookie; you can
 pass this object as an argument to @code{face-remap-remove-relative}
 if you need to remove the remapping later.
 
@@ -2967,7 +2966,7 @@ If your Emacs Lisp program needs to assign some faces to 
text, it is
 often a good idea to use certain existing faces or inherit from them,
 rather than defining entirely new faces.  This way, if other users
 have customized the basic faces to give Emacs a certain look, your
-program will ``fit in'' without additional customization.
+program will fit in without additional customization.
 
   Some of the basic faces defined in Emacs are listed below.  In
 addition to these, you might want to make use of the Font Lock faces
@@ -2992,14 +2991,14 @@ has a bold @code{:weight} attribute), with all other 
attributes
 unspecified (and so given by @code{default}).
 
 @item shadow
-For ``dimmed out'' text.  For example, it is used for the ignored
+For dimmed-out text.  For example, it is used for the ignored
 part of a filename in the minibuffer (@pxref{Minibuffer File,,
 Minibuffers for File Names, emacs, The GNU Emacs Manual}).
 
 @item link
 @itemx link-visited
 For clickable text buttons that send the user to a different
-buffer or ``location''.
+buffer or location.
 
 @item highlight
 For stretches of text that should temporarily stand out.  For example,
@@ -3193,7 +3192,7 @@ encoding of the font.
 character codes.  An individual font cannot display the whole range of
 characters that Emacs supports, but a fontset can.  Fontsets have names,
 just as fonts do, and you can use a fontset name in place of a font name
-when you specify the ``font'' for a frame or a face.  Here is
+when you specify the font for a frame or a face.  Here is
 information about defining a fontset under Lisp program control.
 
 @defun create-fontset-from-fontset-spec fontset-spec &optional style-variant-p 
noerror
@@ -3481,13 +3480,13 @@ frame on which the fonts are to be displayed.  The 
optional argument
 maximum length of the returned list.  The optional argument
 @var{prefer}, if address@hidden, should be another font spec, which is
 used to control the order of the returned list; the returned font
-entities are sorted in order of decreasing ``closeness'' to that font
+entities are sorted in order of decreasing closeness to that font
 spec.
 @end defun
 
   If you call @code{set-face-attribute} and pass a font spec, font
 entity, or font name string as the value of the @code{:font}
-attribute, Emacs opens the best ``matching'' font that is available
+attribute, Emacs opens the best matching font that is available
 for display.  It then stores the corresponding font object as the
 actual value of the @code{:font} attribute for that face.
 
@@ -4230,21 +4229,21 @@ frames.
 @cindex right dividers
 @cindex bottom dividers
 
-Window dividers are bars drawn between a frame's windows.  A ``right''
+Window dividers are bars drawn between a frame's windows.  A right
 divider is drawn between a window and any adjacent windows on the right.
 Its width (thickness) is specified by the frame parameter
address@hidden  A ``bottom'' divider is drawn between a
address@hidden  A bottom divider is drawn between a
 window and adjacent windows on the bottom or the echo area.  Its width
 is specified by the frame parameter @code{bottom-divider-width}.  In
 either case, specifying a width of zero means to not draw such dividers.
 @xref{Layout Parameters}.
 
-   Technically, a right divider ``belongs'' to the window on its left,
+   Technically, a right divider belongs to the window on its left,
 which means that its width contributes to the total width of that
-window.  A bottom divider ``belongs'' to the window above it, which
+window.  A bottom divider belongs to the window above it, which
 means that its width contributes to the total height of that window.
 @xref{Window Sizes}.  When a window has both, a right and a bottom
-divider, the bottom divider ``prevails''.  This means that a bottom
+divider, the bottom divider prevails.  This means that a bottom
 divider is drawn over the full total width of its window while the right
 divider ends above the bottom divider.
 
@@ -4332,8 +4331,8 @@ display specification, the first overrides the rest.  
Replacing
 display specifications make most other display specifications
 irrelevant, since those don't apply to the replacement.
 
-  For replacing display specifications, ``the text that has the
-property'' means all the consecutive characters that have the same
+  For replacing display specifications, @dfn{the text that has the
+property} means all the consecutive characters that have the same
 Lisp object as their @code{display} property; these characters are
 replaced as a single unit.  If two characters have different Lisp
 objects as their @code{display} properties (i.e., objects which are
@@ -4387,8 +4386,10 @@ width.  @var{width} can also be a @dfn{pixel width} 
specification
 @item :relative-width @var{factor}
 Specifies that the width of the stretch should be computed from the
 first character in the group of consecutive characters that have the
-same @code{display} property.  The space width is the width of that
-character, multiplied by @var{factor}.
+same @code{display} property.  The space width is the pixel width of
+that character, multiplied by @var{factor}.  (On text-mode terminals,
+the ``pixel width'' of a character is usually 1, but it could be more
+for TABs and double-width CJK characters.)
 
 @item :align-to @var{hpos}
 Specifies that the space should be wide enough to reach @var{hpos}.
@@ -4559,7 +4560,7 @@ Here are the possibilities for @var{height}:
 @table @asis
 @item @code{(+ @var{n})}
 @c FIXME: Add an index for "step"?  --xfq
-This means to use a font that is @var{n} steps larger.  A ``step'' is
+This means to use a font that is @var{n} steps larger.  A @dfn{step} is
 defined by the set of available fonts---specifically, those that match
 what was otherwise specified for this text, in all attributes except
 height.  Each size for which a suitable font is available counts as
@@ -4836,7 +4837,7 @@ which algorithm.
 Specifies the Laplace edge detection algorithm, which blurs out small
 differences in color while highlighting larger differences.  People
 sometimes consider this useful for displaying the image for a
-``disabled'' button.
+disabled button.
 
 @item (edge-detection :matrix @var{matrix} :color-adjust @var{adjust})
 @cindex edge detection, images
@@ -4901,7 +4902,7 @@ $$\pmatrix{ 2 & -1 &  0 \cr
 @end ifnottex
 
 @item disabled
-Specifies transforming the image so that it looks ``disabled''.
+Specifies transforming the image so that it looks disabled.
 @end table
 
 @item :mask @var{mask}
@@ -5365,8 +5366,8 @@ This function inserts @var{image} in the current buffer 
at point, like
 @code{insert-image}, but splits the image into @address@hidden
 equally sized slices.
 
-If an image is inserted ``sliced'', Emacs displays each slice as a
-separate image, and allow more intuitive scrolling up/down, instead of
+Emacs displays each slice as a
+separate image, and allows more intuitive scrolling up/down, instead of
 jumping up/down the entire image when paging through a buffer that
 displays (large) images.
 @end defun
@@ -5443,7 +5444,7 @@ are multiple ``frames'' in the image.  At present, Emacs 
supports
 multiple frames for GIF, TIFF, and certain ImageMagick formats such as
 address@hidden
 
-The frames can be used either to represent multiple ``pages'' (this is
+The frames can be used either to represent multiple pages (this is
 usually the case with multi-frame TIFF files, for example), or to
 create animation (usually the case with multi-frame GIF files).
 
@@ -5666,7 +5667,7 @@ so that it's easy to define special-purpose types of 
buttons for
 specific tasks.
 
 @defun define-button-type name &rest properties
-Define a ``button type'' called @var{name} (a symbol).
+Define a button type called @var{name} (a symbol).
 The remaining arguments
 form a sequence of @var{property value} pairs, specifying default
 property values for buttons with this type (a button's type may be set
@@ -5819,7 +5820,7 @@ Return @code{t} if button-type @var{type} is a subtype of 
@var{supertype}.
 These are commands and functions for locating and operating on
 buttons in an Emacs buffer.
 
address@hidden is the command that a user uses to actually ``push''
address@hidden is the command that a user uses to actually push
 a button, and is bound by default in the button itself to @key{RET}
 and to @key{mouse-2} using a local keymap in the button's overlay or
 text properties.  Commands that are useful outside the buttons itself,
@@ -5885,7 +5886,7 @@ in the search, instead of starting at the next button.
   The Ewoc package constructs buffer text that represents a structure
 of Lisp objects, and updates the text to follow changes in that
 structure.  This is like the ``view'' component in the
-``model/view/controller'' design paradigm.  Ewoc means ``Emacs's
+``model--view--controller'' design paradigm.  Ewoc means ``Emacs's
 Widget for Object Collections''.
 
   An @dfn{ewoc} is a structure that organizes information required to
@@ -5949,7 +5950,7 @@ new value in its place, like so:
 
 @noindent
 You can also use, as the data element value, a Lisp object (list or
-vector) that is a container for the ``real'' value, or an index into
+vector) that is a container for the real value, or an index into
 some other structure.  The example (@pxref{Abstract Display Example})
 uses the latter approach.
 
@@ -5985,7 +5986,7 @@ Normally, a newline is automatically inserted after the 
header,
 the footer and every node's textual description.  If @var{nosep}
 is address@hidden, no newline is inserted.  This may be useful for
 displaying an entire ewoc on a single line, for example, or for
-making nodes ``invisible'' by arranging for @var{pretty-printer}
+making nodes invisible by arranging for @var{pretty-printer}
 to do nothing for those nodes.
 
 An ewoc maintains its text in the buffer that is current when
@@ -6105,7 +6106,7 @@ Any @var{args} are passed to @var{map-function}.
 @subsection Abstract Display Example
 
   Here is a simple example using functions of the ewoc package to
-implement a ``color components display'', an area in a buffer that
+implement a @dfn{color components} display, an area in a buffer that
 represents a vector of three integers (itself representing a 24-bit RGB
 value) in various ways.
 
@@ -6164,10 +6165,10 @@ The buffer is in Color Components mode."
 @end example
 
 @cindex controller part, model/view/controller
-  This example can be extended to be a ``color selection widget'' (in
-other words, the controller part of the ``model/view/controller''
+  This example can be extended to be a color selection widget (in
+other words, the ``controller'' part of the ``model--view--controller''
 design paradigm) by defining commands to modify @code{colorcomp-data}
-and to ``finish'' the selection process, and a keymap to tie it all
+and to finish the selection process, and a keymap to tie it all
 together conveniently.
 
 @smallexample
@@ -6417,9 +6418,9 @@ display the character @var{c} as those glyphs; 
@pxref{Glyphs}).
 
   @strong{Warning:} if you use the display table to change the display
 of newline characters, the whole buffer will be displayed as one long
-``line''.
+line.
 
-  The display table also has six ``extra slots'' which serve special
+  The display table also has six @dfn{extra slots} which serve special
 purposes.  Here is a table of their meanings; @code{nil} in any slot
 means to use the default for that slot, as stated below.
 
@@ -6533,10 +6534,8 @@ used when Emacs is displaying a buffer in a window with 
neither a
 window display table nor a buffer display table defined, or when Emacs
 is outputting text to the standard output or error streams.  Although its
 default is typically @code{nil}, in an interactive session if the
-locale cannot display curved quotes, or if the initial value of
address@hidden specifies a preference for ASCII, its
-default maps curved quotes to ASCII approximations.  @xref{Keys in
-Documentation}.
+terminal cannot display curved quotes, its default maps curved quotes
+to ASCII approximations.  @xref{Keys in Documentation}.
 @end defvar
 
 The @file{disp-table} library defines several functions for changing
@@ -6688,7 +6687,7 @@ address@hidden, non-printing characters @code{U+0080} to
 @samp{\230}).
 
 @item format-control
-Characters of Unicode General Category ``Cf'', such as @samp{U+200E}
+Characters of Unicode General Category [Cf], such as @samp{U+200E}
 (Left-to-Right Mark), but excluding characters that have graphic
 images, such as @samp{U+00AD} (Soft Hyphen).
 
@@ -6735,8 +6734,8 @@ capability (@samp{vb}).
 @end defopt
 
 @defvar ring-bell-function
-If this is address@hidden, it specifies how Emacs should ``ring the
-bell''.  Its value should be a function of no arguments.  If this is
+If this is address@hidden, it specifies how Emacs should ring the
+bell.  Its value should be a function of no arguments.  If this is
 address@hidden, it takes precedence over the @code{visible-bell}
 variable.
 @end defvar
@@ -6827,7 +6826,7 @@ follows the Unicode Bidirectional Algorithm (a.k.a.@: 
@acronym{UBA}),
 which is described in Annex #9 of the Unicode standard
 (@url{http://www.unicode.org/reports/tr9/}).  Emacs provides a ``Full
 Bidirectionality'' class implementation of the @acronym{UBA},
-consistent with the requirements of the Unicode Standard v7.0.
+consistent with the requirements of the Unicode Standard v8.0.
 
 @defvar bidi-display-reordering
 If the value of this buffer-local variable is address@hidden (the
@@ -6952,7 +6951,7 @@ The function returns the new buffer position as its value.
 when two strings with bidirectional content are juxtaposed in a
 buffer, or otherwise programmatically concatenated into a string of
 text.  A typical problematic case is when a buffer consists of
-sequences of text ``fields'' separated by whitespace or punctuation
+sequences of text fields separated by whitespace or punctuation
 characters, like Buffer Menu mode or Rmail Summary Mode.  Because the
 punctuation characters used as separators have @dfn{weak
 directionality}, they take on the directionality of surrounding text.
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
index 97bcf0d..96bb03b 100644
--- a/doc/lispref/edebug.texi
+++ b/doc/lispref/edebug.texi
@@ -281,6 +281,26 @@ can still stop the program by typing @kbd{S}, or any 
editing command.
 In general, the execution modes earlier in the above list run the
 program more slowly or stop sooner than the modes later in the list.
 
+When you enter a new Edebug level, Edebug will normally stop at the
+first instrumented function it encounters.  If you prefer to stop only
+at a break point, or not at all (for example, when gathering coverage
+data), change the value of @code{edebug-initial-mode} from its default
address@hidden to @code{go}, or @code{Go-nonstop}, or one of its other
+values (@pxref{Edebug Options}).  You can do this readily with
address@hidden C-a C-m} (@code{edebug-set-initial-mode}):
+
address@hidden Command edebug-set-initial-mode
address@hidden C-x C-a C-m
+This command, bound to @kbd{C-x C-a C-m}, sets
address@hidden  It prompts you for a key to indicate the
+mode.  You should enter one of the eight keys listed above, which sets
+the corresponding mode.
address@hidden deffn
+
+Note that you may reenter the same Edebug level several times if, for
+example, an instrumented function is called several times from one
+command.
+
 While executing or tracing, you can interrupt the execution by typing
 any Edebug command.  Edebug stops the program at the next stop point and
 then executes the command you typed.  For example, typing @kbd{t} during
@@ -300,13 +320,6 @@ executing a keyboard macro outside of Edebug does not 
affect commands
 inside Edebug.  This is usually an advantage.  See also the
 @code{edebug-continue-kbd-macro} option in @ref{Edebug Options}.
 
-When you enter a new Edebug level, the initial execution mode comes
-from the value of the variable @code{edebug-initial-mode}
-(@pxref{Edebug Options}).  By default, this specifies step mode.  Note
-that you may reenter the same Edebug level several times if, for
-example, an instrumented function is called several times from one
-command.
-
 @defopt edebug-sit-for-seconds
 This option specifies how many seconds to wait between execution steps
 in trace mode or continue mode.  The default is 1 second.
@@ -363,7 +376,7 @@ at point, rather than at the stop point.  If you want to 
execute one
 expression @emph{from the current stop point}, first type @kbd{w}
 (@code{edebug-where}) to move point there, and then type @kbd{f}.
 
-The @kbd{o} command continues ``out of'' an expression.  It places a
+The @kbd{o} command continues out of an expression.  It places a
 temporary breakpoint at the end of the sexp containing point.  If the
 containing sexp is a function definition itself, @kbd{o} continues until
 just before the last sexp in the definition.  If that is where you are
@@ -875,7 +888,7 @@ lines inserted.
 frequency.
 
   Coverage testing works by comparing the result of each expression with
-the previous result; each form in the program is considered ``covered''
+the previous result; each form in the program is considered covered
 if it has returned two different values since you began testing coverage
 in the current Emacs session.  Thus, to do coverage testing on your
 program, execute it under various conditions and note whether it behaves
@@ -908,7 +921,7 @@ earlier expression on the same line.
 
 The character @samp{=} following the count for an expression says that
 the expression has returned the same value each time it was evaluated.
-In other words, it is not yet ``covered'' for coverage testing purposes.
+In other words, it is not yet covered for coverage testing purposes.
 
 To clear the frequency count and coverage data for a definition,
 simply reinstrument it with @code{eval-defun}.
@@ -978,14 +991,14 @@ unless @code{edebug-continue-kbd-macro} is address@hidden
 @c This paragraph is not filled, because LaLiberte's conversion script
 @c needs an xref to be on just one line.
 When Edebug needs to display something (e.g., in trace mode), it saves
-the current window configuration from ``outside'' Edebug
+the current window configuration from outside Edebug
 (@pxref{Window Configurations}).  When you exit Edebug, it restores
 the previous window configuration.
 
 Emacs redisplays only when it pauses.  Usually, when you continue
 execution, the program re-enters Edebug at a breakpoint or after
 stepping, without pausing or reading input in between.  In such cases,
-Emacs never gets a chance to redisplay the ``outside'' configuration.
+Emacs never gets a chance to redisplay the outside configuration.
 Consequently, what you see is the same window configuration as the last
 time Edebug was active, with no interruption.
 
@@ -1563,7 +1576,8 @@ mode for Edebug when it is first activated.  Possible 
values are
 @code{step}, @code{next}, @code{go}, @code{Go-nonstop}, @code{trace},
 @code{Trace-fast}, @code{continue}, and @code{Continue-fast}.
 
-The default value is @code{step}.
+The default value is @code{step}.  This variable can be set
+interactively with @kbd{C-x C-a C-m} (@code{edebug-set-initial-mode}).
 @xref{Edebug Execution Modes}.
 @end defopt
 
@@ -1605,7 +1619,7 @@ and consider a macro of the form:
 If you instrument the @code{test} macro and step through it, then by
 default the result of the @code{symbol-function} call has numerous
 @code{edebug-after} and @code{edebug-before} forms, which can make it
-difficult to see the ``actual'' result.  If
+difficult to see the actual result.  If
 @code{edebug-unwrap-results} is address@hidden, Edebug tries to remove
 these forms from the result.
 @end defopt
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi
index 7b2b68a..5ca518e 100644
--- a/doc/lispref/elisp.texi
+++ b/doc/lispref/elisp.texi
@@ -453,7 +453,7 @@ Kinds of Forms
                               we find the real function via the symbol.
 * Function Forms::          Forms that call functions.
 * Macro Forms::             Forms that call macros.
-* Special Forms::           ``Special forms'' are idiosyncratic primitives,
+* Special Forms::           Special forms are idiosyncratic primitives,
                               most of them extremely important.
 * Autoloading::             Functions set up to load files
                               containing their real definitions.
@@ -485,7 +485,7 @@ Errors
 Variables
 
 * Global Variables::        Variable values that exist permanently, everywhere.
-* Constant Variables::      Certain ``variables'' have values that never 
change.
+* Constant Variables::      Variables that never change.
 * Local Variables::         Variable values that exist only temporarily.
 * Void Variables::          Symbols that lack values.
 * Defining Variables::      A definition says a symbol is used as a variable.
@@ -599,7 +599,7 @@ Loading
 * Repeated Loading::        Precautions about loading a file twice.
 * Named Features::          Loading a library if it isn't already loaded.
 * Where Defined::           Finding which file defined a certain symbol.
-* Unloading::               How to ``unload'' a library that was loaded.
+* Unloading::               How to unload a library that was loaded.
 * Hooks for Loading::       Providing code to be run when
                               particular libraries are loaded.
 
@@ -990,7 +990,7 @@ Buffers
                               is visited.
 * Buffer Modification::     A buffer is @dfn{modified} if it needs to be saved.
 * Modification Time::       Determining whether the visited file was changed
-                              ``behind Emacs's back''.
+                              behind Emacs's back.
 * Read Only Buffers::       Modifying text is not allowed in a
                               read-only buffer.
 * Buffer List::             How to look at all the existing buffers.
@@ -1117,8 +1117,8 @@ Markers
 * Marker Insertion Types::  Two ways a marker can relocate when you
                               insert where it points.
 * Moving Markers::          Moving the marker to a new buffer or position.
-* The Mark::                How ``the mark'' is implemented with a marker.
-* The Region::              How to access ``the region''.
+* The Mark::                How the mark is implemented with a marker.
+* The Region::              How to access the region.
 
 Text
 
@@ -1152,7 +1152,7 @@ Text
 * Base 64::                 Conversion to or from base 64 encoding.
 * Checksum/Hash::           Computing cryptographic hashes.
 * Parsing HTML/XML::        Parsing HTML and XML.
-* Atomic Changes::          Installing several buffer changes ``atomically''.
+* Atomic Changes::          Installing several buffer changes atomically.
 * Change Hooks::            Supplying functions to be run when text is changed.
 
 The Kill Ring
diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi
index f253e70..067dbd2 100644
--- a/doc/lispref/eval.texi
+++ b/doc/lispref/eval.texi
@@ -104,9 +104,9 @@ interpretation.  @xref{Command Loop}.
   A Lisp object that is intended to be evaluated is called a
 @dfn{form} (or an @dfn{expression}).  How Emacs evaluates a form
 depends on its data type.  Emacs has three different kinds of form
-that are evaluated differently: symbols, lists, and ``all other
-types''.  This section describes all three kinds, one by one, starting
-with the ``all other types'' which are self-evaluating forms.
+that are evaluated differently: symbols, lists, and all other
+types.  This section describes all three kinds, one by one, starting
+with the other types, which are self-evaluating forms.
 
 @menu
 * Self-Evaluating Forms::   Forms that evaluate to themselves.
@@ -116,7 +116,7 @@ with the ``all other types'' which are self-evaluating 
forms.
                               we find the real function via the symbol.
 * Function Forms::          Forms that call functions.
 * Macro Forms::             Forms that call macros.
-* Special Forms::           ``Special forms'' are idiosyncratic primitives,
+* Special Forms::           Special forms are idiosyncratic primitives,
                               most of them extremely important.
 * Autoloading::             Functions set up to load files
                               containing their real definitions.
@@ -146,7 +146,7 @@ contents unchanged.
      @result{} 123
 @end group
 @group
-(eval '123)        ; @r{Evaluated ``by hand''---result is the same.}
+(eval '123)        ; @r{Evaluated "by hand"---result is the same.}
      @result{} 123
 @end group
 @group
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index 91b0c96..db2ecc0 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -55,7 +55,7 @@ to locale @code{system-messages-locale}, and decoded using 
coding system
 
   Visiting a file means reading a file into a buffer.  Once this is
 done, we say that the buffer is @dfn{visiting} that file, and call the
-file ``the visited file'' of the buffer.
+file @dfn{the visited file} of the buffer.
 
   A file and a buffer are two different things.  A file is information
 recorded permanently in the computer (unless you delete it).  A
@@ -692,7 +692,7 @@ stored in the same directory as the file you are editing.  
(On file
 systems that do not support symbolic links, a regular file is used.)
 
   When you access files using NFS, there may be a small probability that
-you and another user will both lock the same file ``simultaneously''.
+you and another user will both lock the same file simultaneously.
 If this happens, it is possible for the two users to make changes
 simultaneously, but Emacs will still warn the user who saves second.
 Also, the detection of modification of a buffer visiting a file changed
@@ -939,7 +939,7 @@ $ ls -l diffs
 @cindex MS-DOS and file modes
 @cindex file modes and MS-DOS
 @strong{MS-DOS note:} On MS-DOS, there is no such thing as an
-``executable'' file mode bit.  So @code{file-modes} considers a file
+executable file mode bit.  So @code{file-modes} considers a file
 executable if its name ends in one of the standard executable
 extensions, such as @file{.com}, @file{.bat}, @file{.exe}, and some
 others.  Files that begin with the Unix-standard @samp{#!} signature,
@@ -1089,7 +1089,7 @@ If you may need to follow symbolic links preceding 
@samp{..}@:
 appearing as a name component, call @code{file-truename} without prior
 direct or indirect calls to @code{expand-file-name}.  Otherwise, the
 file name component immediately preceding @samp{..} will be
-``simplified away'' before @code{file-truename} is called.  To
+simplified away before @code{file-truename} is called.  To
 eliminate the need for a call to @code{expand-file-name},
 @code{file-truename} handles @samp{~} in the same way that
 @code{expand-file-name} does.  @xref{File Name Expansion,, Functions
@@ -1358,7 +1358,7 @@ On some operating systems, each file can be associated 
with arbitrary
 and setting two specific sets of extended file attributes: Access
 Control Lists (ACLs) and SELinux contexts.  These extended file
 attributes are used, on some systems, to impose more sophisticated
-file access controls than the basic ``Unix-style'' permissions
+file access controls than the basic Unix-style permissions
 discussed in the previous sections.
 
 @cindex access control list
@@ -1509,8 +1509,8 @@ replaces it with its (recursive) target.
 @cindex file with multiple names
 @cindex file hard link
 This function gives the file named @var{oldname} the additional name
address@hidden  This means that @var{newname} becomes a new ``hard
-link'' to @var{oldname}.
address@hidden  This means that @var{newname} becomes a new hard
+link to @var{oldname}.
 
 In the first part of the following example, we list two files,
 @file{foo} and @file{foo3}.
@@ -1687,7 +1687,7 @@ Emacs and its subprocesses.  Every file created with 
Emacs initially
 has these permissions, or a subset of them (@code{write-region} will
 not grant execute permissions even if the default file permissions
 allow execution).  On Unix and GNU/Linux, the default permissions are
-given by the bitwise complement of the ``umask'' value.
+given by the bitwise complement of the @samp{umask} value.
 
 The argument @var{mode} should be an integer which specifies the
 permissions, similar to @code{set-file-modes} above.  Only the lowest
@@ -1908,7 +1908,7 @@ return value, but backup version numbers are kept.
 @end defun
 
 @defun file-name-extension filename &optional period
-This function returns @var{filename}'s final ``extension'', if any,
+This function returns @var{filename}'s final extension, if any,
 after applying @code{file-name-sans-versions} to remove any
 version/backup part.  The extension, in a file name, is the part that
 follows the last @samp{.} in the last name component (minus any
@@ -1918,7 +1918,7 @@ This function returns @code{nil} for extensionless file 
names such as
 @file{foo}.  It returns @code{""} for null extensions, as in
 @file{foo.}.  If the last component of a file name begins with a
 @samp{.}, that @samp{.}  doesn't count as the beginning of an
-extension.  Thus, @file{.emacs}'s ``extension'' is @code{nil}, not
+extension.  Thus, @file{.emacs}'s extension is @code{nil}, not
 @samp{.emacs}.
 
 If @var{period} is address@hidden, then the returned value includes
@@ -2198,7 +2198,7 @@ In some cases, a leading @samp{..} component can remain 
in the output:
 
 @noindent
 This is for the sake of filesystems that have the concept of a
-``superroot'' above the root directory @file{/}.  On other filesystems,
+superroot above the root directory @file{/}.  On other filesystems,
 @file{/../} is interpreted exactly the same as @file{/}.
 
 Note that @code{expand-file-name} does @emph{not} expand environment
@@ -2257,7 +2257,7 @@ This function replaces environment variable references in
 @var{filename} with the environment variable values.  Following
 standard Unix shell syntax, @samp{$} is the prefix to substitute an
 environment variable value.  If the input contains @samp{$$}, that is
-converted to @samp{$}; this gives the user a way to ``quote'' a
+converted to @samp{$}; this gives the user a way to quote a
 @samp{$}.
 
 The environment variable name is the series of alphanumeric characters
@@ -2619,7 +2619,7 @@ that can be read.
 
 @defun directory-files-recursively directory match &optional 
include-directories
 Return all files under @var{directory} whose file names match
address@hidden recursively.  The file names are returned ``depth first'',
address@hidden recursively.  The file names are returned depth first,
 meaning that contents of sub-directories are returned before contents
 of the directories.  If @var{include-directories} is address@hidden,
 also return directory names that have matching names.
@@ -2854,6 +2854,7 @@ first, before handlers for jobs such as remote file 
access.
 @code{file-name-nondirectory},
 @code{file-name-sans-versions}, @code{file-newer-than-file-p},
 @code{file-notify-add-watch}, @code{file-notify-rm-watch},
address@hidden,
 @code{file-ownership-preserved-p},
 @code{file-readable-p}, @code{file-regular-p},
 @code{file-remote-p}, @code{file-selinux-context},
@@ -2907,6 +2908,7 @@ first, before handlers for jobs such as remote file 
access.
 @address@hidden,
 @code{file-name-sans-versions}, @code{file-newer-than-file-p},
 @code{file-notify-add-watch}, @code{file-notify-rm-watch},
address@hidden,
 @address@hidden,
 @code{file-readable-p}, @code{file-regular-p},
 @code{file-remote-p}, @code{file-selinux-context},
@@ -2943,7 +2945,7 @@ unlocking the buffer if it is locked.
 possibly others to be added in the future.  It need not implement all
 these operations itself---when it has nothing special to do for a
 certain operation, it can reinvoke the primitive, to handle the
-operation ``in the usual way''.  It should always reinvoke the primitive
+operation in the usual way.  It should always reinvoke the primitive
 for an operation it does not recognize.  Here's one way to do this:
 
 @smallexample
@@ -2976,7 +2978,7 @@ each have handlers.
   Handlers that don't really do anything special for actual access to the
 file---such as the ones that implement completion of host names for
 remote file names---should have a address@hidden @code{safe-magic}
-property.  For instance, Emacs normally ``protects'' directory names
+property.  For instance, Emacs normally protects directory names
 it finds in @code{PATH} from becoming magic, if they look like magic
 file names, by prefixing them with @samp{/:}.  But if the handler that
 would be used for them has a address@hidden @code{safe-magic}
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index 16fc495..3ae3308 100644
--- a/doc/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -262,7 +262,7 @@ variable, or by the @samp{--display} option (@pxref{Initial 
Options,,,
 emacs, The GNU Emacs Manual}).  Emacs can connect to other X displays
 via the command @code{make-frame-on-display}.  Each X display has its
 own selected frame and its own minibuffer windows; however, only one
-of those frames is address@hidden selected frame'' at any given moment
+of those frames is @emph{the} selected frame at any given moment
 (@pxref{Input Focus}).  Emacs can even connect to other text
 terminals, by interacting with the @command{emacsclient} program.
 @xref{Emacs Server,,, emacs, The GNU Emacs Manual}.
@@ -294,8 +294,8 @@ This function creates and returns a new frame on 
@var{display}, taking
 the other frame parameters from the alist @var{parameters}.
 @var{display} should be the name of an X display (a string).
 
-Before creating the frame, this function ensures that Emacs is ``set
-up'' to display graphics.  For instance, if Emacs has not processed X
+Before creating the frame, this function ensures that Emacs is set
+up to display graphics.  For instance, if Emacs has not processed X
 resources (e.g., if it was started on a text terminal), it does so at
 this time.  In all other respects, this function behaves like
 @code{make-frame} (@pxref{Creating Frames}).
@@ -336,7 +336,7 @@ on that display (@pxref{Deleting Frames}).
 @end defun
 
 @cindex multi-monitor
-  On some ``multi-monitor'' setups, a single X display outputs to more
+  On some multi-monitor setups, a single X display outputs to more
 than one physical monitor.  You can use the functions
 @code{display-monitor-attributes-list} and @code{frame-monitor-attributes}
 to obtain information about such setups.
@@ -358,7 +358,7 @@ that, if the monitor is not the primary monitor, some of the
 coordinates might be negative.
 
 @item workarea
-Position of the top-left corner and size of the work area (``usable''
+Position of the top-left corner and size of the work area (usable
 space) in pixels as @samp{(@var{x} @var{y} @var{width} @var{height})}.
 This may be different from @samp{geometry} in that space occupied by
 various window manager features (docks, taskbars, etc.)@: may be
@@ -489,7 +489,7 @@ of the frame.  The @dfn{outer width} and @dfn{outer height} 
of the frame
 specify the size of that rectangle.
 
 @cindex outer position
-The upper left corner of the outer frame (indicated by ``(0)'' in the
+The upper left corner of the outer frame (indicated by @samp{(0)} in the
 drawing above) is the @dfn{outer position} or the frame.  It is
 specified by and settable via the @code{left} and @code{top} frame
 parameters (@pxref{Position Parameters}) as well as the functions
@@ -514,7 +514,7 @@ on most platforms it is not covered here.
 The @dfn{title bar} is also part of the window manager's decorations and
 typically displays the title of the frame (@pxref{Frame Titles}) as well
 as buttons for minimizing, maximizing and deleting the frame.  The title
-bar is usually not displayed on ``fullboth'' (@pxref{Size Parameters})
+bar is usually not displayed on fullboth (@pxref{Size Parameters})
 or tooltip frames.  Title bars don't exist for text terminal frames.
 
 @item Menu Bar
@@ -689,11 +689,11 @@ Optional argument @var{type} specifies the type of the 
edges to return:
 @var{frame}, @code{native-edges} (or @code{nil}) means to return its
 native edges and @code{inner-edges} means to return its inner edges.
 
-Notice that the ``pixels at the positions'' @var{bottom} and @var{right}
+Notice that the pixels at the positions @var{bottom} and @var{right}
 lie immediately outside the corresponding frame.  This means that if you
 have, for example, two side-by-side frames positioned such that the
 right outer edge of the frame on the left equals the left outer edge of
-the frame on the right, the pixels ``representing'' that edge are part
+the frame on the right, the pixels representing that edge are part
 of the frame on the right.
 @end defun
 
@@ -708,7 +708,7 @@ of the frame on the right.
 @cindex default height of character
 Each frame has a @dfn{default font} which specifies the default
 character size for that frame.  This size is meant when retrieving or
-changing the size of a frame in terms of ``columns'' or ``lines''
+changing the size of a frame in terms of columns or lines
 (@pxref{Size Parameters}).  It is also used when resizing (@pxref{Window
 Sizes}) or splitting (@pxref{Splitting Windows}) windows.
 
@@ -841,7 +841,7 @@ of its character size, however, may: be ignored, cause a 
rounding
 (GTK+), or be accepted (Lucid, Motif, MS-Windows).
 
 With some window managers you may have to set this to address@hidden in
-order to make a frame appear truly ``maximized'' or ``fullscreen''.
+order to make a frame appear truly maximized or full-screen.
 @end defopt
 
 @defun set-frame-size frame width height pixelwise
@@ -867,7 +867,7 @@ actual height of the frame.  This is only useful on text 
terminals.
 Using a smaller height than the terminal actually implements may be
 useful to reproduce behavior observed on a smaller screen, or if the
 terminal malfunctions when using its whole screen.  Setting the frame
-height ``for real'' does not always work, because knowing the correct
+height directly does not always work, because knowing the correct
 actual size may be necessary for correct cursor positioning on
 text terminals.
 
@@ -914,7 +914,7 @@ resize the frame's outer size, hence this will alter the 
number of
 displayed lines.
 
    Occasionally, such @dfn{implied frame resizing} may be unwanted, for
-example, when the frame is maximized or made fullscreen (where it's
+example, when the frame is maximized or made full-screen (where it's
 turned off by default).  In other cases you can disable implied resizing
 with the following option:
 
@@ -1277,44 +1277,45 @@ the @code{user-position} parameter (@pxref{Position 
Parameters,
 user-position}) does for the position parameters @code{top} and
 @code{left}.
 
address@hidden full-screen frames
address@hidden fullboth frames
address@hidden fullheight frames
address@hidden fullwidth frames
address@hidden maximized frames
 @vindex fullscreen, a frame parameter
 @item fullscreen
-Specify that width, height or both shall be maximized.  The value
address@hidden specifies that width shall be as wide as possible.  The
-value @code{fullheight} specifies that height shall be as tall as
-possible.  The value @code{fullboth} specifies that both the width and
-the height shall be set to the size of the screen.  The value
address@hidden specifies that the frame shall be maximized.
-
-The difference between @code{maximized} and @code{fullboth} is that a
-maximized frame usually keeps its title bar and the buttons for resizing
+This parameter specifies whether to maximize the frame's width, height
+or both.  Its value can be @code{fullwidth}, @code{fullheight},
address@hidden, or @code{maximized}.  A @dfn{fullwidth} frame is as
+wide as possible, a @dfn{fullheight} frame is as tall as possible, and
+a @dfn{fullboth} frame is both as wide and as tall as possible.  A
address@hidden frame is like a ``fullboth'' frame, except that it usually
+keeps its title bar and the buttons for resizing
 and closing the frame.  Also, maximized frames typically avoid hiding
-any task bar or panels displayed on the desktop.  ``Fullboth'' frames,
-on the other hand, usually omit the title bar and occupy the entire
+any task bar or panels displayed on the desktop.  A ``fullboth'' frame,
+on the other hand, usually omits the title bar and occupies the entire
 available screen space.
 
-``Fullheight'' and ``fullwidth'' frames are more similar to maximized
+Full-height and full-width frames are more similar to maximized
 frames in this regard.  However, these typically display an external
 border which might be absent with maximized frames.  Hence the heights
-of maximized and fullheight frames and the widths of maximized and
-fullwidth frames often differ by a few pixels.
+of maximized and full-height frames and the widths of maximized and
+full-width frames often differ by a few pixels.
 
 With some window managers you may have to customize the variable
 @code{frame-resize-pixelwise} (@pxref{Size and Position}) in order to
-make a frame truly appear ``maximized'' or ``fullscreen''.  Moreover,
+make a frame truly appear maximized or full-screen.  Moreover,
 some window managers might not support smooth transition between the
-various fullscreen or maximization states.  Customizing the variable
+various full-screen or maximization states.  Customizing the variable
 @code{x-frame-normalize-before-maximize} can help to overcome that.
 
 @vindex fullscreen-restore, a frame parameter
 @item fullscreen-restore
-This parameter specifies the desired ``fullscreen'' state of the frame
+This parameter specifies the desired fullscreen state of the frame
 after invoking the @code{toggle-frame-fullscreen} command (@pxref{Frame
 Commands,,, emacs, The GNU Emacs Manual}) in the ``fullboth'' state.
 Normally this parameter is installed automatically by that command when
 toggling the state to fullboth.  If, however, you start Emacs in the
-fullboth state, you have to specify the desired behavior in your initial
+``fullboth'' state, you have to specify the desired behavior in your initial
 file as, for example
 
 @example
@@ -1575,12 +1576,25 @@ means use a standard modification of the usual cursor 
type (solid box
 becomes hollow box, and bar becomes a narrower bar).
 @end defopt
 
address@hidden x-stretch-cursor
+This variable controls the width of the block cursor displayed on
+extra-wide glyphs such as a tab or a stretch of white space.  By
+default, the block cursor is only as wide as the font's default
+character, and will not cover all of the width of the glyph under it
+if that glyph is extra-wide.  A address@hidden value of this variable
+means draw the block cursor as wide as the glyph under it.  The
+default value is @code{nil}.
+
+This variable has no effect on text-mode frames, since the text-mode
+cursor is drawn by the terminal out of Emacs's control.
address@hidden defopt
+
 @defopt blink-cursor-alist
 This variable specifies how to blink the cursor.  Each element has the
 form @code{(@var{on-state} . @var{off-state})}.  Whenever the cursor
 type equals @var{on-state} (comparing using @code{equal}), the
 corresponding @var{off-state} specifies what the cursor looks like
-when it blinks ``off''.  Both @var{on-state} and @var{off-state}
+when it blinks off.  Both @var{on-state} and @var{off-state}
 should be suitable values for the @code{cursor-type} frame parameter.
 
 There are various defaults for how to blink each type of cursor, if
@@ -1631,7 +1645,7 @@ used instead.
 @vindex screen-gamma, a frame parameter
 @item screen-gamma
 @cindex gamma correction
-If this is a number, Emacs performs ``gamma correction'' which adjusts
+If this is a number, Emacs performs gamma correction which adjusts
 the brightness of all colors.  The value should be the screen gamma of
 your display.
 
@@ -1666,8 +1680,8 @@ variable, Emacs uses the latter.  By default,
 @code{frame-alpha-lower-limit} is 20.
 
 The @code{alpha} frame parameter can also be a cons cell
address@hidden(@samp{active} . @samp{inactive})}, where @samp{active} is the
-opacity of the frame when it is selected, and @samp{inactive} is the
address@hidden(@var{active} . @var{inactive})}, where @var{active} is the
+opacity of the frame when it is selected, and @var{inactive} is the
 opacity when it is not selected.
 @end table
 
@@ -1781,7 +1795,7 @@ symbol) of @var{terminal}.  If @var{terminal} has no 
setting for
 @end defun
 
 @defun set-terminal-parameter terminal parameter value
-This function sets the parameter @var{parm} of @var{terminal} to the
+This function sets the parameter @var{parameter} of @var{terminal} to the
 specified @var{value}, and returns the previous value of that
 parameter.
 @end defun
@@ -1903,13 +1917,13 @@ internals of Emacs.
 @defun visible-frame-list
 This function returns a list of just the currently visible frames.
 @xref{Visibility of Frames}.  Frames on text terminals always count as
-``visible'', even though only the selected one is actually displayed.
+visible, even though only the selected one is actually displayed.
 @end defun
 
 @defun next-frame &optional frame minibuf
 This function lets you cycle conveniently through all the frames on
 the current display from an arbitrary starting point.  It returns the
-``next'' frame after @var{frame} in the cycle.  If @var{frame} is
+next frame after @var{frame} in the cycle.  If @var{frame} is
 omitted or @code{nil}, it defaults to the selected frame (@pxref{Input
 Focus}).
 
@@ -1981,7 +1995,7 @@ window always resides on the selected frame.
 
 When Emacs displays its frames on several terminals (@pxref{Multiple
 Terminals}), each terminal has its own selected frame.  But only one
-of these is address@hidden selected frame'': it's the frame that belongs
+of these is @emph{the} selected frame: it's the frame that belongs
 to the terminal from which the most recent input came.  That is, when
 Emacs runs a command that came from a certain terminal, the selected
 frame is the one of that terminal.  Since Emacs runs only a single
@@ -2001,7 +2015,7 @@ way, Emacs automatically keeps track of which frame has 
the focus.  To
 explicitly switch to a different frame from a Lisp function, call
 @code{select-frame-set-input-focus}.
 
-Lisp programs can also switch frames ``temporarily'' by calling the
+Lisp programs can also switch frames temporarily by calling the
 function @code{select-frame}.  This does not alter the window system's
 concept of focus; rather, it escapes from the window manager's control
 until that control is somehow reasserted.
@@ -2130,7 +2144,7 @@ This function returns the visibility status of frame 
@var{frame}.  The
 value is @code{t} if @var{frame} is visible, @code{nil} if it is
 invisible, and @code{icon} if it is iconified.
 
-On a text terminal, all frames are considered ``visible'' for the
+On a text terminal, all frames are considered visible for the
 purposes of this function, even though only one frame is displayed.
 @xref{Raising and Lowering}.
 @end defun
@@ -2891,7 +2905,7 @@ If you specify them, the key is
 @defvar x-resource-class
 This variable specifies the application name that @code{x-get-resource}
 should look up.  The default value is @code{"Emacs"}.  You can examine X
-resources for application names other than ``Emacs'' by binding this
+resources for other application names by binding this
 variable to some other string, around a call to @code{x-get-resource}.
 @end defvar
 
@@ -2994,14 +3008,14 @@ way that's
 different in appearance than the default face, and
 
 @item
-``close in spirit'' to what the attributes specify, if not exact.
+close in spirit to what the attributes specify, if not exact.
 @end enumerate
 
 Point (2) implies that a @code{:weight black} attribute will be
 satisfied by any display that can display bold, as will
 @code{:foreground "yellow"} as long as some yellowish color can be
 displayed, but @code{:slant italic} will @emph{not} be satisfied by
-the tty display code's automatic substitution of a ``dim'' face for
+the tty display code's automatic substitution of a dim face for
 italic.
 @end defun
 
@@ -3026,7 +3040,7 @@ This function returns the number of screens associated 
with the display.
 This function returns the height of the screen in pixels.
 On a character terminal, it gives the height in characters.
 
-For graphical terminals, note that on ``multi-monitor'' setups this
+For graphical terminals, note that on multi-monitor setups this
 refers to the pixel height for all physical monitors associated with
 @var{display}.  @xref{Multiple Terminals}.
 @end defun
@@ -3035,7 +3049,7 @@ refers to the pixel height for all physical monitors 
associated with
 This function returns the width of the screen in pixels.
 On a character terminal, it gives the width in characters.
 
-For graphical terminals, note that on ``multi-monitor'' setups this
+For graphical terminals, note that on multi-monitor setups this
 refers to the pixel width for all physical monitors associated with
 @var{display}.  @xref{Multiple Terminals}.
 @end defun
@@ -3044,7 +3058,7 @@ refers to the pixel width for all physical monitors 
associated with
 This function returns the height of the screen in millimeters,
 or @code{nil} if Emacs cannot get that information.
 
-For graphical terminals, note that on ``multi-monitor'' setups this
+For graphical terminals, note that on multi-monitor setups this
 refers to the height for all physical monitors associated with
 @var{display}.  @xref{Multiple Terminals}.
 @end defun
@@ -3053,7 +3067,7 @@ refers to the height for all physical monitors associated 
with
 This function returns the width of the screen in millimeters,
 or @code{nil} if Emacs cannot get that information.
 
-For graphical terminals, note that on ``multi-monitor'' setups this
+For graphical terminals, note that on multi-monitor setups this
 refers to the width for all physical monitors associated with
 @var{display}.  @xref{Multiple Terminals}.
 @end defun
@@ -3120,7 +3134,7 @@ MS-Windows, this is the version of the Windows OS.
 @end defun
 
 @defun x-server-vendor &optional display
-This function returns the ``vendor'' that provided the window system
+This function returns the vendor that provided the window system
 software (as a string).  On GNU and Unix systems this really means
 whoever distributes the X server.  On MS-Windows this is the vendor ID
 string of the Windows OS (Microsoft).
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index a853d2f..8835667 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -1,4 +1,4 @@
address@hidden -*-texinfo-*-
address@hidden -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
 @c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
@@ -118,7 +118,7 @@ Components}); such a @dfn{named command} can be invoked with
 
 @item closure
 A function object that is much like a lambda expression, except that
-it also encloses an ``environment'' of lexical variable bindings.
+it also encloses an environment of lexical variable bindings.
 @xref{Closures}.
 
 @item byte-code function
@@ -368,7 +368,7 @@ This is what @code{substring} does; @code{nil} as the third 
argument to
 @quotation
 @b{Common Lisp note:} Common Lisp allows the function to specify what
 default value to use when an optional argument is omitted; Emacs Lisp
-always uses @code{nil}.  Emacs Lisp does not support ``supplied-p''
+always uses @code{nil}.  Emacs Lisp does not support @code{supplied-p}
 variables that tell you whether an argument was explicitly passed.
 @end quotation
 
@@ -660,7 +660,7 @@ already been evaluated.
 
 The argument @var{function} must be either a Lisp function or a
 primitive function.  Special forms and macros are not allowed, because
-they make sense only when given the ``unevaluated'' argument
+they make sense only when given the unevaluated argument
 expressions.  @code{funcall} cannot provide these because, as we saw
 above, it never knows them in the first place.
 
@@ -912,7 +912,7 @@ This macro returns an anonymous function with argument list
 @var{args}, documentation string @var{doc} (if any), interactive spec
 @var{interactive} (if any), and body forms given by @var{body}.
 
-In effect, this macro makes @code{lambda} forms ``self-quoting'':
+In effect, this macro makes @code{lambda} forms self-quoting:
 evaluating a form whose @sc{car} is @code{lambda} yields the form
 itself:
 
@@ -1133,7 +1133,7 @@ argument list and body forms as the remaining elements:
 
 @noindent
 However, the fact that the internal structure of a closure is
-``exposed'' to the rest of the Lisp world is considered an internal
+exposed to the rest of the Lisp world is considered an internal
 implementation detail.  For this reason, we recommend against directly
 examining or altering the structure of closure objects.
 
@@ -1720,7 +1720,7 @@ performed later on in the same file, just like macros.
 @section The @code{declare} Form
 @findex declare
 
-  @code{declare} is a special macro which can be used to add ``meta''
+  @code{declare} is a special macro which can be used to add meta
 properties to a function or macro: for example, marking it as
 obsolete, or giving its forms a special @key{TAB} indentation
 convention in Emacs Lisp mode.
@@ -1821,7 +1821,7 @@ example, byte-compiling @file{fortran.el} used to warn:
 
 @example
 In end of data:
-fortran.el:2152:1:Warning: the function `gud-find-c-expr' is not
+fortran.el:2152:1:Warning: the function ‘gud-find-c-expr’ is not
     known to be defined.
 @end example
 
@@ -1912,7 +1912,7 @@ list of buffer-local bindings.
 Being quick and simple, @code{unsafep} does a very light analysis and
 rejects many Lisp expressions that are actually safe.  There are no
 known cases where @code{unsafep} returns @code{nil} for an unsafe
-expression.  However, a ``safe'' Lisp expression can return a string
+expression.  However, a safe Lisp expression can return a string
 with a @code{display} property, containing an associated Lisp
 expression to be executed after the string is inserted into a buffer.
 This associated expression can be a virus.  In order to be safe, you
diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi
index 9d60cc3..22b7217 100644
--- a/doc/lispref/hash.texi
+++ b/doc/lispref/hash.texi
@@ -31,10 +31,10 @@ the way two alists can share a common tail.
 with a series of functions for operating on them.  Hash tables have a
 special printed representation, which consists of @samp{#s} followed
 by a list specifying the hash table properties and contents.
address@hidden Hash}.  (Note that the term ``hash notation'', which
-refers to the initial @samp{#} character used in the printed
address@hidden Hash}.
+(Hash notation, the initial @samp{#} character used in the printed
 representations of objects with no read representation, has nothing to
-do with the term ``hash table''.  @xref{Printed Representation}.)
+do with hash tables.  @xref{Printed Representation}.)
 
   Obarrays are also a kind of hash table, but they are a different type
 of object and are used only for recording interned symbols
@@ -71,16 +71,16 @@ alternatives:
 
 @table @code
 @item eql
-Keys which are numbers are ``the same'' if they are @code{equal}, that
+Keys which are numbers are the same if they are @code{equal}, that
 is, if they are equal in value and either both are integers or both
 are floating point; otherwise, two distinct objects are never
-``the same''.
+the same.
 
 @item eq
-Any two distinct Lisp objects are ``different'' as keys.
+Any two distinct Lisp objects are different as keys.
 
 @item equal
-Two Lisp objects are ``the same'', as keys, if they are equal
+Two Lisp objects are the same, as keys, if they are equal
 according to @code{equal}.
 @end table
 
@@ -128,7 +128,7 @@ doing that takes some extra time.
 The default size is 65.
 
 @item :rehash-size @var{rehash-size}
-When you add an association to a hash table and the table is ``full'',
+When you add an association to a hash table and the table is full,
 it grows automatically.  This value specifies how to make the hash table
 larger, at that time.
 
@@ -141,10 +141,10 @@ number.
 The default value is 1.5.
 
 @item :rehash-threshold @var{threshold}
-This specifies the criterion for when the hash table is ``full'' (so
+This specifies the criterion for when the hash table is full (so
 it should be made larger).  The value, @var{threshold}, should be a
 positive floating-point number, no greater than 1.  The hash table is
-``full'' whenever the actual number of entries exceeds this fraction
+full whenever the actual number of entries exceeds this fraction
 of the nominal size.  The default for @var{threshold} is 0.8.
 @end table
 @end defun
@@ -253,13 +253,13 @@ This function defines a new hash table test, named 
@var{name}.
 After defining @var{name} in this way, you can use it as the @var{test}
 argument in @code{make-hash-table}.  When you do that, the hash table
 will use @var{test-fn} to compare key values, and @var{hash-fn} to compute
-a ``hash code'' from a key value.
+a hash code from a key value.
 
 The function @var{test-fn} should accept two arguments, two keys, and
-return address@hidden if they are considered ``the same''.
+return address@hidden if they are considered the same.
 
 The function @var{hash-fn} should accept one argument, a key, and return
-an integer that is the ``hash code'' of that key.  For good results, the
+an integer that is the hash code of that key.  For good results, the
 function should use the whole range of integers for hash codes,
 including negative integers.
 
diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi
index b3042d7..387587a 100644
--- a/doc/lispref/help.texi
+++ b/doc/lispref/help.texi
@@ -1,4 +1,4 @@
address@hidden -*-texinfo-*-
address@hidden -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
 @c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
@@ -242,6 +242,11 @@ Semipermanent goal column for vertical motion, as set by 
@dots{}
 @c That makes them incorrect.
 
 @group
+minibuffer-temporary-goal-position      Variable
+not documented
address@hidden group
+
address@hidden
 set-goal-column Keys: C-x C-n
 Set the current horizontal position as a goal for C-n and C-p.
 @end group
@@ -249,17 +254,26 @@ Set the current horizontal position as a goal for C-n and 
C-p.
 @group
 Those commands will move to this position in the line moved to
 rather than trying to keep the same horizontal position.
-With a non-nil argument, clears out the goal column
+With a non-nil argument ARG, clears out the goal column
 so that C-n and C-p resume vertical motion.
-The goal column is stored in the variable `goal-column'.
+The goal column is stored in the variable ‘goal-column’.
+
+(fn ARG)
 @end group
 
 @group
 temporary-goal-column   Variable
 Current goal column for vertical motion.
-It is the column where point was
-at the start of current run of vertical motion commands.
-When the `track-eol' feature is doing its job, the value is 9999.
+It is the column where point was at the start of the current run
+of vertical motion commands.
+
+When moving by visual lines via the function ‘line-move-visual’, it is a cons
+cell (COL . HSCROLL), where COL is the x-position, in pixels,
+divided by the default column width, and HSCROLL is the number of
+columns by which window is scrolled from left margin.
+
+When the ‘track-eol’ feature is doing its job, the value is
+‘most-positive-fixnum’.
 ---------- Buffer: *Help* ----------
 @end group
 @end smallexample
@@ -539,11 +553,11 @@ about them, see @ref{Help, , Help, emacs, The GNU Emacs 
Manual}.  Here
 we describe some program-level interfaces to the same information.
 
 @deffn Command apropos pattern &optional do-all
-This function finds all ``meaningful'' symbols whose names contain a
+This function finds all meaningful symbols whose names contain a
 match for the apropos pattern @var{pattern}.  An apropos pattern is
 either a word to match, a space-separated list of words of which at
 least two must match, or a regular expression (if any special regular
-expression characters occur).  A symbol is ``meaningful'' if it has a
+expression characters occur).  A symbol is meaningful if it has a
 definition as a function, variable, or face, or has properties.
 
 The function returns a list of elements that look like this:
@@ -608,7 +622,7 @@ subcommands of the prefix key.
 
 @defopt help-event-list
 The value of this variable is a list of event types that serve as
-alternative ``help characters''.  These events are handled just like the
+alternative help characters.  These events are handled just like the
 event specified by @code{help-char}.
 @end defopt
 
@@ -643,7 +657,7 @@ sequence.  (The last event is, presumably, the help 
character.)
 @end deffn
 
   The following two functions are meant for modes that want to provide
-help without relinquishing control, such as the ``electric'' modes.
+help without relinquishing control, such as the electric modes.
 Their names begin with @samp{Helper} to distinguish them from the
 ordinary help functions.
 
diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi
index 279e78e..eb2e343 100644
--- a/doc/lispref/hooks.texi
+++ b/doc/lispref/hooks.texi
@@ -104,7 +104,7 @@ Hook run when the buffer list changes (@pxref{Buffer List}).
 
 @item buffer-quit-function
 @vindex buffer-quit-function
-Function to call to ``quit'' the current buffer.
+Function to call to quit the current buffer.
 
 @item change-major-mode-hook
 @xref{Creating Buffer-Local}.
diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index 2a314a5..20681c0 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -258,7 +258,7 @@ accessible objects are also accessible.
 matter what the Lisp program or the user does, it is impossible to refer
 to them, since there is no longer a way to reach them.  Their space
 might as well be reused, since no one will miss them.  The second
-(``sweep'') phase of the garbage collector arranges to reuse them.
+(sweep) phase of the garbage collector arranges to reuse them.
 
 @c ??? Maybe add something describing weak hash tables here?
 
@@ -1368,7 +1368,7 @@ The buffer's value of point, as of the last time a 
redisplay completed
 in this window.
 
 @item last_had_star
-A address@hidden value means the window's buffer was ``modified'' when the
+A address@hidden value means the window's buffer was modified when the
 window was last updated.
 
 @item vertical_scroll_bar
@@ -1584,7 +1584,7 @@ fit in @code{int} range.
 Do not assume that signed integer arithmetic wraps around on overflow.
 This is no longer true of Emacs porting targets: signed integer
 overflow has undefined behavior in practice, and can dump core or
-even cause earlier or later code to behave ``illogically''.  Unsigned
+even cause earlier or later code to behave illogically.  Unsigned
 overflow does wrap around reliably, modulo a power of two.
 
 @item
diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi
index 6158bf5..865c698 100644
--- a/doc/lispref/intro.texi
+++ b/doc/lispref/intro.texi
@@ -9,7 +9,7 @@
   Most of the GNU Emacs text editor is written in the programming
 language called Emacs Lisp.  You can write new code in Emacs Lisp and
 install it as an extension to the editor.  However, Emacs Lisp is more
-than a mere ``extension language''; it is a full computer programming
+than a mere extension language; it is a full computer programming
 language in its own right.  You can use it as you would any other
 programming language.
 
@@ -148,8 +148,8 @@ manual.  You may want to skip this section and refer back 
to it later.
 printer'' refer to those routines in Lisp that convert textual
 representations of Lisp objects into actual Lisp objects, and vice
 versa.  @xref{Printed Representation}, for more details.  You, the
-person reading this manual, are thought of as ``the programmer'' and are
-addressed as ``you''.  ``The user'' is the person who uses Lisp
+person reading this manual, are thought of as the programmer and are
+addressed as ``you''.  The user is the person who uses Lisp
 programs, including those you write.
 
 @cindex typographic conventions
@@ -287,7 +287,7 @@ the echo area.
 @cindex buffer text notation
 
   Some examples describe modifications to the contents of a buffer, by
-showing the ``before'' and ``after'' versions of the text.  These
+showing the before and after versions of the text.  These
 examples show the contents of the buffer in question between two lines
 of dashes containing the buffer name.  In addition, @address@hidden
 indicates the location of point.  (The symbol for point, of course, is
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi
index 7752bf0..9bea4b0 100644
--- a/doc/lispref/keymaps.texi
+++ b/doc/lispref/keymaps.texi
@@ -634,7 +634,7 @@ the current buffer's local keymap, and (iv) the global 
keymap, in that
 order.  Emacs searches for each input key sequence in all these
 keymaps.
 
-  Of these ``usual'' keymaps, the highest-precedence one is specified
+  Of these usual keymaps, the highest-precedence one is specified
 by the @code{keymap} text or overlay property at point, if any.  (For
 a mouse input event, Emacs uses the event position instead of point;
 @iftex
@@ -669,7 +669,7 @@ keymaps in other buffers with the same major mode.
 defined regardless of the current buffer, such as @kbd{C-f}.  It is
 always active, and is bound to the variable @code{global-map}.
 
-  Apart from the above ``usual'' keymaps, Emacs provides special ways
+  Apart from the above usual keymaps, Emacs provides special ways
 for programs to make other keymaps active.  Firstly, the variable
 @code{overriding-local-map} specifies a keymap that replaces the usual
 active keymaps, except for the global keymap.  Secondly, the
@@ -944,7 +944,7 @@ This variable holds a list of keymap alists to use for 
emulation
 modes.  It is intended for modes or packages using multiple minor-mode
 keymaps.  Each element is a keymap alist which has the same format and
 meaning as @code{minor-mode-map-alist}, or a symbol with a variable
-binding which is such an alist.  The ``active'' keymaps in each alist
+binding which is such an alist.  The active keymaps in each alist
 are used before @code{minor-mode-map-alist} and
 @code{minor-mode-overriding-map-alist}.
 @end defvar
@@ -983,7 +983,7 @@ not part of key lookup.
 the rest of the event is ignored.  In fact, a key sequence used for key
 lookup may designate a mouse event with just its types (a symbol)
 instead of the entire event (a list).  @xref{Input Events}.  Such
-a ``key sequence'' is insufficient for @code{command-execute} to run,
+a key sequence is insufficient for @code{command-execute} to run,
 but it is sufficient for looking up or rebinding a key.
 
   When the key sequence consists of multiple events, key lookup
@@ -1069,7 +1069,7 @@ thing that is done automatically for an undefined key: it 
rings the bell
 
 @cindex preventing prefix key
 @code{undefined} is used in local keymaps to override a global key
-binding and make the key ``undefined'' locally.  A local binding of
+binding and make the key undefined locally.  A local binding of
 @code{nil} would fail to do this because it would not override the
 global binding.
 
@@ -1108,7 +1108,7 @@ the other functions described in this chapter that look 
up keys use
 @end example
 
 If the string or vector @var{key} is not a valid key sequence according
-to the prefix keys specified in @var{keymap}, it must be ``too long''
+to the prefix keys specified in @var{keymap}, it must be too long
 and have extra events at the end that do not fit into a single key
 sequence.  Then the value is a number, the number of events at the front
 of @var{key} that compose a complete key.
@@ -1546,7 +1546,7 @@ and @code{key-translation-map} (in order of priority).
 are used differently: they specify translations to make while reading
 key sequences, rather than bindings for complete key sequences.  As
 each key sequence is read, it is checked against each translation
-keymap.  If one of the translation keymaps ``binds'' @var{k} to a
+keymap.  If one of the translation keymaps binds @var{k} to a
 vector @var{v}, then whenever @var{k} appears as a sub-sequence
 @emph{anywhere} in a key sequence, that sub-sequence is replaced with
 the events in @var{v}.
@@ -1554,7 +1554,7 @@ the events in @var{v}.
   For example, VT100 terminals send @address@hidden O P} when the
 keypad key @key{PF1} is pressed.  On such terminals, Emacs must
 translate that sequence of events into a single event @code{pf1}.
-This is done by ``binding'' @address@hidden O P} to @code{[pf1]} in
+This is done by binding @address@hidden O P} to @code{[pf1]} in
 @code{input-decode-map}.  Thus, when you type @kbd{C-c @key{PF1}} on
 the terminal, the terminal emits the character sequence @kbd{C-c
 @key{ESC} O P}, and @code{read-key-sequence} translates this back into
@@ -1615,7 +1615,7 @@ to @code{self-insert-command}.
 @cindex key translation function
 You can use @code{input-decode-map}, @code{local-function-key-map},
 and @code{key-translation-map} for more than simple aliases, by using
-a function, instead of a key sequence, as the ``translation'' of a
+a function, instead of a key sequence, as the translation of a
 key.  Then this function is called to compute the translation of that
 key.
 
@@ -2071,7 +2071,7 @@ the GTK+ toolkit).
 @end example
 
 @noindent
address@hidden specifies a ``help-echo'' string to display while the mouse
address@hidden specifies a help-echo string to display while the mouse
 is on that item in the same way as @code{help-echo} text properties
 (@pxref{Help display}).
 
@@ -2088,7 +2088,7 @@ the menu but cannot be selected.
 controls whether the menu item is enabled.  Every time the keymap is
 used to display a menu, Emacs evaluates the expression, and it enables
 the menu item only if the expression's value is address@hidden  When a
-menu item is disabled, it is displayed in a ``fuzzy'' fashion, and
+menu item is disabled, it is displayed in a fuzzy fashion, and
 cannot be selected.
 
   The menu bar does not recalculate which items are enabled every time you
@@ -2144,7 +2144,7 @@ does not appear, then the menu is displayed as if this 
item were
 not defined at all.
 
 @item :help @var{help}
-The value of this property, @var{help}, specifies a ``help-echo'' string
+The value of this property, @var{help}, specifies a help-echo string
 to display while the mouse is on that item.  This is displayed in the
 same way as @code{help-echo} text properties (@pxref{Help display}).
 Note that this must be a constant string, unlike the @code{help-echo}
@@ -2156,7 +2156,7 @@ The @sc{car}, @var{type}, says which: it should be 
@code{:toggle} or
 @code{:radio}.  The @sc{cdr}, @var{selected}, should be a form; the
 result of evaluating it says whether this button is currently selected.
 
-A @dfn{toggle} is a menu item which is labeled as either ``on'' or ``off''
+A @dfn{toggle} is a menu item which is labeled as either on or off
 according to the value of @var{selected}.  The command itself should
 toggle @var{selected}, setting it to @code{t} if it is @code{nil},
 and to @code{nil} if it is @code{t}.  Here is how the menu item
@@ -2174,7 +2174,7 @@ This works because @code{toggle-debug-on-error} is 
defined as a command
 which toggles the variable @code{debug-on-error}.
 
 @dfn{Radio buttons} are a group of menu items, in which at any time one
-and only one is ``selected''.  There should be a variable whose value
+and only one is selected.  There should be a variable whose value
 says which one is selected at any time.  The @var{selected} form for
 each radio button in the group should check whether the variable has the
 right value for selecting that button.  Clicking on the button should
@@ -2303,7 +2303,7 @@ displays a similar kind of separator that is supported.
 @node Alias Menu Items
 @subsubsection Alias Menu Items
 
-  Sometimes it is useful to make menu items that use the ``same''
+  Sometimes it is useful to make menu items that use the same
 command but with different enable conditions.  The best way to do this
 in Emacs now is with extended menu items; before that feature existed,
 it could be done by defining alias commands and using them in menu
@@ -2318,7 +2318,7 @@ items.  Here's an example that makes two aliases for
 @end example
 
 When using aliases in menus, often it is useful to display the
-equivalent key bindings for the ``real'' command name, not the aliases
+equivalent key bindings for the real command name, not the aliases
 (which typically don't have any key bindings except for the menu
 itself).  To request this, give the alias symbol a address@hidden
 @code{menu-alias} property.  Thus,
@@ -2427,19 +2427,19 @@ Next we define the menu items:
 @end smallexample
 
 @noindent
-Note the symbols which the bindings are ``made for''; these appear
+Note the symbols which the bindings are made for; these appear
 inside square brackets, in the key sequence being defined.  In some
 cases, this symbol is the same as the command name; sometimes it is
-different.  These symbols are treated as ``function keys'', but they are
+different.  These symbols are treated as function keys, but they are
 not real function keys on the keyboard.  They do not affect the
-functioning of the menu itself, but they are ``echoed'' in the echo area
+functioning of the menu itself, but they are echoed in the echo area
 when the user selects from the menu, and they appear in the output of
 @code{where-is} and @code{apropos}.
 
   The menu in this example is intended for use with the mouse.  If a
 menu is intended for use with the keyboard, that is, if it is bound to
 a key sequence ending with a keyboard event, then the menu items
-should be bound to characters or ``real'' function keys, that can be
+should be bound to characters or real function keys, that can be
 typed with the keyboard.
 
   The binding whose definition is @code{("--")} is a separator line.
@@ -2475,15 +2475,15 @@ can do it this way:
 
   Emacs usually shows a @dfn{menu bar} at the top of each frame.
 @xref{Menu Bars,,,emacs, The GNU Emacs Manual}.  Menu bar items are
-subcommands of the fake ``function key'' @code{menu-bar}, as defined
+subcommands of the fake function key @code{menu-bar}, as defined
 in the active keymaps.
 
-  To add an item to the menu bar, invent a fake ``function key'' of your
+  To add an item to the menu bar, invent a fake function key of your
 own (let's call it @var{key}), and make a binding for the key sequence
 @code{[menu-bar @var{key}]}.  Most often, the binding is a menu keymap,
 so that pressing a button on the menu bar item leads to another menu.
 
-  When more than one active keymap defines the same ``function key''
+  When more than one active keymap defines the same function key
 for the menu bar, the item appears just once.  If the user clicks on
 that menu bar item, it brings up a single, combined menu containing
 all the subcommands of that item---the global subcommands, the local
@@ -2574,7 +2574,7 @@ If the value is @code{grow-only}, the tool bar expands 
automatically,
 but does not contract automatically.
 
   The tool bar contents are controlled by a menu keymap attached to a
-fake ``function key'' called @code{tool-bar} (much like the way the menu
+fake function key called @code{tool-bar} (much like the way the menu
 bar is controlled).  So you define a tool bar item using
 @code{define-key}, like this:
 
@@ -2583,7 +2583,7 @@ bar is controlled).  So you define a tool bar item using
 @end example
 
 @noindent
-where @var{key} is a fake ``function key'' to distinguish this item from
+where @var{key} is a fake function key to distinguish this item from
 other items, and @var{item} is a menu item key binding (@pxref{Extended
 Menu Items}), which says how to display this item and how it behaves.
 
@@ -2593,7 +2593,7 @@ tool bar bindings and have their normal meanings.  The 
@var{real-binding}
 in the item must be a command, not a keymap; in other words, it does not
 work to define a tool bar icon as a prefix key.
 
-  The @code{:help} property specifies a ``help-echo'' string to display
+  The @code{:help} property specifies a help-echo string to display
 while the mouse is on that item.  This is displayed in the same way as
 @code{help-echo} text properties (@pxref{Help display}).
 
diff --git a/doc/lispref/lay-flat.texi b/doc/lispref/lay-flat.texi
index 947beec..04aabd8 100644
--- a/doc/lispref/lay-flat.texi
+++ b/doc/lispref/lay-flat.texi
@@ -21,9 +21,9 @@
 
 We have bound this manual using a new @dfn{lay-flat} binding
 technology.  This type of binding allows you to open a soft cover book
-so that it ``lays flat'' on a table without creasing the binding.
+so that it lays flat on a table without creasing the binding.
 
-In order to make the book lay flat properly, you need to ``crack'' the
+In order to make the book lay flat properly, you need to crack the
 binding.  To do this, divide the book into two sections and bend it so
 that the front and back covers meet.  Do not worry; the pages are
 sewn and glued to the binding, and will not fall out easily.
diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi
index a2e70a6..48e1b57 100644
--- a/doc/lispref/lists.texi
+++ b/doc/lispref/lists.texi
@@ -41,7 +41,7 @@ pronounced ``could-er''.
   We say that ``the @sc{car} of this cons cell is'' whatever object
 its @sc{car} slot currently holds, and likewise for the @sc{cdr}.
 
-  A list is a series of cons cells ``chained together'', so that each
+  A list is a series of cons cells chained together, so that each
 cell refers to the next one.  There is one cons cell for each element
 of the list.  By convention, the @sc{car}s of the cons cells hold the
 elements of the list, and the @sc{cdr}s are used to chain the list
@@ -799,7 +799,7 @@ foo                       ;; @address@hidden was changed.}
 @cindex destructive list operations
 
   You can modify the @sc{car} and @sc{cdr} contents of a cons cell with the
-primitives @code{setcar} and @code{setcdr}.  We call these ``destructive''
+primitives @code{setcar} and @code{setcdr}.  These are destructive
 operations because they change existing list structure.
 
 @cindex CL address@hidden vs @code{setcar}
@@ -1035,9 +1035,9 @@ x1
 @cindex reordering, of elements in lists
 @cindex modification of lists
 
-  Here are some functions that rearrange lists ``destructively'' by
-modifying the @sc{cdr}s of their component cons cells.  We call these
-functions ``destructive'' because they chew up the original lists passed
+  Here are some functions that rearrange lists destructively by
+modifying the @sc{cdr}s of their component cons cells.  These functions
+are destructive because they chew up the original lists passed
 to them as arguments, relinking their cons cells to form a new list that
 is the returned value.
 
@@ -1522,7 +1522,7 @@ a @sc{cdr} @code{equal} to @var{value}.
 
 @code{rassoc} is like @code{assoc} except that it compares the @sc{cdr} of
 each @var{alist} association instead of the @sc{car}.  You can think of
-this as ``reverse @code{assoc}'', finding the key for a given value.
+this as reverse @code{assoc}, finding the key for a given value.
 @end defun
 
 @defun assq key alist
@@ -1563,7 +1563,7 @@ a @sc{cdr} @code{eq} to @var{value}.
 
 @code{rassq} is like @code{assq} except that it compares the @sc{cdr} of
 each @var{alist} association instead of the @sc{car}.  You can think of
-this as ``reverse @code{assq}'', finding the key for a given value.
+this as reverse @code{assq}, finding the key for a given value.
 
 For example:
 
diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi
index 91dc9a9..82de765 100644
--- a/doc/lispref/loading.texi
+++ b/doc/lispref/loading.texi
@@ -40,7 +40,7 @@ For on-demand loading of external libraries, @pxref{Dynamic 
Libraries}.
 * Repeated Loading::        Precautions about loading a file twice.
 * Named Features::          Loading a library if it isn't already loaded.
 * Where Defined::           Finding which file defined a certain symbol.
-* Unloading::               How to ``unload'' a library that was loaded.
+* Unloading::               How to unload a library that was loaded.
 * Hooks for Loading::       Providing code to be run when
                               particular libraries are loaded.
 @end menu
@@ -456,7 +456,7 @@ Autoloading can also be triggered by looking up the 
documentation of
 the function or macro (@pxref{Documentation Basics}).
 
   There are two ways to set up an autoloaded function: by calling
address@hidden, and by writing a special ``magic'' comment in the
address@hidden, and by writing a ``magic'' comment in the
 source before the real definition.  @code{autoload} is the low-level
 primitive for autoloading; any Lisp program can call @code{autoload} at
 any time.  Magic comments are the most convenient way to make a function
@@ -668,7 +668,7 @@ value of this variable is @code{";;;###autoload"}.
 @defvar generated-autoload-file
 The value of this variable names an Emacs Lisp file where the autoload
 calls should go.  The default value is @file{loaddefs.el}, but you can
-override that, e.g., in the ``Local Variables'' section of a
+override that, e.g., in the local variables section of a
 @file{.el} file (@pxref{File Local Variables}).  The autoload file is
 assumed to contain a trailer starting with a formfeed character.
 @end defvar
diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi
index 7bdfee0..a90c6f1 100644
--- a/doc/lispref/macros.texi
+++ b/doc/lispref/macros.texi
@@ -307,7 +307,7 @@ program is actually run.
   When defining a macro you must pay attention to the number of times
 the arguments will be evaluated when the expansion is executed.  The
 following macro (used to facilitate iteration) illustrates the
-problem.  This macro allows us to write a ``for'' loop construct.
+problem.  This macro allows us to write a for-loop construct.
 
 @findex for
 @example
@@ -345,7 +345,7 @@ For example, (for i from 1 to 10 do (print i))."
 
 @noindent
 The arguments @code{from}, @code{to}, and @code{do} in this macro are
-``syntactic sugar''; they are entirely ignored.  The idea is that you
+syntactic sugar; they are entirely ignored.  The idea is that you
 will write noise words (such as @code{from}, @code{to}, and @code{do})
 in those positions in the macro call.
 
@@ -568,7 +568,7 @@ If @code{initialize} is interpreted, a new list 
@code{(nil)} is
 constructed each time @code{initialize} is called.  Thus, no side effect
 survives between calls.  If @code{initialize} is compiled, then the
 macro @code{empty-object} is expanded during compilation, producing a
-single ``constant'' @code{(nil)} that is reused and altered each time
+single constant @code{(nil)} that is reused and altered each time
 @code{initialize} is called.
 
 One way to avoid pathological cases like this is to think of
diff --git a/doc/lispref/markers.texi b/doc/lispref/markers.texi
index 4f25b91..3eaba41 100644
--- a/doc/lispref/markers.texi
+++ b/doc/lispref/markers.texi
@@ -20,8 +20,8 @@ deleted, so that it stays with the two characters on either 
side of it.
 * Marker Insertion Types::   Two ways a marker can relocate when you
                                insert where it points.
 * Moving Markers::           Moving the marker to a new buffer or position.
-* The Mark::                 How ``the mark'' is implemented with a marker.
-* The Region::               How to access ``the region''.
+* The Mark::                 How the mark is implemented with a marker.
+* The Region::               How to access the region.
 @end menu
 
 @node Overview of Markers
@@ -404,7 +404,7 @@ This is another name for @code{set-marker}.
 
   Each buffer has a special marker, which is designated @dfn{the
 mark}.  When a buffer is newly created, this marker exists but does
-not point anywhere; this means that the mark ``doesn't exist'' in that
+not point anywhere; this means that the mark doesn't exist in that
 buffer yet.  Subsequent commands can set the mark.
 
   The mark specifies a position to bound a range of text for many
@@ -424,7 +424,7 @@ sets the mark to the value of point before doing any 
replacements,
 because this enables the user to move back there conveniently after
 the replace is finished.
 
-  Once the mark ``exists'' in a buffer, it normally never ceases to
+  Once the mark exists in a buffer, it normally never ceases to
 exist.  However, it may become @dfn{inactive}, if Transient Mark mode
 is enabled.  The buffer-local variable @code{mark-active}, if
 address@hidden, means that the mark is active.  A command can call the
@@ -620,7 +620,7 @@ This piece of command_loop_1, run unless deactivating the 
mark:
 @end defvar
 
 @defun handle-shift-selection
-This function implements the ``shift-selection'' behavior of
+This function implements the shift-selection behavior of
 point-motion commands.  @xref{Shift Selection,,, emacs, The GNU Emacs
 Manual}.  It is called automatically by the Emacs command loop
 whenever a command with a @samp{^} character in its @code{interactive}
@@ -661,8 +661,8 @@ more marks than this are pushed onto the @code{mark-ring},
 
 @node The Region
 @section The Region
address@hidden The index entry must be just ``region'' to make it the first hit
address@hidden when the user types ``i region RET'', because otherwise the Info
address@hidden The index entry must be just "region" to make it the first hit
address@hidden when the user types "i region RET", because otherwise the Info
 @c reader will present substring matches in alphabetical order,
 @c putting this one near the end, with something utterly unrelated as
 @c the first hit.
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 2aec149..96c1020 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -81,7 +81,7 @@ there is an active minibuffer; such a minibuffer is called a
 incrementing the number at the end of the name.  (The names begin with
 a space so that they won't show up in normal buffer lists.)  Of
 several recursive minibuffers, the innermost (or most recently
-entered) is the active minibuffer.  We usually call this ``the''
+entered) is the active minibuffer.  We usually call this @emph{the}
 minibuffer.  You can permit or forbid recursive minibuffers by setting
 the variable @code{enable-recursive-minibuffers}, or by putting
 properties of that name on command symbols (@xref{Recursive Mini}.)
@@ -263,7 +263,7 @@ The function now has a list of regular expressions that it 
passes to
 @code{read-from-minibuffer} to obtain the user's input.  The first
 element of the list is the default result in case of empty input.  All
 elements of the list are available to the user as the ``future
-minibuffer history list'' (@pxref{Minibuffer History, future list,,
+minibuffer history'' list (@pxref{Minibuffer History, future list,,
 emacs, The GNU Emacs Manual}).
 
 The optional argument @var{history}, if address@hidden, is a symbol
@@ -895,7 +895,7 @@ pertains to the area after @code{"/usr/"} and before 
@code{"/doc"}.
 @end defun
 
 If you store a completion alist in a variable, you should mark the
-variable as ``risky'' by giving it a address@hidden
+variable as risky by giving it a address@hidden
 @code{risky-local-variable} property.  @xref{File Local Variables}.
 
 @defvar completion-ignore-case
@@ -1958,7 +1958,7 @@ the call.
 This function asks the user a question, expecting input in the echo
 area.  It returns @code{t} if the user types @kbd{y}, @code{nil} if the
 user types @kbd{n}.  This function also accepts @key{SPC} to mean yes
-and @key{DEL} to mean no.  It accepts @kbd{C-]} to mean ``quit'', like
+and @key{DEL} to mean no.  It accepts @kbd{C-]} to quit, like
 @kbd{C-g}, because the question might look like a minibuffer and for
 that reason the user might try to use @kbd{C-]} to get out.  The answer
 is a single character, with no @key{RET} needed to terminate it.  Upper
@@ -2049,7 +2049,7 @@ Do you really want to remove everything? (yes or no)
 @cindex multiple yes-or-no questions
 
   When you have a series of similar questions to ask, such as ``Do you
-want to save this buffer'' for each buffer in turn, you should use
+want to save this buffer?'' for each buffer in turn, you should use
 @code{map-y-or-n-p} to ask the collection of questions, rather than
 asking each question individually.  This gives the user certain
 convenient facilities such as the ability to answer the whole series at
@@ -2120,7 +2120,7 @@ answer); @var{function} is a function of one argument (an 
object from
 
 When the user responds with @var{char}, @code{map-y-or-n-p} calls
 @var{function}.  If it returns address@hidden, the object is considered
-``acted upon'', and @code{map-y-or-n-p} advances to the next object in
+acted upon, and @code{map-y-or-n-p} advances to the next object in
 @var{list}.  If it returns @code{nil}, the prompt is repeated for the
 same object.
 
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index a8b6bb1..a174770 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -116,7 +116,7 @@ This function runs an abnormal hook by calling all the hook 
functions in
 
 @defun run-hook-with-args-until-failure hook &rest args
 This function runs an abnormal hook by calling each hook function in
-turn, stopping if one of them ``fails'' by returning @code{nil}.  Each
+turn, stopping if one of them fails by returning @code{nil}.  Each
 hook function is passed the arguments @var{args}.  If this function
 stops because one of the hook functions fails, it returns @code{nil};
 otherwise it returns a address@hidden value.
@@ -124,7 +124,7 @@ otherwise it returns a address@hidden value.
 
 @defun run-hook-with-args-until-success hook &rest args
 This function runs an abnormal hook by calling each hook function,
-stopping if one of them ``succeeds'' by returning a address@hidden
+stopping if one of them succeeds by returning a address@hidden
 value.  Each hook function is passed the arguments @var{args}.  If this
 function stops because one of the hook functions returns a
 address@hidden value, it returns that value; otherwise it returns
@@ -346,14 +346,14 @@ reserved for users.
 
 A major mode can also rebind the keys @kbd{M-n}, @kbd{M-p} and
 @kbd{M-s}.  The bindings for @kbd{M-n} and @kbd{M-p} should normally
-be some kind of ``moving forward and backward'', but this does not
+be some kind of moving forward and backward, but this does not
 necessarily mean cursor motion.
 
 It is legitimate for a major mode to rebind a standard key sequence if
-it provides a command that does ``the same job'' in a way better
+it provides a command that does the same job in a way better
 suited to the text this mode is used for.  For example, a major mode
 for editing a programming language might redefine @kbd{C-M-a} to
-``move to the beginning of a function'' in a way that works better for
+move to the beginning of a function in a way that works better for
 that language.
 
 It is also legitimate for a major mode to rebind a standard key
@@ -1003,7 +1003,7 @@ should have the form @address@hidden(@var{id} 
@var{contents})}}, where
 @itemize
 @item
 @var{id} is either @code{nil}, or a Lisp object that identifies the
-entry.  If the latter, the cursor stays on the ``same'' entry when
+entry.  If the latter, the cursor stays on the same entry when
 re-sorting entries.  Comparison is done with @code{equal}.
 
 @item
@@ -1092,8 +1092,8 @@ documentation for the mode command.  If you do not supply 
it,
 The argument @var{comment-list} is a list in which each element is
 either a character, a string of one or two characters, or a cons cell.
 A character or a string is set up in the mode's syntax table as a
-``comment starter''.  If the entry is a cons cell, the @sc{car} is set
-up as a ``comment starter'' and the @sc{cdr} as a ``comment ender''.
+comment starter.  If the entry is a cons cell, the @sc{car} is set
+up as a comment starter and the @sc{cdr} as a comment ender.
 (Use @code{nil} for the latter if you want comments to end at the end
 of the line.)  Note that the syntax table mechanism has limitations
 about what comment starters and enders are actually possible.
@@ -1782,7 +1782,7 @@ symbol whose value is void.
 There is one exception: if the value of @var{symbol} is a string, it is
 displayed verbatim: the @code{%}-constructs are not recognized.
 
-Unless @var{symbol} is marked as ``risky'' (i.e., it has a
+Unless @var{symbol} is marked as risky (i.e., it has a
 address@hidden @code{risky-local-variable} property), all text
 properties specified in @var{symbol}'s value are ignored.  This includes
 the text properties of strings in @var{symbol}'s value, as well as all
@@ -2408,10 +2408,10 @@ variables @code{imenu-prev-index-position-function} and
 
 @defvar imenu-prev-index-position-function
 If this variable is address@hidden, its value should be a function that
-finds the next ``definition'' to put in the buffer index, scanning
+finds the next definition to put in the buffer index, scanning
 backward in the buffer from point.  It should return @code{nil} if it
-doesn't find another ``definition'' before point.  Otherwise it should
-leave point at the place it finds a ``definition'' and return any
+doesn't find another definition before point.  Otherwise it should
+leave point at the place it finds a definition and return any
 address@hidden value.
 
 Setting this variable makes it buffer-local in the current buffer.
@@ -2527,7 +2527,7 @@ If address@hidden, the value should look like this:
 
 @example
 (@var{keywords} address@hidden address@hidden
- address@hidden address@hidden @address@hidden)
+ address@hidden @address@hidden)
 @end example
 
 The first element, @var{keywords}, indirectly specifies the value of
@@ -2559,11 +2559,6 @@ fontification; the resulting syntax table is stored in
 @code{nil}, syntactic fontification uses the syntax table returned by
 the @code{syntax-table} function.  @xref{Syntax Table Functions}.
 
-The fifth element, @var{syntax-begin}, specifies the value of
address@hidden  We recommend setting
-this variable to @code{nil} and using @code{syntax-begin-function}
-instead.
-
 All the remaining elements (if any) are collectively called
 @var{other-vars}.  Each of these elements should have the form
 @code{(@var{variable} . @var{value})}---which means, make
@@ -3026,7 +3021,7 @@ default value is the symbol itself.  Thus, the default 
value of
 @code{font-lock-comment-face} is @code{font-lock-comment-face}.
 
   The faces are listed with descriptions of their typical usage, and in
-order of greater to lesser ``prominence''.  If a mode's syntactic
+order of greater to lesser prominence.  If a mode's syntactic
 categories do not fit well with the usage descriptions, the faces can be
 assigned using the ordering as a guide.
 
@@ -3124,26 +3119,6 @@ is @code{nil}, syntactic fontification uses the buffer's 
syntax table
 Table Functions}).
 @end defvar
 
address@hidden font-lock-beginning-of-syntax-function
-If this variable is address@hidden, it should be a function to move
-point back to a position that is syntactically at ``top level'' and
-outside of strings or comments.  The value is normally set through an
address@hidden element in @code{font-lock-defaults}.  If it is
address@hidden, Font Lock uses @code{syntax-begin-function} to move back
-outside of any comment, string, or sexp (@pxref{Position Parse}).
-
-This variable is semi-obsolete; we usually recommend setting
address@hidden instead.  One of its uses is to tune the
-behavior of syntactic fontification, e.g., to ensure that different
-kinds of strings or comments are highlighted differently.
-
-The specified function is called with no arguments.  It should leave
-point at the beginning of any enclosing syntactic block.  Typical values
-are @code{beginning-of-line} (used when the start of the line is known
-to be outside a syntactic block), or @code{beginning-of-defun} for
-programming modes, or @code{backward-paragraph} for textual modes.
address@hidden defvar
-
 @defvar font-lock-syntactic-face-function
 If this variable is address@hidden, it should be a function to determine
 which face to use for a given syntactic element (a string or a comment).
@@ -3338,13 +3313,13 @@ indentation code will want to be somewhat friendly to 
syntactically
 incorrect code.
 
 Good maintainable indentation functions usually fall into two categories:
-either parsing forward from some ``safe'' starting point until the
+either parsing forward from some safe starting point until the
 position of interest, or parsing backward from the position of interest.
 Neither of the two is a clearly better choice than the other: parsing
 backward is often more difficult than parsing forward because
 programming languages are designed to be parsed forward, but for the
 purpose of indentation it has the advantage of not needing to
-guess a ``safe'' starting point, and it generally enjoys the property
+guess a safe starting point, and it generally enjoys the property
 that only a minimum of text will be analyzed to decide the indentation
 of a line, so indentation will tend to be less affected by syntax errors in
 some earlier unrelated piece of code.  Parsing forward on the other hand
@@ -3370,8 +3345,8 @@ of Lisp sexps and adapts it to non-Lisp languages.
 @cindex SMIE
 
 SMIE is a package that provides a generic navigation and indentation
-engine.  Based on a very simple parser using an ``operator precedence
-grammar'', it lets major modes extend the sexp-based navigation of Lisp
+engine.  Based on a very simple parser using an operator precedence
+grammar, it lets major modes extend the sexp-based navigation of Lisp
 to non-Lisp languages as well as provide a simple to use but reliable
 auto-indentation.
 
diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index 8781cd6..3351b84 100644
--- a/doc/lispref/nonascii.texi
+++ b/doc/lispref/nonascii.texi
@@ -483,7 +483,7 @@ Corresponds to the Unicode @code{Numeric_Value} property for
 characters whose @code{Numeric_Type} is @samp{Decimal}.  The value is
 an integer, or @code{nil} if the character has no decimal digit value.
 For unassigned codepoints, the value is @code{nil}, which means
address@hidden, or ``not-a-number''.
address@hidden, or ``not a number''.
 
 @item digit-value
 Corresponds to the Unicode @code{Numeric_Value} property for
@@ -583,17 +583,17 @@ This function returns the value of @var{char}'s 
@var{propname} property.
      @result{} Nd
 @end group
 @group
-;; subscript 4
+;; U+2084 SUBSCRIPT FOUR
 (get-char-code-property ?\u2084 'digit-value)
      @result{} 4
 @end group
 @group
-;; one fifth
+;; U+2155 VULGAR FRACTION ONE FIFTH
 (get-char-code-property ?\u2155 'numeric-value)
      @result{} 0.2
 @end group
 @group
-;; Roman IV
+;; U+2163 ROMAN NUMERAL FOUR
 (get-char-code-property ?\u2163 'numeric-value)
      @result{} 4
 @end group
@@ -1956,7 +1956,7 @@ and @ref{Invoking the Input Method}.
 @section Locales
 @cindex locale
 
-  POSIX defines a concept of ``locales'' which control which language
+  In POSIX, locales control which language
 to use in language-related features.  These Emacs variables control
 how Emacs interacts with these features.
 
diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi
index 7b4a0a6..3c70d2f 100644
--- a/doc/lispref/numbers.texi
+++ b/doc/lispref/numbers.texi
@@ -224,7 +224,7 @@ distinguish them.
 @cindex NaN
   The @acronym{IEEE} floating-point standard supports positive
 infinity and negative infinity as floating-point values.  It also
-provides for a class of values called NaN or ``not-a-number'';
+provides for a class of values called NaN, or ``not a number'';
 numerical functions return such values in cases where there is no
 correct answer.  For example, @code{(/ 0.0 0.0)} returns a address@hidden
 Although NaN values carry a sign, for practical purposes there is no other
@@ -812,7 +812,7 @@ Rounding a value equidistant between two integers returns 
the even integer.
 sequence of @dfn{bits} (digits which are either zero or one).  A bitwise
 operation acts on the individual bits of such a sequence.  For example,
 @dfn{shifting} moves the whole sequence left or right one or more places,
-reproducing the same pattern ``moved over''.
+reproducing the same pattern moved over.
 
   The bitwise operations in Emacs Lisp apply only to integers.
 
@@ -989,17 +989,16 @@ Here are other examples:
 @end defun
 
 @defun logand &rest ints-or-markers
-This function returns the ``logical and'' of the arguments: the
address@hidden bit is set in the result if, and only if, the @var{n}th bit is
-set in all the arguments.  (``Set'' means that the value of the bit is 1
-rather than 0.)
+This function returns the bitwise AND of the arguments: the @var{n}th
+bit is 1 in the result if, and only if, the @var{n}th bit is 1 in all
+the arguments.
 
-For example, using 4-bit binary numbers, the ``logical and'' of 13 and
+For example, using 4-bit binary numbers, the bitwise AND of 13 and
 12 is 12: 1101 combined with 1100 produces 1100.
-In both the binary numbers, the leftmost two bits are set (i.e., they
-are 1's), so the leftmost two bits of the returned value are set.
-However, for the rightmost two bits, each is zero in at least one of
-the arguments, so the rightmost two bits of the returned value are 0's.
+In both the binary numbers, the leftmost two bits are both 1
+so the leftmost two bits of the returned value are both 1.
+However, for the rightmost two bits, each is 0 in at least one of
+the arguments, so the rightmost two bits of the returned value are both 0.
 
 @noindent
 Therefore,
@@ -1040,9 +1039,9 @@ because its binary representation consists entirely of 
ones.  If
 @end defun
 
 @defun logior &rest ints-or-markers
-This function returns the ``inclusive or'' of its arguments: the @var{n}th bit
-is set in the result if, and only if, the @var{n}th bit is set in at least
-one of the arguments.  If there are no arguments, the result is zero,
+This function returns the bitwise inclusive OR of its arguments: the @var{n}th
+bit is 1 in the result if, and only if, the @var{n}th bit is 1 in at
+least one of the arguments.  If there are no arguments, the result is 0,
 which is an identity element for this operation.  If @code{logior} is
 passed just one argument, it returns that argument.
 
@@ -1065,9 +1064,9 @@ passed just one argument, it returns that argument.
 @end defun
 
 @defun logxor &rest ints-or-markers
-This function returns the ``exclusive or'' of its arguments: the
address@hidden bit is set in the result if, and only if, the @var{n}th bit is
-set in an odd number of the arguments.  If there are no arguments, the
+This function returns the bitwise exclusive OR of its arguments: the
address@hidden bit is 1 in the result if, and only if, the @var{n}th bit is
+1 in an odd number of the arguments.  If there are no arguments, the
 result is 0, which is an identity element for this operation.  If
 @code{logxor} is passed just one argument, it returns that argument.
 
@@ -1090,7 +1089,7 @@ result is 0, which is an identity element for this 
operation.  If
 @end defun
 
 @defun lognot integer
-This function returns the logical complement of its argument: the @var{n}th
+This function returns the bitwise complement of its argument: the @var{n}th
 bit is one in the result if, and only if, the @var{n}th bit is zero in
 @var{integer}, and vice-versa.
 
@@ -1218,7 +1217,8 @@ fashion.  The numbers are not truly random, but they have 
certain
 properties that mimic a random series.  For example, all possible
 values occur equally often in a pseudo-random series.
 
-  Pseudo-random numbers are generated from a ``seed''.  Starting from
address@hidden seed, for random number generation
+  Pseudo-random numbers are generated from a @dfn{seed value}.  Starting from
 any given seed, the @code{random} function always generates the same
 sequence of numbers.  By default, Emacs initializes the random seed at
 startup, in such a way that the sequence of values of @code{random}
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index c4c74ec..0a19274 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -18,7 +18,7 @@ possible objects.
 have similar structures and may usually be used in the same contexts.
 Types can overlap, and objects can belong to two or more types.
 Consequently, we can ask whether an object belongs to a particular type,
-but not for ``the'' type of an object.
+but not for @emph{the} type of an object.
 
 @cindex primitive type
   A few fundamental object types are built into Emacs.  These, from
@@ -310,7 +310,7 @@ vertical tab, formfeed, space, return, del, and escape as 
@samp{?\a},
 @samp{?\b}, @samp{?\t}, @samp{?\n}, @samp{?\v}, @samp{?\f},
 @samp{?\s}, @samp{?\r}, @samp{?\d}, and @samp{?\e}, respectively.
 (@samp{?\s} followed by a dash has a different meaning---it applies
-the ``super'' modifier to the following character.)  Thus,
+the Super modifier to the following character.)  Thus,
 
 @example
 ?\a @result{} 7                 ; @r{control-g, @kbd{C-g}}
@@ -329,7 +329,7 @@ the ``super'' modifier to the following character.)  Thus,
 @cindex escape sequence
   These sequences which start with backslash are also known as
 @dfn{escape sequences}, because backslash plays the role of an
-``escape character''; this terminology has nothing to do with the
+escape character; this has nothing to do with the
 character @key{ESC}.  @samp{\s} is meant for use in character
 constants; in string constants, just write the space.
 
@@ -556,7 +556,7 @@ do such a thing.
 @cindex CL note---case of letters
 @quotation
 @b{Common Lisp note:} In Common Lisp, lower case letters are always
-``folded'' to upper case, unless they are explicitly escaped.  In Emacs
+folded to upper case, unless they are explicitly escaped.  In Emacs
 Lisp, upper case and lower case letters are distinct.
 @end quotation
 
@@ -644,7 +644,7 @@ same object, @code{nil}.
 
   A @dfn{cons cell} is an object that consists of two slots, called
 the @sc{car} slot and the @sc{cdr} slot.  Each slot can @dfn{hold} any
-Lisp object.  We also say that ``the @sc{car} of this cons cell is''
+Lisp object.  We also say that the @sc{car} of this cons cell is
 whatever object its @sc{car} slot currently holds, and likewise for
 the @sc{cdr}.
 
@@ -660,13 +660,13 @@ of lists, we refer to any structure made out of cons 
cells as a
 @quotation
 A note to C programmers: a Lisp list thus works as a @dfn{linked list}
 built up of cons cells.  Because pointers in Lisp are implicit, we do
-not distinguish between a cons cell slot ``holding'' a value versus
-``pointing to'' the value.
+not distinguish between a cons cell slot holding a value versus
+pointing to the value.
 @end quotation
 
 @cindex atoms
   Because cons cells are so central to Lisp, we also have a word for
-``an object which is not a cons cell''.  These objects are called
+an object which is not a cons cell.  These objects are called
 @dfn{atoms}.
 
 @cindex parenthesis
@@ -695,10 +695,10 @@ hold @code{nil}.
 
   The names @sc{car} and @sc{cdr} derive from the history of Lisp.  The
 original Lisp implementation ran on an @w{IBM 704} computer which
-divided words into two parts, called the ``address'' part and the
-``decrement''; @sc{car} was an instruction to extract the contents of
+divided words into two parts, the address and the
+decrement; @sc{car} was an instruction to extract the contents of
 the address part of a register, and @sc{cdr} an instruction to extract
-the contents of the decrement.  By contrast, ``cons cells'' are named
+the contents of the decrement.  By contrast, cons cells are named
 for the function @code{cons} that creates them, which in turn was named
 for its purpose, the construction of cells.
 
@@ -737,7 +737,7 @@ represents a reference to a Lisp object, either an atom or 
another cons
 cell.
 
   In this example, the first box, which holds the @sc{car} of the first
-cons cell, refers to or ``holds'' @code{rose} (a symbol).  The second
+cons cell, refers to or holds @code{rose} (a symbol).  The second
 box, holding the @sc{cdr} of the first cons cell, refers to the next
 pair of boxes, the second cons cell.  The @sc{car} of the second cons
 cell is @code{violet}, and its @sc{cdr} is the third cons cell.  The
@@ -1176,7 +1176,7 @@ a whole character set.
 @cindex @samp{#^} read syntax
   The printed representation of a char-table is like a vector
 except that there is an extra @samp{#^} at the address@hidden
-may also encounter @samp{#^^}, used for ``sub-char-tables''.}
+may also encounter @samp{#^^}, used for sub-char-tables.}
 
   @xref{Char-Tables}, for special functions to operate on char-tables.
 Uses of char-tables include:
@@ -1204,7 +1204,7 @@ be @code{t} or @code{nil}.
   The printed representation of a bool-vector is like a string, except
 that it begins with @samp{#&} followed by the length.  The string
 constant that follows actually specifies the contents of the bool-vector
-as a bitmap---each ``character'' in the string contains 8 bits, which
+as a bitmap---each character in the string contains 8 bits, which
 specify the next 8 elements of the bool-vector (1 stands for @code{t},
 and 0 for @code{nil}).  The least significant bits of the character
 correspond to the lowest indices in the bool-vector.
@@ -1423,7 +1423,7 @@ buffer}.
   The contents of a buffer are much like a string, but buffers are not
 used like strings in Emacs Lisp, and the available operations are
 different.  For example, you can insert text efficiently into an
-existing buffer, altering the buffer's contents, whereas ``inserting''
+existing buffer, altering the buffer's contents, whereas inserting
 text into a string requires concatenating substrings, and the result
 is an entirely new string object.
 
@@ -1715,7 +1715,7 @@ look alike but are not the same Lisp object.  This shows 
the difference:
 @end example
 
   You can also use the same syntax to make a circular structure, which
-appears as an ``element'' within itself.  Here is an example:
+appears as an element within itself.  Here is an example:
 
 @example
 #1=(a #1#)
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index 6ef87df..204055d 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -725,7 +725,7 @@ another application without doing anything special to Emacs.
 @c have SIGTSTP?
 @cindex SIGTSTP
   Some operating systems (those without @code{SIGTSTP}, or MS-DOS) do
-not support suspension of jobs; on these systems, ``suspension''
+not support suspension of jobs; on these systems, suspension
 actually creates a new shell temporarily as a subprocess of Emacs.
 Then you would exit the shell to return to Emacs.
 
@@ -1013,9 +1013,9 @@ process-environment
 @end group
 @end smallexample
 
-If @code{process-environment} contains ``duplicate'' elements that
+If @code{process-environment} contains multiple elements that
 specify the same environment variable, the first of these elements
-specifies the variable, and the other ``duplicates'' are ignored.
+specifies the variable, and the others are ignored.
 @end defvar
 
 @defvar initial-environment
@@ -1167,7 +1167,7 @@ user-id or login name that isn't defined, it returns 
@code{nil}.
   The symbols @code{user-login-name}, @code{user-real-login-name} and
 @code{user-full-name} are variables as well as functions.  The functions
 return the same values that the variables hold.  These variables allow
-you to ``fake out'' Emacs by telling the functions what to return.  The
+you to fake out Emacs by telling the functions what to return.  The
 variables are also useful for constructing frame titles (@pxref{Frame
 Titles}).
 
@@ -1545,13 +1545,13 @@ because that is how @samp{%S} normally pads to two 
positions.
 
 The characters @samp{E} and @samp{O} act as modifiers when used between
 @samp{%} and one of the letters in the table above.  @samp{E} specifies
-using the current locale's ``alternative'' version of the date and time.
+using the current locale's alternative version of the date and time.
 In a Japanese locale, for example, @code{%Ex} might yield a date format
 based on the Japanese Emperors' reigns.  @samp{E} is allowed in
 @samp{%Ec}, @samp{%EC}, @samp{%Ex}, @samp{%EX}, @samp{%Ey}, and
 @samp{%EY}.
 
address@hidden means to use the current locale's ``alternative''
address@hidden means to use the current locale's alternative
 representation of numbers, instead of the ordinary decimal digits.  This
 is allowed with most letters, all the ones that output numbers.
 
@@ -2192,7 +2192,7 @@ To define system-specific X11 keysyms, set the variable
 This variable's value should be an alist with one element for each
 system-specific keysym.  Each element has the form @code{(@var{code}
 . @var{symbol})}, where @var{code} is the numeric keysym code (not
-including the ``vendor specific'' bit,
+including the vendor-specific bit,
 @ifnottex
 @minus{}2**28),
 @end ifnottex
@@ -2565,7 +2565,7 @@ specification prior to @samp{"1.0"}.
 
 Several operating systems support watching of filesystems for changes
 of files.  If configured properly, Emacs links a respective library
-like @file{gfilenotify}, @file{inotify}, or  @file{w32notify}
+like @file{gfilenotify}, @file{inotify}, or @file{w32notify}
 statically.  These libraries enable watching of filesystems on the
 local machine.
 
@@ -2625,13 +2625,19 @@ any one of the following symbols:
 @item deleted
 @var{file} was deleted
 @item changed
address@hidden has changed
address@hidden's contents has changed; with @file{w32notify} library,
+reports attribute changes as well
 @item renamed
 @var{file} has been renamed to @var{file1}
 @item attribute-changed
 a @var{file} attribute was changed
 @end table
 
+Note that the @file{w32notify} library does not report
address@hidden events.  When some file's attribute, like
+permissions or modification time, has changed, this library reports a
address@hidden event.
+
 @var{file} and @var{file1} are the name of the file(s) whose event is
 being reported.  For example:
 
@@ -2692,6 +2698,17 @@ Removes an existing file watch specified by its 
@var{descriptor}.
 @code{file-notify-add-watch}.
 @end defun
 
address@hidden file-notify-valid-p descriptor
+Checks a watch specified by its @var{descriptor} for validity.
address@hidden should be an object returned by
address@hidden
+
+A watch can become invalid if the file or directory it watches is
+deleted, or if the watcher thread exits abnormally for any other
+reason.  Removing the watch by calling @code{file-notify-rm-watch}
+also makes it invalid.
address@hidden defun
+
 @node Dynamic Libraries
 @section Dynamically Loaded Libraries
 @cindex dynamic libraries
diff --git a/doc/lispref/package.texi b/doc/lispref/package.texi
index 7136286..21a8ddd 100644
--- a/doc/lispref/package.texi
+++ b/doc/lispref/package.texi
@@ -292,7 +292,7 @@ case for the default GNU archive).
 
 Otherwise, the base location should be a directory name.  In this
 case, Emacs retrieves packages from this archive via ordinary file
-access.  Such ``local'' archives are mainly useful for testing.
+access.  Such local archives are mainly useful for testing.
 @end defopt
 
   A package archive is simply a directory in which the package files,
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index 200935d..72b76ce 100644
--- a/doc/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -1,4 +1,4 @@
address@hidden -*-texinfo-*-
address@hidden -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
 @c Copyright (C) 1990-1995, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
@@ -22,11 +22,11 @@ be a position (an integer), but accept a marker as a 
substitute,
 normally ignore which buffer the marker points into; they convert the
 marker to an integer, and use that integer, exactly as if you had
 passed the integer as the argument, even if the marker points to the
-``wrong'' buffer.  A marker that points nowhere cannot convert to an
+wrong buffer.  A marker that points nowhere cannot convert to an
 integer; using it instead of an integer causes an error.
 @xref{Markers}.
 
-  See also the ``field'' feature (@pxref{Fields}), which provides
+  See also the field feature (@pxref{Fields}), which provides
 functions that are used by many cursor-motion commands.
 
 @menu
@@ -227,7 +227,7 @@ backward until encountering the front of a word, rather 
than forward.
 @c Emacs 19 feature
 This variable affects the behavior of @code{forward-word} and everything
 that uses it.  If it is address@hidden, then characters in the
-``escape'' and ``character quote'' syntax classes count as part of
+escape and character-quote syntax classes count as part of
 words.  Otherwise, they do not.
 @end defopt
 
@@ -409,7 +409,7 @@ mentioned here only for completeness.
 @deffn Command previous-line count
 @cindex goal column
 This function moves point up @var{count} lines (down if @var{count}
-is negative).  In moving, it attempts to keep point in the ``goal column''
+is negative).  In moving, it attempts to keep point in the @dfn{goal column}
 (normally the same column that it was at the beginning of the move).
 
 If there is no character in the target line exactly under the current
@@ -434,7 +434,7 @@ to use and more reliable (no dependence on goal column, 
etc.).
 
 @deffn Command next-line count
 This function moves point down @var{count} lines (up if @var{count}
-is negative).  In moving, it attempts to keep point in the ``goal column''
+is negative).  In moving, it attempts to keep point in the goal column
 (normally the same column that it was at the beginning of the move).
 
 If there is no character in the target line exactly under the current
@@ -827,7 +827,7 @@ is zero or less.
 @section Excursions
 @cindex excursion
 
-  It is often useful to move point ``temporarily'' within a localized
+  It is often useful to move point temporarily within a localized
 portion of the program.  This is called an @dfn{excursion}, and it is
 done with the @code{save-excursion} special form.  This construct
 remembers the initial identity of the current buffer, and its value
@@ -862,7 +862,7 @@ consequences, so the byte compiler warns if you call 
@code{set-buffer}
 during an excursion:
 
 @example
-Warning: Use `with-current-buffer' rather than
+Warning: Use ‘with-current-buffer’ rather than
          save-excursion+set-buffer
 @end example
 
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index c9509b0..845db0d 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -734,7 +734,7 @@ Initialize the process query flag to @var{query-flag}.
 
 @item :stop @var{stopped}
 If @var{stopped} is address@hidden, start the process in the
-``stopped'' state.
+stopped state.
 
 @item :filter @var{filter}
 Initialize the process filter to @var{filter}.
@@ -786,7 +786,7 @@ Initialize the process query flag to @var{query-flag}.
 
 @item :stop @var{stopped}
 If @var{stopped} is address@hidden, start the process in the
-``stopped'' state.
+stopped state.
 
 @item :filter @var{filter}
 Initialize the process filter to @var{filter}.
@@ -1070,7 +1070,7 @@ This function sets the process plist of @var{process} to 
@var{plist}.
   Asynchronous subprocesses receive input when it is sent to them by
 Emacs, which is done with the functions in this section.  You must
 specify the process to send input to, and the input data to send.  The
-data appears on the ``standard input'' of the subprocess.
+data appears on the standard input of the subprocess.
 
 @c FIXME which?
   Some operating systems have limited space for buffered input in a
@@ -1189,10 +1189,10 @@ job-control shells won't work when a pipe is used.  See
 
 @defun interrupt-process &optional process current-group
 This function interrupts the process @var{process} by sending the
-signal @code{SIGINT}.  Outside of Emacs, typing the ``interrupt
-character'' (normally @kbd{C-c} on some systems, and @key{DEL} on
+signal @code{SIGINT}.  Outside of Emacs, typing the interrupt
+character (normally @kbd{C-c} on some systems, and @key{DEL} on
 others) sends this signal.  When the argument @var{current-group} is
address@hidden, you can think of this function as ``typing @kbd{C-c}''
address@hidden, you can think of this function as typing @kbd{C-c}
 on the terminal by which Emacs talks to the subprocess.
 @end defun
 
@@ -1204,10 +1204,8 @@ and cannot be handled by the subprocess.
 
 @defun quit-process &optional process current-group
 This function sends the signal @code{SIGQUIT} to the process
address@hidden  This signal is the one sent by the ``quit
address@hidden FIXME?  Never heard of C-b being used for this.  In readline, 
e.g.,
address@hidden bash, that is backward-word.
-character'' (usually @kbd{C-b} or @kbd{C-\}) when you are not inside
address@hidden  This signal is the one sent by the quit
+character (usually @kbd{C-\}) when you are not inside
 Emacs.
 @end defun
 
@@ -1216,10 +1214,10 @@ This function stops the process @var{process} by 
sending the
 signal @code{SIGTSTP}.  Use @code{continue-process} to resume its
 execution.
 
-Outside of Emacs, on systems with job control, the ``stop character''
+Outside of Emacs, on systems with job control, the stop character
 (usually @kbd{C-z}) normally sends this signal.  When
 @var{current-group} is address@hidden, you can think of this function as
-``typing @kbd{C-z}'' on the terminal Emacs uses to communicate with the
+typing @kbd{C-z} on the terminal Emacs uses to communicate with the
 subprocess.
 @end defun
 
@@ -1849,7 +1847,7 @@ interruptible sleep (waiting for some event)
 @item "T"
 stopped, e.g., by a job control signal
 @item "Z"
-``zombie'': a process that terminated, but was not reaped by its parent
+zombie: a process that terminated, but was not reaped by its parent
 @end table
 
 @noindent
@@ -2074,7 +2072,7 @@ server is stopped; a address@hidden value means yes.
 @cindex @acronym{STARTTLS} network connections
 Emacs can create encrypted network connections, using either built-in
 or external support.  The built-in support uses the GnuTLS
-(``Transport Layer Security'') library; see
+Transport Layer Security Library; see
 @uref{http://www.gnu.org/software/gnutls/, the GnuTLS project page}.
 If your Emacs was compiled with GnuTLS support, the function
 @code{gnutls-available-p} is defined and returns address@hidden  For
@@ -2118,7 +2116,7 @@ The type of connection.  Options are:
 An ordinary, unencrypted connection.
 @item tls
 @itemx ssl
-A @acronym{TLS} (``Transport Layer Security'') connection.
+A @acronym{TLS} (Transport Layer Security) connection.
 @item nil
 @itemx network
 Start with a plain connection, and if parameters @samp{:success}
@@ -2306,7 +2304,7 @@ necessary to make it unique.
 @item :type @var{type}
 Specify the communication type.  A value of @code{nil} specifies a
 stream connection (the default); @code{datagram} specifies a datagram
-connection; @code{seqpacket} specifies a ``sequenced packet stream''
+connection; @code{seqpacket} specifies a sequenced packet stream
 connection.  Both connections and servers can be of these types.
 
 @item :server @var{server-flag}
@@ -2373,7 +2371,7 @@ A local address is represented as a string, which 
specifies the address
 in the local address space.
 
 @item
-An ``unsupported family'' address is represented by a cons
+An unsupported-family address is represented by a cons
 @code{(@var{f} . @var{av})}, where @var{f} is the family number and
 @var{av} is a vector specifying the socket address using one element
 per address data byte.  Do not rely on this format in portable code,
@@ -2392,7 +2390,7 @@ has succeeded or failed.
 
 @item :stop @var{stopped}
 If @var{stopped} is address@hidden, start the network connection or
-server in the ``stopped'' state.
+server in the stopped state.
 
 @item :buffer @var{buffer}
 Use @var{buffer} as the process buffer.
@@ -2700,7 +2698,7 @@ Initialize the process query flag to @var{query-flag}.  
@xref{Query
 Before Exit}.  The flags defaults to @code{nil} if unspecified.
 
 @item :stop @var{bool}
-Start process in the ``stopped'' state if @var{bool} is
+Start process in the stopped state if @var{bool} is
 address@hidden  In the stopped state, a serial process does not
 accept incoming data, but you can send outgoing data.  The stopped
 state is cleared by @code{continue-process} and set by
@@ -2830,7 +2828,7 @@ specification}, a special nested list describing named 
and typed
 @dfn{fields}.  This specification controls the length of each field to be
 processed, and how to pack or unpack it.  We normally keep bindat specs
 in variables whose names end in @samp{-bindat-spec}; that kind of name
-is automatically recognized as ``risky''.
+is automatically recognized as risky.
 
 @cindex endianness
 @cindex big endian
@@ -2839,8 +2837,8 @@ is automatically recognized as ``risky''.
   A field's @dfn{type} describes the size (in bytes) of the object
 that the field represents and, in the case of multibyte fields, how
 the bytes are ordered within the field.  The two possible orderings
-are ``big endian'' (also known as ``network byte ordering'') and
-``little endian''.  For instance, the number @code{#x23cd} (decimal
+are @dfn{big endian} (also known as ``network byte ordering'') and
address@hidden endian}.  For instance, the number @code{#x23cd} (decimal
 9165) in big endian would be the two bytes @code{#x23} @code{#xcd};
 and in little endian, @code{#xcd} @code{#x23}.  Here are the possible
 type values:
diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi
index 60360cb..adaf431 100644
--- a/doc/lispref/searching.texi
+++ b/doc/lispref/searching.texi
@@ -113,7 +113,7 @@ match.
 @end deffn
 
 @deffn Command word-search-forward string &optional limit noerror repeat
-This function searches forward from point for a ``word'' match for
+This function searches forward from point for a word match for
 @var{string}.  If it finds a match, it sets point to the end of the
 match found, and returns the new value of point.
 
@@ -359,7 +359,7 @@ preceding expression either once or not at all.  For 
example,
 
 @item @samp{*?}, @samp{+?}, @samp{??}
 @cindex non-greedy repetition characters in regexp
-These are ``non-greedy'' variants of the operators @samp{*}, @samp{+}
+These are @dfn{non-greedy} variants of the operators @samp{*}, @samp{+}
 and @samp{?}.  Where those operators match the largest possible
 substring (consistent with matching the entire containing expression),
 the non-greedy variants match the smallest possible substring
@@ -1759,7 +1759,7 @@ in two ways:
 
 @itemize @bullet
 @item
-The ``key bindings'' are not commands, just symbols that are meaningful
+The key bindings are not commands, just symbols that are meaningful
 to the functions that use this map.
 
 @item
@@ -1770,7 +1770,7 @@ event and look it up ``by hand''.
 @end itemize
 @end defvar
 
-Here are the meaningful ``bindings'' for @code{query-replace-map}.
+Here are the meaningful bindings for @code{query-replace-map}.
 Several of them are meaningful only for @code{query-replace} and
 friends.
 
@@ -1835,7 +1835,7 @@ Display some help, then ask again.
 @defvar multi-query-replace-map
 This variable holds a keymap that extends @code{query-replace-map} by
 providing additional keybindings that are useful in multi-buffer
-replacements.  The additional ``bindings'' are:
+replacements.  The additional bindings are:
 
 @table @code
 @item automatic-all
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index f73779b..b85d5d4 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -342,7 +342,7 @@ order elements according to different criteria.
 The argument @var{predicate} must be a function that accepts two
 arguments.  It is called with two elements of @var{sequence}.  To get an
 increasing order sort, the @var{predicate} should return address@hidden if the
-first element is ``less than'' the second, or @code{nil} if not.
+first element is ``less'' than the second, or @code{nil} if not.
 
 The comparison function @var{predicate} must give reliable results for
 any given pair of arguments, at least within a single call to
@@ -578,6 +578,27 @@ value is the value returned by @var{predicate}.
 @end example
 @end defun
 
address@hidden seq-find predicate sequence &optional default
+  This function returns the first element for which @var{predicate}
+returns address@hidden in @var{sequence}.  If no element matches
address@hidden, @var{default} is returned.
+
+Note that this function has an ambiguity if the found element is
+identical to @var{default}, as it cannot be known if an element was
+found or not.
+
address@hidden
address@hidden
+(seq-find #'numberp ["abc" 1 nil])
address@hidden 1
address@hidden group
address@hidden
+(seq-find #'numberp ["abc" "def"])
address@hidden nil
address@hidden group
address@hidden example
address@hidden defun
+
 @defun seq-every-p predicate sequence
   This function returns address@hidden if applying @var{predicate}
 to every element of @var{sequence} returns address@hidden
@@ -1254,13 +1275,13 @@ This function sets the parent of @var{char-table} to 
@var{new-parent}.
 @end defun
 
 @defun char-table-extra-slot char-table n
-This function returns the contents of extra slot @var{n} of
address@hidden  The number of extra slots in a char-table is
+This function returns the contents of extra slot @var{n} (zero based)
+of @var{char-table}.  The number of extra slots in a char-table is
 determined by its subtype.
 @end defun
 
 @defun set-char-table-extra-slot char-table n value
-This function stores @var{value} in extra slot @var{n} of
+This function stores @var{value} in extra slot @var{n} (zero based) of
 @var{char-table}.
 @end defun
 
@@ -1468,7 +1489,7 @@ deletion, rotation, and modulo-indexed reference and 
traversal.  An
 efficient ring data structure is implemented by the @code{ring}
 package.  It provides the functions listed in this section.
 
-  Note that several ``rings'' in Emacs, like the kill ring and the
+  Note that several rings in Emacs, like the kill ring and the
 mark ring, are actually implemented as simple lists, @emph{not} using
 the @code{ring} package; thus the following functions won't work on
 them.
diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi
index dfad2d8..025b0e9 100644
--- a/doc/lispref/streams.texi
+++ b/doc/lispref/streams.texi
@@ -113,8 +113,8 @@ When it is called with no arguments, it should return the 
next character.
 When it is called with one argument (always a character), @var{function}
 should save the argument and arrange to return it on the next call.
 This is called @dfn{unreading} the character; it happens when the Lisp
-reader reads one character too many and wants to ``put it back where it
-came from''.  In this case, it makes no difference what value
+reader reads one character too many and wants to put it back where it
+came from.  In this case, it makes no difference what value
 @var{function} returns.
 @end itemize
 
@@ -701,7 +701,7 @@ returns @code{"The buffer is foo"}.
 
 @defun pp object &optional stream
 This function outputs @var{object} to @var{stream}, just like
address@hidden, but does it in a more ``pretty'' way.  That is, it'll
address@hidden, but does it in a prettier way.  That is, it'll
 indent and fill the object to make it more readable for humans.
 @end defun
 
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index f422507..143de82 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -1,4 +1,4 @@
address@hidden -*-texinfo-*-
address@hidden -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
 @c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
@@ -644,7 +644,7 @@ string.  Likewise, the specified part of @var{string2} runs 
from index
 @var{start2} up to index @var{end2}.
 
 The strings are compared by the numeric values of their characters.
-For instance, @var{str1} is considered ``smaller than'' @var{str2} if
+For instance, @var{str1} is considered less than @var{str2} if
 its first differing character has a smaller numeric value.  If
 @var{ignore-case} is address@hidden, characters are converted to
 lower-case before comparing them.  Unibyte strings are converted to
@@ -685,7 +685,7 @@ against a string, can be used for a kind of string 
comparison; see
 strings and integers.  @code{format} (@pxref{Formatting Strings}) and
 @code{prin1-to-string} (@pxref{Output Functions}) can also convert
 Lisp objects into strings.  @code{read-from-string} (@pxref{Input
-Functions}) can ``convert'' a string representation of a Lisp object
+Functions}) can convert a string representation of a Lisp object
 into an object.  The functions @code{string-to-multibyte} and
 @code{string-to-unibyte} convert the text representation of a string
 (@pxref{Converting Representations}).
@@ -990,7 +990,7 @@ numbers and negative numbers use the same number of 
columns.  They are
 ignored except for @samp{%d}, @samp{%e}, @samp{%f}, @samp{%g}, and if
 both flags are used, @samp{+} takes precedence.
 
-  The flag @samp{#} specifies an ``alternate form'' which depends on
+  The flag @samp{#} specifies an alternate form which depends on
 the format in use.  For @samp{%o}, it ensures that the result begins
 with a @samp{0}.  For @samp{%x} and @samp{%X}, it prefixes the result
 with @samp{0x} or @samp{0X}.  For @samp{%e}, @samp{%f}, and @samp{%g},
@@ -1245,8 +1245,8 @@ Exits}).
 
   Some language environments modify the case conversions of
 @acronym{ASCII} characters; for example, in the Turkish language
-environment, the @acronym{ASCII} character @samp{I} is downcased into
-a Turkish ``dotless i''.  This can interfere with code that requires
+environment, the @acronym{ASCII} capital I is downcased into
+a Turkish dotless i (@samp{ı}).  This can interfere with code that requires
 ordinary @acronym{ASCII} case conversion, such as implementations of
 @acronym{ASCII}-based network protocols.  In that case, use the
 @code{with-case-table} macro with the variable @var{ascii-case-table},
diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi
index a6545ea..2605a3e 100644
--- a/doc/lispref/symbols.texi
+++ b/doc/lispref/symbols.texi
@@ -176,7 +176,7 @@ cause complete confusion.
 @cindex obarray
 @cindex bucket (in obarray)
   When the Lisp reader encounters a symbol, it reads all the characters
-of the name.  Then it ``hashes'' those characters to find an index in a
+of the name.  Then it hashes those characters to find an index in a
 table called an @dfn{obarray}.  Hashing is an efficient method of
 looking something up.  For example, instead of searching a telephone
 book cover to cover when looking up Jan Jones, you start with the J's
@@ -525,7 +525,7 @@ The value is an expression for determining whether the 
named menu item
 should be enabled in menus.  @xref{Simple Menu Items}.
 
 @item mode-class
-If the value is @code{special}, the named major mode is ``special''.
+If the value is @code{special}, the named major mode is special.
 @xref{Major Mode Conventions}.
 
 @item permanent-local
diff --git a/doc/lispref/syntax.texi b/doc/lispref/syntax.texi
index 90daf34..7a984e3 100644
--- a/doc/lispref/syntax.texi
+++ b/doc/lispref/syntax.texi
@@ -98,7 +98,7 @@ serves as the name of the class when you need to specify a 
class.
 Usually, this designator character is one that is often assigned that
 class; however, its meaning as a designator is unvarying and
 independent of what syntax that character currently has.  Thus,
address@hidden as a designator character always means ``escape character''
address@hidden as a designator character always stands for escape character
 syntax, regardless of whether the @samp{\} character actually has that
 syntax in the current syntax table.
 @ifnottex
@@ -377,7 +377,7 @@ character does not have the @samp{b} flag.
 @end table
 
 @item
address@hidden identifies an additional ``prefix character'' for Lisp syntax.
address@hidden identifies an additional prefix character for Lisp syntax.
 These characters are treated as whitespace when they appear between
 expressions.  When they appear within an expression, they are handled
 according to their usual syntax classes.
@@ -640,7 +640,7 @@ expression prefix syntax class, and characters with the 
@samp{p} flag.
 expressions.  We will refer to such expressions as @dfn{sexps},
 following the terminology of Lisp, even though these functions can act
 on languages other than Lisp.  Basically, a sexp is either a balanced
-parenthetical grouping, a string, or a ``symbol'' (i.e., a sequence
+parenthetical grouping, a string, or a symbol (i.e., a sequence
 of characters whose syntax is either word constituent or symbol
 constituent).  However, characters in the expression prefix syntax
 class (@pxref{Syntax Class Table}) are treated as part of the sexp if
@@ -654,7 +654,7 @@ higher-level functions for moving over balanced expressions.
   A character's syntax controls how it changes the state of the
 parser, rather than describing the state itself.  For example, a
 string delimiter character toggles the parser state between
-``in-string'' and ``in-code'', but the syntax of characters does not
+in-string and in-code, but the syntax of characters does not
 directly say whether they are inside a string.  For example (note that
 15 is the syntax code for generic string delimiters),
 
@@ -731,7 +731,7 @@ number of complete comments.  If @var{count} comments are 
found as
 expected, with nothing except whitespace between them, it returns
 @code{t}; otherwise it returns @code{nil}.
 
-This function cannot tell whether the ``comments'' it traverses are
+This function cannot tell whether the comments it traverses are
 embedded within a string.  If they look like comments, it treats them
 as comments.
 
@@ -1084,18 +1084,27 @@ documentation @var{docstring}, for the category table 
@var{table}.
 
 Here's an example of defining a new category for characters that have
 strong right-to-left directionality (@pxref{Bidirectional Display})
-and using it in a special category table:
+and using it in a special category table.  To obtain the information
+about the directionality of characters, the example code uses the
address@hidden Unicode property (@pxref{Character Properties,
+bidi-class}).
 
 @example
 (defvar special-category-table-for-bidi
+  ;;     Make an empty category-table.
   (let ((category-table (make-category-table))
-       (uniprop-table (unicode-property-table-internal 'bidi-class)))
+        ;; Create a char-table which gives the 'bidi-class' Unicode
+        ;; property for each character.
+        (uniprop-table (unicode-property-table-internal 'bidi-class)))
     (define-category ?R "Characters of bidi-class R, AL, or RLO"
                      category-table)
+    ;; Modify the category entry of each character whose 'bidi-class'
+    ;; Unicode property is R, AL, or RLO -- these have a
+    ;; right-to-left directionality.
     (map-char-table
      #'(lambda (key val)
-        (if (memq val '(R AL RLO))
-            (modify-category-entry key ?R category-table)))
+         (if (memq val '(R AL RLO))
+             (modify-category-entry key ?R category-table)))
      uniprop-table)
     category-table))
 @end example
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 55e550a..6d9d26f 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -58,7 +58,7 @@ the character after point.
 * Base 64::          Conversion to or from base 64 encoding.
 * Checksum/Hash::    Computing cryptographic hashes.
 * Parsing HTML/XML:: Parsing HTML and XML.
-* Atomic Changes::   Installing several buffer changes ``atomically''.
+* Atomic Changes::   Installing several buffer changes atomically.
 * Change Hooks::     Supplying functions to be run when text is changed.
 @end menu
 
@@ -578,7 +578,7 @@ error; if some of the text in it is read-only, it signals a
 asking for any confirmation.  It returns @code{nil}.
 
 Normally, deleting a large amount of text from a buffer inhibits further
-auto-saving of that buffer ``because it has shrunk''.  However,
+auto-saving of that buffer because it has shrunk.  However,
 @code{erase-buffer} does not do this, the idea being that the future
 text is not really related to the former text, and its size should not
 be compared with that of the former text.
@@ -825,7 +825,7 @@ buffer if the variable @code{delete-trailing-lines} is 
address@hidden
 it so that the user can reinsert it by @dfn{yanking}.  Most of these
 functions have @samp{kill-} in their name.  By contrast, the functions
 whose names start with @samp{delete-} normally do not save text for
-yanking (though they can still be undone); these are ``deletion''
+yanking (though they can still be undone); these are deletion
 functions.
 
   Most of the kill commands are primarily for interactive use, and are
@@ -846,8 +846,8 @@ that treat it as a ring.
 
   Some people think this use of the word ``kill'' is unfortunate, since
 it refers to operations that specifically @emph{do not} destroy the
-entities ``killed''.  This is in sharp contrast to ordinary life, in
-which death is permanent and ``killed'' entities do not come back to
+entities killed.  This is in sharp contrast to ordinary life, in
+which death is permanent and killed entities do not come back to
 life.  Therefore, other metaphors have been proposed.  For example, the
 term ``cut ring'' makes sense to people who, in pre-computer days, used
 scissors and paste to cut up and rearrange manuscripts.  However, it
@@ -882,9 +882,9 @@ succession build up a single kill ring entry, which would 
be yanked as a
 unit; the second and subsequent consecutive kill commands add text to
 the entry made by the first one.
 
-  For yanking, one entry in the kill ring is designated the ``front'' of
-the ring.  Some yank commands ``rotate'' the ring by designating a
-different element as the ``front''.  But this virtual rotation doesn't
+  For yanking, one entry in the kill ring is designated the front of
+the ring.  Some yank commands rotate the ring by designating a
+different element as the front.  But this virtual rotation doesn't
 change the list itself---the most recent entry always comes first in the
 list.
 
@@ -892,7 +892,7 @@ list.
 @subsection Functions for Killing
 
   @code{kill-region} is the usual subroutine for killing text.  Any
-command that calls this function is a ``kill command'' (and should
+command that calls this function is a kill command (and should
 probably have @samp{kill} in its name).  @code{kill-region} puts the
 newly killed text in a new element at the beginning of the kill ring or
 adds it to the most recent element.  It determines automatically (using
@@ -1101,7 +1101,7 @@ because they take care of interaction with window system 
selections
 
 @defun current-kill n &optional do-not-move
 The function @code{current-kill} rotates the yanking pointer, which
-designates the ``front'' of the kill ring, by @var{n} places (from newer
+designates the front of the kill ring, by @var{n} places (from newer
 kills to older ones), and returns the text at that place in the ring.
 
 If the optional second argument @var{do-not-move} is address@hidden,
@@ -1148,13 +1148,13 @@ programs, when you are using a window system.  Its 
value should be
 @code{nil} or a function of no arguments.
 
 If the value is a function, @code{current-kill} calls it to get the
-``most recent kill''.  If the function returns a address@hidden value,
-then that value is used as the ``most recent kill''.  If it returns
+most recent kill.  If the function returns a address@hidden value,
+then that value is used as the most recent kill.  If it returns
 @code{nil}, then the front of the kill ring is used.
 
 To facilitate support for window systems that support multiple
 selections, this function may also return a list of strings.  In that
-case, the first string is used as the ``most recent kill'', and all
+case, the first string is used as the most recent kill, and all
 the other strings are pushed onto the kill ring, for easy access by
 @code{yank-pop}.
 
@@ -1186,7 +1186,7 @@ of the list.
 
   The @code{kill-ring-yank-pointer} variable points to a link in the
 kill ring list, whose @sc{car} is the text to yank next.  We say it
-identifies the ``front'' of the ring.  Moving
+identifies the front of the ring.  Moving
 @code{kill-ring-yank-pointer} to a different link is called
 @dfn{rotating the kill ring}.  We call the kill ring a ``ring'' because
 the functions that move the yank pointer wrap around from the end of the
@@ -1238,7 +1238,7 @@ killed first.
 
 @defvar kill-ring-yank-pointer
 This variable's value indicates which element of the kill ring is at the
-``front'' of the ring for yanking.  More precisely, the value is a tail
+front of the ring for yanking.  More precisely, the value is a tail
 of the value of @code{kill-ring}, and its @sc{car} is the kill string
 that @kbd{C-y} should yank.
 @end defvar
@@ -1423,7 +1423,7 @@ cannot specify any other buffer.  This function returns 
@code{nil}.
 
   As editing continues, undo lists get longer and longer.  To prevent
 them from using up all available memory space, garbage collection trims
-them back to size limits you can set.  (For this purpose, the ``size''
+them back to size limits you can set.  (For this purpose, the size
 of an undo list measures the cons cells that make up the list, plus the
 strings of deleted text.)  Three variables control the range of acceptable
 sizes: @code{undo-limit}, @code{undo-strong-limit} and
@@ -1648,8 +1648,8 @@ Manual}.
 
 @defvar use-hard-newlines
 If this variable is address@hidden, the filling functions do not delete
-newlines that have the @code{hard} text property.  These ``hard
-newlines'' act as paragraph separators.  @xref{Hard and Soft
+newlines that have the @code{hard} text property.  These hard
+newlines act as paragraph separators.  @xref{Hard and Soft
 Newlines,, Hard and Soft Newlines, emacs, The GNU Emacs Manual}.
 @end defvar
 
@@ -1823,7 +1823,7 @@ Used only in one-line paragraphs, this regular expression 
acts as an
 additional check of the validity of the one available candidate fill
 prefix: the candidate must match this regular expression, or match
 @code{comment-start-skip}.  If it doesn't, @code{fill-context-prefix}
-replaces the candidate with a string of spaces ``of the same width''
+replaces the candidate with a string of spaces of the same width
 as it.
 
 The default value of this variable is @address@hidden"\\`[ \t]*\\'"}}, which
@@ -1836,7 +1836,7 @@ whitespace.
 You can specify more complex ways of choosing a fill prefix
 automatically by setting this variable to a function.  The function is
 called with point after the left margin (if any) of a line, and it
-must preserve point.  It should return either ``that line's'' fill
+must preserve point.  It should return either that line's fill
 prefix or @code{nil}, meaning it has failed to determine a prefix.
 @end defopt
 
@@ -2382,7 +2382,7 @@ a different meaning and does not use this variable.
 @deffn Command indent-rigidly start end count
 This function indents all lines starting between @var{start}
 (inclusive) and @var{end} (exclusive) sideways by @var{count} columns.
-This ``preserves the shape'' of the affected region, moving it as a
+This preserves the shape of the affected region, moving it as a
 rigid unit.
 
 This is useful not only for indenting regions of unindented text, but
@@ -2481,10 +2481,10 @@ column, this command does nothing.
 @end deffn
 
 @node Indent Tabs
address@hidden Adjustable ``Tab Stops''
address@hidden Adjustable Tab Stops
 @cindex tabs stops for indentation
 
-  This section explains the mechanism for user-specified ``tab stops''
+  This section explains the mechanism for user-specified tab stops
 and the mechanisms that use and set them.  The name ``tab stops'' is
 used because the feature is similar to that of the tab stops on a
 typewriter.  The feature works by inserting an appropriate number of
@@ -3165,7 +3165,7 @@ This property says whether the text is ready for display. 
 If
 @code{nil}, Emacs's redisplay routine calls the functions in
 @code{fontification-functions} (@pxref{Auto Faces}) to prepare this
 part of the buffer before it is displayed.  It is used internally by
-the ``just in time'' font locking code.
+the just-in-time font locking code.
 
 @item display
 This property activates various features that change the
@@ -3623,8 +3623,8 @@ once for the same part of the buffer, you can use the 
variable
 @defvar buffer-access-fontified-property
 If this variable's value is address@hidden, it is a symbol which is used
 as a text property name.  A address@hidden value for that text property
-means, ``the other text properties for this character have already been
-computed''.
+means the other text properties for this character have already been
+computed.
 
 If all the characters in the range specified for @code{buffer-substring}
 have a address@hidden value for this property, @code{buffer-substring}
@@ -3742,10 +3742,10 @@ controlled by the user option 
@code{mouse-1-click-follows-link}.
 bind the @code{follow-link} event to a keymap (which can be a major
 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
+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
-occurring ``inside'' the link, and how to compute an ``action code''
+occurring inside the link, and how to compute an action code
 that says what to translate the @kbd{Mouse-1} click into.  The link
 action condition can be one of the following:
 
@@ -3911,7 +3911,7 @@ This function deletes the text of the field specified by 
@var{pos}.
 @end defun
 
 @defun constrain-to-field new-pos old-pos &optional escape-from-edge 
only-in-line inhibit-capture-property
-This function ``constrains'' @var{new-pos} to the field that
+This function constrains @var{new-pos} to the field that
 @var{old-pos} belongs to---in other words, it returns the position
 closest to @var{new-pos} that is in the same field as @var{old-pos}.
 
@@ -3929,7 +3929,7 @@ after @var{old-pos}.)  If @var{escape-from-edge} is 
address@hidden,
 @var{new-pos} can be anywhere in the two adjacent fields.
 Additionally, if two fields are separated by another field with the
 special value @code{boundary}, then any point within this special
-field is also considered to be ``on the boundary''.
+field is also considered to be on the boundary.
 
 Commands like @kbd{C-a} with no argument, that normally move backward
 to a specific kind of location and stay there once there, probably
@@ -3957,7 +3957,7 @@ You can cause @code{constrain-to-field} to ignore all 
field boundaries
 @cindex intervals
 
   Some editors that support adding attributes to text in the buffer do
-so by letting the user specify ``intervals'' within the text, and adding
+so by letting the user specify intervals within the text, and adding
 the properties to the intervals.  Those editors permit the user or the
 programmer to determine where individual intervals start and end.  We
 deliberately provided a different sort of interface in Emacs Lisp to
@@ -3975,7 +3975,7 @@ Then if you yank back the killed text, you get two 
intervals with the
 same properties.  Thus, editing does not preserve the distinction
 between one interval and two.
 
-  Suppose we ``fix'' this problem by coalescing the two intervals when
+  Suppose we attempt to fix this problem by coalescing the two intervals when
 the text is inserted.  That works fine if the buffer originally was a
 single interval.  But suppose instead that we have two adjacent
 intervals with the same properties, and we kill the text of one interval
@@ -4277,7 +4277,7 @@ The decoding functions ignore newline characters in the 
encoded text.
 @cindex cryptographic hash
 
   Emacs has built-in support for computing @dfn{cryptographic hashes}.
-A cryptographic hash, or @dfn{checksum}, is a digital ``fingerprint''
+A cryptographic hash, or @dfn{checksum}, is a digital fingerprint
 of a piece of data (e.g., a block of text) which can be used to check
 that you have an unaltered copy of that data.
 
@@ -4286,7 +4286,7 @@ that you have an unaltered copy of that data.
 SHA-1, SHA-2, SHA-224, SHA-256, SHA-384 and SHA-512.  MD5 is the
 oldest of these algorithms, and is commonly used in @dfn{message
 digests} to check the integrity of messages transmitted over a
-network.  MD5 is not ``collision resistant'' (i.e., it is possible to
+network.  MD5 is not collision resistant (i.e., it is possible to
 deliberately design different pieces of data which have the same MD5
 hash), so you should not used it for anything security-related.  A
 similar theoretical weakness also exists in SHA-1.  Therefore, for
@@ -4347,7 +4347,7 @@ are available to parse HTML or XML text into Lisp object 
trees.
 @defun libxml-parse-html-region start end &optional base-url discard-comments
 This function parses the text between @var{start} and @var{end} as
 HTML, and returns a list representing the HTML @dfn{parse tree}.  It
-attempts to handle ``real world'' HTML by robustly coping with syntax
+attempts to handle real-world HTML by robustly coping with syntax
 mistakes.
 
 The optional argument @var{base-url}, if address@hidden, should be a
@@ -4559,7 +4559,7 @@ lower-level functions that @code{atomic-change-group} 
uses.
 
 @defun prepare-change-group &optional buffer
 This function sets up a change group for buffer @var{buffer}, which
-defaults to the current buffer.  It returns a ``handle'' that
+defaults to the current buffer.  It returns a handle that
 represents the change group.  You must use this handle to activate the
 change group and subsequently to finish it.
 @end defun
diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi
index 3bde0a8..d9cbf47 100644
--- a/doc/lispref/tips.texi
+++ b/doc/lispref/tips.texi
@@ -1,4 +1,4 @@
address@hidden -*-texinfo-*-
address@hidden -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
 @c Copyright (C) 1990-1993, 1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
@@ -398,7 +398,7 @@ Enter the answer (default 42):
 
 @item
 In @code{interactive}, if you use a Lisp expression to produce a list
-of arguments, don't try to provide the ``correct'' default values for
+of arguments, don't try to provide the correct default values for
 region or position arguments.  Instead, provide @code{nil} for those
 arguments if they were not specified, and have the function body
 compute the default value when the argument is @code{nil}.  For
@@ -772,7 +772,7 @@ is indicative and has a proper subject.
 @item
 The documentation string for a function that is a yes-or-no predicate
 should start with words such as ``Return t if'', to indicate
-explicitly what constitutes ``truth''.  The word ``return'' avoids
+explicitly what constitutes truth.  The word ``return'' avoids
 starting the sentence with lower-case ``t'', which could be somewhat
 distracting.
 
@@ -883,7 +883,7 @@ strings, though.
 Comments that start with three semicolons, @samp{;;;}, should start at
 the left margin.  We use them
 for comments which should be considered a
-``heading'' by Outline minor mode.  By default, comments starting with
+heading by Outline minor mode.  By default, comments starting with
 at least three semicolons (followed by a single space and a
 non-whitespace character) are considered headings, comments starting
 with two or fewer are not.  Historically, triple-semicolon comments have
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index 369e8dd..1d92094 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -25,7 +25,7 @@ representing the variable.
 
 @menu
 * Global Variables::            Variable values that exist permanently, 
everywhere.
-* Constant Variables::          Certain ``variables'' have values that never 
change.
+* Constant Variables::          Variables that never change.
 * Local Variables::             Variable values that exist only temporarily.
 * Void Variables::              Symbols that lack values.
 * Defining Variables::          A definition says a symbol is used as a 
variable.
@@ -131,7 +131,7 @@ starts with @samp{:}, interned in the standard obarray, and 
returns
 @code{nil} otherwise.
 @end defun
 
-These constants are fundamentally different from the ``constants''
+These constants are fundamentally different from the constants
 defined using the @code{defconst} special form (@pxref{Defining
 Variables}).  A @code{defconst} form serves to inform human readers
 that you do not intend to change the value of a variable, but Emacs
@@ -178,7 +178,7 @@ It determines the value returned by evaluating the variable 
symbol,
 and it is the binding acted on by @code{setq}.
 
   For most purposes, you can think of the current binding as the
-``innermost'' local binding, or the global binding if there is no
+innermost local binding, or the global binding if there is no
 local binding.  To be more precise, a rule called the @dfn{scoping
 rule} determines where in a program a local binding takes effect.  The
 default scoping rule in Emacs Lisp is called @dfn{dynamic scoping},
@@ -263,7 +263,7 @@ Macro calls (@pxref{Macros}).
 Variables}); a few variables have terminal-local bindings
 (@pxref{Multiple Terminals}).  These kinds of bindings work somewhat
 like ordinary local bindings, but they are localized depending on
-``where'' you are in Emacs.
+where you are in Emacs.
 
 @defopt max-specpdl-size
 @anchor{Definition of max-specpdl-size}
@@ -287,7 +287,7 @@ has room to execute.
 @end defopt
 
 @node Void Variables
address@hidden When a Variable is ``Void''
address@hidden When a Variable is Void
 @cindex @code{void-variable} error
 @cindex void variable
 
@@ -545,8 +545,7 @@ The value is a list of forms (expressions).
 
 @item @dots{}-predicate
 The value is a predicate---a function of one argument that returns
address@hidden for ``good'' arguments and @code{nil} for ``bad''
-arguments.
address@hidden for success and @code{nil} for failure.
 
 @item @dots{}-flag
 The value is significant only as to whether it is @code{nil} or not.
@@ -564,7 +563,7 @@ The value specifies options for a command.
 @end table
 
   When you define a variable, always consider whether you should mark
-it as ``safe'' or ``risky''; see @ref{File Local Variables}.
+it as safe or risky; see @ref{File Local Variables}.
 
   When defining and initializing a variable that holds a complicated
 value (such as a keymap with bindings in it), it's best to put the
@@ -831,7 +830,7 @@ following example:
 (defvar x -99)  ; @address@hidden receives an initial value of @minus{}99.}
 
 (defun getx ()
-  x)            ; @address@hidden is used ``free'' in this function.}
+  x)            ; @address@hidden is used free in this function.}
 
 (let ((x 1))    ; @address@hidden is dynamically bound.}
   (getx))
@@ -846,7 +845,7 @@ following example:
 @end example
 
 @noindent
-The function @code{getx} refers to @code{x}.  This is a ``free''
+The function @code{getx} refers to @code{x}.  This is a @dfn{free}
 reference, in the sense that there is no binding for @code{x} within
 that @code{defun} construct itself.  When we call @code{getx} from
 within a @code{let} form in which @code{x} is (dynamically) bound, it
@@ -957,7 +956,7 @@ construct.  Here is an example
      @result{} 4
 
 (defun getx ()
-  x)            ; @address@hidden is used ``free'' in this function.}
+  x)            ; @address@hidden is used free in this function.}
 
 (let ((x 1))    ; @address@hidden is lexically bound.}
   (getx))
@@ -1094,10 +1093,10 @@ it is not inadvertently bound lexically.
   A simple way to find out which variables need a variable definition
 is to byte-compile the source file.  @xref{Byte Compilation}.  If a
 non-special variable is used outside of a @code{let} form, the
-byte-compiler will warn about reference or assignment to a ``free
-variable''.  If a non-special variable is bound but not used within a
address@hidden form, the byte-compiler will warn about an ``unused lexical
-variable''.  The byte-compiler will also issue a warning if you use a
+byte-compiler will warn about reference or assignment to a free
+variable.  If a non-special variable is bound but not used within a
address@hidden form, the byte-compiler will warn about an unused lexical
+variable.  The byte-compiler will also issue a warning if you use a
 special variable as a function argument.
 
   (To silence byte-compiler warnings about unused variables, just use
@@ -1406,7 +1405,7 @@ buffer-local variables interactively.
 @cindex local variables, killed by major mode
 @defun kill-all-local-variables
 This function eliminates all the buffer-local variable bindings of the
-current buffer except for variables marked as ``permanent'' and local
+current buffer except for variables marked as permanent and local
 hook functions that have a address@hidden @code{permanent-local-hook}
 property (@pxref{Setting Hooks}).  As a result, the buffer will see
 the default values of most variables.
@@ -1997,7 +1996,7 @@ a regular Lisp variable.  But the @sc{car}s and @sc{cdr}s 
of lists, elements
 of arrays, properties of symbols, and many other locations are also
 places where Lisp values are stored.
 
-Generalized variables are analogous to ``lvalues'' in the C
+Generalized variables are analogous to lvalues in the C
 language, where @samp{x = a[i]} gets an element from an array
 and @samp{a[i] = x} stores an element using the same notation.
 Just as certain forms like @code{a[i]} can be lvalues in C, there
@@ -2170,7 +2169,7 @@ of Common Lisp.  Consult the source file @file{gv.el} for 
more details.
 @cindex CL note---no @code{setf} functions
 @quotation
 @b{Common Lisp note:} Common Lisp defines another way to specify the
address@hidden behavior of a function, namely address@hidden functions'',
address@hidden behavior of a function, namely @code{setf} functions,
 whose names are lists @code{(setf @var{name})} rather than symbols.
 For example, @code{(defun (setf foo) @dots{})} defines the function
 that is used when @code{setf} is applied to @code{foo}.  Emacs does
diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index 4656938..00161b2 100644
--- a/doc/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -430,7 +430,7 @@ Format}); and the bottom divider (@pxref{Window Dividers}).
 width of a window.  The return value of many of these functions can be
 specified either in units of pixels or in units of lines and columns.
 On a graphical display, the latter actually correspond to the height and
-width of a ``default'' character specified by the frame's default font
+width of a default character specified by the frame's default font
 as returned by @code{frame-char-height} and @code{frame-char-width}
 (@pxref{Frame Font}).  Thus, if a window is displaying text with a
 different font or size, the reported line height and column width for
@@ -1050,7 +1050,7 @@ This section describes functions for creating a new 
window by
 @defun split-window &optional window size side pixelwise
 This function creates a new live window next to the window
 @var{window}.  If @var{window} is omitted or @code{nil}, it defaults
-to the selected window.  That window is ``split'', and reduced in
+to the selected window.  That window is split, and reduced in
 size.  The space is taken up by the new window, which is returned.
 
 The optional second argument @var{size} determines the sizes of
@@ -1075,7 +1075,7 @@ check whether the emanating windows are large enough to 
encompass all
 areas like a mode line or a scroll bar.  The function
 @code{window-min-size} (@pxref{Window Sizes}) can be used to determine
 the minimum requirements of @var{window} in this regard.  Since the new
-window usually ``inherits'' areas like the mode line or the scroll bar
+window usually inherits areas like the mode line or the scroll bar
 from @var{window}, that function is also a good guess for the minimum
 size of the new window.  The caller should specify a smaller size only
 if it correspondingly removes an inherited area before the next
@@ -1661,7 +1661,7 @@ internal routines often temporarily select a window in 
order to simplify
 coding.  As a rule, such selections (including those made by the macros
 @code{save-selected-window} and @code{with-selected-window} below) are
 not recorded thus avoiding to pollute @code{buffer-list-update-hook}.
-Selections that ``really count'' are those causing a visible change in
+Selections that really count are those causing a visible change in
 the next redisplay of @var{window}'s frame and should be always
 recorded.  This also means that to run a function each time a window
 gets selected, putting it on @code{buffer-list-update-hook} should be
@@ -1729,12 +1729,12 @@ nor the buffer list.
 @cindex use time of window
 @cindex window order by time of last use
 @defun window-use-time &optional window
-This functions returns the ``use time'' of window @var{window}.
+This functions returns the use time of window @var{window}.
 @var{window} must be a live window and defaults to the selected one.
 The @dfn{use time} of a window is not really a time value, but it does
 increase monotonically with each window selection, so the window with
-the lowest ``use time'' is the least recently selected one, and the
-window with the highest ``use time'' is the most recently selected
+the lowest use time is the least recently selected one, and the
+window with the highest use time is the most recently selected
 one.
 @end defun
 
@@ -1765,7 +1765,7 @@ if omitted or @code{nil}, it defaults to the selected 
window.
 The optional argument @var{minibuf} specifies whether minibuffer windows
 should be included in the cyclic ordering.  Normally, when @var{minibuf}
 is @code{nil}, a minibuffer window is included only if it is currently
-``active''; this matches the behavior of @kbd{C-x o}.  (Note that a
+active; this matches the behavior of @kbd{C-x o}.  (Note that a
 minibuffer window is active as long as its minibuffer is in use; see
 @ref{Minibuffers}).
 
@@ -1859,8 +1859,8 @@ criterion, without selecting it:
 
 @cindex least recently used window
 @defun get-lru-window &optional all-frames dedicated not-selected
-This function returns a live window which is heuristically the ``least
-recently used'' window.  The optional argument @var{all-frames} has
+This function returns a live window which is heuristically the least
+recently used.  The optional argument @var{all-frames} has
 the same meaning as in @code{next-window}.
 
 If any full-width windows are present, only those windows are
@@ -1874,8 +1874,8 @@ function returns @code{nil} in that case.
 
 @cindex most recently used window
 @defun get-mru-window &optional all-frames dedicated not-selected
-This function is like @code{get-lru-window}, but it returns the ``most
-recently used'' window instead.  The meaning of the arguments is the
+This function is like @code{get-lru-window}, but it returns the most
+recently used window instead.  The meaning of the arguments is the
 same as described for @code{get-lru-window}.
 @end defun
 
@@ -2293,7 +2293,7 @@ corresponding display action to display the buffer.
 
 @defopt display-buffer-base-action
 The value of this option should be a display action.  This option can
-be used to define a ``standard'' display action for calls to
+be used to define a standard display action for calls to
 @code{display-buffer}.
 @end defopt
 
@@ -2319,7 +2319,7 @@ to another buffer (@pxref{Dedicated Windows}).  It also 
fails if
 @end defun
 
 @defun display-buffer-reuse-window buffer alist
-This function tries to ``display'' @var{buffer} by finding a window
+This function tries to display @var{buffer} by finding a window
 that is already displaying it.
 
 If @var{alist} has a address@hidden @code{inhibit-same-window} entry,
@@ -2365,7 +2365,7 @@ is added to the newly created frame's parameters.
 @end defun
 
 @defun display-buffer-use-some-frame buffer alist
-This function tries to ``display'' @var{buffer} by trying to find a
+This function tries to display @var{buffer} by trying to find a
 frame that meets a predicate (by default any frame other than the
 current frame).
 
@@ -2517,7 +2517,7 @@ buffer there.  If all these steps fail, it will proceed 
using whatever
 (provided *foo* was put by @code{display-buffer} there before) or a
 popped-up window as follows: If the window is part of a vertical
 combination, it will set its height to ten lines.  Note that if, instead
-of the number ``10'', we specified the function
+of the number 10, we specified the function
 @code{fit-window-to-buffer}, @code{display-buffer} would come up with a
 one-line window to fit the empty buffer.  If the window is part of a
 horizontal combination, it sets its width to 40 columns.  Whether a new
@@ -2558,7 +2558,7 @@ window below the selected window.
 selected one is dedicated to its buffer, @code{display-buffer} will
 proceed as described in the previous example.  Note, however, that when
 it tries to adjust the height of any reused or popped-up window, it will
-in any case try to set its number of lines to ``5'' since that value
+in any case try to set its number of lines to 5 since that value
 overrides the corresponding specification in the @var{action} argument
 of @code{display-buffer}.
 
@@ -3025,7 +3025,7 @@ window's buffer) if that window were selected.  The 
default for
 
 When @var{window} is the selected window, the value returned is the
 value of point in that window's buffer.  Strictly speaking, it would be
-more correct to return the ``top-level'' value of point, outside of any
+more correct to return the top-level value of point, outside of any
 @code{save-excursion} forms.  But that value is hard to find.
 @end defun
 
@@ -3122,7 +3122,7 @@ screen.  If this does place point off screen, the display 
routines move
 point to the left margin on the middle line in the window.
 
 For example, if point @w{is 1} and you set the start of the window
address@hidden 37}, the start of the next line, point will be ``above'' the top
address@hidden 37}, the start of the next line, point will be above the top
 of the window.  The display routines will automatically move point if
 it is still 1 when redisplay occurs.  Here is an example:
 
@@ -3429,7 +3429,7 @@ only if point is already on that position do they signal 
an error.
 @cindex centering point
 This function scrolls the text in the selected window so that point is
 displayed at a specified vertical position within the window.  It does
-not ``move point'' with respect to the text.
+not move point with respect to the text.
 
 If @var{count} is a non-negative number, that puts the line containing
 point @var{count} lines down from the top of the window.  If
@@ -3564,8 +3564,8 @@ times the normal character width.  How many characters 
actually
 disappear off to the left depends on their width, and could vary from
 line to line.
 
-  Because we read from side to side in the ``inner loop'', and from top
-to bottom in the ``outer loop'', the effect of horizontal scrolling is
+  Because we read from side to side in the inner loop, and from top
+to bottom in the outer loop, the effect of horizontal scrolling is
 not like that of textual or vertical scrolling.  Textual scrolling
 involves selection of a portion of text to display, and vertical
 scrolling moves the window contents contiguously; but horizontal
@@ -3697,13 +3697,13 @@ Most of these functions report positions relative to an 
origin at the
 native position of the window's frame (@pxref{Frame Geometry}).  Some
 functions report positions relative to the origin of the display of the
 window's frame.  In any case, the origin has the coordinates (0, 0) and
-X and Y coordinates increase ``rightward'' and ``downward''
+X and Y coordinates increase rightward and downward
 respectively.
 
   For the following functions, X and Y coordinates are reported in
 integer character units, i.e., numbers of lines and columns
 respectively.  On a graphical display, each ``line'' and ``column''
-corresponds to the height and width of a default character specified by
+corresponds to the height and width of the default character specified by
 the frame's default font (@pxref{Frame Font}).
 
 @defun window-edges &optional window body absolute pixelwise
@@ -3840,7 +3840,7 @@ argument because it always uses the frame that 
@var{window} is on.
   The following functions return window positions in pixels, rather
 than character units.  Though mostly useful on graphical displays,
 they can also be called on text terminals, where the screen area of
-each text character is taken to be ``one pixel''.
+each text character is taken to be one pixel.
 
 @defun window-pixel-edges &optional window
 This function returns a list of pixel coordinates for the edges of
diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi
index 034f42b..ecf2ef9 100644
--- a/doc/misc/calc.texi
+++ b/doc/misc/calc.texi
@@ -20738,9 +20738,13 @@ mean, then repeating until the two values converge.
 $$ a_{i+1} = { a_i + b_i \over 2 } , \qquad b_{i+1} = \sqrt{a_i b_i} $$
 @end tex
 
address@hidden @cindex Root-mean-square
address@hidden Another commonly used mean, the RMS (root-mean-square), can be 
computed
address@hidden for a vector of numbers simply by using the @kbd{A} command.
address@hidden u R
address@hidden Root-mean-square
address@hidden rms
+The @kbd{u R} (@code{calc-vector-rms}) address@hidden
+command computes the RMS (root-mean-square) of the data values.
+As its name suggests, this is the square root of the mean of the
+squares of the data values.
 
 @kindex u S
 @pindex calc-vector-sdev
@@ -36503,6 +36507,7 @@ keystrokes are not listed in this summary.
 @r{      v@:    H u M   @:             @:    19  @:vmedian@:(v)}
 @r{      v@:  I H u M   @:             @:    19  @:vhmean@:(v)}
 @r{      v@:      u N   @:             @:    19  @:vmin@:(v)}
address@hidden      v@:      u R   @:             @:        @:rms@:(v)}
 @r{      v@:      u S   @:             @:    19  @:vsdev@:(v)}
 @r{      v@:    I u S   @:             @:    19  @:vpsdev@:(v)}
 @r{      v@:    H u S   @:             @:    19  @:vvar@:(v)}
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index c90a7db..b93bc8f 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -378,7 +378,7 @@ This manual describes @ccmode{}
 version 5.32.
 @comment Release.py script can update the version number automatically
 
address@hidden supports the editing of K&R and ANSI C, C++, Objective-C,
address@hidden supports the editing of C, C++, Objective-C,
 Java, CORBA's Interface Definition Language, address@hidden C-like
 scripting language with its roots in the LPC language used in some MUD
 engines.  See @uref{http://pike.ida.liu.se/}.} and AWK files.  In this
diff --git a/doc/misc/ediff.texi b/doc/misc/ediff.texi
index 552e3be..f7876a3 100644
--- a/doc/misc/ediff.texi
+++ b/doc/misc/ediff.texi
@@ -1388,7 +1388,7 @@ different frames.  Ediff respects these arrangements, 
automatically
 adapting itself to the multi-frame mode.
 
 Ediff uses the following variables to set up its control panel
-(a.k.a.@: control buffer, a.k.a.@: quick help window):
+(a.k.a.@: ``control buffer'', a.k.a.@: ``quick help window''):
 
 @table @code
 @item ediff-control-frame-parameters
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index 3e9109d..6557f4d 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -2089,8 +2089,8 @@ parenthesis, it simply inserts a % like normal.
 (defun match-paren (arg)
   "Go to the matching paren if on a paren; otherwise insert %."
   (interactive "p")
-  (cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
-        ((looking-at "\\s\)") (forward-char 1) (backward-list 1))
+  (cond ((looking-at "\\s(") (forward-list 1) (backward-char 1))
+        ((looking-at "\\s)") (forward-char 1) (backward-list 1))
         (t (self-insert-command (or arg 1)))))
 @end lisp
 
diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi
index 19c78bf..26b9210 100644
--- a/doc/misc/gnus-faq.texi
+++ b/doc/misc/gnus-faq.texi
@@ -1528,7 +1528,7 @@ and create the actual X-face by saying
 
 @example
 cat file.xbm | xbm2ikon | compface > file.face
-cat file.face | sed 's/\\/\\\\/g;s/\"/\\\"/g;' > file.face.quoted
+cat file.face | sed 's/["\\]/\\&/g' > file.face.quoted
 @end example
 @noindent
 
diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi
index 726ec4e..01d5ad7 100644
--- a/doc/misc/reftex.texi
+++ b/doc/misc/reftex.texi
@@ -2893,6 +2893,9 @@ default.  If you want to have these key bindings 
available, set in your
 (setq reftex-extra-bindings t)
 @end lisp
 
+Note that this variable has to be set before @RefTeX{} is loaded to
+have an effect.
+
 @vindex reftex-load-hook
 Changing and adding to @RefTeX{}'s key bindings is best done in the hook
 @code{reftex-load-hook}.  For information on the keymaps
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index f773c90..bff8eb0 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2015-07-01.07}
+\def\texinfoversion{2015-09-20.17}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -196,17 +196,6 @@
   wide-spread wrap-around
 }
 
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen\bindingoffset
-\newdimen\normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt }
-
 % Sometimes it is convenient to have everything in the transcript file
 % and nothing on the terminal.  We don't just call \tracingall here,
 % since that produces some useless output on the terminal.  We also make
@@ -251,6 +240,15 @@
 \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
   \removelastskip\penalty-200\bigskip\fi\fi}
 
+% Output routine
+%
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt }
+
 % Do @cropmarks to get crop marks.
 %
 \newif\ifcropmarks
@@ -290,6 +288,9 @@
     \noexpand\else \the\toks8             % 2: color marks
   }%
 }
+
+% \gettopheadingmarks, \getbottomheadingmarks - extract needed part of mark.
+%
 % \topmark doesn't work for the very first chapter (after the title
 % page or the contents), so we use \firstmark there -- this gets us
 % the mark with the chapter defs, unless the user sneaks in, e.g.,
@@ -310,32 +311,69 @@
 \def\prevsectiondefs{}
 \def\lastcolordefs{}
 
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
 % Main output routine.
+%
 \chardef\PAGE = 255
 \output = {\onepageout{\pagecontents\PAGE}}
 
 \newbox\headlinebox
 \newbox\footlinebox
 
-% \onepageout takes a vbox as an argument.  Note that \pagecontents
-% does insertions, but you have to call it yourself.
+% \onepageout takes a vbox as an argument.
+% \shipout a vbox for a single page, adding an optional header, footer,
+% cropmarks, and footnote.  This also causes index entries for this page
+% to be written to the auxiliary files.
+%
 \def\onepageout#1{%
   \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
   %
   \ifodd\pageno  \advance\hoffset by \bindingoffset
   \else \advance\hoffset by -\bindingoffset\fi
   %
+  % Common context changes for both heading and footing.
   % Do this outside of the \shipout so @code etc. will be expanded in
   % the headline as they should be, not taken literally (outputting ''code).
   \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars}
   %
-  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
-  \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
+  % Retrieve the information for the headings from the marks in the page,
+  % and call Plain TeX's \makeheadline and \makefootline, which use the
+  % values in \headline and \footline.
   %
+  % This is used to check if we are on the first page of a chapter.
+  \ifcase0\topmark\fi
+  \ifx\thischapter\empty
+    % See comment for \gettopheadingmarks
+    \ifcase0\firstmark\fi
+    \let\curchaptername\thischaptername
+    \ifcase1\firstmark\fi
+    \let\prevchaptername\thischaptername
+  \else
+    \let\curchaptername\thischaptername
+    \ifcase1\topmark\fi
+    \let\prevchaptername\thischaptername
+  \fi
+  %
+  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
   \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+  %
+  \ifx\curchaptername\prevchaptername
+  \else
+    % If on the first page of a chapter, clear @thischapter so it
+    % doesn't appear in the headline, because the chapter is already
+    % shown in the chapter heading.
+    \def\thischapter{}%
+  \fi
+  %
+  \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
   \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}%
   %
   {%
+    % Set context for writing to auxiliary files like index files.
     % Have to do this stuff outside the \shipout because we want it to
     % take effect in \write's, yet the group defined by the \vbox ends
     % before the \shipout runs.
@@ -344,10 +382,10 @@
     \normalturnoffactive  % \ in index entries must not stay \, e.g., if
                % the page break happens to be in the middle of an example.
                % We don't want .vr (or whatever) entries like this:
-               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+               % \entry{{\indexbackslash }acronym}{32}{\code {\acronym}}
                % "\acronym" won't work when it's read back in;
                % it needs to be
-               % {\code {{\tt \backslashcurfont }acronym}
+               % {\code {{\backslashcurfont }acronym}
     \shipout\vbox{%
       % Do this early so pdf references go to the beginning of the page.
       \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
@@ -405,6 +443,7 @@
 
 \newinsert\margin \dimen\margin=\maxdimen
 
+% Main part of page, including any footnotes
 \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
 {\catcode`\@ =11
 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
@@ -427,9 +466,13 @@
 \def\nsbot{\vbox
   {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
 
+
+% Argument parsing
+
 % Parse an argument, then pass it to #1.  The argument is the rest of
 % the input line (except we remove a trailing comment).  #1 should be a
 % macro which expects an ordinary undelimited TeX argument.
+% For example, \def\foo{\parsearg\fooxxx}.
 %
 \def\parsearg{\parseargusing{}}
 \def\parseargusing#1#2{%
@@ -448,9 +491,11 @@
   }%
 }
 
-% First remove any @comment, then any @c comment.
+% First remove any @comment, then any @c comment.  Also remove a @texinfoc
+% comment (see \scanmacro for details).  Pass the result on to \argcheckspaces.
 \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
-\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argremovetexinfoc #1\texinfoc\ArgTerm}
+\def\argremovetexinfoc#1\texinfoc#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
 
 % Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
 %
@@ -682,6 +727,12 @@
     \endgraf % Not \par, as it may have been set to \lisppar.
     \global\dimen1 = \prevdepth
   \egroup           % End the \vtop.
+  \addgroupbox
+  \prevdepth = \dimen1
+  \checkinserts
+}
+
+\def\addgroupbox{
   % \dimen0 is the vertical size of the group's box.
   \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
   % \dimen2 is how much space is left on the page (more or less).
@@ -694,9 +745,8 @@
     \fi
   \fi
   \box\groupbox
-  \prevdepth = \dimen1
-  \checkinserts
 }
+
 %
 % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
 % message, so this ends up printing address@hidden can only ...'.
@@ -939,12 +989,20 @@ where each line of input produces a line of output.}
 % @c is the same as @comment
 % @ignore ... @end ignore  is another way to write a comment
 %
-\def\comment{\begingroup \catcode`\^^M=\other%
+\def\comment{\begingroup \catcode`\^^M=\active%
address@hidden \catcode`\{=\other \catcode`\}=\other\commentxxx}%
+
+{\catcode`\^^M=\active%
+\gdef\commentxxx#1^^M{\endgroup%
+\futurelet\nexttoken\commentxxxx}%
+\gdef\commentxxxx{\ifx\nexttoken\aftermacro\expandafter\comment\fi}%
+}
+
+\def\c{\begingroup \catcode`\^^M=\active%
 address@hidden \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-%
-\let\c=\comment
+\cxxx}
+{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
+% See comment in \scanmacro about why the definitions of @c and @comment differ
 
 % @paragraphindent NCHARS
 % We'll use ems for NCHARS, close enough.
@@ -1030,45 +1088,8 @@ where each line of input produces a line of output.}
 % @refill is a no-op.
 \let\refill=\relax
 
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \iflinks
-     \tryauxfile
-     % Open the new aux file.  TeX will close it automatically at exit.
-     \immediate\openout\auxfile=\jobname.aux
-   \fi % \openindices needs to do some work in any case.
-   \openindices
-   \let\setfilename=\comment % Ignore extra @setfilename cmds.
-   %
-   % If texinfo.cnf is present on the system, read it.
-   % Useful for site-wide @afourpaper, etc.
-   \openin 1 texinfo.cnf
-   \ifeof 1 \else \input texinfo.cnf \fi
-   \closein 1
-   %
-   \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-%
-\def\openindices{%
-  \newindex{cp}%
-  \newcodeindex{fn}%
-  \newcodeindex{vr}%
-  \newcodeindex{tp}%
-  \newcodeindex{ky}%
-  \newcodeindex{pg}%
-}
+% @setfilename INFO-FILENAME - ignored
+\let\setfilename=\comment
 
 % @bye.
 \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
@@ -1822,8 +1843,10 @@ end
 % A few fonts for @defun names and args.
 \setfont\defbf\bfshape{10}{\magstep1}{OT1}
 \setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defsl\slshape{10}{\magstep1}{OT1TT}
 \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf
+\let\tenttsl=\defttsl \let\tensl=\defsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \def\smallnominalsize{9pt}
@@ -1884,6 +1907,7 @@ end
 % Section fonts (14.4pt).
 \def\secnominalsize{14pt}
 \setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
 \setfont\secit\itbshape{10}{\magstep2}{OT1IT}
 \setfont\secsl\slbshape{10}{\magstep2}{OT1}
 \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
@@ -1953,8 +1977,10 @@ end
 % A few fonts for @defun names and args.
 \setfont\defbf\bfshape{10}{\magstephalf}{OT1}
 \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defsl\slshape{10}{\magstephalf}{OT1TT}
 \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf
+\let\tensl=\defsl \let\tenttsl=\defttsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \def\smallnominalsize{9pt}
@@ -2773,11 +2799,6 @@ end
 %
 \def\dmn#1{\thinspace #1}
 
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find.  We need it for
-% Polish suppressed-l.  --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
 % @acronym for "FBI", "NATO", and the like.
 % We print this one point size smaller, since it's intended for
 % all-uppercase.
@@ -2881,9 +2902,6 @@ end
 \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
 \def\finishsup#1{$\ptexsp{\hbox{\selectfonts\lllsize #1}}$}%
 
-% ctrl is no longer a Texinfo command, but leave this definition for fun.
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
 % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
 % Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
 % except specified as a normal braced arg, so no newlines to worry about.
@@ -3391,7 +3409,7 @@ end
 \newtoks\evenfootline    % footline on even pages
 \newtoks\oddfootline     % footline on odd pages
 
-% Now make TeX use those variables
+% Now make \makeheadline and \makefootline in Plain TeX use those variables
 \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
                             \else \the\evenheadline \fi}}
 \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
@@ -3447,6 +3465,10 @@ end
 % @everyheadingmarks
 % @everyfootingmarks
 
+% These define \getoddheadingmarks, \getevenheadingmarks,
+% \getoddfootingmarks, and \getevenfootingmarks, each to one of
+% \gettopheadingmarks, \getbottomheadingmarks.
+%
 \def\evenheadingmarks{\headingmarks{even}{heading}}
 \def\oddheadingmarks{\headingmarks{odd}{heading}}
 \def\evenfootingmarks{\headingmarks{even}{footing}}
@@ -3736,7 +3758,12 @@ end
    \noindent
    \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
    %
-   \vadjust{\penalty 1200}}% not good to break after first line of item.
+   \ifinner\else
+     \vadjust{\penalty 1200}% not good to break after first line of item.
+   \fi
+   % We can be in inner vertical mode in a footnote, although an
+   % @itemize looks awful there.
+  }%
   \flushcr
 }
 
@@ -4358,19 +4385,16 @@ end
 % except not \outer, so it can be used within macros and \if's.
 \edef\newwrite{\makecsname{ptexnewwrite}}
 
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index.  The file's extension is foo.
+% \newindex {foo} defines an index named IX.
+% It automatically defines \IXindex such that
+% \IXindex ...rest of line... puts an entry in the index IX.
+% It also defines \IXindfile to be the number of the output channel for
+% the file that accumulates this index.  The file's extension is IX.
 % The name of an index should be no more than 2 characters long
 % for the sake of vms.
 %
 \def\newindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-  \fi
+  \expandafter\chardef\csname#1indfile\endcsname=0
   \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
     \noexpand\doindex{#1}}
 }
@@ -4384,14 +4408,19 @@ end
 \def\defcodeindex{\parsearg\newcodeindex}
 %
 \def\newcodeindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1
-  \fi
+  \expandafter\chardef\csname#1indfile\endcsname=0
   \expandafter\xdef\csname#1index\endcsname{%
     \noexpand\docodeindex{#1}}%
 }
 
+% The default indices:
+\newindex{cp}%      concepts,
+\newcodeindex{fn}%  functions,
+\newcodeindex{vr}%  variables,
+\newcodeindex{tp}%  types,
+\newcodeindex{ky}%  keys
+\newcodeindex{pg}%  and programs.
+
 
 % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.
@@ -4420,26 +4449,19 @@ end
   \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
 }
 
-% Define \doindex, the driver for all \fooindex macros.
+% Define \doindex, the driver for all index macros.
 % Argument #1 is generated by the calling \fooindex macro,
-%  and it is "foo", the name of the index.
+% and it the two-letter name of the index.
 
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
+\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx}
+\def\doindexxxx #1{\doind{\indexname}{#1}}
 
 % like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
+\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
 
-% Take care of Texinfo commands that can appear in an index entry.
-% Since there are some commands we want to expand, and others we don't,
-% we have to laboriously prevent expansion for those that we don't.
+% Used when writing an index entry out to an index file, to prevent
+% expansion of Texinfo commands that can appear in an index entry.
 %
 \def\indexdummies{%
   \escapechar = `\\     % use backslash in output files.
@@ -4455,31 +4477,6 @@ end
   \def\{{{\tt\char123}}%
   \def\}{{\tt\char125}}%
   %
-  % I don't entirely understand this, but when an index entry is
-  % generated from a macro call, the \endinput which \scanmacro inserts
-  % causes processing to be prematurely terminated.  This is,
-  % apparently, because \indexsorttmp is fully expanded, and \endinput
-  % is an expandable command.  The redefinition below makes \endinput
-  % disappear altogether for that purpose -- although logging shows that
-  % processing continues to some further point.  On the other hand, it
-  % seems \endinput does not hurt in the printed index arg, since that
-  % is still getting written without apparent harm.
-  %
-  % Sample source (mac-idx3.tex, reported by Graham Percival to
-  % help-texinfo, 22may06):
-  % @macro funindex {WORD}
-  % @findex xyz
-  % @end macro
-  % ...
-  % @funindex commtest
-  % This is not enough to reproduce the bug, but it gives the flavor.
-  %
-  % Sample whatsit resulting:
-  % address@hidden@folio address@hidden address@hidden }}}
-  %
-  % So:
-  \let\endinput = \empty
-  %
   % Do the redefinitions.
   \commondummies
 }
@@ -4686,11 +4683,39 @@ end
   % that we make for arg2 (see \parsemargdef ff.).  We want all this to be
   % expanded for the sake of the index, so we end up just seeing "bar".
   \let\xeatspaces = \eatspaces
+  \let\xprocessmacroarg\eatspaces
 }
 
 % For testing: output @{ and @} in index sort strings as \{ and \}.
 \newif\ifusebracesinindexes
 
+\let\indexlbrace\relax
+\let\indexrbrace\relax
+
address@hidden
+\catcode`\\=13
+  @address@hidden@def\{}}
+}
+
+{
+\catcode`\<=13
+\catcode`\-=13
+  \gdef\indexnonalnumdisappear{%
+    \backslashdisappear
+    \def-{}%
+    \def<{}%
+    address@hidden
+  }
+
+  \gdef\indexnonalnumreappear{%
+    \useindexbackslash
+    \let-\normaldash
+    \let<\normalless
+    address@hidden@}%
+  }
+}
+
+
 % \indexnofonts is used when outputting the strings to sort the index
 % by, and when constructing control sequence names.  It eliminates all
 % control sequences and just writes whatever the best ASCII sort string
@@ -4716,16 +4741,10 @@ end
   \def\_{\normalunderscore}%
   \def\-{}% @- shouldn't affect sorting
   %
-  % Unfortunately, texindex is not prepared to handle braces in the
-  % content at all.  So for index sorting, we map @{ and @} to strings
-  % starting with |, since that ASCII character is between ASCII { and }.
-  \ifusebracesinindexes
-    \def\lbracechar{\lbracecmd}%
-    \def\rbracechar{\rbracecmd}%
-  \else
-    \def\lbracechar{|a}%
-    \def\rbracechar{|b}%
-  \fi
+  % Unfortunately, texindex < 6.0 is not prepared to handle braces in the
+  % content at all, so these won't be sorted in ASCII order.
+  \def\lbracechar{{\indexlbrace}}%
+  \def\rbracechar{{\indexrbrace}}%
   \let\{=\lbracechar
   \let\}=\rbracechar
   %
@@ -4737,7 +4756,7 @@ end
   \def\L{L}%
   \def\OE{OE}%
   \def\O{O}%
-  \def\TH{ZZZ}%
+  \def\TH{TH}%
   \def\aa{aa}%
   \def\ae{ae}%
   \def\dh{dzz}%
@@ -4749,7 +4768,7 @@ end
   \def\o{o}%
   \def\questiondown{?}%
   \def\ss{ss}%
-  \def\th{zzz}%
+  \def\th{th}%
   %
   \def\LaTeX{LaTeX}%
   \def\TeX{TeX}%
@@ -4807,14 +4826,17 @@ end
 {\catcode`\`=\active
  \gdef\indexlquoteignore{\let`=\empty}}
 
-\let\indexbackslash=0  %overridden during \printindex.
 \let\SETmarginindex=\relax % put index entries in margin (undocumented)?
 
 % Most index entries go through here, but \dosubind is the general case.
 % #1 is the index name, #2 is the entry text.
 \def\doind#1#2{\dosubind{#1}{#2}{}}
 
-% Workhorse for all \fooindexes.
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+% TODO: Two-level index?  Operation index?
+
+% Workhorse for all indexes.
 % #1 is name of index, #2 is stuff to put there, #3 is subentry --
 % empty if called from \doind, as we usually are (the main exception
 % is with most defuns, which call us directly).
@@ -4822,6 +4844,7 @@ end
 \def\dosubind#1#2#3{%
   \iflinks
   {%
+    \requireopenindexfile{#1}%
     % Store the main index entry text (including the third arg).
     \toks0 = {#2}%
     % If third arg is present, precede it with a space.
@@ -4837,7 +4860,43 @@ end
   \fi
 }
 
-% Write the entry in \toks0 to the index file:
+% Check if an index file has been opened, and if not, open it.
+\def\requireopenindexfile#1{%
+\ifnum\csname #1indfile\endcsname=0
+  \expandafter\newwrite \csname#1indfile\endcsname
+  \immediate\openout\csname#1indfile\endcsname \jobname.#1 % Open the file
+  % Using \immediate here prevents an object entering into the current box,
+  % which could confound checks such as those in \safewhatsit for preceding
+  % skips.
+\fi}
+
+% Output \ as {\indexbackslash}, because \ is an escape character in
+% the index files.
+\let\indexbackslash=\relax
address@hidden \catcode`\\=\active
+  @address@hidden@address@hidden
+}
+
+% Definition for writing index entry text.
+\def\sortas#1{\ignorespaces}%
+
+% Definition for writing index entry sort key.  Should occur at the at
+% the beginning of the index entry, like
+%     @cindex @sortas{september} \september
+% The \ignorespaces takes care of following space, but there's no way
+% to remove space before it.
+{
+\catcode`\-=13
+\gdef\indexwritesortas{%
+  \begingroup
+  \indexnonalnumreappear
+  \indexwritesortasxxx}
+\gdef\indexwritesortasxxx#1{%
+  \xdef\indexsortkey{#1}\endgroup}
+}
+
+
+% Write the entry in \toks0 to the index file.
 %
 \def\dosubindwrite{%
   % Put the index entry in the margin if desired.
@@ -4847,14 +4906,20 @@ end
   %
   % Remember, we are within a group.
   \indexdummies % Must do this here, since \bf, etc expand at this stage
-  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
-      % so it will be output as is; and it will print as backslash.
-  %
-  % Process the index entry with all font commands turned off, to
-  % get the string to sort by.
+  \useindexbackslash % \indexbackslash isn't defined now so it will be output 
+                     % as is; and it will print as backslash.
+  % Get the string to sort by, by processing the index entry with all
+  % font commands turned off.
   {\indexnofonts
-   \edef\temp{\the\toks0}% need full expansion
-   \xdef\indexsorttmp{\temp}%
+   \xdef\indexsortkey{}%
+   \let\sortas=\indexwritesortas
+   \indexnonalnumdisappear
+   \edef\temp{\the\toks0}%
+   \setbox\dummybox = \hbox{\temp}% Make sure to execute any \sortas
+   \ifx\indexsortkey\empty
+     \xdef\indexsortkey{\temp}%
+     \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi
+   \fi
   }%
   %
   % Set up the complete index entry, with both the sort key and
@@ -4864,10 +4929,11 @@ end
   % sorted result.
   \edef\temp{%
     \write\writeto{%
-      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+      \string\entry{\indexsortkey}{\noexpand\folio}{\the\toks0}}%
   }%
   \temp
 }
+\newbox\dummybox % used above
 
 % Take care of unwanted page breaks/skips around a whatsit:
 %
@@ -5001,43 +5067,96 @@ end
     % there is some text.
     \putwordIndexNonexistent
   \else
+    \catcode`\\ = 0
+    \escapechar = `\\
     %
     % If the index file exists but is empty, then \openin leaves \ifeof
     % false.  We have to make TeX try to read something from the file, so
     % it can discover if there is anything in it.
-    \read 1 to \temp
+    \read 1 to \thisline
     \ifeof 1
       \putwordIndexIsEmpty
     \else
       % Index files are almost Texinfo source, but we use \ as the escape
       % character.  It would be better to use @, but that's too big a change
       % to make right now.
-      \def\indexbackslash{\backslashcurfont}%
-      \catcode`\\ = 0
-      \escapechar = `\\
+      \def\indexbackslash{\ttbackslash}%
+      \let\indexlbrace\{   % Likewise, set these sequences for braces
+      \let\indexrbrace\}   % used in the sort key.
       \begindoublecolumns
-      \input \jobname.#1s
+      \let\entryorphanpenalty=\indexorphanpenalty
+      %
+      % Read input from the index file line by line.
+      \loopdo
+        \ifeof1
+          \let\firsttoken\relax
+        \else
+          \read 1 to \nextline
+          \edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}%
+          \act
+        \fi
+        \thisline
+        %
+        \ifeof1\else
+        \let\thisline\nextline
+      \repeat
+      %%
       \enddoublecolumns
     \fi
   \fi
   \closein 1
 \endgroup}
 
+\def\getfirsttoken#1{\expandafter\getfirsttokenx#1\endfirsttoken}
+\long\def\getfirsttokenx#1#2\endfirsttoken{\noexpand#1}
+
+\def\loopdo#1\repeat{\def\body{#1}\loopdoxxx}
+\def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next}
+
 % These macros are used by the sorted index file itself.
 % Change them to control the appearance of the index.
 
-\def\initial#1{{%
-  % Some minor font changes for the special characters.
-  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-  %
+{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13
+\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
+\catcode`\$=3
+\gdef\initialglyphs{%
+  % Some changes for non-alphabetic characters.  Using the glyphs from the
+  % math fonts looks more consistent than the typewriter font used elsewhere
+  % for these characters.
+  \def\indexbackslash{\math{\backslash}}%
+  \let\\=\indexbackslash
+  %
+  % Can't get bold backslash so don't use bold forward slash
+  \catcode`\/=13
+  \def/{{\secrmnotbold \normalslash}}%
+  \def-{{\normaldash\normaldash}}% en dash `--'
+  \def^{{\chapbf \normalcaret}}%
+  \def~{{\chapbf \normaltilde}}%
+  \def\_{%
+     \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }%
+  \def|{$\vert$}%
+  \def<{$\less$}%
+  \def>{$\gtr$}%
+  \def+{$\normalplus$}%
+}}
+
+\def\initial{%
+  \bgroup
+  \initialglyphs
+  \initialx
+}
+
+\def\initialx#1{%
   % Remove any glue we may have, we'll be inserting our own.
   \removelastskip
   %
   % We like breaks before the index initials, so insert a bonus.
+  % The glue before the bonus allows a little bit of space at the
+  % bottom of a column to reduce an increase in inter-line spacing.
   \nobreak
-  \vskip 0pt plus 3\baselineskip
-  \penalty 0
-  \vskip 0pt plus -3\baselineskip
+  \vskip 0pt plus 5\baselineskip
+  \penalty -300 
+  \vskip 0pt plus -5\baselineskip
   %
   % Typeset the initial.  Making this add up to a whole number of
   % baselineskips increases the chance of the dots lining up from column
@@ -5045,24 +5164,24 @@ end
   % we need before each entry, but it's better.
   %
   % No shrink because it confuses \balancecolumns.
-  \vskip 1.67\baselineskip plus .5\baselineskip
-  \leftline{\secbf #1}%
+  \vskip 1.67\baselineskip plus 1\baselineskip
+  \leftline{\secfonts \kern-0.05em \secbf #1}%
+  % \secfonts is inside the argument of \leftline so that the change of
+  % \baselineskip will not affect any glue inserted before the vbox that
+  % \leftline creates.
   % Do our best not to break after the initial.
   \nobreak
   \vskip .33\baselineskip plus .1\baselineskip
-}}
+  \egroup % \initialglyphs
+}
+
+\newdimen\entryrightmargin
+\entryrightmargin=0pt
 
 % \entry typesets a paragraph consisting of the text (#1), dot leaders, and
 % then page number (#2) flushed to the right margin.  It is used for index
 % and table of contents entries.  The paragraph is indented by \leftskip.
 %
-% A straightforward implementation would start like this:
-%      \def\entry#1#2{...
-% But this freezes the catcodes in the argument, and can cause problems to
-% @code, which sets - active.  This problem was fixed by a kludge---
-% ``-'' was active throughout whole index, but this isn't really right.
-% The right solution is to prevent \entry from swallowing the whole text.
-%                                 --kasal, 21nov03
 \def\entry{%
   \begingroup
     %
@@ -5070,38 +5189,46 @@ end
     % affect previous text.
     \par
     %
-    % Do not fill out the last line with white space.
-    \parfillskip = 0in
-    %
     % No extra space above this paragraph.
     \parskip = 0in
     %
+    % When reading the text of entry, convert explicit line breaks
+    % from @* into spaces.  The user might give these in long section
+    % titles, for instance.
+    \def\*{\unskip\space\ignorespaces}%
+    \def\entrybreak{\hfil\break}%
+    %
+    % A bit of stretch before each entry for the benefit of balancing
+    % columns.
+    \vskip 0pt plus0.5pt
+    %
+    % Badness calculation for paragraph affected by -
+    %  How much \indexdotfill is stretched, or how much \parfillskip is shrunk
+    %  Number of lines (\linepenalty)
+    %  
     % Do not prefer a separate line ending with a hyphen to fewer lines.
     \finalhyphendemerits = 0
     %
-    % \hangindent is only relevant when the entry text and page number
-    % don't both fit on one line.  In that case, bob suggests starting the
-    % dots pretty far over on the line.  Unfortunately, a large
-    % indentation looks wrong when the entry text itself is broken across
-    % lines.  So we use a small indentation and put up with long leaders.
+    % Word spacing - no stretch
+    \spaceskip=\fontdimen2\font minus \fontdimen4\font
     %
-    % \hangafter is reset to 1 (which is the value we want) at the start
-    % of each paragraph, so we need not do anything with that.
-    \hangindent = 2em
+    \linepenalty=1000  % Discourage line breaks.
+    \hyphenpenalty=5000  % Discourage hyphenation.
     %
-    % When the entry text needs to be broken, just fill out the first line
-    % with blank space.
-    \rightskip = 0pt plus1fil
+    % Ragged right margin, but not for the last line with the leaders in it.
+    % When an index entry spans lines, this stretch competes with the stretch
+    % in \indexdotfill to determine how the line will be split.
+    \rightskip=\entryrightmargin
+    \advance\rightskip by 0pt plus .6\hsize
     %
-    % A bit of stretch before each entry for the benefit of balancing
-    % columns.
-    \vskip 0pt plus1pt
-    %
-    % When reading the text of entry, convert explicit line breaks
-    % from @* into spaces.  The user might give these in long section
-    % titles, for instance.
-    \def\*{\unskip\space\ignorespaces}%
-    \def\entrybreak{\hfil\break}%
+    % \parfillskip is at the end of the line with the page number
+    \parfillskip=0pt
+    % Cancel the \rightskip stretch
+    \advance \parfillskip by 0pt plus -.6\hsize
+    % Determine how far we can stretch into the margin.
+    % This allows, e.g., "Appendix H  GNU Free Documentation License" to fit
+    % on one line.
+    \advance \parfillskip by 0pt minus .6\entryrightmargin
     %
     % Swallow the left brace of the text (first parameter):
     \afterassignment\doentry
@@ -5109,6 +5236,8 @@ end
 }
 \def\entrybreak{\unskip\space\ignorespaces}%
 \def\doentry{%
+    % Save the text of the entry in a \vtop.
+    \global\setbox\entryindexbox=\vtop\bgroup
     \bgroup % Instead of the swallowed brace.
       \noindent
       \aftergroup\finishentry
@@ -5125,29 +5254,70 @@ end
       \ %
     \else
       %
-      % If we must, put the page number on a line of its own, and fill out
-      % this line with blank space.  (The \hfil is overwhelmed with the
-      % fill leaders glue in \indexdotfill if the page number does fit.)
-      \hfil\penalty50
       \null\nobreak\indexdotfill % Have leaders before the page number.
       %
-      % The `\ ' here is removed by the implicit \unskip that TeX does as
-      % part of (the primitive) \par.  Without it, a spurious underfull
-      % \hbox ensues.
       \ifpdf
-       \pdfgettoks#1.%
-       \ \the\toksA
+        \pdfgettoks#1.%
+        \hskip\skip\thinshrinkable\the\toksA
       \else
-       \ #1%
+        \hskip\skip\thinshrinkable #1%
       \fi
     \fi
+    % Parameters for formatting this paragraph, reset for each paragraph.
+    %
+    % \hangindent is only relevant when the entry text and page number
+    % don't both fit on one line.  In that case, bob suggests starting the
+    % dots pretty far over on the line.  Unfortunately, a large
+    % indentation looks wrong when the entry text itself is broken across
+    % lines.  So we use a small indentation and put up with long leaders.
+    %
+    \hangafter = 1
+    \hangindent = 1em
     \par
+    \egroup % The \vtop
   \endgroup
+  % delay text of entry until after penalty
+  \bgroup\aftergroup\insertindexentrybox
+  \entryorphanpenalty
+}
+
+\newskip\thinshrinkable
+\skip\thinshrinkable=.15em minus .15em
+
+\newbox\entryindexbox
+\def\insertindexentrybox{%
+\lineskip=.8ex plus .6ex % This comes into effect when the \vtop has a large 
+                         % depth due to the paragraph in it having several 
+                         % lines.
+\box\entryindexbox}
+
+% Default is no penalty
+\let\entryorphanpenalty\egroup
+
+% Used from \printindex.  \firsttoken should be the first token
+% after the \entry.  If it's not another \entry, we are at the last
+% line of a group of index entries, so insert a penalty to discourage
+% orphaned index entries.
+\long\def\indexorphanpenalty{%
+  \def\isentry{\entry}%
+  \ifx\firsttoken\isentry
+  \else
+    \unskip\penalty 9000
+    % The \unskip here stops breaking before the glue.  It relies on the
+    % \vskip above being there, otherwise there is an error
+    % "You can't use `\unskip' in vertical mode".  There has to be glue
+    % in the current vertical list that hasn't been added to the
+    % "current page".  See Chapter 24 of the TeXbook.  This contradicts
+    % Section 8.3.7 in "TeX by Topic," though.
+  \fi
+  \egroup % now comes the box added with \aftergroup
 }
 
 % Like plain.tex's \dotfill, except uses up at least 1 em.
+% Using a finite stretch encourages several words to appear on a second line
+% if the entry is broken.
 \def\indexdotfill{\cleaders
-  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
+  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus .4\hsize}
 
 \def\primary #1{\line{#1\hfil}}
 
@@ -5174,6 +5344,9 @@ end
 \newbox\partialpage
 \newdimen\doublecolumnhsize
 
+\newtoks\savedtopmark % Used in \begindoublecolumns
+\newtoks\savedfirstmark
+
 \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
   % Grab any single-column material above us.
   \output = {%
@@ -5194,9 +5367,23 @@ end
       \unvbox\PAGE
       \kern-\topskip \kern\baselineskip
     }%
+    % Save \topmark and \firstmark
+    \global\savedtopmark=\expandafter{\topmark}%
+    \global\savedfirstmark=\expandafter{\firstmark}%
   }%
   \eject % run that output routine to set \partialpage
   %
+  % We recover the two marks that the last output routine saved in order
+  % to propagate the information in marks added around a chapter heading,
+  % which could be otherwise be lost by the time the final page is output.
+  %
+  \mark{\the\savedtopmark}% Only mark in page passed to following \output.
+  \output = {%
+    \setbox0=\box\PAGE % clear box 255
+  }abc\eject
+  %
+  \mark{\the\savedfirstmark}%
+  %
   % Use the double-column output routine for subsequent pages.
   \output = {\doublecolumnout}%
   %
@@ -5227,7 +5414,7 @@ end
 }
 
 % The double-column output routine for all double-column pages except
-% the last.
+% the last, which is done by \balancecolumns.
 %
 \def\doublecolumnout{%
   \splittopskip=\topskip \splitmaxdepth=\maxdepth
@@ -5309,28 +5496,47 @@ end
   \pagegoal = \vsize
 }
 %
-% Called at the end of the double column material.
+% Only called for the last of the double column material.  \doublecolumnout 
+% does the others.
 \def\balancecolumns{%
   \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
   \dimen@ = \ht0
   \advance\dimen@ by \topskip
   \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by 2 % target to split to
-  %debug\message{final 2-column material height=\the\ht0, address@hidden
-  \splittopskip = \topskip
-  % Loop until we get a decent breakpoint.
-  {%
-    \vbadness = 10000
-    \loop
-      \global\setbox3 = \copy0
-      \global\setbox1 = \vsplit3 to \dimen@
-    \ifdim\ht3>\dimen@
-      \global\advance\dimen@ by 1pt
-    \repeat
-  }%
-  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
-  \setbox0=\vbox address@hidden
-  \setbox2=\vbox address@hidden
+  \ifdim\dimen@<14\baselineskip
+    % Don't split a short final column in two.
+    \setbox2=\vbox{}%
+  \else
+    \divide\dimen@ by 2 % target to split to
+    address@hidden = \dimen@
+    \splittopskip = \topskip
+    % Loop until the second column is no higher than the first
+    {%
+      \vbadness = 10000
+      \loop
+        \global\setbox3 = \copy0
+        \global\setbox1 = \vsplit3 to \dimen@
+        % Remove glue from bottom of first column to
+        % make sure it is higher than the second.
+        \global\setbox1 = \vbox{\unvbox1\unpenalty\unskip}%
+      \ifdim\ht3>\ht1
+        \global\advance\dimen@ by 1pt
+      \repeat
+    }%
+    address@hidden by 4
+    address@hidden by 5
+    \ifdim\ht3<address@hidden
+      % Column heights are too different, so don't make their bottoms
+      % flush with each other.  The glue at the end of the second column
+      % allows a second column to stretch, reducing the difference in
+      % height between the two.
+      \setbox0=\vbox address@hidden
+      \setbox2=\vbox address@hidden 0pt plus 0.3\ht0}%
+    \else
+      \setbox0=\vbox address@hidden
+      \setbox2=\vbox address@hidden
+    \fi
+  \fi
   %
   \pagesofar
 }
@@ -5351,6 +5557,9 @@ end
     \let\lastnode=\empty      % no node to associate with
     \writetocentry{part}{#1}{}% but put it in the toc
     \headingsoff              % no headline or footline on the part page
+    % This outputs a mark at the end of the page that clears \thischapter
+    % and \thissection, like is done in \startcontents.
+    \chapmacro{}{Yomitfromtoc}{}%
     \chapoddpage
   \endgroup
 }
@@ -5595,9 +5804,6 @@ end
 
 % @centerchap is like @unnumbered, but the heading is centered.
 \outer\parseargdef\centerchap{%
-  % Well, we could do the following in a group, but that would break
-  % an assumption that \chapmacro is called at the outermost level.
-  % Thus we are safer this way:                --kasal, 24feb04
   \let\centerparametersmaybe = \centerparameters
   \unnmhead0{#1}%
   \let\centerparametersmaybe = \relax
@@ -5721,7 +5927,11 @@ end
 
 % Define plain chapter starts, and page on/off switching for it.
 \def\chapbreak{\dobreak \chapheadingskip {-4000}}
+
+% Start a new page
 \def\chappager{\par\vfill\supereject}
+
+% \chapoddpage - start on an odd page for a new chapter
 % Because \domark is called before \chapoddpage, the filler page will
 % get the headings for the next chapter, which is wrong.  But we don't
 % care -- we just disable all headings on the filler page.
@@ -5757,7 +5967,7 @@ end
 
 \CHAPPAGon
 
-% Chapter opening.
+% \chapmacro - Chapter opening.
 %
 % #1 is the text, #2 is the section type (Ynumbered, Ynothing,
 % Yappendix, Yomitfromtoc), #3 the chapter number.
@@ -6151,7 +6361,7 @@ end
   \savepageno = \pageno
   \begingroup                  % Set up to handle contents files properly.
     \raggedbottom              % Worry more about breakpoints than the bottom.
-    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+    \entryrightmargin=\contentsrightmargin % Don't use the full line length.
     %
     % Roman numerals for page numbers.
     \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
@@ -6256,7 +6466,7 @@ end
 
 % Chapters, in the main contents.
 \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
-%
+
 % Chapters, in the short toc.
 % See comments in \dochapentry re vbox and related settings.
 \def\shortchapentry#1#2#3#4{%
@@ -6271,7 +6481,7 @@ end
   \setbox0 = \hbox{\putwordAppendix{} M}%
   \hbox to \wd0{\putwordAppendix{} #1\hss}}
 %
-\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}}
 
 % Unnumbered chapters.
 \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
@@ -6304,6 +6514,8 @@ end
 \def\dochapentry#1#2{%
    \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    \begingroup
+     % Move the page numbers slightly to the right
+     \advance\entryrightmargin by -0.05em
      \chapentryfonts
      \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    \endgroup
@@ -6423,6 +6635,24 @@ end
     \endgraf
     \ifdim\lastskip<\envskipamount
       \removelastskip
+      \ifnum\lastpenalty<10000
+        % Penalize breaking before the environment, because preceding text
+        % often leads into it.
+        \penalty100
+      \fi
+      \vskip\envskipamount
+    \fi
+  \fi
+}}
+
+\def\afterenvbreak{{%
+  % =10000 instead of <10000 because of a special case in \itemzzz and
+  % \sectionheading, q.v.
+  \ifnum \lastpenalty=10000 \else
+    \advance\envskipamount by \parskip
+    \endgraf
+    \ifdim\lastskip<\envskipamount
+      \removelastskip
       % it's not a good place to break if the last penalty was \nobreak
       % or better ...
       \ifnum\lastpenalty<10000 \penalty-50 \fi
@@ -6431,8 +6661,6 @@ end
   \fi
 }}
 
-\let\afterenvbreak = \aboveenvbreak
-
 % \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
 % also clear it, so that its embedded environments do the narrowing again.
 \let\nonarrowing=\relax
@@ -6476,7 +6704,7 @@ end
   % collide with the section heading.
   \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
   %
-  \vbox\bgroup
+  \setbox\groupbox=\vbox\bgroup
       \baselineskip=0pt\parskip=0pt\lineskip=0pt
       \carttop
       \hbox\bgroup
@@ -6500,6 +6728,7 @@ end
       \egroup
       \cartbot
   \egroup
+  \addgroupbox
   \checkinserts
 }
 
@@ -6977,7 +7206,7 @@ end
   \temp
 }
 
-% \domakedefun \deffn \deffnx \deffnheader
+% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) }
 %
 % Define \deffn and \deffnx, without parameters.
 % \deffnheader has to be defined explicitly.
@@ -7315,34 +7544,44 @@ end
   }
 \fi
 
-\def\scanmacro#1{\begingroup
+\let\aftermacroxxx\relax
+\def\aftermacro{\aftermacroxxx}
+
+% alias because \c means cedilla in @tex or @math
+\let\texinfoc=\c
+
+% Used at the time of macro expansion.
+% Argument is macro body with arguments substituted
+\def\scanmacro#1{%
   \newlinechar`\^^M
   \let\xeatspaces\eatspaces
+  % Reduce doubled backslashes to one
+  \def\xprocessmacroarg{\passargtomacro\eatspaces}%
   %
-  % Undo catcode changes of \startcontents and \doprintindex
-  % When called from @insertcopying or (short)caption, we need active
-  % backslash to get it printed correctly.  Previously, we had
-  % \catcode`\\=\other instead.  We'll see whether a problem appears
-  % with macro expansion.                              --kasal, 19aug04
-  address@hidden \catcode`\\=\active \escapechar=`\@
-  %
-  % ... and for \example:
-  \spaceisspace
+  % Process the macro body under the current catcode regime.
+  \scantokens{#1\texinfoc}\aftermacro%
   %
-  % The \empty here causes a following catcode 5 newline to be eaten as
-  % part of reading whitespace after a control sequence.  It does not
-  % eat a catcode 13 newline.  There's no good way to handle the two
-  % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
-  % would then have different behavior).  See the Macro Details node in
-  % the manual for the workaround we recommend for macros and
-  % line-oriented commands.
-  % 
-  \scantokens{#1\empty}%
-\endgroup}
+  % The \c is to remove the \newlinechar added by \scantokens, and
+  % can be noticed by \parsearg.
+  %   The \aftermacro allows a \comment at the end of the macro definition
+  % to duplicate itself past the final \newlinechar added by \scantokens:
+  % this is used in the definition of \group to comment out a newline.  We
+  % don't do the same for \c to support Texinfo files with macros that ended
+  % with a @c, which should no longer be necessary.
+  %   We avoid surrounding the call to \scantokens with \bgroup and \egroup
+  % to allow macros to open or close groups themselves.
+}
 
 \def\scanexp#1{%
+  \bgroup
+  % Undo catcode changes of \startcontents and \printindex
+  % When called from @insertcopying or (short)caption, we need active
+  % backslash to get it printed correctly.
+  % FIXME: This may not be needed.
+  address@hidden \catcode`\\=\active \escapechar=`\@
   \edef\temp{\noexpand\scanmacro{#1}}%
   \temp
+  \egroup
 }
 
 \newcount\paramno   % Count of parameters
@@ -7408,7 +7647,6 @@ end
   \catcode`\+=\other
   \catcode`\<=\other
   \catcode`\>=\other
-  address@hidden
   \catcode`\^=\other
   \catcode`\_=\other
   \catcode`\|=\other
@@ -7418,37 +7656,29 @@ end
 
 \def\scanargctxt{% used for copying and captions, not macros.
   \scanctxt
+  address@hidden
   \catcode`\\=\other
   \catcode`\^^M=\other
 }
 
 \def\macrobodyctxt{% used for @macro definitions
   \scanctxt
+  \catcode`\ =\other
+  address@hidden
   \catcode`\{=\other
   \catcode`\}=\other
   \catcode`\^^M=\other
   \usembodybackslash
 }
 
-\def\macroargctxt{% used when scanning invocations
+% Used when scanning braced macro arguments.  Note, however, that catcode
+% changes here are ineffectual if the macro invocation was nested inside
+% an argument to another Texinfo command.
+\def\macroargctxt{%
   \scanctxt
-  \catcode`\\=0
+  \catcode`\^^M=\other
+  \catcode`\\=\active
 }
-% why catcode 0 for \ in the above?  To recognize \\ \{ \} as "escapes"
-% for the single characters \ { }.  Thus, we end up with the "commands"
-% that would be written @\ @{ @} in a Texinfo document.
-% 
-% We already have @{ and @}.  For @\, we define it here, and only for
-% this purpose, to produce a typewriter backslash (so, the @\ that we
-% define for @math can't be used with @macro calls):
-%
-\def\\{\normalbackslash}%
-% 
-% We would like to do this for \, too, since that is what makeinfo does.
-% But it is not possible, because Texinfo already has a command @, for a
-% cedilla accent.  Documents must use @comma{} instead.
-%
-% \anythingelse will almost certainly be an error of some kind.
 
 \def\macrolineargctxt{% used for whole-line arguments without braces
   \scanctxt
@@ -7526,59 +7756,36 @@ end
   \fi
 }
 
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
-% 
+% \getargs -- Parse the arguments to a @macro line.  Set \macname to
+% the name of the macro, and \argl to the braced argument list.
 \def\getargs#1{\getargsxxx#1{}}
 \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
 \def\getmacname#1 #2\relax{\macname={#1}}
 \def\getmacargs#1{\def\argl{#1}}
+% This made use of the feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
 
-% For macro processing make @ a letter so that we can make
-% private-to-Texinfo macro names.
address@hidden
-\catcode address@hidden
-
-% Parse the optional {params} list.  Set up \paramno and \paramlist
-% so \defmacro knows what to do.  Define \macarg.BLAH for each BLAH
-% in the params list to some hook where the argument is to be expanded.  If
-% there are less than 10 arguments that hook is to be replaced by ##N where N
+% Parse the optional {params} list to @macro or @rmacro.
+% Set \paramno to the number of arguments,
+% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a
+% three-param macro.)  Define \macarg.BLAH for each BLAH in the params
+% list to some hook where the argument is to be expanded.  If there are
+% less than 10 arguments that hook is to be replaced by ##N where N
 % is the position in that list, that is to say the macro arguments are to be
 % defined `a la TeX in the macro body.  
 %
 % That gets used by \mbodybackslash (above).
 %
-% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX: let \hash be something
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
-%
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-%
-% If there are 10 or more arguments, a different technique is used, where the
-% hook remains in the body, and when macro is to be expanded the body is
-% processed again to replace the arguments.
-%
-% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
-% argument N value and then \edef  the body (nothing else will expand because 
of
-% the catcode regime underwhich the body was input).
+% If there are 10 or more arguments, a different technique is used: see
+% \parsemmanyargdef.
 %
-% If you compile with TeX (not eTeX), and you have macros with 10 or more
-% arguments, no macro can have more than 256 arguments (else error).
-% 
 \def\parsemargdef#1;{%
   \paramno=0\def\paramlist{}%
   \let\hash\relax
-  \let\xeatspaces\relax
+  % \hash is redefined to `#' later to get it into definitions
+  \let\processmacroarg\relax
   \parsemargdefxxx#1,;,%
-  % In case that there are 10 or more arguments we parse again the arguments
-  % list to set new definitions for the \macarg.BLAH macros corresponding to
-  % each BLAH argument. It was anyhow needed to parse already once this list
-  % in order to count the arguments, and as macros with at most 9 arguments
-  % are by far more frequent than macro with 10 or more arguments, defining
-  % twice the \macarg.BLAH macros does not cost too much processing power.
   \ifnum\paramno<10\relax\else
     \paramno0\relax
     \parsemmanyargdef@@#1,;,% 10 or more arguments
@@ -7589,10 +7796,47 @@ end
   \else \let\next=\parsemargdefxxx
     \advance\paramno by 1
     \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
-        {\xeatspaces{\hash\the\paramno}}%
+        {\processmacroarg{\hash\the\paramno}}%
     \edef\paramlist{\paramlist\hash\the\paramno,}%
   \fi\next}
 
+% \parsemacbody, \parsermacbody
+%
+% Read recursive and nonrecursive macro bodies. (They're different since
+% rec and nonrec macros end differently.)
+% 
+% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro 
+% body to be transformed.
+% Set \macrobody to the body of the macro, and call \defmacro.
+%
+{\catcode`\ address@hidden macro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+{\catcode`\ address@hidden rmacro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+
+% Make @ a letter, so that we can make private-to-Texinfo macro names.
address@hidden
+\catcode address@hidden
+
+%%%%%%%%%%%%%% Code for > 10 arguments only   %%%%%%%%%%%%%%%%%%
+
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef the body (nothing else will expand because of
+% the catcode regime under which the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, no macro can have more than 256 arguments (else error).
+%
+% In case that there are 10 or more arguments we parse again the arguments
+% list to set new definitions for the \macarg.BLAH macros corresponding to
+% each BLAH argument. It was anyhow needed to parse already once this list
+% in order to count the arguments, and as macros with at most 9 arguments
+% are by far more frequent than macro with 10 or more arguments, defining
+% twice the \macarg.BLAH macros does not cost too much processing power.
 \def\parsemmanyargdef@@#1,{%
   \if#1;\let\next=\relax
   \else 
@@ -7608,15 +7852,6 @@ end
     \advance\paramno by 1\relax
   \fi\next}
 
-% These two commands read recursive and nonrecursive macro bodies.
-% (They're different since rec and nonrec macros end differently.)
-%
-\catcode address@hidden
address@hidden macro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
address@hidden rmacro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\catcode address@hidden
 
 address@hidden
 address@hidden
@@ -7645,9 +7880,6 @@ end
     \getargvals@@
   \fi
 }
-
-% Internal for address@hidden
-%  
 \def\getargvals@@{%
   \ifx\paramlist\nilm@
       % Some sanity check needed here that \argvaluelist is also empty.
@@ -7755,16 +7987,7 @@ end
   \next
 }
 
-% Save the token stack pointer into macro #1:
address@hidden
-%
-% Restore the token stack pointer from number in macro #1:
-\def\texirestoretoksstackpoint#1{\expandafter\mathchardef
-  address@hidden
-% Variant \newtoks that can be used non-\outer:
-\def\texinonouternewtoks{\alloc@ 5\toks \toksdef address@hidden
-
-% Tailing missing arguments are set to empty.
+% Trailing missing arguments are set to empty.
 % 
 address@hidden
   \ifx\paramlist\nilm@
@@ -7795,81 +8018,115 @@ end
    \long\def#2{#4}%
 }
 
-% This defines a Texinfo @macro. There are eight cases: recursive and
-% nonrecursive macros of zero, one, up to nine, and many arguments.
-% Much magic with \expandafter here.
+
+%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%%
+
+
+
+% Remove following spaces at the expansion stage.
+% This works because spaces are discarded before each argument when TeX is 
+% getting the arguments for a macro.
+% This must not be immediately followed by a }.
+\long\def\gobblespaces#1{#1}
+
+% This defines a Texinfo @macro or @rmacro, called by \parsemacbody.
+%    \macrobody has the body of the macro in it, with placeholders for
+% its parameters, looking like "\processmacroarg{\hash 1}".
+%    \paramno is the number of parameters
+%    \paramlist is a TeX parameter text, e.g. "#1,#2,#3,"
+% There are eight cases: recursive and nonrecursive macros of zero, one,
+% up to nine, and many arguments.
 % \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
+% they're defined in: @include reads the file inside a group.
 %
 \def\defmacro{%
   \let\hash=##% convert placeholders to macro parameter chars
-  \ifrecursive
+  \ifnum\paramno=1
+    \def\processmacroarg{\gobblespaces}%
+    % This removes the pair of braces around the argument.  We don't
+    % use \eatspaces, because this can cause ends of lines to be lost
+    % when the argument to \eatspaces is read, leading to line-based
+    % commands like "@itemize" not being read correctly.
+  \else
+    \def\processmacroarg{\xprocessmacroarg}%
+    \let\xprocessmacroarg\relax
+  \fi
+  \ifrecursive   %%%%%%%%%%%%%% Recursive %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     \ifcase\paramno
     % 0
       \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\scanmacro{\temp}}%
+        \noexpand\scanmacro{\macrobody}}%
     \or % 1
       \expandafter\xdef\csname\the\macname\endcsname{%
          \bgroup
          \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-         \egroup\noexpand\scanmacro{\temp}}%
+         \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+      \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+         \expandafter\noexpand\csname\the\macname @@@@\endcsname{%
+           \noexpand\gobblespaces##1\empty}%
+           % The \empty is for \gobblespaces in case #1 is empty
+         }%
+      \expandafter\xdef\csname\the\macname @@@@\endcsname##1{%
+         \egroup\noexpand\scanmacro{\macrobody}}%
     \else
       \ifnum\paramno<10\relax % at most 9
         \expandafter\xdef\csname\the\macname\endcsname{%
            \bgroup\noexpand\macroargctxt
-           \noexpand\csname\the\macname xx\endcsname}%
-        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+           \noexpand\csname\the\macname @@\endcsname}%
+        \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+            \expandafter\noexpand\csname\the\macname @@@\endcsname ##1,}%
         \expandafter\expandafter
         \expandafter\xdef
         \expandafter\expandafter
-          \csname\the\macname xxx\endcsname
-            \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+          \csname\the\macname @@@\endcsname
+            \paramlist{\egroup\noexpand\scanmacro{\macrobody}}%
       \else % 10 or more
         \expandafter\xdef\csname\the\macname\endcsname{%
           address@hidden
         }%    
-        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+        \global\expandafter\let\csname mac.\the\macname 
.body\endcsname\macrobody
         \global\expandafter\let\csname mac.\the\macname 
.recurse\endcsname\gobble
       \fi
     \fi
-  \else
+  \else  %%%%%%%%%%%%%%%%%%%%%% Non-recursive %%%%%%%%%%%%%%%%%%%%%%%%%%
     \ifcase\paramno
     % 0
       \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
+        \noexpand\scanmacro{\macrobody}}%
     \or % 1
       \expandafter\xdef\csname\the\macname\endcsname{%
          \bgroup
          \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+         \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+      \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+         \expandafter\noexpand\csname\the\macname @@@@\endcsname{%
+           \noexpand\gobblespaces##1\empty}%
+           % The \empty is for \gobblespaces in case #1 is empty
+         }%
+      \expandafter\xdef\csname\the\macname @@@@\endcsname##1{%
         \egroup
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
+        \noexpand\scanmacro{\macrobody}%
+        }%
     \else % at most 9
       \ifnum\paramno<10\relax
         \expandafter\xdef\csname\the\macname\endcsname{%
            \bgroup\noexpand\macroargctxt
-           \expandafter\noexpand\csname\the\macname xx\endcsname}%
-        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+           \expandafter\noexpand\csname\the\macname @@\endcsname}%
+        \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+            \expandafter\noexpand\csname\the\macname @@@\endcsname ##1,}%
         \expandafter\expandafter
         \expandafter\xdef
         \expandafter\expandafter
-        \csname\the\macname xxx\endcsname
+        \csname\the\macname @@@\endcsname
         \paramlist{%
             \egroup
-            \noexpand\norecurse{\the\macname}%
-            \noexpand\scanmacro{\temp}\egroup}%
+            \noexpand\scanmacro{\macrobody}%
+            }%
       \else % 10 or more:
         \expandafter\xdef\csname\the\macname\endcsname{%
           address@hidden
         }%
-        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+        \global\expandafter\let\csname mac.\the\macname 
.body\endcsname\macrobody
         \global\expandafter\let\csname mac.\the\macname 
.recurse\endcsname\norecurse
       \fi
     \fi
@@ -7879,16 +8136,86 @@ end
 
 \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
 
+
address@hidden \catcode`\\=13
address@hidden@_=11
+
+% Call #1 with a list of tokens #2, with any doubled backslashes in #2
+% compressed to one.
address@hidden@passargtomacro#1#2{%
+  @address@hidden
+  @address@hidden
+  @address@hidden@finish}%
+  @address@hidden
+  @address@hidden@relax
+  @address@hidden
+}
+
+% Input stream is just after a backslash.  If the next token is not a
+% backslash, process the rest of the argument; otherwise, remove the next
+% token.
address@hidden@look_ahead{%
+  @address@hidden@look_aheadzzz}
address@hidden@look_aheadzzz{%
+  @address@hidden
+   @address@hidden@gobble_and_check_finish 
+  @else
+   @address@hidden@add_segment
+  @address@hidden
+}
+
+% Double backslash found.  Add a single backslash here.
address@hidden@gobble_and_check_finish#1{%
+  @add_the_backslash
+  @address@hidden
+  @address@hidden@add_segment
+}
+
+% append a backslash to \arg_result
address@hidden@add_the_backslash{%
+  @address@hidden@address@hidden@address@hidden
+}
+
+% Input stream is either at the start of the argument, or just after a 
+% backslash sequence, either a lone backslash, or a doubled backslash.  
+% \next_token contains the first token in the input stream: if it is \finish, 
+% finish; otherwise, append to \arg_result the segment of the argument up until
+% the next backslash.  \pending_backslash contains a backslash to represent
+% a backslash just before the start of the input stream that has not been
+% added to \arg_result.
address@hidden@add_segment#1\{%
address@hidden@address@hidden
+  @address@hidden@call_the_macro%
address@hidden
+  @address@hidden@look_ahead
+  %
+  % append to @arg_result
+  % token list registers might be better
+  @address@hidden@address@hidden
+  @address@hidden@address@hidden
+  @address@hidden@expandafter{%
+  @address@hidden
+  @pending_backslash#1}%
+  @address@hidden
address@hidden@next}
+
address@hidden@address@hidden@address@hidden@arg_result}}
+
+}
+
 % \braceorline MAC is used for a one-argument macro MAC.  It checks
 % whether the next non-whitespace character is a {.  It sets the context
 % for reading the argument (slightly different in the two cases).  Then,
-% to read the argument, in the whole-line case, it then calls the
-% regular \parsearg MAC; in the lbrace case, it just calls MAC itself.
+% to read the argument, in the whole-line case, it then calls the regular
+% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
 % 
 \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
 \def\braceorlinexxx{%
-  \ifx\nchar\bgroup\macroargctxt
-  \else\macrolineargctxt\expandafter\parsearg
+  \ifx\nchar\bgroup
+    \macroargctxt
+    \expandafter\passargtomacro
+  \else
+    \macrolineargctxt\expandafter\parsearg
   \fi \macnamexxx}
 
 
@@ -7970,6 +8297,7 @@ end
   \pdfmkdest{#1}%
   \iflinks
     {%
+      \requireauxfile
       \atdummies  % preserve commands, but don't expand them
       \edef\writexrdef##1##2{%
        address@hidden #1 of \setref, expanded by the \edef
@@ -8009,9 +8337,12 @@ end
 % node name, #4 the name of the Info file, #5 the name of the printed
 % manual.  All but the node name can be omitted.
 %
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\pxref{\putwordsee{} \xrefXX}
+\def\xref{\putwordSee{} \xrefXX}
+\def\ref{\xrefXX}
+
+\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX}
+\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]}
 %
 \newbox\toprefbox
 \newbox\printedrefnamebox
@@ -8155,6 +8486,12 @@ end
       %
       % output the `page 3'.
       \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+           \ifx,\tokenafterxref
+      \else\ifx.\tokenafterxref
+      \else\ifx;\tokenafterxref
+      \else\ifx)\tokenafterxref
+      \else,% add a , if xref not followed by punctuation
+      \fi\fi\fi\fi
     \fi\fi
   \fi
   \endlink
@@ -8225,6 +8562,7 @@ end
 % If its value is nonempty, SUFFIX is output afterward.
 %
 \def\refx#1#2{%
+  \requireauxfile
   {%
     \indexnofonts
     \otherbackslash
@@ -8288,6 +8626,23 @@ end
   \fi
 }
 
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate at the beginning of the file.
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% Used when writing to the aux file, or when using data from it.
+\def\requireauxfile{%
+  \iflinks
+    \tryauxfile
+    % Open the new aux file.  TeX will close it automatically at exit.
+    \immediate\openout\auxfile=\jobname.aux
+  \fi
+  \global\let\requireauxfile=\relax   % Only do this once.
+}
+
 % Read the last existing aux file, if any.  No error if none exists.
 %
 \def\tryauxfile{%
@@ -8761,6 +9116,7 @@ end
       % \floatlabel-lof.  Besides \floatident, we include the short
       % caption if specified, else the full caption if specified, else nothing.
       {%
+        \requireauxfile
         \atdummies
         %
         % since we read the caption text in the macro world, where ^^M
@@ -10186,8 +10542,8 @@ directory should work if nowhere else does.}
 \def\activedoublequote{{\tt\char34}}
 \let"=\activedoublequote
 \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
-\chardef\hat=`\^
-\catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat
+\chardef\hatchar=`\^
+\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat
 
 \catcode`\_=\active
 \def_{\ifusingtt\normalunderscore\_}
@@ -10204,6 +10560,8 @@ directory should work if nowhere else does.}
 \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
 \catcode`\+=\active \def+{{\tt \char 43}}
 \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+\catcode`\-=\active \let-=\normaldash
+
 
 % used for headline/footline in the output routine, in case the page
 % breaks in the middle of an @tex block.
@@ -10218,12 +10576,6 @@ directory should work if nowhere else does.}
   % in principle, all other definitions in \tex have to be undone too.
 }
 
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
 % Used sometimes to turn off (effectively) the active characters even after
 % parsing them.
 \def\turnoffactive{%
@@ -10242,23 +10594,22 @@ directory should work if nowhere else does.}
 % \doublebackslash is two of them (for the pdf outlines).
 {\catcode`\\=\other @address@hidden @address@hidden
 
-% In texinfo, backslash is an active character; it prints the backslash
+% In Texinfo, backslash is an active character; it prints the backslash
 % in fixed width font.
 \catcode`\\=\active  % @ for escape char from now on.
 
-% The story here is that in math mode, the \char of \backslashcurfont
-% ends up printing the roman \ from the math symbol font (because \char
-% in math mode uses the \mathcode, and plain.tex sets
-% \mathcode`\\="026E).  It seems better for @backslashchar{} to always
-% print a typewriter backslash, hence we use an explicit \mathchar,
+% Print a typewriter backslash.  For math mode, we can't simply use
+% \backslashcurfont: the story here is that in math mode, the \char
+% of \backslashcurfont ends up printing the roman \ from the math symbol
+% font (because \char in math mode uses the \mathcode, and plain.tex
+% sets \mathcode`\\="026E).  Hence we use an explicit \mathchar,
 % which is the decimal equivalent of "715c (class 7, e.g., use \fam;
 % ignored family value; char position "5C).  We can't use " for the
 % usual hex value because it has already been made active.
address@hidden@address@hidden @ifmmode @mathchar29020 @else @backslashcurfont 
@fi}}
address@hidden@backslashchar = @normalbackslash % @backslashchar{} is for user 
documents.
 
-% On startup, @fixbackslash assigns:
-%  @let \ = @normalbackslash
address@hidden@address@hidden @ifmmode @mathchar29020 @else @backslashcurfont 
@fi}}
address@hidden@backslashchar = @ttbackslash % @backslashchar{} is for user 
documents.
+
 % \rawbackslash defines an active \ to do \backslashcurfont.
 % \otherbackslash defines an active \ to be a literal `\' character with
 % catcode other.  We switch back and forth between these.
@@ -10266,8 +10617,7 @@ directory should work if nowhere else does.}
 @address@hidden@address@hidden
 
 % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-% the literal character `\'.  Also revert - to its normal character, in
-% case the active - from code has slipped in.
+% the literal character `\'.
 %
 address@hidden = @active
  @address@hidden
@@ -10278,40 +10628,66 @@ directory should work if nowhere else does.}
    @address@hidden
    @let<address@hidden
    @let>address@hidden
-   @address@hidden
    @address@hidden
    @address@hidden
    @let|address@hidden
    @address@hidden
+   @address@hidden
    @markupsetuplqdefault
    @markupsetuprqdefault
    @unsepspaces
  }
 }
 
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
address@hidden
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have @fixbackslash turn them back on.
address@hidden@other @address@hidden@other
 
+% \enablebackslashhack - allow file to begin `\input texinfo'
+%
 % If a .fmt file is being used, we don't want the `\input texinfo' to show up.
 % That is what \eatinput is for; after that, the `\' should revert to printing
 % a backslash.
-%
address@hidden@eatinput input address@hidden
address@hidden@let\ = @eatinput
+% If the file did not have a `\input texinfo', then it is turned off after
+% the first line; otherwise the first `\' in the file would cause an error.
+% This is used on the very last line of this file, texinfo.tex.
+% We also use @c to call @fixbackslash, in case ends of lines are hidden.
+{
address@hidden@^=7
address@hidden@address@hidden@enablebackslashhack{%
+  @address@hidden = @eatinput%
+  @address@hidden
+  @address@hidden@address@hidden
+  @def address@hidden@secondlinenl}%
+  @gdef @address@hidden@thirdlinenl}%
+  @gdef @address@hidden
+}}
+
address@hidden@^=7 @address@hidden
address@hidden@eatinput input address@hidden
 
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\' in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also turn back on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
 @address@hidden
-  @address@hidden @let\ = @normalbackslash @fi
+  @address@hidden @let\ = @ttbackslash @fi
+  @catcode13=5 % regular end of line
+  @address@hidden@texinfoc
+  % Also turn back on active characters that might appear in the input
+  % file name, in case not using a pre-dumped format.
   @address@hidden
   @address@hidden@active
+  %
+  % If texinfo.cnf is present on the system, read it.
+  % Useful for site-wide @afourpaper, etc.  This macro, @fixbackslash, gets
+  % called at the beginning of every Texinfo file.  Not opening texinfo.cnf
+  % directly in this file, texinfo.tex, makes it possible to make a format
+  % file for Texinfo.
+  %
+  @openin 1 texinfo.cnf
+  @ifeof 1 @else @input texinfo.cnf @fi
+  @closein 1
 }
 
+
 % Say @foo, not \foo, in error messages.
 @escapechar = `@@
 
@@ -10351,3 +10727,4 @@ directory should work if nowhere else does.}
 @ignore
    arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
 @end ignore
address@hidden
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index 87c7c80..ac2e74e 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -1,4 +1,4 @@
-\input texinfo   @c -*-texinfo-*-
+\input texinfo   @c -*- mode: texinfo; coding: utf-8 -*-
 @setfilename ../../info/tramp.info
 @c %**start of header
 @settitle TRAMP User Manual
diff --git a/doc/misc/url.texi b/doc/misc/url.texi
index d94b19f..95fe5ea 100644
--- a/doc/misc/url.texi
+++ b/doc/misc/url.texi
@@ -593,7 +593,7 @@ sending a message to @samp{foo@@bar.com}.  The ``retrieval 
method''
 for such URLs is to open a mail composition buffer in which the
 appropriate content (e.g., the recipient address) has been filled in.
 
-  As defined in RFC 2368, a @code{mailto} URL has the form
+  As defined in RFC 6068, a @code{mailto} URL can have the form
 
 @example
 @samp{mailto:@address@hidden@var{contents}[&@address@hidden
diff --git a/etc/AUTHORS b/etc/AUTHORS
index cf08cf8..f3adef4 100644
--- a/etc/AUTHORS
+++ b/etc/AUTHORS
@@ -3479,7 +3479,7 @@ Peter Stephenson: wrote vcursor.el
 
 Peter Tury: changed org.texi
 
-Peter von der Ahe: changed gnus-ems.el
+Peter von der Ahé: changed gnus-ems.el
 
 Peter Whaite: changed data.c
 
diff --git a/etc/NEWS b/etc/NEWS
index 8a08a06..e823905 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -412,7 +412,6 @@ the old behavior -- *shell* buffer displays in current 
window -- use
 (add-to-list 'display-buffer-alist
      '("^\\*shell\\*$" . (display-buffer-same-window))).
 
-
 ** EIEIO
 +++
 *** The `:protection' slot option is not obeyed any more.
@@ -461,6 +460,11 @@ typing RET.
 *** If `quick-calc' is called with a prefix argument, insert the
 result of the calculation into the current buffer.
 
++++
+** In Edebug, you can now set the initial mode with C-x C-a C-m.  With
+this you can tell Edebug not to stop at the start of the first
+instrumented function.
+
 ** ElDoc
 *** New minor mode `global-eldoc-mode'
 *** `eldoc-documentation-function' now defaults to `ignore'
@@ -657,11 +661,17 @@ plist will contain a :peer element that has the output of
 
 ** Tramp
 
++++
 *** New connection method "nc", which allows to access dumb busyboxes.
 
++++
 *** Method-specific parameters can be overwritten now with variable
 `tramp-connection-properties'.
 
+---
+*** Handler for `file-notify-valid-p' for remote machines that support
+filesystem notifications.
+
 ** SQL mode
 
 *** New user variable `sql-default-directory' enables remote
@@ -822,9 +832,15 @@ make the new option 
`eshell-destroy-buffer-when-process-dies' non-nil.
 ** tar-mode: new `tar-new-entry' command, allowing for new members to
 be added to the archive.
 
+---
 ** Autorevert: dired buffers are also auto-reverted via file
 notifications, if Emacs is compiled with file notification support.
 
++++
+** File Notifications: the new function `file-notify-valid-p' checks,
+whether a file notification descriptor still corresponds to an
+activate watch.
+
 ** Obsolete packages
 
 ---
@@ -856,6 +872,10 @@ a typographically-correct documents.
 
 * Incompatible Lisp Changes in Emacs 25.1
 
+** `syntax-begin-function' is declared obsolete.
+Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN
+slot in font-lock-defaults.
+
 +++
 ** `package-initialize' now sets `package-enable-at-startup' to nil if
 called during startup.  Users who call this function in their init
@@ -977,6 +997,9 @@ be updated accordingly.
 
 * Lisp Changes in Emacs 25.1
 
+** syntax-propertize is now automatically called on-demand during forward
+parsing functions like `forward-sexp'.
+
 ** New hooks prefix-command-echo-keystrokes-functions and
 prefix-command-preserve-state-hook, to allow the definition of prefix
 commands other than the predefined C-u.
@@ -1125,8 +1148,7 @@ integers.
 of the Emacs process to binary I/O mode.
 
 ** ASCII approximations to curved quotes are put in standard-display-table
-if the locale cannot display curved quotes, or if text-quoting-style
-initially specifies a preference for ASCII.
+if the terminal cannot display curved quotes.
 
 ** Standard output and error streams now transliterate characters via
 standard-display-table, and encode output using locale-coding-system.
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index d07e7cf..1b48318 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -2036,6 +2036,14 @@ XKeymacs Version 3.47, deactivating XKeymacs when Emacs 
is active is
 not enough to avoid its messing with the keyboard input.  Exiting
 XKeymacs completely is reported to solve the problem.
 
+** Pasting from Windows clipboard into Emacs doesn't work.
+
+This was reported to be the result of an anti-virus software blocking
+the clipboard-related operations when a Web browser is open, for
+security reasons.  The solution is to close the Web browser while
+working in Emacs, or to add emacs.exe to the list of applications that
+are allowed to use the clipboard when the Web browser is open.
+
 ** Windows 95 and networking.
 
 To support server sockets, Emacs loads ws2_32.dll.  If this file is
diff --git a/etc/emacs-buffer.gdb b/etc/emacs-buffer.gdb
index 5d6cbd4..cdcb666 100644
--- a/etc/emacs-buffer.gdb
+++ b/etc/emacs-buffer.gdb
@@ -29,8 +29,8 @@
 # The Emacs executable must have debugging symbols for this to work.
 # But you never strip Emacs, right?
 #
-# The main commands of interest are `ybuffer-list', `yfile-buffers',
-# `ysave-buffer', and `ybuffer-contents'.  The `y' prefix avoids any
+# The main commands of interest are 'ybuffer-list', 'yfile-buffers',
+# 'ysave-buffer', and 'ybuffer-contents'.  The 'y' prefix avoids any
 # namespace collisions with emacs/src/.gdbinit.
 
 # Since the internal data structures in Emacs occasionally from time to
@@ -129,7 +129,7 @@ end
 document ybuffer-list
   Display a list of buffer names, sizes, and other attributes.
   The buffer number in the first column is used as an argument
-  to some other emacs-buffer recovery commands, e.g. `ysave-buffer'.
+  to some other emacs-buffer recovery commands, e.g. 'ysave-buffer'.
 end
 
 define yfile-buffers
@@ -138,7 +138,7 @@ define yfile-buffers
 end
 document yfile-buffers
   Display a list of buffers which are associated with files.
-  This is like `ybuffer-list', but only buffers that were visiting files
+  This is like 'ybuffer-list', but only buffers that were visiting files
   are displayed.
 end
 
@@ -165,7 +165,7 @@ define yset-buffer
 end
 document yset-buffer
   Set current buffer (for other emacs-buffer recovery commands) to the ARG'th
-  buffer as displayed by `ybuffer-list'.
+  buffer as displayed by 'ybuffer-list'.
 end
 
 define yget-buffer-pointers
@@ -184,9 +184,9 @@ define yget-buffer-pointers
 end
 document yget-buffer-pointers
   Update convenience variables with address pointers for the ARG'th buffer
-  as displayed by `ybuffer-list'.
+  as displayed by 'ybuffer-list'.
 
-  This also sets the current buffer using `yset-buffer' (which see).
+  This also sets the current buffer using 'yset-buffer' (which see).
 end
 
 define yget-current-buffer-name
@@ -220,11 +220,11 @@ define ydump-buffer
   end
 end
 document ydump-buffer
-  Write contents of buffer N (as numbered according to `ybuffer-list') to
+  Write contents of buffer N (as numbered according to 'ybuffer-list') to
   file FILE.
 
-  This is mainly used as an internal subroutine for `ysave-buffer' and
-  `ybuffer-contents', which see.
+  This is mainly used as an internal subroutine for 'ysave-buffer' and
+  'ybuffer-contents', which see.
 end
 
 define ysave-buffer
@@ -242,7 +242,7 @@ define ysave-buffer
   end
 end
 document ysave-buffer
-  Save contents of buffer N (as numbered according to `ybuffer-list') to
+  Save contents of buffer N (as numbered according to 'ybuffer-list') to
   file FILE.
 end
 
@@ -258,7 +258,7 @@ define ybuffer-contents
   end
 end
 document ybuffer-contents
-  Write contents of buffer N (numbered according to `ybuffer-list') to stdout.
+  Write contents of buffer N (numbered according to 'ybuffer-list') to stdout.
 end
 
 # local variables:
diff --git a/etc/images/README b/etc/images/README
index 005754b..05d7241 100644
--- a/etc/images/README
+++ b/etc/images/README
@@ -13,6 +13,10 @@
 
 Thanks to address@hidden for the help.
 
+Alternatively, run 'convert' from ImageMagick:
+
+  convert file.xpm file.pbm
+
 
 COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
@@ -97,3 +101,6 @@ Emacs images and their source in the GNOME icons stock/ 
directory:
 The images in the low-color/ subdirectory are low-color versions of
 the files of the same name in this directory, and are subject to the
 same conditions.
+
+The *.pbm files were generally converted from *.xpm by running GIMP or
+ImageMagick's 'convert'.
diff --git a/etc/images/connect.pbm b/etc/images/connect.pbm
new file mode 100644
index 0000000..f7f72ba
Binary files /dev/null and b/etc/images/connect.pbm differ
diff --git a/etc/images/custom/down-pushed.pbm 
b/etc/images/custom/down-pushed.pbm
new file mode 100644
index 0000000..12c2374
--- /dev/null
+++ b/etc/images/custom/down-pushed.pbm
@@ -0,0 +1,3 @@
+P4
+8 12
+������������
\ No newline at end of file
diff --git a/etc/images/custom/down.pbm b/etc/images/custom/down.pbm
new file mode 100644
index 0000000..0878505
--- /dev/null
+++ b/etc/images/custom/down.pbm
@@ -0,0 +1,3 @@
+P4
+9 9
+����������������
\ No newline at end of file
diff --git a/etc/images/custom/right-pushed.pbm 
b/etc/images/custom/right-pushed.pbm
new file mode 100644
index 0000000..f984f13
--- /dev/null
+++ b/etc/images/custom/right-pushed.pbm
@@ -0,0 +1,3 @@
+P4
+8 12
+������������
\ No newline at end of file
diff --git a/etc/images/custom/right.pbm b/etc/images/custom/right.pbm
new file mode 100644
index 0000000..1798fac
--- /dev/null
+++ b/etc/images/custom/right.pbm
@@ -0,0 +1,3 @@
+P4
+9 9
+������������������
\ No newline at end of file
diff --git a/etc/images/describe.pbm b/etc/images/describe.pbm
new file mode 100644
index 0000000..952f348
Binary files /dev/null and b/etc/images/describe.pbm differ
diff --git a/etc/images/disconnect.pbm b/etc/images/disconnect.pbm
new file mode 100644
index 0000000..8da87e0
Binary files /dev/null and b/etc/images/disconnect.pbm differ
diff --git a/etc/images/ezimage/bits.pbm b/etc/images/ezimage/bits.pbm
new file mode 100644
index 0000000..f8cb891
--- /dev/null
+++ b/etc/images/ezimage/bits.pbm
@@ -0,0 +1,3 @@
+P4
+15 15
+������������������������������
\ No newline at end of file
diff --git a/etc/images/ezimage/bitsbang.pbm b/etc/images/ezimage/bitsbang.pbm
new file mode 100644
index 0000000..95653a4
--- /dev/null
+++ b/etc/images/ezimage/bitsbang.pbm
@@ -0,0 +1,3 @@
+P4
+15 15
+�����������������������~�~����
\ No newline at end of file
diff --git a/etc/images/ezimage/box-minus.pbm b/etc/images/ezimage/box-minus.pbm
new file mode 100644
index 0000000..ae1654e
--- /dev/null
+++ b/etc/images/ezimage/box-minus.pbm
@@ -0,0 +1,3 @@
+P4
+20 15
+���������������������������������������������
\ No newline at end of file
diff --git a/etc/images/ezimage/box-plus.pbm b/etc/images/ezimage/box-plus.pbm
new file mode 100644
index 0000000..ae1654e
--- /dev/null
+++ b/etc/images/ezimage/box-plus.pbm
@@ -0,0 +1,3 @@
+P4
+20 15
+���������������������������������������������
\ No newline at end of file
diff --git a/etc/images/ezimage/box.pbm b/etc/images/ezimage/box.pbm
new file mode 100644
index 0000000..bcfcc4c
Binary files /dev/null and b/etc/images/ezimage/box.pbm differ
diff --git a/etc/images/ezimage/checkmark.pbm b/etc/images/ezimage/checkmark.pbm
new file mode 100644
index 0000000..f8cb891
--- /dev/null
+++ b/etc/images/ezimage/checkmark.pbm
@@ -0,0 +1,3 @@
+P4
+15 15
+������������������������������
\ No newline at end of file
diff --git a/etc/images/ezimage/dir-minus.pbm b/etc/images/ezimage/dir-minus.pbm
new file mode 100644
index 0000000..327bf93
Binary files /dev/null and b/etc/images/ezimage/dir-minus.pbm differ
diff --git a/etc/images/ezimage/dir-plus.pbm b/etc/images/ezimage/dir-plus.pbm
new file mode 100644
index 0000000..0463e45
Binary files /dev/null and b/etc/images/ezimage/dir-plus.pbm differ
diff --git a/etc/images/ezimage/dir.pbm b/etc/images/ezimage/dir.pbm
new file mode 100644
index 0000000..3f0a1d8
Binary files /dev/null and b/etc/images/ezimage/dir.pbm differ
diff --git a/etc/images/ezimage/doc-minus.pbm b/etc/images/ezimage/doc-minus.pbm
new file mode 100644
index 0000000..979a4a9
--- /dev/null
+++ b/etc/images/ezimage/doc-minus.pbm
@@ -0,0 +1,3 @@
+P4
+15 15
+�����������f������Ǟ�>�>�~����
\ No newline at end of file
diff --git a/etc/images/ezimage/doc-plus.pbm b/etc/images/ezimage/doc-plus.pbm
new file mode 100644
index 0000000..c0a9be0
--- /dev/null
+++ b/etc/images/ezimage/doc-plus.pbm
@@ -0,0 +1,3 @@
+P4
+15 15
+�����������&������Ǟ�>�>�~����
\ No newline at end of file
diff --git a/etc/images/ezimage/doc.pbm b/etc/images/ezimage/doc.pbm
new file mode 100644
index 0000000..240ca75
--- /dev/null
+++ b/etc/images/ezimage/doc.pbm
@@ -0,0 +1,3 @@
+P4
+15 15
+������������������Ǟ�>�>�~����
\ No newline at end of file
diff --git a/etc/images/ezimage/info.pbm b/etc/images/ezimage/info.pbm
new file mode 100644
index 0000000..1adec0e
--- /dev/null
+++ b/etc/images/ezimage/info.pbm
@@ -0,0 +1,3 @@
+P4
+10 15
address@hidden
\ No newline at end of file
diff --git a/etc/images/ezimage/key.pbm b/etc/images/ezimage/key.pbm
new file mode 100644
index 0000000..6556d87
--- /dev/null
+++ b/etc/images/ezimage/key.pbm
@@ -0,0 +1,3 @@
+P4
+16 16
+�����������?��?���?�����
\ No newline at end of file
diff --git a/etc/images/ezimage/label.pbm b/etc/images/ezimage/label.pbm
new file mode 100644
index 0000000..5cdc80e
--- /dev/null
+++ b/etc/images/ezimage/label.pbm
@@ -0,0 +1,3 @@
+P4
+10 16
+��������������������������������
\ No newline at end of file
diff --git a/etc/images/ezimage/lock.pbm b/etc/images/ezimage/lock.pbm
new file mode 100644
index 0000000..24c3869
--- /dev/null
+++ b/etc/images/ezimage/lock.pbm
@@ -0,0 +1,3 @@
+P4
+16 16
+���������������������������
\ No newline at end of file
diff --git a/etc/images/ezimage/mail.pbm b/etc/images/ezimage/mail.pbm
new file mode 100644
index 0000000..1969cc8
Binary files /dev/null and b/etc/images/ezimage/mail.pbm differ
diff --git a/etc/images/ezimage/page-minus.pbm 
b/etc/images/ezimage/page-minus.pbm
new file mode 100644
index 0000000..0eff2bc
Binary files /dev/null and b/etc/images/ezimage/page-minus.pbm differ
diff --git a/etc/images/ezimage/page-plus.pbm b/etc/images/ezimage/page-plus.pbm
new file mode 100644
index 0000000..cb4036b
Binary files /dev/null and b/etc/images/ezimage/page-plus.pbm differ
diff --git a/etc/images/ezimage/page.pbm b/etc/images/ezimage/page.pbm
new file mode 100644
index 0000000..ea4c5d6
Binary files /dev/null and b/etc/images/ezimage/page.pbm differ
diff --git a/etc/images/ezimage/tag-gt.pbm b/etc/images/ezimage/tag-gt.pbm
new file mode 100644
index 0000000..7714ea4
--- /dev/null
+++ b/etc/images/ezimage/tag-gt.pbm
@@ -0,0 +1,3 @@
+P4
+20 15
+�������������`0�p0�x0�|0�~0�|0�x0�p0���������
\ No newline at end of file
diff --git a/etc/images/ezimage/tag-minus.pbm b/etc/images/ezimage/tag-minus.pbm
new file mode 100644
index 0000000..5b2053e
Binary files /dev/null and b/etc/images/ezimage/tag-minus.pbm differ
diff --git a/etc/images/ezimage/tag-plus.pbm b/etc/images/ezimage/tag-plus.pbm
new file mode 100644
index 0000000..e75a0e6
Binary files /dev/null and b/etc/images/ezimage/tag-plus.pbm differ
diff --git a/etc/images/ezimage/tag-type.pbm b/etc/images/ezimage/tag-type.pbm
new file mode 100644
index 0000000..0eb893c
Binary files /dev/null and b/etc/images/ezimage/tag-type.pbm differ
diff --git a/etc/images/ezimage/tag-v.pbm b/etc/images/ezimage/tag-v.pbm
new file mode 100644
index 0000000..b7fea05
Binary files /dev/null and b/etc/images/ezimage/tag-v.pbm differ
diff --git a/etc/images/ezimage/tag.pbm b/etc/images/ezimage/tag.pbm
new file mode 100644
index 0000000..3f0ff20
Binary files /dev/null and b/etc/images/ezimage/tag.pbm differ
diff --git a/etc/images/ezimage/unlock.pbm b/etc/images/ezimage/unlock.pbm
new file mode 100644
index 0000000..24c3869
--- /dev/null
+++ b/etc/images/ezimage/unlock.pbm
@@ -0,0 +1,3 @@
+P4
+16 16
+���������������������������
\ No newline at end of file
diff --git a/etc/images/gnus/important.pbm b/etc/images/gnus/important.pbm
new file mode 100644
index 0000000..7139ff2
Binary files /dev/null and b/etc/images/gnus/important.pbm differ
diff --git a/etc/images/gnus/mail-send.pbm b/etc/images/gnus/mail-send.pbm
new file mode 100644
index 0000000..cfff708
--- /dev/null
+++ b/etc/images/gnus/mail-send.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
address@hidden
\ No newline at end of file
diff --git a/etc/images/gnus/receipt.pbm b/etc/images/gnus/receipt.pbm
new file mode 100644
index 0000000..5595239
--- /dev/null
+++ b/etc/images/gnus/receipt.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+����������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/gnus/toggle-subscription.pbm 
b/etc/images/gnus/toggle-subscription.pbm
new file mode 100644
index 0000000..b990dcc
Binary files /dev/null and b/etc/images/gnus/toggle-subscription.pbm differ
diff --git a/etc/images/gnus/unimportant.pbm b/etc/images/gnus/unimportant.pbm
new file mode 100644
index 0000000..26a8721
Binary files /dev/null and b/etc/images/gnus/unimportant.pbm differ
diff --git a/etc/images/gud/all.pbm b/etc/images/gud/all.pbm
new file mode 100644
index 0000000..5258dce
Binary files /dev/null and b/etc/images/gud/all.pbm differ
diff --git a/etc/images/gud/rcont.pbm b/etc/images/gud/rcont.pbm
new file mode 100644
index 0000000..11e9a4c
--- /dev/null
+++ b/etc/images/gud/rcont.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/gud/recstart.pbm b/etc/images/gud/recstart.pbm
new file mode 100644
index 0000000..11e9a4c
--- /dev/null
+++ b/etc/images/gud/recstart.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/gud/recstop.pbm b/etc/images/gud/recstop.pbm
new file mode 100644
index 0000000..11e9a4c
--- /dev/null
+++ b/etc/images/gud/recstop.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/gud/rfinish.pbm b/etc/images/gud/rfinish.pbm
new file mode 100644
index 0000000..11e9a4c
--- /dev/null
+++ b/etc/images/gud/rfinish.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/gud/rnext.pbm b/etc/images/gud/rnext.pbm
new file mode 100644
index 0000000..11e9a4c
--- /dev/null
+++ b/etc/images/gud/rnext.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/gud/rnexti.pbm b/etc/images/gud/rnexti.pbm
new file mode 100644
index 0000000..11e9a4c
--- /dev/null
+++ b/etc/images/gud/rnexti.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/gud/rstep.pbm b/etc/images/gud/rstep.pbm
new file mode 100644
index 0000000..11e9a4c
--- /dev/null
+++ b/etc/images/gud/rstep.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/gud/rstepi.pbm b/etc/images/gud/rstepi.pbm
new file mode 100644
index 0000000..11e9a4c
--- /dev/null
+++ b/etc/images/gud/rstepi.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/gud/thread.pbm b/etc/images/gud/thread.pbm
new file mode 100644
index 0000000..d46f16d
Binary files /dev/null and b/etc/images/gud/thread.pbm differ
diff --git a/etc/images/lock-broken.pbm b/etc/images/lock-broken.pbm
new file mode 100644
index 0000000..09bff51
--- /dev/null
+++ b/etc/images/lock-broken.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+����������~��?�������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/lock-ok.pbm b/etc/images/lock-ok.pbm
new file mode 100644
index 0000000..40d06d2
Binary files /dev/null and b/etc/images/lock-ok.pbm differ
diff --git a/etc/images/lock.pbm b/etc/images/lock.pbm
new file mode 100644
index 0000000..bb6f228
Binary files /dev/null and b/etc/images/lock.pbm differ
diff --git a/etc/images/mail/copy.pbm b/etc/images/mail/copy.pbm
new file mode 100644
index 0000000..1d472cf
Binary files /dev/null and b/etc/images/mail/copy.pbm differ
diff --git a/etc/images/mail/forward.pbm b/etc/images/mail/forward.pbm
new file mode 100644
index 0000000..409ff67
Binary files /dev/null and b/etc/images/mail/forward.pbm differ
diff --git a/etc/images/mail/not-spam.pbm b/etc/images/mail/not-spam.pbm
new file mode 100644
index 0000000..d6f4a0f
Binary files /dev/null and b/etc/images/mail/not-spam.pbm differ
diff --git a/etc/images/mail/outbox.pbm b/etc/images/mail/outbox.pbm
new file mode 100644
index 0000000..7f679df
--- /dev/null
+++ b/etc/images/mail/outbox.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+�����������������?��������������������������������������?���������������
\ No newline at end of file
diff --git a/etc/images/mail/preview.pbm b/etc/images/mail/preview.pbm
new file mode 100644
index 0000000..018b0b6
Binary files /dev/null and b/etc/images/mail/preview.pbm differ
diff --git a/etc/images/mail/save-draft.pbm b/etc/images/mail/save-draft.pbm
new file mode 100644
index 0000000..51471c2
Binary files /dev/null and b/etc/images/mail/save-draft.pbm differ
diff --git a/etc/images/mh-logo.pbm b/etc/images/mh-logo.pbm
new file mode 100644
index 0000000..13a8d48
--- /dev/null
+++ b/etc/images/mh-logo.pbm
@@ -0,0 +1,3 @@
+P4
+18 13
+���������������������������������������
\ No newline at end of file
diff --git a/etc/images/mpc/add.pbm b/etc/images/mpc/add.pbm
new file mode 100644
index 0000000..3745891
Binary files /dev/null and b/etc/images/mpc/add.pbm differ
diff --git a/etc/images/mpc/ffwd.pbm b/etc/images/mpc/ffwd.pbm
new file mode 100644
index 0000000..ca8fabd
Binary files /dev/null and b/etc/images/mpc/ffwd.pbm differ
diff --git a/etc/images/mpc/next.pbm b/etc/images/mpc/next.pbm
new file mode 100644
index 0000000..41bcf4b
Binary files /dev/null and b/etc/images/mpc/next.pbm differ
diff --git a/etc/images/mpc/pause.pbm b/etc/images/mpc/pause.pbm
new file mode 100644
index 0000000..7d09d16
Binary files /dev/null and b/etc/images/mpc/pause.pbm differ
diff --git a/etc/images/mpc/play.pbm b/etc/images/mpc/play.pbm
new file mode 100644
index 0000000..a961bb5
Binary files /dev/null and b/etc/images/mpc/play.pbm differ
diff --git a/etc/images/mpc/prev.pbm b/etc/images/mpc/prev.pbm
new file mode 100644
index 0000000..392cb31
Binary files /dev/null and b/etc/images/mpc/prev.pbm differ
diff --git a/etc/images/mpc/rewind.pbm b/etc/images/mpc/rewind.pbm
new file mode 100644
index 0000000..b078f5c
Binary files /dev/null and b/etc/images/mpc/rewind.pbm differ
diff --git a/etc/images/mpc/stop.pbm b/etc/images/mpc/stop.pbm
new file mode 100644
index 0000000..470963a
Binary files /dev/null and b/etc/images/mpc/stop.pbm differ
diff --git a/etc/images/redo.pbm b/etc/images/redo.pbm
new file mode 100644
index 0000000..7203908
Binary files /dev/null and b/etc/images/redo.pbm differ
diff --git a/etc/images/separator.pbm b/etc/images/separator.pbm
new file mode 100644
index 0000000..3b471db
--- /dev/null
+++ b/etc/images/separator.pbm
@@ -0,0 +1,3 @@
+P4
+2 24
+������������������������
\ No newline at end of file
diff --git a/etc/images/smilies/braindamaged.pbm 
b/etc/images/smilies/braindamaged.pbm
new file mode 100644
index 0000000..f6696b9
--- /dev/null
+++ b/etc/images/smilies/braindamaged.pbm
@@ -0,0 +1,3 @@
+P4
+13 14
+���x���ȝH�Ƞ(�(�H����x��
\ No newline at end of file
diff --git a/etc/images/smilies/cry.pbm b/etc/images/smilies/cry.pbm
new file mode 100644
index 0000000..ff74c96
--- /dev/null
+++ b/etc/images/smilies/cry.pbm
@@ -0,0 +1,3 @@
+P4
+13 14
+���x���ȀH�����h���H��x��
\ No newline at end of file
diff --git a/etc/images/smilies/dead.pbm b/etc/images/smilies/dead.pbm
new file mode 100644
index 0000000..e445b9c
--- /dev/null
+++ b/etc/images/smilies/dead.pbm
@@ -0,0 +1,3 @@
+P4
+13 14
+���x���H���H���(����x��
\ No newline at end of file
diff --git a/etc/images/smilies/evil.pbm b/etc/images/smilies/evil.pbm
new file mode 100644
index 0000000..f863618
--- /dev/null
+++ b/etc/images/smilies/evil.pbm
@@ -0,0 +1,3 @@
+P4
+13 14
+���x��H�ȝȀ�(�H�����x��
\ No newline at end of file
diff --git a/etc/images/smilies/forced.pbm b/etc/images/smilies/forced.pbm
new file mode 100644
index 0000000..4e807ed
--- /dev/null
+++ b/etc/images/smilies/forced.pbm
@@ -0,0 +1,3 @@
+P4
+13 14
+���x���ȘȀ��(�(���x��
\ No newline at end of file
diff --git a/etc/images/smilies/grin.pbm b/etc/images/smilies/grin.pbm
new file mode 100644
index 0000000..3b770f6
--- /dev/null
+++ b/etc/images/smilies/grin.pbm
@@ -0,0 +1,3 @@
+P4
+13 14
+���x���ȘȀ��(�H����x��
\ No newline at end of file
diff --git a/etc/images/smilies/indifferent.pbm 
b/etc/images/smilies/indifferent.pbm
new file mode 100644
index 0000000..67e6958
--- /dev/null
+++ b/etc/images/smilies/indifferent.pbm
@@ -0,0 +1,3 @@
+P4
+13 14
+���x���ȘȀ���Ȁ��x��
\ No newline at end of file
diff --git a/etc/images/sort-ascending.pbm b/etc/images/sort-ascending.pbm
new file mode 100644
index 0000000..b9f2347
--- /dev/null
+++ b/etc/images/sort-ascending.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/sort-column-ascending.pbm 
b/etc/images/sort-column-ascending.pbm
new file mode 100644
index 0000000..11e9a4c
--- /dev/null
+++ b/etc/images/sort-column-ascending.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/sort-criteria.pbm b/etc/images/sort-criteria.pbm
new file mode 100644
index 0000000..01f239e
--- /dev/null
+++ b/etc/images/sort-criteria.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+����������������������?����/��w����������������������������������������
\ No newline at end of file
diff --git a/etc/images/sort-descending.pbm b/etc/images/sort-descending.pbm
new file mode 100644
index 0000000..3c1662b
--- /dev/null
+++ b/etc/images/sort-descending.pbm
@@ -0,0 +1,3 @@
+P4
+24 24
+������������������������������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/sort-row-ascending.pbm 
b/etc/images/sort-row-ascending.pbm
new file mode 100644
index 0000000..2f91a58
--- /dev/null
+++ b/etc/images/sort-row-ascending.pbm
@@ -0,0 +1,3 @@
+P4
+21 17
+���������������������������������������������������
\ No newline at end of file
diff --git a/etc/images/unchecked.pbm b/etc/images/unchecked.pbm
new file mode 100644
index 0000000..44445c3
--- /dev/null
+++ b/etc/images/unchecked.pbm
@@ -0,0 +1,3 @@
+P4
+12 12
+����������������������
\ No newline at end of file
diff --git a/etc/images/zoom-in.pbm b/etc/images/zoom-in.pbm
new file mode 100644
index 0000000..31d502f
Binary files /dev/null and b/etc/images/zoom-in.pbm differ
diff --git a/etc/publicsuffix.txt b/etc/publicsuffix.txt
index 5c0baaf..98929de 100644
--- a/etc/publicsuffix.txt
+++ b/etc/publicsuffix.txt
@@ -713,7 +713,19 @@ cx
 gov.cx
 
 // cy : http://en.wikipedia.org/wiki/.cy
-*.cy
+ac.cy
+biz.cy
+com.cy
+ekloges.cy
+gov.cy
+ltd.cy
+name.cy
+net.cy
+org.cy
+parliament.cy
+press.cy
+pro.cy
+tm.cy
 
 // cz : http://en.wikipedia.org/wiki/.cz
 cz
@@ -826,6 +838,7 @@ edu.et
 biz.et
 name.et
 info.et
+net.et
 
 // eu : http://en.wikipedia.org/wiki/.eu
 eu
@@ -932,6 +945,11 @@ org.gi
 // gl : http://en.wikipedia.org/wiki/.gl
 // http://nic.gl
 gl
+co.gl
+com.gl
+edu.gl
+net.gl
+org.gl
 
 // gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm
 gm
@@ -1130,7 +1148,7 @@ tt.im
 tv.im
 
 // in : http://en.wikipedia.org/wiki/.in
-// see also: http://www.inregistry.in/policies/
+// see also: https://registry.in/Policies
 // Please note, that nic.in is not an offical eTLD, but used by most
 // government institutions.
 in
@@ -3571,6 +3589,7 @@ ltd.lk
 assn.lk
 grp.lk
 hotel.lk
+ac.lk
 
 // lr : http://psg.com/dns/lr/lr.txt
 // Submitted by registry <address@hidden> 2008-06-17
@@ -3647,7 +3666,7 @@ gov.me
 its.me
 priv.me
 
-// mg : http://www.nic.mg/tarif.htm
+// mg : http://nic.mg/nicmg/?page_id=39
 mg
 org.mg
 nom.mg
@@ -3657,6 +3676,7 @@ tm.mg
 edu.mg
 mil.mg
 com.mg
+co.mg
 
 // mh : http://en.wikipedia.org/wiki/.mh
 mh
@@ -4412,9 +4432,9 @@ mobi.ng
 // ni : http://www.nic.ni/dominios.htm
 *.ni
 
-// nl : http://www.domain-registry.nl/ace.php/c,728,122,,,,Home.html
-// Confirmed by registry <address@hidden> (with technical
-// reservations) 2008-06-08
+// nl : http://en.wikipedia.org/wiki/.nl
+//      https://www.sidn.nl/
+//      ccTLD for the Netherlands
 nl
 
 // BV.nl will be a registry for dutch BV's (besloten vennootschap)
@@ -5304,14 +5324,11 @@ gos.pk
 info.pk
 
 // pl http://www.dns.pl/english/index.html
-// confirmed on 26.09.2014 from Bogna Tchórzewska <address@hidden>
+// updated by .PL registry on 2015-04-28
 pl
 com.pl
 net.pl
 org.pl
-info.pl
-waw.pl
-gov.pl
 // pl functional domains (http://www.dns.pl/english/index.html)
 aid.pl
 agro.pl
@@ -5321,6 +5338,7 @@ biz.pl
 edu.pl
 gmina.pl
 gsm.pl
+info.pl
 mail.pl
 miasta.pl
 media.pl
@@ -5342,16 +5360,55 @@ tm.pl
 tourism.pl
 travel.pl
 turystyka.pl
-// Government domains (administred by ippt.gov.pl)
-uw.gov.pl
-um.gov.pl
+// Government domains
+gov.pl
+ap.gov.pl
+ic.gov.pl
+is.gov.pl
+us.gov.pl
+kmpsp.gov.pl
+kppsp.gov.pl
+kwpsp.gov.pl
+psp.gov.pl
+wskr.gov.pl
+kwp.gov.pl
+mw.gov.pl
 ug.gov.pl
+um.gov.pl
+umig.gov.pl
+ugim.gov.pl
 upow.gov.pl
+uw.gov.pl
 starostwo.gov.pl
+pa.gov.pl
+po.gov.pl
+psse.gov.pl
+pup.gov.pl
+rzgw.gov.pl
+sa.gov.pl
 so.gov.pl
 sr.gov.pl
-po.gov.pl
-pa.gov.pl
+wsa.gov.pl
+sko.gov.pl
+uzs.gov.pl
+wiih.gov.pl
+winb.gov.pl
+pinb.gov.pl
+wios.gov.pl
+witd.gov.pl
+wzmiuw.gov.pl
+piw.gov.pl
+wiw.gov.pl
+griw.gov.pl
+wif.gov.pl
+oum.gov.pl
+sdn.gov.pl
+zp.gov.pl
+uppo.gov.pl
+mup.gov.pl
+wuoz.gov.pl
+konsulat.gov.pl
+oirm.gov.pl
 // pl regional domains (http://www.dns.pl/english/index.html)
 augustow.pl
 babia-gora.pl
@@ -5459,6 +5516,7 @@ ustka.pl
 walbrzych.pl
 warmia.pl
 warszawa.pl
+waw.pl
 wegrow.pl
 wielun.pl
 wlocl.pl
@@ -5906,6 +5964,38 @@ store.st
 
 // su : http://en.wikipedia.org/wiki/.su
 su
+adygeya.su
+arkhangelsk.su
+balashov.su
+bashkiria.su
+bryansk.su
+dagestan.su
+grozny.su
+ivanovo.su
+kalmykia.su
+kaluga.su
+karelia.su
+khakassia.su
+krasnodar.su
+kurgan.su
+lenug.su
+mordovia.su
+msk.su
+murmansk.su
+nalchik.su
+nov.su
+obninsk.su
+penza.su
+pokrovsk.su
+sochi.su
+spb.su
+togliatti.su
+troitsk.su
+tula.su
+tuva.su
+vladikavkaz.su
+vladimir.su
+vologda.su
 
 // sv : http://www.svnet.org.sv/niveldos.pdf
 sv
@@ -6213,10 +6303,6 @@ zhytomyr.ua
 zp.ua
 zt.ua
 
-// Private registries in .ua
-co.ua
-pp.ua
-
 // ug : https://www.registry.co.ug/
 ug
 co.ug
@@ -6589,114 +6675,147 @@ edu.ws
 yt
 
 // IDN ccTLDs
-// Please sort by ISO 3166 ccTLD, then punicode string
-// when submitting patches and follow this format:
-// <Punicode> ("<english word>" <language>) : <ISO 3166 ccTLD>
-// [optional sponsoring org]
-// <URL>
+// When submitting patches, please maintain a sort by ISO 3166 ccTLD, then
+// U-label, and follow this format:
+// // A-Label ("<Latin renderings>", <language name>[, variant info]) : <ISO 
3166 ccTLD>
+// // [sponsoring org]
+// U-Label
 
-// xn--mgbaam7a8h ("Emerat" Arabic) : AE
+// xn--mgbaam7a8h ("Emerat", Arabic) : AE
 // http://nic.ae/english/arabicdomain/rules.jsp
 امارات
 
-// xn--54b7fta0cc ("Bangla" Bangla) : BD
+// xn--y9a3aq ("hye", Armenian) : AM
+// ISOC AM (operated by .am Registry)
+հայ
+
+// xn--54b7fta0cc ("Bangla", Bangla) : BD
 বাংলা
 
-// xn--fiqs8s ("China" Chinese-Han-Simplified <.Zhongguo>) : CN
+// xn--90ais ("bel", Belarusian/Russian Cyrillic) : BY
+// Operated by .by registry
+бел
+
+// xn--fiqs8s ("Zhongguo/China", Chinese, Simplified) : CN
 // CNNIC
 // http://cnnic.cn/html/Dir/2005/10/11/3218.htm
 中国
 
-// xn--fiqz9s ("China" Chinese-Han-Traditional <.Zhongguo>) : CN
+// xn--fiqz9s ("Zhongguo/China", Chinese, Traditional) : CN
 // CNNIC
 // http://cnnic.cn/html/Dir/2005/10/11/3218.htm
 中國
 
-// xn--lgbbat1ad8j ("Algeria / Al Jazair" Arabic) : DZ
+// xn--lgbbat1ad8j ("Algeria/Al Jazair", Arabic) : DZ
 الجزائر
 
-// xn--wgbh1c ("Egypt" Arabic .masr) : EG
+// xn--wgbh1c ("Egypt/Masr", Arabic) : EG
 // http://www.dotmasr.eg/
 مصر
 
-// xn--node ("ge" Georgian (Mkhedruli)) : GE
+// xn--node ("ge", Georgian Mkhedruli) : GE
 გე
 
-// xn--j6w193g ("Hong Kong" Chinese-Han) : HK
+// xn--qxam ("el", Greek) : GR
+// Hellenic Ministry of Infrastructure, Transport, and Networks
+ελ
+
+// xn--j6w193g ("Hong Kong", Chinese) : HK
 // https://www2.hkirc.hk/register/rules.jsp
 香港
 
-// xn--h2brj9c ("Bharat" Devanagari) : IN
+// xn--h2brj9c ("Bharat", Devanagari) : IN
 // India
 भारत
 
-// xn--mgbbh1a71e ("Bharat" Arabic) : IN
+// xn--mgbbh1a71e ("Bharat", Arabic) : IN
 // India
 بھارت
 
-// xn--fpcrj9c3d ("Bharat" Telugu) : IN
+// xn--fpcrj9c3d ("Bharat", Telugu) : IN
 // India
 భారత్
 
-// xn--gecrj9c ("Bharat" Gujarati) : IN
+// xn--gecrj9c ("Bharat", Gujarati) : IN
 // India
 ભારત
 
-// xn--s9brj9c ("Bharat" Gurmukhi) : IN
+// xn--s9brj9c ("Bharat", Gurmukhi) : IN
 // India
 ਭਾਰਤ
 
-// xn--45brj9c ("Bharat" Bengali) : IN
+// xn--45brj9c ("Bharat", Bengali) : IN
 // India
 ভারত
 
-// xn--xkc2dl3a5ee0h ("India" Tamil) : IN
+// xn--xkc2dl3a5ee0h ("India", Tamil) : IN
 // India
 இந்தியா
 
-// xn--mgba3a4f16a ("Iran" Persian) : IR
+// xn--mgba3a4f16a ("Iran", Persian) : IR
 ایران
 
-// xn--mgba3a4fra ("Iran" Arabic) : IR
+// xn--mgba3a4fra ("Iran", Arabic) : IR
 ايران
 
-// xn--mgbayh7gpa ("al-Ordon" Arabic) : JO
+// xn--mgbtx2b ("Iraq", Arabic) : IQ
+// Communications and Media Commission
+عراق
+
+// xn--mgbayh7gpa ("al-Ordon", Arabic) : JO
 // National Information Technology Center (NITC)
 // Royal Scientific Society, Al-Jubeiha
 الاردن
 
-// xn--3e0b707e ("Republic of Korea" Hangul) : KR
+// xn--3e0b707e ("Republic of Korea", Hangul) : KR
 한국
 
-// xn--80ao21a ("Kaz" Kazakh) : KZ
+// xn--80ao21a ("Kaz", Kazakh) : KZ
 қаз
 
-// xn--fzc2c9e2c ("Lanka" Sinhalese-Sinhala) : LK
+// xn--fzc2c9e2c ("Lanka", Sinhalese-Sinhala) : LK
 // http://nic.lk
 ලංකා
 
-// xn--xkc2al3hye2a ("Ilangai" Tamil) : LK
+// xn--xkc2al3hye2a ("Ilangai", Tamil) : LK
 // http://nic.lk
 இலங்கை
 
-// xn--mgbc0a9azcg ("Morocco / al-Maghrib" Arabic) : MA
+// xn--mgbc0a9azcg ("Morocco/al-Maghrib", Arabic) : MA
 المغرب
 
-// xn--l1acc ("mon" Mongolian) : MN
+// xn--d1alf ("mkd", Macedonian) : MK
+// MARnet
+мкд
+
+// xn--l1acc ("mon", Mongolian) : MN
 мон
 
-// xn--mgbx4cd0ab ("Malaysia" Malay) : MY
+// xn--mix891f ("Macao", Chinese, Traditional) : MO
+// MONIC / HNET Asia (Registry Operator for .mo)
+澳門
+
+// xn--mix082f ("Macao", Chinese, Simplified) : MO
+澳门
+
+// xn--mgbx4cd0ab ("Malaysia", Malay) : MY
 مليسيا
 
-// xn--mgb9awbf ("Oman" Arabic) : OM
+// xn--mgb9awbf ("Oman", Arabic) : OM
 عمان
 
-// xn--ygbi2ammx ("Falasteen" Arabic) : PS
+// xn--mgbai9azgqp6j ("Pakistan", Urdu/Arabic) : PK
+پاکستان
+
+// xn--mgbai9a5eva00b ("Pakistan", Urdu/Arabic, variant) : PK
+پاكستان
+
+// xn--ygbi2ammx ("Falasteen", Arabic) : PS
 // The Palestinian National Internet Naming Authority (PNINA)
 // http://www.pnina.ps
 فلسطين
 
-// xn--90a3ac ("srb" Cyrillic) : RS
+// xn--90a3ac ("srb", Cyrillic) : RS
 // http://www.rnids.rs/en/the-.срб-domain
 срб
 пр.срб
@@ -6706,62 +6825,66 @@ yt
 упр.срб
 ак.срб
 
-// xn--p1ai ("rf" Russian-Cyrillic) : RU
+// xn--p1ai ("rf", Russian-Cyrillic) : RU
 // http://www.cctld.ru/en/docs/rulesrf.php
 рф
 
-// xn--wgbl6a ("Qatar" Arabic) : QA
+// xn--wgbl6a ("Qatar", Arabic) : QA
 // http://www.ict.gov.qa/
 قطر
 
-// xn--mgberp4a5d4ar ("AlSaudiah" Arabic) : SA
+// xn--mgberp4a5d4ar ("AlSaudiah", Arabic) : SA
 // http://www.nic.net.sa/
 السعودية
 
-// xn--mgberp4a5d4a87g ("AlSaudiah" Arabic) variant : SA
+// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant)  : SA
 السعودیة
 
-// xn--mgbqly7c0a67fbc ("AlSaudiah" Arabic) variant : SA
+// xn--mgbqly7c0a67fbc ("AlSaudiah", Arabic, variant) : SA
 السعودیۃ
 
-// xn--mgbqly7cvafr ("AlSaudiah" Arabic) variant : SA
+// xn--mgbqly7cvafr ("AlSaudiah", Arabic, variant) : SA
 السعوديه
 
-// xn--ogbpf8fl ("Syria" Arabic) : SY
-سورية
-
-// xn--mgbtf8fl ("Syria" Arabic) variant : SY
-سوريا
+// xn--mgbpl2fh ("sudan", Arabic) : SD
+// Operated by .sd registry
+سودان
 
-// xn--yfro4i67o Singapore ("Singapore" Chinese-Han) : SG
+// xn--yfro4i67o Singapore ("Singapore", Chinese) : SG
 新加坡
 
-// xn--clchc0ea0b2g2a9gcd ("Singapore" Tamil) : SG
+// xn--clchc0ea0b2g2a9gcd ("Singapore", Tamil) : SG
 சிங்கப்பூர்
 
-// xn--o3cw4h ("Thai" Thai) : TH
+// xn--ogbpf8fl ("Syria", Arabic) : SY
+سورية
+
+// xn--mgbtf8fl ("Syria", Arabic, variant) : SY
+سوريا
+
+// xn--o3cw4h ("Thai", Thai) : TH
 // http://www.thnic.co.th
 ไทย
 
-// xn--pgbs0dh ("Tunis") : TN
+// xn--pgbs0dh ("Tunisia", Arabic) : TN
 // http://nic.tn
 تونس
 
-// xn--kpry57d ("Taiwan" Chinese-Han-Traditional) : TW
+// xn--kpry57d ("Taiwan", Chinese, Traditional) : TW
 // http://www.twnic.net/english/dn/dn_07a.htm
 台灣
 
-// xn--kprw13d ("Taiwan" Chinese-Han-Simplified) : TW
+// xn--kprw13d ("Taiwan", Chinese, Simplified) : TW
 // http://www.twnic.net/english/dn/dn_07a.htm
 台湾
 
-// xn--nnx388a ("Taiwan") variant : TW
+// xn--nnx388a ("Taiwan", Chinese, variant) : TW
 臺灣
 
-// xn--j1amh ("ukr" Cyrillic) : UA
+// xn--j1amh ("ukr", Cyrillic) : UA
 укр
 
-// xn--mgb2ddes ("AlYemen" Arabic) : YE
+// xn--mgb2ddes ("AlYemen", Arabic) : YE
 اليمن
 
 // xxx : http://icmregistry.com
@@ -6770,8 +6893,24 @@ xxx
 // ye : http://www.y.net.ye/services/domain_name.htm
 *.ye
 
-// za : http://www.zadna.org.za/slds.html
-*.za
+// za : http://www.zadna.org.za/content/page/domain-information
+ac.za
+agrica.za
+alt.za
+co.za
+edu.za
+gov.za
+grondar.za
+law.za
+mil.za
+net.za
+ngo.za
+nis.za
+nom.za
+org.za
+school.za
+tm.za
+web.za
 
 // zm : http://en.wikipedia.org/wiki/.zm
 *.zm
@@ -6780,7 +6919,16 @@ xxx
 *.zw
 
 
-// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 
2014-12-22T18:02:07Z
+// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 
2015-08-26T23:57:22Z
+
+// aaa : 2015-02-26 American Automobile Association, Inc.
+aaa
+
+// aarp : 2015-05-21 AARP
+aarp
+
+// abarth : 2015-07-30 Fiat Chrysler Automobiles N.V.
+abarth
 
 // abb : 2014-10-24 ABB Ltd
 abb
@@ -6788,9 +6936,21 @@ abb
 // abbott : 2014-07-24 Abbott Laboratories, Inc.
 abbott
 
+// abbvie : 2015-07-30 AbbVie Inc.
+abbvie
+
+// abc : 2015-07-30 Disney Enterprises, Inc.
+abc
+
+// able : 2015-06-25 Able Inc.
+able
+
 // abogado : 2014-04-24 Top Level Domain Holdings Limited
 abogado
 
+// abudhabi : 2015-07-30 Abu Dhabi Systems and Information Centre
+abudhabi
+
 // academy : 2013-11-07 Half Oaks, LLC
 academy
 
@@ -6803,42 +6963,105 @@ accountant
 // accountants : 2014-03-20 Knob Town, LLC
 accountants
 
+// aco : 2015-01-08 ACO Severin Ahlmann GmbH & Co. KG
+aco
+
 // active : 2014-05-01 The Active Network, Inc
 active
 
 // actor : 2013-12-12 United TLD Holdco Ltd.
 actor
 
+// adac : 2015-07-16 Allgemeiner Deutscher Automobil-Club e.V. (ADAC)
+adac
+
 // ads : 2014-12-04 Charleston Road Registry Inc.
 ads
 
 // adult : 2014-10-16 ICM Registry AD LLC
 adult
 
+// aeg : 2015-03-19 Aktiebolaget Electrolux
+aeg
+
+// aetna : 2015-05-21 Aetna Life Insurance Company
+aetna
+
+// afamilycompany : 2015-07-23 Johnson Shareholdings, Inc.
+afamilycompany
+
 // afl : 2014-10-02 Australian Football League
 afl
 
 // africa : 2014-03-24 ZA Central Registry NPC trading as Registry.Africa
 africa
 
+// africamagic : 2015-03-05 Electronic Media Network (Pty) Ltd
+africamagic
+
+// agakhan : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation)
+agakhan
+
 // agency : 2013-11-14 Steel Falls, LLC
 agency
 
 // aig : 2014-12-18 American International Group, Inc.
 aig
 
+// aigo : 2015-08-06 aigo Digital Technology Co,Ltd.
+aigo
+
+// airbus : 2015-07-30 Airbus S.A.S.
+airbus
+
 // airforce : 2014-03-06 United TLD Holdco Ltd.
 airforce
 
 // airtel : 2014-10-24 Bharti Airtel Limited
 airtel
 
+// akdn : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation)
+akdn
+
+// alfaromeo : 2015-07-31 Fiat Chrysler Automobiles N.V.
+alfaromeo
+
+// alibaba : 2015-01-15 Alibaba Group Holding Limited
+alibaba
+
+// alipay : 2015-01-15 Alibaba Group Holding Limited
+alipay
+
 // allfinanz : 2014-07-03 Allfinanz Deutsche Vermögensberatung 
Aktiengesellschaft
 allfinanz
 
+// allstate : 2015-07-31 Allstate Fire and Casualty Insurance Company
+allstate
+
+// ally : 2015-06-18 Ally Financial Inc.
+ally
+
 // alsace : 2014-07-02 REGION D ALSACE
 alsace
 
+// alstom : 2015-07-30 ALSTOM
+alstom
+
+// americanexpress : 2015-07-31 American Express Travel Related Services 
Company, Inc.
+americanexpress
+
+// americanfamily : 2015-07-23 AmFam, Inc.
+americanfamily
+
+// amex : 2015-07-31 American Express Travel Related Services Company, Inc.
+amex
+
+// amfam : 2015-07-23 AmFam, Inc.
+amfam
+
+// amica : 2015-05-28 Amica Mutual Insurance Company
+amica
+
 // amsterdam : 2014-07-24 Gemeente Amsterdam
 amsterdam
 
@@ -6848,9 +7071,21 @@ analytics
 // android : 2014-08-07 Charleston Road Registry Inc.
 android
 
+// anquan : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD.
+anquan
+
+// anz : 2015-07-31 Australia and New Zealand Banking Group Limited
+anz
+
 // apartments : 2014-12-11 June Maple, LLC
 apartments
 
+// app : 2015-05-14 Charleston Road Registry Inc.
+app
+
+// apple : 2015-05-14 Apple Inc.
+apple
+
 // aquarelle : 2014-07-24 Aquarelle.com
 aquarelle
 
@@ -6866,33 +7101,66 @@ army
 // arte : 2014-12-11 Association Relative à la Télévision Européenne G.E.I.E.
 arte
 
+// asda : 2015-07-31 Wal-Mart Stores, Inc.
+asda
+
 // associates : 2014-03-06 Baxter Hill, LLC
 associates
 
+// athleta : 2015-07-30 The Gap, Inc.
+athleta
+
 // attorney : 2014-03-20
 attorney
 
 // auction : 2014-03-20
 auction
 
+// audi : 2015-05-21 AUDI Aktiengesellschaft
+audi
+
+// audible : 2015-06-25 Amazon EU S.à r.l.
+audible
+
 // audio : 2014-03-20 Uniregistry, Corp.
 audio
 
+// auspost : 2015-08-13 Australian Postal Corporation
+auspost
+
 // author : 2014-12-18 Amazon EU S.à r.l.
 author
 
-// auto : 2014-11-13 Uniregistry, Corp.
+// auto : 2014-11-13
 auto
 
 // autos : 2014-01-09 DERAutos, LLC
 autos
 
+// avianca : 2015-01-08 Aerovias del Continente Americano S.A. Avianca
+avianca
+
+// aws : 2015-06-25 Amazon EU S.à r.l.
+aws
+
 // axa : 2013-12-19 AXA SA
 axa
 
 // azure : 2014-12-18 Microsoft Corporation
 azure
 
+// baby : 2015-04-09 Johnson & Johnson Services, Inc.
+baby
+
+// baidu : 2015-01-08 Baidu, Inc.
+baidu
+
+// banamex : 2015-07-30 Citigroup Inc.
+banamex
+
+// bananarepublic : 2015-07-31 The Gap, Inc.
+bananarepublic
+
 // band : 2014-06-12
 band
 
@@ -6911,9 +7179,15 @@ barclaycard
 // barclays : 2014-11-20 Barclays Bank PLC
 barclays
 
+// barefoot : 2015-06-11 Gallo Vineyards, Inc.
+barefoot
+
 // bargains : 2013-11-14 Half Hallow, LLC
 bargains
 
+// basketball : 2015-08-20 Fédération Internationale de Basketball (FIBA)
+basketball
+
 // bauhaus : 2014-04-17 Werkhaus GmbH
 bauhaus
 
@@ -6923,12 +7197,21 @@ bayern
 // bbc : 2014-12-18 British Broadcasting Corporation
 bbc
 
+// bbt : 2015-07-23 BB&T Corporation
+bbt
+
 // bbva : 2014-10-02 BANCO BILBAO VIZCAYA ARGENTARIA, S.A.
 bbva
 
+// bcg : 2015-04-02 The Boston Consulting Group, Inc.
+bcg
+
 // bcn : 2014-07-24 Municipi de Barcelona
 bcn
 
+// beats : 2015-05-14 Beats Electronics, LLC
+beats
+
 // beer : 2014-01-09 Top Level Domain Holdings Limited
 beer
 
@@ -6941,6 +7224,12 @@ berlin
 // best : 2013-12-19 BestTLD Pty Ltd
 best
 
+// bestbuy : 2015-07-31 BBY Solutions, Inc.
+bestbuy
+
+// bet : 2015-05-07 Afilias plc
+bet
+
 // bharti : 2014-01-09 Bharti Enterprises (Holding) Private Limited
 bharti
 
@@ -6968,6 +7257,15 @@ black
 // blackfriday : 2014-01-16 Uniregistry, Corp.
 blackfriday
 
+// blanco : 2015-07-16 BLANCO GmbH + Co KG
+blanco
+
+// blockbuster : 2015-07-30 Dish DBS Corporation
+blockbuster
+
+// blog : 2015-05-14 PRIMER NIVEL S.A.
+blog
+
 // bloomberg : 2014-07-17 Bloomberg IP Holdings LLC
 bloomberg
 
@@ -6989,6 +7287,12 @@ bnpparibas
 // boats : 2014-12-04 DERBoats, LLC
 boats
 
+// boehringer : 2015-07-09 Boehringer Ingelheim International GmbH
+boehringer
+
+// bofa : 2015-07-31 NMS Services, Inc.
+bofa
+
 // bom : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br
 bom
 
@@ -6998,6 +7302,18 @@ bond
 // boo : 2014-01-30 Charleston Road Registry Inc.
 boo
 
+// booking : 2015-07-16 Booking.com B.V.
+booking
+
+// boots : 2015-01-08 THE BOOTS COMPANY PLC
+boots
+
+// bosch : 2015-06-18 Robert Bosch GMBH
+bosch
+
+// bostik : 2015-05-28 Bostik SA
+bostik
+
 // bot : 2014-12-18 Amazon EU S.à r.l.
 bot
 
@@ -7010,15 +7326,24 @@ bradesco
 // bridgestone : 2014-12-18 Bridgestone Corporation
 bridgestone
 
+// broadway : 2014-12-22 Celebrate Broadway, Inc.
+broadway
+
 // broker : 2014-12-11 IG Group Holdings PLC
 broker
 
+// brother : 2015-01-29 Brother Industries, Ltd.
+brother
+
 // brussels : 2014-02-06 DNS.be vzw
 brussels
 
 // budapest : 2013-11-21 Top Level Domain Holdings Limited
 budapest
 
+// bugatti : 2015-07-23 Bugatti International SA
+bugatti
+
 // build : 2013-11-07 Plan Bee LLC
 build
 
@@ -7040,12 +7365,18 @@ bzh
 // cab : 2013-10-24 Half Sunset, LLC
 cab
 
+// cafe : 2015-02-11 Pioneer Canyon, LLC
+cafe
+
 // cal : 2014-07-24 Charleston Road Registry Inc.
 cal
 
 // call : 2014-12-18 Amazon EU S.à r.l.
 call
 
+// calvinklein : 2015-07-30 PVH gTLD Holdings LLC
+calvinklein
+
 // camera : 2013-08-27 Atomic Maple, LLC
 camera
 
@@ -7064,6 +7395,12 @@ capetown
 // capital : 2014-03-06 Delta Mill, LLC
 capital
 
+// capitalone : 2015-08-06 Capital One Financial Corporation
+capitalone
+
+// car : 2015-01-22
+car
+
 // caravan : 2013-12-12 Caravan International, Inc.
 caravan
 
@@ -7079,7 +7416,7 @@ career
 // careers : 2013-10-02 Wild Corner, LLC
 careers
 
-// cars : 2014-11-13 Uniregistry, Corp.
+// cars : 2014-11-13
 cars
 
 // cartier : 2014-06-23 Richemont DNS Inc.
@@ -7103,13 +7440,22 @@ cba
 // cbn : 2014-08-22 The Christian Broadcasting Network, Inc.
 cbn
 
+// cbre : 2015-07-02 CBRE, Inc.
+cbre
+
+// cbs : 2015-08-06 CBS Domains Inc.
+cbs
+
+// ceb : 2015-04-09 The Corporate Executive Board Company
+ceb
+
 // center : 2013-11-07 Tin Mill, LLC
 center
 
 // ceo : 2013-11-07 CEOTLD Pty Ltd
 ceo
 
-// cern : 2014-06-05 European Organization for Nuclear Research (\
+// cern : 2014-06-05 European Organization for Nuclear Research ("CERN")
 cern
 
 // cfa : 2014-08-28 CFA Institute
@@ -7118,15 +7464,24 @@ cfa
 // cfd : 2014-12-11 IG Group Holdings PLC
 cfd
 
+// chanel : 2015-04-09 Chanel International B.V.
+chanel
+
 // channel : 2014-05-08 Charleston Road Registry Inc.
 channel
 
+// chase : 2015-04-30 JPMorgan Chase & Co.
+chase
+
 // chat : 2014-12-04 Sand Fields, LLC
 chat
 
 // cheap : 2013-11-14 Sand Cover, LLC
 cheap
 
+// chintai : 2015-06-11 CHINTAI Corporation
+chintai
+
 // chloe : 2014-10-16 Richemont DNS Inc.
 chloe
 
@@ -7136,12 +7491,27 @@ christmas
 // chrome : 2014-07-24 Charleston Road Registry Inc.
 chrome
 
-// church : 2014-02-06 Holly Fileds, LLC
+// chrysler : 2015-07-30 FCA US LLC.
+chrysler
+
+// church : 2014-02-06 Holly Fields, LLC
 church
 
+// cipriani : 2015-02-19 Hotel Cipriani Srl
+cipriani
+
 // circle : 2014-12-18 Amazon EU S.à r.l.
 circle
 
+// cisco : 2014-12-22 Cisco Technology, Inc.
+cisco
+
+// citadel : 2015-07-23 Citadel Domain LLC
+citadel
+
+// citi : 2015-07-30 Citigroup Inc.
+citi
+
 // citic : 2014-01-09 CITIC Group Corporation
 citic
 
@@ -7166,9 +7536,15 @@ clinic
 // clothing : 2013-08-27 Steel Lake, LLC
 clothing
 
+// cloud : 2015-04-16 ARUBA S.p.A.
+cloud
+
 // club : 2013-11-08 .CLUB DOMAINS, LLC
 club
 
+// clubmed : 2015-06-25 Club Méditerranée S.A.
+clubmed
+
 // coach : 2014-10-09 Koko Island, LLC
 coach
 
@@ -7184,6 +7560,9 @@ college
 // cologne : 2014-02-05 NetCologne Gesellschaft für Telekommunikation mbH
 cologne
 
+// comcast : 2015-07-23 Comcast IP Holdings I, LLC
+comcast
+
 // commbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA
 commbank
 
@@ -7196,6 +7575,9 @@ company
 // computer : 2013-10-24 Pine Mill, LLC
 computer
 
+// comsec : 2015-01-08 VeriSign, Inc.
+comsec
+
 // condos : 2013-12-05 Pine House, LLC
 condos
 
@@ -7205,12 +7587,18 @@ construction
 // consulting : 2013-12-05
 consulting
 
+// contact : 2015-01-08 Top Level Spectrum, Inc.
+contact
+
 // contractors : 2013-09-10 Magic Woods, LLC
 contractors
 
 // cooking : 2013-11-21 Top Level Domain Holdings Limited
 cooking
 
+// cookingchannel : 2015-07-02 Lifestyle Domain Holdings, Inc.
+cookingchannel
+
 // cool : 2013-11-14 Koko Lake, LLC
 cool
 
@@ -7220,6 +7608,12 @@ corsica
 // country : 2013-12-19 Top Level Domain Holdings Limited
 country
 
+// coupon : 2015-02-26 Amazon EU S.à r.l.
+coupon
+
+// coupons : 2015-03-26 Black Island, LLC
+coupons
+
 // courses : 2014-12-04 OPEN UNIVERSITIES AUSTRALIA PTY LTD
 courses
 
@@ -7229,6 +7623,9 @@ credit
 // creditcard : 2014-03-20 Binky Frostbite, LLC
 creditcard
 
+// creditunion : 2015-01-22 CUNA Performance Resources, LLC
+creditunion
+
 // cricket : 2014-10-09 dot Cricket Limited
 cricket
 
@@ -7250,6 +7647,9 @@ cuisinella
 // cymru : 2014-05-08 Nominet UK
 cymru
 
+// cyou : 2015-01-22 Beijing Gamease Age Digital Technology Co., Ltd.
+cyou
+
 // dabur : 2014-02-06 Dabur India Limited
 dabur
 
@@ -7274,6 +7674,15 @@ day
 // dclk : 2014-11-20 Charleston Road Registry Inc.
 dclk
 
+// dds : 2015-05-07 Top Level Domain Holdings Limited
+dds
+
+// deal : 2015-06-25 Amazon EU S.à r.l.
+deal
+
+// dealer : 2014-12-22 Dealer Dot Com, Inc.
+dealer
+
 // deals : 2014-05-22 Sand Sunset, LLC
 deals
 
@@ -7286,6 +7695,12 @@ delivery
 // dell : 2014-10-24 Dell Inc.
 dell
 
+// deloitte : 2015-07-31 Deloitte Touche Tohmatsu
+deloitte
+
+// delta : 2015-02-19 Delta Air Lines, Inc.
+delta
+
 // democrat : 2013-10-24 United TLD Holdco Ltd.
 democrat
 
@@ -7304,6 +7719,9 @@ design
 // dev : 2014-10-16 Charleston Road Registry Inc.
 dev
 
+// dhl : 2015-07-23 Deutsche Post AG
+dhl
+
 // diamonds : 2013-09-22 John Edge, LLC
 diamonds
 
@@ -7322,12 +7740,21 @@ directory
 // discount : 2014-03-06 Holly Hill, LLC
 discount
 
+// discover : 2015-07-23 Discover Financial Services
+discover
+
+// dish : 2015-07-30 Dish DBS Corporation
+dish
+
 // dnp : 2013-12-13 Dai Nippon Printing Co., Ltd.
 dnp
 
 // docs : 2014-10-16 Charleston Road Registry Inc.
 docs
 
+// dodge : 2015-07-30 FCA US LLC.
+dodge
+
 // dog : 2014-12-04 Koko Mill, LLC
 dog
 
@@ -7340,15 +7767,45 @@ domains
 // doosan : 2014-04-03 Doosan Corporation
 doosan
 
+// dot : 2015-05-21 Dish DBS Corporation
+dot
+
 // download : 2014-11-20 dot Support Limited
 download
 
+// drive : 2015-03-05 Charleston Road Registry Inc.
+drive
+
+// dstv : 2015-03-12 MultiChoice (Proprietary) Limited
+dstv
+
+// dtv : 2015-06-04 Dish DBS Corporation
+dtv
+
+// dubai : 2015-01-01 Dubai Smart Government Department
+dubai
+
+// duck : 2015-07-23 Johnson Shareholdings, Inc.
+duck
+
+// dunlop : 2015-07-02 The Goodyear Tire & Rubber Company
+dunlop
+
+// duns : 2015-08-06 The Dun & Bradstreet Corporation
+duns
+
+// dupont : 2015-06-25 E.I. du Pont de Nemours and Company
+dupont
+
 // durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
 durban
 
 // dvag : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG
 dvag
 
+// dwg : 2015-07-23 Autodesk, Inc.
+dwg
+
 // earth : 2014-12-04 Interlink Co., Ltd.
 earth
 
@@ -7367,6 +7824,9 @@ email
 // emerck : 2014-04-03 Merck KGaA
 emerck
 
+// emerson : 2015-07-23 Emerson Electric Co.
+emerson
+
 // energy : 2014-09-11 Binky Birch, LLC
 energy
 
@@ -7379,12 +7839,18 @@ engineering
 // enterprises : 2013-09-20 Snow Oaks, LLC
 enterprises
 
+// epost : 2015-07-23 Deutsche Post AG
+epost
+
 // epson : 2014-12-04 Seiko Epson Corporation
 epson
 
 // equipment : 2013-08-27 Corn Station, LLC
 equipment
 
+// ericsson : 2015-07-09 Telefonaktiebolaget L M Ericsson
+ericsson
+
 // erni : 2014-04-03 ERNI Group Holding AG
 erni
 
@@ -7394,6 +7860,9 @@ esq
 // estate : 2013-08-27 Trixy Park, LLC
 estate
 
+// esurance : 2015-07-23 Esurance Insurance Company
+esurance
+
 // eurovision : 2014-04-24 European Broadcasting Union (EBU)
 eurovision
 
@@ -7415,6 +7884,12 @@ expert
 // exposed : 2013-12-05 Victor Beach, LLC
 exposed
 
+// express : 2015-02-11 Sea Sunset, LLC
+express
+
+// extraspace : 2015-05-14 Extra Space Storage LLC
+extraspace
+
 // fage : 2014-12-18 Fage International S.A.
 fage
 
@@ -7427,6 +7902,9 @@ fairwinds
 // faith : 2014-11-20 dot Faith Limited
 faith
 
+// family : 2015-04-02
+family
+
 // fan : 2014-03-06
 fan
 
@@ -7436,18 +7914,39 @@ fans
 // farm : 2013-11-07 Just Maple, LLC
 farm
 
+// farmers : 2015-07-09 Farmers Insurance Exchange
+farmers
+
 // fashion : 2014-07-03 Top Level Domain Holdings Limited
 fashion
 
 // fast : 2014-12-18 Amazon EU S.à r.l.
 fast
 
+// fedex : 2015-08-06 Federal Express Corporation
+fedex
+
 // feedback : 2013-12-19 Top Level Spectrum, Inc.
 feedback
 
+// ferrari : 2015-07-31 Fiat Chrysler Automobiles N.V.
+ferrari
+
 // ferrero : 2014-12-18 Ferrero Trading Lux S.A.
 ferrero
 
+// fiat : 2015-07-31 Fiat Chrysler Automobiles N.V.
+fiat
+
+// fidelity : 2015-07-30 Fidelity Brokerage Services LLC
+fidelity
+
+// fido : 2015-08-06 Rogers Communications Partnership
+fido
+
+// film : 2015-01-08 Motion Picture Domain Registry Pty Ltd
+film
+
 // final : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br
 final
 
@@ -7457,6 +7956,9 @@ finance
 // financial : 2014-03-06 Just Cover, LLC
 financial
 
+// fire : 2015-06-25 Amazon EU S.à r.l.
+fire
+
 // firestone : 2014-12-18 Bridgestone Corporation
 firestone
 
@@ -7475,9 +7977,15 @@ fit
 // fitness : 2014-03-06 Brice Orchard, LLC
 fitness
 
+// flickr : 2015-04-02 Yahoo! Domain Services Inc.
+flickr
+
 // flights : 2013-12-05 Fox Station, LLC
 flights
 
+// flir : 2015-07-23 FLIR Systems, Inc.
+flir
+
 // florist : 2013-11-07 Half Cypress, LLC
 florist
 
@@ -7493,6 +8001,9 @@ fly
 // foo : 2014-01-23 Charleston Road Registry Inc.
 foo
 
+// foodnetwork : 2015-07-02 Lifestyle Domain Holdings, Inc.
+foodnetwork
+
 // football : 2014-12-18 Foggy Farms, LLC
 football
 
@@ -7505,15 +8016,36 @@ forex
 // forsale : 2014-05-22
 forsale
 
+// forum : 2015-04-02 Fegistry, LLC
+forum
+
 // foundation : 2013-12-05 John Dale, LLC
 foundation
 
+// fresenius : 2015-07-30 Fresenius Immobilien-Verwaltungs-GmbH
+fresenius
+
 // frl : 2014-05-15 FRLregistry B.V.
 frl
 
 // frogans : 2013-12-19 OP3FT
 frogans
 
+// frontdoor : 2015-07-02 Lifestyle Domain Holdings, Inc.
+frontdoor
+
+// frontier : 2015-02-05 Frontier Communications Corporation
+frontier
+
+// ftr : 2015-07-16 Frontier Communications Corporation
+ftr
+
+// fujitsu : 2015-07-30 Fujitsu Limited
+fujitsu
+
+// fujixerox : 2015-07-23 Xerox DNHC LLC
+fujixerox
+
 // fund : 2014-03-20 John Castle, LLC
 fund
 
@@ -7523,19 +8055,37 @@ furniture
 // futbol : 2013-09-20
 futbol
 
+// fyi : 2015-04-02 Silver Tigers, LLC
+fyi
+
 // gal : 2013-11-07 Asociación puntoGAL
 gal
 
 // gallery : 2013-09-13 Sugar House, LLC
 gallery
 
+// gallo : 2015-06-11 Gallo Vineyards, Inc.
+gallo
+
+// gallup : 2015-02-19 Gallup, Inc.
+gallup
+
+// game : 2015-05-28 Uniregistry, Corp.
+game
+
+// games : 2015-05-28 Foggy Beach, LLC
+games
+
+// gap : 2015-07-31 The Gap, Inc.
+gap
+
 // garden : 2014-06-26 Top Level Domain Holdings Limited
 garden
 
 // gbiz : 2014-07-17 Charleston Road Registry Inc.
 gbiz
 
-// gdn : 2014-07-31 Joint Stock Company \
+// gdn : 2014-07-31 Joint Stock Company "Navigation-information systems"
 gdn
 
 // gea : 2014-12-04 GEA Group Aktiengesellschaft
@@ -7544,6 +8094,12 @@ gea
 // gent : 2014-01-23 COMBELL GROUP NV/SA
 gent
 
+// genting : 2015-03-12 Resorts World Inc Pte. Ltd.
+genting
+
+// george : 2015-07-31 Wal-Mart Stores, Inc.
+george
+
 // ggee : 2014-01-09 GMO Internet, Inc.
 ggee
 
@@ -7559,6 +8115,9 @@ gives
 // giving : 2014-11-13 Giving Limited
 giving
 
+// glade : 2015-07-23 Johnson Shareholdings, Inc.
+glade
+
 // glass : 2013-11-07 Black Cover, LLC
 glass
 
@@ -7580,6 +8139,12 @@ gmo
 // gmx : 2014-04-24 1&1 Mail & Media GmbH
 gmx
 
+// godaddy : 2015-07-23 Go Daddy East, LLC
+godaddy
+
+// gold : 2015-01-22 June Edge, LLC
+gold
+
 // goldpoint : 2014-11-20 YODOBASHI CAMERA CO.,LTD.
 goldpoint
 
@@ -7589,6 +8154,12 @@ golf
 // goo : 2014-12-18 NTT Resonant Inc.
 goo
 
+// goodhands : 2015-07-31 Allstate Fire and Casualty Insurance Company
+goodhands
+
+// goodyear : 2015-07-02 The Goodyear Tire & Rubber Company
+goodyear
+
 // goog : 2014-11-20 Charleston Road Registry Inc.
 goog
 
@@ -7601,6 +8172,12 @@ gop
 // got : 2014-12-18 Amazon EU S.à r.l.
 got
 
+// gotv : 2015-03-12 MultiChoice (Proprietary) Limited
+gotv
+
+// grainger : 2015-05-07 Grainger Registry Services, LLC
+grainger
+
 // graphics : 2013-09-13 Over Madison, LLC
 graphics
 
@@ -7616,6 +8193,9 @@ gripe
 // group : 2014-08-15 Romeo Town, LLC
 group
 
+// guardian : 2015-07-30 The Guardian Life Insurance Company of America
+guardian
+
 // gucci : 2014-11-13 Guccio Gucci S.p.a.
 gucci
 
@@ -7640,39 +8220,78 @@ hangout
 // haus : 2013-12-05
 haus
 
+// hbo : 2015-07-30 HBO Registry Services, Inc.
+hbo
+
+// hdfc : 2015-07-30 HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED
+hdfc
+
+// hdfcbank : 2015-02-12 HDFC Bank Limited
+hdfcbank
+
+// health : 2015-02-11 DotHealth, LLC
+health
+
 // healthcare : 2014-06-12 Silver Glen, LLC
 healthcare
 
 // help : 2014-06-26 Uniregistry, Corp.
 help
 
+// helsinki : 2015-02-05 City of Helsinki
+helsinki
+
 // here : 2014-02-06 Charleston Road Registry Inc.
 here
 
 // hermes : 2014-07-10 HERMES INTERNATIONAL
 hermes
 
+// hgtv : 2015-07-02 Lifestyle Domain Holdings, Inc.
+hgtv
+
 // hiphop : 2014-03-06 Uniregistry, Corp.
 hiphop
 
+// hisamitsu : 2015-07-16 Hisamitsu Pharmaceutical Co.,Inc.
+hisamitsu
+
 // hitachi : 2014-10-31 Hitachi, Ltd.
 hitachi
 
 // hiv : 2014-03-13 dotHIV gemeinnuetziger e.V.
 hiv
 
+// hkt : 2015-05-14 PCCW-HKT DataCom Services Limited
+hkt
+
+// hockey : 2015-03-19 Half Willow, LLC
+hockey
+
 // holdings : 2013-08-27 John Madison, LLC
 holdings
 
 // holiday : 2013-11-07 Goose Woods, LLC
 holiday
 
+// homedepot : 2015-04-02 Homer TLC, Inc.
+homedepot
+
+// homegoods : 2015-07-16 The TJX Companies, Inc.
+homegoods
+
 // homes : 2014-01-09 DERHomes, LLC
 homes
 
+// homesense : 2015-07-16 The TJX Companies, Inc.
+homesense
+
 // honda : 2014-12-18 Honda Motor Co., Ltd.
 honda
 
+// honeywell : 2015-07-23 Honeywell GTLD LLC
+honeywell
+
 // horse : 2013-11-21 Top Level Domain Holdings Limited
 horse
 
@@ -7682,6 +8301,9 @@ host
 // hosting : 2014-05-29 Uniregistry, Corp.
 hosting
 
+// hoteles : 2015-03-05 Travel Reservations SRL
+hoteles
+
 // hotmail : 2014-12-18 Microsoft Corporation
 hotmail
 
@@ -7694,18 +8316,48 @@ how
 // hsbc : 2014-10-24 HSBC Holdings PLC
 hsbc
 
+// htc : 2015-04-02 HTC corporation
+htc
+
+// hughes : 2015-07-30 Hughes Satellite Systems Corporation
+hughes
+
+// hyatt : 2015-07-30 Hyatt GTLD, L.L.C.
+hyatt
+
+// hyundai : 2015-07-09 Hyundai Motor Company
+hyundai
+
 // ibm : 2014-07-31 International Business Machines Corporation
 ibm
 
+// icbc : 2015-02-19 Industrial and Commercial Bank of China Limited
+icbc
+
 // ice : 2014-10-30 IntercontinentalExchange, Inc.
 ice
 
+// icu : 2015-01-08 One.com A/S
+icu
+
+// ieee : 2015-07-23 IEEE Global LLC
+ieee
+
 // ifm : 2014-01-30 ifm electronic gmbh
 ifm
 
 // iinet : 2014-07-03 Connect West Pty. Ltd.
 iinet
 
+// ikano : 2015-07-09 Ikano S.A.
+ikano
+
+// imamat : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation)
+imamat
+
+// imdb : 2015-06-25 Amazon EU S.à r.l.
+imdb
+
 // immo : 2014-07-10 Auburn Bloom, LLC
 immo
 
@@ -7727,12 +8379,21 @@ ink
 // institute : 2013-11-07 Outer Maple, LLC
 institute
 
+// insurance : 2015-02-19 fTLD Registry Services LLC
+insurance
+
 // insure : 2014-03-20 Pioneer Willow, LLC
 insure
 
+// intel : 2015-08-06 Intel Corporation
+intel
+
 // international : 2013-11-07 Wild Way, LLC
 international
 
+// intuit : 2015-07-30 Intuit Administrative Services, Inc.
+intuit
+
 // investments : 2014-03-20 Holly Glen, LLC
 investments
 
@@ -7742,6 +8403,12 @@ ipiranga
 // irish : 2014-08-07 Dot-Irish LLC
 irish
 
+// iselect : 2015-02-11 iSelect Ltd
+iselect
+
+// ismaili : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation)
+ismaili
+
 // ist : 2014-08-28 Istanbul Metropolitan Municipality
 ist
 
@@ -7751,6 +8418,9 @@ istanbul
 // itau : 2014-10-02 Itau Unibanco Holding S.A.
 itau
 
+// itv : 2015-07-09 ITV Services Limited
+itv
+
 // iwc : 2014-06-23 Richemont DNS Inc.
 iwc
 
@@ -7763,12 +8433,33 @@ java
 // jcb : 2014-11-20 JCB Co., Ltd.
 jcb
 
+// jcp : 2015-04-23 JCP Media, Inc.
+jcp
+
+// jeep : 2015-07-30 FCA US LLC.
+jeep
+
 // jetzt : 2014-01-09 New TLD Company AB
 jetzt
 
+// jewelry : 2015-03-05 Wild Bloom, LLC
+jewelry
+
+// jio : 2015-04-02 Affinity Names, Inc.
+jio
+
 // jlc : 2014-12-04 Richemont DNS Inc.
 jlc
 
+// jll : 2015-04-02 Jones Lang LaSalle Incorporated
+jll
+
+// jmp : 2015-03-26 Matrix IP LLC
+jmp
+
+// jnj : 2015-06-18 Johnson & Johnson Services, Inc.
+jnj
+
 // joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
 joburg
 
@@ -7778,27 +8469,48 @@ jot
 // joy : 2014-12-18 Amazon EU S.à r.l.
 joy
 
+// jpmorgan : 2015-04-30 JPMorgan Chase & Co.
+jpmorgan
+
 // jprs : 2014-09-18 Japan Registry Services Co., Ltd.
 jprs
 
 // juegos : 2014-03-20 Uniregistry, Corp.
 juegos
 
+// juniper : 2015-07-30 JUNIPER NETWORKS, INC.
+juniper
+
 // kaufen : 2013-11-07 United TLD Holdco Ltd.
 kaufen
 
 // kddi : 2014-09-12 KDDI CORPORATION
 kddi
 
+// kerryhotels : 2015-04-30 Kerry Trading Co. Limited
+kerryhotels
+
+// kerrylogistics : 2015-04-09 Kerry Trading Co. Limited
+kerrylogistics
+
+// kerryproperties : 2015-04-09 Kerry Trading Co. Limited
+kerryproperties
+
 // kfh : 2014-12-04 Kuwait Finance House
 kfh
 
+// kia : 2015-07-09 KIA MOTORS CORPORATION
+kia
+
 // kim : 2013-09-23 Afilias Limited
 kim
 
 // kinder : 2014-11-07 Ferrero Trading Lux S.A.
 kinder
 
+// kindle : 2015-06-25 Amazon EU S.à r.l.
+kindle
+
 // kitchen : 2013-09-20 Just Goodbye, LLC
 kitchen
 
@@ -7808,34 +8520,79 @@ kiwi
 // koeln : 2014-01-09 NetCologne Gesellschaft für Telekommunikation mbH
 koeln
 
+// komatsu : 2015-01-08 Komatsu Ltd.
+komatsu
+
+// kosher : 2015-08-20 Kosher Marketing Assets LLC
+kosher
+
+// kpmg : 2015-04-23 KPMG International Cooperative (KPMG International 
Genossenschaft)
+kpmg
+
+// kpn : 2015-01-08 Koninklijke KPN N.V.
+kpn
+
 // krd : 2013-12-05 KRG Department of Information Technology
 krd
 
 // kred : 2013-12-19 KredTLD Pty Ltd
 kred
 
+// kuokgroup : 2015-04-09 Kerry Trading Co. Limited
+kuokgroup
+
+// kyknet : 2015-03-05 Electronic Media Network (Pty) Ltd
+kyknet
+
 // kyoto : 2014-11-07 Academic Institution: Kyoto Jyoho Gakuen
 kyoto
 
 // lacaixa : 2014-01-09 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA
 lacaixa
 
+// ladbrokes : 2015-08-06 LADBROKES INTERNATIONAL PLC
+ladbrokes
+
+// lamborghini : 2015-06-04 Automobili Lamborghini S.p.A.
+lamborghini
+
+// lancaster : 2015-02-12 LANCASTER
+lancaster
+
+// lancia : 2015-07-31 Fiat Chrysler Automobiles N.V.
+lancia
+
+// lancome : 2015-07-23 L'Oréal
+lancome
+
 // land : 2013-09-10 Pine Moon, LLC
 land
 
 // landrover : 2014-11-13 Jaguar Land Rover Ltd
 landrover
 
+// lanxess : 2015-07-30 LANXESS Corporation
+lanxess
+
+// lasalle : 2015-04-02 Jones Lang LaSalle Incorporated
+lasalle
+
 // lat : 2014-10-16 ECOM-LAC Federaciòn de Latinoamèrica y el Caribe para 
Internet y el Comercio Electrònico
 lat
 
+// latino : 2015-07-30 Dish DBS Corporation
+latino
+
 // latrobe : 2014-06-16 La Trobe University
 latrobe
 
+// law : 2015-01-22 Minds + Machines Group Limited
+law
+
 // lawyer : 2014-03-20
 lawyer
 
-// lds : 2014-03-20 IRI Domain Management, LLC (\
+// lds : 2014-03-20 IRI Domain Management, LLC ("Applicant")
 lds
 
 // lease : 2014-03-06 Victor Trail, LLC
@@ -7844,9 +8601,18 @@ lease
 // leclerc : 2014-08-07 A.C.D. LEC Association des Centres Distributeurs 
Edouard Leclerc
 leclerc
 
+// lefrak : 2015-07-16 LeFrak Organization, Inc.
+lefrak
+
 // legal : 2014-10-16 Blue Falls, LLC
 legal
 
+// lego : 2015-07-16 LEGO Juris A/S
+lego
+
+// lexus : 2015-04-23 TOYOTA MOTOR CORPORATION
+lexus
+
 // lgbt : 2014-05-08 Afilias Limited
 lgbt
 
@@ -7859,6 +8625,9 @@ lidl
 // life : 2014-02-06 Trixy Oaks, LLC
 life
 
+// lifeinsurance : 2015-01-15 American Council of Life Insurers
+lifeinsurance
+
 // lifestyle : 2014-12-11 Lifestyle Domain Holdings, Inc.
 lifestyle
 
@@ -7868,6 +8637,9 @@ lighting
 // like : 2014-12-18 Amazon EU S.à r.l.
 like
 
+// lilly : 2015-07-31 Eli Lilly and Company
+lilly
+
 // limited : 2014-03-06 Big Fest, LLC
 limited
 
@@ -7883,15 +8655,36 @@ linde
 // link : 2013-11-14 Uniregistry, Corp.
 link
 
-// live : 2014-12-04 Half Woods, LLC
+// lipsy : 2015-06-25 Lipsy Ltd
+lipsy
+
+// live : 2014-12-04
 live
 
+// living : 2015-07-30 Lifestyle Domain Holdings, Inc.
+living
+
+// lixil : 2015-03-19 LIXIL Group Corporation
+lixil
+
 // loan : 2014-11-20 dot Loan Limited
 loan
 
 // loans : 2014-03-20 June Woods, LLC
 loans
 
+// locker : 2015-06-04 Dish DBS Corporation
+locker
+
+// locus : 2015-06-25 Locus Analytics LLC
+locus
+
+// loft : 2015-07-30 Annco, Inc.
+loft
+
+// lol : 2015-01-30 Uniregistry, Corp.
+lol
+
 // london : 2013-11-14 Dot London Domains Limited
 london
 
@@ -7901,12 +8694,24 @@ lotte
 // lotto : 2014-04-10 Afilias Limited
 lotto
 
+// love : 2014-12-22 Merchant Law Group LLP
+love
+
+// lpl : 2015-07-30 LPL Holdings, Inc.
+lpl
+
+// lplfinancial : 2015-07-30 LPL Holdings, Inc.
+lplfinancial
+
 // ltd : 2014-09-25 Over Corner, LLC
 ltd
 
 // ltda : 2014-04-17 DOMAIN ROBOT SERVICOS DE HOSPEDAGEM NA INTERNET LTDA
 ltda
 
+// lundbeck : 2015-08-06 H. Lundbeck A/S
+lundbeck
+
 // lupin : 2014-11-07 LUPIN LIMITED
 lupin
 
@@ -7916,6 +8721,9 @@ luxe
 // luxury : 2013-10-17 Luxury Partners, LLC
 luxury
 
+// macys : 2015-07-31 Macys, Inc.
+macys
+
 // madrid : 2014-05-01 Comunidad de Madrid
 madrid
 
@@ -7925,6 +8733,9 @@ maif
 // maison : 2013-12-05 Victor Frostbite, LLC
 maison
 
+// makeup : 2015-01-15 L'Oréal
+makeup
+
 // man : 2014-12-04 MAN SE
 man
 
@@ -7946,10 +8757,34 @@ markets
 // marriott : 2014-10-09 Marriott Worldwide Corporation
 marriott
 
+// marshalls : 2015-07-16 The TJX Companies, Inc.
+marshalls
+
+// maserati : 2015-07-31 Fiat Chrysler Automobiles N.V.
+maserati
+
+// mattel : 2015-08-06 Mattel Sites, Inc.
+mattel
+
+// mba : 2015-04-02 Lone Hollow, LLC
+mba
+
+// mcd : 2015-07-30 McDonald’s Corporation
+mcd
+
+// mcdonalds : 2015-07-30 McDonald’s Corporation
+mcdonalds
+
+// mckinsey : 2015-07-31 McKinsey Holdings, Inc.
+mckinsey
+
+// med : 2015-08-06 Medistry LLC
+med
+
 // media : 2014-03-06 Grand Glen, LLC
 media
 
-// meet : 2014-01-16 Afilias Limited
+// meet : 2014-01-16
 meet
 
 // melbourne : 2014-05-29 The Crown in right of the State of Victoria, 
represented by its Department of State Development, Business and Innovation
@@ -7961,12 +8796,18 @@ meme
 // memorial : 2014-10-16 Dog Beach, LLC
 memorial
 
+// men : 2015-02-26 Exclusive Registry Limited
+men
+
 // menu : 2013-09-11 Wedding TLD2, LLC
 menu
 
 // meo : 2014-11-07 PT Comunicacoes S.A.
 meo
 
+// metlife : 2015-05-07 MetLife Services and Solutions, LLC
+metlife
+
 // miami : 2013-12-19 Top Level Domain Holdings Limited
 miami
 
@@ -7976,9 +8817,27 @@ microsoft
 // mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft
 mini
 
+// mint : 2015-07-30 Intuit Administrative Services, Inc.
+mint
+
+// mit : 2015-07-02 Massachusetts Institute of Technology
+mit
+
+// mitsubishi : 2015-07-23 Mitsubishi Corporation
+mitsubishi
+
+// mlb : 2015-05-21 MLB Advanced Media DH, LLC
+mlb
+
+// mls : 2015-04-23 The Canadian Real Estate Association
+mls
+
 // mma : 2014-11-07 MMA IARD
 mma
 
+// mnet : 2015-03-05 Electronic Media Network (Pty) Ltd
+mnet
+
 // mobily : 2014-12-18 GreenTech Consultancy Company W.L.L.
 mobily
 
@@ -7991,6 +8850,9 @@ moe
 // moi : 2014-12-18 Amazon EU S.à r.l.
 moi
 
+// mom : 2015-04-16 Uniregistry, Corp.
+mom
+
 // monash : 2013-09-30 Monash University
 monash
 
@@ -8000,7 +8862,10 @@ money
 // montblanc : 2014-06-23 Richemont DNS Inc.
 montblanc
 
-// mormon : 2013-12-05 IRI Domain Management, LLC (\
+// mopar : 2015-07-30 FCA US LLC.
+mopar
+
+// mormon : 2013-12-05 IRI Domain Management, LLC ("Applicant")
 mormon
 
 // mortgage : 2014-03-20
@@ -8009,33 +8874,78 @@ mortgage
 // moscow : 2013-12-19 Foundation for Assistance for Internet Technologies and 
Infrastructure Development (FAITID)
 moscow
 
+// moto : 2015-06-04 Charleston Road Registry Inc.
+moto
+
 // motorcycles : 2014-01-09 DERMotorcycles, LLC
 motorcycles
 
 // mov : 2014-01-30 Charleston Road Registry Inc.
 mov
 
+// movie : 2015-02-05 New Frostbite, LLC
+movie
+
 // movistar : 2014-10-16 Telefónica S.A.
 movistar
 
+// msd : 2015-07-23 MSD Registry Holdings, Inc.
+msd
+
 // mtn : 2014-12-04 MTN Dubai Limited
 mtn
 
 // mtpc : 2014-11-20 Mitsubishi Tanabe Pharma Corporation
 mtpc
 
+// mtr : 2015-03-12 MTR Corporation Limited
+mtr
+
+// multichoice : 2015-03-12 MultiChoice (Proprietary) Limited
+multichoice
+
+// mutual : 2015-04-02 Northwestern Mutual MU TLD Registry, LLC
+mutual
+
+// mutuelle : 2015-06-18 Fédération Nationale de la Mutualité Française
+mutuelle
+
+// mzansimagic : 2015-03-05 Electronic Media Network (Pty) Ltd
+mzansimagic
+
+// nab : 2015-08-20 National Australia Bank Limited
+nab
+
 // nadex : 2014-12-11 IG Group Holdings PLC
 nadex
 
 // nagoya : 2013-10-24 GMO Registry, Inc.
 nagoya
 
+// naspers : 2015-02-12 Intelprop (Proprietary) Limited
+naspers
+
+// nationwide : 2015-07-23 Nationwide Mutual Insurance Company
+nationwide
+
+// natura : 2015-03-12 NATURA COSMÉTICOS S.A.
+natura
+
 // navy : 2014-03-06 United TLD Holdco Ltd.
 navy
 
+// nba : 2015-07-31 NBA REGISTRY, LLC
+nba
+
+// nec : 2015-01-08 NEC Corporation
+nec
+
 // netbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA
 netbank
 
+// netflix : 2015-06-18 Netflix, Inc.
+netflix
+
 // network : 2013-11-14 Trixy Manor, LLC
 network
 
@@ -8045,12 +8955,21 @@ neustar
 // new : 2014-01-30 Charleston Road Registry Inc.
 new
 
-// news : 2014-12-18 Hidden Bloom, LLC
+// news : 2014-12-18
 news
 
+// next : 2015-06-18 Next plc
+next
+
+// nextdirect : 2015-06-18 Next plc
+nextdirect
+
 // nexus : 2014-07-24 Charleston Road Registry Inc.
 nexus
 
+// nfl : 2015-07-23 NFL Reg Ops LLC
+nfl
+
 // ngo : 2014-03-06 Public Interest Registry
 ngo
 
@@ -8060,18 +8979,36 @@ nhk
 // nico : 2014-12-04 DWANGO Co., Ltd.
 nico
 
+// nike : 2015-07-23 NIKE, Inc.
+nike
+
+// nikon : 2015-05-21 NIKON CORPORATION
+nikon
+
 // ninja : 2013-11-07 United TLD Holdco Ltd.
 ninja
 
 // nissan : 2014-03-27 NISSAN MOTOR CO., LTD.
 nissan
 
+// nokia : 2015-01-08 Nokia Corporation
+nokia
+
+// northwesternmutual : 2015-06-18 Northwestern Mutual Registry, LLC
+northwesternmutual
+
 // norton : 2014-12-04 Symantec Corporation
 norton
 
+// now : 2015-06-25 Amazon EU S.à r.l.
+now
+
 // nowruz : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
 nowruz
 
+// nowtv : 2015-05-14 Starbucks (HK) Limited
+nowtv
+
 // nra : 2014-05-22 NRA Holdings Company, INC.
 nra
 
@@ -8087,9 +9024,33 @@ nyc
 // obi : 2014-09-25 OBI Group Holding SE & Co. KGaA
 obi
 
+// observer : 2015-04-30 Guardian News and Media Limited
+observer
+
+// off : 2015-07-23 Johnson Shareholdings, Inc.
+off
+
+// office : 2015-03-12 Microsoft Corporation
+office
+
 // okinawa : 2013-12-05 BusinessRalliart Inc.
 okinawa
 
+// olayan : 2015-05-14 Crescent Holding GmbH
+olayan
+
+// olayangroup : 2015-05-14 Crescent Holding GmbH
+olayangroup
+
+// oldnavy : 2015-07-31 The Gap, Inc.
+oldnavy
+
+// ollo : 2015-06-04 Dish DBS Corporation
+ollo
+
+// omega : 2015-01-08 The Swatch Group Ltd
+omega
+
 // one : 2014-11-07 One.com A/S
 one
 
@@ -8099,27 +9060,51 @@ ong
 // onl : 2013-09-16 I-Registry Ltd.
 onl
 
+// online : 2015-01-15 DotOnline Inc.
+online
+
+// onyourside : 2015-07-23 Nationwide Mutual Insurance Company
+onyourside
+
 // ooo : 2014-01-09 INFIBEAM INCORPORATION LIMITED
 ooo
 
+// open : 2015-07-31 American Express Travel Related Services Company, Inc.
+open
+
 // oracle : 2014-06-19 Oracle Corporation
 oracle
 
+// orange : 2015-03-12 Orange Brand Services Limited
+orange
+
 // organic : 2014-03-27 Afilias Limited
 organic
 
+// orientexpress : 2015-02-05 Belmond Ltd.
+orientexpress
+
 // osaka : 2014-09-04 Interlink Co., Ltd.
 osaka
 
 // otsuka : 2013-10-11 Otsuka Holdings Co., Ltd.
 otsuka
 
+// ott : 2015-06-04 Dish DBS Corporation
+ott
+
 // ovh : 2014-01-16 OVH SAS
 ovh
 
 // page : 2014-12-04 Charleston Road Registry Inc.
 page
 
+// pamperedchef : 2015-02-05 The Pampered Chef, Ltd.
+pamperedchef
+
+// panasonic : 2015-07-30 Panasonic Corporation
+panasonic
+
 // panerai : 2014-11-07 Richemont DNS Inc.
 panerai
 
@@ -8138,6 +9123,18 @@ parts
 // party : 2014-09-11 Blue Sky Registry Limited
 party
 
+// passagens : 2015-03-05 Travel Reservations SRL
+passagens
+
+// payu : 2015-02-12 MIH PayU B.V.
+payu
+
+// pccw : 2015-05-14 PCCW Enterprises Limited
+pccw
+
+// pet : 2015-05-07 Afilias plc
+pet
+
 // pharmacy : 2014-06-19 National Association of Boards of Pharmacy
 pharmacy
 
@@ -8168,36 +9165,66 @@ pictet
 // pictures : 2014-03-06 Foggy Sky, LLC
 pictures
 
+// pid : 2015-01-08 Top Level Spectrum, Inc.
+pid
+
 // pin : 2014-12-18 Amazon EU S.à r.l.
 pin
 
+// ping : 2015-06-11 Ping Registry Provider, Inc.
+ping
+
 // pink : 2013-10-01 Afilias Limited
 pink
 
+// pioneer : 2015-07-16 Pioneer Corporation
+pioneer
+
 // pizza : 2014-06-26 Foggy Moon, LLC
 pizza
 
 // place : 2014-04-24 Snow Galley, LLC
 place
 
+// play : 2015-03-05 Charleston Road Registry Inc.
+play
+
+// playstation : 2015-07-02 Sony Computer Entertainment Inc.
+playstation
+
 // plumbing : 2013-09-10 Spring Tigers, LLC
 plumbing
 
+// plus : 2015-02-05 Sugar Mill, LLC
+plus
+
+// pnc : 2015-07-02 PNC Domain Co., LLC
+pnc
+
 // pohl : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG
 pohl
 
 // poker : 2014-07-03 Afilias Domains No. 5 Limited
 poker
 
+// politie : 2015-08-20 Politie Nederland
+politie
+
 // porn : 2014-10-16 ICM Registry PN LLC
 porn
 
+// pramerica : 2015-07-30 Prudential Financial, Inc.
+pramerica
+
 // praxi : 2013-12-05 Praxi S.p.A.
 praxi
 
 // press : 2014-04-03 DotPress Inc.
 press
 
+// prime : 2015-06-25 Amazon EU S.à r.l.
+prime
+
 // prod : 2014-01-23 Charleston Road Registry Inc.
 prod
 
@@ -8207,6 +9234,9 @@ productions
 // prof : 2014-07-24 Charleston Road Registry Inc.
 prof
 
+// progressive : 2015-07-23 Progressive Casualty Insurance Company
+progressive
+
 // promo : 2014-12-18 Play.PROMO Oy
 promo
 
@@ -8216,6 +9246,15 @@ properties
 // property : 2014-05-22 Uniregistry, Corp.
 property
 
+// protection : 2015-04-23
+protection
+
+// pru : 2015-07-30 Prudential Financial, Inc.
+pru
+
+// prudential : 2015-07-30 Prudential Financial, Inc.
+prudential
+
 // pub : 2013-12-12 United TLD Holdco Ltd.
 pub
 
@@ -8225,15 +9264,27 @@ qpon
 // quebec : 2013-12-19 PointQuébec Inc
 quebec
 
+// quest : 2015-03-26 Quest ION Limited
+quest
+
+// qvc : 2015-07-30 QVC, Inc.
+qvc
+
 // racing : 2014-12-04 Premier Registry Limited
 racing
 
+// raid : 2015-07-23 Johnson Shareholdings, Inc.
+raid
+
 // read : 2014-12-18 Amazon EU S.à r.l.
 read
 
 // realtor : 2014-05-29 Real Estate Domains LLC
 realtor
 
+// realty : 2015-03-19 Fegistry, LLC
+realty
+
 // recipes : 2013-10-17 Grand Island, LLC
 recipes
 
@@ -8243,10 +9294,13 @@ red
 // redstone : 2014-10-31 Redstone Haute Couture Co., Ltd.
 redstone
 
+// redumbrella : 2015-03-26 Travelers TLD, LLC
+redumbrella
+
 // rehab : 2014-03-06 United TLD Holdco Ltd.
 rehab
 
-// reise : 2014-03-13 dotreise GmbH
+// reise : 2014-03-13
 reise
 
 // reisen : 2014-03-06 New Cypress, LLC
@@ -8255,6 +9309,9 @@ reisen
 // reit : 2014-09-04 National Association of Real Estate Investment Trusts, 
Inc.
 reit
 
+// reliance : 2015-04-02 Reliance Industries Limited
+reliance
+
 // ren : 2013-12-12 Beijing Qianxiang Wangjing Technology Development Co., Ltd.
 ren
 
@@ -8285,12 +9342,24 @@ review
 // reviews : 2013-09-13
 reviews
 
+// rexroth : 2015-06-18 Robert Bosch GMBH
+rexroth
+
 // rich : 2013-11-21 I-Registry Ltd.
 rich
 
+// richardli : 2015-05-14 Pacific Century Asset Management (HK) Limited
+richardli
+
 // ricoh : 2014-11-20 Ricoh Company, Ltd.
 ricoh
 
+// rightathome : 2015-07-23 Johnson Shareholdings, Inc.
+rightathome
+
+// ril : 2015-04-02 Reliance Industries Limited
+ril
+
 // rio : 2014-02-27 Empresa Municipal de Informática SA - IPLANRIO
 rio
 
@@ -8306,6 +9375,9 @@ rocks
 // rodeo : 2013-12-19 Top Level Domain Holdings Limited
 rodeo
 
+// rogers : 2015-08-06 Rogers Communications Partnership
+rogers
+
 // room : 2014-12-18 Amazon EU S.à r.l.
 room
 
@@ -8315,6 +9387,12 @@ rsvp
 // ruhr : 2013-10-02 regiodot GmbH & Co. KG
 ruhr
 
+// run : 2015-03-19 Snow Park, LLC
+run
+
+// rwe : 2015-04-02 RWE AG
+rwe
+
 // ryukyu : 2014-01-09 BusinessRalliart Inc.
 ryukyu
 
@@ -8324,6 +9402,9 @@ saarland
 // safe : 2014-12-18 Amazon EU S.à r.l.
 safe
 
+// safety : 2015-01-08 Safety Registry Services, LLC.
+safety
+
 // sakura : 2014-12-18 SAKURA Internet Inc.
 sakura
 
@@ -8333,6 +9414,9 @@ sale
 // salon : 2014-12-11 Outer Orchard, LLC
 salon
 
+// samsclub : 2015-07-31 Wal-Mart Stores, Inc.
+samsclub
+
 // samsung : 2014-04-03 SAMSUNG SDS CO., LTD
 samsung
 
@@ -8354,18 +9438,30 @@ sapo
 // sarl : 2014-07-03 Delta Orchard, LLC
 sarl
 
+// sas : 2015-04-02 Research IP LLC
+sas
+
+// save : 2015-06-25 Amazon EU S.à r.l.
+save
+
 // saxo : 2014-10-31 Saxo Bank A/S
 saxo
 
+// sbi : 2015-03-12 STATE BANK OF INDIA
+sbi
+
 // sbs : 2014-11-07 SPECIAL BROADCASTING SERVICE CORPORATION
 sbs
 
 // sca : 2014-03-13 SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ)
 sca
 
-// scb : 2014-02-20 The Siam Commercial Bank Public Company Limited (\
+// scb : 2014-02-20 The Siam Commercial Bank Public Company Limited ("SCB")
 scb
 
+// schaeffler : 2015-08-06 Schaeffler Technologies AG & Co. KG
+schaeffler
+
 // schmidt : 2014-04-03 SALM S.A.S.
 schmidt
 
@@ -8384,6 +9480,9 @@ schwarz
 // science : 2014-09-11 dot Science Limited
 science
 
+// scjohnson : 2015-07-23 Johnson Shareholdings, Inc.
+scjohnson
+
 // scor : 2014-10-31 SCOR SE
 scor
 
@@ -8393,6 +9492,9 @@ scot
 // seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal)
 seat
 
+// security : 2015-05-14
+security
+
 // seek : 2014-12-04 Seek Limited
 seek
 
@@ -8402,6 +9504,12 @@ sener
 // services : 2014-02-27 Fox Castle, LLC
 services
 
+// ses : 2015-07-23 SES
+ses
+
+// seven : 2015-08-06 Seven West Media Ltd
+seven
+
 // sew : 2014-07-17 SEW-EURODRIVE GmbH & Co KG
 sew
 
@@ -8411,9 +9519,18 @@ sex
 // sexy : 2013-09-11 Uniregistry, Corp.
 sexy
 
+// sfr : 2015-08-13 Societe Francaise du Radiotelephone - SFR
+sfr
+
 // sharp : 2014-05-01 Sharp Corporation
 sharp
 
+// shaw : 2015-04-23 Shaw Cablesystems G.P.
+shaw
+
+// shell : 2015-07-30 Shell Information Technology International Inc
+shell
+
 // shia : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
 shia
 
@@ -8423,24 +9540,63 @@ shiksha
 // shoes : 2013-10-02 Binky Galley, LLC
 shoes
 
+// shouji : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD.
+shouji
+
+// show : 2015-03-05 Snow Beach, LLC
+show
+
+// showtime : 2015-08-06 CBS Domains Inc.
+showtime
+
 // shriram : 2014-01-23 Shriram Capital Ltd.
 shriram
 
+// silk : 2015-06-25 Amazon EU S.à r.l.
+silk
+
+// sina : 2015-03-12 Sina Corporation
+sina
+
 // singles : 2013-08-27 Fern Madison, LLC
 singles
 
+// site : 2015-01-15 DotSite Inc.
+site
+
+// ski : 2015-04-09 STARTING DOT LIMITED
+ski
+
+// skin : 2015-01-15 L'Oréal
+skin
+
 // sky : 2014-06-19 Sky IP International Ltd, a company incorporated in 
England and Wales, operating via its registered Swiss branch
 sky
 
 // skype : 2014-12-18 Microsoft Corporation
 skype
 
+// sling : 2015-07-30 Hughes Satellite Systems Corporation
+sling
+
+// smart : 2015-07-09 Smart Communications, Inc. (SMART)
+smart
+
 // smile : 2014-12-18 Amazon EU S.à r.l.
 smile
 
+// sncf : 2015-02-19 Société Nationale des Chemins de fer Francais S N C F
+sncf
+
+// soccer : 2015-03-26 Foggy Shadow, LLC
+soccer
+
 // social : 2013-11-07 United TLD Holdco Ltd.
 social
 
+// softbank : 2015-07-02 SoftBank Corp.
+softbank
+
 // software : 2014-03-20
 software
 
@@ -8453,6 +9609,12 @@ solar
 // solutions : 2013-11-07 Silver Cover, LLC
 solutions
 
+// song : 2015-02-26 Amazon EU S.à r.l.
+song
+
+// sony : 2015-01-08 Sony Corporation
+sony
+
 // soy : 2014-01-23 Charleston Road Registry Inc.
 soy
 
@@ -8462,12 +9624,36 @@ space
 // spiegel : 2014-02-05 SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG
 spiegel
 
+// spot : 2015-02-26 Amazon EU S.à r.l.
+spot
+
 // spreadbetting : 2014-12-11 IG Group Holdings PLC
 spreadbetting
 
+// srl : 2015-05-07 mySRL GmbH
+srl
+
+// srt : 2015-07-30 FCA US LLC.
+srt
+
 // stada : 2014-11-13 STADA Arzneimittel AG
 stada
 
+// staples : 2015-07-30 Staples, Inc.
+staples
+
+// star : 2015-01-08 Star India Private Limited
+star
+
+// starhub : 2015-02-05 StarHub Limited
+starhub
+
+// statebank : 2015-03-12 STATE BANK OF INDIA
+statebank
+
+// statefarm : 2015-07-30 State Farm Mutual Automobile Insurance Company
+statefarm
+
 // statoil : 2014-12-04 Statoil ASA
 statoil
 
@@ -8480,12 +9666,27 @@ stcgroup
 // stockholm : 2014-12-18 Stockholms kommun
 stockholm
 
+// storage : 2014-12-22 Self Storage Company LLC
+storage
+
+// store : 2015-04-09 DotStore Inc.
+store
+
+// studio : 2015-02-11
+studio
+
 // study : 2014-12-11 OPEN UNIVERSITIES AUSTRALIA PTY LTD
 study
 
 // style : 2014-12-04 Binky Moon, LLC
 style
 
+// sucks : 2014-12-22 Vox Populi Registry Inc.
+sucks
+
+// supersport : 2015-03-05 SuperSport International Holdings Proprietary 
Limited
+supersport
+
 // supplies : 2013-12-19 Atomic Fields, LLC
 supplies
 
@@ -8504,6 +9705,12 @@ surgery
 // suzuki : 2014-02-20 SUZUKI MOTOR CORPORATION
 suzuki
 
+// swatch : 2015-01-08 The Swatch Group Ltd
+swatch
+
+// swiftcover : 2015-07-23 Swiftcover Insurance Services Limited
+swiftcover
+
 // swiss : 2014-10-16 Swiss Confederation
 swiss
 
@@ -8522,7 +9729,19 @@ tab
 // taipei : 2014-07-10 Taipei City Government
 taipei
 
-// tatar : 2014-04-24 Limited Liability Company \
+// talk : 2015-04-09 Amazon EU S.à r.l.
+talk
+
+// taobao : 2015-01-15 Alibaba Group Holding Limited
+taobao
+
+// target : 2015-07-31 Target Domain Holdings, LLC
+target
+
+// tatamotors : 2015-03-12 Tata Motors Ltd
+tatamotors
+
+// tatar : 2014-04-24 Limited Liability Company "Coordination Center of 
Regional Domain of Tatarstan Republic"
 tatar
 
 // tattoo : 2013-08-30 Uniregistry, Corp.
@@ -8531,12 +9750,27 @@ tattoo
 // tax : 2014-03-20 Storm Orchard, LLC
 tax
 
+// taxi : 2015-03-19 Pine Falls, LLC
+taxi
+
 // tci : 2014-09-12 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
 tci
 
+// tdk : 2015-06-11 TDK Corporation
+tdk
+
+// team : 2015-03-05 Atomic Lake, LLC
+team
+
+// tech : 2015-01-30 Dot Tech LLC
+tech
+
 // technology : 2013-09-13 Auburn Falls
 technology
 
+// telecity : 2015-02-19 TelecityGroup International Limited
+telecity
+
 // telefonica : 2014-10-16 Telefónica S.A.
 telefonica
 
@@ -8546,9 +9780,33 @@ temasek
 // tennis : 2014-12-04 Cotton Bloom, LLC
 tennis
 
+// teva : 2015-07-02 Teva Pharmaceutical Industries Limited
+teva
+
+// thd : 2015-04-02 Homer TLC, Inc.
+thd
+
+// theater : 2015-03-19 Blue Tigers, LLC
+theater
+
+// theatre : 2015-05-07
+theatre
+
+// theguardian : 2015-04-30 Guardian News and Media Limited
+theguardian
+
+// tiaa : 2015-07-23 Teachers Insurance and Annuity Association of America
+tiaa
+
+// tickets : 2015-02-05 Accent Media Limited
+tickets
+
 // tienda : 2013-11-14 Victor Manor, LLC
 tienda
 
+// tiffany : 2015-01-30 Tiffany and Company
+tiffany
+
 // tips : 2013-09-20 Corn Willow, LLC
 tips
 
@@ -8558,6 +9816,18 @@ tires
 // tirol : 2014-04-24 punkt Tirol GmbH
 tirol
 
+// tjmaxx : 2015-07-16 The TJX Companies, Inc.
+tjmaxx
+
+// tjx : 2015-07-16 The TJX Companies, Inc.
+tjx
+
+// tkmaxx : 2015-07-16 The TJX Companies, Inc.
+tkmaxx
+
+// tmall : 2015-01-15 Alibaba Group Holding Limited
+tmall
+
 // today : 2013-09-20 Pearl Woods, LLC
 today
 
@@ -8576,9 +9846,18 @@ toray
 // toshiba : 2014-04-10 TOSHIBA Corporation
 toshiba
 
+// total : 2015-08-06 Total SA
+total
+
+// tours : 2015-01-22 Sugar Station, LLC
+tours
+
 // town : 2014-03-06 Koko Moon, LLC
 town
 
+// toyota : 2015-04-23 TOYOTA MOTOR CORPORATION
+toyota
+
 // toys : 2014-03-06 Pioneer Orchard, LLC
 toys
 
@@ -8591,18 +9870,45 @@ trading
 // training : 2013-11-07 Wild Willow, LLC
 training
 
+// travelchannel : 2015-07-02 Lifestyle Domain Holdings, Inc.
+travelchannel
+
+// travelers : 2015-03-26 Travelers TLD, LLC
+travelers
+
+// travelersinsurance : 2015-03-26 Travelers TLD, LLC
+travelersinsurance
+
 // trust : 2014-10-16
 trust
 
+// trv : 2015-03-26 Travelers TLD, LLC
+trv
+
+// tube : 2015-06-11 Latin American Telecom LLC
+tube
+
 // tui : 2014-07-03 TUI AG
 tui
 
+// tunes : 2015-02-26 Amazon EU S.à r.l.
+tunes
+
 // tushu : 2014-12-18 Amazon EU S.à r.l.
 tushu
 
+// tvs : 2015-02-19 T V SUNDRAM IYENGAR  & SONS LIMITED
+tvs
+
+// ubank : 2015-08-20 National Australia Bank Limited
+ubank
+
 // ubs : 2014-12-11 UBS AG
 ubs
 
+// uconnect : 2015-07-30 FCA US LLC.
+uconnect
+
 // university : 2014-03-06 Little Station, LLC
 university
 
@@ -8612,6 +9918,9 @@ uno
 // uol : 2014-05-01 UBN INTERNET LTDA.
 uol
 
+// ups : 2015-06-25 UPS Market Driver, Inc.
+ups
+
 // vacations : 2013-12-05 Atomic Tigers, LLC
 vacations
 
@@ -8624,6 +9933,9 @@ vegas
 // ventures : 2013-08-27 Binky Lake, LLC
 ventures
 
+// verisign : 2015-08-13 VeriSign, Inc.
+verisign
+
 // versicherung : 2014-03-20 dotversicherung-registry GmbH
 versicherung
 
@@ -8636,12 +9948,27 @@ viajes
 // video : 2014-10-16
 video
 
+// vig : 2015-05-14 VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe
+vig
+
+// viking : 2015-04-02 Viking River Cruises (Bermuda) Ltd.
+viking
+
 // villas : 2013-12-05 New Sky, LLC
 villas
 
+// vin : 2015-06-18 Holly Shadow, LLC
+vin
+
+// vip : 2015-01-22 Minds + Machines Group Limited
+vip
+
 // virgin : 2014-09-25 Virgin Enterprises Limited
 virgin
 
+// visa : 2015-07-30 Visa Worldwide Pte. Limited
+visa
+
 // vision : 2013-12-05 Koko Station, LLC
 vision
 
@@ -8654,12 +9981,18 @@ vistaprint
 // viva : 2014-11-07 Saudi Telecom Company
 viva
 
+// vivo : 2015-07-31 Telefonica Brasil S.A.
+vivo
+
 // vlaanderen : 2014-02-06 DNS.be vzw
 vlaanderen
 
 // vodka : 2013-12-19 Top Level Domain Holdings Limited
 vodka
 
+// volkswagen : 2015-05-14 Volkswagen Group of America Inc.
+volkswagen
+
 // vote : 2013-11-21 Monolith Registry LLC
 vote
 
@@ -8672,9 +10005,15 @@ voto
 // voyage : 2013-08-27 Ruby House, LLC
 voyage
 
+// vuelos : 2015-03-05 Travel Reservations SRL
+vuelos
+
 // wales : 2014-05-08 Nominet UK
 wales
 
+// walmart : 2015-07-31 Wal-Mart Stores, Inc.
+walmart
+
 // walter : 2014-11-13 Sandvik AB
 walter
 
@@ -8684,12 +10023,27 @@ wang
 // wanggou : 2014-12-18 Amazon EU S.à r.l.
 wanggou
 
+// warman : 2015-06-18 Weir Group IP Limited
+warman
+
 // watch : 2013-11-14 Sand Shadow, LLC
 watch
 
+// watches : 2014-12-22 Richemont DNS Inc.
+watches
+
+// weather : 2015-01-08 The Weather Channel, LLC
+weather
+
+// weatherchannel : 2015-03-12 The Weather Channel, LLC
+weatherchannel
+
 // webcam : 2014-01-23 dot Webcam Limited
 webcam
 
+// weber : 2015-06-04 Saint-Gobain Weber SA
+weber
+
 // website : 2014-04-03 DotWebsite Inc.
 website
 
@@ -8699,6 +10053,12 @@ wed
 // wedding : 2014-04-24 Top Level Domain Holdings Limited
 wedding
 
+// weibo : 2015-03-05 Sina Corporation
+weibo
+
+// weir : 2015-01-29 Weir Group IP Limited
+weir
+
 // whoswho : 2014-02-20 Who's Who Registry
 whoswho
 
@@ -8717,9 +10077,21 @@ win
 // windows : 2014-12-18 Microsoft Corporation
 windows
 
+// wine : 2015-06-18 June Station, LLC
+wine
+
+// winners : 2015-07-16 The TJX Companies, Inc.
+winners
+
 // wme : 2014-02-13 William Morris Endeavor Entertainment, LLC
 wme
 
+// wolterskluwer : 2015-08-06 Wolters Kluwer N.V.
+wolterskluwer
+
+// woodside : 2015-07-09 Woodside Petroleum Limited
+woodside
+
 // work : 2013-12-19 Top Level Domain Holdings Limited
 work
 
@@ -8741,9 +10113,21 @@ xbox
 // xerox : 2014-10-24 Xerox DNHC LLC
 xerox
 
+// xfinity : 2015-07-09 Comcast IP Holdings I, LLC
+xfinity
+
+// xihuan : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD.
+xihuan
+
 // xin : 2014-12-11 Elegant Leader Limited
 xin
 
+// xn--11b4c3d : 2015-01-15 VeriSign Sarl
+कॉम
+
+// xn--1ck2e1b : 2015-02-26 Amazon EU S.à r.l.
+セール
+
 // xn--1qqw23a : 2014-01-09 Guangzhou YU Wei Information Technology Co., Ltd.
 佛山
 
@@ -8756,18 +10140,33 @@ xin
 // xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED
 在线
 
+// xn--3oq18vl8pn36a : 2015-07-02 Volkswagen (China) Investment Co., Ltd.
+大众汽车
+
+// xn--3pxu8k : 2015-01-15 VeriSign Sarl
+点看
+
+// xn--42c2d9a : 2015-01-15 VeriSign Sarl
+คอม
+
 // xn--45q11c : 2013-11-21 Zodiac Scorpio Limited
 八卦
 
 // xn--4gbrim : 2013-10-04 Suhub Electronic Establishment
 موقع
 
+// xn--4gq48lf9j : 2015-07-31 Wal-Mart Stores, Inc.
+一号店
+
 // xn--55qw42g : 2013-11-08 China Organizational Name Administration Center
 公益
 
 // xn--55qx5d : 2013-11-14 Computer Network Information Center of Chinese 
Academy of Sciences (China Internet Network Information Center)
 公司
 
+// xn--5tzm5g : 2014-12-22 Global Website TLD Asia Limited
+网站
+
 // xn--6frz82g : 2013-09-23 Afilias Limited
 移动
 
@@ -8783,19 +10182,37 @@ xin
 // xn--80aswg : 2013-07-14 CORE Association
 сайт
 
+// xn--8y0a063a : 2015-03-26 China United Network Communications Corporation 
Limited
+联通
+
+// xn--9dbq2a : 2015-01-15 VeriSign Sarl
+קום
+
 // xn--9et52u : 2014-06-12 RISE VICTORY LIMITED
 时尚
 
+// xn--9krt00a : 2015-03-12 Sina Corporation
+微博
+
 // xn--b4w605ferd : 2014-08-07 Temasek Holdings (Private) Limited
 淡马锡
 
+// xn--bck1b9a5dre4c : 2015-02-26 Amazon EU S.à r.l.
+ファッション
+
 // xn--c1avg : 2013-11-14 Public Interest Registry
 орг
 
+// xn--c2br7g : 2015-01-15 VeriSign Sarl
+नेट
+
+// xn--cck2b3b : 2015-02-26 Amazon EU S.à r.l.
+ストア
+
 // xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD
 삼성
 
-// xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES(HOLDING) 
COMPANY.HONGKONG LIMITED
+// xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) 
COMPANY. HONGKONG LIMITED
 商标
 
 // xn--czrs0t : 2013-12-19 Wild Island, LLC
@@ -8813,6 +10230,15 @@ xin
 // xn--efvy88h : 2014-08-22 Xinhua News Agency Guangdong Branch 新华通讯社广东分社
 新闻
 
+// xn--estv75g : 2015-02-19 Industrial and Commercial Bank of China Limited
+工行
+
+// xn--fct429k : 2015-04-09 Amazon EU S.à r.l.
+家電
+
+// xn--fhbei : 2015-01-15 VeriSign Sarl
+كوم
+
 // xn--fiq228c5hs : 2013-09-08 TLD REGISTRY LIMITED
 中文网
 
@@ -8825,6 +10251,15 @@ xin
 // xn--flw351e : 2014-07-31 Charleston Road Registry Inc.
 谷歌
 
+// xn--fzys8d69uvgm : 2015-05-14 PCCW Enterprises Limited
+電訊盈科
+
+// xn--g2xx48c : 2015-01-30 Minds + Machines Group Limited
+购物
+
+// xn--gckr3f0f : 2015-02-26 Amazon EU S.à r.l.
+クラウド
+
 // xn--hxt814e : 2014-05-15 Zodiac Libra Limited
 网店
 
@@ -8837,24 +10272,45 @@ xin
 // xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese 
Academy of Sciences (China Internet Network Information Center)
 网络
 
+// xn--j1aef : 2015-01-15 VeriSign Sarl
+ком
+
+// xn--jlq61u9w7b : 2015-01-08 Nokia Corporation
+诺基亚
+
+// xn--jvr189m : 2015-02-26 Amazon EU S.à r.l.
+食品
+
 // xn--kcrx77d1x4a : 2014-11-07 Koninklijke Philips N.V.
 飞利浦
 
+// xn--kpu716f : 2014-12-22 Richemont DNS Inc.
+手表
+
 // xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd
 手机
 
 // xn--mgba3a3ejt : 2014-11-20 Aramco Services Company
 ارامكو
 
+// xn--mgba7c0bbn0a : 2015-05-14 Crescent Holding GmbH
+العليان
+
 // xn--mgbab2bd : 2013-10-31 CORE Association
 بازار
 
 // xn--mgbb9fbpob : 2014-12-18 GreenTech Consultancy Company W.L.L.
 موبايلي
 
+// xn--mgbca7dzdo : 2015-07-30 Abu Dhabi Systems and Information Centre
+ابوظبي
+
 // xn--mgbt3dhd : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. 
Sti.
 همراه
 
+// xn--mk1bu44c : 2015-01-15 VeriSign Sarl
+닷컴
+
 // xn--mxtq1m : 2014-03-06 Net-Chinese Co., Ltd.
 政府
 
@@ -8876,6 +10332,12 @@ xin
 // xn--p1acf : 2013-12-12 Rusnames Limited
 рус
 
+// xn--pbt977c : 2014-12-22 Richemont DNS Inc.
+珠宝
+
+// xn--pssy2u : 2015-01-15 VeriSign Sarl
+大拿
+
 // xn--q9jyb4c : 2013-09-17 Charleston Road Registry Inc.
 みんな
 
@@ -8885,9 +10347,18 @@ xin
 // xn--rhqv96g : 2013-09-11 Stable Tone Limited
 世界
 
-// xn--ses554g : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) 
COMPANY. HONGKONG LIMITED
+// xn--rovu88b : 2015-02-26 Amazon EU S.à r.l.
+書籍
+
+// xn--ses554g : 2014-01-16
 网址
 
+// xn--t60b56a : 2015-01-15 VeriSign Sarl
+닷넷
+
+// xn--tckwe : 2015-01-15 VeriSign Sarl
+コム
+
 // xn--unup4y : 2013-07-14 Spring Fields, LLC
 游戏
 
@@ -8903,18 +10374,30 @@ vermögensberatung
 // xn--vuq861b : 2014-10-16 Beijing Tele-info Network Technology Co., Ltd.
 信息
 
+// xn--w4r85el8fhu5dnra : 2015-04-30 Kerry Trading Co. Limited
+嘉里大酒店
+
+// xn--w4rs40l : 2015-07-30 Kerry Trading Co. Limited
+嘉里
+
 // xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd.
 广东
 
 // xn--zfr164b : 2013-11-08 China Organizational Name Administration Center
 政务
 
+// xperia : 2015-05-14 Sony Mobile Communications AB
+xperia
+
 // xyz : 2013-12-05 XYZ.COM LLC
 xyz
 
 // yachts : 2014-01-09 DERYachts, LLC
 yachts
 
+// yahoo : 2015-04-02 Yahoo! Domain Services Inc.
+yahoo
+
 // yamaxun : 2014-12-18 Amazon EU S.à r.l.
 yamaxun
 
@@ -8930,9 +10413,18 @@ yoga
 // yokohama : 2013-12-12 GMO Registry, Inc.
 yokohama
 
+// you : 2015-04-09 Amazon EU S.à r.l.
+you
+
 // youtube : 2014-05-01 Charleston Road Registry Inc.
 youtube
 
+// yun : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD.
+yun
+
+// zappos : 2015-06-25 Amazon EU S.à r.l.
+zappos
+
 // zara : 2014-11-07 Industria de Diseño Textil, S.A. (INDITEX, S.A.)
 zara
 
@@ -8942,14 +10434,19 @@ zero
 // zip : 2014-05-08 Charleston Road Registry Inc.
 zip
 
+// zippo : 2015-07-02 Zadco Company
+zippo
+
 // zone : 2013-11-14 Outer Falls, LLC
 zone
 
 // zuerich : 2014-11-07 Kanton Zürich (Canton of Zurich)
 zuerich
 
+
 // ===END ICANN DOMAINS===
 // ===BEGIN PRIVATE DOMAINS===
+// (Note: these are in alphabetical order by company name)
 
 // Amazon CloudFront : https://aws.amazon.com/cloudfront/
 // Submitted by Donavan Miller <address@hidden> 2013-03-22
@@ -8983,26 +10480,22 @@ elasticbeanstalk.com
 elb.amazonaws.com
 
 // Amazon S3 : https://aws.amazon.com/s3/
-// Submitted by Courtney Eckhardt <address@hidden> 2013-03-22
+// Submitted by Eric Kinolik <address@hidden> 2015-04-08
 s3.amazonaws.com
-s3-us-west-2.amazonaws.com
-s3-us-west-1.amazonaws.com
-s3-eu-west-1.amazonaws.com
+s3-ap-northeast-1.amazonaws.com
 s3-ap-southeast-1.amazonaws.com
 s3-ap-southeast-2.amazonaws.com
-s3-ap-northeast-1.amazonaws.com
+s3-external-1.amazonaws.com
+s3-external-2.amazonaws.com
+s3-fips-us-gov-west-1.amazonaws.com
+s3-eu-central-1.amazonaws.com
+s3-eu-west-1.amazonaws.com
 s3-sa-east-1.amazonaws.com
 s3-us-gov-west-1.amazonaws.com
-s3-fips-us-gov-west-1.amazonaws.com
-s3-website-us-east-1.amazonaws.com
-s3-website-us-west-2.amazonaws.com
-s3-website-us-west-1.amazonaws.com
-s3-website-eu-west-1.amazonaws.com
-s3-website-ap-southeast-1.amazonaws.com
-s3-website-ap-southeast-2.amazonaws.com
-s3-website-ap-northeast-1.amazonaws.com
-s3-website-sa-east-1.amazonaws.com
-s3-website-us-gov-west-1.amazonaws.com
+s3-us-west-1.amazonaws.com
+s3-us-west-2.amazonaws.com
+s3.cn-north-1.amazonaws.com.cn
+s3.eu-central-1.amazonaws.com
 
 // BetaInABox
 // Submitted by address@hidden 2012-09-13
@@ -9070,10 +10563,22 @@ cloudcontrolapp.com
 // co.ca : http://registry.co.ca/
 co.ca
 
+// CDN77.com : http://www.cdn77.com
+// Submitted by Jan Krpes <address@hidden> 2015-07-13
+c.cdn77.org
+cdn77-ssl.net
+r.cdn77.net
+rsc.cdn77.org
+ssl.origin.cdn77-secure.org
+
 // CoDNS B.V.
 co.nl
 co.no
 
+// Commerce Guys, SAS
+// Submitted by Damien Tournoud <address@hidden> 2015-01-22
+*.platform.sh
+
 // Cupcake : https://cupcake.io/
 // Submitted by Jonathan Rudenberg <address@hidden> 2013-10-08
 cupcake.is
@@ -9082,6 +10587,10 @@ cupcake.is
 // Submitted by Andrew Farmer <address@hidden> 2012-10-02
 dreamhosters.com
 
+// DuckDNS : http://www.duckdns.org/
+// Submitted by Richard Harper <address@hidden> 2015-05-17
+duckdns.org
+
 // DynDNS.com : http://www.dyndns.com/services/dns/dyndns/
 dyndns-at-home.com
 dyndns-at-work.com
@@ -9363,6 +10872,66 @@ webhop.org
 worse-than.tv
 writesthisblog.com
 
+// EU.org https://eu.org/
+// Submitted by Pierre Beyssac <address@hidden> 2015-04-17
+
+eu.org
+al.eu.org
+asso.eu.org
+at.eu.org
+au.eu.org
+be.eu.org
+bg.eu.org
+ca.eu.org
+cd.eu.org
+ch.eu.org
+cn.eu.org
+cy.eu.org
+cz.eu.org
+de.eu.org
+dk.eu.org
+edu.eu.org
+ee.eu.org
+es.eu.org
+fi.eu.org
+fr.eu.org
+gr.eu.org
+hr.eu.org
+hu.eu.org
+ie.eu.org
+il.eu.org
+in.eu.org
+int.eu.org
+is.eu.org
+it.eu.org
+jp.eu.org
+kr.eu.org
+lt.eu.org
+lu.eu.org
+lv.eu.org
+mc.eu.org
+me.eu.org
+mk.eu.org
+mt.eu.org
+my.eu.org
+net.eu.org
+ng.eu.org
+nl.eu.org
+no.eu.org
+nz.eu.org
+paris.eu.org
+pl.eu.org
+pt.eu.org
+q-a.eu.org
+ro.eu.org
+ru.eu.org
+se.eu.org
+si.eu.org
+sk.eu.org
+tr.eu.org
+uk.eu.org
+us.eu.org
+
 // Fastly Inc. http://www.fastly.com/
 // Submitted by Vladimir Vuksan <address@hidden> 2013-05-31
 a.ssl.fastly.net
@@ -9379,6 +10948,10 @@ firebaseapp.com
 // Submitted by Jonathan Rudenberg <address@hidden> 2014-07-12
 flynnhub.com
 
+// GDS : 
https://www.gov.uk/service-manual/operations/operating-servicegovuk-subdomains
+// Submitted by David Illsley <address@hidden> 2014-08-28
+service.gov.uk
+
 // GitHub, Inc.
 // Submitted by Ben Toews <address@hidden> 2014-02-06
 github.io
@@ -9392,21 +10965,37 @@ ro.com
 // Submitted by Eduardo Vela <address@hidden> 2014-12-19
 appspot.com
 blogspot.ae
+blogspot.al
+blogspot.am
+blogspot.ba
 blogspot.be
+blogspot.bg
 blogspot.bj
 blogspot.ca
 blogspot.cf
 blogspot.ch
+blogspot.cl
 blogspot.co.at
+blogspot.co.id
 blogspot.co.il
+blogspot.co.ke
 blogspot.co.nz
 blogspot.co.uk
+blogspot.co.za
 blogspot.com
 blogspot.com.ar
 blogspot.com.au
 blogspot.com.br
+blogspot.com.by
+blogspot.com.co
+blogspot.com.cy
+blogspot.com.ee
+blogspot.com.eg
 blogspot.com.es
+blogspot.com.mt
+blogspot.com.ng
 blogspot.com.tr
+blogspot.com.uy
 blogspot.cv
 blogspot.cz
 blogspot.de
@@ -9415,30 +11004,46 @@ blogspot.fi
 blogspot.fr
 blogspot.gr
 blogspot.hk
+blogspot.hr
 blogspot.hu
 blogspot.ie
 blogspot.in
+blogspot.is
 blogspot.it
 blogspot.jp
 blogspot.kr
+blogspot.li
+blogspot.lt
+blogspot.lu
+blogspot.md
+blogspot.mk
 blogspot.mr
 blogspot.mx
+blogspot.my
 blogspot.nl
 blogspot.no
+blogspot.pe
 blogspot.pt
+blogspot.qa
 blogspot.re
 blogspot.ro
+blogspot.rs
 blogspot.ru
 blogspot.se
 blogspot.sg
+blogspot.si
 blogspot.sk
+blogspot.sn
 blogspot.td
 blogspot.tw
+blogspot.ug
+blogspot.vn
 codespot.com
 googleapis.com
 googlecode.com
 pagespeedmobilizer.com
 withgoogle.com
+withyoutube.com
 
 // Heroku : https://www.heroku.com/
 // Submitted by Tom Maher <address@hidden> 2013-05-02
@@ -9462,6 +11067,14 @@ azurewebsites.net
 azure-mobile.net
 cloudapp.net
 
+// Mozilla Foundation : https://mozilla.org/
+// Submited by glob <address@hidden> 2015-07-06
+bmoattachments.org
+
+// Neustar Inc.
+// Submitted by Trung Tran <address@hidden> 2015-04-23
+4u.com
+
 // NFSN, Inc. : https://www.NearlyFreeSpeech.NET/
 // Submitted by Jeff Wheelhouse <address@hidden> 2014-02-02
 nfshost.com
@@ -9490,17 +11103,38 @@ poznan.pl
 wroc.pl
 zakopane.pl
 
+// Pantheon Systems, Inc. : https://pantheon.io/
+// Submitted by Gary Dylina <address@hidden> 2015-09-14
+pantheon.io
+gotpantheon.com
+
+// priv.at : http://www.nic.priv.at/
+// Submitted by registry <address@hidden> 2008-06-09
+priv.at
+
+// QA2
+// Submitted by Daniel Dent (https://www.danieldent.com/) 2015-07-16
+qa2.com
+
 // Red Hat, Inc. OpenShift : https://openshift.redhat.com/
 // Submitted by Tim Kramer <address@hidden> 2012-10-24
 rhcloud.com
 
-// GDS : 
https://www.gov.uk/service-manual/operations/operating-servicegovuk-subdomains
-// Submitted by David Illsley <address@hidden> 2014-08-28
-service.gov.uk
+// Sandstorm Development Group, Inc. : https://sandcats.io/
+// Submitted by Asheesh Laroia <address@hidden> 2015-07-21
+sandcats.io
 
-// priv.at : http://www.nic.priv.at/
-// Submitted by registry <address@hidden> 2008-06-09
-priv.at
+// Service Online LLC : http://drs.ua/
+// Submitted by Serhii Bulakh <address@hidden> 2015-07-30
+biz.ua
+co.ua
+pp.ua
+
+// SinaAppEngine : http://sae.sina.com.cn/
+// Submitted by SinaAppEngine <address@hidden> 2015-02-02
+sinaapp.com
+vipsinaapp.com
+1kapp.com
 
 // TASK geographical domains (www.task.gda.pl/uslugi/dns)
 gda.pl
diff --git a/leim/README b/leim/README
index 6a1fb32..d37be97 100644
--- a/leim/README
+++ b/leim/README
@@ -12,13 +12,13 @@ CXTERM-DIC:
 This directory contains source dictionaries (TIT format) for Chinese
 input method distributed with cxterm (Chinese version xterm).  These
 dictionaries are automatically converted to Quail packages (Emacs Lisp
-source files) by `make'.
+source files) by 'make'.
 
 MISC-DIC:
 
 This directory contains various dictionaries for Chinese input
 methods.  These dictionaries are automatically converted to Quail
-packages (Emacs Lisp source files) by `make'.
+packages (Emacs Lisp source files) by 'make'.
 
 SKK-DIC:
 
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index a175967..2b65cb2 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -24,7 +24,7 @@ SHELL = @SHELL@
 EMACS = ../src/emacs${EXEEXT}
 EMACSOPT = -batch --no-site-file --no-site-lisp
 
-# ==================== Things `configure' will edit ====================
+# ==================== Things 'configure' will edit ====================
 
 address@hidden@
 address@hidden@
@@ -83,31 +83,31 @@ address@hidden@
 # subdirectories of this directory.  The default values for many of
 # the variables below are expressed in terms of this one, so you may
 # not need to change them.  This is set with the --prefix option to
-# `../configure'.
+# '../configure'.
 address@hidden@
 
-# Like `prefix', but used for architecture-specific files.  This is
-# set with the --exec-prefix option to `../configure'.
+# Like 'prefix', but used for architecture-specific files.  This is
+# set with the --exec-prefix option to '../configure'.
 address@hidden@
 
 # Where to install Emacs and other binaries that people will want to
 # run directly (like etags).  This is set with the --bindir option
-# to `../configure'.
+# to '../configure'.
 address@hidden@
 
 # Where to install and expect executable files to be run by Emacs
 # rather than directly by users, and other architecture-dependent
 # data.  ${archlibdir} is usually below this.  This is set with the
-# --libexecdir option to `../configure'.
+# --libexecdir option to '../configure'.
 address@hidden@
 
 # Directory for local state files for all programs.
 address@hidden@
 
 # Where to find the source code.  This is set by the configure
-# script's `--srcdir' option.  However, the value of ${srcdir} in
+# script's '--srcdir' option.  However, the value of ${srcdir} in
 # this makefile is not identical to what was specified with --srcdir,
-# since the variable here has `/lib-src' added at the end.
+# since the variable here has '/lib-src' added at the end.
 
 # We use $(srcdir) explicitly in dependencies so as not to depend on VPATH.
 address@hidden@
@@ -127,7 +127,7 @@ address@hidden@
 # This path usually includes the Emacs version and configuration name,
 # so that multiple configurations for multiple versions of Emacs may
 # be installed at once.  This can be set with the --archlibdir option
-# to `../configure'.
+# to '../configure'.
 address@hidden@
 
 address@hidden@
diff --git a/lib-src/etags.c b/lib-src/etags.c
index f34c985..791722d 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -361,8 +361,9 @@ static void analyze_regex (char *);
 static void free_regexps (void);
 static void regex_tag_multiline (void);
 static void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
+static void verror (char const *, va_list) ATTRIBUTE_FORMAT_PRINTF (1, 0);
 static _Noreturn void suggest_asking_for_help (void);
-_Noreturn void fatal (const char *, const char *);
+static _Noreturn void fatal (char const *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
 static _Noreturn void pfatal (const char *);
 static void add_node (node *, node **);
 
@@ -1091,7 +1092,7 @@ main (int argc, char **argv)
        ++current_arg;
        ++file_count;
        if (parsing_stdin)
-         fatal ("cannot parse standard input more than once", (char *)NULL);
+         fatal ("cannot parse standard input more than once");
        parsing_stdin = true;
        break;
 
@@ -1255,8 +1256,8 @@ main (int argc, char **argv)
              if (streq (this_file, "-"))
                {
                  if (parsing_stdin)
-                   fatal ("cannot parse standard input AND read file names 
from it",
-                          (char *)NULL);
+                   fatal ("cannot parse standard input "
+                          "AND read file names from it");
                  while (readline_internal (&filename_lb, stdin, "-") > 0)
                    process_file_name (filename_lb.buffer, lang);
                }
@@ -1267,6 +1268,8 @@ main (int argc, char **argv)
           this_file = argbuffer[i].what;
           process_file (stdin, this_file, lang);
           break;
+       default:
+         error ("internal error: arg_type");
        }
     }
 
@@ -1324,7 +1327,7 @@ main (int argc, char **argv)
          z = stpcpy (z, tagfile);
          strcpy (z, ";rm OTAGS");
          if (system (cmd) != EXIT_SUCCESS)
-           fatal ("failed to execute shell command", (char *)NULL);
+           fatal ("failed to execute shell command");
        }
       free (cmd);
       append_to_tagfile = true;
@@ -2753,6 +2756,9 @@ consider_token (char *str, int len, int c, int *c_extp,
         case st_C_struct:
         case st_C_enum:
           typdef = ttypeseen;
+          break;
+        default:
+          break;
         }
        break;
      case ttypeseen:
@@ -2769,8 +2775,11 @@ consider_token (char *str, int len, int c, int *c_extp,
         case st_C_struct:
         case st_C_enum:
           return false;
+        default:
+          return true;
         }
-       return true;
+     default:
+       break;
      }
 
    switch (toktype)
@@ -2803,6 +2812,8 @@ consider_token (char *str, int len, int c, int *c_extp,
             fvdef = fvnone;
         }
        return false;
+     default:
+       break;
      }
 
    if (structdef == skeyseen)
@@ -2826,6 +2837,8 @@ consider_token (char *str, int len, int c, int *c_extp,
         case st_C_objimpl:
           objdef = oimplementation;
           return false;
+        default:
+          break;
         }
        break;
      case oimplementation:
@@ -2887,6 +2900,8 @@ consider_token (char *str, int len, int c, int *c_extp,
           objdef = onone;
         }
        return false;
+     default:
+       break;
      }
 
    /* A function, variable or enum constant? */
@@ -2942,6 +2957,8 @@ consider_token (char *str, int len, int c, int *c_extp,
                   return false;
                 }
               break;
+            default:
+              break;
             }
          /* FALLTHRU */
          case fvnameseen:
@@ -2958,8 +2975,12 @@ consider_token (char *str, int len, int c, int *c_extp,
          fvdef = fvnameseen;   /* function or variable */
          *is_func_or_var = true;
          return true;
+        default:
+          break;
        }
       break;
+     default:
+       break;
     }
 
   return false;
@@ -3469,6 +3490,8 @@ C_entries (int c_ext, FILE *inf)
                          fvdef = fignore;
                        }
                      break;
+                   default:
+                     break;
                    }
                  if (structdef == stagseen && !cjava)
                    {
@@ -3479,6 +3502,8 @@ C_entries (int c_ext, FILE *inf)
                case dsharpseen:
                  savetoken = token;
                  break;
+               default:
+                 break;
                }
              if (!yacc_rules || lp == newlb.buffer + 1)
                {
@@ -3507,7 +3532,7 @@ C_entries (int c_ext, FILE *inf)
            break;
          switch (objdef)
            {
-           case  otagseen:
+           case otagseen:
              objdef = oignore;
              make_C_tag (true); /* an Objective C class */
              break;
@@ -3521,6 +3546,8 @@ C_entries (int c_ext, FILE *inf)
                  strcpy (token_name.buffer + toklen, ":");
                }
              break;
+           default:
+             break;
            }
          if (structdef == stagseen)
            {
@@ -3598,6 +3625,8 @@ C_entries (int c_ext, FILE *inf)
              make_C_tag (true); /* an Objective C method */
              objdef = oinbody;
              break;
+           default:
+             break;
            }
          switch (fvdef)
            {
@@ -3671,6 +3700,8 @@ C_entries (int c_ext, FILE *inf)
                  fvdef = fvnone;
                }
              break;
+           default:
+             break;
            }
          break;
        case '(':
@@ -3704,6 +3735,8 @@ C_entries (int c_ext, FILE *inf)
            case flistseen:
              fvdef = finlist;
              break;
+           default:
+             break;
            }
          parlev++;
          break;
@@ -3729,6 +3762,8 @@ C_entries (int c_ext, FILE *inf)
                case finlist:
                  fvdef = flistseen;
                  break;
+               default:
+                 break;
                }
              if (!instruct
                  && (typdef == tend
@@ -3800,6 +3835,8 @@ C_entries (int c_ext, FILE *inf)
                    bracelev = -1;
                }
              break;
+           default:
+             break;
            }
          switch (structdef)
            {
@@ -3813,6 +3850,8 @@ C_entries (int c_ext, FILE *inf)
              structdef = snone;
              make_C_tag (false);  /* a struct or enum */
              break;
+           default:
+             break;
            }
          bracelev += 1;
          break;
@@ -6351,10 +6390,13 @@ skip_name (char *cp)
 }
 
 /* Print error message and exit.  */
-void
-fatal (const char *s1, const char *s2)
+static void
+fatal (char const *format, ...)
 {
-  error (s1, s2);
+  va_list ap;
+  va_start (ap, format);
+  verror (format, ap);
+  va_end (ap);
   exit (EXIT_FAILURE);
 }
 
@@ -6379,10 +6421,16 @@ error (const char *format, ...)
 {
   va_list ap;
   va_start (ap, format);
+  verror (format, ap);
+  va_end (ap);
+}
+
+static void
+verror (char const *format, va_list ap)
+{
   fprintf (stderr, "%s: ", progname);
   vfprintf (stderr, format, ap);
   fprintf (stderr, "\n");
-  va_end (ap);
 }
 
 /* Return a newly-allocated string whose contents
@@ -6673,7 +6721,7 @@ xmalloc (size_t size)
 {
   void *result = malloc (size);
   if (result == NULL)
-    fatal ("virtual memory exhausted", (char *)NULL);
+    fatal ("virtual memory exhausted");
   return result;
 }
 
@@ -6682,7 +6730,7 @@ xrealloc (void *ptr, size_t size)
 {
   void *result = realloc (ptr, size);
   if (result == NULL)
-    fatal ("virtual memory exhausted", (char *)NULL);
+    fatal ("virtual memory exhausted");
   return result;
 }
 
diff --git a/lib-src/movemail.c b/lib-src/movemail.c
index 231bc22..84c8ce2 100644
--- a/lib-src/movemail.c
+++ b/lib-src/movemail.c
@@ -174,8 +174,6 @@ main (int argc, char **argv)
   int desc;
 #endif /* not MAIL_USE_SYSTEM_LOCK */
 
-  char *spool_name = 0;
-
 #ifdef MAIL_USE_POP
   bool pop_reverse_order = false;
 # define ARGSTR "pr"
@@ -246,13 +244,14 @@ main (int argc, char **argv)
 #ifndef DISABLE_DIRECT_ACCESS
 
   char *lockname = 0;
+  char *spool_name = 0;
 
-#ifndef MAIL_USE_SYSTEM_LOCK
 #ifdef MAIL_USE_MAILLOCK
   spool_name = mail_spool_name (inname);
 #endif
   if (! spool_name)
     {
+#ifndef MAIL_USE_SYSTEM_LOCK
       /* Use a lock file named after our first argument with .lock appended:
         If it exists, the mail file is locked.  */
       /* Note: this locking mechanism is *required* by the mailer
@@ -323,8 +322,8 @@ main (int argc, char **argv)
        }
 
       delete_lockname = lockname;
-    }
 #endif /* not MAIL_USE_SYSTEM_LOCK */
+    }
 
 #ifdef SIGCHLD
   signal (SIGCHLD, SIG_DFL);
diff --git a/lib-src/rcs2log b/lib-src/rcs2log
index 2427603..d1bd369 100755
--- a/lib-src/rcs2log
+++ b/lib-src/rcs2log
@@ -414,7 +414,7 @@ sort $SORT_K_OPTIONS </dev/null 2>/dev/null || 
SORT_K_OPTIONS='+2 -4r +4 +0'
 
 
 # Get the full name of each author the logs mention, and set 
initialize_fullname
-# to awk code that initializes the `fullname' awk associative array.
+# to awk code that initializes the 'fullname' awk associative array.
 # Warning: foreign authors (i.e. not known in the passwd file) are mishandled;
 # you have to fix the resulting output by hand.
 
@@ -546,8 +546,8 @@ esac
 
 # Function to print a single log line.
 # We don't use awk functions, to stay compatible with old awk versions.
-# `Log' is the log message.
-# `files' contains the affected files.
+# 'Log' is the log message.
+# 'files' contains the affected files.
 printlogline='{
 
        # Following the GNU coding standards, rewrite
@@ -587,7 +587,7 @@ printlogline='{
        }
 }'
 
-# Pattern to match the `revision' line of rlog output.
+# Pattern to match the 'revision' line of rlog output.
 rlog_revision_pattern='^revision [0-9]+\.[0-9]+(\.[0-9]+\.[0-9]+)*(['"$tab"' 
]+locked by: [^'"$tab"' $,.0-9:;@]*[^'"$tab"' $,:;@][^'"$tab"' 
$,.0-9:;@]*;)?['"$tab"' ]*$'
 
 case $hostname in
diff --git a/lib/acl-internal.c b/lib/acl-internal.c
index 1eaa671..c1b7017 100644
--- a/lib/acl-internal.c
+++ b/lib/acl-internal.c
@@ -1,4 +1,4 @@
-/* Test whether a file has a nontrivial access control list.
+/* Test whether a file has a nontrivial ACL.  -*- coding: utf-8 -*-
 
    Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
diff --git a/lib/acl-internal.h b/lib/acl-internal.h
index 38a4ab2..560d146 100644
--- a/lib/acl-internal.h
+++ b/lib/acl-internal.h
@@ -1,4 +1,4 @@
-/* Internal implementation of access control lists.
+/* Internal implementation of access control lists.  -*- coding: utf-8 -*-
 
    Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
diff --git a/lib/c-ctype.c b/lib/c-ctype.c
index 1fb5fe6..5d9d4d8 100644
--- a/lib/c-ctype.c
+++ b/lib/c-ctype.c
@@ -1,395 +1,3 @@
-/* Character handling in C locale.
-
-   Copyright 2000-2003, 2006, 2009-2015 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>
-
-/* Specification.  */
-#define NO_C_CTYPE_MACROS
+#define C_CTYPE_INLINE _GL_EXTERN_INLINE
 #include "c-ctype.h"
-
-/* The function isascii is not locale dependent. Its use in EBCDIC is
-   questionable. */
-bool
-c_isascii (int c)
-{
-  return (c >= 0x00 && c <= 0x7f);
-}
-
-bool
-c_isalnum (int c)
-{
-#if C_CTYPE_CONSECUTIVE_DIGITS \
-    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-  return ((c >= '0' && c <= '9')
-          || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'));
-#else
-  return ((c >= '0' && c <= '9')
-          || (c >= 'A' && c <= 'Z')
-          || (c >= 'a' && c <= 'z'));
-#endif
-#else
-  switch (c)
-    {
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isalpha (int c)
-{
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-  return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z');
-#else
-  return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
-#endif
-#else
-  switch (c)
-    {
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isblank (int c)
-{
-  return (c == ' ' || c == '\t');
-}
-
-bool
-c_iscntrl (int c)
-{
-#if C_CTYPE_ASCII
-  return ((c & ~0x1f) == 0 || c == 0x7f);
-#else
-  switch (c)
-    {
-    case ' ': case '!': case '"': case '#': case '$': case '%':
-    case '&': case '\'': case '(': case ')': case '*': case '+':
-    case ',': case '-': case '.': case '/':
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case ':': case ';': case '<': case '=': case '>': case '?':
-    case '@':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case '[': case '\\': case ']': case '^': case '_': case '`':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-    case '{': case '|': case '}': case '~':
-      return 0;
-    default:
-      return 1;
-    }
-#endif
-}
-
-bool
-c_isdigit (int c)
-{
-#if C_CTYPE_CONSECUTIVE_DIGITS
-  return (c >= '0' && c <= '9');
-#else
-  switch (c)
-    {
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_islower (int c)
-{
-#if C_CTYPE_CONSECUTIVE_LOWERCASE
-  return (c >= 'a' && c <= 'z');
-#else
-  switch (c)
-    {
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isgraph (int c)
-{
-#if C_CTYPE_ASCII
-  return (c >= '!' && c <= '~');
-#else
-  switch (c)
-    {
-    case '!': case '"': case '#': case '$': case '%': case '&':
-    case '\'': case '(': case ')': case '*': case '+': case ',':
-    case '-': case '.': case '/':
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case ':': case ';': case '<': case '=': case '>': case '?':
-    case '@':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case '[': case '\\': case ']': case '^': case '_': case '`':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-    case '{': case '|': case '}': case '~':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isprint (int c)
-{
-#if C_CTYPE_ASCII
-  return (c >= ' ' && c <= '~');
-#else
-  switch (c)
-    {
-    case ' ': case '!': case '"': case '#': case '$': case '%':
-    case '&': case '\'': case '(': case ')': case '*': case '+':
-    case ',': case '-': case '.': case '/':
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case ':': case ';': case '<': case '=': case '>': case '?':
-    case '@':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case '[': case '\\': case ']': case '^': case '_': case '`':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-    case '{': case '|': case '}': case '~':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_ispunct (int c)
-{
-#if C_CTYPE_ASCII
-  return ((c >= '!' && c <= '~')
-          && !((c >= '0' && c <= '9')
-               || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')));
-#else
-  switch (c)
-    {
-    case '!': case '"': case '#': case '$': case '%': case '&':
-    case '\'': case '(': case ')': case '*': case '+': case ',':
-    case '-': case '.': case '/':
-    case ':': case ';': case '<': case '=': case '>': case '?':
-    case '@':
-    case '[': case '\\': case ']': case '^': case '_': case '`':
-    case '{': case '|': case '}': case '~':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isspace (int c)
-{
-  return (c == ' ' || c == '\t'
-          || c == '\n' || c == '\v' || c == '\f' || c == '\r');
-}
-
-bool
-c_isupper (int c)
-{
-#if C_CTYPE_CONSECUTIVE_UPPERCASE
-  return (c >= 'A' && c <= 'Z');
-#else
-  switch (c)
-    {
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isxdigit (int c)
-{
-#if C_CTYPE_CONSECUTIVE_DIGITS \
-    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-  return ((c >= '0' && c <= '9')
-          || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F'));
-#else
-  return ((c >= '0' && c <= '9')
-          || (c >= 'A' && c <= 'F')
-          || (c >= 'a' && c <= 'f'));
-#endif
-#else
-  switch (c)
-    {
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-int
-c_tolower (int c)
-{
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-  return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
-#else
-  switch (c)
-    {
-    case 'A': return 'a';
-    case 'B': return 'b';
-    case 'C': return 'c';
-    case 'D': return 'd';
-    case 'E': return 'e';
-    case 'F': return 'f';
-    case 'G': return 'g';
-    case 'H': return 'h';
-    case 'I': return 'i';
-    case 'J': return 'j';
-    case 'K': return 'k';
-    case 'L': return 'l';
-    case 'M': return 'm';
-    case 'N': return 'n';
-    case 'O': return 'o';
-    case 'P': return 'p';
-    case 'Q': return 'q';
-    case 'R': return 'r';
-    case 'S': return 's';
-    case 'T': return 't';
-    case 'U': return 'u';
-    case 'V': return 'v';
-    case 'W': return 'w';
-    case 'X': return 'x';
-    case 'Y': return 'y';
-    case 'Z': return 'z';
-    default: return c;
-    }
-#endif
-}
-
-int
-c_toupper (int c)
-{
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-  return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
-#else
-  switch (c)
-    {
-    case 'a': return 'A';
-    case 'b': return 'B';
-    case 'c': return 'C';
-    case 'd': return 'D';
-    case 'e': return 'E';
-    case 'f': return 'F';
-    case 'g': return 'G';
-    case 'h': return 'H';
-    case 'i': return 'I';
-    case 'j': return 'J';
-    case 'k': return 'K';
-    case 'l': return 'L';
-    case 'm': return 'M';
-    case 'n': return 'N';
-    case 'o': return 'O';
-    case 'p': return 'P';
-    case 'q': return 'Q';
-    case 'r': return 'R';
-    case 's': return 'S';
-    case 't': return 'T';
-    case 'u': return 'U';
-    case 'v': return 'V';
-    case 'w': return 'W';
-    case 'x': return 'X';
-    case 'y': return 'Y';
-    case 'z': return 'Z';
-    default: return c;
-    }
-#endif
-}
diff --git a/lib/c-ctype.h b/lib/c-ctype.h
index 4764473..50ebbb5 100644
--- a/lib/c-ctype.h
+++ b/lib/c-ctype.h
@@ -25,6 +25,13 @@ along with this program; if not, see 
<http://www.gnu.org/licenses/>.  */
 
 #include <stdbool.h>
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef C_CTYPE_INLINE
+# define C_CTYPE_INLINE _GL_INLINE
+#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -39,38 +46,6 @@ extern "C" {
    characters.  */
 
 
-/* Check whether the ASCII optimizations apply. */
-
-/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that
-   '0', '1', ..., '9' have consecutive integer values.  */
-#define C_CTYPE_CONSECUTIVE_DIGITS 1
-
-#if ('A' <= 'Z') \
-    && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \
-    && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \
-    && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \
-    && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \
-    && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \
-    && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \
-    && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \
-    && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \
-    && ('Y' + 1 == 'Z')
-#define C_CTYPE_CONSECUTIVE_UPPERCASE 1
-#endif
-
-#if ('a' <= 'z') \
-    && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \
-    && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \
-    && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \
-    && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \
-    && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \
-    && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \
-    && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \
-    && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \
-    && ('y' + 1 == 'z')
-#define C_CTYPE_CONSECUTIVE_LOWERCASE 1
-#endif
-
 #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
     && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
     && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
@@ -96,11 +71,99 @@ extern "C" {
     && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
 /* The character set is ASCII or one of its variants or extensions, not EBCDIC.
    Testing the value of '\n' and '\r' is not relevant.  */
-#define C_CTYPE_ASCII 1
+# define C_CTYPE_ASCII 1
+#elif ! (' ' == '\x40' && '0' == '\xf0'                     \
+         && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \
+         && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2')
+# error "Only ASCII and EBCDIC are supported"
+#endif
+
+#define _C_CTYPE_SIGNED_EBCDIC ('A' < 0)
+
+#if C_CTYPE_ASCII
+# define _C_CTYPE_CNTRL \
+    case '\x00': case '\x01': case '\x02': case '\x03': \
+    case '\x04': case '\x05': case '\x06': case '\x07': \
+    case '\x08': case '\x09': case '\x0a': case '\x0b': \
+    case '\x0c': case '\x0d': case '\x0e': case '\x0f': \
+    case '\x10': case '\x11': case '\x12': case '\x13': \
+    case '\x14': case '\x15': case '\x16': case '\x17': \
+    case '\x18': case '\x19': case '\x1a': case '\x1b': \
+    case '\x1c': case '\x1d': case '\x1e': case '\x1f': \
+    case '\x7f'
+#else
+   /* Use EBCDIC code page 1047's assignments for ASCII control chars;
+      assume all EBCDIC code pages agree about these assignments.  */
+# define _C_CTYPE_CNTRL \
+    case '\x00': case '\x01': case '\x02': case '\x03': \
+    case '\x05': case '\x07': case '\x0b': case '\x0c': \
+    case '\x0d': case '\x0e': case '\x0f': case '\x10': \
+    case '\x11': case '\x12': case '\x13': case '\x16': \
+    case '\x18': case '\x19': case '\x1c': case '\x1d': \
+    case '\x1e': case '\x1f': case '\x25': case '\x26': \
+    case '\x27': case '\x2d': case '\x2e': case '\x2f': \
+    case '\x32': case '\x37': case '\x3c': case '\x3d': \
+    case '\x3f'
 #endif
 
+/* Cases for hex letter digits, digits, lower, and upper, offset by N.  */
+
+#define _C_CTYPE_A_THRU_F_N(n) \
+   case 'a' + (n): case 'b' + (n): case 'c' + (n): case 'd' + (n): \
+   case 'e' + (n): case 'f' + (n): \
+   case 'A' + (n): case 'B' + (n): case 'C' + (n): case 'D' + (n): \
+   case 'E' + (n): case 'F' + (n)
+#define _C_CTYPE_DIGIT_N(n) \
+   case '0' + (n): case '1' + (n): case '2' + (n): case '3' + (n): \
+   case '4' + (n): case '5' + (n): case '6' + (n): case '7' + (n): \
+   case '8' + (n): case '9' + (n)
+#define _C_CTYPE_LOWER_N(n) \
+   case 'a' + (n): case 'b' + (n): case 'c' + (n): case 'd' + (n): \
+   case 'e' + (n): case 'f' + (n): case 'g' + (n): case 'h' + (n): \
+   case 'i' + (n): case 'j' + (n): case 'k' + (n): case 'l' + (n): \
+   case 'm' + (n): case 'n' + (n): case 'o' + (n): case 'p' + (n): \
+   case 'q' + (n): case 'r' + (n): case 's' + (n): case 't' + (n): \
+   case 'u' + (n): case 'v' + (n): case 'w' + (n): case 'x' + (n): \
+   case 'y' + (n): case 'z' + (n)
+#define _C_CTYPE_UPPER_N(n) \
+   case 'A' + (n): case 'B' + (n): case 'C' + (n): case 'D' + (n): \
+   case 'E' + (n): case 'F' + (n): case 'G' + (n): case 'H' + (n): \
+   case 'I' + (n): case 'J' + (n): case 'K' + (n): case 'L' + (n): \
+   case 'M' + (n): case 'N' + (n): case 'O' + (n): case 'P' + (n): \
+   case 'Q' + (n): case 'R' + (n): case 'S' + (n): case 'T' + (n): \
+   case 'U' + (n): case 'V' + (n): case 'W' + (n): case 'X' + (n): \
+   case 'Y' + (n): case 'Z' + (n)
+
+/* Given MACRO_N, expand to all the cases for the corresponding class.  */
+#if _C_CTYPE_SIGNED_EBCDIC
+# define _C_CTYPE_CASES(macro_n) macro_n (0): macro_n (256)
+#else
+# define _C_CTYPE_CASES(macro_n) macro_n (0)
+#endif
 
-/* Function declarations. */
+/* Cases for hex letter digits, digits, lower, and upper, with another
+   case for unsigned char if the original char is negative.  */
+
+#define _C_CTYPE_A_THRU_F _C_CTYPE_CASES (_C_CTYPE_A_THRU_F_N)
+#define _C_CTYPE_DIGIT _C_CTYPE_CASES (_C_CTYPE_DIGIT_N)
+#define _C_CTYPE_LOWER _C_CTYPE_CASES (_C_CTYPE_LOWER_N)
+#define _C_CTYPE_UPPER _C_CTYPE_CASES (_C_CTYPE_UPPER_N)
+
+/* The punct class differs because some punctuation characters may be
+   negative while others are nonnegative.  Instead of attempting to
+   define _C_CTYPE_PUNCT, define just the plain chars here, and do any
+   cases-plus-256 by hand after using this macro.  */
+#define _C_CTYPE_PUNCT_PLAIN \
+   case '!': case '"': case '#': case '$':  \
+   case '%': case '&': case '\'': case '(': \
+   case ')': case '*': case '+': case ',':  \
+   case '-': case '.': case '/': case ':':  \
+   case ';': case '<': case '=': case '>':  \
+   case '?': case '@': case '[': case '\\': \
+   case ']': case '^': case '_': case '`':  \
+   case '{': case '|': case '}': case '~'
+
+/* Function definitions.  */
 
 /* Unlike the functions in <ctype.h>, which require an argument in the range
    of the 'unsigned char' type, the functions here operate on values that are
@@ -117,179 +180,608 @@ extern "C" {
          if (c_isalpha (*s)) ...
  */
 
-extern bool c_isascii (int c) _GL_ATTRIBUTE_CONST; /* not locale dependent */
+C_CTYPE_INLINE bool
+c_isalnum (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_LOWER:
+    _C_CTYPE_UPPER:
+      return true;
+
+    default:
+      return false;
+    }
+}
 
-extern bool c_isalnum (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_isalpha (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_isblank (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_iscntrl (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_isdigit (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_islower (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_isgraph (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_isprint (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_ispunct (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_isspace (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_isupper (int c) _GL_ATTRIBUTE_CONST;
-extern bool c_isxdigit (int c) _GL_ATTRIBUTE_CONST;
+C_CTYPE_INLINE bool
+c_isalpha (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_LOWER:
+    _C_CTYPE_UPPER:
+      return true;
+
+    default:
+      return false;
+    }
+}
 
-extern int c_tolower (int c) _GL_ATTRIBUTE_CONST;
-extern int c_toupper (int c) _GL_ATTRIBUTE_CONST;
+/* The function isascii is not locale dependent.
+   Its use in EBCDIC is questionable. */
+C_CTYPE_INLINE bool
+c_isascii (int c)
+{
+  switch (c)
+    {
+    case ' ':
+    _C_CTYPE_CNTRL:
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_LOWER:
+    _C_CTYPE_UPPER:
+
+    _C_CTYPE_PUNCT_PLAIN:
+#if '!' < 0
+    case '!' + 256:
+#endif
+#if '"' < 0
+    case '"' + 256:
+#endif
+#if '#' < 0
+    case '#' + 256:
+#endif
+#if '$' < 0
+    case '$' + 256:
+#endif
+#if '%' < 0
+    case '%' + 256:
+#endif
+#if '&' < 0
+    case '&' + 256:
+#endif
+#if '\'' < 0
+    case '\'' + 256:
+#endif
+#if '(' < 0
+    case '(' + 256:
+#endif
+#if ')' < 0
+    case ')' + 256:
+#endif
+#if '*' < 0
+    case '*' + 256:
+#endif
+#if '+' < 0
+    case '+' + 256:
+#endif
+#if ',' < 0
+    case ',' + 256:
+#endif
+#if '-' < 0
+    case '-' + 256:
+#endif
+#if '.' < 0
+    case '.' + 256:
+#endif
+#if '/' < 0
+    case '/' + 256:
+#endif
+#if ':' < 0
+    case ':' + 256:
+#endif
+#if ';' < 0
+    case ';' + 256:
+#endif
+#if '<' < 0
+    case '<' + 256:
+#endif
+#if '=' < 0
+    case '=' + 256:
+#endif
+#if '>' < 0
+    case '>' + 256:
+#endif
+#if '?' < 0
+    case '?' + 256:
+#endif
+#if '@' < 0
+    case '@' + 256:
+#endif
+#if '[' < 0
+    case '[' + 256:
+#endif
+#if '\\' < 0
+    case '\\' + 256:
+#endif
+#if ']' < 0
+    case ']' + 256:
+#endif
+#if '^' < 0
+    case '^' + 256:
+#endif
+#if '_' < 0
+    case '_' + 256:
+#endif
+#if '`' < 0
+    case '`' + 256:
+#endif
+#if '{' < 0
+    case '{' + 256:
+#endif
+#if '|' < 0
+    case '|' + 256:
+#endif
+#if '}' < 0
+    case '}' + 256:
+#endif
+#if '~' < 0
+    case '~' + 256:
+#endif
+      return true;
 
+    default:
+      return false;
+    }
+}
 
-#if (defined __GNUC__ && !defined __STRICT_ANSI__ && defined __OPTIMIZE__ \
-     && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS)
+C_CTYPE_INLINE bool
+c_isblank (int c)
+{
+  return c == ' ' || c == '\t';
+}
 
-/* ASCII optimizations. */
+C_CTYPE_INLINE bool
+c_iscntrl (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_CNTRL:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#undef c_isascii
-#define c_isascii(c) \
-  ({ int __c = (c); \
-     (__c >= 0x00 && __c <= 0x7f); \
-   })
+C_CTYPE_INLINE bool
+c_isdigit (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_DIGIT:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#if C_CTYPE_CONSECUTIVE_DIGITS \
-    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-#undef c_isalnum
-#define c_isalnum(c) \
-  ({ int __c = (c); \
-     ((__c >= '0' && __c <= '9') \
-      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \
-   })
-#else
-#undef c_isalnum
-#define c_isalnum(c) \
-  ({ int __c = (c); \
-     ((__c >= '0' && __c <= '9') \
-      || (__c >= 'A' && __c <= 'Z') \
-      || (__c >= 'a' && __c <= 'z')); \
-   })
+C_CTYPE_INLINE bool
+c_isgraph (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_LOWER:
+    _C_CTYPE_UPPER:
+
+    _C_CTYPE_PUNCT_PLAIN:
+#if '!' < 0
+    case '!' + 256:
 #endif
+#if '"' < 0
+    case '"' + 256:
 #endif
-
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-#undef c_isalpha
-#define c_isalpha(c) \
-  ({ int __c = (c); \
-     ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \
-   })
-#else
-#undef c_isalpha
-#define c_isalpha(c) \
-  ({ int __c = (c); \
-     ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \
-   })
+#if '#' < 0
+    case '#' + 256:
+#endif
+#if '$' < 0
+    case '$' + 256:
+#endif
+#if '%' < 0
+    case '%' + 256:
+#endif
+#if '&' < 0
+    case '&' + 256:
+#endif
+#if '\'' < 0
+    case '\'' + 256:
+#endif
+#if '(' < 0
+    case '(' + 256:
+#endif
+#if ')' < 0
+    case ')' + 256:
+#endif
+#if '*' < 0
+    case '*' + 256:
+#endif
+#if '+' < 0
+    case '+' + 256:
+#endif
+#if ',' < 0
+    case ',' + 256:
+#endif
+#if '-' < 0
+    case '-' + 256:
+#endif
+#if '.' < 0
+    case '.' + 256:
+#endif
+#if '/' < 0
+    case '/' + 256:
+#endif
+#if ':' < 0
+    case ':' + 256:
+#endif
+#if ';' < 0
+    case ';' + 256:
+#endif
+#if '<' < 0
+    case '<' + 256:
+#endif
+#if '=' < 0
+    case '=' + 256:
+#endif
+#if '>' < 0
+    case '>' + 256:
+#endif
+#if '?' < 0
+    case '?' + 256:
+#endif
+#if '@' < 0
+    case '@' + 256:
+#endif
+#if '[' < 0
+    case '[' + 256:
+#endif
+#if '\\' < 0
+    case '\\' + 256:
+#endif
+#if ']' < 0
+    case ']' + 256:
+#endif
+#if '^' < 0
+    case '^' + 256:
+#endif
+#if '_' < 0
+    case '_' + 256:
+#endif
+#if '`' < 0
+    case '`' + 256:
+#endif
+#if '{' < 0
+    case '{' + 256:
+#endif
+#if '|' < 0
+    case '|' + 256:
+#endif
+#if '}' < 0
+    case '}' + 256:
 #endif
+#if '~' < 0
+    case '~' + 256:
 #endif
+      return true;
 
-#undef c_isblank
-#define c_isblank(c) \
-  ({ int __c = (c); \
-     (__c == ' ' || __c == '\t'); \
-   })
+    default:
+      return false;
+    }
+}
 
-#if C_CTYPE_ASCII
-#undef c_iscntrl
-#define c_iscntrl(c) \
-  ({ int __c = (c); \
-     ((__c & ~0x1f) == 0 || __c == 0x7f); \
-   })
-#endif
+C_CTYPE_INLINE bool
+c_islower (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_LOWER:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#if C_CTYPE_CONSECUTIVE_DIGITS
-#undef c_isdigit
-#define c_isdigit(c) \
-  ({ int __c = (c); \
-     (__c >= '0' && __c <= '9'); \
-   })
+C_CTYPE_INLINE bool
+c_isprint (int c)
+{
+  switch (c)
+    {
+    case ' ':
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_LOWER:
+    _C_CTYPE_UPPER:
+
+    _C_CTYPE_PUNCT_PLAIN:
+#if '!' < 0
+    case '!' + 256:
 #endif
-
-#if C_CTYPE_CONSECUTIVE_LOWERCASE
-#undef c_islower
-#define c_islower(c) \
-  ({ int __c = (c); \
-     (__c >= 'a' && __c <= 'z'); \
-   })
+#if '"' < 0
+    case '"' + 256:
 #endif
-
-#if C_CTYPE_ASCII
-#undef c_isgraph
-#define c_isgraph(c) \
-  ({ int __c = (c); \
-     (__c >= '!' && __c <= '~'); \
-   })
+#if '#' < 0
+    case '#' + 256:
 #endif
-
-#if C_CTYPE_ASCII
-#undef c_isprint
-#define c_isprint(c) \
-  ({ int __c = (c); \
-     (__c >= ' ' && __c <= '~'); \
-   })
+#if '$' < 0
+    case '$' + 256:
+#endif
+#if '%' < 0
+    case '%' + 256:
+#endif
+#if '&' < 0
+    case '&' + 256:
+#endif
+#if '\'' < 0
+    case '\'' + 256:
+#endif
+#if '(' < 0
+    case '(' + 256:
+#endif
+#if ')' < 0
+    case ')' + 256:
+#endif
+#if '*' < 0
+    case '*' + 256:
+#endif
+#if '+' < 0
+    case '+' + 256:
+#endif
+#if ',' < 0
+    case ',' + 256:
+#endif
+#if '-' < 0
+    case '-' + 256:
+#endif
+#if '.' < 0
+    case '.' + 256:
+#endif
+#if '/' < 0
+    case '/' + 256:
+#endif
+#if ':' < 0
+    case ':' + 256:
+#endif
+#if ';' < 0
+    case ';' + 256:
 #endif
+#if '<' < 0
+    case '<' + 256:
+#endif
+#if '=' < 0
+    case '=' + 256:
+#endif
+#if '>' < 0
+    case '>' + 256:
+#endif
+#if '?' < 0
+    case '?' + 256:
+#endif
+#if '@' < 0
+    case '@' + 256:
+#endif
+#if '[' < 0
+    case '[' + 256:
+#endif
+#if '\\' < 0
+    case '\\' + 256:
+#endif
+#if ']' < 0
+    case ']' + 256:
+#endif
+#if '^' < 0
+    case '^' + 256:
+#endif
+#if '_' < 0
+    case '_' + 256:
+#endif
+#if '`' < 0
+    case '`' + 256:
+#endif
+#if '{' < 0
+    case '{' + 256:
+#endif
+#if '|' < 0
+    case '|' + 256:
+#endif
+#if '}' < 0
+    case '}' + 256:
+#endif
+#if '~' < 0
+    case '~' + 256:
+#endif
+      return true;
 
-#if C_CTYPE_ASCII
-#undef c_ispunct
-#define c_ispunct(c) \
-  ({ int _c = (c); \
-     (c_isgraph (_c) && ! c_isalnum (_c)); \
-   })
-#endif
-
-#undef c_isspace
-#define c_isspace(c) \
-  ({ int __c = (c); \
-     (__c == ' ' || __c == '\t' \
-      || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \
-   })
-
-#if C_CTYPE_CONSECUTIVE_UPPERCASE
-#undef c_isupper
-#define c_isupper(c) \
-  ({ int __c = (c); \
-     (__c >= 'A' && __c <= 'Z'); \
-   })
-#endif
-
-#if C_CTYPE_CONSECUTIVE_DIGITS \
-    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-#undef c_isxdigit
-#define c_isxdigit(c) \
-  ({ int __c = (c); \
-     ((__c >= '0' && __c <= '9') \
-      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \
-   })
-#else
-#undef c_isxdigit
-#define c_isxdigit(c) \
-  ({ int __c = (c); \
-     ((__c >= '0' && __c <= '9') \
-      || (__c >= 'A' && __c <= 'F') \
-      || (__c >= 'a' && __c <= 'f')); \
-   })
+    default:
+      return false;
+    }
+}
+
+C_CTYPE_INLINE bool
+c_ispunct (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_PUNCT_PLAIN:
+#if '!' < 0
+    case '!' + 256:
+#endif
+#if '"' < 0
+    case '"' + 256:
 #endif
+#if '#' < 0
+    case '#' + 256:
 #endif
+#if '$' < 0
+    case '$' + 256:
+#endif
+#if '%' < 0
+    case '%' + 256:
+#endif
+#if '&' < 0
+    case '&' + 256:
+#endif
+#if '\'' < 0
+    case '\'' + 256:
+#endif
+#if '(' < 0
+    case '(' + 256:
+#endif
+#if ')' < 0
+    case ')' + 256:
+#endif
+#if '*' < 0
+    case '*' + 256:
+#endif
+#if '+' < 0
+    case '+' + 256:
+#endif
+#if ',' < 0
+    case ',' + 256:
+#endif
+#if '-' < 0
+    case '-' + 256:
+#endif
+#if '.' < 0
+    case '.' + 256:
+#endif
+#if '/' < 0
+    case '/' + 256:
+#endif
+#if ':' < 0
+    case ':' + 256:
+#endif
+#if ';' < 0
+    case ';' + 256:
+#endif
+#if '<' < 0
+    case '<' + 256:
+#endif
+#if '=' < 0
+    case '=' + 256:
+#endif
+#if '>' < 0
+    case '>' + 256:
+#endif
+#if '?' < 0
+    case '?' + 256:
+#endif
+#if '@' < 0
+    case '@' + 256:
+#endif
+#if '[' < 0
+    case '[' + 256:
+#endif
+#if '\\' < 0
+    case '\\' + 256:
+#endif
+#if ']' < 0
+    case ']' + 256:
+#endif
+#if '^' < 0
+    case '^' + 256:
+#endif
+#if '_' < 0
+    case '_' + 256:
+#endif
+#if '`' < 0
+    case '`' + 256:
+#endif
+#if '{' < 0
+    case '{' + 256:
+#endif
+#if '|' < 0
+    case '|' + 256:
+#endif
+#if '}' < 0
+    case '}' + 256:
+#endif
+#if '~' < 0
+    case '~' + 256:
+#endif
+      return true;
 
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#undef c_tolower
-#define c_tolower(c) \
-  ({ int __c = (c); \
-     (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \
-   })
-#undef c_toupper
-#define c_toupper(c) \
-  ({ int __c = (c); \
-     (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \
-   })
+    default:
+      return false;
+    }
+}
+
+C_CTYPE_INLINE bool
+c_isspace (int c)
+{
+  switch (c)
+    {
+    case ' ': case '\t': case '\n': case '\v': case '\f': case '\r':
+      return true;
+    default:
+      return false;
+    }
+}
+
+C_CTYPE_INLINE bool
+c_isupper (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_UPPER:
+      return true;
+    default:
+      return false;
+    }
+}
+
+C_CTYPE_INLINE bool
+c_isxdigit (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_A_THRU_F:
+      return true;
+
+    default:
+      return false;
+    }
+}
+
+C_CTYPE_INLINE int
+c_tolower (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_UPPER_N (0):
+#if _C_CTYPE_SIGNED_EBCDIC
+      c += 256;
+      /* Fall through.  */
+    _C_CTYPE_UPPER_N (256):
 #endif
+      return c - 'A' + 'a';
 
-#endif /* optimizing for speed */
+    default:
+      return c;
+    }
+}
 
+C_CTYPE_INLINE int
+c_toupper (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_LOWER_N (0):
+#if _C_CTYPE_SIGNED_EBCDIC
+      c += 256;
+      /* Fall through.  */
+    _C_CTYPE_LOWER_N (256):
+#endif
+      return c - 'a' + 'A';
+
+    default:
+      return c;
+    }
+}
 
 #ifdef __cplusplus
 }
 #endif
 
+_GL_INLINE_HEADER_END
+
 #endif /* C_CTYPE_H */
diff --git a/lib/get-permissions.c b/lib/get-permissions.c
index 459513c..9dfb076 100644
--- a/lib/get-permissions.c
+++ b/lib/get-permissions.c
@@ -1,4 +1,4 @@
-/* get-permissions.c - get permissions of a file
+/* Get permissions of a file.  -*- coding: utf-8 -*-
 
    Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
diff --git a/lib/qcopy-acl.c b/lib/qcopy-acl.c
index c450742..9db9033 100644
--- a/lib/qcopy-acl.c
+++ b/lib/qcopy-acl.c
@@ -1,4 +1,4 @@
-/* copy-acl.c - copy access control list from one file to another file
+/* Copy access control list from one file to another.  -*- coding: utf-8 -*-
 
    Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
diff --git a/lib/set-permissions.c b/lib/set-permissions.c
index 1aa5b49..8e6ecf3 100644
--- a/lib/set-permissions.c
+++ b/lib/set-permissions.c
@@ -1,4 +1,4 @@
-/* set-permissions.c - set permissions of a file
+/* Set permissions of a file.  -*- coding: utf-8 -*-
 
    Copyright (C) 2002-2003, 2005-2015 Free Software Foundation, Inc.
 
diff --git a/lib/stdalign.in.h b/lib/stdalign.in.h
index a990050..c6115b6 100644
--- a/lib/stdalign.in.h
+++ b/lib/stdalign.in.h
@@ -64,7 +64,9 @@
 #  define _Alignof(type) offsetof (struct { char __a; type __b; }, __b)
 # endif
 #endif
-#define alignof _Alignof
+#if ! (defined __cplusplus && 201103 <= __cplusplus)
+# define alignof _Alignof
+#endif
 #define __alignof_is_defined 1
 
 /* alignas (A), also known as _Alignas (A), aligns a variable or type
@@ -105,8 +107,11 @@
 #  define _Alignas(a) __declspec (align (a))
 # endif
 #endif
-#if defined _Alignas || (defined __STDC_VERSION && 201112 <= __STDC_VERSION__)
+#if ((defined _Alignas && ! (defined __cplusplus && 201103 <= __cplusplus)) \
+     || (defined __STDC_VERSION && 201112 <= __STDC_VERSION__))
 # define alignas _Alignas
+#endif
+#if defined alignas || (defined __cplusplus && 201103 <= __cplusplus)
 # define __alignas_is_defined 1
 #endif
 
diff --git a/lisp/ChangeLog.17 b/lisp/ChangeLog.17
index a40f8f3..224e2a6 100644
--- a/lisp/ChangeLog.17
+++ b/lisp/ChangeLog.17
@@ -1,3 +1,8 @@
+2015-09-20  Ken Manheimer  <address@hidden>
+
+       * python.el (python-pdbtrack-set-tracked-buffer): Repair pdbtrack
+       so it follows transition from one remote file to another.
+
 2015-04-06  Alan Mackenzie  <address@hidden>
 
        Fix miscellaneous glitches in cc-mode.el.  (Bug#20245)
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 8bcb2d6..15d4d37 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -103,7 +103,7 @@ BYTE_COMPILE_FLAGS = $(BIG_STACK_OPTS) \
 # Files to compile before others during a bootstrap.  This is done to
 # speed up the bootstrap process.  They're ordered by size, so we use
 # the slowest-compiler on the smallest file and move to larger files as the
-# compiler gets faster.  `autoload.elc' comes last because it is not used by
+# compiler gets faster.  'autoload.elc' comes last because it is not used by
 # the compiler (so its compilation does not speed up subsequent compilations),
 # it's only placed here so as to speed up generation of the loaddefs.el file.
 
@@ -272,22 +272,22 @@ $(THEFILE)c:
 
 compile-first: $(COMPILE_FIRST)
 
-# In `compile-main' we could directly do
+# In 'compile-main' we could directly do
 #    ... | xargs $(MAKE)
 # and it works, but it generates a lot of messages like
 #    make[2]: gnus/gnus-mlspl.elc is up to date.
 # so instead, we use "xargs echo" to split the list of file into manageable
-# chunks and then use an intermediate `compile-targets' target so the
+# chunks and then use an intermediate 'compile-targets' target so the
 # actual targets (the .elc files) are not mentioned as targets on the
 # make command line.
 
 
 .PHONY: compile-targets
-# TARGETS is set dynamically in the recursive call from `compile-main'.
+# TARGETS is set dynamically in the recursive call from 'compile-main'.
 compile-targets: $(TARGETS)
 
 # Compile all the Elisp files that need it.  Beware: it approximates
-# `no-byte-compile', so watch out for false-positives!
+# 'no-byte-compile', so watch out for false-positives!
 compile-main: leim semantic compile-clean
        @(cd $(lisp) && \
        els=`echo "${SUBDIRS_REL} " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 
's| |/*.el |g'`; \
@@ -326,7 +326,7 @@ semantic:
 compile: $(LOADDEFS) autoloads compile-first
        $(MAKE) compile-main
 
-# Compile all Lisp files.  This is like `compile' but compiles files
+# Compile all Lisp files.  This is like 'compile' but compiles files
 # unconditionally.  Some files don't actually get compiled because they
 # set the local variable no-byte-compile.
 compile-always:
diff --git a/lisp/README b/lisp/README
index e250a70..b68ad5e 100644
--- a/lisp/README
+++ b/lisp/README
@@ -6,8 +6,7 @@ files are architecture-independent.
 The term subdirectory contains Lisp files that customize Emacs for
 certain terminal types.  When Emacs starts, it checks the TERM
 environment variable to get the terminal type and loads
-`term/${TERM}.el' if it exists.
+'term/${TERM}.el' if it exists.
 
 The other subdirectories hold Lisp packages grouped by their general
 purpose.
-
diff --git a/lisp/allout.el b/lisp/allout.el
index f705573..5273fe2 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -917,7 +917,7 @@ has been customized to enable this behavior), `allout-mode' 
will be
 automatically activated.  The layout dictated by the value will be used to
 set the initial exposure when `allout-mode' is activated.
 
-\*You should not setq-default this variable non-nil unless you want every
+*You should not setq-default this variable non-nil unless you want every
 visited file to be treated as an allout file.*
 
 The value would typically be set by a file local variable.  For
@@ -1512,7 +1512,7 @@ already associated with a file.
 
 It consists of an encrypted random string useful only to verify that a
 passphrase entered by the user is effective for decryption.  The passphrase
-itself is \*not* recorded in the file anywhere, and the encrypted contents
+itself is *not* recorded in the file anywhere, and the encrypted contents
 are random binary characters to avoid exposing greater susceptibility to
 search attacks.
 
@@ -3721,7 +3721,7 @@ Nuances:
   (save-match-data
     (let* ((inhibit-field-text-motion t)
            (depth (+ (allout-current-depth) relative-depth))
-           (opening-on-blank (if (looking-at "^\$")
+           (opening-on-blank (if (looking-at "^$")
                                  (not (setq before nil))))
            ;; bunch o vars set while computing ref-topic
            opening-numbered
@@ -5562,9 +5562,8 @@ Defaults:
          ;; Specified but not a buffer -- get it:
          (let ((got (get-buffer frombuf)))
            (if (not got)
-               (error (concat "allout-process-exposed: source buffer "
-                              frombuf
-                              " not found."))
+               (error "allout-process-exposed: source buffer %s not found."
+                      frombuf)
              (setq frombuf got))))
     ;; not specified -- default it:
     (setq frombuf (current-buffer)))
@@ -5909,7 +5908,7 @@ file with topics pending encryption is saved, topics 
pending
 encryption are encrypted.  See `allout-encrypt-unencrypted-on-saves'
 for auto-encryption specifics.
 
-\*NOTE WELL* that automatic encryption that happens during saves will
+*NOTE WELL* that automatic encryption that happens during saves will
 default to symmetric encryption -- you must deliberately (re)encrypt key-pair
 encrypted topics if you want them to continue to use the key-pair cipher.
 
diff --git a/lisp/bindings.el b/lisp/bindings.el
index 3672812..8560871 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -1265,9 +1265,9 @@ if `inhibit-field-text-motion' is non-nil."
 (define-key abbrev-map "e" 'expand-abbrev)
 (define-key abbrev-map "'" 'expand-abbrev)
 ;; (define-key ctl-x-map "\C-a" 'add-mode-abbrev)
-;; (define-key ctl-x-map "\+" 'add-global-abbrev)
+;; (define-key ctl-x-map "+" 'add-global-abbrev)
 ;; (define-key ctl-x-map "\C-h" 'inverse-add-mode-abbrev)
-;; (define-key ctl-x-map "\-" 'inverse-add-global-abbrev)
+;; (define-key ctl-x-map "-" 'inverse-add-global-abbrev)
 (define-key esc-map "'" 'abbrev-prefix-mark)
 (define-key ctl-x-map "'" 'expand-abbrev)
 (define-key ctl-x-map "\C-b" 'list-buffers)
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index 0351481..e931025 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -138,7 +138,7 @@ This is as opposed to inline text at the top of the buffer."
 
 (defconst bookmark-bmenu-inline-header-height 2
   "Number of lines used for the *Bookmark List* header
-\(only significant when `bookmark-bmenu-use-header-line' is nil\).")
+\(only significant when `bookmark-bmenu-use-header-line' is nil).")
 
 (defconst bookmark-bmenu-marks-width 2
   "Number of columns (chars) used for the *Bookmark List* marks column,
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el
index cb6ab6f..933c446 100644
--- a/lisp/calc/calc-ext.el
+++ b/lisp/calc/calc-ext.el
@@ -574,6 +574,7 @@
   (define-key calc-mode-map "uG" 'calc-vector-geometric-mean)
   (define-key calc-mode-map "uM" 'calc-vector-mean)
   (define-key calc-mode-map "uN" 'calc-vector-min)
+  (define-key calc-mode-map "uR" 'calc-vector-rms)
   (define-key calc-mode-map "uS" 'calc-vector-sdev)
   (define-key calc-mode-map "uU" 'calc-undo)
   (define-key calc-mode-map "uX" 'calc-vector-max)
@@ -932,7 +933,7 @@ calc-preserve-point calc-replace-selections 
calc-replace-sub-formula
 calc-roll-down-with-selections calc-roll-up-with-selections
 calc-sel-error)
 
- ("calc-stat" calc-vector-op calcFunc-agmean
+ ("calc-stat" calc-vector-op calcFunc-agmean calcFunc-rms
 calcFunc-vcorr calcFunc-vcount calcFunc-vcov calcFunc-vflat
 calcFunc-vgmean calcFunc-vhmean calcFunc-vmax calcFunc-vmean
 calcFunc-vmeane calcFunc-vmedian calcFunc-vmin calcFunc-vpcov
@@ -1147,8 +1148,8 @@ calc-vector-covariance calc-vector-geometric-mean
 calc-vector-harmonic-mean calc-vector-max calc-vector-mean
 calc-vector-mean-error calc-vector-median calc-vector-min
 calc-vector-pop-covariance calc-vector-pop-sdev
-calc-vector-pop-variance calc-vector-product calc-vector-sdev
-calc-vector-sum calc-vector-variance)
+calc-vector-pop-variance calc-vector-product calc-vector-rms
+calc-vector-sdev calc-vector-sum calc-vector-variance)
 
  ("calc-store" calc-assign calc-copy-special-constant
 calc-copy-variable calc-declare-variable
@@ -1292,6 +1293,7 @@ calc-kill calc-kill-region calc-yank))))
   (define-key calc-help-map "?" 'calc-help-for-help)
   (define-key calc-help-map "\C-h" 'calc-help-for-help))
 
+(defvar calc-prefix-help-retry nil)
 (defvar calc-prefix-help-phase 0)
 (defun calc-do-prefix-help (msgs group key)
   (if calc-full-help-flag
@@ -1299,7 +1301,7 @@ calc-kill calc-kill-region calc-yank))))
     (if (cdr msgs)
        (progn
          (setq calc-prefix-help-phase
-               (if (eq this-command last-command)
+               (if calc-prefix-help-retry
                    (% (1+ calc-prefix-help-phase) (1+ (length msgs)))
                  0))
          (let ((msg (nth calc-prefix-help-phase msgs)))
@@ -1320,7 +1322,13 @@ calc-kill calc-kill-region calc-yank))))
              (message "%s: %s: %c-" group (car msgs) key)
            (message "%s: (none)  %c-" group key))
        (message "%s: %s" group (car msgs))))
-    (and key (calc-unread-command key))))
+    (let* ((chr (read-char))
+           (bnd (local-key-binding (if key (string key chr) (string chr)))))
+      (setq calc-prefix-help-retry (= chr ??))
+      (if bnd
+          (call-interactively bnd)
+        (message "%s is undefined"
+                 (key-description (if key (vector key chr) (vector chr))))))))
 
 ;;;; Commands.
 
diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el
index 444bb5e..33cb1c1 100644
--- a/lisp/calc/calc-help.el
+++ b/lisp/calc/calc-help.el
@@ -386,7 +386,7 @@ C-w  Describe how there is no warranty for Calc."
   (interactive)
   (calc-quit)
   (view-emacs-news)
-  (re-search-forward "^\*+ .*\\<Calc\\>" nil t))
+  (re-search-forward "^\\*+ .*\\<Calc\\>" nil t))
 
 (defvar calc-help-long-names '((?b . "binary/business")
                               (?g . "graphics")
diff --git a/lisp/calc/calc-map.el b/lisp/calc/calc-map.el
index 3b5949c..d2c9da8 100644
--- a/lisp/calc/calc-map.el
+++ b/lisp/calc/calc-map.el
@@ -417,6 +417,7 @@
                                ( ?G 1 calcFunc-vgmean )
                                ( ?M 1 calcFunc-vmean )
                                ( ?N 1 calcFunc-vmin )
+                                ( ?R 1 calcFunc-rms )
                                ( ?S 1 calcFunc-vsdev )
                                ( ?X 1 calcFunc-vmax ) )
                              ( ( ?C 2 calcFunc-vpcov )
diff --git a/lisp/calc/calc-menu.el b/lisp/calc/calc-menu.el
index 4408687..8610090 100644
--- a/lisp/calc/calc-menu.el
+++ b/lisp/calc/calc-menu.el
@@ -863,6 +863,13 @@
               :keys "I u M"
               :active (>= (calc-stack-size) 1)
               :help "The average (arithmetic mean) of the data values as an 
error form"]
+              ["rms(1:)"
+               (progn
+                 (require 'calc-stat)
+                 (call-interactively 'calc-vector-rms))
+               :keys "u R"
+               :active (>= (calc-stack-size) 1)
+               :help "The root mean square of the data values"]
               ["sdev(1:)"
                (progn
                  (require 'calc-stat)
diff --git a/lisp/calc/calc-stat.el b/lisp/calc/calc-stat.el
index cf0b3ea..a797db2 100644
--- a/lisp/calc/calc-stat.el
+++ b/lisp/calc/calc-stat.el
@@ -71,6 +71,11 @@
         (calc-vector-op "meae" 'calcFunc-vmeane arg)
        (calc-vector-op "mean" 'calcFunc-vmean arg)))))
 
+(defun calc-vector-rms (arg)
+  (interactive "P")
+  (calc-slow-wrapper
+   (calc-vector-op "rms" 'calcFunc-rms arg)))
+
 (defun calc-vector-mean-error (arg)
   (interactive "P")
   (calc-invert-func)
@@ -318,6 +323,12 @@
                          suminvsqrwts))
            (math-div (calcFunc-reduce '(var add var-add) means) len)))))))
 
+(defun calcFunc-rms (a)
+  "Return the root-mean-square of the vector A."
+  (math-sqrt
+   (calcFunc-vmean
+    (calcFunc-map '(var abssqr var-abssqr) a))))
+
 (defun math-fix-int-intv (x)
   (if (math-floatp x)
       x
diff --git a/lisp/calc/calc-store.el b/lisp/calc/calc-store.el
index 3d8c865..21209c6 100644
--- a/lisp/calc/calc-store.el
+++ b/lisp/calc/calc-store.el
@@ -58,8 +58,8 @@
              (let ((msg
                     (calc-store-value var (or calc-given-value (calc-top 1))
                                       "" calc-given-value-flag)))
-               (message (concat "Stored to variable \"%s\"" msg)
-                        (calc-var-name var)))))
+               (message "Stored to variable \"%s\"%s"
+                        (calc-var-name var) msg))))
        (setq var (calc-is-assignments (calc-top 1)))
        (if var
           (while var
@@ -67,8 +67,8 @@
                     (calc-store-value (car (car var)) (cdr (car var))
                                       (if (not (cdr var)) "")
                                       (if (not (cdr var)) 1))))
-               (message (concat "Stored to variable \"%s\"" msg)
-                        (calc-var-name (car (car var)))))
+               (message "Stored to variable \"%s\"%s"
+                        (calc-var-name (car (car var))) msg))
             (setq var (cdr var))))))))
 
 (defun calc-store-plus (&optional var)
@@ -422,8 +422,8 @@
                                       (calc-var-name var1)))))
         (if var2
             (let ((msg (calc-store-value var2 value "")))
-               (message (concat "Variable \"%s\" copied to \"%s\"" msg)
-                        (calc-var-name var1) (calc-var-name var2))))))))
+               (message "Variable \"%s\" copied to \"%s\"%s"
+                        (calc-var-name var1) (calc-var-name var2) msg)))))))
 
 (defvar calc-last-edited-variable nil)
 (defun calc-edit-variable (&optional var)
diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el
index bb7e97e..2c64645 100644
--- a/lisp/calendar/time-date.el
+++ b/lisp/calendar/time-date.el
@@ -52,7 +52,8 @@ Type 0 is the cons cell (HIGH . LOW), type 1 is the list (HIGH
 LOW), type 2 is the list (HIGH LOW MICRO), and type 3 is the
 list (HIGH LOW MICRO PICO)."
   (declare (indent 1)
-          (debug ((&rest (symbolp symbolp symbolp &or [symbolp form] form))
+          (debug ((&rest (symbolp symbolp symbolp
+                           &or [symbolp symbolp form] [symbolp form] form))
                   body)))
   (if varlist
       (let* ((elt (pop varlist))
@@ -178,7 +179,7 @@ If DATE lacks timezone information, GMT is assumed."
       (defun time-to-seconds (&optional time)
         "Convert optional value TIME to a floating point number.
 TIME defaults to the current time."
-        (with-decoded-time-value ((high low micro pico type
+        (with-decoded-time-value ((high low micro pico _type
                                   (or time (current-time))))
           (+ (* high 65536.0)
              low
@@ -261,8 +262,8 @@ Return the difference in the format of a time value."
 
     (defun time-less-p (t1 t2)
       "Return non-nil if time value T1 is earlier than time value T2."
-      (with-decoded-time-value ((high1 low1 micro1 pico1 type1 t1)
-                               (high2 low2 micro2 pico2 type2 t2))
+      (with-decoded-time-value ((high1 low1 micro1 pico1 _type1 t1)
+                               (high2 low2 micro2 pico2 _type2 t2))
        (or (< high1 high2)
            (and (= high1 high2)
                 (or (< low1 low2)
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index a04bf82..27ca17b 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -74,7 +74,7 @@ truenames (those with the extension \".toda\")."
   (let ((files (if (file-exists-p todo-directory)
                   (mapcar 'file-truename
                    (directory-files todo-directory t
-                                    (if archives "\.toda$" "\.todo$") t)))))
+                                    (if archives "\\.toda$" "\\.todo$") t)))))
     (sort files (lambda (s1 s2) (let ((cis1 (upcase s1))
                                      (cis2 (upcase s2)))
                                  (string< cis1 cis2))))))
@@ -1112,7 +1112,7 @@ these files, also rename them accordingly."
         (snname (todo-short-file-name nname))
         (files (directory-files todo-directory t
                                 (concat ".*" (regexp-quote soname)
-                                        ".*\.tod[aorty]$") t)))
+                                        ".*\\.tod[aorty]$") t)))
     (dolist (f files)
       (let* ((sfname (todo-short-file-name f))
             (fext (file-name-extension f t))
@@ -3963,7 +3963,7 @@ regexp items."
 (defun todo-find-filtered-items-file ()
   "Choose a filtered items file and visit it."
   (interactive)
-  (let ((files (directory-files todo-directory t "\.tod[rty]$" t))
+  (let ((files (directory-files todo-directory t "\\.tod[rty]$" t))
        falist file)
     (dolist (f files)
       (let ((type (cond ((equal (file-name-extension f) "todr") "regexp")
@@ -4892,7 +4892,7 @@ With nil or omitted CATEGORY, default to the current 
category."
        (widen)
        (goto-char (point-min))
        (setq todo-categories
-             (if (looking-at "\(\(\"")
+             (if (looking-at "((\"")
                  (read (buffer-substring-no-properties
                         (line-beginning-position)
                         (line-end-position)))
@@ -5643,9 +5643,10 @@ have been removed."
     (when deleted
       (let ((pl (> (length deleted) 1))
            (names (mapconcat (lambda (f) (concat "\"" f "\"")) deleted ", ")))
-       (message (concat "File" (if pl "s" "") " " names " ha" (if pl "ve" "s")
+       (message (concat "File" (if pl "s" "") " %s ha" (if pl "ve" "s")
                         " been deleted and removed from\n"
-                        "the list of category completion files")))
+                        "the list of category completion files")
+                names))
       (todo-reevaluate-category-completions-files-defcustom)
       (custom-set-default 'todo-category-completions-files
                          (symbol-value 'todo-category-completions-files))
@@ -6022,7 +6023,7 @@ the empty string (i.e., no time string)."
   "The :set function for user option `todo-nondiary-marker'."
   (let* ((oldvalue (symbol-value symbol))
         (files (append todo-files todo-archives
-                       (directory-files todo-directory t "\.tod[rty]$" t))))
+                       (directory-files todo-directory t "\\.tod[rty]$" t))))
     (custom-set-default symbol value)
     ;; Need to reset these to get font-locking right.
     (setq todo-nondiary-start (nth 0 todo-nondiary-marker)
@@ -6075,7 +6076,7 @@ the empty string (i.e., no time string)."
   "The :set function for user option `todo-done-string'."
   (let ((oldvalue (symbol-value symbol))
        (files (append todo-files todo-archives
-                      (directory-files todo-directory t "\.todr$" t))))
+                      (directory-files todo-directory t "\\.todr$" t))))
     (custom-set-default symbol value)
     ;; Need to reset this to get font-locking right.
     (setq todo-done-string-start
@@ -6104,7 +6105,7 @@ the empty string (i.e., no time string)."
   "The :set function for user option `todo-comment-string'."
   (let ((oldvalue (symbol-value symbol))
        (files (append todo-files todo-archives
-                      (directory-files todo-directory t "\.todr$" t))))
+                      (directory-files todo-directory t "\\.todr$" t))))
     (custom-set-default symbol value)
     (when (not (equal value oldvalue))
       (dolist (f files)
@@ -6130,7 +6131,7 @@ the empty string (i.e., no time string)."
   "The :set function for user option `todo-highlight-item'."
   (let ((oldvalue (symbol-value symbol))
        (files (append todo-files todo-archives
-                      (directory-files todo-directory t "\.tod[rty]$" t))))
+                      (directory-files todo-directory t "\\.tod[rty]$" t))))
     (custom-set-default symbol value)
     (when (not (equal value oldvalue))
       (dolist (f files)
diff --git a/lisp/cedet/ede/auto.el b/lisp/cedet/ede/auto.el
index b4fea42..7c2a6b8 100644
--- a/lisp/cedet/ede/auto.el
+++ b/lisp/cedet/ede/auto.el
@@ -155,9 +155,9 @@ into memory.")
 Specifying this matcher object will allow EDE to perform a complex
 check without loading the project.
 
-NOTE: If you use dirmatch, you may need to set :root-only to `nil'.
+NOTE: If you use dirmatch, you may need to set :root-only to nil.
 While it may be a root based project, all subdirs will happen to return
-true for the dirmatch, so for scanning purposes, set it to `nil'.")
+true for the dirmatch, so for scanning purposes, set it to nil.")
    (proj-root :initarg :proj-root
              :type function
              :documentation "A function symbol to call for the project root.
diff --git a/lisp/cedet/ede/generic.el b/lisp/cedet/ede/generic.el
index 8d01324..b865ff5 100644
--- a/lisp/cedet/ede/generic.el
+++ b/lisp/cedet/ede/generic.el
@@ -302,6 +302,8 @@ CLASS is the EIEIO class that is used to track this 
project.  It should subclass
                              ".svn" 'ede-generic-vc-project)
   (ede-generic-new-autoloader "generic-cvs" "Generic CVS"
                              "CVS" 'ede-generic-vc-project)
+  (ede-generic-new-autoloader "generic-mtn" "Generic Monotone"
+                              "_MTN/options" 'ede-generic-vc-project)
 
   ;; Take advantage of existing 'projectile' based projects.
   ;; @TODO - if projectile supports compile commands etc, can we
diff --git a/lisp/cedet/ede/proj-obj.el b/lisp/cedet/ede/proj-obj.el
index de06910..34e302d 100644
--- a/lisp/cedet/ede/proj-obj.el
+++ b/lisp/cedet/ede/proj-obj.el
@@ -126,7 +126,7 @@ file.")
 (defvar ede-source-c++
   (ede-sourcecode "ede-source-c++"
                  :name "C++"
-                 :sourcepattern 
"\\.\\(c\\(pp?\\|c\\|xx\\|++\\)\\|C\\\(PP\\)?\\)$"
+                 :sourcepattern 
"\\.\\(c\\(pp?\\|c\\|xx\\|++\\)\\|C\\(PP\\)?\\)$"
                  :auxsourcepattern "\\.\\(hpp?\\|hh?\\|hxx\\|H\\)$"
                  :garbagepattern '("*.o" "*.obj" ".deps/*.P" ".lo"))
   "C++ source code definition.")
diff --git a/lisp/cedet/ede/proj-shared.el b/lisp/cedet/ede/proj-shared.el
index dfd44ac..a8edbe8 100644
--- a/lisp/cedet/ede/proj-shared.el
+++ b/lisp/cedet/ede/proj-shared.el
@@ -166,7 +166,7 @@ Use ldlibs to add addition libraries.")
        "%.lo: %.c\n"
        "address@hidden '$(LTCOMPILE) -c $<'; \\\n"
        "\t$(LTCOMPILE) -Wp,-MD,.deps/$(*F).p -c $<\n"
-       "address@hidden -e 's/^\([^:]*\)\.o:/\1.lo \1.o:/' \\\n"
+       "address@hidden -e 's/^\\([^:]*\\)\\.o:/\\1.lo \\1.o:/' \\\n"
        "\t      < .deps/$(*F).p > .deps/$(*F).P\n"
        "address@hidden -f .deps/$(*F).p\n\n"))
   )
diff --git a/lisp/cedet/mode-local.el b/lisp/cedet/mode-local.el
index 64c1f08..8736a4f 100644
--- a/lisp/cedet/mode-local.el
+++ b/lisp/cedet/mode-local.el
@@ -604,7 +604,7 @@ PROMPT, INITIAL, HIST, and DEFAULT are the same as for 
`completing-read'."
 ;;
 (defun overload-docstring-extension (overload)
   "Return the doc string that augments the description of OVERLOAD."
-  (let ((doc "\n\This function can be overloaded\
+  (let ((doc "\nThis function can be overloaded\
  with `define-mode-local-override'.")
         (sym (overload-obsoleted-by overload)))
     (when sym
@@ -677,7 +677,7 @@ SYMBOL is a function that can be overridden."
     result))
 
 (defun xref-mode-local-overload (symbol)
-  "For ‘elisp-xref-find-def-functions’; add overloads for SYMBOL."
+  "For `elisp-xref-find-def-functions'; add overloads for SYMBOL."
   ;; Current buffer is the buffer where xref-find-definitions was invoked.
   (when (get symbol 'mode-local-overload)
     (let* ((symbol-file (find-lisp-object-file-name symbol (symbol-function 
symbol)))
@@ -738,11 +738,11 @@ SYMBOL is a function that can be overridden."
 
 (defconst xref-mode-local-find-overloadable-regexp
   "(\\(\\(define-overloadable-function\\)\\|\\(define-overload\\)\\) +%s"
-  "Regexp used by ‘xref-find-definitions’ when searching for a
+  "Regexp used by `xref-find-definitions' when searching for a
   mode-local overloadable function definition.")
 
 (defun xref-mode-local-find-override (meta-name)
-  "Function used by ‘xref-find-definitions’ when searching for an
+  "Function used by `xref-find-definitions' when searching for an
   override of a mode-local overloadable function.
 META-NAME is a cons (OVERLOADABLE-SYMBOL . MAJOR-MODE)."
   (let* ((override (car meta-name))
diff --git a/lisp/cedet/semantic/complete.el b/lisp/cedet/semantic/complete.el
index d32b2c4..9b7882c 100644
--- a/lisp/cedet/semantic/complete.el
+++ b/lisp/cedet/semantic/complete.el
@@ -156,7 +156,7 @@ Presumably if you call this you will insert something new 
there."
   "Display the string FMT formatted with ARGS at the end of the minibuffer."
   (if semantic-complete-inline-overlay
       (apply 'message fmt args)
-    (message (concat (buffer-string) (apply #'format-message fmt args)))))
+    (apply 'message (concat "%s" fmt) (buffer-string) args)))
 
 ;;; ------------------------------------------------------------
 ;;; MINIBUFFER: Option Selection harnesses
diff --git a/lisp/cedet/semantic/tag.el b/lisp/cedet/semantic/tag.el
index 6c6616d..34fc8ba 100644
--- a/lisp/cedet/semantic/tag.el
+++ b/lisp/cedet/semantic/tag.el
@@ -1212,7 +1212,7 @@ Returns a list of cooked tags.
   The parser returns raw tags with positional data START END at the
 end of the tag data structure (a list for now).  We convert it from
 that to a cooked state that uses an overlay proxy, that is, a vector
-\[START END].
+[START END].
 
   The raw tag is changed with side effects and maybe expanded in
 several derived tags when the variable `semantic-tag-expand-function'
diff --git a/lisp/cedet/semantic/wisent/comp.el 
b/lisp/cedet/semantic/wisent/comp.el
index 6730e8e..585c11a 100644
--- a/lisp/cedet/semantic/wisent/comp.el
+++ b/lisp/cedet/semantic/wisent/comp.el
@@ -915,7 +915,7 @@ An NVARS by NRULES matrix of bits indicating which rules 
can help
 derive the beginning of the data for each nonterminal.  For example,
 if symbol 5 can be derived as the sequence of symbols 8 3 20, and one
 of the rules for deriving symbol 8 is rule 4, then the
-\[5 - NTOKENS, 4] bit in FDERIVES is set."
+[5 - NTOKENS, 4] bit in FDERIVES is set."
   (let (i j k)
     (setq fderives (make-vector nvars nil))
     (setq i 0)
diff --git a/lisp/cedet/semantic/wisent/wisent.el 
b/lisp/cedet/semantic/wisent/wisent.el
index fb77cb3..4c52741 100644
--- a/lisp/cedet/semantic/wisent/wisent.el
+++ b/lisp/cedet/semantic/wisent/wisent.el
@@ -364,7 +364,7 @@ automaton has only one entry point."
 
 - START specify the start symbol (nonterminal) used by the parser as
   its goal.  It defaults to the start symbol defined in the grammar
-  \(see also `wisent-compile-grammar')."
+  (see also `wisent-compile-grammar')."
   (run-hooks 'wisent-pre-parse-hook)
   (let* ((actions (aref automaton 0))
          (gotos   (aref automaton 1))
diff --git a/lisp/cmuscheme.el b/lisp/cmuscheme.el
index 7c5819d..724fc2b 100644
--- a/lisp/cmuscheme.el
+++ b/lisp/cmuscheme.el
@@ -430,7 +430,7 @@ in the next one.")
                                       (file-name-nondirectory file-name)))
   (comint-send-string (scheme-proc) (concat "(load \""
                                            file-name
-                                           "\"\)\n")))
+                                           "\")\n")))
 
 (defun scheme-compile-file (file-name)
   "Compile a Scheme file FILE-NAME in the inferior Scheme process."
@@ -444,7 +444,7 @@ in the next one.")
                                       (file-name-nondirectory file-name)))
   (comint-send-string (scheme-proc) (concat "(compile-file \""
                                            file-name
-                                           "\"\)\n")))
+                                           "\")\n")))
 
 
 (defvar scheme-buffer nil "The current scheme process buffer.
diff --git a/lisp/comint.el b/lisp/comint.el
index ead2757..e70fe88 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -1581,7 +1581,7 @@ Go to the history element by the absolute history 
position HIST-POS."
 (defun comint-within-quotes (beg end)
   "Return t if the number of quotes between BEG and END is odd.
 Quotes are single and double."
-  (let ((countsq (comint-how-many-region "\\(^\\|[^\\\\]\\)\'" beg end))
+  (let ((countsq (comint-how-many-region "\\(^\\|[^\\\\]\\)'" beg end))
        (countdq (comint-how-many-region "\\(^\\|[^\\\\]\\)\"" beg end)))
     (or (= (mod countsq 2) 1) (= (mod countdq 2) 1))))
 
diff --git a/lisp/custom.el b/lisp/custom.el
index ea5ab7a..e212e32 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -1214,13 +1214,11 @@ Return t if THEME was successfully loaded, nil 
otherwise."
     (put theme 'theme-documentation nil))
   (let ((fn (locate-file (concat (symbol-name theme) "-theme.el")
                         (custom-theme--load-path)
-                        '("" "c")))
-       hash)
+                        '("" "c"))))
     (unless fn
       (error "Unable to find theme file for `%s'" theme))
     (with-temp-buffer
       (insert-file-contents fn)
-      (setq hash (secure-hash 'sha256 (current-buffer)))
       ;; Check file safety with `custom-safe-themes', prompting the
       ;; user if necessary.
       (when (or no-confirm
@@ -1228,8 +1226,9 @@ Return t if THEME was successfully loaded, nil otherwise."
                (and (memq 'default custom-safe-themes)
                     (equal (file-name-directory fn)
                            (expand-file-name "themes/" data-directory)))
-               (member hash custom-safe-themes)
-               (custom-theme-load-confirm hash))
+                (let ((hash (secure-hash 'sha256 (current-buffer))))
+                  (or (member hash custom-safe-themes)
+                      (custom-theme-load-confirm hash))))
        (let ((custom--inhibit-theme-enable t)
               (buffer-file-name fn))    ;For load-history.
          (eval-buffer))
diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el
index 42d7fd3..b32d115 100644
--- a/lisp/dabbrev.el
+++ b/lisp/dabbrev.el
@@ -120,7 +120,7 @@
 
 Example: Set this to \"\\\\$\" for programming languages
 in which variable names may appear with or without a leading `$'.
-\(For example, in Makefiles.\)
+\(For example, in Makefiles.)
 
 Set this to nil if no characters should be skipped."
   :type '(choice regexp
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index 62330fc..4ee8300 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -168,7 +168,8 @@
 ;;  "Switch to non-existing buffers only upon confirmation."
 ;;  (interactive "BSwitch to buffer: ")
 ;;  (if (or (get-buffer (ad-get-arg 0))
-;;          (y-or-n-p (format "‘%s’ does not exist, create? " (ad-get-arg 0))))
+;;          (y-or-n-p (format-message "`%s' does not exist, create? "
+;;                                    (ad-get-arg 0))))
 ;;      ad-do-it))
 ;;
 ;;(defadvice find-file (before existing-files-only activate)
@@ -3106,7 +3107,7 @@ deactivation, which might run hooks and get into other 
trouble."
   "Define a piece of advice for FUNCTION (a symbol).
 The syntax of `defadvice' is as follows:
 
-  \(defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
+  (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
     [DOCSTRING] [INTERACTIVE-FORM]
     BODY...)
 
diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el
index e3d83eb..99a329b 100644
--- a/lisp/emacs-lisp/avl-tree.el
+++ b/lisp/emacs-lisp/avl-tree.el
@@ -615,7 +615,7 @@ is more efficient."
 of all elements of TREE.
 
 If REVERSE is non-nil, the stack is sorted in reverse order.
-\(See also `avl-tree-stack-pop'\).
+\(See also `avl-tree-stack-pop').
 
 Note that any modification to TREE *immediately* invalidates all
 avl-tree-stacks created before the modification (in particular,
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 279ffa3..8699af6 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -397,7 +397,7 @@ invoked interactively are excluded from this list."
   "Alist of functions and their call tree.
 Each element looks like
 
-  \(FUNCTION CALLERS CALLS\)
+  (FUNCTION CALLERS CALLS)
 
 where CALLERS is a list of functions that call FUNCTION, and CALLS
 is a list of functions for which calls were generated while compiling
@@ -1814,7 +1814,7 @@ The value is non-nil if there were no errors, nil if 
errors."
     ;; compile this file.
     (if (with-current-buffer input-buffer no-byte-compile)
        (progn
-         ;; (message "%s not compiled because of ‘no-byte-compile: %s’"
+         ;; (message "%s not compiled because of `no-byte-compile: %s'"
          ;;       (byte-compile-abbreviate-file filename)
          ;;       (with-current-buffer input-buffer no-byte-compile))
          (when (file-exists-p target-file)
@@ -4196,7 +4196,7 @@ binding slots have been popped."
                       ;;              (consp (get condition
                       ;;                          'error-conditions)))))
                       ;; (byte-compile-warn
-                      ;;   "‘%s’ is not a known condition name
+                      ;;   "`%s' is not a known condition name
                       ;;   (in condition-case)"
                       ;;   condition))
                       )
@@ -4235,7 +4235,7 @@ binding slots have been popped."
           ;; for the argument to `signal', not to `condition-case'.
           ;;(unless (consp (get c 'error-conditions))
           ;;  (byte-compile-warn
-          ;;   "‘%s’ is not a known condition name (in condition-case)"
+          ;;   "`%s' is not a known condition name (in condition-case)"
           ;;   c))
           )
         (byte-compile-push-constant condition))
@@ -4529,11 +4529,11 @@ whose definitions have been compiled in this Emacs 
session, as well as
 all functions called by those functions.
 
 The call graph does not include macros, inline functions, or
-primitives that the byte-code interpreter knows about directly \(eq,
-cons, etc.\).
+primitives that the byte-code interpreter knows about directly
+\(`eq', `cons', etc.).
 
 The call tree also lists those functions which are not known to be called
-\(that is, to which no calls have been compiled\), and which cannot be
+\(that is, to which no calls have been compiled), and which cannot be
 invoked interactively."
   (interactive)
   (message "Generating call tree...")
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index 205ae6d..0f75f0a 100644
--- a/lisp/emacs-lisp/cconv.el
+++ b/lisp/emacs-lisp/cconv.el
@@ -679,7 +679,7 @@ and updates the data stored in ENV."
 
     ;; ((and `(quote ,v . ,_) (guard (assq v env)))
     ;;  (byte-compile-log-warning
-    ;;   (format-message "Possible confusion variable/symbol for ‘%S’" v)))
+    ;;   (format-message "Possible confusion variable/symbol for `%S'" v)))
 
     (`(quote . ,_) nil)                 ; quote form
     (`(function . ,_) nil)              ; same as quote
diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el
index 3b69e95..536e418 100644
--- a/lisp/emacs-lisp/check-declare.el
+++ b/lisp/emacs-lisp/check-declare.el
@@ -162,7 +162,7 @@ def\\(?:un\\|subst\\|foo\\|method\\|class\\|\
 ine-\\(?:derived\\|generic\\|\\(?:global\\(?:ized\\)?-\\)?minor\\)-mode\\|\
 \\(?:ine-obsolete-function-\\)?alias[ \t]+'\\|\
 ine-overloadable-function\\)\\)\
-\[ \t]*%s\\([ \t;]+\\|$\\)")
+[ \t]*%s\\([ \t;]+\\|$\\)")
                            (regexp-opt (mapcar 'cadr fnlist) t)))
           (while (re-search-forward re nil t)
             (skip-chars-forward " \t\n")
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el
index 4a9e16a..bf1a21a 100644
--- a/lisp/emacs-lisp/checkdoc.el
+++ b/lisp/emacs-lisp/checkdoc.el
@@ -1663,7 +1663,7 @@ function,command,variable,option or symbol." ms1))))))
             ;;           (concat "\\<" (regexp-quote (car fp)) "\\>")
             ;;           newname))
             ;;         (checkdoc-create-error
-            ;;          "Flag variable names should normally end in ‘-flag’" s
+            ;;          "Flag variable names should normally end in `-flag'" s
             ;;          (marker-position e)))))
             ;; Done with variables
             ))
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index c012a30..dd01ebe 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -1069,8 +1069,11 @@ The value returned is a list of elements of the form
   (or
    (and (assq type cl--generic-typeof-types)
         (progn
-          (if (memq type '(vector array sequence))
-              (message "`%S' also matches CL structs and EIEIO classes" type))
+          ;; FIXME: While this wrinkle in the semantics can be occasionally
+          ;; problematic, this warning is more often annoying than helpful.
+          ;;(if (memq type '(vector array sequence))
+          ;;    (message "`%S' also matches CL structs and EIEIO classes"
+          ;;             type))
           (list cl--generic-typeof-generalizer)))
    (cl-call-next-method)))
 
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index eab22b6..56f9511 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -136,7 +136,7 @@ BODY contains code to execute each time the mode is enabled 
or disabled.
 :variable PLACE        The location to use instead of the variable MODE to 
store
                the state of the mode.  This can be simply a different
                named variable, or a generalized variable.
-               PLACE can also be of the form \(GET . SET), where GET is
+               PLACE can also be of the form (GET . SET), where GET is
                an expression that returns the current state, and SET is
                a function that takes one argument, the new state, and
                sets it.  If you specify a :variable, this function does
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index 0162a9a..a3e3b56 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -3162,12 +3162,12 @@ Do this when stopped before the form or it will be too 
late.
 One side effect of using this command is that the next time the
 function or macro is called, Edebug will be called there as well."
   (interactive)
-  (if (not (looking-at "\("))
+  (if (not (looking-at "("))
       (error "You must be before a list form")
     (let ((func
           (save-excursion
             (down-list 1)
-            (if (looking-at "\(")
+            (if (looking-at "(")
                 (edebug--form-data-name
                  (edebug-get-form-data-entry (point)))
               (read (current-buffer))))))
@@ -3216,57 +3216,45 @@ This is useful for exiting even if `unwind-protect' 
code may be executed."
   (setq edebug-execution-mode 'Go-nonstop)
   (top-level))
 
-
 ;;(defun edebug-exit-out ()
 ;;  "Go until the current function exits."
 ;;  (interactive)
 ;;  (edebug-set-mode 'exiting "Exit..."))
 
-
-;;; The following initial mode setting definitions are not used yet.
-
-'(defconst edebug-initial-mode-alist
-  '((edebug-Continue-fast . Continue-fast)
-    (edebug-Trace-fast . Trace-fast)
-    (edebug-continue . continue)
-    (edebug-trace . trace)
-    (edebug-go . go)
-    (edebug-step-through . step)
-    (edebug-Go-nonstop . Go-nonstop)
-    )
+(defconst edebug-initial-mode-alist
+  '((edebug-step-mode . step)
+    (edebug-next-mode . next)
+    (edebug-trace-mode . trace)
+    (edebug-Trace-fast-mode . Trace-fast)
+    (edebug-go-mode . go)
+    (edebug-continue-mode . continue)
+    (edebug-Continue-fast-mode . Continue-fast)
+    (edebug-Go-nonstop-mode . Go-nonstop))
   "Association list between commands and the modes they set.")
 
+(defvar edebug-mode-map)               ; will be defined fully later.
 
-'(defun edebug-set-initial-mode ()
-  "Ask for the initial mode of the enclosing function.
+(defun edebug-set-initial-mode ()
+  "Set the initial execution mode of Edebug.
 The mode is requested via the key that would be used to set the mode in
 edebug-mode."
   (interactive)
-  (let* ((this-function (edebug-which-function))
-        (keymap (if (eq edebug-mode-map (current-local-map))
-                    edebug-mode-map))
-        (old-mode (or (get this-function 'edebug-initial-mode)
-                      edebug-initial-mode))
+  (let* ((old-mode edebug-initial-mode)
         (key (read-key-sequence
               (format
-               "Change initial edebug mode for %s from %s (%s) to (enter key): 
"
-                      this-function
-                      old-mode
-                      (where-is-internal
-                       (car (rassq old-mode edebug-initial-mode-alist))
-                       keymap 'firstonly
-                       ))))
-        (mode (cdr (assq (key-binding key) edebug-initial-mode-alist)))
-        )
-    (if (and mode
-            (or (get this-function 'edebug-initial-mode)
-                (not (eq mode edebug-initial-mode))))
+               "Change initial edebug mode from %s (%c) to (enter key): "
+               old-mode
+               (aref (where-is-internal
+                      (car (rassq old-mode edebug-initial-mode-alist))
+                      edebug-mode-map 'firstonly)
+                     0))))
+        (mode (cdr (assq (lookup-key edebug-mode-map key)
+                         edebug-initial-mode-alist))))
+    (if mode
        (progn
-         (put this-function 'edebug-initial-mode mode)
-         (message "Initial mode for %s is now: %s"
-                  this-function mode))
-      (error "Key must map to one of the mode changing commands")
-      )))
+         (setq edebug-initial-mode mode)
+         (message "Edebug's initial mode is now: %s" mode))
+      (error "Key must map to one of the mode changing commands"))))
 
 ;;; Evaluation of expressions
 
@@ -3425,7 +3413,9 @@ be installed in `emacs-lisp-mode-map'.")
   (define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode)
   (define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode)
   (define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode)
-  (define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where))
+  (define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where)
+  ;; The following isn't a GUD binding.
+  (define-key emacs-lisp-mode-map "\C-x\C-a\C-m" 'edebug-set-initial-mode))
 
 (defvar edebug-mode-map
   (let ((map (copy-keymap emacs-lisp-mode-map)))
@@ -3790,10 +3780,10 @@ Otherwise call `debug' normally."
       (if t (progn
 
       ;; Delete interspersed edebug internals.
-      (while (re-search-forward "^  \(?edebug" nil t)
+      (while (re-search-forward "^  (?edebug" nil t)
        (beginning-of-line)
        (cond
-        ((looking-at "^  \(edebug-after")
+        ((looking-at "^  (edebug-after")
          ;; Previous lines may contain code, so just delete this line.
          (setq last-ok-point (point))
          (forward-line 1)
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index a2f5f8a..e3f7b11 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -135,10 +135,10 @@ Currently under control of this var:
       (or (cl--find-class class) class)
     class))
 
-(defun class-p (class)
-  "Return non-nil if CLASS is a valid class vector.
-CLASS is a symbol."                     ;FIXME: Is it a vector or a symbol?
-  (and (symbolp class) (eieio--class-p (cl--find-class class))))
+(defun class-p (x)
+  "Return non-nil if X is a valid class vector.
+X can also be is a symbol."
+  (eieio--class-p (if (symbolp x) (cl--find-class x) x)))
 
 (defun eieio--class-print-name (class)
   "Return a printed representation of CLASS."
@@ -769,7 +769,8 @@ Fills in OBJ's SLOT with its default value."
   (cl-check-type obj (or eieio-object class))
   (cl-check-type slot symbol)
   (let* ((cl (cond ((symbolp obj) (cl--find-class obj))
-                   (t (eieio--object-class obj))))
+                   ((eieio-object-p obj) (eieio--object-class obj))
+                   (t obj)))
         (c (eieio--slot-name-index cl slot)))
     (if (not c)
        ;; It might be missing because it is a :class allocated slot.
@@ -850,7 +851,7 @@ Fills in the default value in CLASS' in SLOT with VALUE."
       ;; gnus/registry.el, so it might be used elsewhere as well, so let's
       ;; keep it for now.
       ;; FIXME: Generate a compile-time warning for it!
-      ;; (error "Can't ‘oset-default’ an instance-allocated slot: %S of %S"
+      ;; (error "Can't `oset-default' an instance-allocated slot: %S of %S"
       ;;        slot class)
       (eieio--validate-slot-value class c value slot)
       ;; Set this into the storage for defaults.
diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el
index cae3fa2..f899f40 100644
--- a/lisp/emacs-lisp/ert-x.el
+++ b/lisp/emacs-lisp/ert-x.el
@@ -137,7 +137,7 @@ the name of the test and the result of NAME-FORM."
 
 This effectively executes
 
-  \(apply (car COMMAND) (cdr COMMAND)\)
+  (apply (car COMMAND) (cdr COMMAND))
 
 and returns the same value, but additionally runs hooks like
 `pre-command-hook' and `post-command-hook', and sets variables
@@ -189,7 +189,7 @@ test for `called-interactively' in the command will fail."
   "Return a copy of S with all matches of REGEXPS removed.
 
 Elements of REGEXPS may also be two-element lists \(REGEXP
-SUBEXP\), where SUBEXP is the number of a subexpression in
+SUBEXP), where SUBEXP is the number of a subexpression in
 REGEXP.  In that case, only that subexpression will be removed
 rather than the entire match."
   ;; Use a temporary buffer since replace-match copies strings, which
@@ -215,7 +215,7 @@ property list, or no properties if there is no plist before 
it.
 As a simple example,
 
 \(ert-propertized-string \"foo \" \\='(face italic) \"bar\" \" baz\" nil \
-\" quux\"\)
+\" quux\")
 
 would return the string \"foo bar baz quux\" where the substring
 \"bar baz\" has a `face' property with the value `italic'.
diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el
index d47e5d9..2eba021 100644
--- a/lisp/emacs-lisp/ert.el
+++ b/lisp/emacs-lisp/ert.el
@@ -187,7 +187,7 @@ using :expected-result.  See `ert-test-result-type-p' for a
 description of valid values for RESULT-TYPE.
 
 \(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] \
-\[:tags '(TAG...)] BODY...)"
+[:tags '(TAG...)] BODY...)"
   (declare (debug (&define :name test
                            name sexp [&optional stringp]
                           [&rest keywordp sexp] def-body))
@@ -887,10 +887,10 @@ Valid result types:
 nil -- Never matches.
 t -- Always matches.
 :failed, :passed, :skipped -- Matches corresponding results.
-\(and TYPES...\) -- Matches if all TYPES match.
-\(or TYPES...\) -- Matches if some TYPES match.
-\(not TYPE\) -- Matches if TYPE does not match.
-\(satisfies PREDICATE\) -- Matches if PREDICATE returns true when called with
+\(and TYPES...) -- Matches if all TYPES match.
+\(or TYPES...) -- Matches if some TYPES match.
+\(not TYPE) -- Matches if TYPE does not match.
+\(satisfies PREDICATE) -- Matches if PREDICATE returns true when called with
                            RESULT."
   ;; It would be easy to add `member' and `eql' types etc., but I
   ;; haven't bothered yet.
@@ -946,7 +946,7 @@ a test   -- (i.e., an object of the ert-test data-type) 
Selects that test.
 a symbol -- Selects the test that the symbol names, errors if none.
 \(member TESTS...) -- Selects the elements of TESTS, a list of tests
     or symbols naming tests.
-\(eql TEST\) -- Selects TEST, a test or a symbol naming a test.
+\(eql TEST) -- Selects TEST, a test or a symbol naming a test.
 \(and SELECTORS...) -- Selects the tests that match all SELECTORS.
 \(or SELECTORS...)  -- Selects the tests that match any of the SELECTORS.
 \(not SELECTOR)     -- Selects all tests that do not match SELECTOR.
diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
index 026a4a7..69d5455 100644
--- a/lisp/emacs-lisp/find-func.el
+++ b/lisp/emacs-lisp/find-func.el
@@ -62,7 +62,7 @@ 
ine\\(?:-global\\)?-minor-mode\\|ine-compilation-mode\\|un-cvs-mode\\|\
 
foo\\|\\(?:[^icfgv]\\|g[^r]\\)\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\
 menu-bar-make-toggle\\)"
    find-function-space-re
-   "\\('\\|\(quote \\)?%s\\(\\s-\\|$\\|\(\\|\)\\)")
+   "\\('\\|(quote \\)?%s\\(\\s-\\|$\\|[()]\\)")
   "The regexp used by `find-function' to search for a function definition.
 Note it must contain a `%s' at the place where `format'
 should insert the function name.  The default value avoids `defconst',
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index bbe6b36..94fe6c3 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -233,7 +233,7 @@ turned into calls of the form (SETTER ARGS... VAL).
 
 If FIX-RETURN is non-nil, then SETTER is not assumed to return VAL and
 instead the assignment is turned into something equivalent to
-  \(let ((temp VAL))
+  (let ((temp VAL))
     (SETTER ARGS... temp)
     temp)
 so as to preserve the semantics of `setf'."
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 8aa34c7..fec9467 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -28,6 +28,8 @@
 
 ;;; Code:
 
+(eval-when-compile (require 'cl-lib))
+
 (defvar font-lock-comment-face)
 (defvar font-lock-doc-face)
 (defvar font-lock-keywords-case-fold-search)
@@ -87,6 +89,9 @@
     table)
   "Syntax table used in `lisp-mode'.")
 
+(eval-and-compile
+  (defconst lisp-mode-symbol-regexp "\\(?:\\sw\\|\\s_\\|\\\\.\\)+"))
+
 (defvar lisp-imenu-generic-expression
   (list
    (list nil
@@ -110,7 +115,7 @@
                                 ;; CLOS and EIEIO
                                "defgeneric" "defmethod")
                               t))
-                          "\\s-+\\(\\(\\sw\\|\\s_\\)+\\)"))
+                          "\\s-+\\(" lisp-mode-symbol-regexp "\\)"))
         2)
    (list (purecopy "Variables")
         (purecopy (concat "^\\s-*("
@@ -122,11 +127,11 @@
                                 "defconstant"
                                "defparameter" "define-symbol-macro")
                               t))
-                          "\\s-+\\(\\(\\sw\\|\\s_\\)+\\)"))
+                          "\\s-+\\(" lisp-mode-symbol-regexp "\\)"))
         2)
    ;; For `defvar', we ignore (defvar FOO) constructs.
    (list (purecopy "Variables")
-        (purecopy (concat "^\\s-*(defvar\\s-+\\(\\(\\sw\\|\\s_\\)+\\)"
+        (purecopy (concat "^\\s-*(defvar\\s-+\\(" lisp-mode-symbol-regexp "\\)"
                           "[[:space:]\n]+[^)]"))
         1)
    (list (purecopy "Types")
@@ -143,7 +148,7 @@
                                 ;; CLOS and EIEIO
                                 "defclass")
                               t))
-                          "\\s-+'?\\(\\(\\sw\\|\\s_\\)+\\)"))
+                          "\\s-+'?\\(" lisp-mode-symbol-regexp "\\)"))
         2))
 
   "Imenu generic expression for Lisp mode.  See `imenu-generic-expression'.")
@@ -220,7 +225,10 @@
 (defun lisp--el-match-keyword (limit)
   ;; FIXME: Move to elisp-mode.el.
   (catch 'found
-    (while (re-search-forward "(\\(\\(?:\\sw\\|\\s_\\)+\\)\\_>" limit t)
+    (while (re-search-forward
+            (eval-when-compile
+              (concat "(\\(" lisp-mode-symbol-regexp "\\)\\_>"))
+            limit t)
       (let ((sym (intern-soft (match-string 1))))
        (when (or (special-form-p sym)
                  (and (macrop sym)
@@ -229,6 +237,19 @@
                              (match-beginning 0)))))
          (throw 'found t))))))
 
+(defmacro let-when-compile (bindings &rest body)
+  "Like `let', but allow for compile time optimization.
+Use BINDINGS as in regular `let', but in BODY each usage should
+be wrapped in `eval-when-compile'.
+This will generate compile-time constants from BINDINGS."
+  (declare (indent 1) (debug let))
+  (cl-progv (mapcar #'car bindings)
+      (mapcar (lambda (x) (eval (cadr x))) bindings)
+    (macroexpand-all
+     (macroexp-progn
+      body)
+     macroexpand-all-environment)))
+
 (let-when-compile
     ((lisp-fdefs '("defmacro" "defun"))
      (lisp-vdefs '("defvar"))
@@ -249,39 +270,13 @@
      (el-vdefs '("defconst" "defcustom" "defvaralias" "defvar-local"
                  "defface"))
      (el-tdefs '("defgroup" "deftheme"))
-     (el-kw '("while-no-input" "letrec" "pcase" "pcase-exhaustive"
-              "pcase-lambda" "pcase-let" "pcase-let*" "save-restriction"
-              "save-excursion" "save-selected-window"
-              ;; "eval-after-load" "eval-next-after-load"
-              "save-window-excursion" "save-current-buffer"
-              "save-match-data" "combine-after-change-calls"
-              "condition-case-unless-debug" "track-mouse"
-              "eval-and-compile" "eval-when-compile" "with-case-table"
-              "with-category-table" "with-coding-priority"
-              "with-current-buffer" "with-demoted-errors"
-              "with-electric-help" "with-eval-after-load"
-              "with-file-modes"
-              "with-local-quit" "with-no-warnings"
-              "with-output-to-temp-buffer" "with-selected-window"
-              "with-selected-frame" "with-silent-modifications"
-              "with-syntax-table" "with-temp-buffer" "with-temp-file"
-              "with-temp-message" "with-timeout"
-              "with-timeout-handler"))
      (el-errs '("user-error"))
      ;; Common-Lisp constructs supported by EIEIO.  FIXME: namespace.
      (eieio-fdefs '("defgeneric" "defmethod"))
      (eieio-tdefs '("defclass"))
-     (eieio-kw '("with-slots"))
      ;; Common-Lisp constructs supported by cl-lib.
-     (cl-lib-fdefs '("defmacro" "defsubst" "defun" "defmethod"))
+     (cl-lib-fdefs '("defmacro" "defsubst" "defun" "defmethod" "defgeneric"))
      (cl-lib-tdefs '("defstruct" "deftype"))
-     (cl-lib-kw '("progv" "eval-when" "case" "ecase" "typecase"
-                  "etypecase" "ccase" "ctypecase" "loop" "do" "do*"
-                  "the" "locally" "proclaim" "declaim" "letf" "go"
-                  ;; "lexical-let" "lexical-let*"
-                  "symbol-macrolet" "flet" "flet*" "destructuring-bind"
-                  "labels" "macrolet" "tagbody" "multiple-value-bind"
-                  "block" "return" "return-from"))
      (cl-lib-errs '("assert" "check-type"))
      ;; Common-Lisp constructs not supported by cl-lib.
      (cl-fdefs '("defsetf" "define-method-combination"
@@ -290,14 +285,20 @@
                  "define-compiler-macro" "define-modify-macro"))
      (cl-vdefs '("define-symbol-macro" "defconstant" "defparameter"))
      (cl-tdefs '("defpackage" "defstruct" "deftype"))
-     (cl-kw '("prog" "prog*" "handler-case" "handler-bind"
-              "in-package" "restart-case" ;; "inline"
-              "restart-bind" "break" "multiple-value-prog1"
-              "compiler-let" "with-accessors" "with-compilation-unit"
+     (cl-kw '("block" "break" "case" "ccase" "compiler-let" "ctypecase"
+              "declaim" "destructuring-bind" "do" "do*"
+              "ecase" "etypecase" "eval-when" "flet" "flet*"
+              "go" "handler-case" "handler-bind" "in-package" ;; "inline"
+              "labels" "letf" "locally" "loop"
+              "macrolet" "multiple-value-bind" "multiple-value-prog1"
+              "proclaim" "prog" "prog*" "progv"
+              "restart-case" "restart-bind" "return" "return-from"
+              "symbol-macrolet" "tagbody" "the" "typecase"
+              "with-accessors" "with-compilation-unit"
               "with-condition-restarts" "with-hash-table-iterator"
               "with-input-from-string" "with-open-file"
               "with-open-stream" "with-package-iterator"
-              "with-simple-restart" "with-standard-io-syntax"))
+              "with-simple-restart" "with-slots" "with-standard-io-syntax"))
      (cl-errs '("abort" "cerror")))
   (let ((vdefs (eval-when-compile
                  (append lisp-vdefs el-vdefs cl-vdefs)))
@@ -318,16 +319,9 @@
                                           eieio-fdefs eieio-tdefs
                                           cl-fdefs cl-vdefs cl-tdefs)
                                   t)))
-        ;; Elisp and Common Lisp keywords.
-        ;; (el-kws-re (eval-when-compile
-        ;;              (regexp-opt (append
-        ;;                           lisp-kw el-kw eieio-kw
-        ;;                           (cons "go" (mapcar (lambda (s) (concat 
"cl-" s))
-        ;;                                              (remove "go" 
cl-lib-kw))))
-        ;;                          t)))
+        ;; Common Lisp keywords (Elisp keywords are handled dynamically).
         (cl-kws-re (eval-when-compile
-                     (regexp-opt (append lisp-kw cl-kw eieio-kw cl-lib-kw)
-                                 t)))
+                     (regexp-opt (append lisp-kw cl-kw) t)))
         ;; Elisp and Common Lisp "errors".
         (el-errs-re (eval-when-compile
                       (regexp-opt (append (mapcar (lambda (s) (concat "cl-" s))
@@ -349,7 +343,8 @@
                   ;; Any whitespace and defined object.
                   "[ \t']*"
                   "\\(([ \t']*\\)?" ;; An opening paren.
-                  "\\(\\(setf\\)[ 
\t]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?")
+                  "\\(\\(setf\\)[ \t]+" lisp-mode-symbol-regexp
+                  "\\|" lisp-mode-symbol-regexp "\\)?")
           (1 font-lock-keyword-face)
           (3 (let ((type (get (intern-soft (match-string 1)) 
'lisp-define-type)))
                (cond ((eq type 'var) font-lock-variable-name-face)
@@ -360,7 +355,8 @@
                      ;; defmethod with (setf foo) as name.
                      ((or (not (match-string 2)) ;; Normal defun.
                           (and (match-string 2)  ;; Setf method.
-                               (match-string 4))) 
font-lock-function-name-face)))
+                               (match-string 4)))
+                      font-lock-function-name-face)))
              nil t))
         ;; Emacs Lisp autoload cookies.  Supports the slightly different
         ;; forms used by mh-e, calendar, etc.
@@ -373,7 +369,8 @@
                   ;; Any whitespace and defined object.
                   "[ \t']*"
                   "\\(([ \t']*\\)?" ;; An opening paren.
-                  "\\(\\(setf\\)[ 
\t]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?")
+                  "\\(\\(setf\\)[ \t]+" lisp-mode-symbol-regexp
+                  "\\|" lisp-mode-symbol-regexp "\\)?")
           (1 font-lock-keyword-face)
           (3 (let ((type (get (intern-soft (match-string 1)) 
'lisp-define-type)))
                (cond ((eq type 'var) font-lock-variable-name-face)
@@ -395,22 +392,25 @@
          (lisp--el-match-keyword . 1)
          ;; Exit/Feature symbols as constants.
          (,(concat "(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\_>"
-                   "[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?")
+                   "[ \t']*\\(" lisp-mode-symbol-regexp "\\)?")
            (1 font-lock-keyword-face)
            (2 font-lock-constant-face nil t))
          ;; Erroneous structures.
          (,(concat "(" el-errs-re "\\_>")
            (1 font-lock-warning-face))
          ;; Words inside \\[] tend to be for `substitute-command-keys'.
-         ("\\\\\\\\\\[\\(\\(?:\\sw\\|\\s_\\)+\\)\\]"
+         (,(concat "\\\\\\\\\\[\\(" lisp-mode-symbol-regexp "\\)\\]")
           (1 font-lock-constant-face prepend))
          ;; Words inside ‘’ and '' and `' tend to be symbol names.
-         ("['`‘]\\(\\(?:\\sw\\|\\s_\\)\\(?:\\sw\\|\\s_\\)+\\)['’]"
+         (,(concat "['`‘]\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)"
+                   lisp-mode-symbol-regexp "\\)['’]")
           (1 font-lock-constant-face prepend))
          ;; Constant values.
-         ("\\_<:\\(?:\\sw\\|\\s_\\)+\\_>" 0 font-lock-builtin-face)
+         (,(concat "\\_<:" lisp-mode-symbol-regexp "\\_>")
+          (0 font-lock-builtin-face))
          ;; ELisp and CLisp `&' keywords as types.
-         ("\\_<\\&\\(?:\\sw\\|\\s_\\)+\\_>" . font-lock-type-face)
+         (,(concat "\\_<\\&" lisp-mode-symbol-regexp "\\_>")
+          . font-lock-type-face)
          ;; ELisp regexp grouping constructs
          (,(lambda (bound)
              (catch 'found
@@ -447,19 +447,22 @@
          (,(concat "(" cl-kws-re "\\_>") . 1)
          ;; Exit/Feature symbols as constants.
          (,(concat "(\\(catch\\|throw\\|provide\\|require\\)\\_>"
-                   "[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?")
+                   "[ \t']*\\(" lisp-mode-symbol-regexp "\\)?")
            (1 font-lock-keyword-face)
            (2 font-lock-constant-face nil t))
          ;; Erroneous structures.
          (,(concat "(" cl-errs-re "\\_>")
            (1 font-lock-warning-face))
          ;; Words inside ‘’ and '' and `' tend to be symbol names.
-         ("['`‘]\\(\\(?:\\sw\\|\\s_\\)\\(?:\\sw\\|\\s_\\)+\\)['’]"
+         (,(concat "['`‘]\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)"
+                   lisp-mode-symbol-regexp "\\)['’]")
           (1 font-lock-constant-face prepend))
          ;; Constant values.
-         ("\\_<:\\(?:\\sw\\|\\s_\\)+\\_>" 0 font-lock-builtin-face)
+         (,(concat "\\_<:" lisp-mode-symbol-regexp "\\_>")
+          (0 font-lock-builtin-face))
          ;; ELisp and CLisp `&' keywords as types.
-         ("\\_<\\&\\(?:\\sw\\|\\s_\\)+\\_>" . font-lock-type-face)
+         (,(concat "\\_<\\&" lisp-mode-symbol-regexp "\\_>")
+          . font-lock-type-face)
          ;; This is too general -- rms.
          ;; A user complained that he has functions whose names start with `do'
          ;; and that they get the wrong color.
@@ -482,7 +485,10 @@
   (let* ((firstsym (and listbeg
                         (save-excursion
                           (goto-char listbeg)
-                          (and (looking-at "([ \t\n]*\\(\\(\\sw\\|\\s_\\)+\\)")
+                          (and (looking-at
+                                (eval-when-compile
+                                  (concat "([ \t\n]*\\("
+                                          lisp-mode-symbol-regexp "\\)")))
                                (match-string 1)))))
          (docelt (and firstsym
                       (function-get (intern-soft firstsym)
@@ -898,7 +904,7 @@ property `lisp-indent-function' (or the deprecated 
`lisp-indent-hook'),
 it specifies how to indent.  The property value can be:
 
 * `defun', meaning indent `defun'-style
-  \(this is also the case if there is no property and the function
+  (this is also the case if there is no property and the function
   has a name that begins with \"def\", and three or more arguments);
 
 * an integer N, meaning indent the first N arguments specially
diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el
index 7b7b48c..ca977db 100644
--- a/lisp/emacs-lisp/lisp.el
+++ b/lisp/emacs-lisp/lisp.el
@@ -364,8 +364,7 @@ is called as a function to find the defun's beginning."
          (arg-+ve (> arg 0)))
       (save-restriction
        (widen)
-       (let ((ppss (let (syntax-begin-function
-                         font-lock-beginning-of-syntax-function)
+       (let ((ppss (let (syntax-begin-function)
                      (syntax-ppss)))
              ;; position of least enclosing paren, or nil.
              encl-pos)
diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el
index 43fd4ef57a..b8fb540 100644
--- a/lisp/emacs-lisp/map-ynp.el
+++ b/lisp/emacs-lisp/map-ynp.el
@@ -44,7 +44,7 @@ Takes args PROMPTER ACTOR LIST, and optional args HELP and 
ACTION-ALIST.
 LIST is a list of objects, or a function of no arguments to return the next
 object or nil.
 
-If PROMPTER is a string, the prompt is \(format PROMPTER OBJECT\).  If not
+If PROMPTER is a string, the prompt is \(format PROMPTER OBJECT).  If not
 a string, PROMPTER is a function of one arg (an object from LIST), which
 returns a string to be used as the prompt for that object.  If the return
 value is not a string, it may be nil to ignore the object or non-nil to act
@@ -56,7 +56,7 @@ which gets called with each object that the user answers 
`yes' for.
 If HELP is given, it is a list (OBJECT OBJECTS ACTION),
 where OBJECT is a string giving the singular noun for an elt of LIST;
 OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
-verb describing ACTOR.  The default is \(\"object\" \"objects\" \"act on\"\).
+verb describing ACTOR.  The default is \(\"object\" \"objects\" \"act on\").
 
 At the prompts, the user may enter y, Y, or SPC to act on that object;
 n, N, or DEL to skip that object; ! to act on all following objects;
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index b0d2ff9..eb66e8f 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1852,12 +1852,12 @@ add a call to it along with some explanatory comments."
                     (save-restriction
                       (widen)
                       (goto-char (point-min))
-                      (search-forward "(package-initialize)" nil 'noerror))))
+                      (re-search-forward "(package-initialize\\_>" nil 
'noerror))))
               ;; Don't visit the file if we don't have to.
               (with-temp-buffer
                 (insert-file-contents user-init-file)
                 (goto-char (point-min))
-                (search-forward "(package-initialize)" nil 'noerror)))))
+                (re-search-forward "(package-initialize\\_>" nil 'noerror)))))
       (unless contains-init
         (with-current-buffer (or buffer
                                  (let ((delay-mode-hooks t))
diff --git a/lisp/emacs-lisp/regexp-opt.el b/lisp/emacs-lisp/regexp-opt.el
index 9888e92..e315733 100644
--- a/lisp/emacs-lisp/regexp-opt.el
+++ b/lisp/emacs-lisp/regexp-opt.el
@@ -143,7 +143,7 @@ If LAX non-nil, don't output parentheses if it doesn't 
require them.
 Merges keywords to avoid backtracking in Emacs's regexp matcher."
   ;; The basic idea is to find the shortest common prefix or suffix, remove it
   ;; and recurse.  If there is no prefix, we divide the list into two so that
-  ;; \(at least) one half will have at least a one-character common prefix.
+  ;; (at least) one half will have at least a one-character common prefix.
 
   ;; Also we delay the addition of grouping parenthesis as long as possible
   ;; until we're sure we need them, and try to remove one-character sequences
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index a21ac7a..a5ff972 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -768,8 +768,8 @@ of all atomic regexps."
      ((= l 3) (string-match "\\`\\(?:\\\\[cCsS_]\\|\\[[^^]\\]\\)" r))
      ((null lax)
       (cond
-       ((string-match "\\`\\[^?\]?\\(?:\\[:[a-z]+:]\\|[^\]]\\)*\\]\\'" r))
-       ((string-match "\\`\\\\(\\(?:[^\\]\\|\\\\[^\)]\\)*\\\\)\\'" r)))))))
+       ((string-match "\\`\\[^?\]?\\(?:\\[:[a-z]+:]\\|[^]]\\)*\\]\\'" r))
+       ((string-match "\\`\\\\(\\(?:[^\\]\\|\\\\[^)]\\)*\\\\)\\'" r)))))))
 
 
 (defun rx-syntax (form)
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 8dc9147..e0f17c0 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -270,6 +270,19 @@ If so, return the non-nil value returned by PRED."
           (throw 'seq--break result))))
     nil))
 
+(cl-defgeneric seq-find (pred seq &optional default)
+  "Return the first element for which (PRED element) is non-nil in SEQ.
+If no element is found, return DEFAULT.
+
+Note that `seq-find' has an ambiguity if the found element is
+identical to DEFAULT, as it cannot be known if an element was
+found or not."
+  (catch 'seq--break
+    (seq-doseq (elt seq)
+      (when (funcall pred elt)
+        (throw 'seq--break elt)))
+    default))
+
 (cl-defgeneric seq-count (pred seq)
   "Return the number of elements for which (PRED element) is non-nil in SEQ."
   (let ((count 0))
@@ -417,13 +430,7 @@ If no element is found, return nil."
     (nreverse result)))
 
 (cl-defmethod seq-drop-while (pred (list list))
-  "Optimized implementation of `seq-drop-while' for lists"
-  (while (and list (funcall pred (car list)))
-    (setq list (cdr list)))
-  list)
-
-(cl-defmethod seq-drop-while (pred (list list))
-  "Optimized implementation of `seq-drop-while' for lists"
+  "Optimized implementation of `seq-drop-while' for lists."
   (while (and list (funcall pred (car list)))
     (setq list (cdr list)))
   list)
diff --git a/lisp/emacs-lisp/shadow.el b/lisp/emacs-lisp/shadow.el
index c7a95e4..17e3be7 100644
--- a/lisp/emacs-lisp/shadow.el
+++ b/lisp/emacs-lisp/shadow.el
@@ -68,9 +68,9 @@ This is slower, but filters out some innocuous shadowing."
   "Return a list of Emacs Lisp files that create shadows.
 This function does the work for `list-load-path-shadows'.
 
-We traverse PATH looking for shadows, and return a \(possibly empty\)
+We traverse PATH looking for shadows, and return a \(possibly empty)
 even-length list of files.  A file in this list at position 2i shadows
-the file in position 2i+1.  Emacs Lisp file suffixes \(.el and .elc\)
+the file in position 2i+1.  Emacs Lisp file suffixes \(.el and .elc)
 are stripped from the file names in the list.
 
 See the documentation for `list-load-path-shadows' for further information."
diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el
index 0c24f79..f305025 100644
--- a/lisp/emacs-lisp/smie.el
+++ b/lisp/emacs-lisp/smie.el
@@ -213,7 +213,7 @@ one of those elements share the same precedence level and 
associativity."
 (defun smie-bnf->prec2 (bnf &rest resolvers)
   "Convert the BNF grammar into a prec2 table.
 BNF is a list of nonterminal definitions of the form:
-  \(NONTERM RHS1 RHS2 ...)
+  (NONTERM RHS1 RHS2 ...)
 where each RHS is a (non-empty) list of terminals (aka tokens) or 
non-terminals.
 Not all grammars are accepted:
 - an RHS cannot be an empty list (this is not needed, since SMIE allows all
@@ -1136,6 +1136,8 @@ METHOD can be:
 - :elem, in which case the function should return either:
   - the offset to use to indent function arguments (ARG = `arg')
   - the basic indentation step (ARG = `basic').
+  - the token to use (when ARG = `empty-line-token') when we don't know how
+    to indent an empty line.
 - :list-intro, in which case ARG is a token and the function should return
   non-nil if TOKEN is followed by a list of expressions (not separated by any
   token) rather than an expression.
@@ -1686,6 +1688,19 @@ should not be computed on the basis of the following 
token."
         (+ (smie-indent-virtual) (smie-indent--offset 'basic))) ;
        (t (smie-indent-virtual))))))                            ;An infix.
 
+(defun smie-indent-empty-line ()
+  "Indentation rule when there's nothing yet on the line."
+  ;; Without this rule, SMIE assumes that an empty line will be filled with an
+  ;; argument (since it falls back to smie-indent-sexps), which tends
+  ;; to indent far too deeply.
+  (when (eolp)
+    (let ((token (or (funcall smie-rules-function :elem 'empty-line-token)
+                     ;; FIXME: Should we default to ";"?
+                     ;; ";"
+                     )))
+      (when (assoc token smie-grammar)
+        (smie-indent-keyword token)))))
+
 (defun smie-indent-exps ()
   ;; Indentation of sequences of simple expressions without
   ;; intervening keywords or operators.  E.g. "a b c" or "g (balbla) f".
@@ -1744,7 +1759,7 @@ should not be computed on the basis of the following 
token."
     smie-indent-comment smie-indent-comment-continue smie-indent-comment-close
     smie-indent-comment-inside smie-indent-inside-string
     smie-indent-keyword smie-indent-after-keyword
-                          smie-indent-exps)
+    smie-indent-empty-line smie-indent-exps)
   "Functions to compute the indentation.
 Each function is called with no argument, shouldn't move point, and should
 return either nil if it has no opinion, or an integer representing the column
diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el
index 05dd7d5..95ed775 100644
--- a/lisp/emacs-lisp/syntax.el
+++ b/lisp/emacs-lisp/syntax.el
@@ -43,8 +43,6 @@
 
 (eval-when-compile (require 'cl-lib))
 
-(defvar font-lock-beginning-of-syntax-function)
-
 ;;; Applying syntax-table properties where needed.
 
 (defvar syntax-propertize-function nil
@@ -106,10 +104,6 @@ Put first the functions more likely to cause a change and 
cheaper to compute.")
                  (point-max))))
   (cons beg end))
 
-(defvar syntax-propertize--done -1
-  "Position up to which syntax-table properties have been set.")
-(make-variable-buffer-local 'syntax-propertize--done)
-
 (defun syntax-propertize--shift-groups (re n)
   (replace-regexp-in-string
    "\\\\(\\?\\([0-9]+\\):"
@@ -290,39 +284,59 @@ The return value is a function suitable for 
`syntax-propertize-function'."
 
 (defun syntax-propertize (pos)
   "Ensure that syntax-table properties are set until POS."
-  (when (and syntax-propertize-function
-             (< syntax-propertize--done pos))
-    ;; (message "Needs to syntax-propertize from %s to %s"
-    ;;          syntax-propertize--done pos)
-    (set (make-local-variable 'parse-sexp-lookup-properties) t)
-    (save-excursion
-      (with-silent-modifications
-        (let* ((start (max syntax-propertize--done (point-min)))
-               (end (max pos
-                         (min (point-max)
-                              (+ start syntax-propertize-chunk-size))))
-               (funs syntax-propertize-extend-region-functions))
-          (while funs
-            (let ((new (funcall (pop funs) start end)))
-              (if (or (null new)
-                      (and (>= (car new) start) (<= (cdr new) end)))
-                  nil
-                (setq start (car new))
-                (setq end (cdr new))
-                ;; If there's been a change, we should go through the
-                ;; list again since this new position may
-                ;; warrant a different answer from one of the funs we've
-                ;; already seen.
-                (unless (eq funs
-                            (cdr syntax-propertize-extend-region-functions))
-                  (setq funs syntax-propertize-extend-region-functions)))))
-          ;; Move the limit before calling the function, so the function
-          ;; can use syntax-ppss.
-          (setq syntax-propertize--done end)
-          ;; (message "syntax-propertizing from %s to %s" start end)
-          (remove-text-properties start end
-                                  '(syntax-table nil syntax-multiline nil))
-          (funcall syntax-propertize-function start end))))))
+  (when (< syntax-propertize--done pos)
+    (if (null syntax-propertize-function)
+        (setq syntax-propertize--done (max (point-max) pos))
+      ;; (message "Needs to syntax-propertize from %s to %s"
+      ;;          syntax-propertize--done pos)
+      (set (make-local-variable 'parse-sexp-lookup-properties) t)
+      (save-excursion
+        (with-silent-modifications
+          (make-local-variable 'syntax-propertize--done) ;Just in case!
+          (let* ((start (max (min syntax-propertize--done (point-max))
+                             (point-min)))
+                 (end (max pos
+                           (min (point-max)
+                                (+ start syntax-propertize-chunk-size))))
+                 (funs syntax-propertize-extend-region-functions))
+            (while funs
+              (let ((new (funcall (pop funs) start end))
+                    ;; Avoid recursion!
+                    (syntax-propertize--done most-positive-fixnum))
+                (if (or (null new)
+                        (and (>= (car new) start) (<= (cdr new) end)))
+                    nil
+                  (setq start (car new))
+                  (setq end (cdr new))
+                  ;; If there's been a change, we should go through the
+                  ;; list again since this new position may
+                  ;; warrant a different answer from one of the funs we've
+                  ;; already seen.
+                  (unless (eq funs
+                              (cdr syntax-propertize-extend-region-functions))
+                    (setq funs syntax-propertize-extend-region-functions)))))
+            ;; Move the limit before calling the function, so the function
+            ;; can use syntax-ppss.
+            (setq syntax-propertize--done end)
+            ;; (message "syntax-propertizing from %s to %s" start end)
+            (remove-text-properties start end
+                                    '(syntax-table nil syntax-multiline nil))
+            ;; Avoid recursion!
+            (let ((syntax-propertize--done most-positive-fixnum))
+              (funcall syntax-propertize-function start end))))))))
+
+;;; Link syntax-propertize with syntax.c.
+
+(defvar syntax-propertize-chunks
+  ;; We're not sure how far we'll go.  In my tests, using chunks of 20000
+  ;; brings to overhead to something negligible.  Passing ‘charpos’ directly
+  ;; also works (basically works line-by-line) but results in an overhead which
+  ;; I thought was a bit too high (like around 50%).
+  2000)
+
+(defun internal--syntax-propertize (charpos)
+  ;; FIXME: Called directly from C.
+  (syntax-propertize (min (+ syntax-propertize-chunks charpos) (point-max))))
 
 ;;; Incrementally compute and memoize parser state.
 
@@ -360,6 +374,7 @@ from each other, to avoid keeping too much useless info.")
   "Function to move back outside of any comment/string/paren.
 This function should move the cursor back to some syntactically safe
 point (where the PPSS is equivalent to nil).")
+(make-obsolete-variable 'syntax-begin-function nil "25.1")
 
 (defvar syntax-ppss-cache nil
   "List of (POS . PPSS) pairs, in decreasing POS order.")
@@ -487,11 +502,6 @@ running the hook."
              ;; - The function might be slow.
              ;; - If this function almost always finds a safe nearby spot,
              ;;   the cache won't be populated, so consulting it is cheap.
-             (when (and (not syntax-begin-function)
-                        (boundp 'font-lock-beginning-of-syntax-function)
-                        font-lock-beginning-of-syntax-function)
-               (set (make-local-variable 'syntax-begin-function)
-                    font-lock-beginning-of-syntax-function))
              (when (and syntax-begin-function
                         (progn (goto-char pos)
                                (funcall syntax-begin-function)
diff --git a/lisp/emacs-lisp/timer.el b/lisp/emacs-lisp/timer.el
index dca459f..c9e3fbe 100644
--- a/lisp/emacs-lisp/timer.el
+++ b/lisp/emacs-lisp/timer.el
@@ -205,7 +205,7 @@ timers).  If nil, allocate a new cell."
   "Insert TIMER into `timer-idle-list'.
 This arranges to activate TIMER whenever Emacs is next idle.
 If optional argument DONT-WAIT is non-nil, set TIMER to activate
-immediately \(see below\), or at the right time, if Emacs is
+immediately \(see below), or at the right time, if Emacs is
 already idle.
 
 REUSE-CELL, if non-nil, is a cons cell to reuse when inserting
@@ -345,18 +345,26 @@ This function is called, by name, directly by the C code."
 (defun run-at-time (time repeat function &rest args)
   "Perform an action at time TIME.
 Repeat the action every REPEAT seconds, if REPEAT is non-nil.
-TIME should be one of: a string giving an absolute time like
-\"11:23pm\" (the acceptable formats are those recognized by
-`diary-entry-time'; note that such times are interpreted as times
-today, even if in the past); a string giving a relative time like
-\"2 hours 35 minutes\" (the acceptable formats are those
-recognized by `timer-duration'); nil meaning now; a number of
-seconds from now; a value from `encode-time'; or t (with non-nil
-REPEAT) meaning the next integral multiple of REPEAT.  REPEAT may
-be an integer or floating point number.  The action is to call
-FUNCTION with arguments ARGS.
+REPEAT may be an integer or floating point number.
+TIME should be one of:
+- a string giving today's time like \"11:23pm\"
+  (the acceptable formats are HHMM, H:MM, HH:MM, HHam, HHAM,
+  HHpm, HHPM, HH:MMam, HH:MMAM, HH:MMpm, or HH:MMPM;
+  a period `.' can be used instead of a colon `:' to separate
+  the hour and minute parts);
+- a string giving a relative time like \"90\" or \"2 hours 35 minutes\"
+  (the acceptable forms are a number of seconds without units
+  or some combination of values using units in `timer-duration-words');
+- nil, meaning now;
+- a number of seconds from now;
+- a value from `encode-time';
+- or t (with non-nil REPEAT) meaning the next integral
+  multiple of REPEAT.
 
-This function returns a timer object which you can use in `cancel-timer'."
+The action is to call FUNCTION with arguments ARGS.
+
+This function returns a timer object which you can use in
+`cancel-timer'."
   (interactive "sRun at time: \nNRepeat interval: \naFunction: ")
 
   (or (null repeat)
diff --git a/lisp/emulation/edt-mapper.el b/lisp/emulation/edt-mapper.el
index 9e3667e..c002ecf 100644
--- a/lisp/emulation/edt-mapper.el
+++ b/lisp/emulation/edt-mapper.el
@@ -105,7 +105,7 @@
 ;;;  Determine Window System, and X Server Vendor (if appropriate).
 ;;;
 (defconst edt-window-system (if (featurep 'xemacs) (console-type) 
window-system)
-  "Indicates window system \(in GNU Emacs\) or console type \(in XEmacs\).")
+  "Indicates window system (in GNU Emacs) or console type (in XEmacs).")
 
 (declare-function x-server-vendor "xfns.c" (&optional terminal))
 
diff --git a/lisp/emulation/edt.el b/lisp/emulation/edt.el
index 9bd1627..0c08969 100644
--- a/lisp/emulation/edt.el
+++ b/lisp/emulation/edt.el
@@ -213,23 +213,23 @@ use within the EDT emulation."
 
 (defcustom edt-word-entities '(?\t)
   "Specifies the list of EDT word entity characters.
-The default list, (\?\\t), contains just the TAB character, which
+The default list, (?\\t), contains just the TAB character, which
 emulates EDT.  Characters are specified in the list using their
 decimal ASCII values.  A question mark, followed by the actual
 character, can be used to indicate the numerical value of the
 character, instead of the actual decimal value.  So, ?A means the
-numerical value for the letter A, \?/ means the numerical value for /,
+numerical value for the letter A, ?/ means the numerical value for /,
 etc.  Several unprintable and special characters have special
 representations, which you can also use:
 
-            \?\\b  specifies  BS, C-h
-            \?\\t  specifies  TAB, C-i
-            \?\\n  specifies  LFD, C-j
-            \?\\v  specifies  VTAB, C-k
-            \?\\f  specifies  FF, C-l
-            \?\\r  specifies  CR, C-m
-            \?\\e  specifies  ESC, C-[
-            \?\\\\  specifies  \\
+            ?\\b  specifies  BS, C-h
+            ?\\t  specifies  TAB, C-i
+            ?\\n  specifies  LFD, C-j
+            ?\\v  specifies  VTAB, C-k
+            ?\\f  specifies  FF, C-l
+            ?\\r  specifies  CR, C-m
+            ?\\e  specifies  ESC, C-[
+            ?\\\\  specifies  \\
 
 In EDT Emulation movement-by-word commands, each character in the list
 will be treated as if it were a separate word."
@@ -311,10 +311,10 @@ This means that an edt-user.el file was found in the 
user's `load-path'.")
 ;;;     o edt-emulation-on      o edt-load-keys
 ;;;
 (defconst edt-emacs-variant (if (featurep 'emacs) "gnu" "xemacs")
-  "Indicates Emacs variant:  GNU Emacs or XEmacs \(aka Lucid Emacs\).")
+  "Indicates Emacs variant:  GNU Emacs or XEmacs (aka Lucid Emacs).")
 
 (defconst edt-window-system (if (featurep 'emacs) window-system (console-type))
-  "Indicates window system \(in GNU Emacs\) or console type \(in XEmacs\).")
+  "Indicates window system (in GNU Emacs) or console type (in XEmacs).")
 
 (declare-function x-server-vendor "xfns.c" (&optional terminal))
 
diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index 93fcec8..960cced 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -1536,7 +1536,7 @@ as a Meta key and any number of multiple escapes are 
allowed."
 (defun viper-repeat (arg)
   "Re-execute last destructive command.
 Use the info in viper-d-com, which has the form
-\(com val ch reg inserted-text command-keys\),
+\(com val ch reg inserted-text command-keys),
 where `com' is the command to be re-executed, `val' is the
 argument to `com', `ch' is a flag for repeat, and `reg' is optional;
 if it exists, it is the name of the register for `com'.
@@ -3424,7 +3424,7 @@ controlled by the sign of prefix numeric value."
              ((re-search-backward "[][(){}]" beg-lim t))
              (t
               (error "No matching character on line"))))
-      (cond ((looking-at "[\(\[{]")
+      (cond ((looking-at "[([{]")
             (if com (viper-move-marker-locally 'viper-com-point (point)))
             (forward-sexp 1)
             (if com
@@ -3733,7 +3733,7 @@ With a prefix argument, this function unsets the macros.
 If the optional prefix argument is non-nil and specifies a valid major mode,
 this sets the macros only in the macros in that major mode.  Otherwise,
 the macros are set in the current major mode.
-\(When unsetting the macros, the second argument has no effect.\)"
+\(When unsetting the macros, the second argument has no effect.)"
   (interactive "P")
   (or noninteractive
       (if (not unset)
@@ -3980,7 +3980,7 @@ Null string will repeat previous search."
   (let (buffer buffer-name)
     (setq buffer-name
          (funcall viper-read-buffer-function
-                  (format "Kill buffer \(%s\): "
+                  (format "Kill buffer (%s): "
                           (buffer-name (current-buffer)))))
     (setq buffer
          (if (null buffer-name)
@@ -4588,7 +4588,7 @@ One can use \\=`\\=` and \\='\\=' to temporarily jump 1 
step back."
 ;; Viewing registers
 
 (defun viper-ket-function (arg)
-  "Function called by \], the ket.  View registers and call \]\]."
+  "Function called by ], the ket.  View registers and call ]]."
   (interactive "P")
   (let ((reg (read-char)))
     (cond ((viper-valid-register reg '(letter Letter))
@@ -4605,7 +4605,7 @@ One can use \\=`\\=` and \\='\\=' to temporarily jump 1 
step back."
              viper-InvalidRegister reg)))))
 
 (defun viper-brac-function (arg)
-  "Function called by \[, the brac.  View textmarkers and call \[\[."
+  "Function called by [, the brac.  View textmarkers and call [[."
   (interactive "P")
   (let ((reg (read-char)))
     (cond ((viper= ?\[ reg)
@@ -4981,7 +4981,7 @@ back trace of the execution that leads to the error.  
Please include this
 trace in your bug report.
 
 If you believe that one of Viper's commands goes into an infinite loop
-\(e.g., Emacs freezes\), type:
+\(e.g., Emacs freezes), type:
 
     M-x set-variable <Return> debug-on-quit <Return> t <Return>
 
diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el
index fb2c179..6e55ac5 100644
--- a/lisp/emulation/viper-ex.el
+++ b/lisp/emulation/viper-ex.el
@@ -396,7 +396,7 @@ reversed."
     ))
 
 ;; Get an ex-token which is either an address or a command.
-;; A token has a type, \(command, address, end-mark\), and a value
+;; A token has a type, (command, address, end-mark), and a value
 (defun viper-get-ex-token ()
   (save-window-excursion
     (setq viper-ex-work-buf (get-buffer-create viper-ex-work-buf-name))
@@ -1658,7 +1658,7 @@ reversed."
   (if (and (not (string= ex-file (buffer-file-name)))
           (buffer-modified-p)
           (not ex-variant))
-      (error "No write since last change \(:rec! overrides\)"))
+      (error "No write since last change (:rec! overrides)"))
   (recover-file ex-file))
 
 ;; Tell that `rewind' is obsolete and to use `:next count' instead
diff --git a/lisp/emulation/viper-init.el b/lisp/emulation/viper-init.el
index 092de55..f422a13 100644
--- a/lisp/emulation/viper-init.el
+++ b/lisp/emulation/viper-init.el
@@ -102,7 +102,7 @@ docstring.  The variable becomes buffer-local whenever set."
   (declare (indent defun))
   `(progn
     (defvar ,var ,default-value
-      ,(format "%s\n\(buffer local\)" documentation))
+      ,(format "%s\n(buffer local)" documentation))
     (make-variable-buffer-local ',var)))
 
 ;; (viper-loop COUNT BODY) Execute BODY COUNT times.
@@ -778,7 +778,7 @@ Related buffers can be cycled through via :R and :P 
commands."
          "^\\\\[sb][a-z]*{.*}\\s-*$\\|"                        ; latex
          
"address@hidden|@table\\|address@hidden|address@hidden|address@hidden|"       ; 
texinfo
          "^.+:-")                                              ; prolog
-  "Regexps for Headings.  Used by \[\[ and \]\].")
+  "Regexps for Headings.  Used by [[ and ]].")
 
 (defvar viper-heading-end
   (concat "^}\\|"                                              ; C/C++
@@ -786,7 +786,7 @@ Related buffers can be cycled through via :R and :P 
commands."
          "address@hidden \\|"                                          ; 
texinfo
          ")\n\n[ \t\n]*\\|"                                    ; lisp
          "\\.\\s-*$")                                          ; prolog
-      "*Regexps to end Headings/Sections.  Used by \[\].")
+      "*Regexps to end Headings/Sections.  Used by [].")
 
 
 ;; These two vars control the interaction of jumps performed by ' and `.
diff --git a/lisp/emulation/viper-macs.el b/lisp/emulation/viper-macs.el
index 4fa0779..3aff062 100644
--- a/lisp/emulation/viper-macs.el
+++ b/lisp/emulation/viper-macs.el
@@ -327,8 +327,8 @@ Can be used in `viper-custom-file-name' to define permanent 
macros.
 MACRO-NAME is a string of characters or a vector of keys.  STATE is
 either `vi-state' or `insert-state'.  It specifies the Viper state in which to
 define the macro.  MACRO-BODY is a string that represents the keyboard macro.
-Optional SCOPE says whether the macro should be global \(t\), mode-specific
-\(a major-mode symbol\), or buffer-specific \(buffer name, a string\).
+Optional SCOPE says whether the macro should be global \(t), mode-specific
+\(a major-mode symbol), or buffer-specific \(buffer name, a string).
 If SCOPE is nil, the user is asked to specify the scope."
   (let* (state-name keymap
         (macro-alist-var
@@ -894,7 +894,7 @@ mistakes in macro names to be passed to this function is to 
use
   (set-register reg last-kbd-macro))
 
 (defun viper-register-macro (count)
-  "Keyboard macros in registers - a modified \@ command."
+  "Keyboard macros in registers - a modified @ command."
   (interactive "P")
   (let ((reg (downcase (read-char))))
     (cond ((or (and (<= ?a reg) (<= reg ?z)))
diff --git a/lisp/emulation/viper-mous.el b/lisp/emulation/viper-mous.el
index 4d5c86f..5c82bf1 100644
--- a/lisp/emulation/viper-mous.el
+++ b/lisp/emulation/viper-mous.el
@@ -145,7 +145,7 @@ If CLICK-COUNT is 2,then `word' is a Word in Vi sense.
 If the character clicked on is a non-separator and is non-alphanumeric but
 is adjacent to an alphanumeric symbol, then it is considered alphanumeric
 for the purpose of this command.  If this character has a matching
-character, such as `\(' is a match for `\)', then the matching character is
+character, such as `(' is a match for `)', then the matching character is
 also considered alphanumeric.
 For convenience, in Lisp modes, `-' is considered alphanumeric.
 
@@ -250,7 +250,7 @@ On single or double click, returns the word as determined by
 With prefix argument, N, insert that many words.
 This command must be bound to a mouse click.
 The double-click action of the same mouse button must not be bound
-\(or it must be bound to the same function\).
+\(or it must be bound to the same function).
 See `viper-surrounding-word' for the definition of a word in this case."
   (interactive "e\nP")
   (if viper-frame-of-focus     ;; to handle clicks in another frame
@@ -339,7 +339,7 @@ See `viper-surrounding-word' for the definition of a word 
in this case."
    "Find the word clicked or double-clicked on.  Word may be in another window.
 With prefix argument, N, search for N-th occurrence.
 This command must be bound to a mouse click.  The double-click action of the
-same button must not be bound \(or it must be bound to the same function\).
+same button must not be bound \(or it must be bound to the same function).
 See `viper-surrounding-word' for the details on what constitutes a word for
 this command."
   (interactive "e\nP")
diff --git a/lisp/emulation/viper-util.el b/lisp/emulation/viper-util.el
index c4dc569..8c2ad58 100644
--- a/lisp/emulation/viper-util.el
+++ b/lisp/emulation/viper-util.el
@@ -379,7 +379,7 @@ Otherwise return the normal value."
 
 ;; Append LIS2 to LIS1, both alists, by side-effect and returns LIS1
 ;; LIS2 is modified by filtering it: deleting its members of the form
-;; \(car elt\) such that (car elt') is in LIS1.
+;; (car elt) such that (car elt') is in LIS1.
 (defun viper-append-filter-alist (lis1 lis2)
   (let ((temp lis1)
        elt)
@@ -426,7 +426,7 @@ Otherwise return the normal value."
       ;; Issue an error, if no match.
       (unless (eq 0 status)
        (save-excursion
-         (skip-chars-forward " \t\n\j")
+         (skip-chars-forward " \t\n")
          (if (looking-at "ls:")
              (viper-forward-Word 1))
          (error "%s: %s"
@@ -859,7 +859,7 @@ Otherwise return the normal value."
 
 (defsubst viper-is-in-minibuffer ()
   (save-match-data
-    (string-match "\*Minibuf-" (buffer-name))))
+    (string-match "\\*Minibuf-" (buffer-name))))
 
 
 
@@ -1330,7 +1330,7 @@ Works best when set in the hooks to various major modes.
 `strict-vi' means Viper words are (hopefully) exactly as in Vi.
 
 `reformed-vi' means Viper words are like Emacs words \(as determined using
-Emacs syntax tables, which are different for different major modes\) with two
+Emacs syntax tables, which are different for different major modes) with two
 exceptions: the symbol `_' is always part of a word and typical Vi non-word
 symbols, such as `,',:,\",),{, etc., are excluded.
 This behaves very close to `strict-vi', but also works well with non-ASCII
diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el
index 0933c94..6398b47 100644
--- a/lisp/emulation/viper.el
+++ b/lisp/emulation/viper.el
@@ -819,7 +819,7 @@ It also can't undo some Viper settings."
 ;; fundamental
 (defun viper-major-mode-change-sentinel ()
   (save-match-data
-    (or (string-match "\*Minibuf-" (buffer-name))
+    (or (string-match "\\*Minibuf-" (buffer-name))
        (setq viper-new-major-mode-buffer-list
              (cons (current-buffer) viper-new-major-mode-buffer-list))))
   ;; change the global value of hook
diff --git a/lisp/epg.el b/lisp/epg.el
index ed71e96..aa79c7d 100644
--- a/lisp/epg.el
+++ b/lisp/epg.el
@@ -2199,7 +2199,7 @@ The return value is an alist mapping from types to 
values."
       (if (eq index (string-match "[ \t\n\r]*" string index))
          (setq index (match-end 0)))
       (if (eq index (string-match
-                    "\\([0-9]+\\(\\.[0-9]+\\)*\\)\[ \t\n\r]*=[ \t\n\r]*"
+                    "\\([0-9]+\\(\\.[0-9]+\\)*\\)[ \t\n\r]*=[ \t\n\r]*"
                     string index))
          (setq type (match-string 1 string)
                index (match-end 0))
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 958c5ef..ec45dcf 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -1541,7 +1541,7 @@ A server may send more than one 005 message."
     (while (erc-response.command-args parsed)
       (let ((section (pop (erc-response.command-args parsed))))
         ;; fill erc-server-parameters
-        (when (string-match "^\\([A-Z]+\\)\=\\(.*\\)$\\|^\\([A-Z]+\\)$"
+        (when (string-match "^\\([A-Z]+\\)=\\(.*\\)$\\|^\\([A-Z]+\\)$"
                             section)
           (add-to-list 'erc-server-parameters
                        `(,(or (match-string 1 section)
diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el
index 55f298b..0622b18 100644
--- a/lisp/erc/erc-match.el
+++ b/lisp/erc/erc-match.el
@@ -84,7 +84,7 @@ Useful to mark nicks from dangerous hosts."
 
 (defcustom erc-current-nick-highlight-type 'keyword
   "Determines how to highlight text in which your current nickname appears
-\(does not apply to text sent by you\).
+\(does not apply to text sent by you).
 
 The following values are allowed:
 
diff --git a/lisp/erc/erc-networks.el b/lisp/erc/erc-networks.el
index 441663f..2891fe1 100644
--- a/lisp/erc/erc-networks.el
+++ b/lisp/erc/erc-networks.el
@@ -588,7 +588,7 @@ PORTS is either a number, a list of numbers, or a list of 
port ranges."
     (LagNet "lagnet.org.za")
     (Librenet "librenet.net")
     (LinkNet "link-net.org")
-    (LinuxChix "cats\.meow\.at\\|linuxchix\.org")
+    (LinuxChix "cats\\.meow\\.at\\|linuxchix\\.org")
     (Liquidized "liquidized.net")
     (M-IRC "m-sys.org")
     (MagicStar "magicstar.net")
diff --git a/lisp/erc/erc-services.el b/lisp/erc/erc-services.el
index 2d2fa62..274b01f 100644
--- a/lisp/erc/erc-services.el
+++ b/lisp/erc/erc-services.el
@@ -280,7 +280,7 @@ Example of use:
      "IDENTIFY" nil nil nil))
    "Alist of NickServer details, sorted by network.
 Every element in the list has the form
-  \(SYMBOL NICKSERV REGEXP NICK KEYWORD USE-CURRENT ANSWER SUCCESS-REGEXP)
+  (SYMBOL NICKSERV REGEXP NICK KEYWORD USE-CURRENT ANSWER SUCCESS-REGEXP)
 
 SYMBOL is a network identifier, a symbol, as used in `erc-networks-alist'.
 NICKSERV is the description of the nickserv in the form address@hidden
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 62be63e..8e26db1 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -258,20 +258,20 @@ If nil, only \"> \" will be shown."
 
 (defcustom erc-hide-list nil
   "A global list of IRC message types to hide.
-A typical value would be '(\"JOIN\" \"PART\" \"QUIT\")."
+A typical value would be \(\"JOIN\" \"PART\" \"QUIT\")."
   :group 'erc-ignore
   :type 'erc-message-type)
 
 (defcustom erc-network-hide-list nil
   "A list of IRC networks to hide message types from.
-A typical value would be '((\"freenode\" \"MODE\")
+A typical value would be \((\"freenode\" \"MODE\")
 (\"OFTC\" \"JOIN\" \"QUIT\"))."
   :group 'erc-ignore
   :type 'erc-message-type)
 
 (defcustom erc-channel-hide-list nil
   "A list of IRC channels to hide message types from.
-A typical value would be '((\"#emacs\" \"QUIT\" \JOIN\")
+A typical value would be \((\"#emacs\" \"QUIT\" \"JOIN\")
 (\"#erc\" \"NICK\")."
   :group 'erc-ignore
   :type 'erc-message-type)
@@ -2503,7 +2503,7 @@ non-nil."
 (defcustom erc-lurker-hide-list nil
   "List of IRC type messages to hide when sent by lurkers.
 
-A typical value would be '(\"JOIN\" \"PART\" \"QUIT\").
+A typical value would be \(\"JOIN\" \"PART\" \"QUIT\").
 See also `erc-lurker-p' and `erc-hide-list'."
   :group 'erc-lurker
   :type 'erc-message-type)
@@ -2973,7 +2973,7 @@ VERSION and so on.  It is called with ARGS."
 If FUNC contains a valid function or variable, help about that
 will be displayed.  If FUNC is empty, display an apropos about
 ERC commands.  Otherwise, do `apropos' in the ERC namespace
-\(\"erc-.*LINE\"\).
+\(\"erc-.*LINE\").
 
 Examples:
 To find out about erc and bbdb, do
diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el
index f2e67cc..f0a8515 100644
--- a/lisp/eshell/em-glob.el
+++ b/lisp/eshell/em-glob.el
@@ -193,8 +193,8 @@ The basic syntax is:
   *      .*      matches any group of characters (or none)
   #      *       matches zero or more occurrences of preceding
   ##     +       matches one or more occurrences of preceding
-  (x)    \(x\)   makes `x' a regular expression group
-  |      \|      boolean OR within an expression group
+  (x)    \\(x\\)   makes `x' a regular expression group
+  |      \\|      boolean OR within an expression group
   [a-b]  [a-b]   matches a character or range
   [^a]   [^a]    excludes a character or range
 
diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el
index 499eda4..90dec59 100644
--- a/lisp/eshell/em-hist.el
+++ b/lisp/eshell/em-hist.el
@@ -639,7 +639,7 @@ matched."
   ;; `!'
   ;;      Start a history substitution, except when followed by a
   ;;      space, tab, the end of the line, = or (.
-  (if (not (string-match "^![^ \t\n=\(]" reference))
+  (if (not (string-match "^![^ \t\n=(]" reference))
       reference
     (setq eshell-history-index nil)
     (let ((event (eshell-hist-parse-event-designator reference)))
diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el
index 76751e5..ae6e0d3 100644
--- a/lisp/eshell/em-ls.el
+++ b/lisp/eshell/em-ls.el
@@ -47,7 +47,7 @@ properties to colorize its output based on the setting of
 (defcustom eshell-ls-date-format "%Y-%m-%d"
   "How to display time information in `eshell-ls-file'.
 This is passed to `format-time-string' as a format string.
-To display the date using the current locale, use \"%b \%e\"."
+To display the date using the current locale, use \"%b \ %e\"."
   :version "24.1"
   :type 'string)
 
diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el
index 8ae81df..19597df 100644
--- a/lisp/eshell/em-unix.el
+++ b/lisp/eshell/em-unix.el
@@ -517,7 +517,7 @@ Remove the DIRECTORY(ies), if they are empty.")
      :usage "[OPTION]... SOURCE DEST
    or: mv [OPTION]... SOURCE... DIRECTORY
 Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
-\[OPTION] DIRECTORY...")
+[OPTION] DIRECTORY...")
    (let ((no-dereference t))
      (eshell-mvcpln-template "mv" "moving" 'rename-file
                             eshell-mv-interactive-query
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index 22ccf4e..3df820d 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -627,10 +627,11 @@ newline."
   (let ((proc-running-p (and (eshell-interactive-process)
                             (not queue-p)))
        (inhibit-point-motion-hooks t)
-       after-change-functions)
+       (inhibit-modification-hooks t))
     (unless (and proc-running-p
                 (not (eq (process-status
-                          (eshell-interactive-process)) 'run)))
+                          (eshell-interactive-process))
+                          'run)))
       (if (or proc-running-p
              (>= (point) eshell-last-output-end))
          (goto-char (point-max))
@@ -697,7 +698,7 @@ This is done after all necessary filtering has been done."
   (let ((oprocbuf (if process (process-buffer process)
                    (current-buffer)))
        (inhibit-point-motion-hooks t)
-       after-change-functions)
+       (inhibit-modification-hooks t))
     (let ((functions eshell-preoutput-filter-functions))
       (while (and functions string)
        (setq string (funcall (car functions) string))
diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el
index 2565842..f645702 100644
--- a/lisp/eshell/esh-util.el
+++ b/lisp/eshell/esh-util.el
@@ -228,7 +228,7 @@ If N or M is nil, it means the end of the list."
 
 (defvar eshell-path-env (getenv "PATH")
   "Content of $PATH.
-It might be different from \(getenv \"PATH\"\), when
+It might be different from \(getenv \"PATH\"), when
 `default-directory' points to a remote host.")
 (make-variable-buffer-local 'eshell-path-env)
 
diff --git a/lisp/expand.el b/lisp/expand.el
index 4459c3a..97c8a25 100644
--- a/lisp/expand.el
+++ b/lisp/expand.el
@@ -213,7 +213,7 @@
     "for"                               ; foreach
     (concat
      "for (  )\n"
-     "{\n\n\}"
+     "{\n\n}"
      )
     (list 7 12))
 
@@ -221,7 +221,7 @@
     "whi"                               ; foreach
     (concat
      "while (  )\n"
-     "{\n\n\}"
+     "{\n\n}"
      )
     (list 9 15))
 
@@ -233,7 +233,7 @@
     "iff"
     (concat
      "if (  )\n"
-     "{\n\n\}"
+     "{\n\n}"
      )
     (list 6 12))
 
diff --git a/lisp/faces.el b/lisp/faces.el
index 5485d80..4e7f1a4 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -433,7 +433,7 @@ completely specified)."
 (defun face-attribute-merged-with (attribute value faces &optional frame)
   "Merges ATTRIBUTE, initially VALUE, with faces from FACES until absolute.
 FACES may be either a single face or a list of faces.
-\[This is an internal function.]"
+[This is an internal function.]"
   (cond ((not (face-attribute-relative-p attribute value))
         value)
        ((null faces)
@@ -2691,10 +2691,12 @@ It is used for characters of no fonts too."
      :background "turquoise")          ; looks OK on tty (becomes cyan)
     (((class color) (background dark))
      :background "steelblue3")         ; looks OK on tty (becomes blue)
-    (((background dark))
+    (((background dark) (min-colors 4))
      :background "grey50")
+    (((background light) (min-colors 4))
+     :background "gray")
     (t
-     :background "gray"))
+     :inherit underline))
   "Face used for a matching paren."
   :group 'paren-showing-faces)
 
diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index 5822cf0..a07f99a 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -1,4 +1,4 @@
-;;; filenotify.el --- watch files for changes on disk
+;;; filenotify.el --- watch files for changes on disk  -*- lexical-binding:t 
-*-
 
 ;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
@@ -43,7 +43,7 @@ A key in this hash table is the descriptor as returned from
 `gfilenotify', `inotify', `w32notify' or a file name handler.
 The value in the hash table is a list
 
-  \(DIR (FILE . CALLBACK) (FILE . CALLBACK) ...)
+  (DIR (FILE . CALLBACK) (FILE . CALLBACK) ...)
 
 Several values for a given DIR happen only for `inotify', when
 different files from the same directory are watched.")
@@ -54,7 +54,7 @@ different files from the same directory are watched.")
   "Handle file system monitoring event.
 If EVENT is a filewatch event, call its callback.  It has the format
 
-  \(file-notify (DESCRIPTOR ACTIONS FILE [FILE1-OR-COOKIE]) CALLBACK)
+  (file-notify (DESCRIPTOR ACTIONS FILE [FILE1-OR-COOKIE]) CALLBACK)
 
 Otherwise, signal a `file-notify-error'."
   (interactive "e")
@@ -161,7 +161,7 @@ EVENT is the cadr of the event in `file-notify-handle-event'
               ((eq action 'attrib) 'attribute-changed)
               ((memq action '(create added)) 'created)
               ((memq action '(modify modified)) 'changed)
-              ((memq action '(delete 'delete-self move-self removed)) 'deleted)
+              ((memq action '(delete delete-self move-self removed)) 'deleted)
               ;; Make the event pending.
               ((memq action '(moved-from renamed-from))
                (setq file-notify--pending-event
@@ -177,9 +177,9 @@ EVENT is the cadr of the event in `file-notify-handle-event'
                               (car file-notify--pending-event)))
                   ;; If the source is handled by another watch, we
                   ;; must fire the rename event there as well.
-                  (when (not (eq (file-notify--descriptor desc)
-                                 (file-notify--descriptor
-                                  (caar file-notify--pending-event))))
+                  (when (not (equal (file-notify--descriptor desc)
+                                    (file-notify--descriptor
+                                     (caar file-notify--pending-event))))
                     (setq pending-event
                           `((,(caar file-notify--pending-event)
                              renamed ,file ,file1)
@@ -291,7 +291,7 @@ FILE is the name of the file whose event is being reported."
 
       ;; Determine respective flags.
       (if (eq file-notify--library 'gfilenotify)
-         (setq l-flags '(watch-mounts send-moved))
+         (setq l-flags (append '(watch-mounts send-moved) flags))
        (when (memq 'change flags)
          (setq
           l-flags
@@ -300,11 +300,10 @@ FILE is the name of the file whose event is being 
reported."
            ((eq file-notify--library 'w32notify)
             '(file-name directory-name size last-write-time)))))
        (when (memq 'attribute-change flags)
-         (add-to-list
-          'l-flags
-          (cond
-           ((eq file-notify--library 'inotify) 'attrib)
-           ((eq file-notify--library 'w32notify) 'attributes)))))
+         (push (cond
+                 ((eq file-notify--library 'inotify) 'attrib)
+                 ((eq file-notify--library 'w32notify) 'attributes))
+                l-flags)))
 
       ;; Call low-level function.
       (setq desc (funcall func dir l-flags 'file-notify-callback)))
@@ -328,35 +327,64 @@ DESCRIPTOR should be an object returned by 
`file-notify-add-watch'."
   (let* ((desc (if (consp descriptor) (car descriptor) descriptor))
         (file (if (consp descriptor) (cdr descriptor)))
         (dir (car (gethash desc file-notify-descriptors)))
-        handler registered)
+        (handler (and (stringp dir)
+                       (find-file-name-handler dir 'file-notify-rm-watch)))
+         (registered (gethash desc file-notify-descriptors)))
 
     (when (stringp dir)
-      (setq handler (find-file-name-handler dir 'file-notify-rm-watch))
+      ;; Call low-level function.
+      (when (null (cdr registered))
+        (condition-case nil
+            (if handler
+                ;; A file name handler could exist even if there is no local
+                ;; file notification support.
+                (funcall handler 'file-notify-rm-watch desc)
+
+              (funcall
+               (cond
+                ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
+                ((eq file-notify--library 'inotify) 'inotify-rm-watch)
+                ((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
+               desc))
+          (file-notify-error nil)))
 
       ;; Modify `file-notify-descriptors'.
       (if (not file)
          (remhash desc file-notify-descriptors)
 
-       (setq registered (gethash desc file-notify-descriptors))
        (setcdr registered
                (delete (assoc file (cdr registered)) (cdr registered)))
        (if (null (cdr registered))
            (remhash desc file-notify-descriptors)
-         (puthash desc registered file-notify-descriptors)))
+         (puthash desc registered file-notify-descriptors))))))
 
-      ;; Call low-level function.
-      (when (null (cdr registered))
-       (if handler
-           ;; A file name handler could exist even if there is no local
-           ;; file notification support.
-           (funcall handler 'file-notify-rm-watch desc)
+(defun file-notify-valid-p (descriptor)
+  "Check a watch specified by its DESCRIPTOR.
+DESCRIPTOR should be an object returned by `file-notify-add-watch'."
+  (let* ((desc (if (consp descriptor) (car descriptor) descriptor))
+        (file (if (consp descriptor) (cdr descriptor)))
+         (registered (gethash desc file-notify-descriptors))
+        (dir (car registered))
+        handler)
 
-         (funcall
-          (cond
-           ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
-           ((eq file-notify--library 'inotify) 'inotify-rm-watch)
-           ((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
-          desc))))))
+    (when (stringp dir)
+      (setq handler (find-file-name-handler dir 'file-notify-valid-p))
+
+      (and (or ;; It is a directory.
+               (not file)
+               ;; The file is registered.
+               (assoc file (cdr registered)))
+           (if handler
+               ;; A file name handler could exist even if there is no
+               ;; local file notification support.
+               (funcall handler 'file-notify-valid-p descriptor)
+             (funcall
+              (cond
+               ((eq file-notify--library 'gfilenotify) 'gfile-valid-p)
+               ((eq file-notify--library 'inotify) 'inotify-valid-p)
+               ((eq file-notify--library 'w32notify) 'w32notify-valid-p))
+              desc))
+           t))))
 
 ;; The end:
 (provide 'filenotify)
diff --git a/lisp/files.el b/lisp/files.el
index c309f86..8565aa8 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1057,7 +1057,7 @@ Tip: You can use this expansion of remote identifier 
components
      to derive a new remote file name from an existing one.  For
      example, if FILE is \"/sudo::/path/to/file\" then
 
-       \(concat \(file-remote-p FILE) \"/bin/sh\")
+       (concat (file-remote-p FILE) \"/bin/sh\")
 
      returns a remote file name for file \"/bin/sh\" that has the
      same remote identifier as FILE but expanded; a name such as
@@ -3863,7 +3863,7 @@ directories."
 However, the mode will not be changed if
 \(1) a local variables list or the `-*-' line specifies a major mode, or
 \(2) the current major mode is a \"special\" mode,
-\     not suitable for ordinary files, or
+    not suitable for ordinary files, or
 \(3) the new file name does not particularly specify any mode."
   :type 'boolean
   :group 'editing-basics)
diff --git a/lisp/filesets.el b/lisp/filesets.el
index 464c7c3..ab332bb 100644
--- a/lisp/filesets.el
+++ b/lisp/filesets.el
@@ -415,10 +415,10 @@ at the last position.
 Possible uses: If you don't want to save `filesets-data' in your normal
 configuration file, you can add a something like this
 
-       \(lambda ()
-             \(insert (format \"(setq-default filesets-data \\='%S)\"
+       (lambda ()
+             (insert (format \"(setq-default filesets-data \\='%S)\"
                              filesets-data))
-             \(newline 2))
+             (newline 2))
 
 to this hook.
 
@@ -550,14 +550,14 @@ will be recursively added to the menu.  
`filesets-tree-max-level' tells up
 to which level the directory structure should be scanned/listed,
 i.e. how deep the menu should be.  Try something like
 
-       \(\"HOME -- only one level\"
-        \(:tree \"~\" \"^[^.].*[^~]$\")
-        \(:tree-max-level 1)
-        \(:filter-dirs-flag t))
-       \(\"HOME -- up to 3 levels\"
-        \(:tree \"~\" \"^[^.].*[^~]$\")
-        \(:tree-max-level 3)
-        \(:filter-dirs-flag t))
+       (\"HOME -- only one level\"
+        (:tree \"~\" \"^[^.].*[^~]$\")
+        (:tree-max-level 1)
+        (:filter-dirs-flag t))
+       (\"HOME -- up to 3 levels\"
+        (:tree \"~\" \"^[^.].*[^~]$\")
+        (:tree-max-level 3)
+        (:filter-dirs-flag t))
 
 and it should become clear what this option is about.  In any case,
 including directory trees to the menu can take a lot of memory."
@@ -679,20 +679,20 @@ variables my-ps-viewer, my-pdf-viewer, my-dvi-viewer, 
my-pic-viewer.
 In order to view pdf or rtf files in an Emacs buffer, you could use these:
 
 
-      \(\"^.+\\\\.pdf\\\\\\='\" \"pdftotext\"
-       \((:capture-output t)
-       \(:args (\"%S - | fmt -w \" window-width))
-       \(:ignore-on-read-text t)
-       \(:constraintp (lambda ()
-                       \(and \(filesets-which-command-p \"pdftotext\")
-                            \(filesets-which-command-p \"fmt\"))))))
-      \(\"^.+\\\\.rtf\\\\\\='\" \"rtf2htm\"
-       \((:capture-output t)
-       \(:args (\"%S 2> /dev/null | w3m -dump -T text/html\"))
-       \(:ignore-on-read-text t)
-       \(:constraintp (lambda ()
-                       \(and (filesets-which-command-p \"rtf2htm\")
-                            \(filesets-which-command-p \"w3m\"))))))"
+      (\"^.+\\\\.pdf\\\\\\='\" \"pdftotext\"
+       ((:capture-output t)
+       (:args (\"%S - | fmt -w \" window-width))
+       (:ignore-on-read-text t)
+       (:constraintp (lambda ()
+                       (and (filesets-which-command-p \"pdftotext\")
+                            (filesets-which-command-p \"fmt\"))))))
+      (\"^.+\\\\.rtf\\\\\\='\" \"rtf2htm\"
+       ((:capture-output t)
+       (:args (\"%S 2> /dev/null | w3m -dump -T text/html\"))
+       (:ignore-on-read-text t)
+       (:constraintp (lambda ()
+                       (and (filesets-which-command-p \"rtf2htm\")
+                            (filesets-which-command-p \"w3m\"))))))"
   :set (function filesets-set-default)
   :type '(repeat :tag "Viewer"
                 (list :tag "Definition"
@@ -756,7 +756,7 @@ In order to view pdf or rtf files in an Emacs buffer, you 
could use these:
 (defcustom filesets-ingroup-patterns
   '(("^.+\\.tex$" t
      (((:name "Package")
-       (:pattern "\\\\usepackage\\W*\\(\\[[^\]]*\\]\\W*\\)?{\\W*\\(.+\\)\\W*}")
+       (:pattern "\\\\usepackage\\W*\\(\\[[^]]*\\]\\W*\\)?{\\W*\\(.+\\)\\W*}")
        (:match-number 2)
        (:stub-flag t)
        (:get-file-name (lambda (master file)
@@ -951,18 +951,18 @@ variable will take effect after rebuilding the menu.
 Caveat: Fileset names have to be unique.
 
 Example definition:
-      \\='\(\(\"My Wiki\"
-        \(:ingroup \"~/Etc/My-Wiki/WikiContents\"))
-       \(\"My Homepage\"
-        \(:pattern \"~/public_html/\" \"^.+\\\\.html$\")
-        \(:open filesets-find-file))
-       \(\"User Configuration\"
-        \(:files \"~/.xinitrc\"
+      \\='((\"My Wiki\"
+        (:ingroup \"~/Etc/My-Wiki/WikiContents\"))
+       (\"My Homepage\"
+        (:pattern \"~/public_html/\" \"^.+\\\\.html$\")
+        (:open filesets-find-file))
+       (\"User Configuration\"
+        (:files \"~/.xinitrc\"
                 \"~/.bashrc\"
                 \"~/.bash_profile\"))
-       \(\"HOME\"
-        \(:tree \"~\" \"^[^.].*[^~]$\")
-        \(:filter-dirs-flag t)))
+       (\"HOME\"
+        (:tree \"~\" \"^[^.].*[^~]$\")
+        (:filter-dirs-flag t)))
 
 `filesets-data' is a list of (NAME-AS-STRING . DEFINITION), DEFINITION
 being an association list with the fields:
@@ -2450,13 +2450,13 @@ and edit your startup file as shown below:
 1. `filesets-data': Edit all :pattern filesets in your startup file and
 transform all entries as shown in this example:
 
-       \(\"Test\" (:pattern \"~/dir/^pattern$\"))
-       --> \(\"Test\" (:pattern \"~/dir/\" \"^pattern$\"))
+       (\"Test\" (:pattern \"~/dir/^pattern$\"))
+       --> (\"Test\" (:pattern \"~/dir/\" \"^pattern$\"))
 
 2. `filesets-data': Change all occurrences of \":document\" to \":ingroup\":
 
-      \(\(\"Test\" \(:document \"~/dir/file\"))
-      --> \(\(\"Test\" \(:ingroup \"~/dir/file\"))
+      ((\"Test\" (:document \"~/dir/file\"))
+      --> ((\"Test\" (:ingroup \"~/dir/file\"))
 
 3. `filesets-subdocument-patterns': If you already modified the variable
 previously called `filesets-subdocument-patterns', change its name to
diff --git a/lisp/find-cmd.el b/lisp/find-cmd.el
index d78a0b3..71c7a9b 100644
--- a/lisp/find-cmd.el
+++ b/lisp/find-cmd.el
@@ -140,10 +140,10 @@ the string will be quoted).")
   "Initiate the building of a find command.
 For example:
 
-\(find-cmd \\='\(prune \(name \".svn\" \".git\" \".CVS\"\)\)
-          \\='\(and \(or \(name \"*.pl\" \"*.pm\" \"*.t\"\)
-                    \(mtime \"+1\"\)\)
-                \(fstype \"nfs\" \"ufs\"\)\)\)\)
+\(find-cmd \\='(prune (name \".svn\" \".git\" \".CVS\"))
+          \\='(and (or (name \"*.pl\" \"*.pm\" \"*.t\")
+                    (mtime \"+1\"))
+                (fstype \"nfs\" \"ufs\"))))
 
 `default-directory' is used as the initial search path.  The
 result is a string that should be ready for the command line."
@@ -159,9 +159,9 @@ result is a string that should be ready for the command 
line."
 
 (defun find-and (form)
   "And FORMs together, so:
-  \(and \(mtime \"+1\"\) \(name \"something\"\)\)
+  (and (mtime \"+1\") (name \"something\"))
 will produce:
-  find . \\\( -mtime +1 -and -name something \\\)"
+  find . \\( -mtime +1 -and -name something \\)"
   (if (< (length form) 2)
       (find-to-string (car form))
       (concat "\\( "
@@ -170,9 +170,9 @@ will produce:
 
 (defun find-or (form)
   "Or FORMs together, so:
-  \(or \(mtime \"+1\"\) \(name \"something\"\)\)
+  (or (mtime \"+1\") (name \"something\"))
 will produce:
-  find . \\\( -mtime +1 -or -name something \\\)"
+  find . \\( -mtime +1 -or -name something \\)"
   (if (< (length form) 2)
       (find-to-string (car form))
       (concat "\\( "
@@ -181,21 +181,21 @@ will produce:
 
 (defun find-not (form)
   "Or FORMs together and prefix with a -not, so:
-  \(not \(mtime \"+1\"\) \(name \"something\"\)\)
+  (not (mtime \"+1\") (name \"something\"))
 will produce:
-  -not \\\( -mtime +1 -or -name something \\\)
+  -not \\( -mtime +1 -or -name something \\)
 If you wanted the FORMs -and(ed) together instead then this would
 suffice:
-  \(not \(and \(mtime \"+1\"\) \(name \"something\"\)\)\)"
+  (not (and (mtime \"+1\") (name \"something\")))"
   (concat "-not " (find-or (mapcar #'find-to-string form))))
 
 (defun find-prune (form)
   "-or together FORMs postfix `-prune' and then -or that with a
 -true, so:
-  \(\(prune \(name \".svn\" \".git\"\)\) \(name \"*.pm\"\)\)
+  ((prune (name \".svn\" \".git\")) (name \"*.pm\"))
 will produce (unwrapped):
-  \\\( \\\( \\\( -name .svn -or -name .git \\\) /
-  -prune -or -true \\\) -and -name *.pm \\\)"
+  \\( \\( \\( -name .svn -or -name .git \\) /
+  -prune -or -true \\) -and -name *.pm \\)"
   (find-or
    (list
     (concat (find-or (mapcar #'find-to-string form)) (find-generic "prune"))
diff --git a/lisp/find-dired.el b/lisp/find-dired.el
index b53c1da..c4ef0fe 100644
--- a/lisp/find-dired.el
+++ b/lisp/find-dired.el
@@ -72,10 +72,10 @@ a file listing in the desired format.  LS-SWITCHES is a set 
of
 
 The two options must be set to compatible values.
 For example, to use human-readable file sizes with GNU ls:
-   \(\"-exec ls -ldh {} +\" . \"-ldh\")
+   (\"-exec ls -ldh {} +\" . \"-ldh\")
 
 To use GNU find's inbuilt \"-ls\" option to list files:
-   \(\"-ls\" . \"-dilsb\")
+   (\"-ls\" . \"-dilsb\")
 since GNU find's output has the same format as using GNU ls with
 the options \"-dilsb\"."
   :version "24.1"             ; add tests for -ls and -exec + support
diff --git a/lisp/find-file.el b/lisp/find-file.el
index 97e95d2..5c2c506 100644
--- a/lisp/find-file.el
+++ b/lisp/find-file.el
@@ -183,7 +183,7 @@ To override this, give an argument to `ff-find-other-file'."
 ;;;###autoload
 (defcustom ff-special-constructs
   ;; C/C++ include, for NeXTstep too
-  `((,(purecopy "^\#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") .
+  `((,(purecopy "^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") .
      (lambda ()
        (buffer-substring (match-beginning 2) (match-end 2)))))
   ;; We include `ff-treat-as-special' documentation here so that autoload
@@ -678,7 +678,7 @@ name of the first file found."
       (setq suffixes suffix-list)
 
       ;; if dir does not contain '/*', look for the file
-      (if (and dir (not (string-match "\\([^*]*\\)/\\\*\\(/.*\\)*" dir)))
+      (if (and dir (not (string-match "\\([^*]*\\)/\\*\\(/.*\\)*" dir)))
           (progn
 
             ;; suffixes is nil => fname-stub is the file we are looking for
diff --git a/lisp/foldout.el b/lisp/foldout.el
index 64c0af4..0a401c7 100644
--- a/lisp/foldout.el
+++ b/lisp/foldout.el
@@ -250,7 +250,7 @@ An end marker of nil means the fold ends after 
(point-max).")
   "Open the subtree under the current heading and narrow to it.
 
 Normally the body and the immediate subheadings are exposed, but
-optional arg EXPOSURE \(interactively with prefix arg\) changes this:-
+optional arg EXPOSURE \(interactively with prefix arg) changes this:-
 
        EXPOSURE > 0    exposes n levels of subheadings (c.f. show-children)
        EXPOSURE < 0    exposes only the body
diff --git a/lisp/follow.el b/lisp/follow.el
index d62d557..938c59e 100644
--- a/lisp/follow.el
+++ b/lisp/follow.el
@@ -347,6 +347,9 @@ Used by `follow-window-size-change'.")
 (defvar follow-windows-start-end-cache nil
   "Cache used by `follow-window-start-end'.")
 
+(defvar follow-fixed-window nil
+  "If non-nil, the current window must not be scrolled.
+This is typically set by explicit scrolling commands.")
 ;;; Debug messages
 
 ;; This inline function must be as small as possible!
@@ -439,6 +442,54 @@ Keys specific to Follow mode:
 
 ;;; Scroll
 
+(defun follow-get-scrolled-point (dest windows)
+  "Calculate the correct value for point after a scrolling operation.
+
+DEST is our default position, typically where point was before the scroll.
+If `scroll-preserve-screen-position' is non-nil and active, DEST will be
+in the same screen position as before the scroll.  WINDOWS is the list of
+windows in the follow chain.
+
+This function attempts to duplicate the point placing from
+`window_scroll_line_based' in the Emacs core source window.c.
+
+Return the new position."
+  (if (and scroll-preserve-screen-position
+          (get this-command 'scroll-command))
+      dest
+    (let ((dest-column
+          (save-excursion
+            (goto-char dest)
+            (- (current-column)
+               (progn (vertical-motion 0) (current-column)))))
+         (limit0
+          (with-selected-window (car windows)
+            (save-excursion
+              (goto-char (window-start))
+              (vertical-motion 0)
+              (point))))
+         (limitn
+          (with-selected-window (car (reverse windows))
+            (save-excursion
+              (goto-char (window-end nil t))
+              (if (pos-visible-in-window-p)
+                  (point)              ; i.e. (point-max)
+                (1- (point)))))))
+      (cond
+       ((< dest limit0)
+       (with-selected-window (car windows)
+         (save-excursion
+           (goto-char limit0)
+           (vertical-motion (cons dest-column 0))
+           (point))))
+       ((> dest limitn)
+       (with-selected-window (car (reverse windows))
+         (save-excursion
+           (goto-char limitn)
+           (vertical-motion (cons dest-column 0))
+           (point))))
+       (t dest)))))
+
 ;; `scroll-up' and `-down', but for windows in Follow mode.
 ;;
 ;; Almost like the real thing, except when the cursor ends up outside
@@ -454,6 +505,7 @@ Keys specific to Follow mode:
 ;; position...  (This would also be corrected if we would have had a
 ;; good redisplay abstraction.)
 
+;;;###autoload
 (defun follow-scroll-up (&optional arg)
   "Scroll text in a Follow mode window chain up.
 
@@ -467,22 +519,26 @@ Works like `scroll-up' when not in Follow mode."
   (interactive "P")
   (cond ((not follow-mode)
         (scroll-up arg))
-       (arg
-        (save-excursion (scroll-up arg))
-        (setq follow-internal-force-redisplay t))
+       ((eq arg '-)
+        (follow-scroll-down))
        (t
-        (let* ((windows (follow-all-followers))
-               (end (window-end (car (reverse windows)))))
-          (if (eq end (point-max))
-              (signal 'end-of-buffer nil)
-            (select-window (car windows))
-            ;; `window-end' might return nil.
-            (if end
-                (goto-char end))
-            (vertical-motion (- next-screen-context-lines))
-            (set-window-start (car windows) (point)))))))
-
+        (let ((opoint (point))  (owin (selected-window)))
+          (while
+              ;; If we are too near EOB, try scrolling the previous window.
+              (condition-case nil (progn (scroll-up arg) nil)
+                (end-of-buffer
+                 (condition-case nil (progn (follow-previous-window) t)
+                   (error
+                    (select-window owin)
+                    (goto-char opoint)
+                    (signal 'end-of-buffer nil))))))
+          (unless (and scroll-preserve-screen-position
+                       (get this-command 'scroll-command))
+            (goto-char opoint))
+          (setq follow-fixed-window t)))))
+(put 'follow-scroll-up 'scroll-command t)
 
+;;;###autoload
 (defun follow-scroll-down (&optional arg)
   "Scroll text in a Follow mode window chain down.
 
@@ -492,27 +548,20 @@ the top window in the chain will be visible in the bottom 
window.
 If called with an argument, scroll ARG lines down.
 Negative ARG means scroll upward.
 
-Works like `scroll-up' when not in Follow mode."
+Works like `scroll-down' when not in Follow mode."
   (interactive "P")
   (cond ((not follow-mode)
-        (scroll-up arg))
-       (arg
-        (save-excursion (scroll-down arg)))
+        (scroll-down arg))
+       ((eq arg '-)
+        (follow-scroll-up))
        (t
-        (let* ((windows (follow-all-followers))
-               (win (car (reverse windows)))
-               (start (window-start (car windows))))
-          (if (eq start (point-min))
-              (signal 'beginning-of-buffer nil)
-            (select-window win)
-            (goto-char start)
-            (vertical-motion (- (- (window-height win)
-                                   (if header-line-format 2 1)
-                                   next-screen-context-lines)))
-            (set-window-start win (point))
-            (goto-char start)
-            (vertical-motion (- next-screen-context-lines 1))
-            (setq follow-internal-force-redisplay t))))))
+        (let ((opoint (point)))
+          (scroll-down arg)
+          (unless (and scroll-preserve-screen-position
+                       (get this-command 'scroll-command))
+            (goto-char opoint))
+          (setq follow-fixed-window t)))))
+(put 'follow-scroll-down 'scroll-command t)
 
 (declare-function comint-adjust-point "comint" (window))
 (defvar comint-scroll-show-maximum-output)
@@ -766,15 +815,16 @@ from the selected window."
 Return (END-POS END-OF-BUFFER).
 
 Actually, the position returned is the start of the line after
-the last fully-visible line in WIN.  If WIN is nil, the selected
-window is used."
+the last fully-visible line in WIN.  END-OF-BUFFER is t when EOB
+is fully-visible in WIN.  If WIN is nil, the selected window is
+used."
   (let* ((win (or win (selected-window)))
         (edges (window-inside-pixel-edges win))
         (ht (- (nth 3 edges) (nth 1 edges)))
         (last-line-pos (posn-point (posn-at-x-y 0 (1- ht) win))))
     (if (pos-visible-in-window-p last-line-pos win)
        (let ((end (window-end win t)))
-         (list end (= end (point-max))))
+         (list end (pos-visible-in-window-p (point-max) win)))
       (list last-line-pos nil))))
 
 (defun follow-calc-win-start (windows pos win)
@@ -1008,7 +1058,7 @@ should be a member of WINDOWS, starts at position START."
       (goto-char start)
       (vertical-motion 0 win)
       (dolist (w windows-before)
-       (vertical-motion (- 1 (window-text-height w)) w))
+       (vertical-motion (- (window-text-height w)) w))
       (point))))
 
 
@@ -1130,138 +1180,144 @@ non-first windows in Follow mode."
   (cl-assert (eq (window-buffer win) (current-buffer)))
   (when (and follow-mode
              (not (window-minibuffer-p win)))
-    (let* ((dest (point))
-           (windows (follow-all-followers win))
-           (win-start-end (progn
-                            (follow-update-window-start (car windows))
-                            (follow-windows-start-end windows)))
-           (aligned (follow-windows-aligned-p win-start-end))
-           (visible (follow-pos-visible dest win win-start-end))
-           selected-window-up-to-date)
-      (unless (and aligned visible)
-        (setq follow-windows-start-end-cache nil))
-
-      ;; Select a window to display point.
-      (unless follow-internal-force-redisplay
-        (if (eq dest (point-max))
-            ;; Be careful at point-max: the display can be aligned
-            ;; while DEST can be visible in several windows.
-            (cond
-             ;; Select the current window, but only when the display
-             ;; is correct. (When inserting characters in a tail
-             ;; window, the display is not correct, as they are
-             ;; shown twice.)
-             ;;
-             ;; Never stick to the current window after a deletion.
-             ;; Otherwise, when typing `DEL' in a window showing
-             ;; only the end of the file, a character would be
-             ;; removed from the window above, which is very
-             ;; unintuitive.
-             ((and visible
-                   aligned
-                   (not (memq this-command
-                              '(backward-delete-char
-                                delete-backward-char
-                                backward-delete-char-untabify
-                                kill-region))))
-              (follow-debug-message "Max: same"))
-             ;; If the end is visible, and the window doesn't
-             ;; seems like it just has been moved, select it.
-             ((follow-select-if-end-visible win-start-end)
-              (follow-debug-message "Max: end visible")
-              (setq visible t aligned nil)
-              (goto-char dest))
-             ;; Just show the end...
-             (t
-              (follow-debug-message "Max: default")
-              (select-window (car (last windows)))
-              (goto-char dest)
-              (setq visible nil aligned nil)))
-
-          ;; We're not at the end, here life is much simpler.
-          (cond
-           ;; This is the normal case!
-           ;; It should be optimized for speed.
-           ((and visible aligned)
-            (follow-debug-message "same"))
-           ;; Pick a position in any window.  If the display is ok,
-           ;; this picks the `correct' window.
-           ((follow-select-if-visible dest win-start-end)
-            (follow-debug-message "visible")
-            (goto-char dest)
-            ;; Perform redisplay, in case line is partially visible.
-            (setq visible nil))
-           ;; Not visible anywhere else, lets pick this one.
-           (visible
-            (follow-debug-message "visible in selected."))
-           ;; If DEST is before the first window start, select the
-           ;; first window.
-           ((< dest (nth 1 (car win-start-end)))
-            (follow-debug-message "before first")
-            (select-window (car windows))
-            (goto-char dest)
-            (setq visible nil aligned nil))
-           ;; If we can position the cursor without moving the first
-           ;; window, do it. This is the case that catches `RET' at
-           ;; the bottom of a window.
-           ((follow-select-if-visible-from-first dest windows)
-            (follow-debug-message "Below first")
-            (setq visible t aligned t))
-           ;; None of the above.  Stick to the selected window.
-           (t
-            (follow-debug-message "None")
-            (setq visible nil aligned nil))))
-
-        ;; If a new window was selected, make sure that the old is
-        ;; not scrolled when point is outside the window.
-        (unless (eq win (selected-window))
-          (let ((p (window-point win)))
-            (set-window-start win (window-start win) nil)
-            (set-window-point win p))))
-
-      (unless visible
-        ;; If point may not be visible in the selected window,
-        ;; perform a redisplay; this ensures scrolling.
-        (let ((opoint (point)))
-          (redisplay)
-          ;; If this `redisplay' moved point, we got clobbered by a
-          ;; previous call to `set-window-start'.  Try again.
-          (when (/= (point) opoint)
-            (goto-char opoint)
-            (redisplay)))
-
-        (setq selected-window-up-to-date t)
-        (follow-avoid-tail-recenter)
-        (setq win-start-end (follow-windows-start-end windows)
-              follow-windows-start-end-cache nil
-              aligned nil))
-
-      ;; Now redraw the windows around the selected window.
-      (unless (and (not follow-internal-force-redisplay)
-                   (or aligned
-                       (follow-windows-aligned-p win-start-end))
-                   (follow-point-visible-all-windows-p win-start-end))
-        (setq follow-internal-force-redisplay nil)
-        (follow-redisplay windows (selected-window)
-                          selected-window-up-to-date)
-        (setq win-start-end (follow-windows-start-end windows)
-              follow-windows-start-end-cache nil)
-        ;; Point can end up in another window when DEST is at
-        ;; the beginning of the buffer and the selected window is
-        ;; not the first.  It can also happen when long lines are
-        ;; used and there is a big difference between the width of
-        ;; the windows.  (When scrolling one line in a wide window
-        ;; which will cause a move larger that an entire small
-        ;; window.)
-        (unless (follow-pos-visible dest win win-start-end)
-          (follow-select-if-visible dest win-start-end)
-          (goto-char dest)))
-
-      ;; If the region is visible, make it look good when spanning
-      ;; multiple windows.
-      (when (region-active-p)
-        (follow-maximize-region
-         (selected-window) windows win-start-end)))
+    (let ((windows (follow-all-followers win)))
+      ;; If we've explicitly scrolled, align the windows first.
+      (when follow-fixed-window
+       (follow-debug-message "fixed")
+       (follow-redisplay windows win)
+       (goto-char (follow-get-scrolled-point (point) windows))
+       (setq follow-fixed-window nil))
+      (let* ((dest (point))
+            (win-start-end (progn
+                             (follow-update-window-start (car windows))
+                             (follow-windows-start-end windows)))
+            (aligned (follow-windows-aligned-p win-start-end))
+            (visible (follow-pos-visible dest win win-start-end))
+            selected-window-up-to-date)
+       (unless (and aligned visible)
+         (setq follow-windows-start-end-cache nil))
+
+       ;; Select a window to display point.
+       (unless follow-internal-force-redisplay
+         (if (eq dest (point-max))
+             ;; Be careful at point-max: the display can be aligned
+             ;; while DEST can be visible in several windows.
+             (cond
+              ;; Select the current window, but only when the display
+              ;; is correct. (When inserting characters in a tail
+              ;; window, the display is not correct, as they are
+              ;; shown twice.)
+              ;;
+              ;; Never stick to the current window after a deletion.
+              ;; Otherwise, when typing `DEL' in a window showing
+              ;; only the end of the file, a character would be
+              ;; removed from the window above, which is very
+              ;; unintuitive.
+              ((and visible
+                    aligned
+                    (not (memq this-command
+                               '(backward-delete-char
+                                 delete-backward-char
+                                 backward-delete-char-untabify
+                                 kill-region))))
+               (follow-debug-message "Max: same"))
+              ;; If the end is visible, and the window doesn't
+              ;; seems like it just has been moved, select it.
+              ((follow-select-if-end-visible win-start-end)
+               (follow-debug-message "Max: end visible")
+               (setq visible t aligned nil)
+               (goto-char dest))
+              ;; Just show the end...
+              (t
+               (follow-debug-message "Max: default")
+               (select-window (car (last windows)))
+               (goto-char dest)
+               (setq visible nil aligned nil)))
+
+           ;; We're not at the end, here life is much simpler.
+           (cond
+            ;; This is the normal case!
+            ;; It should be optimized for speed.
+            ((and visible aligned)
+             (follow-debug-message "same"))
+            ;; Pick a position in any window.  If the display is ok,
+            ;; this picks the `correct' window.
+            ((follow-select-if-visible dest win-start-end)
+             (follow-debug-message "visible")
+             (goto-char dest)
+             ;; Perform redisplay, in case line is partially visible.
+             (setq visible nil))
+            ;; Not visible anywhere else, lets pick this one.
+            (visible
+             (follow-debug-message "visible in selected."))
+            ;; If DEST is before the first window start, select the
+            ;; first window.
+            ((< dest (nth 1 (car win-start-end)))
+             (follow-debug-message "before first")
+             (select-window (car windows))
+             (goto-char dest)
+             (setq visible nil aligned nil))
+            ;; If we can position the cursor without moving the first
+            ;; window, do it. This is the case that catches `RET' at
+            ;; the bottom of a window.
+            ((follow-select-if-visible-from-first dest windows)
+             (follow-debug-message "Below first")
+             (setq visible t aligned t))
+            ;; None of the above.  Stick to the selected window.
+            (t
+             (follow-debug-message "None")
+             (setq visible nil aligned nil))))
+
+         ;; If a new window was selected, make sure that the old is
+         ;; not scrolled when point is outside the window.
+         (unless (eq win (selected-window))
+           (let ((p (window-point win)))
+             (set-window-start win (window-start win) nil)
+             (set-window-point win p))))
+
+       (unless visible
+         ;; If point may not be visible in the selected window,
+         ;; perform a redisplay; this ensures scrolling.
+         (let ((opoint (point)))
+           (redisplay)
+           ;; If this `redisplay' moved point, we got clobbered by a
+           ;; previous call to `set-window-start'.  Try again.
+           (when (/= (point) opoint)
+             (goto-char opoint)
+             (redisplay)))
+
+         (setq selected-window-up-to-date t)
+         (follow-avoid-tail-recenter)
+         (setq win-start-end (follow-windows-start-end windows)
+               follow-windows-start-end-cache nil
+               aligned nil))
+
+       ;; Now redraw the windows around the selected window.
+       (unless (and (not follow-internal-force-redisplay)
+                    (or aligned
+                        (follow-windows-aligned-p win-start-end))
+                    (follow-point-visible-all-windows-p win-start-end))
+         (setq follow-internal-force-redisplay nil)
+         (follow-redisplay windows (selected-window)
+                           selected-window-up-to-date)
+         (setq win-start-end (follow-windows-start-end windows)
+               follow-windows-start-end-cache nil)
+         ;; Point can end up in another window when DEST is at
+         ;; the beginning of the buffer and the selected window is
+         ;; not the first.  It can also happen when long lines are
+         ;; used and there is a big difference between the width of
+         ;; the windows.  (When scrolling one line in a wide window
+         ;; which will cause a move larger that an entire small
+         ;; window.)
+         (unless (follow-pos-visible dest win win-start-end)
+           (follow-select-if-visible dest win-start-end)
+           (goto-char dest)))
+
+       ;; If the region is visible, make it look good when spanning
+       ;; multiple windows.
+       (when (region-active-p)
+         (follow-maximize-region
+          (selected-window) windows win-start-end))))
 
     ;; Whether or not the buffer was in follow mode, update windows
     ;; displaying the tail so that Emacs won't recenter them.
diff --git a/lisp/font-core.el b/lisp/font-core.el
index 6d8588b..2253204 100644
--- a/lisp/font-core.el
+++ b/lisp/font-core.el
@@ -30,7 +30,7 @@
   "Defaults for Font Lock mode specified by the major mode.
 Defaults should be of the form:
 
- (KEYWORDS [KEYWORDS-ONLY [CASE-FOLD [SYNTAX-ALIST [SYNTAX-BEGIN ...]]]])
+ (KEYWORDS [KEYWORDS-ONLY [CASE-FOLD [SYNTAX-ALIST ...]]])
 
 KEYWORDS may be a symbol (a variable or function whose value is the keywords
 to use for fontification) or a list of symbols (specifying different levels
@@ -45,20 +45,9 @@ If SYNTAX-ALIST is non-nil, it should be a list of cons 
pairs of the form
 \(CHAR-OR-STRING . STRING) used to set the local Font Lock syntax table, for
 keyword and syntactic fontification (see `modify-syntax-entry').
 
-If SYNTAX-BEGIN is non-nil, it should be a function with no args used to move
-backwards outside any enclosing syntactic block, for syntactic fontification.
-Typical values are `beginning-of-line' (i.e., the start of the line is known to
-be outside a syntactic block), or `beginning-of-defun' for programming modes or
-`backward-paragraph' for textual modes (i.e., the mode-dependent function is
-known to move outside a syntactic block).  If nil, the beginning of the buffer
-is used as a position outside of a syntactic block, in the worst case.
-
-\(See also Info node `(elisp)Font Lock Basics'.)
-
 These item elements are used by Font Lock mode to set the variables
 `font-lock-keywords', `font-lock-keywords-only',
-`font-lock-keywords-case-fold-search', `font-lock-syntax-table' and
-`font-lock-beginning-of-syntax-function', respectively.
+`font-lock-keywords-case-fold-search', `font-lock-syntax-table'.
 
 Further item elements are alists of the form (VARIABLE . VALUE) and are in no
 particular order.  Each VARIABLE is made buffer-local before set to VALUE.
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index cec95bf..e2660bf 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -556,21 +556,6 @@ This is normally set via `font-lock-defaults'.")
 If this is nil, the major mode's syntax table is used.
 This is normally set via `font-lock-defaults'.")
 
-(defvar font-lock-beginning-of-syntax-function nil
-  "Non-nil means use this function to move back outside all constructs.
-When called with no args it should move point backward to a place which
-is not in a string or comment and not within any bracket-pairs (or else,
-a place such that any bracket-pairs outside it can be ignored for Emacs
-syntax analysis and fontification).
-
-If this is nil, Font Lock uses `syntax-begin-function' to move back
-outside of any comment, string, or sexp.  This variable is semi-obsolete;
-we recommend setting `syntax-begin-function' instead.
-
-This is normally set via `font-lock-defaults'.")
-(make-obsolete-variable 'font-lock-beginning-of-syntax-function
-                        'syntax-begin-function "23.3" 'set)
-
 (defvar font-lock-mark-block-function nil
   "Non-nil means use this function to mark a block of text.
 When called with no args it should leave point at the beginning of any
@@ -1347,7 +1332,7 @@ no ARG is given and `font-lock-mark-block-function' is 
nil.
 If `font-lock-mark-block-function' non-nil and no ARG is given, it is used to
 delimit the region to fontify."
   (interactive "P")
-  (let ((inhibit-point-motion-hooks t) font-lock-beginning-of-syntax-function
+  (let ((inhibit-point-motion-hooks t)
        deactivate-mark)
     ;; Make sure we have the right `font-lock-keywords' etc.
     (if (not font-lock-mode) (font-lock-set-defaults))
@@ -1765,11 +1750,10 @@ If SYNTACTIC-KEYWORDS is non-nil, it means these 
keywords are used for
          (cons t (cons keywords
                        (mapcar #'font-lock-compile-keyword keywords))))
     (if (and (not syntactic-keywords)
-            (let ((beg-function
-                   (or font-lock-beginning-of-syntax-function
-                       syntax-begin-function)))
+            (let ((beg-function syntax-begin-function))
               (or (eq beg-function 'beginning-of-defun)
-                  (get beg-function 'font-lock-syntax-paren-check)))
+                   (if (symbolp beg-function)
+                       (get beg-function 'font-lock-syntax-paren-check))))
             (not beginning-of-defun-function))
        ;; Try to detect when a string or comment contains something that
        ;; looks like a defun and would thus confuse font-lock.
@@ -1890,17 +1874,14 @@ Sets various variables using `font-lock-defaults' and
                              (list (car selem))
                            (mapcar 'identity (car selem))))
              (modify-syntax-entry char syntax font-lock-syntax-table)))))
-      ;; Syntax function for syntactic fontification?
-      (if (nth 4 defaults)
-       (set (make-local-variable 'font-lock-beginning-of-syntax-function)
-               (nth 4 defaults))
-        (kill-local-variable 'font-lock-beginning-of-syntax-function))
+      ;; (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
+      ;; it's part of the variable alist.
       ;; Variable alist?
-      (dolist (x (nthcdr 5 defaults))
+      (dolist (x (nthcdr (if (consp (nth 4 defaults)) 4 5) defaults))
        (set (make-local-variable (car x)) (cdr x)))
       ;; Set up `font-lock-keywords' last because its value might depend
-      ;; on other settings (e.g. font-lock-compile-keywords uses
-      ;; font-lock-beginning-of-syntax-function).
+      ;; on other settings.
       (set (make-local-variable 'font-lock-keywords)
           (font-lock-eval-keywords keywords))
       ;; Local fontification?
diff --git a/lisp/format.el b/lisp/format.el
index dbc814e..8a756e3 100644
--- a/lisp/format.el
+++ b/lisp/format.el
@@ -513,7 +513,7 @@ Optional args BEG and END specify a region of the buffer on 
which to operate."
 (defun format-delq-cons (cons list)
   "Remove the given CONS from LIST by side effect and return the new LIST.
 Since CONS could be the first element of LIST, write
-`\(setq foo \(format-delq-cons element foo))' to be sure of changing
+\(setq foo \(format-delq-cons element foo)) to be sure of changing
 the value of `foo'."
   (if (eq cons list)
       (cdr list)
@@ -619,7 +619,7 @@ the rest of the arguments are any PARAMETERs found in that 
region.
 Any annotations that are found by NEXT-FN but not defined by TRANSLATIONS
 are saved as values of the `unknown' text-property \(which is list-valued).
 The TRANSLATIONS list should usually contain an entry of the form
-    \(unknown \(nil format-annotate-value))
+    (unknown (nil format-annotate-value))
 to write these unknown annotations back into the file."
   (save-excursion
     (save-restriction
@@ -827,7 +827,7 @@ in the region, it is treated as though it were DEFAULT."
 Insert each element of the given LIST of buffer annotations at its
 appropriate place.  Use second arg OFFSET if the annotations' locations are
 not relative to the beginning of the buffer: annotations will be inserted
-at their location-OFFSET+1 \(ie, the offset is treated as the position of
+at their location-OFFSET+1 \(i.e., the offset is treated as the position of
 the first character in the buffer)."
   (if (not offset)
       (setq offset 0)
@@ -839,7 +839,7 @@ the first character in the buffer)."
       (setq l (cdr l)))))
 
 (defun format-annotate-value (old new)
-  "Return OLD and NEW as a \(CLOSE . OPEN) annotation pair.
+  "Return OLD and NEW as a (CLOSE . OPEN) annotation pair.
 Useful as a default function for TRANSLATIONS alist when the value of the text
 property is the name of the annotation that you want to use, as it is for the
 `unknown' text property."
diff --git a/lisp/gnus/ChangeLog.2 b/lisp/gnus/ChangeLog.2
index ce8e1b9..29ab978 100644
--- a/lisp/gnus/ChangeLog.2
+++ b/lisp/gnus/ChangeLog.2
@@ -7711,7 +7711,7 @@
        (gnus-agent-fetch-selected-article): New function for
        gnus-select-article-hook or gnus-mark-article-hook.
 
-2002-10-02  Peter von der Ahe  <address@hidden>
+2002-10-02  Peter von der Ahé  <address@hidden>
 
        * gnus-ems.el (gnus-x-splash): Set coding-system-for-read to
        raw-text.
diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el
index 3f426bf..f101ecd 100644
--- a/lisp/gnus/auth-source.el
+++ b/lisp/gnus/auth-source.el
@@ -362,7 +362,7 @@ If the value is not a list, symmetric encryption will be 
used."
   "Read one of CHOICES by `read-char-choice', or `read-char'.
 `dropdown-list' support is disabled because it doesn't work reliably.
 Only one of CHOICES will be returned.  The PROMPT is augmented
-with \"[a/b/c] \" if CHOICES is '\(?a ?b ?c\)."
+with \"[a/b/c] \" if CHOICES is \(?a ?b ?c)."
   (when choices
     (let* ((prompt-choices
             (apply 'concat (loop for c in choices
@@ -1557,20 +1557,20 @@ You'll get back all the properties of the token as a 
plist.
 Here's an example that looks for the first item in the `Login'
 Secrets collection:
 
- \(let ((auth-sources \\='(\"secrets:Login\")))
+ (let ((auth-sources \\='(\"secrets:Login\")))
     (auth-source-search :max 1)
 
 Here's another that looks for the first item in the `Login'
 Secrets collection whose label contains `gnus':
 
- \(let ((auth-sources \\='(\"secrets:Login\")))
+ (let ((auth-sources \\='(\"secrets:Login\")))
     (auth-source-search :max 1 :label \"gnus\")
 
 And this one looks for the first item in the `Login' Secrets
 collection that's a Google Chrome entry for the git.gnus.org site
 authentication tokens:
 
- \(let ((auth-sources \\='(\"secrets:Login\")))
+ (let ((auth-sources \\='(\"secrets:Login\")))
     (auth-source-search :max 1 :signon_realm \"https://git.gnus.org/Git\";))
 "
 
@@ -1691,19 +1691,19 @@ field), :user maps to \"-a USER\", and :port maps to 
\"-s PORT\".
 Here's an example that looks for the first item in the default
 generic MacOS Keychain:
 
- \(let ((auth-sources \\='(macos-keychain-generic)))
+ (let ((auth-sources \\='(macos-keychain-generic)))
     (auth-source-search :max 1)
 
 Here's another that looks for the first item in the internet
 MacOS Keychain collection whose label is `gnus':
 
- \(let ((auth-sources \\='(macos-keychain-internet)))
+ (let ((auth-sources \\='(macos-keychain-internet)))
     (auth-source-search :max 1 :label \"gnus\")
 
 And this one looks for the first item in the internet keychain
 entries for git.gnus.org:
 
- \(let ((auth-sources \\='(macos-keychain-internet\")))
+ (let ((auth-sources \\='(macos-keychain-internet\")))
     (auth-source-search :max 1 :host \"git.gnus.org\"))
 "
   ;; TODO
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 8ad81c9..44aff77 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -5516,7 +5516,7 @@ If no internal viewer is available, use an external 
viewer."
         (mm-display-part handle nil t))))))
 
 (defun gnus-mime-action-on-part (&optional action)
-  "Do something with the MIME attachment at \(point\)."
+  "Do something with the MIME attachment at (point)."
   (interactive
    (list (gnus-completing-read "Action" (mapcar 'car gnus-mime-action-alist) 
t)))
   (gnus-article-check-buffer)
@@ -5992,7 +5992,7 @@ If t, it overrides nil values of
   "Display \"multipart/related\" parts as  \"multipart/mixed\".
 
 If displaying \"text/html\" is discouraged \(see
-`mm-discouraged-alternatives'\) images or other material inside a
+`mm-discouraged-alternatives') images or other material inside a
 \"multipart/related\" part might be overlooked when this variable is nil."
   :version "22.1"
   :group 'gnus-article-mime
@@ -7545,7 +7545,7 @@ must return `mid', `mail', `invalid' or `ask'."
     (10.0  . "^[^0-9]+@")
     (3.0   . "^[^0-9]+[0-9][0-9]?[0-9]?@")
     ;;      ^[^0-9]+[0-9]{1,3}\@ digits only at end of local part
-    (3.0   . "address@hidden")
+    (3.0   . "@stud")
     ;;
     (2.0   . "[a-z][a-z][._-][A-Z][a-z].*@")
     ;;
@@ -7553,7 +7553,7 @@ must return `mid', `mail', `invalid' or `ask'."
     (0.5   . "^[A-Z][a-z][a-z]")
     (1.5   . "^[A-Z][a-z][A-Z][a-z][^a-z]") ;; ^[A-Z][a-z]{3,3}
     (2.0   . "^[A-Z][a-z][A-Z][a-z][a-z][^a-z]")) ;; ^[A-Z][a-z]{4,4}
-  "An alist of \(RATE . REGEXP\) pairs for `gnus-button-mid-or-mail-heuristic'.
+  "An alist of (RATE . REGEXP) pairs for `gnus-button-mid-or-mail-heuristic'.
 
 A negative RATE indicates a message IDs, whereas a positive indicates a mail
 address.  The REGEXP is processed with `case-fold-search' set to nil."
@@ -7612,9 +7612,9 @@ address, `ask' if unsure and `invalid' if the string is 
invalid."
          (gnus-message
           9 "Many digits in `%s', rate `%s', result `%s'."
           mid-or-mail rate result))
-        ((string-match "[^aeiouy][^aeiouy][^aeiouy][^aeiouy]+.*\@"
+        ((string-match "[^aeiouy][^aeiouy][^aeiouy][^aeiouy]+.*@"
                        mid-or-mail)
-         ;; Too few vowels [^aeiouy]{4,}.*\@
+         ;; Too few vowels [^aeiouy]{4,}.*@
          (setq result (+ result -5.0))
          (gnus-message
           9 "Few vowels in `%s', rate `%s', result `%s'."
@@ -7724,7 +7724,7 @@ Calls `describe-variable' or `describe-function'."
   "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 (gnus-replace-in-string (or lib "") "\\.elc" ".el")))
     (if (not lib)
        (gnus-message 1 "Cannot locale library `%s'." url)
       (find-file-read-only file))))
@@ -8113,7 +8113,7 @@ url is put as the `gnus-button-url' overlay property on 
the button."
                                              (< (match-end 0) start))
                                     (regexp-quote (match-string 0)))
                                   "\
-\[\t ]*\\(?:\\([^\t\n \">]+\\)[\t ]*$\\|\\([^\t\n \">]*\\)[\t ]*"
+[\t ]*\\(?:\\([^\t\n \">]+\\)[\t ]*$\\|\\([^\t\n \">]*\\)[\t ]*"
                                   delim "\\)"))
                     (while (progn
                              (forward-line 1)
diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el
index e26c78b..3e4807c 100644
--- a/lisp/gnus/gnus-bookmark.el
+++ b/lisp/gnus/gnus-bookmark.el
@@ -101,7 +101,7 @@ List of details is defined in 
`gnus-bookmark-bookmark-inline-details'.
 This may result in truncated bookmark names.  To disable this, put the
 following in your `.emacs' file:
 
-\(setq gnus-bookmark-bmenu-toggle-infos nil\)"
+\(setq gnus-bookmark-bmenu-toggle-infos nil)"
   :type 'boolean
   :group 'gnus-bookmark)
 
@@ -118,7 +118,7 @@ You can toggle whether details are shown with 
\\<gnus-bookmark-bmenu-mode-map>\\
 
 (defcustom gnus-bookmark-bookmark-inline-details '(author)
   "Details to be shown with `gnus-bookmark-bmenu-toggle-infos'.
-The default value is \(subject\)."
+The default value is \(subject)."
   :type '(list :tag "Gnus bookmark details"
               (set :inline t
                    (const :tag "Author" author)
@@ -131,7 +131,7 @@ The default value is \(subject\)."
 (defcustom gnus-bookmark-bookmark-details
   '(author subject date group annotation)
   "Details to be shown with `gnus-bookmark-bmenu-show-details'.
-The default value is \(author subject date group annotation\)."
+The default value is \(author subject date group annotation)."
   :type '(list :tag "Gnus bookmark details"
               (set :inline t
                    (const :tag "Author" author)
@@ -160,17 +160,17 @@ You should never need to change this.")
   "Association list of Gnus bookmarks and their records.
 The format of the alist is
 
-     \(BMK1 BMK2 ...\)
+     (BMK1 BMK2 ...)
 
 where each BMK is of the form
 
 \(NAME
-  \(group . GROUP\)
-  \(message-id . MESSAGE-ID\)
-  \(author . AUTHOR\)
-  \(date . DATE\)
-  \(subject . SUBJECT\)
-  \(annotation . ANNOTATION\)\)
+  (group . GROUP)
+  (message-id . MESSAGE-ID)
+  (author . AUTHOR)
+  (date . DATE)
+  (subject . SUBJECT)
+  (annotation . ANNOTATION))
 
 So the cdr of each bookmark is an alist too.")
 
@@ -432,7 +432,7 @@ That is, all information but the name."
   (car (cdr (gnus-bookmark-get-bookmark bookmark))))
 
 (defun gnus-bookmark-name-from-full-record (full-record)
-  "Return name of FULL-RECORD \(an alist element instead of a string\)."
+  "Return name of FULL-RECORD (an alist element instead of a string)."
   (car full-record))
 
 (defvar gnus-bookmark-bmenu-bookmark-column nil)
@@ -484,7 +484,7 @@ Gnus bookmarks names preceded by a \"*\" have annotations.
   Also show bookmarks marked using m in other windows.
 \\[gnus-bookmark-bmenu-toggle-infos] -- toggle displaying of details (they may 
obscure long bookmark names).
 \\[gnus-bookmark-bmenu-locate] -- display (in minibuffer) location of this 
bookmark.
-\\[gnus-bookmark-bmenu-rename] -- rename this bookmark \(prompts for new 
name\).
+\\[gnus-bookmark-bmenu-rename] -- rename this bookmark (prompts for new name).
 \\[gnus-bookmark-bmenu-delete] -- mark this bookmark to be deleted, and move 
down.
 \\[gnus-bookmark-bmenu-delete-backwards] -- mark this bookmark to be deleted, 
and move up.
 \\[gnus-bookmark-bmenu-execute-deletions] -- delete bookmarks marked with 
`\\[gnus-bookmark-bmenu-delete]'.
@@ -806,7 +806,7 @@ command."
 Removes only the first instance of a bookmark with that name.  If
 there are one or more other bookmarks with the same name, they will
 not be deleted.  Defaults to the \"current\" bookmark \(that is, the
-one most recently used in this file, if any\).
+one most recently used in this file, if any).
 Optional second arg BATCH means don't update the bookmark list buffer,
 probably because we were called from there."
   (gnus-bookmark-maybe-load-default-file)
diff --git a/lisp/gnus/gnus-cus.el b/lisp/gnus/gnus-cus.el
index 93b7a1b..9b8cbc3 100644
--- a/lisp/gnus/gnus-cus.el
+++ b/lisp/gnus/gnus-cus.el
@@ -436,7 +436,7 @@ to the groups in this topic, then edit the value to suit 
your taste."
                                        :greedy t
                                        :tag "Agent Parameters"
                                        :format "%t:\n%h%v"
-                                       :doc "\ These agent parameters are
+                                       :doc "These agent parameters are
 recognized by Gnus.  They control article selection and expiration for
 use in the unplugged cache.  Check the [ ] for the parameters you want
 to apply to this group or to the groups in this topic, then edit the
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index ad49824..b1a4933 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -155,7 +155,7 @@ list."
                         (function-item gnus-group-sort-by-rank)
                         (function :tag "other" nil))))
 
-(defcustom gnus-group-line-format "%M\%S\%p\%P\%5y:%B%(%g%)\n"
+(defcustom gnus-group-line-format "%M\ %S\ %p\ %P\ %5y:%B%(%g%)\n"
   "*Format of group lines.
 It works along the same lines as a normal formatting string,
 with some simple extensions.
@@ -213,7 +213,7 @@ See Info node `(gnus)Formatting Variables'."
   :group 'gnus-group-visual
   :type 'string)
 
-(defcustom gnus-group-mode-line-format "Gnus: %%b {%M\%:%S}"
+(defcustom gnus-group-mode-line-format "Gnus: %%b {%M\ %:%S}"
   "*The format specification for the group mode line.
 It works along the same lines as a normal formatting string,
 with some simple extensions:
@@ -445,7 +445,7 @@ If non-nil, the value should be a string or an alist.  If 
it is a string,
 e.g. \"nnml:\", in which case `gnus-group-jump-to-group' offers \"Group:
 nnml:\" in the minibuffer prompt.
 
-If it is an alist, it must consist of \(NUMBER .  PROMPT\) pairs, for example:
+If it is an alist, it must consist of \(NUMBER .  PROMPT) pairs, for example:
 \((1 .  \"\") (2 .  \"nnfolder+archive:\")).  The element with number 0 is
 used when no prefix argument is given to `gnus-group-jump-to-group'."
   :version "22.1"
@@ -2174,7 +2174,7 @@ be permanent."
          (gnus-group-decoded-name group)))
     (let ((regexp "address@hidden,/:address@hidden
 \\(nn[a-z]+\\(?:address@hidden,/:address@hidden)?:\
address@hidden,./:address@hidden(?:address@hidden,./:address@hidden)*\
address@hidden,./:address@hidden(?:address@hidden,./:address@hidden)*\
 \\|address@hidden,./:address@hidden(?:address@hidden,./:address@hidden)+\\)")
          (start (point))
          (case-fold-search nil))
@@ -2435,7 +2435,7 @@ Valid input formats include:
      ;; URLs providing `group', `start' and `range':
      ((string-match
        ;; http://thread.gmane.org/gmane.emacs.devel/86326/focus=86525
-       
"^http://thread\.gmane\.org/\\([^/]+\\)/\\([0-9]+\\)/focus=\\([0-9]+\\)$"
+       
"^http://thread\\.gmane\\.org/\\([^/]+\\)/\\([0-9]+\\)/focus=\\([0-9]+\\)$"
        url)
       (setq group (match-string 1 url)
            start (string-to-number (match-string 2 url))
@@ -2446,15 +2446,15 @@ Valid input formats include:
      ;; URLs providing `group' and `start':
      ((or (string-match
           ;; http://article.gmane.org/gmane.comp.gnu.make.bugs/3584
-          
"^http://\\(?:thread\\|article\\|permalink\\)\.gmane\.org/\\([^/]+\\)/\\([0-9]+\\)"
+          
"^http://\\(?:thread\\|article\\|permalink\\)\\.gmane\\.org/\\([^/]+\\)/\\([0-9]+\\)"
           url)
          (string-match
           ;; Don't advertise these in the doc string yet:
-          "^\\(?:nntp\\|news\\)://news\.gmane\.org/\\([^/]+\\)/\\([0-9]+\\)"
+          "^\\(?:nntp\\|news\\)://news\\.gmane\\.org/\\([^/]+\\)/\\([0-9]+\\)"
           url)
          (string-match
           ;; 
http://news.gmane.org/group/gmane.emacs.gnus.general/thread=65099/force_load=t
-          "^http://news\.gmane\.org/group/\\([^/]+\\)/thread=\\([0-9]+\\)"
+          "^http://news\\.gmane\\.org/group/\\([^/]+\\)/thread=\\([0-9]+\\)"
           url))
       (setq group (match-string 1 url)
            start (string-to-number (match-string 2 url))))
diff --git a/lisp/gnus/gnus-mlspl.el b/lisp/gnus/gnus-mlspl.el
index 56166f2..37a5d61 100644
--- a/lisp/gnus/gnus-mlspl.el
+++ b/lisp/gnus/gnus-mlspl.el
@@ -100,7 +100,7 @@ See `gnus-group-split-fancy' for more information.
   "Uses information from group parameters in order to split mail.
 It can be embedded into `nnmail-split-fancy' lists with the SPLIT
 
-\(: gnus-group-split-fancy GROUPS NO-CROSSPOST CATCH-ALL\)
+\(: gnus-group-split-fancy GROUPS NO-CROSSPOST CATCH-ALL)
 
 GROUPS may be a regular expression or a list of group names, that will
 be used to select candidate groups.  If it is omitted or nil, all
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 23c79cb..77ff428 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -251,7 +251,7 @@ In order to prevent constant pruning, we prune back to a 
number
 somewhat less than the maximum size.  This option controls
 exactly how much less.  For example, given a maximum size of
 50000 and a prune factor of 0.1, the pruning process will try to
-cut the registry back to \(- 50000 \(* 50000 0.1\)\) -> 45000
+cut the registry back to \(- 50000 \(* 50000 0.1)) -> 45000
 entries.  The pruning process is constrained by the presence of
 \"precious\" entries."
   :version "25.1"
diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el
index 5776b0a..bca5f43 100644
--- a/lisp/gnus/gnus-salt.el
+++ b/lisp/gnus/gnus-salt.el
@@ -62,7 +62,7 @@
   :group 'gnus-summary-pick)
 
 (defcustom gnus-summary-pick-line-format
-  "%-5P %U\%R\%z\%I\%(%[%4L: %-23,23n%]%) %s\n"
+  "%-5P %U\ %R\ %z\ %I\ %(%[%4L: %-23,23n%]%) %s\n"
   "*The format specification of the lines in pick buffers.
 It accepts the same format specs that `gnus-summary-line-format' does."
   :type 'string
diff --git a/lisp/gnus/gnus-sieve.el b/lisp/gnus/gnus-sieve.el
index cde9376..2a8ea3e 100644
--- a/lisp/gnus/gnus-sieve.el
+++ b/lisp/gnus/gnus-sieve.el
@@ -80,7 +80,7 @@ formatting characters are recognized:
 (defun gnus-sieve-update ()
   "Update the Sieve script in gnus-sieve-file, by replacing the region
 between gnus-sieve-region-start and gnus-sieve-region-end with
-\(gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost\), then
+\(gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost), then
 execute gnus-sieve-update-shell-command.
 See the documentation for these variables and functions for details."
   (interactive)
@@ -97,7 +97,7 @@ See the documentation for these variables and functions for 
details."
 (defun gnus-sieve-generate ()
   "Generate the Sieve script in gnus-sieve-file, by replacing the region
 between gnus-sieve-region-start and gnus-sieve-region-end with
-\(gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost\).
+\(gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost).
 See the documentation for these variables and functions for details."
   (interactive)
   (require 'sieve)
@@ -195,9 +195,9 @@ For example:
 
 (defun gnus-sieve-script (&optional method crosspost)
   "Generate a Sieve script based on groups with select method METHOD
-\(or all groups if nil\).  Only groups having a `sieve' parameter are
+\(or all groups if nil).  Only groups having a `sieve' parameter are
 considered.  This parameter should contain an elisp test
-\(see the documentation of gnus-sieve-test for details\).  For each
+\(see the documentation of gnus-sieve-test for details).  For each
 such group, a Sieve IF control structure is generated, having the
 test as the condition and { fileinto \"group.name\"; } as the body.
 
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 215eac8..40e2dcf 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -1486,7 +1486,7 @@ sure of changing the value of `foo'."
 (defvar gnus-directory-sep-char-regexp "/"
   "The regexp of directory separator character.
 If you find some problem with the directory separator character, try
-\"[/\\\\\]\" for some systems.")
+\"[/\\\\]\" for some systems.")
 
 (defun gnus-url-unhex (x)
   (if (> x ?9)
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index ea26216..a2913ac 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -1361,7 +1361,7 @@ group (or nil) as a parameter.
 If you want to save your mail in one group and the news articles you
 write in another group, you could say something like:
 
- \(setq gnus-message-archive-group
+  (setq gnus-message-archive-group
        \\='((if (message-news-p)
              \"misc-news\"
            \"misc-mail\")))
@@ -2517,10 +2517,10 @@ This should be an alist for Emacs, or a plist for 
XEmacs."
   "Which information should be exposed in the User-Agent header.
 
 Can be a list of symbols or a string.  Valid symbols are `gnus'
-\(show Gnus version\) and `emacs' \(show Emacs version\).  In
+\(show Gnus version) and `emacs' \(show Emacs version).  In
 addition to the Emacs version, you can add `codename' \(show
-\(S\)XEmacs codename\) or either `config' \(show system
-configuration\) or `type' \(show system type\).  If you set it to
+\(S)XEmacs codename) or either `config' \(show system
+configuration) or `type' \(show system type).  If you set it to
 a string, be sure to use a valid format, see RFC 2616."
 
   :version "22.1"
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 5ede15b..1b693d7 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -367,7 +367,7 @@ few false positives here."
 
 (defcustom message-archive-header "X-No-Archive: Yes\n"
   "Header to insert when you don't want your article to be archived.
-Archives \(such as groups.google.com\) respect this header."
+Archives \(such as groups.google.com) respect this header."
   :version "22.1"
   :type 'string
   :link '(custom-manual "(message)Header Commands")
@@ -1200,7 +1200,7 @@ If stringp, use this; if non-nil, use no host name (user 
name only)."
 (defvar message-reply-headers nil
   "The headers of the current replied article.
 It is a vector of the following headers:
-\[number subject from date id references chars lines xref extra].")
+[number subject from date id references chars lines xref extra].")
 (defvar message-newsreader nil)
 (defvar message-mailer nil)
 (defvar message-sent-message-via nil)
@@ -1303,7 +1303,7 @@ actually occur."
   "Alist of ways to send outgoing messages.
 Each element has the form
 
-  \(TYPE PREDICATE FUNCTION)
+  (TYPE PREDICATE FUNCTION)
 
 where TYPE is a symbol that names the method; PREDICATE is a function
 called without any parameters to determine whether the message is
@@ -8329,7 +8329,7 @@ From headers in the original article."
                     (list message-hidden-headers)
                   message-hidden-headers))
        (inhibit-point-motion-hooks t)
-       (after-change-functions nil)
+       (inhibit-modification-hooks t)
        (end-of-headers (point-min)))
     (when regexps
       (save-excursion
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 3d5a15a..327b0e6 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -1419,7 +1419,7 @@ Return t if meta tag is added or replaced."
        (goto-char (point-min))
        (if (re-search-forward "\
 <meta\\s-+http-equiv=[\"']?content-type[\"']?\\s-+content=[\"']\
-text/\\(\\sw+\\)\\(?:\;\\s-*charset=\\([^\"'>]+\\)\\)?[^>]*>" nil t)
+text/\\(\\sw+\\)\\(?:;\\s-*charset=\\([^\"'>]+\\)\\)?[^>]*>" nil t)
            (if (and (not force-charset)
                     (match-beginning 2)
                     (string-match "\\`html\\'" (match-string 1)))
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index 8304f6f..3d1515e 100644
--- a/lisp/gnus/mm-uu.el
+++ b/lisp/gnus/mm-uu.el
@@ -118,7 +118,7 @@ This can be either \"inline\" or \"attachment\".")
      mm-uu-shar-extract)
     (forward
      ;; Thanks to Edward J. Sabol <address@hidden> and
-     ;; Peter von der Ah\'e <address@hidden>
+     ;; Peter von der Ahé <address@hidden>
      "^-+ \\(Start of \\)?Forwarded message"
      "^-+ End \\(of \\)?forwarded message"
      mm-uu-forward-extract
@@ -771,4 +771,8 @@ Assume text has been decoded if DECODED is non-nil."
 
 (provide 'mm-uu)
 
+;; Local Variables:
+;; coding: utf-8
+;; End:
+
 ;;; mm-uu.el ends here
diff --git a/lisp/gnus/nndoc.el b/lisp/gnus/nndoc.el
index 70d803f..cca3418 100644
--- a/lisp/gnus/nndoc.el
+++ b/lisp/gnus/nndoc.el
@@ -742,7 +742,7 @@ from the document.")
                                   nil t)
            (setq subject (concat (match-string 1) subject))
            (setq from (concat (match-string 2) " " from))))))
-    (while (and from (string-match "(\[^)\]*)" from))
+    (while (and from (string-match "([^)]*)" from))
       (setq from (replace-match "" t t from)))
     (insert "From: "  (or from "unknown")
            "\nSubject: " (or subject "(no subject)") "\n")
diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el
index c88f4af..0d2d453 100644
--- a/lisp/gnus/nnheader.el
+++ b/lisp/gnus/nnheader.el
@@ -66,7 +66,7 @@ they will keep on jabbering all the time."
   "*Max length of the head of articles.
 
 Value is an integer, nil, or t.  nil means read in chunks of a file
-indefinitely until a complete head is found\; t means always read the
+indefinitely until a complete head is found; t means always read the
 entire file immediately, disregarding `nnheader-head-chop-length'.
 
 Integer values will in effect be rounded up to the nearest multiple of
diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el
index 5b72b52..3d8926b 100644
--- a/lisp/gnus/nnmaildir.el
+++ b/lisp/gnus/nnmaildir.el
@@ -147,7 +147,7 @@ by nnmaildir-request-article.")
 
 ;; A NOV structure looks like this (must be prin1-able, so no defstruct):
 ["subject\tfrom\tdate"
- "references\tchars\lines"
+ "references\tchars\tlines"
  "To: you\tIn-Reply-To: <address@hidden>"
  (12345 67890)     ;; modtime of the corresponding article file
  (to in-reply-to)] ;; contemporary value of nnmail-extra-headers
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index 6c97cec..ec9a666 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -175,7 +175,7 @@ This variable is used by the various nntp-open-via-* 
methods.")
   "*Whether both telnet client and server support the ENVIRON option.
 If non-nil, there will be no prompt for a login name.")
 
-(defvoo nntp-via-shell-prompt "bash\\|\$ *\r?$\\|> *\r?"
+(defvoo nntp-via-shell-prompt "bash\\|[$>] *\r?$"
   "*Regular expression to match the shell prompt on an intermediate host.
 This variable is used by the `nntp-open-via-telnet-and-telnet' method.")
 
@@ -1764,7 +1764,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
 (defvoo nntp-open-telnet-envuser nil
   "*If non-nil, telnet session (client and server both) will support the 
ENVIRON option and not prompt for login name.")
 
-(defvoo nntp-telnet-shell-prompt "bash\\|\$ *\r?$\\|> *\r?"
+(defvoo nntp-telnet-shell-prompt "bash\\|[$>] *\r?$"
   "*Regular expression to match the shell prompt on the remote machine.")
 
 (defvoo nntp-rlogin-program "rsh"
diff --git a/lisp/gnus/registry.el b/lisp/gnus/registry.el
index 783ff36..9f3f381 100644
--- a/lisp/gnus/registry.el
+++ b/lisp/gnus/registry.el
@@ -112,7 +112,7 @@
     :initform 0.1
     :type float
     :custom float
-    :documentation "Prune to \(:max-size * :prune-factor\) less
+    :documentation "Prune to (:max-size * :prune-factor) less
     than the :max-size limit.  Should be a float between 0 and 1.")
    (tracked :initarg :tracked
             :initform nil
@@ -222,9 +222,9 @@ When SET is not nil, set it for VAL (use t for an empty 
list)."
 
 (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.
-Calling with :regex \\='\(a \"h.llo\") will match entry \\='((a \"hullo\" 
\"bye\").
+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.
+Calling with `:regex \\='(a \"h.llo\")' will match entry \(a \"hullo\" 
\"bye\").
 The test order is to check :all first, then :member, then :regex."
   (when db
     (let ((all (plist-get spec :all))
@@ -331,7 +331,7 @@ Errors out if the key exists already."
   "Prunes the registry-db object DB.
 
 Attempts to prune the number of entries down to \(*
-:max-size :prune-factor\) less than the max-size limit, so
+:max-size :prune-factor) less than the max-size limit, so
 pruning doesn't need to happen on every save. Removes only
 entries without the :precious keys, so it may not be possible to
 reach the target limit.
diff --git a/lisp/gnus/rfc1843.el b/lisp/gnus/rfc1843.el
index cab2f4e..83bda2a 100644
--- a/lisp/gnus/rfc1843.el
+++ b/lisp/gnus/rfc1843.el
@@ -46,11 +46,11 @@
 
 (defvar rfc1843-hzp-word-regexp
   "~\\({\\([\041-\167][\041-\176]\\| \\)+\\|\
-\[<>]\\([\041-\175][\041-\176]\\| \\)+\\)\\(~}\\|$\\)")
+[<>]\\([\041-\175][\041-\176]\\| \\)+\\)\\(~}\\|$\\)")
 
 (defvar rfc1843-hzp-word-regexp-strictly
   "~\\({\\([\041-\167][\041-\176]\\)+\\|\
-\[<>]\\([\041-\175][\041-\176]\\)+\\)\\(~}\\|$\\)")
+[<>]\\([\041-\175][\041-\176]\\)+\\)\\(~}\\|$\\)")
 
 (defcustom rfc1843-decode-loosely nil
   "Loosely check HZ encoding if non-nil.
diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el
index ea558d7..e8a3779 100644
--- a/lisp/gnus/rfc2047.el
+++ b/lisp/gnus/rfc2047.el
@@ -102,7 +102,7 @@ quoted-printable and base64 respectively.")
 
 (eval-and-compile ;; Necessary to hard code them in `rfc2047-decode-region'.
   (defconst rfc2047-encoded-word-regexp
-    "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\\?\
+    "=\\?\\([^][\000-\040()<>@,;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\\?\
 \\(B\\?[+/0-9A-Za-z]*=*\
 \\|Q\\?[ ->@-~]*\
 \\)\\?="
@@ -112,7 +112,7 @@ quoted-printable and base64 respectively.")
     ;; the characters that those encodings may generally use.
     )
   (defconst rfc2047-encoded-word-regexp-loose
-    "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\\?\
+    "=\\?\\([^][\000-\040()<>@,;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\\?\
 \\(B\\?[+/0-9A-Za-z]*=*\
 \\|Q\\?\\(?:\\?+[ -<>@-~]\\)?\\(?:[ ->@-~]+\\?+[ -<>@-~]\\)*[ ->@-~]*\\?*\
 \\)\\?="
diff --git a/lisp/gnus/spam-report.el b/lisp/gnus/spam-report.el
index de68079..5871b08 100644
--- a/lisp/gnus/spam-report.el
+++ b/lisp/gnus/spam-report.el
@@ -43,7 +43,7 @@ If you are using spam.el, consider setting 
gnus-spam-process-newsgroups
 or the gnus-group-spam-exit-processor-report-gmane group/topic parameter
 instead."
   :type '(radio (const nil)
-               (regexp :value "^nntp\+.*:gmane\."))
+               (regexp :value "^nntp\\+.*:gmane\\."))
   :group 'spam-report)
 
 (defcustom spam-report-gmane-use-article-number t
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index 77ef21d..945b4d5 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -178,7 +178,7 @@ if the variable `help-downcase-arguments' is non-nil."
         (skip-chars-forward "^ ")
         (while next
           (or opt (not (looking-at " &")) (setq opt t))
-          (if (not (re-search-forward " \\([\\[(]*\\)\\([^] &)\.]+\\)" nil t))
+          (if (not (re-search-forward " \\([\\[(]*\\)\\([^] &).]+\\)" nil t))
               (setq next nil)
             (setq args (cons (match-string 2) args))
             (when (and opt (string= (match-string 1) "("))
diff --git a/lisp/help.el b/lisp/help.el
index 66df6b0..3387628 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -355,7 +355,7 @@ With argument, display info only for the selected version."
                   (while (re-search-forward
                           (if (member file '("NEWS.18" "NEWS.1-17"))
                               "Changes in \\(?:Emacs\\|version\\)?[ 
\t]*\\([0-9]+\\(?:\\.[0-9]+\\)?\\)"
-                            "^\* [^0-9\n]*\\([0-9]+\\.[0-9]+\\)") nil t)
+                            "^\\* [^0-9\n]*\\([0-9]+\\.[0-9]+\\)") nil t)
                     (setq res (cons (match-string-no-properties 1) res)))))
               (cons "NEWS"
                     (directory-files data-directory nil
@@ -392,7 +392,7 @@ With argument, display info only for the selected version."
       (when (re-search-forward
             (concat (if (< vn 19)
                         "Changes in Emacs[ \t]*"
-                      "^\* [^0-9\n]*") version "$")
+                      "^\\* [^0-9\n]*") version "$")
             nil t)
        (beginning-of-line)
        (narrow-to-region
@@ -402,7 +402,7 @@ With argument, display info only for the selected version."
                             (re-search-forward
                              (if (< vn 19)
                                  "Changes in \\(?:Emacs\\|version\\)?[ 
\t]*\\([0-9]+\\(?:\\.[0-9]+\\)?\\)"
-                               "^\* [^0-9\n]*\\([0-9]+\\.[0-9]+\\)") nil t))
+                               "^\\* [^0-9\n]*\\([0-9]+\\.[0-9]+\\)") nil t))
                       (equal (match-string-no-properties 1) version)))
           (or res (goto-char (point-max)))
           (beginning-of-line)
diff --git a/lisp/hfy-cmap.el b/lisp/hfy-cmap.el
index b7d3b34..6b7f2ca 100644
--- a/lisp/hfy-cmap.el
+++ b/lisp/hfy-cmap.el
@@ -810,7 +810,7 @@ Loads the variable `hfy-rgb-txt-colour-map', which is used 
by
 `hfy-fallback-colour-values'."
   (interactive
    (list
-    (read-file-name "rgb.txt \(equivalent\) file: " "" nil t (hfy-rgb-file))))
+    (read-file-name "rgb.txt (equivalent) file: " "" nil t (hfy-rgb-file))))
   (let ((rgb-buffer   nil)
        (end-of-rgb     0)
        (rgb-txt      nil))
diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el
index 74cdfe1..0a0a0b3 100644
--- a/lisp/htmlfontify.el
+++ b/lisp/htmlfontify.el
@@ -1140,7 +1140,7 @@ See also `hfy-face-to-css'."
 
 (defvar hfy-face-to-css 'hfy-face-to-css-default
   "Handler for mapping faces  to styles.
-The signature of the handler is of the form \(lambda (FN) ...\).
+The signature of the handler is of the form \(lambda (FN) ...).
 FN is a font or `defface' specification (cf
 `face-attr-construct').  The handler should return a cons cell of
 the form (STYLE-NAME . STYLE-SPEC).
@@ -1598,7 +1598,7 @@ information."
 (defvar hfy-begin-span-handler 'hfy-begin-span
   "Handler to begin a span of text.
 The signature of the handler is \(lambda (STYLE TEXT-BLOCK
-TEXT-ID TEXT-BEGINS-BLOCK-P) ...\).  The handler must insert
+TEXT-ID TEXT-BEGINS-BLOCK-P) ...).  The handler must insert
 appropriate tags to begin a span of text.
 
 STYLE is the name of the style that begins at point.  It is
@@ -1626,7 +1626,7 @@ The default handler is `hfy-begin-span'.")
 
 (defvar hfy-end-span-handler 'hfy-end-span
   "Handler to end a span of text.
-The signature of the handler is \(lambda () ...\).  The handler
+The signature of the handler is \(lambda () ...).  The handler
 must insert appropriate tags to end a span of text.
 
 The default handler is `hfy-end-span'.")
@@ -2412,7 +2412,7 @@ You may also want to set `hfy-page-header' and 
`hfy-page-footer'."
     (load file 'NOERROR nil nil) ))
 
 
-;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" 
"ce07a28b93c09032fd6b225ad74be0df")
+;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" 
"1fb78b15b18622256262c7246b2a3520")
 ;;; Generated autoloads from hfy-cmap.el
 
 (autoload 'htmlfontify-load-rgb-file "hfy-cmap" "\
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index 718471b..5065b66 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -1785,7 +1785,7 @@ If point is on a group name, this function operates on 
that group."
      (let ((procs 0)
           (files 0))
        (dolist (string strings)
-        (if (string-match "\\(\?:\\`(\[\[:ascii:\]\]\+)\\)" string)
+        (if (string-match "\\(?:\\`([[:ascii:]]+)\\)" string)
             (progn (setq procs (1+ procs))
                    (if (< (match-end 0) (length string))
                        (setq files (1+ files))))
@@ -2037,7 +2037,7 @@ the value of point at the beginning of the line for that 
buffer."
 (defun ibuffer-update-title-and-summary (format)
   (ibuffer-assert-ibuffer-mode)
   ;; Don't do funky font-lock stuff here
-  (let ((after-change-functions nil))
+  (let ((inhibit-modification-hooks t))
     (if (get-text-property (point-min) 'ibuffer-title)
        (delete-region (point-min)
                       (next-single-property-change
@@ -2244,7 +2244,7 @@ If optional arg SILENT is non-nil, do not display 
progress messages."
         (orig (count-lines (point-min) (point)))
         ;; Inhibit font-lock caching tricks, since we're modifying the
         ;; entire buffer at once
-        (after-change-functions nil)
+        (inhibit-modification-hooks t)
         (ext-loaded (featurep 'ibuf-ext))
         (bgroups (if ext-loaded
                      (ibuffer-generate-filter-groups bmarklist)
diff --git a/lisp/ido.el b/lisp/ido.el
index 13b6d52..6ad354c 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -3777,13 +3777,13 @@ frame, rather than all frames, regardless of value of 
`ido-all-frames'."
                       (not (and (eq ido-cur-item 'buffer)
                                 ido-buffer-disable-smart-matches))
                       (not ido-enable-regexp)
-                      (not (string-match "\$\\'" rex0))
+                      (not (string-match "$\\'" rex0))
                       (concat "\\`" rex0 (if slash "/" "") "\\'")))
         (suffix-re (and do-full slash
                         (not (and (eq ido-cur-item 'buffer)
                                   ido-buffer-disable-smart-matches))
                         (not ido-enable-regexp)
-                        (not (string-match "\$\\'" rex0))
+                        (not (string-match "$\\'" rex0))
                         (concat rex0 "/\\'")))
         (prefix-re (and full-re (not ido-enable-prefix)
                         (concat "\\`" rexq)))
diff --git a/lisp/image-dired.el b/lisp/image-dired.el
index 013fc5a..c5efb33 100644
--- a/lisp/image-dired.el
+++ b/lisp/image-dired.el
@@ -1910,7 +1910,7 @@ overwritten.  This confirmation can be turned off using
       (message "No image at point")
     (let ((file (image-dired-original-file-name))
           command)
-      (if (not (string-match "\.[jJ][pP[eE]?[gG]$" file))
+      (if (not (string-match "\\.[jJ][pP[eE]?[gG]$" file))
           (error "Only JPEG images can be rotated!"))
       (setq command (format-spec
                      image-dired-cmd-rotate-original-options
@@ -1950,7 +1950,7 @@ for traceability.  The format of the returned file name is
 YYYY_MM_DD_HH_MM_DD_ORIG_FILE_NAME.jpg.  Used from
 `image-dired-copy-with-exif-file-name'."
   (let (data no-exif-data-found)
-    (if (not (string-match "\.[Jj][Pp][Ee]?[Gg]$" (expand-file-name file)))
+    (if (not (string-match "\\.[Jj][Pp][Ee]?[Gg]$" (expand-file-name file)))
         (progn
           (setq no-exif-data-found t)
           (setq data
@@ -2572,7 +2572,7 @@ tags to their respective image file.  Internal function 
used by
 ;;               (let ((fattribs (file-attributes f)))
 ;;                 ;; Get last access time and file size
 ;;                 `(,(nth 4 fattribs) ,(nth 7 fattribs) ,f)))
-;;             (directory-files (image-dired-dir) t ".+\.thumb\..+$"))
+;;             (directory-files (image-dired-dir) t ".+\\.thumb\\..+$"))
 ;;            ;; Sort function. Compare time between two files.
 ;;            (lambda (l1 l2)
 ;;               (time-less-p (car l1) (car l2)))))
diff --git a/lisp/image.el b/lisp/image.el
index 0c62088..d557e39 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -34,7 +34,7 @@
 
 (defconst image-type-header-regexps
   `(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm)
-    ("\\`P[1-6]\\\(?:\
+    ("\\`P[1-6]\\(?:\
 \\(?:\\(?:#[^\r\n]*[\r\n]\\)?[[:space:]]\\)+\
 \\(?:\\(?:#[^\r\n]*[\r\n]\\)?[0-9]\\)+\
 \\)\\{2\\}" . pbm)
diff --git a/lisp/info-look.el b/lisp/info-look.el
index 6168a0c..70c30c3 100644
--- a/lisp/info-look.el
+++ b/lisp/info-look.el
@@ -142,7 +142,7 @@ OTHER-MODES is a list of cross references to other help 
modes.")
   "Add or update a help specification.
 Function arguments are specified as keyword/argument pairs:
 
-    \(KEYWORD . ARGUMENT)
+    (KEYWORD . ARGUMENT)
 
 KEYWORD is either `:topic', `:mode', `:regexp', `:ignore-case',
  `:doc-spec', `:parse-rule', or `:other-modes'.
diff --git a/lisp/info.el b/lisp/info.el
index a5a2c55..bd12d56 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -3838,7 +3838,7 @@ START is a regular expression which will match the
     beginning of the tokens delimited string.
 ALL is a regular expression with a single
     parenthesized subpattern which is the token to be
-    returned.  E.g. `{\(.*\)}' would return any string
+    returned.  E.g. `{(.*)}' would return any string
     enclosed in braces around POS.
 ERRORSTRING optional fourth argument, controls action on no match:
     nil: return nil
@@ -4720,28 +4720,28 @@ first line or header line, and for breadcrumb links.")
       ;; Fontify titles
       (goto-char (point-min))
       (when (and font-lock-mode not-fontified-p)
-        (while (and (re-search-forward "\n\\([^ 
\t\n].+\\)\n\\(\\*\\*+\\|==+\\|--+\\|\\.\\.+\\)$"
-                                       nil t)
-                    ;; Only consider it as an underlined title if the ASCII
-                    ;; underline has the same size as the text.  A typical
-                    ;; counter example is when a continuation "..." is alone
-                    ;; on a line.
-                    (= (string-width (match-string 1))
-                       (string-width (match-string 2))))
-          (let* ((c (preceding-char))
-                 (face
-                  (cond ((= c ?*) 'info-title-1)
-                        ((= c ?=) 'info-title-2)
-                        ((= c ?-) 'info-title-3)
-                        (t        'info-title-4))))
-            (put-text-property (match-beginning 1) (match-end 1)
-                               'font-lock-face face))
-          ;; This is a serious problem for trying to handle multiple
-          ;; frame types at once.  We want this text to be invisible
-          ;; on frames that can display the font above.
-          (when (memq (framep (selected-frame)) '(x pc w32 ns))
-            (add-text-properties (1- (match-beginning 2)) (match-end 2)
-                                 '(invisible t front-sticky nil rear-nonsticky 
t)))))
+        (while (re-search-forward "\n\\([^ 
\t\n].+\\)\n\\(\\*\\*+\\|==+\\|--+\\|\\.\\.+\\)$"
+                                  nil t)
+          ;; Only consider it as an underlined title if the ASCII
+          ;; underline has the same size as the text.  A typical
+          ;; counter example is when a continuation "..." is alone
+          ;; on a line.
+          (when (= (string-width (match-string 1))
+                   (string-width (match-string 2)))
+            (let* ((c (preceding-char))
+                   (face
+                    (cond ((= c ?*) 'info-title-1)
+                          ((= c ?=) 'info-title-2)
+                          ((= c ?-) 'info-title-3)
+                          (t        'info-title-4))))
+              (put-text-property (match-beginning 1) (match-end 1)
+                                 'font-lock-face face))
+            ;; This is a serious problem for trying to handle multiple
+            ;; frame types at once.  We want this text to be invisible
+            ;; on frames that can display the font above.
+            (when (memq (framep (selected-frame)) '(x pc w32 ns))
+              (add-text-properties (1- (match-beginning 2)) (match-end 2)
+                                   '(invisible t front-sticky nil 
rear-nonsticky t))))))
 
       ;; Fontify cross references
       (goto-char (point-min))
diff --git a/lisp/international/isearch-x.el b/lisp/international/isearch-x.el
index 31f841d..92e5522 100644
--- a/lisp/international/isearch-x.el
+++ b/lisp/international/isearch-x.el
@@ -71,6 +71,7 @@
 
 (defun isearch-with-keyboard-coding ()
   (interactive)
+  ;; FIXME: What does this after-change-functions binding do here?
   (let ((after-change-functions '(isearch-exit-recursive-edit)))
     (recursive-edit))
   (exit-minibuffer))
diff --git a/lisp/international/iso-cvt.el b/lisp/international/iso-cvt.el
index 61db03d..d662699 100644
--- a/lisp/international/iso-cvt.el
+++ b/lisp/international/iso-cvt.el
@@ -46,7 +46,7 @@
 (defvar iso-spanish-trans-tab
   '(
     ("~n" "ñ")
-    ("\([a-zA-Z]\)#" "\\1ñ")
+    ("([a-zA-Z])#" "\\1ñ")
     ("~N" "Ñ")
     ("\\([-a-zA-Z\"`]\\)\"u" "\\1ü")
     ("\\([-a-zA-Z\"`]\\)\"U" "\\1Ü")
diff --git a/lisp/international/latin1-disp.el 
b/lisp/international/latin1-disp.el
index d598814..29036ff 100644
--- a/lisp/international/latin1-disp.el
+++ b/lisp/international/latin1-disp.el
@@ -2271,7 +2271,7 @@ isn't changed if the display can render Unicode 
characters."
             (?\∨ "OR")
             (?\∩ "(U")
             (?\∪ ")U")
-            (?\∫ "\int ")
+            (?\∫ "\\int ")
             (?\∬ "DI")
             (?\∮ "Io")
             (?\∴ ".:")
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 4fd4b90..0904ff9 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -159,7 +159,7 @@
 ;; very frequently while editing multilingual text.  Now we can use
 ;; only two such keys: "\C-\\" and "\C-^", but the latter is not
 ;; convenient because it requires shifting on most keyboards.  An
-;; alternative is "\C-\]" which is now bound to `abort-recursive-edit'
+;; alternative is "\C-]" which is now bound to `abort-recursive-edit'
 ;; but it won't be used that frequently.
 (define-key global-map "\C-\\" 'toggle-input-method)
 
@@ -397,7 +397,7 @@ A coding system that requires automatic detection of 
text+encoding
 
 To prefer, for instance, utf-8, say the following:
 
-  \(prefer-coding-system \\='utf-8)"
+  (prefer-coding-system \\='utf-8)"
   (interactive "zPrefer coding system: ")
   (if (not (and coding-system (coding-system-p coding-system)))
       (error "Invalid coding system `%s'" coding-system))
@@ -1272,7 +1272,7 @@ This file contains a list of libraries of Emacs input 
methods (LEIM)
 in the format of Lisp expression for registering each input method.
 Emacs loads this file at startup time.")
 
-(defconst leim-list-header (format
+(defconst leim-list-header (format-message
 ";;; %s -- list of LEIM (Library of Emacs Input Method) -*-coding: utf-8;-*-
 ;;
 ;; This file is automatically generated.
@@ -1286,9 +1286,9 @@ Emacs loads this file at startup time.")
 ;;    INPUT-METHOD LANGUAGE-NAME ACTIVATE-FUNC
 ;;    TITLE DESCRIPTION
 ;;    ARG ...)
-;; See the function ‘register-input-method’ for the meanings of the arguments.
+;; See the function `register-input-method' for the meanings of the arguments.
 ;;
-;; If this directory is included in ‘load-path’, Emacs automatically
+;; If this directory is included in `load-path', Emacs automatically
 ;; loads this file at startup time.
 
 "
@@ -2413,12 +2413,12 @@ See `set-language-info-alist' for use in programs."
     ))
   "Alist of locale regexps vs the corresponding languages and coding systems.
 Each element has this form:
-  \(LOCALE-REGEXP LANG-ENV CODING-SYSTEM)
+  (LOCALE-REGEXP LANG-ENV CODING-SYSTEM)
 The first element whose LOCALE-REGEXP matches the start of a
 downcased locale specifies the LANG-ENV \(language environment)
 and CODING-SYSTEM corresponding to that locale.  If there is no
 appropriate language environment, the element may have this form:
-  \(LOCALE-REGEXP . LANG-ENV)
+  (LOCALE-REGEXP . LANG-ENV)
 In this case, LANG-ENV is one of generic language environments for an
 specific encoding such as \"Latin-1\" and \"UTF-8\".")
 
diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el
index f3aa70f..b575c2b 100644
--- a/lisp/international/mule-util.el
+++ b/lisp/international/mule-util.el
@@ -273,43 +273,48 @@ per-character basis, this may not be accurate."
        ((not enable-multibyte-characters)
         ;; Maybe there's a font for it, but we can't put it in the buffer.
         nil)
-       ((display-multi-font-p)
-        ;; On a window system, a character is displayable if we have
-        ;; a font for that character in the default face of the
-        ;; currently selected frame.
-        (car (internal-char-font nil char)))
        (t
-        ;; On a terminal, a character is displayable if the coding
-        ;; system for the terminal can encode it.
-        (let ((coding (terminal-coding-system)))
-          (when coding
-            (let ((cs-list (coding-system-get coding :charset-list)))
-              (cond
-                ((listp cs-list)
-                 (catch 'tag
-                   (mapc #'(lambda (charset)
-                             (if (encode-char char charset)
-                                 (throw 'tag charset)))
-                         cs-list)
-                   nil))
-                ((eq cs-list 'iso-2022)
-                 (catch 'tag2
-                   (mapc #'(lambda (charset)
-                             (if (and (plist-get (charset-plist charset)
-                                                 :iso-final-char)
-                                      (encode-char char charset))
-                                 (throw 'tag2 charset)))
-                         charset-list)
-                   nil))
-                ((eq cs-list 'emacs-mule)
-                 (catch 'tag3
-                   (mapc #'(lambda (charset)
-                             (if (and (plist-get (charset-plist charset)
-                                                 :emacs-mule-id)
-                                      (encode-char char charset))
-                                 (throw 'tag3 charset)))
-                         charset-list)
-                   nil)))))))))
+        (let ((font-glyph (internal-char-font nil char)))
+          (if font-glyph
+              (if (consp font-glyph)
+                  ;; On a window system, a character is displayable
+                  ;; if a font for that character is in the default
+                  ;; face of the currently selected frame.
+                  (car font-glyph)
+                ;; On a text terminal supporting glyph codes, CHAR is
+                ;; displayable if its glyph code is nonnegative.
+                (<= 0 font-glyph))
+            ;; On a text terminal without glyph codes, CHAR is displayable
+            ;; if the coding system for the terminal can encode it.
+            (let ((coding (terminal-coding-system)))
+              (when coding
+                (let ((cs-list (coding-system-get coding :charset-list)))
+                  (cond
+                   ((listp cs-list)
+                    (catch 'tag
+                      (mapc #'(lambda (charset)
+                                (if (encode-char char charset)
+                                    (throw 'tag charset)))
+                            cs-list)
+                      nil))
+                   ((eq cs-list 'iso-2022)
+                    (catch 'tag2
+                      (mapc #'(lambda (charset)
+                                (if (and (plist-get (charset-plist charset)
+                                                    :iso-final-char)
+                                         (encode-char char charset))
+                                    (throw 'tag2 charset)))
+                            charset-list)
+                      nil))
+                   ((eq cs-list 'emacs-mule)
+                    (catch 'tag3
+                      (mapc #'(lambda (charset)
+                                (if (and (plist-get (charset-plist charset)
+                                                    :emacs-mule-id)
+                                         (encode-char char charset))
+                                    (throw 'tag3 charset)))
+                            charset-list)
+                      nil)))))))))))
 
 (defun filepos-to-bufferpos--dos (byte f)
   (let ((eol-offset 0)
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 946f793..af4c6e9 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -665,8 +665,8 @@ without any conversions.
 
 VALUE is the EOL (end-of-line) format of the coding system.  It must be
 one of `unix', `dos', `mac'.  The symbol `unix' means Unix-like EOL
-\(i.e. a single LF character), `dos' means DOS-like EOL \(i.e. a sequence
-of CR followed by LF), and `mac' means Mac-like EOL \(i.e. a single CR).
+\(i.e., a single LF character), `dos' means DOS-like EOL \(i.e., a sequence
+of CR followed by LF), and `mac' means Mac-like EOL \(i.e., a single CR).
 If omitted, Emacs detects the EOL format automatically when decoding.
 
 `:charset-list' (required if `:coding-type' is `charset' or `shift-jis')
diff --git a/lisp/international/ogonek.el b/lisp/international/ogonek.el
index 01cbe1e..18ebf91 100644
--- a/lisp/international/ogonek.el
+++ b/lisp/international/ogonek.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1997-1998, 2001-2015 Free Software Foundation, Inc.
 
-;; Author: W{\l}odek Bzyl
+;; Author: Włodek Bzyl
 ;;        Ryszard Kubiak
 ;; Maintainer: Ryszard Kubiak <address@hidden>
 ;; Keywords: i18n
diff --git a/lisp/international/titdic-cnv.el b/lisp/international/titdic-cnv.el
index 6a15bc4..f22b30e 100644
--- a/lisp/international/titdic-cnv.el
+++ b/lisp/international/titdic-cnv.el
@@ -86,7 +86,7 @@
   '(("chinese-4corner" "$(0(?-F(B")
     ("chinese-array30" "$(0#R#O(B")
     ("chinese-ccdospy" "$AKuF4(B"
-     "Pinyin base input method for Chinese charset GB2312 \(`chinese-gb2312').
+     "Pinyin base input method for Chinese charset GB2312 (`chinese-gb2312').
 
 Pinyin is the standard Roman transliteration method for Chinese.
 For the detail of Pinyin system, see the documentation of the input
diff --git a/lisp/jit-lock.el b/lisp/jit-lock.el
index 5f9196d..4e8fa7b 100644
--- a/lisp/jit-lock.el
+++ b/lisp/jit-lock.el
@@ -382,14 +382,6 @@ Defaults to the whole buffer.  END can be out of bounds."
    (save-excursion
      (unless start (setq start (point-min)))
      (setq end (if end (min end (point-max)) (point-max)))
-     ;; This did bind `font-lock-beginning-of-syntax-function' to
-     ;; nil at some point, for an unknown reason.  Don't do this; it
-     ;; can make highlighting slow due to expensive calls to
-     ;; `parse-partial-sexp' in function
-     ;; `font-lock-fontify-syntactically-region'.  Example: paging
-     ;; from the end of a buffer to its start, can do repeated
-     ;; `parse-partial-sexp' starting from `point-min', which can
-     ;; take a long time in a large buffer.
      (let ((orig-start start) next)
        (save-match-data
         ;; Fontify chunks beginning at START.  The end of a
@@ -583,11 +575,13 @@ non-nil in a repeated invocation of this function."
                      'fontified nil))
                   (setq pos (next-single-property-change
                               pos 'fontified)))))))))
-    (setq jit-lock-defer-buffers nil)
     ;; Force fontification of the visible parts.
-    (let ((jit-lock-defer-timer nil))
+    (let ((buffers jit-lock-defer-buffers)
+          (jit-lock-defer-timer nil))
+      (setq jit-lock-defer-buffers nil)
       ;; (message "Jit-Defer Now")
-      (sit-for 0)
+      (unless (redisplay)                       ;FIXME: Should we `force'?
+        (setq jit-lock-defer-buffers buffers))
       ;; (message "Jit-Defer Done")
       )))
 
diff --git a/lisp/language/japan-util.el b/lisp/language/japan-util.el
index 2871ec8..bdd8853 100644
--- a/lisp/language/japan-util.el
+++ b/lisp/language/japan-util.el
@@ -102,7 +102,7 @@ HANKAKU-KATAKANA belongs to `japanese-jisx0201-kana'.")
     (?$B!-(B ?') (?$B!.(B ?`) (?$B!0(B ?^) (?$B!2(B ?_) (?$B!<(B ?- 
?(I0(B) (?$B!=(B ?-) (?$B!>(B ?-)
     (?$B!?(B ?/) (address@hidden(B ?\\) (?$B!A(B ?~)  (?$B!C(B ?|) 
(?$B!F(B ?`) (?$B!G(B ?') (?$B!H(B ?\") (?$B!I(B ?\")
     (?\$B!J(B ?\() (?\$B!K(B ?\)) (?\$B!N(B ?[) (?\$B!O(B ?]) 
(?\$B!P(B ?{) (?\$B!Q(B ?})
-    (?$B!R(B ?<) (?$B!S(B ?>) (?\$B!V(B nil ?\(I"(B) (?\$B!W(B nil 
?\(I#(B) 
+    (?$B!R(B ?<) (?$B!S(B ?>) (?\$B!V(B nil ?\(I"(B) (?\$B!W(B nil 
?\(I#(B)
     (?$B!\(B ?+) (?$B!](B ?-) (?$B!a(B ?=) (?$B!c(B ?<) (?$B!d(B ?>)
     (?$B!l(B ?') (?$B!m(B ?\") (?$B!o(B ?\\) (?$B!p(B ?$) (?$B!s(B 
?%) (?$B!t(B ?#) (?$B!u(B ?&) (?$B!v(B ?*)
     (?$B!w(B ?@)
@@ -175,9 +175,9 @@ belongs to `japanese-jisx0208', ASCII belongs to `ascii'.")
 The argument may be a character or string.  The result has the same type.
 The argument object is not altered--the value is a copy.
 Optional argument HANKAKU t means to convert to `hankaku' Katakana
- \(`japanese-jisx0201-kana'), in which case return value
- may be a string even if OBJ is a character if two Katakanas are
- necessary to represent OBJ."
+\(`japanese-jisx0201-kana'), in which case return value
+may be a string even if OBJ is a character if two Katakanas are
+necessary to represent OBJ."
   (if (stringp obj)
       (japanese-string-conversion obj 'japanese-katakana-region hankaku)
     (or (get-char-code-property obj (if hankaku 'jisx0201 'katakana))
diff --git a/lisp/leim/quail/cyrillic.el b/lisp/leim/quail/cyrillic.el
index 7c44385..5d11e45 100644
--- a/lisp/leim/quail/cyrillic.el
+++ b/lisp/leim/quail/cyrillic.el
@@ -1245,7 +1245,7 @@ This phonetic layout replaces all the Latin letters with 
Bulgarian
 \(Cyrillic) letters based on similarities in their pronunciation or look.
 
 Note that, since the letters `щ', `ь', `ю' and `я' are attached to the
-`]', `\', `\\=`' and `[' keys respectively, Caps Lock does not affect them."
+`]', `\\', `\\=`' and `[' keys respectively, Caps Lock does not affect them."
 nil t t t t nil nil nil nil nil t)
 
 ;;  Ю  1! 2@ 3№ 4$ 5% 6€ 7§ 8* 9( 0) -– =+ ьѝ
diff --git a/lisp/leim/quail/japanese.el b/lisp/leim/quail/japanese.el
index 831725f..7741697 100644
--- a/lisp/leim/quail/japanese.el
+++ b/lisp/leim/quail/japanese.el
@@ -231,7 +231,7 @@
     ("zk" "$B",(B")
     ("zl" "$B"*(B")
     ("z;" "$B!+(B") ("z:" "$B!,(B")
-    ("z\'" "$B!F(B") ("z\"" "$B!H(B")
+    ("z'" "$B!F(B") ("z\"" "$B!H(B")
 
     ("zx" [":-"]) ("zX" [":-)"])
     ("zc" "$B!;(B") ("zC" "$B!n(B")
diff --git a/lisp/leim/quail/latin-alt.el b/lisp/leim/quail/latin-alt.el
index 935a471..a0697c4 100644
--- a/lisp/leim/quail/latin-alt.el
+++ b/lisp/leim/quail/latin-alt.el
@@ -1321,7 +1321,7 @@ Doubling the postfix separates the letter and postfix: 
e.g. a\\='\\=' -> a\\='
  ("K" ?Ķ)
  ("l" ?ļ)
  ("L" ?Ļ)
- ("\'" ?“)
+ ("'" ?“)
  ("\"" ?„)
  ("z" ?ž)
  ("Z" ?Ž)
diff --git a/lisp/leim/quail/latin-ltx.el b/lisp/leim/quail/latin-ltx.el
index 3c84ba8..c63a758 100644
--- a/lisp/leim/quail/latin-ltx.el
+++ b/lisp/leim/quail/latin-ltx.el
@@ -664,7 +664,7 @@ system, including many technical ones.  Examples:
  ;; Probably not useful enough:
  ;; ("\\Telefon" ?☎)                   ; there are other possibilities
  ;; ("\\Radioactivity" ?☢)
- ;; ("\Biohazard" ?☣)
+ ;; ("\\Biohazard" ?☣)
  ;; ("\\Male" ?♂)
  ;; ("\\Female" ?♀)
  ;; ("\\Lightning" ?☇)
diff --git a/lisp/leim/quail/thai.el b/lisp/leim/quail/thai.el
index 7d0949e..02f8b78 100644
--- a/lisp/leim/quail/thai.el
+++ b/lisp/leim/quail/thai.el
@@ -76,7 +76,7 @@ The difference from the ordinal Thai keyboard:
   "๑" "ฤ" "ฺ" "ฉ" "ฏ" "ฎ" "โ" "ฌ"      ; @ .. G
   "็" "ณ" "๋" "ษ" "ศ" "?" "์" "ฯ"      ; H .. O
   "ญ" "๐" "ฑ" "ฆ" "ธ" "๊" "ฮ" "\""     ; P .. W
-  "\)" "ํ" "\(" "บ" "ฃ" "ล" "ู" "๘"    ; X .. _
+  ")" "ํ" "(" "บ" "ฃ" "ล" "ู" "๘"      ; X .. _
   "_" "ฟ" "ิ" "แ" "ก" "ำ" "ด" "เ"      ; ` .. g
   "้" "ร" "่" "า" "ส" "ท" "ื" "น"      ; h .. o
   "ย" "ๆ" "พ" "ห" "ะ" "ี" "อ" "ไ"      ; p .. w
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index 52fd047..4ea1bcb 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -123,7 +123,6 @@ from a file."
     delete-frame-functions disabled-command-function
     fill-nobreak-predicate find-directory-functions
     find-file-not-found-functions
-    font-lock-beginning-of-syntax-function
     font-lock-fontify-buffer-function
     font-lock-fontify-region-function
     font-lock-mark-block-function
diff --git a/lisp/lpr.el b/lisp/lpr.el
index 24c325c..11cc8f8 100644
--- a/lisp/lpr.el
+++ b/lisp/lpr.el
@@ -49,7 +49,7 @@
 (defcustom printer-name
   (and (eq system-type 'ms-dos) "PRN")
   "The name of a local printer to which data is sent for printing.
-\(Note that PostScript files are sent to `ps-printer-name', which see.\)
+\(Note that PostScript files are sent to `ps-printer-name', which see.)
 
 On Unix-like systems, a string value should be a name understood by
 lpr's -P option; otherwise the value should be nil.
diff --git a/lisp/mail/feedmail.el b/lisp/mail/feedmail.el
index 368e2ab..aec93db 100644
--- a/lisp/mail/feedmail.el
+++ b/lisp/mail/feedmail.el
@@ -438,7 +438,7 @@ shuttled robotically onward."
 If a positive number, it's a timeout before sending.  If a negative
 number, it's a timeout before not sending.  This will not work if your
 version of Emacs doesn't include the function `y-or-n-p-with-timeout'
-\(e.g., some versions of XEmacs\)."
+\(e.g., some versions of XEmacs)."
   :version "24.1"
   :group 'feedmail-misc
   :type '(choice (const nil) integer)
@@ -449,7 +449,7 @@ version of Emacs doesn't include the function 
`y-or-n-p-with-timeout'
   "If non-nil remove Bcc: lines from the message headers.
 In any case, the Bcc: lines do participate in the composed address
 list.  You may want to leave them in if you're using sendmail
-\(see `feedmail-buffer-eating-function'\)."
+\(see `feedmail-buffer-eating-function')."
   :group 'feedmail-headers
   :type 'boolean
   )
@@ -459,7 +459,7 @@ list.  You may want to leave them in if you're using 
sendmail
   "If non-nil remove Resent-Bcc: lines from the message headers.
 In any case, the Resent-Bcc: lines do participate in the composed
 address list.  You may want to leave them in if you're using sendmail
-\(see `feedmail-buffer-eating-function'\)."
+\(see `feedmail-buffer-eating-function')."
   :group 'feedmail-headers
   :type 'boolean
   )
@@ -645,7 +645,7 @@ is not an option for many users.  As this is the default 
behavior of most
 sendmail installations, one can mostly only wish it were otherwise.  If 
feedmail
 believes the sendmail program will sell you out this way, it won't use the 
\"-f\"
 option when calling sendmail.  If it doesn't think sendmail will sell you out,
-it will use the \"-f\" \(since it is a handy feature\).  You control what
+it will use the \"-f\" \(since it is a handy feature).  You control what
 feedmail thinks with this variable.  The default is nil, meaning that feedmail
 will believe that sendmail will sell you out."
   :version "24.1"
@@ -861,7 +861,7 @@ as well."
   "User-supplied specification for a crude form of mailmerge capability.
 When spraying is enabled, feedmail composes a list of envelope addresses.
 In turn, `feedmail-spray-this-address' is temporarily set to each address
-\(stripped of any comments and angle brackets\) and a function is called which
+\(stripped of any comments and angle brackets) and a function is called which
 fiddles message headers according to this variable.  See the documentation for
 `feedmail-fiddle-plex-blurb', for an overview of fiddle-plex data structures.
 
@@ -1313,7 +1313,7 @@ of `buffer-file-name' to nil because that will defeat 
feedmail's file
 management features.  Instead, arrange for this variable to be set to
 the value of `buffer-file-name' before setting that to nil.  An easy way
 to do that would be with defadvice on `mail-send' \(undoing the
-assignments in a later advice\).
+assignments in a later advice).
 
 feedmail will pretend that `buffer-file-name', if nil, has the value
 assigned of `feedmail-queue-buffer-file-name' and carry out its normal
@@ -1507,7 +1507,7 @@ The default action is an anonymous function which gets 
rid of the file
 from the queue directory.  With a non-nil second argument, a brief
 message is give for each file deleted.  You could replace this
 function, for example, to archive all of your sent messages someplace
-\(though there are better ways to get that particular result\)."
+\(though there are better ways to get that particular result)."
   :group 'feedmail-queue
   :type 'function
   )
@@ -1715,7 +1715,7 @@ for ACTION (default is `supplement'):
                 VAL-LIKE is not used.  Else, if VAL-LIKE is a function,
                 it is called with two arguments: NAME and the
                 aggregate like values.  Else, if VAL-LIKE is a string, it is
-                used as a format string where a single \%s will be
+                used as a format string where a single %s will be
                 replaced by the aggregate values of like fields.
 
                 VAL-PRE, the results of using VAL-LIKE, and VAL-POST
@@ -1745,7 +1745,8 @@ applied to a file after you've just read it from disk: 
for example, a
 feedmail FQM message file from a queue.  You could use something like
 this:
 
-\(setq auto-mode-alist \(cons \\='\(\"\\\\.fqm$\" . feedmail-vm-mail-mode\) 
auto-mode-alist\)\)
+\(setq auto-mode-alist
+      (cons \\='(\"\\\\.fqm$\" . feedmail-vm-mail-mode) auto-mode-alist))
 "
   (feedmail-say-debug ">in-> feedmail-vm-mail-mode")
   (let ((the-buf (current-buffer)))
@@ -1894,26 +1895,26 @@ You're dispatching a message and feedmail queuing is 
enabled.
 Typing ? again will normally scroll this help buffer.
 
 Choices:
-   q  QUEUE        for later sending \(via feedmail-run-the-queue\)
+   q  QUEUE        for later sending (via feedmail-run-the-queue)
    Q  QUEUE!       like \"q\", but always make a new file
-   i  IMMEDIATELY  send this \(but not the other queued messages\)
+   i  IMMEDIATELY  send this (but not the other queued messages)
    I  IMMEDIATELY! like \"i\", but skip following confirmation prompt
    d  DRAFT        queue in the draft directory
    D  DRAFT!       like \"d\", but always make a new file
-   e  EDIT         return to the message edit buffer \(don't send or queue\)
-   *  SPRAY        toggle spray mode \(individual message transmissions\)
-   >  SCROLL UP    scroll message up \(toward end of message\)
-   <  SCROLL DOWN  scroll message down \(toward beginning of message\)
+   e  EDIT         return to the message edit buffer (don't send or queue)
+   *  SPRAY        toggle spray mode (individual message transmissions)
+   >  SCROLL UP    scroll message up (toward end of message)
+   <  SCROLL DOWN  scroll message down (toward beginning of message)
    ?  HELP         show or scroll this help buffer
 
 Synonyms:
-   s  SEND         immediately \(same as \"i\"\)
-   S  SEND!        immediately \(same as \"I\"\)
-   r  ROUGH        draft \(same as \"d\"\)
-   R  ROUGH!       draft \(same as \"D\"\)
-   n  NOPE         didn't mean it \(same as \"e\"\)
-   y  YUP          do the default behavior \(same as \"C-m\"\)
-  SPC SCROLL UP    \(same as \">\"\)
+   s  SEND         immediately (same as \"i\")
+   S  SEND!        immediately (same as \"I\")
+   r  ROUGH        draft (same as \"d\")
+   R  ROUGH!       draft (same as \"D\")
+   n  NOPE         didn't mean it (same as \"e\")
+   y  YUP          do the default behavior (same as \"C-m\")
+  SPC SCROLL UP    (same as \">\")
 
 The user-configurable default is currently \""))
        (princ d-string)
diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el
index 5164ea1..a7057ca 100644
--- a/lisp/mail/mail-extr.el
+++ b/lisp/mail/mail-extr.el
@@ -329,7 +329,7 @@ by translating things like \"address@hidden" into 
\"address@hidden"."
 ;; Matches an embedded or leading nickname that should be removed.
 ;; (defconst mail-extr-nickname-pattern
 ;;   (purecopy
-;;    (format "\\([ .]\\|\\`\\)[\"'`\[\(]\\([ .%s]+\\)[\]\"'\)] "
+;;    (format "\\([ .]\\|\\`\\)[\"'`[(]\\([ .%s]+\\)[]\"')] "
 ;;            mail-extr-all-letters)))
 
 ;; Matches the occurrence of a generational name suffix, and the last
@@ -369,7 +369,7 @@ by translating things like \"address@hidden" into 
\"address@hidden"."
 ;; Matches a variety of trailing comments not including comma-delimited
 ;; comments.
 (defconst mail-extr-trailing-comment-start-pattern
-  (purecopy " [-{]\\|--\\|address@hidden></\;]"))
+  (purecopy " [-{]\\|--\\|address@hidden></;]"))
 
 ;; Matches a name (not an initial).
 ;; This doesn't force a word boundary at the end because sometimes a
@@ -456,7 +456,7 @@ by translating things like \"address@hidden" into 
\"address@hidden"."
 ;; mode from GB back to ASCII.  (Note that the escape-from-GB code '~}'
 ;; ($7E7D) is outside the defined GB range.)
 (defconst mail-extr-hz-embedded-gb-encoded-chinese-pattern
-  (purecopy "~{\\([^~].\\|~[^\}]\\)+~}"))
+  (purecopy "~{\\([^~].\\|~[^}]\\)+~}"))
 
 ;; The leading optional lowercase letters are for a bastardized version of
 ;; the encoding, as is the optional nature of the final slash.
@@ -543,8 +543,8 @@ by translating things like \"address@hidden" into 
\"address@hidden"."
     (?\t " ")
     (?\r " ")
     (?\n " ")
-    (?\( "\(\)")
-    (?\) "\)\(")
+    (?\( "()")
+    (?\) ")(")
     (?\\ "\\"))
    (mail-extr-address-domain-literal-syntax-table
     (?\000 ?\377 "w")
@@ -553,8 +553,8 @@ by translating things like \"address@hidden" into 
\"address@hidden"."
     (?\t " ")
     (?\r " ")
     (?\n " ")
-    (?\[ "\(\]")                       ;??????
-    (?\] "\)\[")                       ;??????
+    (?\[ "(]")                 ;??????
+    (?\] ")[")                 ;??????
     (?\\ "\\"))
    (mail-extr-address-text-comment-syntax-table
     (?\000 ?\377 "w")
@@ -563,16 +563,16 @@ by translating things like \"address@hidden" into 
\"address@hidden"."
     (?\t " ")
     (?\r " ")
     (?\n " ")
-    (?\( "\(\)")
-    (?\) "\)\(")
-    (?\[ "\(\]")
-    (?\] "\)\[")
-    (?\{ "\(\}")
-    (?\} "\)\{")
+    (?\( "()")
+    (?\) ")(")
+    (?\[ "(]")
+    (?\] ")[")
+    (?\{ "(}")
+    (?\} "){")
     (?\\ "\\")
     (?\" "\"")
-    ;; (?\' "\)\`")
-    ;; (?\` "\(\'")
+    ;; (?\' ")`")
+    ;; (?\` "('")
     )
    (mail-extr-address-text-syntax-table
     (?\000 ?\177 ".")
diff --git a/lisp/mail/mailclient.el b/lisp/mail/mailclient.el
index 31da6ee..5bc1d31 100644
--- a/lisp/mail/mailclient.el
+++ b/lisp/mail/mailclient.el
@@ -62,10 +62,9 @@ supported.  Defaults to non-nil on Windows, nil otherwise."
         (mapcar
          (lambda (char)
            (cond
-            ((eq char ?\x20) "%20")   ;; space
             ((eq char ?\n) "%0D%0A")  ;; newline
-            ((string-match "[-a-zA-Z0-9_:/address@hidden" (char-to-string 
char))
-             (char-to-string char))   ;; printable
+            ((string-match "[-a-zA-Z0-9._~]" (char-to-string char))
+             (char-to-string char))   ;; unreserved as per RFC 6068
             (t                        ;; everything else
              (format "%%%02x" char)))) ;; escape
          ;; Convert string to list of chars
@@ -96,7 +95,7 @@ supported.  Defaults to non-nil on Windows, nil otherwise."
                       recp)))
               (setq first nil))
             (split-string
-             (mail-strip-quoted-names field) "\, *"))
+             (mail-strip-quoted-names field) ", *"))
            result)))))
 
 (declare-function clipboard-kill-ring-save "menu-bar.el"
@@ -125,6 +124,13 @@ The mail client is taken to be the handler of mailto URLs."
                      (< (point) delimline))
            (replace-match "\n"))
          (let ((case-fold-search t)
+               (mime-charset-pattern
+                (concat
+                 "^content-type:[ \t]*text/plain;"
+                 "\\(?:[ \t\n]*\\(?:format\\|delsp\\)=\"?[-a-z0-9]+\"?;\\)*"
+                 "[ \t\n]*charset=\"?\\([^ \t\n\";]+\\)\"?"))
+               coding-system
+               character-coding
                ;; Use the external browser function to send the
                ;; message.
                (browse-url-mailto-function nil))
@@ -135,6 +141,15 @@ The mail client is taken to be the handler of mailto URLs."
             (concat
              (save-excursion
                (narrow-to-region (point-min) delimline)
+               (goto-char (point-min))
+               (setq coding-system
+                     (if (re-search-forward mime-charset-pattern nil t)
+                         (coding-system-from-name (match-string 1))
+                       'undecided))
+               (setq character-coding
+                     (mail-fetch-field "content-transfer-encoding"))
+               (when character-coding
+                 (setq character-coding (downcase character-coding)))
                (concat
                 "mailto:";
                 ;; some of the headers according to RFC822
@@ -160,18 +175,31 @@ The mail client is taken to be the handler of mailto 
URLs."
                               (mailclient-encode-string-as-url subj))
                     ""))))
              ;; body
-             (concat
-              (mailclient-url-delim) "body="
-              (mailclient-encode-string-as-url
-               (if mailclient-place-body-on-clipboard-flag
-                   (progn
-                     (clipboard-kill-ring-save
-                      (+ 1 delimline) (point-max))
-                     (concat
-                      "*** E-Mail body has been placed on clipboard, "
-                      "please paste it here! ***"))
-                 ;; else
-                 (buffer-substring (+ 1 delimline) (point-max))))))))))))
+             (mailclient-url-delim) "body="
+             (progn
+               (delete-region (point-min) delimline)
+               (unless (null character-coding)
+                 ;; mailto: and clipboard need UTF-8 and cannot deal with
+                 ;; Content-Transfer-Encoding or Content-Type.
+                 ;; FIXME: There is code duplication here with rmail.el.
+                 (set-buffer-multibyte nil)
+                 (cond
+                  ((string= character-coding "base64")
+                   (base64-decode-region (point-min) (point-max)))
+                  ((string= character-coding "quoted-printable")
+                   (mail-unquote-printable-region (point-min) (point-max)
+                                                  nil nil t))
+                  (t (error "unsupported Content-Transfer-Encoding: %s"
+                            character-coding)))
+                 (decode-coding-region (point-min) (point-max) coding-system))
+               (mailclient-encode-string-as-url
+                (if mailclient-place-body-on-clipboard-flag
+                    (progn
+                      (clipboard-kill-ring-save (point-min) (point-max))
+                      (concat
+                       "*** E-Mail body has been placed on clipboard, "
+                       "please paste it here! ***"))
+                  (buffer-string)))))))))))
 
 (provide 'mailclient)
 
diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el
index ddd5414..f22222a 100644
--- a/lisp/mail/mspools.el
+++ b/lisp/mail/mspools.el
@@ -309,7 +309,7 @@ Buffer is not displayed if SHOW is non-nil."
 ;; to file name.
 ;(defun get-folder-from-spool-safe (name)
 ;  "Return the folder name corresponding to the spool file NAME."
-;  (if (string-match "^\\(.*\\)\.spool$" name)
+;  (if (string-match "^\\(.*\\)\\.spool$" name)
 ;      (substring name (match-beginning 1) (match-end 1))
 ;    (error "Could not extract folder name from spool name %s" name)))
 
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 67b04b5..8e38564 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -316,7 +316,7 @@ Currently known variants are 'emacs and 'mailutils."
 If non-nil, this variable is used to identify the correspondent
 when receiving new mail.  If it matches the address of the sender,
 the recipient is taken as correspondent of a mail.
-If nil \(default value\), your `user-login-name' and `user-mail-address'
+If nil \(default value), your `user-login-name' and `user-mail-address'
 are used to exclude yourself as correspondent.
 
 Usually you don't have to set this variable, except if you collect mails
@@ -4778,7 +4778,7 @@ With prefix argument N moves forward N messages with 
these labels.
 
 ;;;***
 
-;;;### (autoloads nil "rmailmm" "rmailmm.el" 
"e5b89eed8afb278cc8881f2208382c7c")
+;;;### (autoloads nil "rmailmm" "rmailmm.el" 
"36f518e036612a33eb436cb267fd39c7")
 ;;; Generated autoloads from rmailmm.el
 
 (autoload 'rmail-mime "rmailmm" "\
@@ -4922,7 +4922,7 @@ SENDERS is a regular expression.
 
 ;;;***
 
-;;;### (autoloads nil "undigest" "undigest.el" 
"912d4d3bf762991df5d4d02f42358025")
+;;;### (autoloads nil "undigest" "undigest.el" 
"c0ddfad4fe34ef9c1e790c2cc72b571d")
 ;;; Generated autoloads from undigest.el
 
 (autoload 'undigestify-rmail-message "undigest" "\
diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el
index 3dd57b9..16f6215 100644
--- a/lisp/mail/rmailmm.el
+++ b/lisp/mail/rmailmm.el
@@ -172,7 +172,7 @@ The value is usually nil, and bound to non-nil while 
inserting
 MIME entities.")
 
 (defvar rmail-mime-searching nil
-  "Bound to T inside `rmail-search-mime-message' to suppress expensive 
+  "Bound to T inside `rmail-search-mime-message' to suppress expensive
 operations such as HTML decoding")
 
 ;;; MIME-entity object
@@ -190,7 +190,7 @@ A MIME-entity is a vector of 10 elements:
 TYPE and DISPOSITION correspond to MIME headers Content-Type and
 Content-Disposition respectively, and have this format:
 
-  \(VALUE (ATTRIBUTE . VALUE) (ATTRIBUTE . VALUE) ...)
+  (VALUE (ATTRIBUTE . VALUE) (ATTRIBUTE . VALUE) ...)
 
 Each VALUE is a string and each ATTRIBUTE is a string.
 
@@ -202,7 +202,7 @@ Content-Type: multipart/mixed;
 The corresponding TYPE argument must be:
 
 \(\"multipart/mixed\"
-  \(\"boundary\" . \"----=_NextPart_000_0104_01C617E4.BDEC4C40\"))
+  (\"boundary\" . \"----=_NextPart_000_0104_01C617E4.BDEC4C40\"))
 
 TRANSFER-ENCODING corresponds to MIME header
 Content-Transfer-Encoding, and is a lower-case string.
@@ -1119,11 +1119,11 @@ are the values of the respective parsed headers.  The 
latter should
 be lower-case.  The parsed headers for CONTENT-TYPE and CONTENT-DISPOSITION
 have the form
 
-  \(VALUE . ALIST)
+  (VALUE . ALIST)
 
 In other words:
 
-  \(VALUE (ATTRIBUTE . VALUE) (ATTRIBUTE . VALUE) ...)
+  (VALUE (ATTRIBUTE . VALUE) (ATTRIBUTE . VALUE) ...)
 
 VALUE is a string and ATTRIBUTE is a symbol.
 
@@ -1135,7 +1135,7 @@ Content-Type: multipart/mixed;
 The parsed header value:
 
 \(\"multipart/mixed\"
-  \(\"boundary\" . \"----=_NextPart_000_0104_01C617E4.BDEC4C40\"))"
+  (\"boundary\" . \"----=_NextPart_000_0104_01C617E4.BDEC4C40\"))"
   ;; Handle the content transfer encodings we know.  Unknown transfer
   ;; encodings will be passed on to the various handlers.
   (cond ((string= content-transfer-encoding "base64")
diff --git a/lisp/mail/undigest.el b/lisp/mail/undigest.el
index 6dd2606..9fbbd94 100644
--- a/lisp/mail/undigest.el
+++ b/lisp/mail/undigest.el
@@ -79,7 +79,7 @@ See rmail-digest-methods."
  (rmail-digest-rfc1153
   "^-\\{70\\}\n\n"
   "^\n-\\{30\\}\n\n"
-  "^\n-\\{30\\}\n\nEnd of .* Digest.*\n\\*\\{15,\\}\n+\'"))
+  "^\n-\\{30\\}\n\nEnd of .* Digest.*\n\\*\\{15,\\}\n+\\'"))
 
 (defun rmail-digest-parse-rfc1153sloppy ()
   "Parse using the method defined in RFC 1153, allowing for some sloppiness.
diff --git a/lisp/man.el b/lisp/man.el
index 23b2110..fbfa6f0 100644
--- a/lisp/man.el
+++ b/lisp/man.el
@@ -311,7 +311,7 @@ This regular expression should start with a `^' character.")
   "Regular expression describing a reference to another manpage.")
 
 (defvar Man-apropos-regexp
-  (concat "\\\[\\(" Man-name-regexp "\\)\\\][ \t]*(\\(" Man-section-regexp 
"\\))")
+  (concat "\\[\\(" Man-name-regexp "\\)\\][ \t]*(\\(" Man-section-regexp 
"\\))")
   "Regular expression describing a reference to manpages in \"man -k 
output\".")
 
 (defvar Man-synopsis-regexp "SYNOPSIS"
diff --git a/lisp/mh-e/mh-alias.el b/lisp/mh-e/mh-alias.el
index de0038a..04e9fef 100644
--- a/lisp/mh-e/mh-alias.el
+++ b/lisp/mh-e/mh-alias.el
@@ -417,7 +417,7 @@ string is converted to lower case."
 
 (defun mh-alias-insert-file (&optional alias)
   "Return filename which should be used to add ALIAS.
-The value of the option `mh-alias-insert-file' is used if non-nil\;
+The value of the option `mh-alias-insert-file' is used if non-nil;
 otherwise the value of the \"Aliasfile:\" profile component is used.
 If the alias already exists, try to return the name of the file that
 contains it."
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index 700d22c..129e685 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -269,7 +269,7 @@ RETURN-ACTION and any additional arguments are IGNORED."
 
 When you are all through editing a message, you send it with this
 command. You can give a prefix argument ARG to monitor the first stage
-of the delivery\; this output can be found in a buffer called \"*MH-E
+of the delivery; this output can be found in a buffer called \"*MH-E
 Mail Delivery*\".
 
 The hook `mh-before-send-letter-hook' is run at the beginning of
@@ -1064,7 +1064,7 @@ The versions of MH-E, Emacs, and MH are shown."
                          (string-match "[0-9]+\\.[0-9]+\\(\\.[0-9]+\\)?"
                                        emacs-version)
                          (match-string 0 emacs-version))
-                        ((string-match "[0-9.]*\\( +\([ a-z]+[0-9]+\)\\)?"
+                        ((string-match "[0-9.]*\\( +([ a-z]+[0-9]+)\\)?"
                                        emacs-version)
                          (match-string 0 emacs-version))
                         (t (format "%s.%s" emacs-major-version
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index 7cdf67c..96fe7d7 100644
--- a/lisp/mh-e/mh-e.el
+++ b/lisp/mh-e/mh-e.el
@@ -112,7 +112,7 @@
                "\\(defgroup-mh\\)"
                "\\)\\>"
                ;; Any whitespace and defined object.
-               "[ \t'\(]*"
+               "[ \t'(]*"
                "\\(setf[ \t]+\\sw+)\\|\\sw+\\)?")
       (1 font-lock-keyword-face)
       (7 (cond ((match-beginning 2) font-lock-function-name-face)
@@ -1834,7 +1834,7 @@ message without line wrapping."
   "Default method to use in security tags.
 
 This option is used to select between a variety of mail security
-mechanisms. The default is \"PGP (MIME)\" if it is supported\;
+mechanisms. The default is \"PGP (MIME)\" if it is supported;
 otherwise, the default is \"None\". Other mechanisms include
 vanilla \"PGP\" and \"S/MIME\".
 
diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el
index ae5e2bf..d21720e 100644
--- a/lisp/mh-e/mh-folder.el
+++ b/lisp/mh-e/mh-folder.el
@@ -755,7 +755,7 @@ You can enter the message NUMBER either before or after 
typing
 
 In a program, optional non-nil second argument NO-ERROR-IF-NO-MESSAGE
 means return nil instead of signaling an error if message does not
-exist\; in this case, the cursor is positioned near where the message
+exist; in this case, the cursor is positioned near where the message
 would have been. Non-nil third argument DONT-SHOW means not to show
 the message."
   (interactive "NGo to message: ")
diff --git a/lisp/mh-e/mh-letter.el b/lisp/mh-e/mh-letter.el
index 62e9b4a..7a56427 100644
--- a/lisp/mh-e/mh-letter.el
+++ b/lisp/mh-e/mh-letter.el
@@ -553,7 +553,7 @@ one space."
 (defun mh-letter-confirm-address ()
   "Flash alias expansion.
 
-Addresses are separated by a comma\; when you press the comma,
+Addresses are separated by a comma; when you press the comma,
 this command flashes the alias expansion in the minibuffer if
 `mh-alias-flash-on-comma' is turned on."
   (interactive)
@@ -932,7 +932,7 @@ Any match found replaces the text from BEGIN to END."
     (and (stringp file)
          (file-exists-p file)
          (or (and (not (mh-have-file-command))
-                  (not (null (string-match "\.vcf$" file))))
+                  (not (null (string-match "\\.vcf$" file))))
              (string-equal "text/x-vcard" (mh-file-mime-type file))))))
 
 ;;;###mh-autoload
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index 60b796b..a1c0beb 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -1715,7 +1715,7 @@ buffer, while END defaults to the end of the buffer."
 (defun mh-minibuffer-read-type (filename &optional default)
   "Return the content type associated with the given FILENAME.
 If the \"file\" command exists and recognizes the given file,
-then its value is returned\; otherwise, the user is prompted for
+then its value is returned; otherwise, the user is prompted for
 a type (see `mailcap-mime-types').
 Optional argument DEFAULT is returned if a type isn't entered."
   (mailcap-parse-mimetypes)
@@ -1756,21 +1756,21 @@ Returns nil if file command not on system."
           (kill-buffer tmp-buffer)))))))
 
 (defvar mh-file-mime-type-substitutions
-  '(("application/msword" "\.xls" "application/ms-excel")
-    ("application/msword" "\.ppt" "application/ms-powerpoint")
-    ("text/plain" "\.vcf" "text/x-vcard")
-    ("text/rtf" "\.rtf" "application/rtf")
-    ("application/x-zip" "\.sxc" "application/vnd.sun.xml.calc")
-    ("application/x-zip" "\.sxd" "application/vnd.sun.xml.draw")
-    ("application/x-zip" "\.sxi" "application/vnd.sun.xml.impress")
-    ("application/x-zip" "\.sxw" "application/vnd.sun.xml.writer")
-    ("application/x-zip" "\.odg" "application/vnd.oasis.opendocument.graphics")
-    ("application/x-zip" "\.odi" "application/vnd.oasis.opendocument.image")
-    ("application/x-zip" "\.odp"
+  '(("application/msword" "\\.xls" "application/ms-excel")
+    ("application/msword" "\\.ppt" "application/ms-powerpoint")
+    ("text/plain" "\\.vcf" "text/x-vcard")
+    ("text/rtf" "\\.rtf" "application/rtf")
+    ("application/x-zip" "\\.sxc" "application/vnd.sun.xml.calc")
+    ("application/x-zip" "\\.sxd" "application/vnd.sun.xml.draw")
+    ("application/x-zip" "\\.sxi" "application/vnd.sun.xml.impress")
+    ("application/x-zip" "\\.sxw" "application/vnd.sun.xml.writer")
+    ("application/x-zip" "\\.odg" 
"application/vnd.oasis.opendocument.graphics")
+    ("application/x-zip" "\\.odi" "application/vnd.oasis.opendocument.image")
+    ("application/x-zip" "\\.odp"
      "application/vnd.oasis.opendocument.presentation")
-    ("application/x-zip" "\.ods"
+    ("application/x-zip" "\\.ods"
      "application/vnd.oasis.opendocument.spreadsheet")
-    ("application/x-zip" "\.odt" "application/vnd.oasis.opendocument.text"))
+    ("application/x-zip" "\\.odt" "application/vnd.oasis.opendocument.text"))
   "Substitutions to make for Content-Type returned from file command.
 The first element is the Content-Type returned by the file command.
 The second element is a regexp matching the file name, usually the
diff --git a/lisp/mh-e/mh-search.el b/lisp/mh-e/mh-search.el
index 7d066b0..b6eef4e 100644
--- a/lisp/mh-e/mh-search.el
+++ b/lisp/mh-e/mh-search.el
@@ -1247,7 +1247,7 @@ is used to search."
   (prog1
       (block nil
         (when (eobp) (return nil))
-        (when (search-forward-regexp "^\+" (mh-line-end-position) t)
+        (when (search-forward-regexp "^\\+" (mh-line-end-position) t)
           (setq mh-index-pick-folder
                 (buffer-substring-no-properties (mh-line-beginning-position)
                                                 (mh-line-end-position)))
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index 643674a..37fd165 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -515,7 +515,7 @@ they will not be returned."
     ;; folder is specified, ensure it is nil to avoid adding the
     ;; folder to the folder-list and adding a slash to it.
     (when folder
-      (setq folder (mh-replace-regexp-in-string "^\+" "" folder))
+      (setq folder (mh-replace-regexp-in-string "^\\+" "" folder))
       (setq folder (mh-replace-regexp-in-string "/+$" "" folder))
       (if (equal folder "")
           (setq folder nil)))
diff --git a/lisp/mh-e/mh-xface.el b/lisp/mh-e/mh-xface.el
index b7b7feb..d48a8b3 100644
--- a/lisp/mh-e/mh-xface.el
+++ b/lisp/mh-e/mh-xface.el
@@ -366,7 +366,7 @@ filenames.  In addition, replaces * with %2a. See URL
 
`http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/ifaces/iitemnamelimits/GetValidCharacters.asp'."
   (format "%s/%s.png" mh-x-image-cache-directory
           (mh-replace-regexp-in-string
-           "\*" "%2a"
+           "\\*" "%2a"
            (mh-url-hexify-string
             (with-temp-buffer
               (insert url)
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 6584733..d6ce31a 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -1111,12 +1111,12 @@ This does not delete the region; it acts like 
\\[kill-ring-save]."
     ;; Delete, but make the undo-list entry share with the kill ring.
     ;; First, delete just one char, so in case buffer is being modified
     ;; for the first time, the undo list records that fact.
-    (let (before-change-functions after-change-functions)
+    (let ((inhibit-modification-hooks t))
       (delete-region beg
                     (+ beg (if (> end beg) 1 -1))))
     (let ((buffer-undo-list buffer-undo-list))
       ;; Undo that deletion--but don't change the undo list!
-      (let (before-change-functions after-change-functions)
+      (let ((inhibit-modification-hooks t))
        (primitive-undo 1 buffer-undo-list))
       ;; Now delete the rest of the specified region,
       ;; but don't record it.
diff --git a/lisp/mpc.el b/lisp/mpc.el
index b7c19a9..bc7d473 100644
--- a/lisp/mpc.el
+++ b/lisp/mpc.el
@@ -268,7 +268,10 @@ defaults to 6600 and HOST defaults to localhost."
                 (if (string-match "[^[:digit:]]" v)
                     (string-to-number v)
                   v)))))
-    (when (string-prefix-p "/" host)    ;FIXME: Use file-name-absolute-p?
+    (when (file-name-absolute-p host)
+      ;; Expand file name because `file-name-absolute-p'
+      ;; considers paths beginning with "~" as absolute
+      (setq host (expand-file-name host))
       (setq local t))
 
     (mpc--debug "Connecting to %s:%s..." host port)
@@ -909,8 +912,13 @@ If PLAYLIST is t or nil or missing, use the main playlist."
 (defun mpc-file-local-copy (file)
   ;; Try to set mpc-mpd-music-directory.
   (when (and (null mpc-mpd-music-directory)
-             (string-match "\\`localhost" mpc-host))
-    (let ((files '("~/.mpdconf" "/etc/mpd.conf"))
+             (or (string-match "\\`localhost" mpc-host)
+                 (file-name-absolute-p mpc-host)))
+    (let ((files `(,(let ((xdg (getenv "XDG_CONFIG_HOME")))
+                      (concat (if (and xdg (file-name-absolute-p xdg))
+                                  xdg "~/.config")
+                              "/mpd/mpd.conf"))
+                   "~/.mpdconf" "~/.mpd/mpd.conf" "/etc/mpd.conf"))
           file)
       (while (and files (not file))
         (if (file-exists-p (car files)) (setq file (car files)))
diff --git a/lisp/msb.el b/lisp/msb.el
index 0351bda..fbc1301 100644
--- a/lisp/msb.el
+++ b/lisp/msb.el
@@ -659,7 +659,7 @@ If the argument is left out or nil, then the current buffer 
is considered."
 (defun msb--create-function-info (menu-cond-elt)
   "Create a vector from an element MENU-COND-ELT of `msb-menu-cond'.
 This takes the form:
-\[BUFFER-LIST-VARIABLE CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLER SORTER]
+[BUFFER-LIST-VARIABLE CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLER SORTER]
 See `msb-menu-cond' for a description of its elements."
   (let* ((list-symbol (make-symbol "-msb-buffer-list"))
         (tmp-ih (and (> (length menu-cond-elt) 3)
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index bb83514..4f7fa3b 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -681,7 +681,7 @@
   '("\\`/\\(\\([^/:]*\\)@\\)?\\([^@/:]*[^@/:.]\\):\\(.*\\)" . (3 2 4))
   "Format of a fully expanded remote file name.
 
-This is a list of the form \(REGEXP HOST USER NAME\),
+This is a list of the form \(REGEXP HOST USER NAME),
 where REGEXP is a regular expression matching
 the full remote name, and HOST, USER, and NAME are the numbers of
 parenthesized expressions in REGEXP for the components (in that order)."
@@ -1366,8 +1366,8 @@ only return the directory part of FILE."
     (goto-char end)))
 
 ;; Read in ~/.netrc, if one exists.  If ~/.netrc file exists and has
-;; the correct permissions then extract the \`machine\', \`login\',
-;; \`password\' and \`account\' information from within.
+;; the correct permissions then extract the machine, login,
+;; password and account information from within.
 
 (defun ange-ftp-parse-netrc ()
   ;; We set this before actually doing it to avoid the possibility
@@ -2511,7 +2511,7 @@ Works by doing a pwd and examining the directory syntax."
 ;;;; Remote file and directory listing support.
 ;;;; ------------------------------------------------------------
 
-;; Returns whether HOST's FTP server doesn't like \'ls\' or \'dir\' commands
+;; Returns whether HOST's FTP server doesn't like 'ls' or 'dir' commands
 ;; to take switch arguments.
 (defun ange-ftp-dumb-unix-host (host)
   (and host ange-ftp-dumb-unix-host-regexp
diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el
index a7efaf8..e8e6bc0 100644
--- a/lisp/net/dbus.el
+++ b/lisp/net/dbus.el
@@ -380,7 +380,7 @@ Example:
   \"org.freedesktop.Hal.Device\" \"GetPropertyString\" \\='message
   \"system.kernel.machine\")
 
-  => \(:serial :system 2)
+  => (:serial :system 2)
 
   -| i686"
 
@@ -656,8 +656,8 @@ Example:
   :system \"org.freedesktop.Hal\" \"/org/freedesktop/Hal/Manager\"
   \"org.freedesktop.Hal.Manager\" \"DeviceAdded\" \\='my-signal-handler)
 
-  => \(\(:signal :system \"org.freedesktop.Hal.Manager\" \"DeviceAdded\")
-      \(\"org.freedesktop.Hal\" \"/org/freedesktop/Hal/Manager\" 
my-signal-handler))
+  => ((:signal :system \"org.freedesktop.Hal.Manager\" \"DeviceAdded\")
+      (\"org.freedesktop.Hal\" \"/org/freedesktop/Hal/Manager\" 
my-signal-handler))
 
 `dbus-register-signal' returns an object, which can be used in
 `dbus-unregister-object' for removing the registration."
@@ -1143,7 +1143,7 @@ Note, that this autoloads SERVICE if it is not running 
yet.  If
 it shall be checked whether SERVICE is already running, one shall
 apply
 
-  \(member service \(dbus-list-known-names bus))"
+  (member service \(dbus-list-known-names bus))"
   ;; "Ping" raises a D-Bus error if SERVICE does not exist.
   ;; Otherwise, it returns silently with nil.
   (condition-case nil
@@ -1631,22 +1631,22 @@ name, and the cdr is the list of properties as returned 
by
 
 \(dbus-get-all-managed-objects :session \"org.gnome.SettingsDaemon\" \"/\")
 
-  => \(\(\"/org/gnome/SettingsDaemon/MediaKeys\"
-       \(\"org.gnome.SettingsDaemon.MediaKeys\")
-       \(\"org.freedesktop.DBus.Peer\")
-       \(\"org.freedesktop.DBus.Introspectable\")
-       \(\"org.freedesktop.DBus.Properties\")
-       \(\"org.freedesktop.DBus.ObjectManager\"))
-      \(\"/org/gnome/SettingsDaemon/Power\"
-       \(\"org.gnome.SettingsDaemon.Power.Keyboard\")
-       \(\"org.gnome.SettingsDaemon.Power.Screen\")
-       \(\"org.gnome.SettingsDaemon.Power\"
-        \(\"Icon\" . \". GThemedIcon battery-full-charged-symbolic \")
-        \(\"Tooltip\" . \"Laptop battery is charged\"))
-       \(\"org.freedesktop.DBus.Peer\")
-       \(\"org.freedesktop.DBus.Introspectable\")
-       \(\"org.freedesktop.DBus.Properties\")
-       \(\"org.freedesktop.DBus.ObjectManager\"))
+  => ((\"/org/gnome/SettingsDaemon/MediaKeys\"
+       (\"org.gnome.SettingsDaemon.MediaKeys\")
+       (\"org.freedesktop.DBus.Peer\")
+       (\"org.freedesktop.DBus.Introspectable\")
+       (\"org.freedesktop.DBus.Properties\")
+       (\"org.freedesktop.DBus.ObjectManager\"))
+      (\"/org/gnome/SettingsDaemon/Power\"
+       (\"org.gnome.SettingsDaemon.Power.Keyboard\")
+       (\"org.gnome.SettingsDaemon.Power.Screen\")
+       (\"org.gnome.SettingsDaemon.Power\"
+        (\"Icon\" . \". GThemedIcon battery-full-charged-symbolic \")
+        (\"Tooltip\" . \"Laptop battery is charged\"))
+       (\"org.freedesktop.DBus.Peer\")
+       (\"org.freedesktop.DBus.Introspectable\")
+       (\"org.freedesktop.DBus.Properties\")
+       (\"org.freedesktop.DBus.ObjectManager\"))
       ...)
 
 If possible, \"org.freedesktop.DBus.ObjectManager.GetManagedObjects\"
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index f2f5ecb..d44890f 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -263,7 +263,7 @@ word(s) will be searched for via `eww-search-prefix'."
                 ;; en.wikipedia.org/wiki/Free software
                 (string-match "\\`[A-Za-z_]+\\.[A-Za-z._]+/" url)
                 (and (= (length (split-string url)) 1)
-                     (or (and (not (string-match-p "\\`[\"\'].*[\"\']\\'" url))
+                     (or (and (not (string-match-p "\\`[\"'].*[\"']\\'" url))
                               (> (length (split-string url "[.:]")) 1))
                          (string-match eww-local-regex url))))
              (progn
diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el
index 418796a..479c9a5 100644
--- a/lisp/net/gnutls.el
+++ b/lisp/net/gnutls.el
@@ -111,9 +111,9 @@ specifying a port number to connect to.
 
 Usage example:
 
-  \(with-temp-buffer
-    \(open-gnutls-stream \"tls\"
-                        \(current-buffer)
+  (with-temp-buffer
+    (open-gnutls-stream \"tls\"
+                        (current-buffer)
                         \"your server goes here\"
                         \"imaps\"))
 
diff --git a/lisp/net/net-utils.el b/lisp/net/net-utils.el
index eaf1d7e..c6d40b6 100644
--- a/lisp/net/net-utils.el
+++ b/lisp/net/net-utils.el
@@ -204,7 +204,7 @@ This variable is only used if the variable
   :group 'net-utils
   :type  '(repeat string))
 
-(defcustom smbclient-prompt-regexp "^smb: \>"
+(defcustom smbclient-prompt-regexp "^smb: >"
   "Regexp which matches the smbclient program's prompt.
 
 This variable is only used if the variable
diff --git a/lisp/net/newst-backend.el b/lisp/net/newst-backend.el
index 6c80e62..072fd01 100644
--- a/lisp/net/newst-backend.el
+++ b/lisp/net/newst-backend.el
@@ -343,8 +343,8 @@ pattern-list is checked: The new headline will be marked as 
AGE
 if REGEXP matches the headline's TITLE-OR-DESCRIPTION.
 
 If, for example, `newsticker-auto-mark-filter-list' looks like
- \((slashdot (\\='old \\='title \"^Forget me!$\") (\\='immortal \\='title 
\"Read me\")
-  \(\\='immortal \\='all \"important\"))))
+ ((slashdot (\\='old \\='title \"^Forget me!$\") (\\='immortal \\='title 
\"Read me\")
+  (\\='immortal \\='all \"important\"))))
 
 then all articles from slashdot are marked as old if they have
 the title \"Forget me!\".  All articles with a title containing
@@ -562,7 +562,7 @@ If non-nil only the current headline is visible.")
   "Return guid of ITEM."
   (newsticker--guid-to-string (assoc 'guid (newsticker--extra item))))
 (defsubst newsticker--enclosure (item)
-  "Return enclosure element of ITEM in the form \(...FIXME...\) or nil."
+  "Return enclosure element of ITEM in the form (...FIXME...) or nil."
   (let ((enclosure (assoc 'enclosure (newsticker--extra item))))
     (if enclosure
         (xml-node-attributes enclosure))))
diff --git a/lisp/net/newst-reader.el b/lisp/net/newst-reader.el
index be4179e..105b36e 100644
--- a/lisp/net/newst-reader.el
+++ b/lisp/net/newst-reader.el
@@ -258,7 +258,7 @@ for formatting."
 (defun newsticker--image-read (feed-name-symbol disabled &optional max-height)
   "Read the cached image for FEED-NAME-SYMBOL from disk.
 If DISABLED is non-nil the image will be converted to a disabled look
-\(unless `newsticker-enable-logo-manipulations' is not t\).
+\(unless `newsticker-enable-logo-manipulations' is not t).
 Optional argument MAX-HEIGHT specifies the maximal image height.
 Return the image."
   (let ((image-name (concat (newsticker--images-dir)
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index df06350..d58f3eb 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -2600,7 +2600,7 @@ If ARG is given, opens the URL in a new browser window."
                   (cond ((rcirc-channel-p target)
                          target)
                         ;;; -ChanServ- [#gnu] Welcome...
-                        ((string-match "\\[\\(#[^\] ]+\\)\\]" message)
+                        ((string-match "\\[\\(#[^] ]+\\)\\]" message)
                          (match-string 1 message))
                         (sender
                          (if (string= sender (rcirc-server-name process))
diff --git a/lisp/net/rlogin.el b/lisp/net/rlogin.el
index da46ec3..fead60e 100644
--- a/lisp/net/rlogin.el
+++ b/lisp/net/rlogin.el
@@ -145,7 +145,7 @@ other arguments for `rlogin'.
 Input is sent line-at-a-time to the remote connection.
 
 Communication with the remote host is recorded in a buffer `*rlogin-HOST*'
-\(or address@hidden' if the remote username differs\).
+\(or address@hidden' if the remote username differs).
 If a prefix argument is given and the buffer `*rlogin-HOST*' already exists,
 a new buffer with a different connection will be made.
 
diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el
index c4102a1..5e02740 100644
--- a/lisp/net/secrets.el
+++ b/lisp/net/secrets.el
@@ -598,7 +598,7 @@ If successful, return the object path of the collection."
 ATTRIBUTES are key-value pairs.  The keys are keyword symbols,
 starting with a colon.  Example:
 
-  \(secrets-search-items \"Tramp collection\" :user \"joe\")
+  (secrets-search-items \"Tramp collection\" :user \"joe\")
 
 The object labels of the found items are returned as list."
   (let ((collection-path (secrets-unlock-collection collection))
@@ -635,8 +635,8 @@ The object labels of the found items are returned as list."
 ATTRIBUTES are key-value pairs set for the created item.  The
 keys are keyword symbols, starting with a colon.  Example:
 
-  \(secrets-create-item \"Tramp collection\" \"item\" \"geheim\"
-   :method \"sudo\" :user \"joe\" :host \"remote-host\"\)
+  (secrets-create-item \"Tramp collection\" \"item\" \"geheim\"
+   :method \"sudo\" :user \"joe\" :host \"remote-host\")
 
 The object path of the created item is returned."
   (unless (member item (secrets-list-items collection))
diff --git a/lisp/net/shr-color.el b/lisp/net/shr-color.el
index 433254d..482f829 100644
--- a/lisp/net/shr-color.el
+++ b/lisp/net/shr-color.el
@@ -242,7 +242,7 @@ Like rgb() or hsl()."
            
"rgb(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*)"
            color)
           (string-match
-           
"rgba(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)"
+           
"rgba(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*[0-9]*\\.?[0-9]+\s*%?\s*)"
            color))
       (format "#%02X%02X%02X"
               (shr-color-relative-to-absolute (match-string-no-properties 1 
color))
@@ -253,7 +253,7 @@ Like rgb() or hsl()."
            
"hsl(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*)"
            color)
           (string-match
-           
"hsla(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)"
+           
"hsla(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*[0-9]*\\.?[0-9]+\s*%?\s*)"
            color))
       (let ((h (/ (string-to-number (match-string-no-properties 1 color)) 
360.0))
             (s (/ (string-to-number (match-string-no-properties 2 color)) 
100.0))
diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el
index ada2767..509c021 100644
--- a/lisp/net/soap-client.el
+++ b/lisp/net/soap-client.el
@@ -167,7 +167,7 @@ namespace of LOCAL-NAME."
   "Convert LOCAL-NAME into a fully qualified name.
 A fully qualified name is a cons of the namespace name and the
 name of the element itself.  For example \"xsd:string\" is
-converted to \(\"http://www.w3.org/2001/XMLSchema\"; . \"string\"\).
+converted to \(\"http://www.w3.org/2001/XMLSchema\"; . \"string\").
 
 The USE-TNS argument specifies what to do when LOCAL-NAME has no
 namespace tag.  If USE-TNS is non-nil, the `soap-target-xmlns'
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index f818fcd..595e0ef 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -59,7 +59,7 @@ It is used for TCP/IP devices."
 
 ;;;###tramp-autoload
 (defcustom tramp-adb-prompt
-  
"^\\(?:[[:digit:]]*|?\\)?\\(?:[[:alnum:]\e;address@hidden:alnum:]]*[^#\\$]*\\)?[#\\$][[:space:]]"
+  
"^\\(?:[[:digit:]]*|?\\)?\\(?:[[:alnum:]\e;address@hidden:alnum:]]*[^#\\$]*\\)?[#\\$][[:space:]]"
   "Regexp used as prompt in almquist shell."
   :type 'string
   :version "24.4"
@@ -132,6 +132,7 @@ It is used for TCP/IP devices."
     (file-newer-than-file-p . tramp-handle-file-newer-than-file-p)
     (file-notify-add-watch . tramp-handle-file-notify-add-watch)
     (file-notify-rm-watch . tramp-handle-file-notify-rm-watch)
+    (file-notify-valid-p . tramp-handle-file-notify-valid-p)
     (file-ownership-preserved-p . ignore)
     (file-readable-p . tramp-handle-file-exists-p)
     (file-regular-p . tramp-handle-file-regular-p)
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 4dfdcd7..b7b0a1c 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -443,6 +443,7 @@ Every entry is a list (NAME ADDRESS).")
     (file-newer-than-file-p . tramp-handle-file-newer-than-file-p)
     (file-notify-add-watch . tramp-gvfs-handle-file-notify-add-watch)
     (file-notify-rm-watch . tramp-handle-file-notify-rm-watch)
+    (file-notify-valid-p . tramp-handle-file-notify-valid-p)
     (file-ownership-preserved-p . ignore)
     (file-readable-p . tramp-gvfs-handle-file-readable-p)
     (file-regular-p . tramp-handle-file-regular-p)
@@ -1002,27 +1003,48 @@ file names."
             v (concat localname filename)
            "file-name-all-completions" result))))))))
 
-(defun tramp-gvfs-handle-file-notify-add-watch (file-name _flags _callback)
+(defun tramp-gvfs-handle-file-notify-add-watch (file-name flags _callback)
   "Like `file-notify-add-watch' for Tramp files."
   (setq file-name (expand-file-name file-name))
   (with-parsed-tramp-file-name file-name nil
-    (let ((p (start-process
-             "gvfs-monitor-file" (generate-new-buffer " *gvfs-monitor-file*")
-             "gvfs-monitor-file" (tramp-gvfs-url-file-name file-name))))
+    ;; We cannot watch directories, because `gvfs-monitor-dir' is not
+    ;; supported for gvfs-mounted directories.
+    (when (file-directory-p file-name)
+      (tramp-error
+       v 'file-notify-error "Monitoring not supported for `%s'" file-name))
+    (let* ((default-directory (file-name-directory file-name))
+          (events
+           (cond
+            ((and (memq 'change flags) (memq 'attribute-change flags))
+             '(created changed changes-done-hint moved deleted
+                       attribute-changed))
+            ((memq 'change flags)
+             '(created changed changes-done-hint moved deleted))
+            ((memq 'attribute-change flags) '(attribute-changed))))
+          (p (start-process
+              "gvfs-monitor-file" (generate-new-buffer " *gvfs-monitor-file*")
+              "gvfs-monitor-file" (tramp-gvfs-url-file-name file-name))))
       (if (not (processp p))
          (tramp-error
-          v 'file-notify-error "gvfs-monitor-file failed to start")
+          v 'file-notify-error "Monitoring not supported for `%s'" file-name)
        (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)
-       (set-process-filter p 'tramp-gvfs-file-gvfs-monitor-file-process-filter)
-       (with-current-buffer (process-buffer p)
-         (setq default-directory (file-name-directory file-name)))
+       (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.
+       (tramp-accept-process-output p 1)
+       (unless (memq (process-status p) '(run open))
+         (tramp-error
+          v 'file-notify-error "Monitoring not supported for `%s'" file-name))
        p))))
 
-(defun tramp-gvfs-file-gvfs-monitor-file-process-filter (proc string)
-  "Read output from \"gvfs-monitor-file\" and add corresponding file-notify 
events."
+(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))
         (dd (with-current-buffer (process-buffer proc) default-directory))
         (ddu (regexp-quote (tramp-gvfs-url-file-name dd))))
@@ -1033,6 +1055,8 @@ file names."
          ;; Attribute change is returned in unused wording.
          string (tramp-compat-replace-regexp-in-string
                  "ATTRIB CHANGED" "ATTRIBUTE_CHANGED" string))
+    (when (string-match "Monitoring not supported" string)
+      (delete-process proc))
 
     (while (string-match
            (concat "^[\n\r]*"
@@ -1040,10 +1064,10 @@ file names."
                    "File = \\([^\n\r]+\\)[\n\r]+"
                    "Event = \\([^[:blank:]]+\\)[\n\r]+")
            string)
-      (let ((action (intern-soft
+      (let ((file (match-string 1 string))
+           (action (intern-soft
                     (tramp-compat-replace-regexp-in-string
-                     "_" "-" (downcase (match-string 2 string)))))
-           (file (match-string 1 string)))
+                     "_" "-" (downcase (match-string 2 string))))))
        (setq string (replace-match "" nil nil string))
        ;; File names are returned as URL paths.  We must convert them.
        (when (string-match ddu file)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 79b024e..433b2ba 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -1008,6 +1008,7 @@ of command line.")
     (file-newer-than-file-p . tramp-sh-handle-file-newer-than-file-p)
     (file-notify-add-watch . tramp-sh-handle-file-notify-add-watch)
     (file-notify-rm-watch . tramp-handle-file-notify-rm-watch)
+    (file-notify-valid-p . tramp-handle-file-notify-valid-p)
     (file-ownership-preserved-p . tramp-sh-handle-file-ownership-preserved-p)
     (file-readable-p . tramp-sh-handle-file-readable-p)
     (file-regular-p . tramp-handle-file-regular-p)
@@ -3721,22 +3722,33 @@ Fall back to normal file name handler if no Tramp 
handler exists."
   "Like `file-notify-add-watch' for Tramp files."
   (setq file-name (expand-file-name file-name))
   (with-parsed-tramp-file-name file-name nil
-    (let* ((default-directory (file-name-directory file-name))
-          command events filter p sequence)
+    (let ((default-directory (file-name-directory file-name))
+         command events filter p sequence)
       (cond
        ;; gvfs-monitor-dir.
        ((setq command (tramp-get-remote-gvfs-monitor-dir v))
-       (setq filter 'tramp-sh-file-gvfs-monitor-dir-process-filter
+       (setq filter 'tramp-sh-gvfs-monitor-dir-process-filter
+             events
+             (cond
+              ((and (memq 'change flags) (memq 'attribute-change flags))
+               '(created changed changes-done-hint moved deleted
+                         attribute-changed))
+              ((memq 'change flags)
+               '(created changed changes-done-hint moved deleted))
+              ((memq 'attribute-change flags) '(attribute-changed)))
              sequence `(,command ,localname)))
        ;; inotifywait.
        ((setq command (tramp-get-remote-inotifywait v))
-       (setq filter 'tramp-sh-file-inotifywait-process-filter
+       (setq filter 'tramp-sh-inotifywait-process-filter
              events
              (cond
               ((and (memq 'change flags) (memq 'attribute-change flags))
-               "create,modify,move,delete,attrib")
-              ((memq 'change flags) "create,modify,move,delete")
-              ((memq 'attribute-change flags) "attrib"))
+               (concat "create,modify,move,moved_from,moved_to,move_self,"
+                       "delete,delete_self,attrib,ignored"))
+              ((memq 'change flags)
+               (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)))
        ;; None.
        (t (tramp-error
@@ -3758,12 +3770,22 @@ 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)
        (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.
+       (tramp-accept-process-output p 1)
+       (unless (memq (process-status p) '(run open))
+         (tramp-error
+          v 'file-notify-error "Monitoring not supported for `%s'" file-name))
        p))))
 
-(defun tramp-sh-file-gvfs-monitor-dir-process-filter (proc string)
-  "Read output from \"gvfs-monitor-dir\" and add corresponding file-notify 
events."
+(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
         (with-current-buffer (process-buffer proc)
           (file-remote-p default-directory)))
@@ -3775,6 +3797,8 @@ Fall back to normal file name handler if no Tramp handler 
exists."
          ;; Attribute change is returned in unused wording.
          string (tramp-compat-replace-regexp-in-string
                  "ATTRIB CHANGED" "ATTRIBUTE_CHANGED" string))
+    (when (string-match "Monitoring not supported" string)
+      (delete-process proc))
 
     (while (string-match
            (concat "^[\n\r]*"
@@ -3783,29 +3807,36 @@ Fall back to normal file name handler if no Tramp 
handler exists."
                    "\\(Other = \\([^\n\r]+\\)[\n\r]+\\)?"
                    "Event = \\([^[:blank:]]+\\)[\n\r]+")
            string)
-      (let ((object
-            (list
-             proc
-             (intern-soft
-              (tramp-compat-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 (match-string 1 string))
-             (when (match-string 3 string)
-               (concat remote-prefix (match-string 3 string))))))
+      (let* ((file (match-string 1 string))
+            (file1 (match-string 3 string))
+            (object
+             (list
+              proc
+              (intern-soft
+               (tramp-compat-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)))
+         (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)))
+       (when (member (cadr object) (tramp-compat-process-get proc 'events))
+         (tramp-compat-funcall 'file-notify-callback object))))
 
     ;; 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)))
 
-(defun tramp-sh-file-inotifywait-process-filter (proc 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))
@@ -3827,6 +3858,9 @@ Fall back to normal file name handler if no Tramp handler 
exists."
                (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.
@@ -4297,7 +4331,7 @@ process to set up.  VEC specifies the connection."
   "List of local coding commands for inline transfer.
 Each item is a list that looks like this:
 
-\(FORMAT ENCODING DECODING\)
+\(FORMAT ENCODING DECODING)
 
 FORMAT is  symbol describing the encoding/decoding format.  It can be
 `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing.
@@ -4335,7 +4369,7 @@ with the encoded or decoded results, respectively.")
   "List of remote coding commands for inline transfer.
 Each item is a list that looks like this:
 
-\(FORMAT ENCODING DECODING [TEST]\)
+\(FORMAT ENCODING DECODING [TEST])
 
 FORMAT is a symbol describing the encoding/decoding format.  It can be
 `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing.
@@ -4508,7 +4542,7 @@ means discard it)."
   "List of compress and decompress commands for inline transfer.
 Each item is a list that looks like this:
 
-\(COMPRESS DECOMPRESS\)
+\(COMPRESS DECOMPRESS)
 
 COMPRESS or DECOMPRESS are strings with the respective commands.")
 
@@ -5519,7 +5553,7 @@ Return ATTR."
           (tramp-get-remote-id vec)
           (if (equal id-format 'integer) "" "n")
           (if (equal id-format 'integer)
-              "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/"))))
+              "" "| sed -e s/^/\\\"/ -e s/\\$/\\\"/"))))
 
 (defun tramp-get-remote-uid-with-perl (vec id-format)
   (tramp-send-command-and-read
@@ -5570,7 +5604,7 @@ Return ATTR."
           (tramp-get-remote-id vec)
           (if (equal id-format 'integer) "" "n")
           (if (equal id-format 'integer)
-              "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/"))))
+              "" "| sed -e s/^/\\\"/ -e s/\\$/\\\"/"))))
 
 (defun tramp-get-remote-gid-with-perl (vec id-format)
   (tramp-send-command-and-read
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index c4f0f1f..5910d1f 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -247,6 +247,7 @@ See `tramp-actions-before-shell' for more info.")
     (file-newer-than-file-p . tramp-handle-file-newer-than-file-p)
     (file-notify-add-watch . tramp-handle-file-notify-add-watch)
     (file-notify-rm-watch . tramp-handle-file-notify-rm-watch)
+    (file-notify-valid-p . tramp-handle-file-notify-valid-p)
     (file-ownership-preserved-p . ignore)
     (file-readable-p . tramp-handle-file-exists-p)
     (file-regular-p . tramp-handle-file-regular-p)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 0969048..fbb8c8a 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -110,9 +110,9 @@ Any level x includes messages for all levels 1 .. x-1.  The 
levels are
 Each element looks like (REGEXP . DIRECTORY), with the same meaning like
 in `backup-directory-alist'.  If a Tramp file is backed up, and DIRECTORY
 is a local file name, the backup directory is prepended with Tramp file
-name prefix \(method, user, host\) of file.
+name prefix \(method, user, host) of file.
 
-\(setq tramp-backup-directory-alist backup-directory-alist\)
+\(setq tramp-backup-directory-alist backup-directory-alist)
 
 gives the same backup policy for Tramp files on their hosts like the
 policy for local files."
@@ -129,9 +129,9 @@ policy for local files."
 It has the same meaning like `bkup-backup-directory-info' from package
 `backup-dir'.  If a Tramp file is backed up, and BACKUP-DIR is a local
 file name, the backup directory is prepended with Tramp file name prefix
-\(method, user, host\) of file.
+\(method, user, host) of file.
 
-\(setq tramp-bkup-backup-directory-info bkup-backup-directory-info\)
+\(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."
@@ -464,15 +464,15 @@ host runs a registered shell, it shall be added to this 
list, too."
   (concat
    "\\`"
    (regexp-opt
-    (list "localhost" "localhost6" (system-name) "127\.0\.0\.1" "::1") t)
+    (list "localhost" "localhost6" (system-name) "127.0.0.1" "::1") t)
    "\\'")
   "Host names which are regarded as local host.")
 
 (defvar tramp-completion-function-alist nil
   "Alist of methods for remote files.
-This is a list of entries of the form \(NAME PAIR1 PAIR2 ...\).
+This is a list of entries of the form \(NAME PAIR1 PAIR2 ...).
 Each NAME stands for a remote access method.  Each PAIR is of the form
-\(FUNCTION FILE\).  FUNCTION is responsible to extract user names and host
+\(FUNCTION FILE).  FUNCTION is responsible to extract user names and host
 names from FILE for completion.  The following predefined FUNCTIONs exists:
 
  * `tramp-parse-rhosts'      for \"~/.rhosts\" like files,
@@ -908,7 +908,7 @@ and is a bit too general, then some files might be 
considered Tramp
 files which are not really Tramp files.
 
 Please note that the entry in `file-name-handler-alist' is made when
-this file \(tramp.el\) is loaded.  This means that this variable must be set
+this file \(tramp.el) is loaded.  This means that this variable must be set
 before loading tramp.el.  Alternatively, `file-name-handler-alist' can be
 updated after changing this variable.
 
@@ -940,7 +940,7 @@ See `tramp-file-name-structure' for more explanations.")
 This regexp should match partial Tramp file names only.
 
 Please note that the entry in `file-name-handler-alist' is made when
-this file \(tramp.el\) is loaded.  This means that this variable must be set
+this file \(tramp.el) is loaded.  This means that this variable must be set
 before loading tramp.el.  Alternatively, `file-name-handler-alist' can be
 updated after changing this variable.
 
@@ -993,18 +993,18 @@ checked via the following code:
 
 In the Emacs normally running Tramp, evaluate the above code
 \(replace \"xxx\" and \"yyy\" by the remote user and host name,
-respectively\).  You can do this, for example, by pasting it into
+respectively).  You can do this, for example, by pasting it into
 the `*scratch*' buffer and then hitting C-j with the cursor after the
 last closing parenthesis.  Note that it works only if you have configured
-\"ssh\" to run without password query, see ssh-agent\(1\).
+\"ssh\" to run without password query, see ssh-agent(1).
 
 You will see the number of bytes sent successfully to the remote host.
 If that number exceeds 1000, you can stop the execution by hitting
 C-g, because your Emacs is likely clean.
 
 When it is necessary to set `tramp-chunksize', you might consider to
-use an out-of-the-band method \(like \"scp\"\) instead of an internal one
-\(like \"ssh\"\), because setting `tramp-chunksize' to non-nil decreases
+use an out-of-the-band method \(like \"scp\") instead of an internal one
+\(like \"ssh\"), because setting `tramp-chunksize' to non-nil decreases
 performance.
 
 If your Emacs is buggy, the code stops and gives you an indication
@@ -2070,7 +2070,7 @@ ARGS are the arguments OPERATION has been called with."
                  'dired-print-file 'dired-shell-call-process))
     default-directory)
    ;; PROC.
-   ((eq operation 'file-notify-rm-watch)
+   ((member operation (list 'file-notify-rm-watch 'file-notify-valid-p))
     (when (processp (nth 0 args))
       (with-current-buffer (process-buffer (nth 0 args))
        default-directory)))
@@ -3407,7 +3407,7 @@ of."
 (defun tramp-handle-file-notify-add-watch (filename _flags _callback)
   "Like `file-notify-add-watch' for Tramp files."
   ;; This is the default handler.  tramp-gvfs.el and tramp-sh.el have
-  ;; its own one.
+  ;; their own one.
   (setq filename (expand-file-name filename))
   (with-parsed-tramp-file-name filename nil
     (tramp-error
@@ -3419,7 +3419,17 @@ of."
   (unless (processp proc)
     (tramp-error proc 'file-notify-error "Not a valid descriptor %S" proc))
   (tramp-message proc 6 "Kill %S" proc)
-  (kill-process proc))
+  (delete-process proc))
+
+(defun tramp-handle-file-notify-valid-p (proc)
+  "Like `file-notify-valid-p' for Tramp files."
+  (and proc (processp proc) (memq (process-status proc) '(run open))
+       ;; Sometimes, the process is still in status `run' when the
+       ;; file or directory to be watched is deleted already.
+       (with-current-buffer (process-buffer proc)
+        (file-exists-p
+         (concat (file-remote-p default-directory)
+                 (tramp-compat-process-get proc 'watch-name))))))
 
 ;;; Functions for establishing connection:
 
@@ -3615,7 +3625,7 @@ This is needed in order to hide 
`last-coding-system-used', which is set
 for process communication also."
   (with-current-buffer (process-buffer proc)
     ;; FIXME: If there is a gateway process, we need communication
-    ;; between several processes.  Too complicated to implement, so we
+    ;; between several processes.  Too complicate to implement, so we
     ;; read output from all processes.
     (let ((p (if (tramp-get-connection-property proc "gateway" nil) nil proc))
          buffer-read-only last-coding-system-used)
diff --git a/lisp/net/zeroconf.el b/lisp/net/zeroconf.el
index 7fae9e6..794a467 100644
--- a/lisp/net/zeroconf.el
+++ b/lisp/net/zeroconf.el
@@ -197,7 +197,7 @@ The key of an entry is the concatenation of the service 
name and
 service type of a discovered service.  The value is the service
 itself.  The format of a service is
 
-  \(INTERFACE PROTOCOL NAME TYPE DOMAIN FLAGS\)
+  \(INTERFACE PROTOCOL NAME TYPE DOMAIN FLAGS)
 
 The INTERFACE is a number, which represents the network interface
 the service is located at.  The corresponding network interface
@@ -233,7 +233,7 @@ The key of an entry is the concatenation of the service 
name and
 service type of a resolved service.  The value is the service
 itself.  The format of a service is
 
-  \(INTERFACE PROTOCOL NAME TYPE DOMAIN HOST APROTOCOL ADDRESS PORT TXT FLAGS\)
+  (INTERFACE PROTOCOL NAME TYPE DOMAIN HOST APROTOCOL ADDRESS PORT TXT FLAGS)
 
 INTERFACE, PROTOCOL, NAME, TYPE, DOMAIN and FLAGS have the same
 meaning as in `zeroconf-services-hash'.
@@ -275,7 +275,7 @@ supported keys depend on the service type.")
   "Returns all discovered Avahi services for a given service type TYPE.
 The service type is one of the returned values of
 `zeroconf-list-service-types'.  The return value is a list
-\(SERVICE1 SERVICE2 ...\).  See `zeroconf-services-hash' for the
+\(SERVICE1 SERVICE2 ...).  See `zeroconf-services-hash' for the
 format of SERVICE."
   (let (result)
     (maphash
@@ -385,7 +385,7 @@ type used when registering FUNCTION."
 NAME must be a string.  The service must be of service type
 TYPE. The resulting list has the format
 
-  \(INTERFACE PROTOCOL NAME TYPE DOMAIN FLAGS\)."
+  (INTERFACE PROTOCOL NAME TYPE DOMAIN FLAGS)."
   ;; Due to the service browser, all known services are kept in
   ;; `zeroconf-services-hash'.
   (gethash (concat name "/" type) zeroconf-services-hash nil))
@@ -395,7 +395,7 @@ TYPE. The resulting list has the format
 NAME must be a string.  The service must be of service type
 TYPE. The resulting list has the format
 
-  \(INTERFACE PROTOCOL NAME TYPE DOMAIN HOST APROTOCOL ADDRESS PORT TXT 
FLAGS\)."
+  (INTERFACE PROTOCOL NAME TYPE DOMAIN HOST APROTOCOL ADDRESS PORT TXT FLAGS)."
   (let* ((name (zeroconf-service-name service))
         (type (zeroconf-service-type service))
         (key (concat name "/" type)))
diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index 60f35c8..0c49211 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -179,6 +179,11 @@ comments always start in column zero.")
   "Non-nil if nested comments should be quoted.
 This should be locally set by each major mode if needed.")
 
+(defvar comment-quote-nested-function #'comment-quote-nested-default
+  "Function to quote nested comments in a region.
+It takes the same arguments as `comment-quote-nested-default',
+and is called with the buffer narrowed to a single comment.")
+
 (defvar comment-continue nil
   "Continuation string to insert for multiline comments.
 This string will be added at the beginning of each line except the very
@@ -382,7 +387,7 @@ function should first call this function explicitly."
           (concat (unless (eq comment-use-syntax t)
                      ;; `syntax-ppss' will detect escaping.
                      "\\(\\(^\\|[^\\\n]\\)\\(\\\\\\\\\\)*\\)")
-                   "\\(\\s<+\\|"
+                   "\\(?:\\s<+\\|"
                   (regexp-quote (comment-string-strip comment-start t t))
                   ;; Let's not allow any \s- but only [ \t] since \n
                   ;; might be both a comment-end marker and \s-.
@@ -412,28 +417,44 @@ function should first call this function explicitly."
 If UNP is non-nil, unquote nested comment markers."
   (setq cs (comment-string-strip cs t t))
   (setq ce (comment-string-strip ce t t))
-  (when (and comment-quote-nested (> (length ce) 0))
-    (let ((re (concat (comment-quote-re ce unp)
-                     "\\|" (comment-quote-re cs unp))))
-      (goto-char (point-min))
-      (while (re-search-forward re nil t)
-       (goto-char (match-beginning 0))
-       (forward-char 1)
-       (if unp (delete-char 1) (insert "\\"))
-       (when (= (length ce) 1)
-         ;; If the comment-end is a single char, adding a \ after that
-         ;; "first" char won't deactivate it, so we turn such a CE
-         ;; into !CS.  I.e. for pascal, we turn } into !{
-         (if (not unp)
-             (when (string= (match-string 0) ce)
-               (replace-match (concat "!" cs) t t))
-           (when (and (< (point-min) (match-beginning 0))
-                      (string= (buffer-substring (1- (match-beginning 0))
-                                                 (1- (match-end 0)))
-                               (concat "!" cs)))
-             (backward-char 2)
-             (delete-char (- (match-end 0) (match-beginning 0)))
-             (insert ce))))))))
+  (when (and comment-quote-nested
+            (> (length ce) 0))
+    (funcall comment-quote-nested-function cs ce unp)))
+
+(defun comment-quote-nested-default (cs ce unp)
+  "Quote comment delimiters in the buffer.
+It expects to be called with the buffer narrowed to a single comment.
+It is used as a default for `comment-quote-nested-function'.
+
+The arguments CS and CE are strings matching comment starting and
+ending delimiters respectively.
+
+If UNP is non-nil, comments are unquoted instead.
+
+To quote the delimiters, a \\ is inserted after the first
+character of CS or CE.  If CE is a single character it will
+change CE into !CS."
+  (let ((re (concat (comment-quote-re ce unp)
+                   "\\|" (comment-quote-re cs unp))))
+    (goto-char (point-min))
+    (while (re-search-forward re nil t)
+      (goto-char (match-beginning 0))
+      (forward-char 1)
+      (if unp (delete-char 1) (insert "\\"))
+      (when (= (length ce) 1)
+       ;; If the comment-end is a single char, adding a \ after that
+       ;; "first" char won't deactivate it, so we turn such a CE
+       ;; into !CS.  I.e. for pascal, we turn } into !{
+       (if (not unp)
+           (when (string= (match-string 0) ce)
+             (replace-match (concat "!" cs) t t))
+         (when (and (< (point-min) (match-beginning 0))
+                    (string= (buffer-substring (1- (match-beginning 0))
+                                               (1- (match-end 0)))
+                             (concat "!" cs)))
+           (backward-char 2)
+           (delete-char (- (match-end 0) (match-beginning 0)))
+           (insert ce)))))))
 
 ;;;;
 ;;;; Navigation
diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el
index 6c5c85b..0e2fca3 100644
--- a/lisp/nxml/nxml-mode.el
+++ b/lisp/nxml/nxml-mode.el
@@ -546,6 +546,7 @@ Many aspects this mode can be customized using
   (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)
   (save-excursion
     (save-restriction
@@ -1350,6 +1351,18 @@ of the inserted start-tag or nil if none was inserted."
                            start-tag-indent)))))
     inserted-start-tag-pos))
 
+(defun nxml-comment-quote-nested (_cs _ce unp)
+  "Quote nested comments in buffer.
+See `comment-quote-nested-function' for more information."
+  (goto-char (point-min))
+  (save-match-data
+    (while (re-search-forward "-[\\]*-" nil t)
+      (goto-char (match-beginning 0))
+      (forward-char 1)
+      (if unp
+         (delete-char 1)
+       (insert "\\")))))
+
 ;;; Indentation
 
 (defun nxml-indent-line ()
diff --git a/lisp/obsolete/fast-lock.el b/lisp/obsolete/fast-lock.el
index 7e3dd66..3985d51 100644
--- a/lisp/obsolete/fast-lock.el
+++ b/lisp/obsolete/fast-lock.el
@@ -200,7 +200,7 @@
    `(let* (,@(append varlist
                      '((modified (buffer-modified-p)) (buffer-undo-list t)
                        (inhibit-read-only t) (inhibit-point-motion-hooks t)
-                       before-change-functions after-change-functions
+                       (inhibit-modification-hooks t)
                        deactivate-mark buffer-file-name buffer-file-truename)))
      ,@body
      (when (and (not modified) (buffer-modified-p))
diff --git a/lisp/obsolete/lazy-lock.el b/lisp/obsolete/lazy-lock.el
index 79afd80..d05a7d8 100644
--- a/lisp/obsolete/lazy-lock.el
+++ b/lisp/obsolete/lazy-lock.el
@@ -892,8 +892,7 @@ verbosity is controlled via the variable 
`lazy-lock-stealth-verbose'."
       (save-excursion
        (save-match-data
          (save-buffer-state
-          ;; Ensure syntactic fontification is always correct.
-          (font-lock-beginning-of-syntax-function next)
+          (next)
           ;; Find successive unfontified regions between BEG and END.
           (condition-case data
               (do-while beg
diff --git a/lisp/obsolete/longlines.el b/lisp/obsolete/longlines.el
index 01939da..7cb13ce 100644
--- a/lisp/obsolete/longlines.el
+++ b/lisp/obsolete/longlines.el
@@ -143,7 +143,7 @@ newlines are indicated with a symbol."
                     'longlines-window-change-function nil t))
         (let ((buffer-undo-list t)
               (inhibit-read-only t)
-             (after-change-functions nil)
+             (inhibit-modification-hooks t)
               (mod (buffer-modified-p))
              buffer-file-name buffer-file-truename)
           ;; Turning off undo is OK since (spaces + newlines) is
@@ -184,7 +184,7 @@ newlines are indicated with a symbol."
     (if longlines-showing
         (longlines-unshow-hard-newlines))
     (let ((buffer-undo-list t)
-         (after-change-functions nil)
+         (inhibit-modification-hooks t)
           (inhibit-read-only t)
          buffer-file-name buffer-file-truename)
       (if longlines-decoded
diff --git a/lisp/org/ob-core.el b/lisp/org/ob-core.el
index 799e58b..11cd253 100644
--- a/lisp/org/ob-core.el
+++ b/lisp/org/ob-core.el
@@ -502,7 +502,7 @@ be saved in the second match data.")
 
 (defvar org-babel-result-w-name-regexp
   (concat org-babel-result-regexp
-         "\\([^ ()\f\t\n\r\v]+\\)\\(\(\\(.*\\)\)\\|\\)"))
+         "\\([^ ()\f\t\n\r\v]+\\)\\((\\(.*\\))\\|\\)"))
 
 (defvar org-babel-min-lines-for-block-output 10
   "The minimum number of lines for block output.
@@ -2456,7 +2456,7 @@ block but are passed literally to the \"example-block\"."
       (setq index (point))
       (while (and (re-search-forward (org-babel-noweb-wrap) nil t))
        (save-match-data (setf source-name (match-string 1)))
-       (save-match-data (setq evaluate (string-match "\(.*\)" source-name)))
+       (save-match-data (setq evaluate (string-match "(.*)" source-name)))
        (save-match-data
          (setq prefix
                (buffer-substring (match-beginning 0)
diff --git a/lisp/org/ob-dot.el b/lisp/org/ob-dot.el
index 21a40b3..f4953a3 100644
--- a/lisp/org/ob-dot.el
+++ b/lisp/org/ob-dot.el
@@ -53,7 +53,7 @@
             (value (cdr pair)))
         (setq body
               (replace-regexp-in-string
-               (concat "\$" (regexp-quote name))
+               (concat "$" (regexp-quote name))
                (if (stringp value) value (format "%S" value))
                body))))
      vars)
diff --git a/lisp/org/ob-latex.el b/lisp/org/ob-latex.el
index d0a413f..811c9ef 100644
--- a/lisp/org/ob-latex.el
+++ b/lisp/org/ob-latex.el
@@ -183,7 +183,7 @@ This function is called by `org-babel-execute-src-block'."
   "Generate a file from a pdf file using imagemagick."
   (let ((cmd (concat "convert " im-in-options " " pdffile " "
                     im-out-options " " out-file)))
-    (message (concat "Converting pdffile file " cmd  "..."))
+    (message "Converting pdffile file %s..." cmd)
     (shell-command cmd)))
 
 (defun org-babel-latex-tex-to-pdf (file)
diff --git a/lisp/org/ob-lilypond.el b/lisp/org/ob-lilypond.el
index 5391edf..04eab7c 100644
--- a/lisp/org/ob-lilypond.el
+++ b/lisp/org/ob-lilypond.el
@@ -111,7 +111,7 @@ blocks")
             (value (cdr pair)))
         (setq body
               (replace-regexp-in-string
-               (concat "\$" (regexp-quote name))
+               (concat "$" (regexp-quote name))
                (if (stringp value) value (format "%S" value))
                body))))
      vars)
diff --git a/lisp/org/ob-lob.el b/lisp/org/ob-lob.el
index b083011..c254706 100644
--- a/lisp/org/ob-lob.el
+++ b/lisp/org/ob-lob.el
@@ -64,14 +64,14 @@ To add files to this list use the `org-babel-lob-ingest' 
command."
 
 (defconst org-babel-block-lob-one-liner-regexp
   (concat
-   "^\\([ \t]*?\\)#\\+call:[ 
\t]+\\([^\(\)\n]+?\\)\\(\\[\\(.*\\)\\]\\|\\(\\)\\)"
-   "\(\\([^\n]*?\\)\)\\(\\[.+\\]\\|\\)[ \t]*\\(\\([^\n]*\\)\\)?")
+   "^\\([ \t]*?\\)#\\+call:[ \t]+\\([^()\n]+?\\)\\(\\[\\(.*\\)\\]\\|\\(\\)\\)"
+   "(\\([^\n]*?\\))\\(\\[.+\\]\\|\\)[ \t]*\\(\\([^\n]*\\)\\)?")
   "Regexp to match non-inline calls to predefined source block functions.")
 
 (defconst org-babel-inline-lob-one-liner-regexp
   (concat
-   "\\([^\n]*?\\)call_\\([^\(\)\n]+?\\)\\(\\[\\(.*?\\)\\]\\|\\(\\)\\)"
-   "\(\\([^\n]*?\\)\)\\(\\[\\(.*?\\)\\]\\)?")
+   "\\([^\n]*?\\)call_\\([^()\n]+?\\)\\(\\[\\(.*?\\)\\]\\|\\(\\)\\)"
+   "(\\([^\n]*?\\))\\(\\[\\(.*?\\)\\]\\)?")
   "Regexp to match inline calls to predefined source block functions.")
 
 (defconst org-babel-lob-one-liner-regexp
diff --git a/lisp/org/ob-octave.el b/lisp/org/ob-octave.el
index e0775db..7ad474d 100644
--- a/lisp/org/ob-octave.el
+++ b/lisp/org/ob-octave.el
@@ -61,7 +61,7 @@ if ischar(ans), fid = fopen('%s', 'w'); fprintf(fid, 
'%%s\\n', ans); fclose(fid)
 else, dlmwrite('%s', ans, '\\t')
 end")
 
-(defvar org-babel-octave-eoe-indicator "\'org_babel_eoe\'")
+(defvar org-babel-octave-eoe-indicator "'org_babel_eoe'")
 
 (defvar org-babel-octave-eoe-output "ans = org_babel_eoe")
 
@@ -127,7 +127,7 @@ specifying a variable of the same value."
                             (if (listp (car var)) "; " ",")) "]")
     (cond
      ((stringp var)
-      (format "\'%s\'" var))
+      (format "'%s'" var))
      (t
       (format "%s" var)))))
 
diff --git a/lisp/org/ob-ref.el b/lisp/org/ob-ref.el
index 3e79592..5c1e131 100644
--- a/lisp/org/ob-ref.el
+++ b/lisp/org/ob-ref.el
@@ -138,7 +138,7 @@ the variable."
          (setq ref (substring ref 0 (match-beginning 0))))
        ;; assign any arguments to pass to source block
        (when (string-match
-              "^\\(.+?\\)\\(\\[\\(.*\\)\\]\\|\\(\\)\\)\(\\(.*\\)\)$" ref)
+              "^\\(.+?\\)\\(\\[\\(.*\\)\\]\\|\\(\\)\\)(\\(.*\\))$" ref)
          (setq new-refere      (match-string 1 ref))
          (setq new-header-args (match-string 3 ref))
          (setq new-referent    (match-string 5 ref))
@@ -224,7 +224,7 @@ returned, or an empty string or \"*\" both of which are
 interpreted to mean the entire range and as such are equivalent
 to \"0:-1\"."
   (if (and (> (length index) 0) (string-match "^\\([^,]*\\),?" index))
-      (let* ((ind-re "\\(\\([-[:digit:]]+\\):\\([-[:digit:]]+\\)\\|\*\\)")
+      (let* ((ind-re "\\(\\([-[:digit:]]+\\):\\([-[:digit:]]+\\)\\|\\*\\)")
             (lgth (length lis))
             (portion (match-string 1 index))
             (remainder (substring index (match-end 0)))
diff --git a/lisp/org/ob-sql.el b/lisp/org/ob-sql.el
index 7ed61b1..6dff9ad 100644
--- a/lisp/org/ob-sql.el
+++ b/lisp/org/ob-sql.el
@@ -106,7 +106,7 @@ This function is called by `org-babel-execute-src-block'."
                     ('dbi (format "dbish --batch %s < %s | sed '%s' > %s"
                                  (or cmdline "")
                                  (org-babel-process-file-name in-file)
-                                 "/^+/d;s/^\|//;s/(NULL)/ /g;$d"
+                                 "/^+/d;s/^|//;s/(NULL)/ /g;$d"
                                  (org-babel-process-file-name out-file)))
                     ('monetdb (format "mclient -f tab %s < %s > %s"
                                       (or cmdline "")
@@ -186,7 +186,7 @@ This function is called by `org-babel-execute-src-block'."
    (lambda (pair)
      (setq body
           (replace-regexp-in-string
-           (format "\$%s" (car pair))  ;FIXME: "\$" == "$"!
+           (format "$%s" (car pair))
            (let ((val (cdr pair)))
               (if (listp val)
                   (let ((data-file (org-babel-temp-file "sql-data-")))
diff --git a/lisp/org/ob-sqlite.el b/lisp/org/ob-sqlite.el
index 33c8d9b..18d7fc8 100644
--- a/lisp/org/ob-sqlite.el
+++ b/lisp/org/ob-sqlite.el
@@ -119,7 +119,7 @@ This function is called by `org-babel-execute-src-block'."
    (lambda (pair)
      (setq body
           (replace-regexp-in-string
-           (format "\$%s" (car pair))  ;FIXME: "\$" == "$"!
+           (format "$%s" (car pair))
            (let ((val (cdr pair)))
               (if (listp val)
                   (let ((data-file (org-babel-temp-file "sqlite-data-")))
diff --git a/lisp/org/ob-tangle.el b/lisp/org/ob-tangle.el
index c0846f9..732522c 100644
--- a/lisp/org/ob-tangle.el
+++ b/lisp/org/ob-tangle.el
@@ -302,7 +302,7 @@ Insert the source-code specified by SPEC into the current 
source
 code file.  This function uses `comment-region' which assumes
 that the appropriate major-mode is set.  SPEC has the form:
 
-  \(start-line file link source-name params body comment)"
+  (start-line file link source-name params body comment)"
   (let* ((start-line (nth 0 spec))
         (file (nth 1 spec))
         (link (nth 2 spec))
diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
index ae5a252..0b3be56 100644
--- a/lisp/org/org-agenda.el
+++ b/lisp/org/org-agenda.el
@@ -4603,7 +4603,8 @@ in `org-agenda-text-search-extra-files'."
                                             (goto-char (1- end))
                                             (throw :skip t)))
                              (if todo-only
-                                 (cons (concat "^\*+[ \t]+" 
org-not-done-regexp)
+                                 (cons (concat "^\\*+[ \t]+"
+                                                org-not-done-regexp)
                                        regexps+)
                                regexps+))
                        (goto-char beg)
diff --git a/lisp/org/org-bibtex.el b/lisp/org/org-bibtex.el
index 06adc07..7227803 100644
--- a/lisp/org/org-bibtex.el
+++ b/lisp/org/org-bibtex.el
@@ -195,7 +195,7 @@
     (:howpublished . "How something strange has been published.  The first 
word should be capitalized.")
     (:institution  . "The sponsoring institution of a technical report.")
     (:journal      . "A journal name.")
-    (:key          . "Used for alphabetizing, cross-referencing, and creating 
a label when the author information is missing.  This field should not be 
confused with the key that appears in the \cite command and at the beginning of 
the database entry.")
+    (:key          . "Used for alphabetizing, cross-referencing, and creating 
a label when the author information is missing.  This field should not be 
confused with the key that appears in the \\cite command and at the beginning 
of the database entry.")
     (:month        . "The month in which the work was published or, for an 
unpublished work, in which it was written.  You should use the standard 
three-letter abbreviation,")
     (:note         . "Any additional information that can help the reader.  
The first word should be capitalized.")
     (:number       . "Any additional information that can help the reader.  
The first word should be capitalized.")
diff --git a/lisp/org/org-clock.el b/lisp/org/org-clock.el
index 9489edf..b386eb1 100644
--- a/lisp/org/org-clock.el
+++ b/lisp/org/org-clock.el
@@ -1235,7 +1235,7 @@ make this the default behavior.)"
                   (looking-at
                    (concat "^[ \t]*" org-clock-string
                            " \\[\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}"
-                           " *\\sw+\.? +[012][0-9]:[0-5][0-9]\\)\\][ \t]*$")))
+                           " *\\sw+.? +[012][0-9]:[0-5][0-9]\\)\\][ \t]*$")))
              (message "Matched %s" (match-string 1))
              (setq ts (concat "[" (match-string 1) "]"))
              (goto-char (match-end 1))
diff --git a/lisp/org/org-colview.el b/lisp/org/org-colview.el
index e938ab4..396aa37 100644
--- a/lisp/org/org-colview.el
+++ b/lisp/org/org-colview.el
@@ -354,7 +354,7 @@ CPHR is the complex heading regexp to use for parsing ITEM."
   (let (fixitem)
     (if (not cphr)
        item
-      (unless (string-match "^\*+ " item)
+      (unless (string-match "^\\*+ " item)
        (setq item (concat "* " item) fixitem t))
       (if (string-match cphr item)
          (setq item
@@ -369,7 +369,7 @@ CPHR is the complex heading regexp to use for parsing ITEM."
         0 (1+ (match-end 1))
         (list 'org-whitespace (* 2 (1- (org-reduced-level (- (match-end 1) 
(match-beginning 1))))))
         item))
-      (if fixitem (replace-regexp-in-string "^\*+ " "" item) item))))
+      (if fixitem (replace-regexp-in-string "^\\*+ " "" item) item))))
 
 (defun org-columns-compact-links (s)
   "Replace [[link][desc]] with [desc] or [link]."
diff --git a/lisp/org/org-crypt.el b/lisp/org/org-crypt.el
index f527673..2b3445e 100644
--- a/lisp/org/org-crypt.el
+++ b/lisp/org/org-crypt.el
@@ -133,9 +133,10 @@ See `org-crypt-disable-auto-save'."
        (and
        (eq org-crypt-disable-auto-save 'ask)
        (y-or-n-p "org-decrypt: auto-save-mode may cause leakage.  Disable it 
for current buffer? ")))
-      (message (concat "org-decrypt: Disabling auto-save-mode for " (or 
(buffer-file-name) (current-buffer))))
-                                       ; The argument to auto-save-mode has to 
be "-1", since
-                                       ; giving a "nil" argument toggles 
instead of disabling.
+      (message "org-decrypt: Disabling auto-save-mode for %s"
+               (or (buffer-file-name) (current-buffer)))
+      ;; The argument to auto-save-mode has to be "-1", since
+      ;; giving a "nil" argument toggles instead of disabling.
       (auto-save-mode -1))
      ((eq org-crypt-disable-auto-save nil)
       (message "org-decrypt: Decrypting entry with auto-save-mode enabled.  
This may cause leakage."))
diff --git a/lisp/org/org-docview.el b/lisp/org/org-docview.el
index 07224d3..5c0e3e9 100644
--- a/lisp/org/org-docview.el
+++ b/lisp/org/org-docview.el
@@ -61,7 +61,7 @@
       (setq path (org-link-escape (expand-file-name path)))
       (cond
        ((eq format 'html) (format "<a href=\"%s\">%s</a>" path desc))
-       ((eq format 'latex) (format "\href{%s}{%s}" path desc))
+       ((eq format 'latex) (format "\\href{%s}{%s}" path desc))
        ((eq format 'ascii) (format "%s (%s)" desc path))
        (t path)))))
 
diff --git a/lisp/org/org-element.el b/lisp/org/org-element.el
index 573d7ee..9f4cfa3 100644
--- a/lisp/org/org-element.el
+++ b/lisp/org/org-element.el
@@ -4141,30 +4141,30 @@ Assuming TREE is a variable containing an Org buffer 
parse tree,
 the following example will return a flat list of all `src-block'
 and `example-block' elements in it:
 
-  \(org-element-map tree \\='(example-block src-block) \\='identity)
+  (org-element-map tree \\='(example-block src-block) \\='identity)
 
 The following snippet will find the first headline with a level
 of 1 and a \"phone\" tag, and will return its beginning position:
 
-  \(org-element-map tree \\='headline
-   \(lambda (hl)
-     \(and (= (org-element-property :level hl) 1)
-          \(member \"phone\" (org-element-property :tags hl))
-          \(org-element-property :begin hl)))
+  (org-element-map tree \\='headline
+   (lambda (hl)
+     (and (= (org-element-property :level hl) 1)
+          (member \"phone\" (org-element-property :tags hl))
+          (org-element-property :begin hl)))
    nil t)
 
 The next example will return a flat list of all `plain-list' type
 elements in TREE that are not a sub-list themselves:
 
-  \(org-element-map tree \\='plain-list \\='identity nil nil \\='plain-list)
+  (org-element-map tree \\='plain-list \\='identity nil nil \\='plain-list)
 
 Eventually, this example will return a flat list of all `bold'
 type objects containing a `latex-snippet' type object, even
 looking into captions:
 
-  \(org-element-map tree \\='bold
-   \(lambda (b)
-     \(and (org-element-map b \\='latex-snippet \\='identity nil t) b))
+  (org-element-map tree \\='bold
+   (lambda (b)
+     (and (org-element-map b \\='latex-snippet \\='identity nil t) b))
    nil nil nil t)"
   ;; Ensure TYPES and NO-RECURSION are a list, even of one element.
   (unless (listp types) (setq types (list types)))
diff --git a/lisp/org/org-entities.el b/lisp/org/org-entities.el
index f8f218f..89d6b95 100644
--- a/lisp/org/org-entities.el
+++ b/lisp/org/org-entities.el
@@ -359,8 +359,8 @@ packages to be loaded, add these packages to 
`org-latex-packages-alist'."
     ("lessgtr" "\\lessgtr" t "&lessgtr;" "[less than or greater than]" "[less 
than or greater than]" "≶")
     ("lesseqgtr" "\\lesseqgtr" t "&lesseqgtr;" "[less than or equal or greater 
than or equal]" "[less than or equal or greater than or equal]" "⋚")
     ("ll" "\\ll" t  "&Lt;" "<<" "<<" "≪")
-    ("Ll" "\lll" t "&Ll;" "<<<" "<<<" "⋘")
-    ("lll" "\lll" t "&Ll;" "<<<" "<<<" "⋘")
+    ("Ll" "\\lll" t "&Ll;" "<<<" "<<<" "⋘")
+    ("lll" "\\lll" t "&Ll;" "<<<" "<<<" "⋘")
     ("gg" "\\gg" t  "&Gt;" ">>" ">>" "≫")
     ("Gg" "\\ggg" t "&Gg;" ">>>" ">>>" "⋙")
     ("ggg" "\\ggg" t "&Gg;" ">>>" ">>>" "⋙")
diff --git a/lisp/org/org-footnote.el b/lisp/org/org-footnote.el
index 0f08697..5d853e6 100644
--- a/lisp/org/org-footnote.el
+++ b/lisp/org/org-footnote.el
@@ -243,7 +243,7 @@ positions, and the definition, when inlined."
 
 This matches only pure definitions like [1] or [fn:name] at the
 beginning of a line.  It does not match references like
-\[fn:name:definition], where the footnote text is included and
+[fn:name:definition], where the footnote text is included and
 defined locally.
 
 The return value will be nil if not at a footnote definition, and
diff --git a/lisp/org/org-list.el b/lisp/org/org-list.el
index 28bed8d..c826650 100644
--- a/lisp/org/org-list.el
+++ b/lisp/org/org-list.el
@@ -230,7 +230,7 @@ This variable needs to be set before org.el is loaded.  If 
you
 need to make a change while Emacs is running, use the customize
 interface or run the following code after updating it:
 
-  \(when (featurep \\='org-element) (load \"org-element\" t t))"
+  (when (featurep \\='org-element) (load \"org-element\" t t))"
   :group 'org-plain-lists
   :version "24.1"
   :type 'boolean
@@ -620,11 +620,11 @@ point-at-bol:
 
 will get the following structure:
 
-\(\(1 0 \"- \"  nil \"[X]\" nil 97\)
- \(18 2 \"1. \"  nil nil nil 34\)
- \(34 2 \"5. \" \"5\" nil nil 55\)
- \(97 0 \"- \"  nil nil nil 131\)
- \(109 2 \"+ \" nil nil \"tag\" 131\)
+ ((1 0 \"- \"  nil \"[X]\" nil 97)
+  (18 2 \"1. \"  nil nil nil 34)
+  (34 2 \"5. \" \"5\" nil nil 55)
+  (97 0 \"- \"  nil nil nil 131)
+  (109 2 \"+ \" nil nil \"tag\" 131))
 
 Assume point is at an item."
   (save-excursion
@@ -2015,7 +2015,7 @@ previous item, plus ARGS extra arguments.
 
 FUNCTION is applied on items in reverse order.
 
-As an example, \(org-apply-on-list \(lambda \(result\) \(1+ result\)\) 0\)
+As an example, \(org-apply-on-list \(lambda \(result) \(1+ result)) 0)
 will return the number of items in the current list.
 
 Sublists of the list are skipped.  Cursor is always at the
@@ -2931,13 +2931,13 @@ For example, the following list:
 
 will be parsed as:
 
-\(ordered
-  \(nil \"first item\"
-  \(unordered
-    \(nil \"sub-item one\"\)
-    \(nil \"[CBON] sub-item two\"\)\)
-  \"more text in first item\"\)
-  \(3 \"last item\"\)\)
+ (ordered
+  (nil \"first item\"
+  (unordered
+    (nil \"sub-item one\")
+    (nil \"[CBON] sub-item two\"))
+  \"more text in first item\")
+  (3 \"last item\"))
 
 Point is left at list end."
   (defvar parse-item)                   ;FIXME: Or use `cl-labels' or `letrec'.
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index 478ad93..174e36e 100644
--- a/lisp/org/org-table.el
+++ b/lisp/org/org-table.el
@@ -440,8 +440,8 @@ available parameters."
   "Check if the table has a marking column.
 If yes remove the column and the special lines."
   (let ((special (if maybe-quoted
-                    "^[ \t]*| *\\\\?[\#!$*_^/ ] *|"
-                  "^[ \t]*| *[\#!$*_^/ ] *|"))
+                    "^[ \t]*| *\\\\?[#!$*_^/ ] *|"
+                  "^[ \t]*| *[#!$*_^/ ] *|"))
        (ignore  (if maybe-quoted
                     "^[ \t]*| *\\\\?[!$_^/] *|"
                   "^[ \t]*| *[!$_^/] *|")))
@@ -3248,7 +3248,7 @@ formulas that use a range of rows or columns, it may 
often be better
 to anchor the formula with \"I\" row markers, or to offset from the
 borders of the table using the @< @> $< $> makers."
   (let (n nmax len char (start 0))
-    (while (string-match 
"\\(address@hidden)\\(<+\\|>+\\)\\|\\(remote([^\)]+)\\)"
+    (while (string-match 
"\\(address@hidden)\\(<+\\|>+\\)\\|\\(remote([^)]+)\\)"
                         s start)
       (if (match-end 3)
          (setq start (match-end 3))
diff --git a/lisp/org/org.el b/lisp/org/org.el
index c7b64cc..7a6d6cc 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -381,7 +381,7 @@ core modules, nor modules from the CONTRIB directory).  
Just add symbols
 to the end of the list.  If the package is called org-xyz.el, then you need
 to add the symbol `xyz', and the package must have a call to:
 
-   \(provide \\='org-xyz)
+   (provide \\='org-xyz)
 
 For export specific modules, see also `org-export-backends'."
   :group 'org
@@ -465,26 +465,26 @@ need to make a change while Emacs is running, use the 
customize
 interface or run the following code, where VAL stands for the new
 value of the variable, after updating it:
 
-  \(progn
-    \(setq org-export--registered-backends
-          \(org-remove-if-not
-           \(lambda (backend)
-             \(let ((name (org-export-backend-name backend)))
-               \(or (memq name val)
-                   \(catch \\='parentp
-                     \(dolist (b val)
-                       \(and (org-export-derived-backend-p b name)
-                            \(throw \\='parentp t)))))))
+  (progn
+    (setq org-export--registered-backends
+          (org-remove-if-not
+           (lambda (backend)
+             (let ((name (org-export-backend-name backend)))
+               (or (memq name val)
+                   (catch \\='parentp
+                     (dolist (b val)
+                       (and (org-export-derived-backend-p b name)
+                            (throw \\='parentp t)))))))
            org-export--registered-backends))
-    \(let ((new-list (mapcar \\='org-export-backend-name
+    (let ((new-list (mapcar \\='org-export-backend-name
                             org-export--registered-backends)))
-      \(dolist (backend val)
-        \(cond
-         \((not (load (format \"ox-%s\" backend) t t))
-          \(message \"Problems while trying to load export back-end 
\\=`%s\\='\"
+      (dolist (backend val)
+        (cond
+         ((not (load (format \"ox-%s\" backend) t t))
+          (message \"Problems while trying to load export back-end \\=`%s\\='\"
                    backend))
-         \((not (memq backend new-list)) (push backend new-list))))
-      \(set-default \\='org-export-backends new-list)))
+         ((not (memq backend new-list)) (push backend new-list))))
+      (set-default \\='org-export-backends new-list)))
 
 Adding a back-end to this list will also pull the back-end it
 depends on, if any."
@@ -2957,7 +2957,7 @@ its value is 0.
 
 For example,
 
-  \(:days \"%dd\" :hours \"%d\" :require-hours t :minutes \":%02d\"
+   (:days \"%dd\" :hours \"%d\" :require-hours t :minutes \":%02d\"
     :require-minutes t)
 
 means durations longer than a day will be expressed in days,
@@ -2967,7 +2967,7 @@ hour).
 
 The value
 
-  \(:days \"%dd\" :minutes \"%dm\")
+  (:days \"%dd\" :minutes \"%dm\")
 
 means durations longer than a day will be expressed in days and
 minutes, and durations less than a day will be expressed entirely
@@ -3802,8 +3802,8 @@ images at the same place."
 
 (defcustom org-format-latex-header "\\documentclass{article}
 \\usepackage[usenames]{color}
-\[PACKAGES]
-\[DEFAULT-PACKAGES]
+[PACKAGES]
+[DEFAULT-PACKAGES]
 \\pagestyle{empty}             % do not remove
 % The settings below are copied from fullpage.sty
 \\setlength{\\textwidth}{\\paperwidth}
@@ -3889,7 +3889,7 @@ a string.
 
 A cell is of the format:
 
-  \( \"options\" \"package\" SNIPPET-FLAG).
+  ( \"options\" \"package\" SNIPPET-FLAG).
 
 If SNIPPET-FLAG is non-nil, the package also needs to be included
 when compiling LaTeX snippets into images for inclusion into
@@ -3917,7 +3917,7 @@ Each element is either a cell or a string.
 
 A cell is of the format:
 
-    \(\"options\" \"package\" SNIPPET-FLAG)
+    (\"options\" \"package\" SNIPPET-FLAG)
 
 SNIPPET-FLAG, when non-nil, indicates that this package is also
 needed when turning LaTeX snippets into images for inclusion into
@@ -7302,7 +7302,7 @@ Optional arguments START and END can be used to limit the 
range."
 (defconst org-goto-help
   "Browse buffer copy, to find location or copy text.%s
 RET=jump to location             C-g=quit and return to previous location
-\[Up]/[Down]=next/prev headline   TAB=cycle visibility   [/] org-occur")
+[Up]/[Down]=next/prev headline   TAB=cycle visibility   [/] org-occur")
 
 (defvar org-goto-start-pos) ; dynamically scoped parameter
 
@@ -7682,7 +7682,7 @@ command."
              (re-search-forward org-outline-regexp-bol)
              (beginning-of-line 0))
            (skip-chars-backward " \r\n")
-           (and (not (looking-back "^\*+" (line-beginning-position)))
+           (and (not (looking-back "^\\*+" (line-beginning-position)))
                 (looking-at "[ \t]+") (replace-match ""))
            (unless (eobp) (forward-char 1))
            (when (looking-at "^\\*")
@@ -11389,7 +11389,7 @@ on the system \"/address@hidden:\"."
                         (setq level (org-reduced-level
                                      (- (match-end 1) (match-beginning 1)))
                               txt (org-link-display-format (match-string 4))
-                              txt (replace-regexp-in-string "\\( 
*\[[0-9]+/?[0-9]*%?\]\\)+$" "" txt)
+                              txt (replace-regexp-in-string "\\( 
*[[0-9]+/?[0-9]*%?]\\)+$" "" txt)
                               re (format org-complex-heading-regexp-format
                                          (regexp-quote (match-string 4))))
                         (when org-refile-use-outline-path
@@ -16355,7 +16355,7 @@ While prompting, a calendar is popped up - you can also 
select the
 date with the mouse (button 1).  The calendar shows a period of three
 months.  To scroll it to other months, use the keys `>' and `<'.
 If you don't like the calendar, turn it off with
-       \(setq org-read-date-popup-calendar nil)
+       (setq org-read-date-popup-calendar nil)
 
 With optional argument TO-TIME, the date will immediately be converted
 to an internal time.
@@ -17912,7 +17912,7 @@ If EXCLUDE-TMP is non-nil, ignore temporary buffers."
           ((eq predicate 'files)
            (lambda (b) (with-current-buffer b (derived-mode-p 'org-mode))))
           ((eq predicate 'export)
-           (lambda (b) (string-match "\*Org .*Export" (buffer-name b))))
+           (lambda (b) (string-match "\\*Org .*Export" (buffer-name b))))
           ((eq predicate 'agenda)
            (lambda (b)
              (with-current-buffer b
@@ -17921,7 +17921,7 @@ If EXCLUDE-TMP is non-nil, ignore temporary buffers."
                     (member (file-truename bfn) agenda-files)))))
           (t (lambda (b) (with-current-buffer b
                            (or (derived-mode-p 'org-mode)
-                               (string-match "\*Org .*Export"
+                               (string-match "\\*Org .*Export"
                                              (buffer-name b)))))))))
     (delq nil
          (mapcar
@@ -23005,7 +23005,7 @@ no special treatment.  In particular, a simple 
\\[universal-argument] prefix \
 will just
 plainly yank the text as it is.
 
-\[1] The test checks if the first non-white line is a heading
+[1] The test checks if the first non-white line is a heading
     and if there are no other headings with fewer stars."
   (interactive "P")
   (org-yank-generic 'yank arg))
diff --git a/lisp/org/ox-html.el b/lisp/org/ox-html.el
index fc4f574..2b2d92e 100644
--- a/lisp/org/ox-html.el
+++ b/lisp/org/ox-html.el
@@ -2598,7 +2598,7 @@ Bind `org-html-standalone-image-predicate' to constrain 
paragraph
 further.  For example, to check for only captioned standalone
 images, set it to:
 
-  \(lambda (paragraph) (org-element-property :caption paragraph))"
+  (lambda (paragraph) (org-element-property :caption paragraph))"
   (let ((paragraph (case (org-element-type element)
                     (paragraph element)
                     (link (org-export-get-parent element)))))
diff --git a/lisp/org/ox-icalendar.el b/lisp/org/ox-icalendar.el
index a77eaed..3da5224 100644
--- a/lisp/org/ox-icalendar.el
+++ b/lisp/org/ox-icalendar.el
@@ -447,7 +447,7 @@ or subject for the event."
     ;; characters with literal \n.
     (replace-regexp-in-string
      "[ \t]*\n" "\\n"
-     (replace-regexp-in-string "[\\,;]" "\\\&" s)
+     (replace-regexp-in-string "[\\,;]" "\\\\\\&" s)
      nil t)))
 
 (defun org-icalendar-fold-string (s)
diff --git a/lisp/org/ox-latex.el b/lisp/org/ox-latex.el
index cea02ff..51f7b17 100644
--- a/lisp/org/ox-latex.el
+++ b/lisp/org/ox-latex.el
@@ -212,9 +212,9 @@
 If #+LATEX_CLASS is set in the buffer, use its value and the
 associated information.  Here is the structure of each cell:
 
-  \(class-name
+  (class-name
     header-string
-    \(numbered-section . unnumbered-section)
+    (numbered-section . unnumbered-section)
     ...)
 
 The header string
@@ -281,11 +281,11 @@ section string and will be replaced by the title of the 
section.
 Instead of a cons cell (numbered . unnumbered), you can also
 provide a list of 2 or 4 elements,
 
-  \(numbered-open numbered-close)
+  (numbered-open numbered-close)
 
 or
 
-  \(numbered-open numbered-close unnumbered-open unnumbered-close)
+  (numbered-open numbered-close unnumbered-open unnumbered-close)
 
 providing opening and closing strings for a LaTeX environment
 that should represent the document section.  The opening clause
@@ -591,18 +591,18 @@ The function should return the string to be exported.
 For example, the variable could be set to the following function
 in order to mimic default behavior:
 
-\(defun org-latex-format-inlinetask \(todo type priority name tags contents\)
+\(defun org-latex-format-inlinetask (todo type priority name tags contents)
 \"Format an inline task element for LaTeX export.\"
-  \(let ((full-title
-        \(concat
-         \(when todo
-            \(format \"\\\\textbf{\\\\textsf{\\\\textsc{%s}}} \" todo))
-         \(when priority (format \"\\\\framebox{\\\\#%c} \" priority))
+  (let ((full-title
+        (concat
+         (when todo
+            (format \"\\\\textbf{\\\\textsf{\\\\textsc{%s}}} \" todo))
+         (when priority (format \"\\\\framebox{\\\\#%c} \" priority))
          title
-         \(when tags
-            \(format \"\\\\hfill{}\\\\textsc{:%s:}\"
-                    \(mapconcat \\='identity tags \":\")))))
-    \(format (concat \"\\\\begin{center}\\n\"
+         (when tags
+            (format \"\\\\hfill{}\\\\textsc{:%s:}\"
+                    (mapconcat \\='identity tags \":\")))))
+    (format (concat \"\\\\begin{center}\\n\"
                    \"\\\\fbox{\\n\"
                    \"\\\\begin{minipage}[c]{.6\\\\textwidth}\\n\"
                    \"%s\\n\\n\"
@@ -626,21 +626,21 @@ listings package, and if you want to have color, the color
 package.  Just add these to `org-latex-packages-alist', for
 example using customize, or with something like:
 
-  \(require \\='ox-latex)
-  \(add-to-list \\='org-latex-packages-alist \\='(\"\" \"listings\"))
-  \(add-to-list \\='org-latex-packages-alist \\='(\"\" \"color\"))
+  (require \\='ox-latex)
+  (add-to-list \\='org-latex-packages-alist \\='(\"\" \"listings\"))
+  (add-to-list \\='org-latex-packages-alist \\='(\"\" \"color\"))
 
 Alternatively,
 
-  \(setq org-latex-listings \\='minted)
+  (setq org-latex-listings \\='minted)
 
 causes source code to be exported using the minted package as
 opposed to listings.  If you want to use minted, you need to add
 the minted package to `org-latex-packages-alist', for example
 using customize, or with
 
-  \(require \\='ox-latex)
-  \(add-to-list \\='org-latex-packages-alist \\='(\"\" \"minted\"))
+  (require \\='ox-latex)
+  (add-to-list \\='org-latex-packages-alist \\='(\"\" \"minted\"))
 
 In addition, it is necessary to install pygments
 \(http://pygments.org), and to configure the variable
@@ -689,9 +689,9 @@ These options are supplied as a comma-separated list to the
 a list containing two strings: the name of the option, and the
 value.  For example,
 
-  \(setq org-latex-listings-options
+  (setq org-latex-listings-options
     '((\"basicstyle\" \"\\\\small\")
-      \(\"keywordstyle\" \"\\\\color{black}\\\\bfseries\\\\underbar\")))
+      (\"keywordstyle\" \"\\\\color{black}\\\\bfseries\\\\underbar\")))
 
 will typeset the code in a small size font with underlined, bold
 black keywords.
@@ -736,8 +736,8 @@ These options are supplied within square brackets in
 be a list containing two strings: the name of the option, and the
 value.  For example,
 
-  \(setq org-latex-minted-options
-    '\((\"bgcolor\" \"bg\") \(\"frame\" \"lines\")))
+  (setq org-latex-minted-options
+    '((\"bgcolor\" \"bg\") (\"frame\" \"lines\")))
 
 will result in src blocks being exported with
 
@@ -757,8 +757,8 @@ options will be applied to blocks of all languages."
 It is used during export of src blocks by the listings and minted
 latex packages.  For example,
 
-  \(setq org-latex-custom-lang-environments
-     '\(\(python \"pythoncode\"\)\)\)
+  (setq org-latex-custom-lang-environments
+     '((python \"pythoncode\")))
 
 would have the effect that if org encounters begin_src python
 during latex export it will output
@@ -2876,8 +2876,8 @@ Return PDF file name or an error if it couldn't be 
produced."
        ;; Check for process failure.  Provide collected errors if
        ;; possible.
        (if (not (file-exists-p pdffile))
-           (error (concat (format "PDF file %s wasn't produced" pdffile)
-                          (when errors (concat ": " errors))))
+           (error "PDF file %s wasn't produced%s" pdffile
+                  (if errors (concat ": " errors) ""))
          ;; Else remove log files, when specified, and signal end of
          ;; process to user, along with any error encountered.
          (when (and (not snippet) org-latex-remove-logfiles)
diff --git a/lisp/org/ox-man.el b/lisp/org/ox-man.el
index 8b4ddc7..09ad186 100644
--- a/lisp/org/ox-man.el
+++ b/lisp/org/ox-man.el
@@ -206,8 +206,8 @@ in this list - but it does not hurt if it is present."
 It is used during export of src blocks by the listings and
 man packages.  For example,
 
-  \(setq org-man-custom-lang-environments
-     '\(\(python \"pythoncode\"\)\)\)
+  (setq org-man-custom-lang-environments
+     '((python \"pythoncode\")))
 
 would have the effect that if org encounters begin_src python
 during man export."
@@ -1219,8 +1219,8 @@ Return PDF file name or an error if it couldn't be 
produced."
        ;; Check for process failure.  Provide collected errors if
        ;; possible.
        (if (not (file-exists-p pdffile))
-           (error (concat (format "PDF file %s wasn't produced" pdffile)
-                          (when errors (concat ": " errors))))
+           (error "PDF file %s wasn't produced%s" pdffile
+                  (if errors (concat ": " errors) ""))
          ;; Else remove log files, when specified, and signal end of
          ;; process to user, along with any error encountered.
          (when org-man-remove-logfiles
diff --git a/lisp/org/ox-odt.el b/lisp/org/ox-odt.el
index a028142..9abda33 100644
--- a/lisp/org/ox-odt.el
+++ b/lisp/org/ox-odt.el
@@ -231,13 +231,13 @@ standard Emacs.")
 (defvar org-odt-automatic-styles '()
   "Registry of automatic styles for various OBJECT-TYPEs.
 The variable has the following form:
-\(\(OBJECT-TYPE-A
-  \(\(OBJECT-NAME-A.1 OBJECT-PROPS-A.1\)
-   \(OBJECT-NAME-A.2 OBJECT-PROPS-A.2\) ...\)\)
- \(OBJECT-TYPE-B
-  \(\(OBJECT-NAME-B.1 OBJECT-PROPS-B.1\)
-   \(OBJECT-NAME-B.2 OBJECT-PROPS-B.2\) ...\)\)
- ...\).
+ ((OBJECT-TYPE-A
+   ((OBJECT-NAME-A.1 OBJECT-PROPS-A.1)
+    (OBJECT-NAME-A.2 OBJECT-PROPS-A.2) ...))
+  (OBJECT-TYPE-B
+   ((OBJECT-NAME-B.1 OBJECT-PROPS-B.1)
+    (OBJECT-NAME-B.2 OBJECT-PROPS-B.2) ...))
+  ...).
 
 OBJECT-TYPEs could be \"Section\", \"Table\", \"Figure\" etc.
 OBJECT-PROPS is (typically) a plist created by passing
@@ -292,7 +292,7 @@ according to the default face identified by the 
`htmlfontify'.")
 
 This is an alist where each element is of the form:
 
-  \(STYLE-NAME ATTACH-FMT REF-MODE REF-FMT)
+  (STYLE-NAME ATTACH-FMT REF-MODE REF-FMT)
 
 ATTACH-FMT controls how labels and captions are attached to an
 entity.  It may contain following specifiers - %e and %c.  %e is
@@ -319,7 +319,7 @@ See also `org-odt-format-label'.")
 
 This is a list where each entry is of the form:
 
-  \(CATEGORY-HANDLE OD-VARIABLE LABEL-STYLE CATEGORY-NAME ENUMERATOR-PREDICATE)
+  (CATEGORY-HANDLE OD-VARIABLE LABEL-STYLE CATEGORY-NAME ENUMERATOR-PREDICATE)
 
 CATEGORY_HANDLE identifies the captionable entity in question.
 
@@ -670,11 +670,11 @@ The default value simply returns the value of CONTENTS."
   "Function to format headline text.
 
 This function will be called with 5 arguments:
-TODO      the todo keyword \(string or nil\).
-TODO-TYPE the type of todo \(symbol: `todo', `done', nil\)
-PRIORITY  the priority of the headline \(integer or nil\)
-TEXT      the main headline text \(string\).
-TAGS      the tags string, separated with colons \(string or nil\).
+TODO      the todo keyword (string or nil).
+TODO-TYPE the type of todo (symbol: `todo', `done', nil)
+PRIORITY  the priority of the headline (integer or nil)
+TEXT      the main headline text (string).
+TAGS      the tags string, separated with colons (string or nil).
 
 The function result will be used as headline text."
   :group 'org-export-odt
@@ -852,11 +852,11 @@ ON-OR-OFF                 := t | nil
 For example, with the following configuration
 
 \(setq org-odt-table-styles
-      '\(\(\"TableWithHeaderRowsAndColumns\" \"Custom\"
-         \(\(use-first-row-styles . t\)
-          \(use-first-column-styles . t\)\)\)
-        \(\"TableWithHeaderColumns\" \"Custom\"
-         \(\(use-first-column-styles . t\)\)\)\)\)
+      '((\"TableWithHeaderRowsAndColumns\" \"Custom\"
+         ((use-first-row-styles . t)
+          (use-first-column-styles . t)))
+        (\"TableWithHeaderColumns\" \"Custom\"
+         ((use-first-column-styles . t)))))
 
 1. A table associated with \"TableWithHeaderRowsAndColumns\"
    style will use the following table-cell styles -
@@ -4089,8 +4089,8 @@ contextual information."
                                         nil standard-output nil (cdr cmd)))))
                    (or (zerop exitcode)
                        (error (concat "Unable to create OpenDocument file."
-                                      (format "  Zip failed with error (%s)"
-                                              err-string)))))
+                                      "  Zip failed with error (%s)")
+                              err-string)))
                  cmds)))
             ;; Move the zip file from temporary work directory to
             ;; user-mandated location.
diff --git a/lisp/org/ox-publish.el b/lisp/org/ox-publish.el
index 08762fb..52d925a 100644
--- a/lisp/org/ox-publish.el
+++ b/lisp/org/ox-publish.el
@@ -69,12 +69,12 @@ CDR of each element is in one of the following forms:
    alternating keys and values, specifying parameters for the
    publishing process.
 
-     \(:property value :property value ... )
+     (:property value :property value ... )
 
 2. A meta-project definition, specifying of a list of
    sub-projects:
 
-     \(:components (\"project-1\" \"project-2\" ...))
+     (:components (\"project-1\" \"project-2\" ...))
 
 When the CDR of an element of org-publish-project-alist is in
 this second form, the elements of the list after `:components'
diff --git a/lisp/org/ox-texinfo.el b/lisp/org/ox-texinfo.el
index d5e650a..67daf6f 100644
--- a/lisp/org/ox-texinfo.el
+++ b/lisp/org/ox-texinfo.el
@@ -137,9 +137,9 @@ If nil it will default to `buffer-file-coding-system'."
 If #+TEXINFO_CLASS is set in the buffer, use its value and the
 associated information.  Here is the structure of each cell:
 
-  \(class-name
+  (class-name
     header-string
-    \(numbered-section . unnumbered-section)
+    (numbered-section . unnumbered-section)
     ...)
 
 
@@ -210,14 +210,14 @@ order to reproduce the default set-up:
 
 \(defun org-texinfo-format-headline (todo todo-type priority text tags)
   \"Default format function for a headline.\"
-  \(concat (when todo
-            \(format \"\\\\textbf{\\\\textsc{\\\\textsf{%s}}} \" todo))
-         \(when priority
-            \(format \"\\\\framebox{\\\\#%c} \" priority))
+  (concat (when todo
+            (format \"\\\\textbf{\\\\textsc{\\\\textsf{%s}}} \" todo))
+         (when priority
+            (format \"\\\\framebox{\\\\#%c} \" priority))
          text
-         \(when tags
-            \(format \"\\\\hfill{}\\\\textsc{%s}\"
-              \(mapconcat \\='identity tags \":\"))))"
+         (when tags
+            (format \"\\\\hfill{}\\\\textsc{%s}\"
+              (mapconcat \\='identity tags \":\"))))"
   :group 'org-export-texinfo
   :type 'function)
 
@@ -337,18 +337,18 @@ The function should return the string to be exported.
 For example, the variable could be set to the following function
 in order to mimic default behavior:
 
-\(defun org-texinfo-format-inlinetask \(todo type priority name tags contents\)
+\(defun org-texinfo-format-inlinetask (todo type priority name tags contents)
 \"Format an inline task element for Texinfo export.\"
-  \(let ((full-title
-        \(concat
-         \(when todo
-            \(format \"@strong{%s} \" todo))
-         \(when priority (format \"#%c \" priority))
+  (let ((full-title
+        (concat
+         (when todo
+            (format \"@strong{%s} \" todo))
+         (when priority (format \"#%c \" priority))
          title
-         \(when tags
-            \(format \":%s:\"
-                    \(mapconcat \\='identity tags \":\")))))
-    \(format (concat \"@center %s\n\n\"
+         (when tags
+            (format \":%s:\"
+                    (mapconcat \\='identity tags \":\")))))
+    (format (concat \"@center %s\n\n\"
                    \"%s\"
                     \"\n\"))
            full-title contents))"
@@ -1534,8 +1534,8 @@ Return INFO file name or an error if it couldn't be 
produced."
        ;; Check for process failure.  Provide collected errors if
        ;; possible.
        (if (not (file-exists-p infofile))
-           (error (concat (format "INFO file %s wasn't produced" infofile)
-                          (when errors (concat ": " errors))))
+           (error "INFO file %s wasn't produced%s" infofile
+                  (if errors (concat ": " errors) ""))
          ;; Else remove log files, when specified, and signal end of
          ;; process to user, along with any error encountered.
          (when org-texinfo-remove-logfiles
@@ -1578,7 +1578,7 @@ none."
                  (re-search-forward "requires a sectioning" nil t))
            (setq errors (concat errors " [invalid section command]")))
          (when (save-excursion
-                 (re-search-forward "\\[unexpected\]" nil t))
+                 (re-search-forward "\\[unexpected\ ]" nil t))
            (setq errors (concat errors " [unexpected error]")))
          (when (save-excursion
                  (re-search-forward "misplaced " nil t))
diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index 4e3e0ef..2fa0386 100644
--- a/lisp/org/ox.el
+++ b/lisp/org/ox.el
@@ -777,7 +777,7 @@ is nil.  You can also allow them through local buffer 
variables."
 
 This variable allows to provide shortcuts for export snippets.
 
-For example, with a value of '\(\(\"h\" . \"html\"\)\), the
+For example, with a value of \((\"h\" . \"html\")), the
 HTML back-end will recognize the contents of \"@@h:<b>@@\" as
 HTML code while every other back-end will ignore it."
   :group 'org-export-general
@@ -849,7 +849,7 @@ output is restricted to body only, \"s\" when it is 
restricted to
 the current subtree, \"v\" when only visible elements are
 considered for export, \"f\" when publishing functions should be
 passed the FORCE argument and \"a\" when the export should be
-asynchronous).  Also, \[?] allows to switch back to standard
+asynchronous).  Also, [?] allows to switch back to standard
 mode."
   :group 'org-export-general
   :version "24.4"
@@ -1095,19 +1095,19 @@ keywords are understood:
       or
 
        (?l \"Export to LaTeX\"
-           \(?p \"As PDF file\" org-latex-export-to-pdf)
-           \(?o \"As PDF file and open\"
-               \(lambda (a s v b)
-                 \(if a (org-latex-export-to-pdf t s v b)
-                   \(org-open-file
-                    \(org-latex-export-to-pdf nil s v b)))))))
+           (?p \"As PDF file\" org-latex-export-to-pdf)
+           (?o \"As PDF file and open\"
+               (lambda (a s v b)
+                 (if a (org-latex-export-to-pdf t s v b)
+                   (org-open-file
+                    (org-latex-export-to-pdf nil s v b)))))))
 
       or the following, which will be added to the previous
       sub-menu,
 
        (?l 1
-          \((?B \"As TEX buffer (Beamer)\" org-beamer-export-as-latex)
-           \(?P \"As PDF file (Beamer)\" org-beamer-export-to-pdf)))
+          ((?B \"As TEX buffer (Beamer)\" org-beamer-export-as-latex)
+           (?P \"As PDF file (Beamer)\" org-beamer-export-to-pdf)))
 
   :options-alist
 
@@ -1180,12 +1180,12 @@ keywords are understood:
 As an example, here is how one could define \"my-latex\" back-end
 as a variant of `latex' back-end with a custom template function:
 
-  \(org-export-define-derived-backend \\='my-latex \\='latex
+  (org-export-define-derived-backend \\='my-latex \\='latex
      :translate-alist \\='((template . my-latex-template-fun)))
 
 The back-end could then be called with, for example:
 
-  \(org-export-to-buffer \\='my-latex \"*Test my-latex*\")"
+  (org-export-to-buffer \\='my-latex \"*Test my-latex*\")"
   (declare (indent 2))
   (let (blocks filters menu-entry options transcoders contents)
     (while (keywordp (car body))
@@ -1962,7 +1962,7 @@ DATA is the parse tree.  OPTIONS is the plist holding 
export
 options.
 
 Return an alist whose key is a headline and value is its
-associated numbering \(in the shape of a list of numbers\) or nil
+associated numbering \(in the shape of a list of numbers) or nil
 for a footnotes section."
   (let ((numbering (make-vector org-export-max-depth 0)))
     (org-element-map data 'headline
@@ -3314,7 +3314,7 @@ lines, include only those lines.
 Optional argument IND, when non-nil, is an integer specifying the
 global indentation of returned contents.  Since its purpose is to
 allow an included file to stay in the same environment it was
-created \(i.e. a list item), it doesn't apply past the first
+created \(i.e., a list item), it doesn't apply past the first
 headline encountered.
 
 Optional argument MINLEVEL, when non-nil, is an integer
@@ -3893,7 +3893,7 @@ PATH is the link path.  DESC is its description."
 Optional argument is a set of RULES defining inline images.  It
 is an alist where associations have the following shape:
 
-  \(TYPE . REGEXP)
+  (TYPE . REGEXP)
 
 Applying a rule means apply REGEXP against LINK's path when its
 type is TYPE.  The function will return a non-nil value if any of
@@ -3952,7 +3952,7 @@ Return value can be an object, an element, or nil:
 - If LINK path matches a target object (i.e. <<path>>) return it.
 
 - If LINK path exactly matches the name affiliated keyword
-  \(i.e. #+NAME: path) of an element, return that element.
+  (i.e. #+NAME: path) of an element, return that element.
 
 - If LINK path exactly matches any headline name, return that
   element.  If more than one headline share that name, priority
@@ -5586,10 +5586,10 @@ no argument.  It is always called within the current 
process,
 from BUFFER, with point at its beginning.  Export back-ends can
 use it to set a major mode there, e.g,
 
-  \(defun org-latex-export-as-latex
-    \(&optional async subtreep visible-only body-only ext-plist)
-    \(interactive)
-    \(org-export-to-buffer \\='latex \"*Org LATEX Export*\"
+  (defun org-latex-export-as-latex
+    (&optional async subtreep visible-only body-only ext-plist)
+    (interactive)
+    (org-export-to-buffer \\='latex \"*Org LATEX Export*\"
       async subtreep visible-only body-only ext-plist (lambda () 
(LaTeX-mode))))
 
 This function returns BUFFER."
@@ -5646,13 +5646,13 @@ argument and happens asynchronously when ASYNC is 
non-nil.  It
 has to return a file name, or nil.  Export back-ends can use this
 to send the output file through additional processing, e.g,
 
-  \(defun org-latex-export-to-latex
-    \(&optional async subtreep visible-only body-only ext-plist)
-    \(interactive)
-    \(let ((outfile (org-export-output-file-name \".tex\" subtreep)))
-      \(org-export-to-file \\='latex outfile
+  (defun org-latex-export-to-latex
+    (&optional async subtreep visible-only body-only ext-plist)
+    (interactive)
+    (let ((outfile (org-export-output-file-name \".tex\" subtreep)))
+      (org-export-to-file \\='latex outfile
         async subtreep visible-only body-only ext-plist
-        \(lambda (file) (org-latex-compile file)))
+        (lambda (file) (org-latex-compile file)))
 
 The function returns either a file name returned by POST-PROCESS,
 or FILE."
@@ -5985,7 +5985,7 @@ is nil when this menu hasn't been selected yet.
 
 EXPERTP, when non-nil, triggers expert UI.  In that case, no help
 buffer is provided, but indications about currently active
-options are given in the prompt.  Moreover, \[?] allows to switch
+options are given in the prompt.  Moreover, [?] allows to switch
 back to standard interface."
   (let* ((fontify-key
          (lambda (key &optional access-key)
@@ -6037,8 +6037,8 @@ back to standard interface."
            (concat
             ;; Options are hard-coded.
             (format "[%s] Body only:    %s           [%s] Visible only:     %s
-\[%s] Export scope: %s       [%s] Force publishing: %s
-\[%s] Async export: %s\n\n"
+[%s] Export scope: %s       [%s] Force publishing: %s
+[%s] Async export: %s\n\n"
                     (funcall fontify-key "C-b" t)
                     (funcall fontify-value
                              (if (memq 'body options) "On " "Off"))
diff --git a/lisp/play/doctor.el b/lisp/play/doctor.el
index 3da7267..3c9d87f 100644
--- a/lisp/play/doctor.el
+++ b/lisp/play/doctor.el
@@ -989,7 +989,7 @@ Otherwise call the Doctor to parse preceding sentence."
 Put dialogue in buffer."
   (let (a
        (prompt (concat (doctor-make-string x)
-                       " what \?  "))
+                       " what ?  "))
        retval)
     (while (not retval)
           (while (not a)
diff --git a/lisp/play/gametree.el b/lisp/play/gametree.el
index 2c68c40..a07a24d 100644
--- a/lisp/play/gametree.el
+++ b/lisp/play/gametree.el
@@ -324,7 +324,7 @@ This value is simply the outline heading level of the 
current line."
 (defun gametree-hack-file-layout ()
   (save-excursion
     (goto-char (point-min))
-    (if (looking-at "[^\n]*-\*-[^\n]*gametree-local-layout: \\([^;\n]*\\);")
+    (if (looking-at "[^\n]*-*-[^\n]*gametree-local-layout: \\([^;\n]*\\);")
         (progn
           (goto-char (match-beginning 1))
           (delete-region (point) (match-end 1))
diff --git a/lisp/play/tetris.el b/lisp/play/tetris.el
index 586d1d5..0f3b758 100644
--- a/lisp/play/tetris.el
+++ b/lisp/play/tetris.el
@@ -265,7 +265,7 @@ each one of its four blocks.")
     (define-key map [left]     'tetris-move-left)
     (define-key map [right]    'tetris-move-right)
     (define-key map [up]       'tetris-rotate-prev)
-    (define-key map [down]     'tetris-rotate-next)
+    (define-key map [down]     'tetris-move-down)
     map))
 
 (defvar tetris-null-map
@@ -524,6 +524,16 @@ Drops the shape one square, testing for collision."
        (setq tetris-pos-x (1- tetris-pos-x)))
     (tetris-draw-shape)))
 
+(defun tetris-move-down ()
+  "Move the shape one square to the bottom."
+  (interactive)
+  (unless tetris-paused
+    (tetris-erase-shape)
+    (setq tetris-pos-y (1+ tetris-pos-y))
+    (if (tetris-test-shape)
+       (setq tetris-pos-y (1- tetris-pos-y)))
+    (tetris-draw-shape)))
+
 (defun tetris-rotate-prev ()
   "Rotate the shape clockwise."
   (interactive)
diff --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el
index 452f3b9..529b691 100644
--- a/lisp/progmodes/ada-mode.el
+++ b/lisp/progmodes/ada-mode.el
@@ -2682,7 +2682,7 @@ if INITIAL-POS is non-nil, moves point to INITIAL-POS 
before calculation."
         ;; "then" has to be included in the case of "select...then abort"
         ;; statements, since (goto-stmt-start) at the beginning of
         ;; the current function would leave the cursor on that position
-        ((looking-at "\\(\\(els\\)?if\\>\\)\\|then abort\\\>")
+        ((looking-at "\\(\\(els\\)?if\\>\\)\\|then abort\\>")
          (ada-get-indent-if orgpoint))
         ;;
         ((looking-at "case\\>")
@@ -5290,7 +5290,7 @@ for `ada-procedure-start-regexp'."
            (setq functype (buffer-substring (point)
                                             (progn
                                               (skip-chars-forward
-                                               "a-zA-Z0-9_\.")
+                                               "a-zA-Z0-9_.")
                                               (point))))))
       ;; look for next non WS
       (cond
diff --git a/lisp/progmodes/ada-xref.el b/lisp/progmodes/ada-xref.el
index 816de12..0ea33c1 100644
--- a/lisp/progmodes/ada-xref.el
+++ b/lisp/progmodes/ada-xref.el
@@ -420,7 +420,7 @@ As a special case, ${current} is replaced with the name of 
the current
 file, minus extension but with directory, and ${full_current} is
 replaced by the name including the extension."
 
-  (while (string-match "\\(-[^-\$IO]*[IO]\\)?\${\\([^}]+\\)}" cmd-string)
+  (while (string-match "\\(-[^-$IO]*[IO]\\)?${\\([^}]+\\)}" cmd-string)
     (let (value
          (name (match-string 2 cmd-string)))
       (cond
@@ -1724,7 +1724,7 @@ Information is extracted from the ali file."
                (concat "^"    (ada-line-of identlist)
                        "."    (ada-column-of identlist)
                        "[ *]" (ada-name-of identlist)
-                       "[{\[\(<= ]?\\(.*\\)$") bound t))
+                       "[{[(<= ]?\\(.*\\)$") bound t))
          (if declaration-found
              (ada-set-on-declaration identlist t))
          ))
@@ -1756,7 +1756,7 @@ Information is extracted from the ali file."
                   (concat
                    "^[0-9]+.[0-9]+[ *]"
                    (ada-name-of identlist)
-                   "[ <{=\(\[]\\(.\\|\n\\.\\)*\\<"
+                   "[ <{=([]\\(.\\|\n\\.\\)*\\<"
                    (ada-line-of identlist)
                    "[^0-9]"
                    (ada-column-of identlist) "\\>")
@@ -1779,7 +1779,7 @@ Information is extracted from the ali file."
              (forward-line -1)
              (beginning-of-line))
            (unless (looking-at (concat "[0-9]+.[0-9]+[ *]"
-                                       (ada-name-of identlist) "[ <{=\(\[]"))
+                                       (ada-name-of identlist) "[ <{=([]"))
              (setq declaration-found nil))))
 
       ;; Still no success ! The ali file must be too old, and we need to
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el
index d59948e..9cac400 100644
--- a/lisp/progmodes/antlr-mode.el
+++ b/lisp/progmodes/antlr-mode.el
@@ -171,7 +171,7 @@
             (let ((buffer-undo-list t) (inhibit-read-only t)
                   ,@(unless (featurep 'xemacs)
                       '((inhibit-point-motion-hooks t) deactivate-mark))
-                  before-change-functions after-change-functions
+                  (inhibit-modification-hooks t)
                   buffer-file-name buffer-file-truename)
               ,@body)
           (and (not ,modified) (buffer-modified-p)
@@ -225,7 +225,7 @@ variable list\" near the end of the file, see
     (c++-mode "C++" "\"Cpp\"" "Cpp"))
   "List of ANTLR's supported languages.
 Each element in this list looks like
-  \(MAJOR-MODE MODELINE-STRING OPTION-VALUE...)
+  (MAJOR-MODE MODELINE-STRING OPTION-VALUE...)
 
 MAJOR-MODE, the major mode of the code in the grammar's actions, is the
 value of `antlr-language' if the first group in the string matched by
@@ -243,7 +243,7 @@ also displayed in the mode line next to \"Antlr\"."
 (defcustom antlr-language-limit-n-regexp
   '(8192 . "language[ \t]*=[ \t]*\\(\"?[A-Z][A-Za-z_]*\"?\\)")
   "Used to set a reasonable value for `antlr-language'.
-Looks like \(LIMIT \. REGEXP).  Search for REGEXP from the beginning of
+Looks like \(LIMIT . REGEXP).  Search for REGEXP from the beginning of
 the buffer to LIMIT and use the first group in the matched string to set
 the language according to `antlr-language-alist'."
   :group 'antlr
@@ -620,7 +620,7 @@ COUNT starts with 1.  GEN-SEP is used to separate long 
variable values."
     (c++-mode ("%sTokenTypes.hpp") ("%s.cpp" "%s.hpp")))
   "Language dependent formats which specify generated files.
 Each element in this list looks looks like
-  \(MAJOR-MODE (VOCAB-FILE-FORMAT...) (CLASS-FILE-FORMAT...)).
+  (MAJOR-MODE (VOCAB-FILE-FORMAT...) (CLASS-FILE-FORMAT...)).
 
 The element whose MAJOR-MODE is equal to `antlr-language' is used to
 specify the generated files which are language dependent.  See variable
@@ -779,7 +779,7 @@ fontification, see `antlr-font-lock-keywords-alist'.
 
 While calculating the decoration level for actions, `major-mode' is
 bound to `antlr-language'.  For example, with value
-  \((java-mode \. 2) (c++-mode \. 0))
+  ((java-mode . 2) (c++-mode . 0))
 Java actions are fontified with level 2 and C++ actions are not
 fontified at all."
   :group 'antlr
@@ -817,7 +817,7 @@ Do not change the value of this constant.")
      c++-font-lock-keywords-3))
   "List of font-lock keywords for actions in the grammar.
 Each element in this list looks like
-  \(MAJOR-MODE KEYWORD...)
+  (MAJOR-MODE KEYWORD...)
 
 If `antlr-language' is equal to MAJOR-MODE, the KEYWORDs are the
 font-lock keywords according to `font-lock-defaults' used for the code
@@ -1570,8 +1570,8 @@ Inserting an option with this command works as follows:
  4. Ask user for confirmation if the given OPTION does not seem to be a
     valid option to insert into the current file.
  5. Find a correct position to insert the option.
- 6. Depending on the option, insert it the following way \(inserting an
-    option also means inserting the option section if necessary\):
+ 6. Depending on the option, insert it the following way (inserting an
+    option also means inserting the option section if necessary):
      - Insert the option and let user insert the value at point.
      - Read a value (with completion) from the minibuffer, using a
        previous value as initial contents, and insert option with value.
@@ -1687,9 +1687,9 @@ Return \(LEVEL OPTION LOCATION)."
 (defun antlr-option-kind (requested)
   "Return level and location for option to insert near point.
 Call function `antlr-option-level' with argument REQUESTED.  If the
-result is nil, return \(REQUESTED \. error).  If the result has the
-non-nil value LEVEL, return \(LEVEL \. LOCATION) where LOCATION looks
-like \(AREA \. PLACE), see `antlr-option-location'."
+result is nil, return \(REQUESTED . error).  If the result has the
+non-nil value LEVEL, return \(LEVEL . LOCATION) where LOCATION looks
+like \(AREA . PLACE), see `antlr-option-location'."
   (save-excursion
     (save-restriction
       (let ((min0 (point-min))         ; before `widen'!
@@ -1845,7 +1845,7 @@ WARNING: this may alter `match-data'."
 (defun antlr-insert-option-do (level option old area pos)
   "Insert option into buffer at position POS.
 Insert option of level LEVEL and name OPTION.  If OLD is non-nil, an
-options area is already exists.  If OLD looks like \(BEG \. END), the
+options area is already exists.  If OLD looks like \(BEG . END), the
 option already exists.  Then, BEG is the start position of the option
 value, the position of the `=' or nil, and END is the end position of
 the option value or nil.
@@ -2104,7 +2104,7 @@ Called in PHASE `before-input', see 
`antlr-options-alists'."
 
 (defun antlr-file-dependencies ()
   "Return dependencies for grammar in current buffer.
-The result looks like \(FILE \(CLASSES \. SUPERS) VOCABS \. LANGUAGE)
+The result looks like \(FILE \(CLASSES . SUPERS) VOCABS . LANGUAGE)
   where CLASSES = ((CLASS . CLASS-EVOCAB) ...),
         SUPERS  = ((SUPER . USE-EVOCAB-P) ...), and
         VOCABS  = ((EVOCAB ...) . (IVOCAB ...))
@@ -2168,8 +2168,8 @@ its export vocabulary is used as an import vocabulary."
 
 (defun antlr-directory-dependencies (dirname)
   "Return dependencies for all grammar files in directory DIRNAME.
-The result looks like \((CLASS-SPEC ...) \. \(FILE-DEP ...))
-  where CLASS-SPEC = (CLASS (FILE \. EVOCAB) ...).
+The result looks like \((CLASS-SPEC ...) . \(FILE-DEP ...))
+  where CLASS-SPEC = (CLASS (FILE . EVOCAB) ...).
 
 FILE-DEP are the dependencies for each grammar file in DIRNAME, see
 `antlr-file-dependencies'.  For each grammar class CLASS, FILE is a
@@ -2220,7 +2220,7 @@ The result looks like \(OPTION WITH-UNKNOWN GLIB ...).  
OPTION is the
 complete \"-glib\" option.  WITH-UNKNOWN is t if there is none or more
 than one grammar file for at least one super grammar.
 
-Each GLIB looks like \(GRAMMAR-FILE \. EVOCAB).  GRAMMAR-FILE is a file
+Each GLIB looks like \(GRAMMAR-FILE . EVOCAB).  GRAMMAR-FILE is a file
 in which a super-grammar is defined.  EVOCAB is the value of the export
 vocabulary of the super-grammar or nil if it is not needed."
   ;; If the superclass is defined in the same file, that file will be included
diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el
index b0c4a64..1e3cb8e 100644
--- a/lisp/progmodes/cc-align.el
+++ b/lisp/progmodes/cc-align.el
@@ -1075,7 +1075,7 @@ Works with: brace-list-entry, brace-entry-open, statement,
 arglist-cont."
   (save-excursion
     (goto-char (c-langelem-pos langelem))
-    (when (looking-at "\\s\(")
+    (when (looking-at "\\s(")
       (if (c-go-up-list-backward)
          (let ((pos (point)))
            (back-to-indentation)
@@ -1093,24 +1093,24 @@ v beg of preceding constr      v beg of preceding constr
 const char msg[] =             if (!running)
   \"Some text.\";               error(\"Not running!\");
 
-#define X(A, B)  \           #define X(A, B)    \
-do {             \    <->      do {             \    <- c-lineup-cpp-define
-  printf (A, B); \               printf (A, B); \
+#define X(A, B)  \\           #define X(A, B)    \\
+do {             \\    <->      do {             \\    <- c-lineup-cpp-define
+  printf (A, B); \\               printf (A, B); \\
 } while (0)                    } while (0)
 
 If `c-syntactic-indentation-in-macros' is non-nil, the function
 returns the relative indentation to the macro start line to allow
 accumulation with other offsets.  E.g. in the following cases,
 cpp-define-intro is combined with the statement-block-intro that comes
-from the \"do {\" that hangs on the \"#define\" line:
+from the `do {' that hangs on the `#define' line:
 
                              int dribble() {
 const char msg[] =             if (!running)
   \"Some text.\";               error(\"Not running!\");
 
-#define X(A, B) do { \       #define X(A, B) do { \
-  printf (A, B);     \  <->      printf (A, B);   \  <- c-lineup-cpp-define
-  this->refs++;      \           this->refs++;    \
+#define X(A, B) do { \\       #define X(A, B) do { \\
+  printf (A, B);     \\  <->      printf (A, B);   \\  <- c-lineup-cpp-define
+  this->refs++;      \\           this->refs++;    \\
 } while (0)             <->    } while (0)           <- c-lineup-cpp-define
 
 The relative indentation returned by `c-lineup-cpp-define' is zero and
diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el
index 337fdc8..077a18c 100644
--- a/lisp/progmodes/cc-awk.el
+++ b/lisp/progmodes/cc-awk.el
@@ -215,7 +215,7 @@
 (defconst c-awk-neutrals*-re
   (concat "\\(" c-awk-neutral-re "\\)*"))
 ;;   A (possibly empty) string of neutral characters (or character pairs).
-(defconst c-awk-var-num-ket-re "[]\)0-9a-zA-Z_$.\x80-\xff]+")
+(defconst c-awk-var-num-ket-re "[])0-9a-zA-Z_$.\x80-\xff]+")
 ;;   Matches a char which is a constituent of a variable or number, or a ket
 ;; (i.e. closing bracKET), round or square.  Assume that all characters \x80 to
 ;; \xff are "letters".
@@ -227,7 +227,7 @@
 ;; will only work when there won't be a preceding " or / before the sought /
 ;; to foul things up.
 (defconst c-awk-non-arith-op-bra-re
-  "[[\({&=:!><,?;'~|]")
+  "[[({&=:!><,?;'~|]")
 ;;   Matches an opening BRAcket (of any sort), or any operator character
 ;; apart from +,-,/,*,%.  For the purpose at hand (detecting a / which is a
 ;; regexp bracket) these arith ops are unnecessary and a pain, because of "++"
@@ -266,7 +266,7 @@
 ;; Matches optional whitespace followed by a "/" with string syntax (a matched
 ;; regexp delimiter).
 (defconst c-awk-space*-unclosed-regexp-/-re
-  (concat c-awk-escaped-nls*-with-space* "\\s\|"))
+  (concat c-awk-escaped-nls*-with-space* "\\s|"))
 ;; Matches optional whitespace followed by a "/" with string fence syntax (an
 ;; unmatched regexp delimiter).
 
diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index 0e249bd..32ce8c6 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -428,7 +428,7 @@ the function `delete-forward-p' is defined and returns 
non-nil, it
 deletes forward.  Otherwise it deletes backward.
 
 Note: This is the way in XEmacs to choose the correct action for the
-\[delete] key, whichever key that means.  Other flavors don't use this
+[delete] key, whichever key that means.  Other flavors don't use this
 function to control that."
   (interactive "*P")
   (if (and (fboundp 'delete-forward-p)
@@ -445,7 +445,7 @@ forward using `c-hungry-delete-forward'.  Otherwise it 
deletes
 backward using `c-hungry-backspace'.
 
 Note: This is the way in XEmacs to choose the correct action for the
-\[delete] key, whichever key that means.  Other flavors don't use this
+[delete] key, whichever key that means.  Other flavors don't use this
 function to control that."
   (interactive)
   (if (and (fboundp 'delete-forward-p)
@@ -1143,9 +1143,9 @@ numeric argument is supplied, or the point is inside a 
literal."
                           (eq (char-before) ?<))
                         (progn
                           (backward-char)
-                          (looking-at "\\s\("))))
+                          (looking-at "\\s("))))
                    (and (eq (char-after) ?<)
-                        (not (looking-at "\\s\("))
+                        (not (looking-at "\\s("))
                         (progn (c-backward-syntactic-ws)
                                (c-simple-skip-symbol-backward))
                         (or (looking-at c-opt-<>-sexp-key)
@@ -1380,13 +1380,13 @@ No indentation or other \"electric\" behavior is 
performed."
                ;; be the return type of a function, or the like.  Exclude
                ;; this case.
                (c-syntactic-re-search-forward
-                (concat "[;=\(\[{]\\|\\("
+                (concat "[;=([{]\\|\\("
                         c-opt-block-decls-with-vars-key
                         "\\)")
                 eo-block t t t)
                (match-beginning 1)     ; Is there a "struct" etc., somewhere?
                (not (eq (char-before) ?_))
-               (c-syntactic-re-search-forward "[;=\(\[{]" eo-block t t t)
+               (c-syntactic-re-search-forward "[;=([{]" eo-block t t t)
                (eq (char-before) ?\{)
                bod)))))
 
@@ -4455,7 +4455,7 @@ is in situations like the following:
 
 char description[] = \"\\
 A very long description of something that you want to fill to make
-nicely formatted output.\"\;
+nicely formatted output.\";
 
 If point is in any other situation, i.e. in normal code, do nothing.
 
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index 0422ca0..6bd5815 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -500,10 +500,10 @@ even if the user undoes the command which set them.
 
 This macro should ALWAYS be placed around \"temporary\" internal buffer
 changes \(like adding a newline to calculate a text-property then
-deleting it again\), so that the user never sees them on his
+deleting it again), so that the user never sees them on his
 `buffer-undo-list'.  See also `c-tentative-buffer-changes'.
 
-However, any user-visible changes to the buffer \(like auto-newlines\)
+However, any user-visible changes to the buffer \(like auto-newlines)
 must not be within a `c-save-buffer-state', since the user then
 wouldn't be able to undo them.
 
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 82f0d72..6382b14 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -1060,7 +1060,7 @@ comment at the start of cc-engine.el for more info."
                          (save-excursion
                            (c-forward-sexp) (point)))
                         ;; Just gone back over some paren block?
-                        ((looking-at "\\s\(")
+                        ((looking-at "\\s(")
                          (save-excursion
                            (goto-char (1+ (c-down-list-backward
                                            before-sws-pos)))
@@ -1233,7 +1233,7 @@ The variable `c-maybe-labelp' is set to the position of 
the first `:' that
 might start a label (i.e. not part of `::' and not preceded by `?').  If a
 single `?' is found, then `c-maybe-labelp' is cleared.
 
-For AWK, a statement which is terminated by an EOL (not a \; or a }) is
+For AWK, a statement which is terminated by an EOL (not a ; or a }) is
 regarded as having a \"virtual semicolon\" immediately after the last token on
 the line.  If this virtual semicolon is _at_ from, the function recognizes it.
 
@@ -3792,8 +3792,8 @@ comment at the start of cc-engine.el for more info."
 
 (defconst c-jump-syntax-balanced
   (if (memq 'gen-string-delim c-emacs-features)
-      "\\w\\|\\s_\\|\\s\(\\|\\s\)\\|\\s\"\\|\\s|"
-    "\\w\\|\\s_\\|\\s\(\\|\\s\)\\|\\s\""))
+      "\\w\\|\\s_\\|\\s(\\|\\s)\\|\\s\"\\|\\s|"
+    "\\w\\|\\s_\\|\\s(\\|\\s)\\|\\s\""))
 
 (defconst c-jump-syntax-unbalanced
   (if (memq 'gen-string-delim c-emacs-features)
@@ -3960,7 +3960,7 @@ See `c-forward-token-2' for details."
 tokens like \"==\" as single tokens, i.e. all sequences of symbol
 characters are jumped over character by character.  This function is
 for compatibility only; it's only a wrapper over `c-forward-token-2'."
-  (let ((c-nonsymbol-token-regexp "\\s.\\|\\s\(\\|\\s\)"))
+  (let ((c-nonsymbol-token-regexp "\\s."))
     (c-forward-token-2 count balanced limit)))
 
 (defun c-backward-token-1 (&optional count balanced limit)
@@ -3968,7 +3968,7 @@ for compatibility only; it's only a wrapper over 
`c-forward-token-2'."
 tokens like \"==\" as single tokens, i.e. all sequences of symbol
 characters are jumped over character by character.  This function is
 for compatibility only; it's only a wrapper over `c-backward-token-2'."
-  (let ((c-nonsymbol-token-regexp "\\s.\\|\\s\(\\|\\s\)"))
+  (let ((c-nonsymbol-token-regexp "\\s."))
     (c-backward-token-2 count balanced limit)))
 
 
@@ -7124,7 +7124,7 @@ comment at the start of cc-engine.el for more info."
                       (setq paren-depth (1- paren-depth))
                       (forward-char)
                       t)
-                  (when (if (save-match-data (looking-at "\\s\("))
+                  (when (if (save-match-data (looking-at "\\s("))
                             (c-safe (c-forward-sexp 1) t)
                           (goto-char (match-end 1))
                           t)
@@ -7198,7 +7198,7 @@ comment at the start of cc-engine.el for more info."
 
         (setq at-decl-end
               (looking-at (cond ((eq context '<>) "[,>]")
-                                (context "[,\)]")
+                                (context "[,)]")
                                 (t "[,;]"))))
 
         ;; Now we've collected info about various characteristics of
@@ -7522,7 +7522,7 @@ comment at the start of cc-engine.el for more info."
         ;; The closing paren should follow.
         (progn
           (c-forward-syntactic-ws)
-          (looking-at "\\s\)"))
+          (looking-at "\\s)"))
 
         ;; There should be a primary expression after it.
         (let (pos)
@@ -7919,7 +7919,7 @@ comment at the start of cc-engine.el for more info."
 
          (catch 'break
            ;; Look for ": superclass-name" or "( category-name )".
-           (when (looking-at "[:\(]")
+           (when (looking-at "[:(]")
              (setq start-char (char-after))
              (forward-char)
              (c-forward-syntactic-ws)
@@ -8434,7 +8434,7 @@ comment at the start of cc-engine.el for more info."
                            ;; Check for `c-opt-block-decls-with-vars-key'
                            ;; before the first paren.
                            (c-syntactic-re-search-forward
-                            (concat "[;=\(\[{]\\|\\("
+                            (concat "[;=([{]\\|\\("
                                     c-opt-block-decls-with-vars-key
                                     "\\)")
                             lim t t t)
@@ -8442,7 +8442,7 @@ comment at the start of cc-engine.el for more info."
                            (not (eq (char-before) ?_))
                            ;; Check that the first following paren is
                            ;; the block.
-                           (c-syntactic-re-search-forward "[;=\(\[{]"
+                           (c-syntactic-re-search-forward "[;=([{]"
                                                           lim t t t)
                            (eq (char-before) ?{)))))))
            ;; The declaration doesn't have any of the
@@ -8961,7 +8961,7 @@ comment at the start of cc-engine.el for more info."
                         (> (point) closest-lim))
                  (not (bobp))
                  (progn (backward-char)
-                        (looking-at "[\]\).]\\|\\w\\|\\s_"))
+                        (looking-at "[]).]\\|\\w\\|\\s_"))
                  (c-safe (forward-char)
                          (goto-char (scan-sexps (point) -1))))
 
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index f05d6a0..ad112d7 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -575,10 +575,10 @@ stuff.  Used on level 1 and higher."
                               c-symbol-key) "\\)"
                        (concat "\\("   ; 2 + ncle + nsws + c-sym-key
                                ;; Macro with arguments - a "function".
-                               "\\(\(\\)" ; 3 + ncle + nsws + c-sym-key
+                               "\\((\\)" ; 3 + ncle + nsws + c-sym-key
                                "\\|"
                                ;; Macro without arguments - a "variable".
-                               "\\([^\(]\\|$\\)"
+                               "\\([^(]\\|$\\)"
                                "\\)"))
                       `((if (match-beginning
                              ,(+ 3 ncle-depth nsws-depth
@@ -1082,7 +1082,7 @@ casts and declarations are fontified.  Used on level 2 
and higher."
 
            ;; Search syntactically to the end of the declarator (";",
            ;; ",", a closing paren, eob etc) or to the beginning of an
-           ;; initializer or function prototype ("=" or "\\s\(").
+           ;; initializer or function prototype ("=" or "\\s(").
            ;; Note that square brackets are now not also treated as
            ;; initializers, since this broke when there were also
            ;; initializing brace lists.
@@ -1867,7 +1867,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
@@ -2112,7 +2112,7 @@ need for `c-font-lock-extra-types'.")
                  (unless (looking-at
                           (cc-eval-when-compile
                             (concat (c-lang-const c-symbol-start c++)
-                                    "\\|[*:\)\[]")))
+                                    "\\|[*:)[]")))
                    ;; There's something after the would-be type that
                    ;; can't be there, so this is a placement arglist.
                    (setq expr1-res nil)))
@@ -2122,7 +2122,7 @@ need for `c-font-lock-extra-types'.")
                  (unless (looking-at
                           (cc-eval-when-compile
                             (concat (c-lang-const c-symbol-start c++)
-                                    "\\|[*:\)\[]")))
+                                    "\\|[*:)[]")))
                    ;; There's something after the would-be type that can't
                    ;; be there, so this is an initialization expression.
                    (setq expr2-res nil))
@@ -2675,7 +2675,7 @@ need for `pike-font-lock-extra-types'.")
   nil)
 
 (defconst autodoc-font-lock-doc-comments
-  `(("@\\(\\w+{\\|\\[\\(address@hidden|@@\\)*\\]\\|address@hidden|$\\)"
+  `(("@\\(\\w+{\\|\\[\\(address@hidden|@@\\)*\\]\\|address@hidden|$\\)"
      ;; In-text markup.
      0 ,c-doc-markup-face-name prepend nil)
     (autodoc-font-lock-line-markup)
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index a1e26b9..7cda5ce 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -870,7 +870,7 @@ definition, or nil if the language doesn't have any."
   t (if (c-lang-const c-opt-cpp-macro-define)
        (concat (c-lang-const c-opt-cpp-prefix)
                (c-lang-const c-opt-cpp-macro-define)
-               "[ \t]+\\(\\(\\sw\\|_\\)+\\)\\(\([^\)]*\)\\)?"
+               "[ \t]+\\(\\(\\sw\\|_\\)+\\)\\(([^)]*)\\)?"
                ;;       ^                 ^ #defined name
                "\\([ \t]\\|\\\\\n\\)*")))
 (c-lang-defvar c-opt-cpp-macro-define-start
@@ -1190,7 +1190,7 @@ operators."
   t (c-make-keywords-re nil
       (c-filter-ops (c-lang-const c-all-op-syntax-tokens)
                    t
-                   "\\`\\(\\s.\\|\\s\(\\|\\s\)\\)+\\'")))
+                   "\\`\\(\\s.\\)+\\'")))
 (c-lang-defvar c-nonsymbol-token-regexp
   (c-lang-const c-nonsymbol-token-regexp))
 
@@ -1694,7 +1694,7 @@ be a subset of `c-primitive-type-kwds'."
            "strong"))
 
 (c-lang-defconst c-typedef-kwds
-  "Prefix keyword\(s\) like \"typedef\" which make a type declaration out
+  "Prefix keyword(s) like \"typedef\" which make a type declaration out
 of a variable declaration."
   t        '("typedef")
   (awk idl java) nil)
@@ -2202,7 +2202,7 @@ regexp if `c-colon-type-list-kwds' isn't nil."
        ;; before the ":" that starts the inherit list after "class"
        ;; or "struct" in C++.  (Also used as default for other
        ;; languages.)
-       "[^\]\[{}();,/#=:]*:"))
+       "[^][{}();,/#=:]*:"))
 (c-lang-defvar c-colon-type-list-re (c-lang-const c-colon-type-list-re))
 
 (c-lang-defconst c-paren-nontype-kwds
@@ -2366,7 +2366,7 @@ nevertheless contains a list separated with `;' and not 
`,'."
 (c-lang-defvar c-opt-asm-stmt-key (c-lang-const c-opt-asm-stmt-key))
 
 (c-lang-defconst c-case-kwds
-  "The keyword\(s) which introduce a \"case\" like construct.
+  "The keyword(s) which introduce a \"case\" like construct.
 This construct is \"<keyword> <expression> :\"."
   t '("case")
   awk nil)
@@ -2729,25 +2729,25 @@ more info."
   ;; more quickly.  We match ")" in C for K&R region declarations, and
   ;; in all languages except Java for when a cpp macro definition
   ;; begins with a declaration.
-  t "\\([\{\}\(\);,]+\\)"
-  java "\\([\{\}\(;,<]+\\)"
+  t "\\([{}();,]+\\)"
+  java "\\([{}(;,<]+\\)"
   ;; Match "<" in C++ to get the first argument in a template arglist.
   ;; In that case there's an additional check in `c-find-decl-spots'
   ;; that it got open paren syntax.  Match ":" to aid in picking up
   ;; "public:", etc.  This involves additional checks in
   ;; `c-find-decl-prefix-search' to prevent a match of identifiers
   ;; or labels.
-  c++ "\\([\{\}\(\);:,<]+\\)"
+  c++ "\\([{}();:,<]+\\)"
   ;; Additionally match the protection directives in Objective-C.
   ;; Note that this doesn't cope with the longer directives, which we
   ;; would have to match from start to end since they don't end with
   ;; any easily recognized characters.
-  objc (concat "\\([\{\}\(\);,]+\\|"
+  objc (concat "\\([{}();,]+\\|"
               (c-make-keywords-re nil (c-lang-const c-protection-kwds))
               "\\)")
   ;; Pike is like C but we also match "[" for multiple value
   ;; assignments and type casts.
-  pike "\\([\{\}\(\)\[;,]+\\)")
+  pike "\\([{}()[;,]+\\)")
 (c-lang-defvar c-decl-prefix-re (c-lang-const c-decl-prefix-re)
   'dont-doc)
 
@@ -2792,7 +2792,7 @@ constructs."
   ;; languages without casts.
   t (c-filter-ops (c-lang-const c-operators)
                  '(prefix)
-                 "\\`\\s\(\\'"
+                 "\\`\\s(\\'"
                  (lambda (op) (elt op 0))))
 (c-lang-defvar c-cast-parens (c-lang-const c-cast-parens))
 
@@ -2875,13 +2875,13 @@ Identifier syntax is in effect when this is matched 
\(see
   ;; Check that there's no "=" afterwards to avoid matching tokens
   ;; like "*=".
   (c objc) (concat "\\("
-                  "[*\(]"
+                  "[*(]"
                   "\\|"
                   (c-lang-const c-type-decl-prefix-key)
                   "\\)"
                   "\\([^=]\\|$\\)")
   c++  (concat "\\("
-              "[*\(&]"
+              "[*(&]"
               "\\|"
               (c-lang-const c-type-decl-prefix-key)
               "\\|"
@@ -2909,13 +2909,13 @@ is in effect when this is matched (see 
`c-identifier-syntax-table')."
   ;; Default to a regexp that matches `c-type-modifier-kwds' and a
   ;; function argument list parenthesis.
   t    (if (c-lang-const c-type-modifier-kwds)
-          (concat "\\(\(\\|"
+          (concat "\\((\\|"
                   (regexp-opt (c-lang-const c-type-modifier-kwds) t) "\\>"
                   "\\)")
-        "\\(\(\\)")
+        "\\((\\)")
   (c c++ objc) (concat
                "\\("
-               "[\)\[\(]"
+               "[)[(]"
                (if (c-lang-const c-type-modifier-kwds)
                    (concat
                     "\\|"
@@ -2926,8 +2926,8 @@ is in effect when this is matched (see 
`c-identifier-syntax-table')."
                     "\\>")
                  "")
                "\\)")
-  java "\\([\[\(\)]\\)"
-  idl "\\([\[\(]\\)")
+  java "\\([[()]\\)"
+  idl "\\([[(]\\)")
 (c-lang-defvar c-type-decl-suffix-key (c-lang-const c-type-decl-suffix-key)
   'dont-doc)
 
@@ -3111,7 +3111,7 @@ i.e. compound statements surrounded by parentheses inside 
expressions."
   t (if (c-lang-const c-opt-<>-arglist-start)
        (concat "\\("
                (c-lang-const c-opt-<>-arglist-start)
-               "\\)\\|\\s\)")))
+               "\\)\\|\\s)")))
 (c-lang-defvar c-opt-<>-arglist-start-in-paren
   (c-lang-const c-opt-<>-arglist-start-in-paren))
 
@@ -3168,7 +3168,7 @@ i.e. before \":\".  Only used if 
`c-recognize-colon-labels' is set."
   ;; Also check for open parens in C++, to catch member init lists in
   ;; constructors.  We normally allow it so that macros with arguments
   ;; work in labels.
-  c++ (concat "\\s\(\\|\"\\|" (c-lang-const c-nonlabel-token-key)))
+  c++ (concat "\\s(\\|\"\\|" (c-lang-const c-nonlabel-token-key)))
 (c-lang-defvar c-nonlabel-token-key (c-lang-const c-nonlabel-token-key))
 
 (c-lang-defconst c-nonlabel-token-2-key
@@ -3216,7 +3216,7 @@ way."
        "\\([+-]\\)"
        (c-lang-const c-simple-ws) "*"
        (concat "\\("                   ; Return type.
-               "([^\)]*)"
+               "([^)]*)"
                (c-lang-const c-simple-ws) "*"
                "\\)?")
        "\\(" (c-lang-const c-symbol-key) "\\)"))
@@ -3304,10 +3304,9 @@ accomplish that conveniently."
                 (setq source-eval t)
                 (let ((init ',(append (cdr c-emacs-variable-inits)
                                       (cdr c-lang-variable-inits))))
-                  (while init
-                    (setq current-var (caar init))
-                    (set (caar init) (eval (cadar init)))
-                    (setq init (cdr init)))))
+                  (dolist (var-init init)
+                    (setq current-var (car var-init))
+                    (set (car var-init) (eval (cadr var-init))))))
 
             (error
              (if current-var
@@ -3333,10 +3332,9 @@ accomplish that conveniently."
         (c-make-emacs-variables-local)
         (condition-case err
 
-            (while init
-              (setq current-var (caar init))
-              (set (caar init) (eval (cadar init)))
-              (setq init (cdr init)))
+            (dolist (var-init init)
+              (setq current-var (car var-init))
+              (set (car var-init) (eval (cadr var-init))))
 
           (error
            (if current-var
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 97491e4..5c68de4 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -1265,7 +1265,7 @@ Note that the style variables are always made local to 
the buffer."
   ;;
   ;;
   ;;     void myfunc(T* p) {}
-  ;; 
+  ;;
   ;; Type a space in the first blank line, and the fontification of the next
   ;; line was fouled up by context fontification.
   (let (new-beg new-end new-region case-fold-search
@@ -1455,7 +1455,8 @@ This function is called from `c-common-init', once per 
mode initialization."
 
 ;;;###autoload
 (define-derived-mode c-mode prog-mode "C"
-  "Major mode for editing K&R and ANSI C code.
+  "Major mode for editing C code.
+
 To submit a problem report, enter `\\[c-submit-bug-report]' from a
 c-mode buffer.  This automatically sets up a mail buffer with version
 information already added.  You just need to add a description of the
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index da36647..9afece9 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -277,7 +277,7 @@ nil."
 If t, hitting TAB always just indents the current line.  If nil, hitting
 TAB indents the current line if point is at the left margin or in the
 line's indentation, otherwise it inserts a `real' tab character \(see
-note\).  If some other value (not nil or t), then tab is inserted only
+note).  If some other value \(not nil or t), then tab is inserted only
 within literals \(comments and strings), but the line is always
 reindented.
 
diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el
index 96bb8d3..78c8d94 100644
--- a/lisp/progmodes/cfengine.el
+++ b/lisp/progmodes/cfengine.el
@@ -1005,12 +1005,12 @@ Intended as the value of `indent-line-function'."
                                   (point))))
       (let ((paragraph-start
             ;; Include start of parenthesized block.
-            "\f\\|[ \t]*$\\|.*\(")
+            "\f\\|[ \t]*$\\|.*(")
            (paragraph-separate
             ;; Include action and class lines, start and end of
             ;; bracketed blocks and end of parenthesized blocks to
             ;; avoid including these in fill.  This isn't ideal.
-            "[ \t\f]*$\\|.*#\\|.*[\){}]\\|\\s-*[[:alpha:]_().|!]+:")
+            "[ \t\f]*$\\|.*#\\|.*[){}]\\|\\s-*[[:alpha:]_().|!]+:")
            fill-paragraph-function)
        (fill-paragraph justify))
       t))
diff --git a/lisp/progmodes/cmacexp.el b/lisp/progmodes/cmacexp.el
index 005e71a..0f5b1bb 100644
--- a/lisp/progmodes/cmacexp.el
+++ b/lisp/progmodes/cmacexp.el
@@ -390,7 +390,7 @@ Optional arg DISPLAY non-nil means show messages in the 
echo area."
                ;; the way of font-lock, highlighting etc.
                (insert
                 (format
-                 "/* Preprocessor terminated with status %s\n\n   Messages 
from '%s\':\n\n"
+                 "/* Preprocessor terminated with status %s\n\n   Messages 
from '%s':\n\n"
                  exit-status cppcommand))
                (goto-char (+ (point)
                              (nth 1 (insert-file-contents tempname))))
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index a6e9ed8..9cb367a 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -167,7 +167,7 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
 
     (cucumber
      "\\(?:^cucumber\\(?: -p [^[:space:]]+\\)?\\|#\\)\
-\\(?: \\)\\([^\(].*\\):\\([1-9][0-9]*\\)" 1 2)
+\\(?: \\)\\([^(].*\\):\\([1-9][0-9]*\\)" 1 2)
 
     (msft
      ;; Must be before edg-1, so that MSVC's longer messages are
@@ -230,7 +230,7 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
      1 2 3 (4 . 5))
 
     (ruby-Test::Unit
-     "^[\t ]*\\[\\([^\(].*\\):\\([1-9][0-9]*\\)\\(\\]\\)?:in " 1 2)
+     "^[\t ]*\\[\\([^(].*\\):\\([1-9][0-9]*\\)\\(\\]\\)?:in " 1 2)
 
     (gnu
      ;; The first line matches the program name for
@@ -377,7 +377,7 @@ File = \\(.+\\), Line = \\([0-9]+\\)\\(?:, Column = 
\\([0-9]+\\)\\)?"
      3 4 5 (1 . 2))
 
     (sun-ada
-     "^\\([^, \n\t]+\\), line \\([0-9]+\\), char \\([0-9]+\\)[:., \(-]" 1 2 3)
+     "^\\([^, \n\t]+\\), line \\([0-9]+\\), char \\([0-9]+\\)[:., (-]" 1 2 3)
 
     (watcom
      "^[ \t]*\\(\\(?:[a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)): ?\
@@ -477,7 +477,29 @@ File = \\(.+\\), Line = \\([0-9]+\\)\\(?:, Column = 
\\([0-9]+\\)\\)?"
      ;;
      "^\\([^ \t\r\n(]+\\) (\\([0-9]+\\):\\([0-9]+\\)) "
      1 2 3)
-    (guile-file "^In \\(.+\\):\n" 1)
+
+    ;; Guile compilation yields file-headers in the following format:
+    ;;
+    ;;   In sourcefile.scm:
+    ;;
+    ;; We need to catch those, but we also need to be aware that Emacs
+    ;; byte-compilation yields compiler headers in similar form of
+    ;; those:
+    ;;
+    ;;   In toplevel form:
+    ;;   In end of data:
+    ;;
+    ;; We want to catch the Guile file-headers but not the Emacs
+    ;; byte-compilation headers, because that will cause next-error
+    ;; and prev-error to break, because the files "toplevel form" and
+    ;; "end of data" does not exist.
+    ;;
+    ;; To differentiate between these two cases, we require that the
+    ;; file-match must always contain an extension.
+    ;;
+    ;; We should also only treat this as "info", not "error", because
+    ;; we do not know what lines will follow.
+    (guile-file "^In \\(.+\\..+\\):\n" 1 nil nil 0)
     (guile-line "^ *\\([0-9]+\\): *\\([0-9]+\\)" nil 1 2)
     )
   "Alist of values for `compilation-error-regexp-alist'.")
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index b8ba170..ab3aa7f 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -395,12 +395,12 @@ Affects: `cperl-font-lock', `cperl-electric-lbrace-space',
   :type 'boolean
   :group 'cperl-indentation-details)
 
-(defcustom cperl-vc-sccs-header '("($sccs) = ('%W\%' =~ /(\\d+(\\.\\d+)+)/) ;")
+(defcustom cperl-vc-sccs-header '("($sccs) = ('%W\ %' =~ /(\\d+(\\.\\d+)+)/) 
;")
   "*Special version of `vc-sccs-header' that is used in CPerl mode buffers."
   :type '(repeat string)
   :group 'cperl)
 
-(defcustom cperl-vc-rcs-header '("($rcs) = (' $Id\$ ' =~ /(\\d+(\\.\\d+)+)/);")
+(defcustom cperl-vc-rcs-header '("($rcs) = (' $Id\ $ ' =~ 
/(\\d+(\\.\\d+)+)/);")
   "*Special version of `vc-rcs-header' that is used in CPerl mode buffers."
   :type '(repeat string)
      :group 'cperl)
@@ -793,7 +793,7 @@ corrected problems are: POD sections, here-documents, 
regexps.  The
 operations are: highlighting, indentation, electric keywords, electric
 braces.
 
-This may be confusing, since the regexp s#//#/#\; may be highlighted
+This may be confusing, since the regexp s#//#/#; may be highlighted
 as a comment, but it will be recognized as a regexp by the indentation
 code.  Or the opposite case, when a POD section is highlighted, but
 may break the indentation of the following code (though indentation
@@ -3672,7 +3672,7 @@ the sections using `cperl-pod-head-face', 
`cperl-pod-face',
         is-REx is-x-REx REx-subgr-start REx-subgr-end was-subgr i2 hairy-RE
         (case-fold-search nil) (inhibit-read-only t) (buffer-undo-list t)
         (modified (buffer-modified-p)) overshoot is-o-REx name
-        (after-change-functions nil)
+        (inhibit-modification-hooks t)
         (cperl-font-locking t)
         (use-syntax-state (and cperl-syntax-state
                                (>= min (car cperl-syntax-state))))
@@ -4585,13 +4585,13 @@ the sections using `cperl-pod-head-face', 
`cperl-pod-face',
                                         ((eq (char-after b) ?\: )
                                          "\\\\*\\[\\\\:\\^?\\sw+\\\\:]")
                                         ((eq (char-after b) ?^ )
-                                         "\\\\*\\[:\\(\\\\\\^\\)?\\sw+:\]")
+                                         "\\\\*\\[:\\(\\\\\\^\\)?\\sw+:]")
                                         ((eq (char-syntax (char-after b))
                                              ?w)
                                          (concat
                                           "\\\\*\\[:\\(\\\\\\^\\)?\\(\\\\"
                                           (char-to-string (char-after b))
-                                          "\\|\\sw\\)+:\]"))
+                                          "\\|\\sw\\)+:]"))
                                         (t "\\\\*\\[:\\^?\\sw*:]")))
                                       (goto-char REx-subgr-end)
                                       (cperl-highlight-charclass
@@ -5043,7 +5043,7 @@ conditional/loop constructs."
                  (goto-char top))
              (if (looking-at           ; Try Plan C: continuation block
                   (concat cperl-maybe-white-and-comment-rex
-                          "\\<\\(else\\|elsif\|continue\\)\\>"))
+                          "\\<\\(else\\|elsif\\|continue\\)\\>"))
                  (progn
                    (goto-char (match-end 0))
                    (setq tmp-end (point-at-eol)))
@@ -5706,7 +5706,7 @@ indentation and initial hashes.  Behaves usually outside 
of comment."
                 "redo" "return" "local" "exec" "sub" "do" "dump" "use" "our"
                 "require" "package" "eval" "my" "BEGIN" "END" "CHECK" "INIT")
               "\\|")                   ; Flow control
-             "\\)\\>") 2)              ; was "\\)[ \n\t;():,\|&]"
+             "\\)\\>") 2)              ; was "\\)[ \n\t;():,|&]"
                                        ; In what follows we use `type' style
                                        ; for overwritable builtins
            (list
@@ -5850,7 +5850,7 @@ indentation and initial hashes.  Behaves usually outside 
of comment."
                      (1 font-lock-string-face t))))
                  (t '("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ 
\t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"
                       2 font-lock-string-face t)))
-           '("[\[ \t{,(]\\(-?[a-zA-Z0-9_:]+\\)[ \t]*=>" 1
+           '("[[ \t{,(]\\(-?[a-zA-Z0-9_:]+\\)[ \t]*=>" 1
              font-lock-string-face t)
            '("^[ \t]*\\([a-zA-Z0-9_]+[ \t]*:\\)[ 
\t]*\\($\\|{\\|\\<\\(until\\|while\\|for\\(each\\)?\\|do\\)\\>\\)" 1
              font-lock-constant-face)  ; labels
@@ -5935,7 +5935,7 @@ indentation and initial hashes.  Behaves usually outside 
of comment."
                 (and (string< "21.1.10" emacs-version)
                      (string< emacs-version "21.1.2")))
                '(
-                 ("\\(\\(address@hidden|\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 1
+                 ("\\(\\(address@hidden|\\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 1
                   (if (eq (char-after (match-beginning 2)) ?%)
                       'cperl-hash-face
                     'cperl-array-face)
@@ -8882,7 +8882,7 @@ Delay of auto-help controlled by `cperl-lazy-help-time'."
 (defun cperl-font-lock-unfontify-region-function (beg end)
   (let* ((modified (buffer-modified-p)) (buffer-undo-list t)
         (inhibit-read-only t) (inhibit-point-motion-hooks t)
-        before-change-functions after-change-functions
+        (inhibit-modification-hooks t)
         deactivate-mark buffer-file-name buffer-file-truename)
     (remove-text-properties beg end '(face nil))
     (if (and (not modified) (buffer-modified-p))
diff --git a/lisp/progmodes/dcl-mode.el b/lisp/progmodes/dcl-mode.el
index 4c997bd..8c8bef0 100644
--- a/lisp/progmodes/dcl-mode.el
+++ b/lisp/progmodes/dcl-mode.el
@@ -259,12 +259,12 @@ never indented."
   :group 'dcl)
 
 (defcustom dcl-imenu-generic-expression
-  `((nil "^\\$[ \t]*\\([A-Za-z0-9_\$]+\\):[ \t]+SUBROUTINE\\b" 1)
+  `((nil "^\\$[ \t]*\\([A-Za-z0-9_$]+\\):[ \t]+SUBROUTINE\\b" 1)
     (,dcl-imenu-label-labels
-     "^\\$[ \t]*\\([A-Za-z0-9_\$]+\\):\\([ \t]\\|$\\)" 1)
-    (,dcl-imenu-label-goto "\\s-GOTO[ \t]+\\([A-Za-z0-9_\$]+\\)" 1)
-    (,dcl-imenu-label-gosub "\\s-GOSUB[ \t]+\\([A-Za-z0-9_\$]+\\)" 1)
-    (,dcl-imenu-label-call "\\s-CALL[ \t]+\\([A-Za-z0-9_\$]+\\)" 1))
+     "^\\$[ \t]*\\([A-Za-z0-9_$]+\\):\\([ \t]\\|$\\)" 1)
+    (,dcl-imenu-label-goto "\\s-GOTO[ \t]+\\([A-Za-z0-9_$]+\\)" 1)
+    (,dcl-imenu-label-gosub "\\s-GOSUB[ \t]+\\([A-Za-z0-9_$]+\\)" 1)
+    (,dcl-imenu-label-call "\\s-CALL[ \t]+\\([A-Za-z0-9_$]+\\)" 1))
   "Default imenu generic expression for DCL.
 
 The default includes SUBROUTINE labels in the main listing and
@@ -369,7 +369,7 @@ followed by space or tab."
 
 
 (defcustom dcl-label-r
-  "[a-zA-Z0-9_\$]*:\\([ \t!]\\|$\\)"
+  "[a-zA-Z0-9_$]*:\\([ \t!]\\|$\\)"
   "Regular expression describing a label.
 A label is a name followed by a colon followed by white-space or end-of-line."
   :type 'regexp
@@ -453,12 +453,12 @@ Preloaded with all known option names from 
dcl-option-alist")
 ;; above.  This version won't find GOTOs in comments or text strings.
 ;(defvar dcl-imenu-generic-expression
 ;  (`
-;   ((nil "^\\$[ \t]*\\([A-Za-z0-9_\$]+\\):[ \t]+SUBROUTINE\\b" 1)
-;    ("Labels" "^\\$[ \t]*\\([A-Za-z0-9_\$]+\\):\\([ \t]\\|$\\)" 1)
-;    ("GOTO" (, (concat dcl-cmd-r "GOTO[ \t]+\\([A-Za-z0-9_\$]+\\)")) 5)
+;   ((nil "^\\$[ \t]*\\([A-Za-z0-9_$]+\\):[ \t]+SUBROUTINE\\b" 1)
+;    ("Labels" "^\\$[ \t]*\\([A-Za-z0-9_$]+\\):\\([ \t]\\|$\\)" 1)
+;    ("GOTO" (, (concat dcl-cmd-r "GOTO[ \t]+\\([A-Za-z0-9_$]+\\)")) 5)
 ;    ("GOSUB" (, (concat dcl-cmd-r
-;                      "GOSUB[ \t]+\\([A-Za-z0-9_\$]+\\)")) 5)
-;    ("CALL" (, (concat dcl-cmd-r "CALL[ \t]+\\([A-Za-z0-9_\$]+\\)")) 5)))
+;                      "GOSUB[ \t]+\\([A-Za-z0-9_$]+\\)")) 5)
+;    ("CALL" (, (concat dcl-cmd-r "CALL[ \t]+\\([A-Za-z0-9_$]+\\)")) 5)))
 ;  "*Default imenu generic expression for DCL.
 
 ;The default includes SUBROUTINE labels in the main listing and
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el
index c694bbd..6d8e90c 100644
--- a/lisp/progmodes/ebnf2ps.el
+++ b/lisp/progmodes/ebnf2ps.el
@@ -1899,7 +1899,7 @@ It's only used when `ebnf-syntax' is `iso-ebnf'."
   :group 'ebnf-syntactic)
 
 
-(defcustom ebnf-file-suffix-regexp "\.[Bb][Nn][Ff]$"
+(defcustom ebnf-file-suffix-regexp "\\.[Bb][Nn][Ff]$"
   "Specify file name suffix that contains EBNF.
 
 See `ebnf-eps-directory' command."
@@ -2731,7 +2731,7 @@ See also `ebnf-syntax-buffer'."
       (ebnf-syntax                      . 'ebnf)
       (ebnf-iso-alternative-p           . nil)
       (ebnf-iso-normalize-p             . nil)
-      (ebnf-file-suffix-regexp          . "\.[Bb][Nn][Ff]$")
+      (ebnf-file-suffix-regexp          . "\\.[Bb][Nn][Ff]$")
       (ebnf-eps-prefix                  . "ebnf--")
       (ebnf-eps-header-font             . '(11 Helvetica "Black" "White" bold))
       (ebnf-eps-header                  . nil)
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 1ea9f17..bdc304e 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -632,16 +632,16 @@ otherwise build the summary from TYPE and SYMBOL."
             (xref-make-elisp-location symbol type file)))
 
 (defvar elisp-xref-find-def-functions nil
-  "List of functions to be run from ‘elisp--xref-find-definitions’ to add 
additional xrefs.
+  "List of functions to be run from `elisp--xref-find-definitions' to add 
additional xrefs.
 Called with one arg; the symbol whose definition is desired.
 Each function should return a list of xrefs, or nil; the first
 non-nil result supercedes the xrefs produced by
-‘elisp--xref-find-definitions’.")
+`elisp--xref-find-definitions'.")
 
 ;; FIXME: name should be singular; match xref-find-definition
 (defun elisp--xref-find-definitions (symbol)
   ;; The file name is not known when `symbol' is defined via interactive eval.
-  (let (xrefs temp)
+  (let (xrefs)
 
     (let ((temp elisp-xref-find-def-functions))
       (while (and (null xrefs)
@@ -720,10 +720,15 @@ non-nil result supercedes the xrefs produced by
               (dolist (method (cl--generic-method-table generic))
                 (let* ((info (cl--generic-method-info method));; qual-string 
combined-args doconly
                        (specializers (cl--generic-method-specializers method))
+                       (non-default nil)
                        (met-name (cons symbol specializers))
                        (file (find-lisp-object-file-name met-name 
'cl-defmethod)))
+                  (dolist (item specializers)
+                    ;; default method has all 't' in specializers
+                    (setq non-default (or non-default (not (equal t item)))))
+
                   (when (and file
-                             (or specializers   ;; default method has null 
specializers
+                             (or non-default
                                  (nth 2 info))) ;; assuming only co-located 
default has null doc string
                     (if specializers
                         (let ((summary (format elisp--xref-format-extra 
'cl-defmethod symbol (nth 1 info))))
@@ -800,6 +805,7 @@ non-nil result supercedes the xrefs produced by
 (declare-function project-current "project")
 
 (defun elisp--xref-find-references (symbol)
+  "Find all references to SYMBOL (a string) in the current project."
   (cl-mapcan
    (lambda (dir)
      (xref-collect-references symbol dir))
@@ -928,6 +934,7 @@ Semicolons start comments.
             (goto-char end)))))))
 
 (defun elisp-byte-code-syntax-propertize (start end)
+  (goto-char start)
   (elisp--byte-code-comment end (point))
   (funcall
    (syntax-propertize-rules
@@ -1240,7 +1247,7 @@ If the current defun is actually a call to `defvar',
 then reset the variable using the initial value expression
 even if the variable already has some other value.
 \(Normally `defvar' does not change the variable's value
-if it already has a value.\)
+if it already has a value.)
 
 Return the result of evaluation."
   ;; FIXME: the print-length/level bindings should only be applied while
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el
index e8a1ae4..0ac59e1 100644
--- a/lisp/progmodes/f90.el
+++ b/lisp/progmodes/f90.el
@@ -240,7 +240,7 @@
   :group 'f90-indent)
 
 (defcustom f90-beginning-ampersand t
-  "Non-nil gives automatic insertion of \& at start of continuation line."
+  "Non-nil gives automatic insertion of `&' at start of continuation line."
   :type  'boolean
   :safe  'booleanp
   :group 'f90)
@@ -649,7 +649,7 @@ forall\\|block\\|critical\\)\\)\\_>"
 \\|enumerator\\|procedure\\|\
 logical\\|double[ \t]*precision\\|type[ \t]*(\\(?:\\sw\\|\\s_\\)+)\\|none\\)[ 
\t]*"
       (1 font-lock-keyword-face) (2 font-lock-type-face))
-    '("\\_<\\(namelist\\|common\\)[ \t]*\/\\(\\(?:\\sw\\|\\s_\\)+\\)?\/"
+    '("\\_<\\(namelist\\|common\\)[ \t]*/\\(\\(?:\\sw\\|\\s_\\)+\\)?\/"
       (1 font-lock-keyword-face) (2 font-lock-constant-face nil t))
     "\\_<else\\([ \t]*if\\|where\\)?\\_>"
     '("\\(&\\)[ \t]*\\(!\\|$\\)"  (1 font-lock-keyword-face))
@@ -954,8 +954,8 @@ Used in the F90 entry in `hs-special-modes-alist'.")
    ;; and also variables of derived type "type (foo)".
    ;; "type, foo" must be a block (?).
    "type[ \t,]\\("
-   "[^i(!\n\"\& \t]\\|"                 ; not-i(
-   "i[^s!\n\"\& \t]\\|"                 ; i not-s
+   "[^i(!\n\"& \t]\\|"                 ; not-i(
+   "i[^s!\n\"& \t]\\|"                 ; i not-s
    "is\\(?:\\sw\\|\\s_\\)\\)\\|"
    ;; "abstract interface" is F2003; "submodule" is F2008.
    "program\\|\\(?:abstract[ \t]*\\)?interface\\|\\(?:sub\\)?module\\|"
@@ -992,9 +992,9 @@ Set subexpression 1 in the match-data to the name of the 
type."
     found))
 
 (defvar f90-imenu-generic-expression
-  (let ((good-char "[^!\"\&\n \t]") (not-e "[^e!\n\"\& \t]")
-        (not-n "[^n!\n\"\& \t]") (not-d "[^d!\n\"\& \t]")
-        ;; (not-ib "[^i(!\n\"\& \t]") (not-s "[^s!\n\"\& \t]")
+  (let ((good-char "[^!\"&\n \t]") (not-e "[^e!\n\"& \t]")
+        (not-n "[^n!\n\"& \t]") (not-d "[^d!\n\"& \t]")
+        ;; (not-ib "[^i(!\n\"& \t]") (not-s "[^s!\n\"& \t]")
         )
     `((nil "^[ \t0-9]*program[ \t]+\\(\\(?:\\sw\\|\\s_\\)+\\)" 1)
       ("Submodules" "^[ \t0-9]*submodule[ \t]*([^)\n]+)[ \t]*\
@@ -1015,7 +1015,7 @@ Set subexpression 1 in the match-data to the name of the 
type."
          "\\("
          ;; At least three non-space characters before function/subroutine.
          ;; Check that the last three non-space characters do not spell E N D.
-         "[^!\"\&\n]*\\("
+         "[^!\"&\n]*\\("
          not-e good-char good-char "\\|"
          good-char not-n good-char "\\|"
          good-char good-char not-d "\\)"
@@ -1154,7 +1154,7 @@ Variables controlling indentation style and extra 
features:
   Non-nil causes `f90-do-auto-fill' to break lines before delimiters
   (default t).
 `f90-beginning-ampersand'
-  Automatic insertion of \& at beginning of continuation lines (default t).
+  Automatic insertion of `&' at beginning of continuation lines (default t).
 `f90-smart-end'
   From an END statement, check and fill the end using matching block start.
   Allowed values are `blink', `no-blink', and nil, which determine
@@ -1378,7 +1378,7 @@ write\\)[ \t]*([^)\n]*)")
    ((looking-at "\\(submodule\\)[ \t]*([^)\n]+)[ 
\t]*\\(\\(?:\\sw\\|\\s_\\)+\\)\\_>")
     (list (match-string 1) (match-string 2)))
    ((and (not (looking-at "end[ \t]*\\(function\\|subroutine\\)"))
-         (looking-at "[^!'\"\&\n]*\\(function\\|subroutine\\)[ \t]+\
+         (looking-at "[^!'\"&\n]*\\(function\\|subroutine\\)[ \t]+\
 \\(\\(?:\\sw\\|\\s_\\)+\\)"))
     (list (match-string 1) (match-string 2)))))
 ;; Following will match an un-named main program block; however
@@ -2110,7 +2110,7 @@ Like `join-line', but handles F90 syntax."
   (if arg (forward-line 1))
   (when (eq (preceding-char) ?\n)
     (skip-chars-forward " \t")
-    (if (looking-at "\&") (delete-char 1))
+    (if (looking-at "&") (delete-char 1))
     (beginning-of-line)
     (delete-region (point) (1- (point)))
     (skip-chars-backward " \t")
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index a9d4743..3adadd1 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -826,16 +826,16 @@ Convert it to flymake internal format."
   (append
    '(
      ;; MS Visual C++ 6.0
-     ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: 
\\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
+     ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) : 
\\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
       1 3 nil 4)
      ;; jikes
-     
("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: 
\\(\\(Error\\|Warning\\|Caution\\|Semantic Error\\):[ \t\n]*\\(.+\\)\\)"
+     ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\):\\([0-9]+\\):[0-9]+:[0-9]+:[0-9]+: 
\\(\\(Error\\|Warning\\|Caution\\|Semantic Error\\):[ \t\n]*\\(.+\\)\\)"
       1 3 nil 4)
      ;; MS midl
      ("midl[ ]*:[ ]*\\(command line error .*\\)"
       nil nil nil 1)
      ;; MS C#
-     ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\),[0-9]+)\: 
\\(\\(error\\|warning\\|fatal error\\) \\(CS[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
+     ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\),[0-9]+): 
\\(\\(error\\|warning\\|fatal error\\) \\(CS[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
       1 3 nil 4)
      ;; perl
      ("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1)
@@ -843,7 +843,7 @@ Convert it to flymake internal format."
      ("\\(?:Parse\\|Fatal\\) error: \\(.*\\) in \\(.*\\) on line \\([0-9]+\\)" 
2 3 nil 1)
      ;; LaTeX warnings (fileless) ("\\(LaTeX \\(Warning\\|Error\\): .*\\) on 
input line \\([0-9]+\\)" 20 3 nil 1)
      ;; ant/javac.  Note this also matches gcc warnings!
-     (" *\\(\\[javac\\] 
*\\)?\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\\(?:\:[0-9]+\\)?\:[ 
\t\n]*\\(.+\\)"
+     (" *\\(\\[javac\\] 
*\\)?\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\):\\([0-9]+\\)\\(?::[0-9]+\\)?:[ 
\t\n]*\\(.+\\)"
       2 4 nil 5))
    ;; compilation-error-regexp-alist)
    (flymake-reformat-err-line-patterns-from-compile-el 
compilation-error-regexp-alist-alist))
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el
index ee4733f..ef47005 100644
--- a/lisp/progmodes/fortran.el
+++ b/lisp/progmodes/fortran.el
@@ -244,8 +244,8 @@ line in region."
 (defcustom fortran-column-ruler-fixed
   "0   4 6  10        20        30        40        5\
 0        60        70\n\
-\[   ]|{   |    |    |    |    |    |    |    |    \
-\|    |    |    |    |}\n"
+[   ]|{   |    |    |    |    |    |    |    |    \
+|    |    |    |    |}\n"
   "String displayed above current line by \\[fortran-column-ruler].
 This variable is used in fixed format mode.
 See the variable `fortran-column-ruler-tab' for TAB format mode."
@@ -257,8 +257,8 @@ See the variable `fortran-column-ruler-tab' for TAB format 
mode."
 (defcustom fortran-column-ruler-tab
   "0       810        20        30        40        5\
 0        60        70\n\
-\[   ]|  { |    |    |    |    |    |    |    |    \
-\|    |    |    |    |}\n"
+[   ]|  { |    |    |    |    |    |    |    |    \
+|    |    |    |    |}\n"
   "String displayed above current line by \\[fortran-column-ruler].
 This variable is used in TAB format mode.
 See the variable `fortran-column-ruler-fixed' for fixed format mode."
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 1eff62c..3860c81 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -4038,6 +4038,8 @@ member."
       (let ((name (bindat-get-field local 'name))
             (value (bindat-get-field local 'value))
             (type (bindat-get-field local 'type)))
+        (when (not value)
+          (setq value "<complex data type>"))
         (if (or (not value)
                 (string-match "\\0x" value))
             (add-text-properties 0 (length name)
diff --git a/lisp/progmodes/glasses.el b/lisp/progmodes/glasses.el
index 257c3d2..6ee32b0 100644
--- a/lisp/progmodes/glasses.el
+++ b/lisp/progmodes/glasses.el
@@ -252,7 +252,7 @@ CATEGORY is the overlay category.  If it is nil, use the 
`glasses' category."
        ;; Parentheses
        (when glasses-separate-parentheses-p
          (goto-char beg)
-         (while (re-search-forward "[a-zA-Z]_*\\(\(\\)" end t)
+         (while (re-search-forward "[a-zA-Z]_*\\((\\)" end t)
            (unless (glasses-parenthesis-exception-p (point-at-bol) (match-end 
1))
              (glasses-make-overlay (match-beginning 1) (match-end 1)
                                    'glasses-parenthesis))))))))
@@ -291,7 +291,7 @@ recognized according to the current value of the variable 
`glasses-separator'."
              (goto-char (match-beginning 1)))))
        (when glasses-separate-parentheses-p
          (goto-char (point-min))
-         (while (re-search-forward "[a-zA-Z]_*\\( \\)\(" nil t)
+         (while (re-search-forward "[a-zA-Z]_*\\( \\)(" nil t)
            (unless (glasses-parenthesis-exception-p (point-at-bol) (1+ 
(match-end 1)))
              (replace-match "" t nil nil 1)))))))
   ;; nil must be returned to allow use in write file hooks
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 9ab0667..1284ef2 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -2855,6 +2855,10 @@ Obeying it means displaying in another window the 
specified file and line."
 (defun gud-format-command (str arg)
   (let ((insource (not (eq (current-buffer) gud-comint-buffer)))
        (frame (or gud-last-frame gud-last-last-frame))
+       (buffer-file-name-localized
+         (and (buffer-file-name)
+              (or (file-remote-p (buffer-file-name) 'localname)
+                  (buffer-file-name))))
        result)
     (while (and str
                (let ((case-fold-search nil))
@@ -2864,15 +2868,15 @@ Obeying it means displaying in another window the 
specified file and line."
        (cond
         ((eq key ?f)
          (setq subst (file-name-nondirectory (if insource
-                                                 (buffer-file-name)
+                                                 buffer-file-name-localized
                                                (car frame)))))
         ((eq key ?F)
          (setq subst (file-name-base (if insource
-                                          (buffer-file-name)
+                                          buffer-file-name-localized
                                         (car frame)))))
         ((eq key ?d)
          (setq subst (file-name-directory (if insource
-                                              (buffer-file-name)
+                                              buffer-file-name-localized
                                             (car frame)))))
         ((eq key ?l)
          (setq subst (int-to-string
diff --git a/lisp/progmodes/idlw-help.el b/lisp/progmodes/idlw-help.el
index c411139..4473409 100644
--- a/lisp/progmodes/idlw-help.el
+++ b/lisp/progmodes/idlw-help.el
@@ -434,7 +434,7 @@ It collects and prints the diagnostics messages."
 
        ;; A system variable -- only system help
        ((string-match
-        "\\`!\\([a-zA-Z0-9_]+\\)\\(\.\\([A-Za-z0-9_]+\\)\\)?"
+        "\\`!\\([a-zA-Z0-9_]+\\)\\(\\.\\([A-Za-z0-9_]+\\)\\)?"
         this-word)
        (let* ((word  (match-string-no-properties 1 this-word))
               (entry (assq (idlwave-sintern-sysvar word)
@@ -1312,7 +1312,7 @@ IDL assistant.")
   (let ((help-loc (idlwave-html-help-location))
        topic anchor file just-started exists full-link)
 
-    (if (string-match "\.html" link)
+    (if (string-match "\\.html" link)
        (setq topic (substring link 0 (match-beginning 0))
              anchor (substring link (match-end 0)))
       (error "Malformed help link"))
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el
index 50ebadf..5aeb4ea 100644
--- a/lisp/progmodes/idlw-shell.el
+++ b/lisp/progmodes/idlw-shell.el
@@ -732,7 +732,7 @@ it contains an error message, even if hide-output is 
non-nil.")
 
 (defvar idlwave-shell-pending-commands nil
   "List of commands to be sent to IDL.
-Each element of the list is list of \(CMD PCMD HIDE\), where CMD is a
+Each element of the list is list of \(CMD PCMD HIDE), where CMD is a
 string to be sent to IDL and PCMD is a post-command to be placed on
 `idlwave-shell-post-command-hook'.  If HIDE is non-nil, hide the output
 from command CMD.  PCMD and HIDE are optional.")
@@ -1240,7 +1240,7 @@ Return either nil or 'hide."
                                             show-if-error)
   "Send a command to IDL process.
 
-\(CMD PCMD HIDE\) are placed at the end of `idlwave-shell-pending-commands'.
+\(CMD PCMD HIDE) are placed at the end of `idlwave-shell-pending-commands'.
 If IDL is ready the first command in `idlwave-shell-pending-commands',
 CMD, is sent to the IDL process.
 
@@ -1256,7 +1256,7 @@ stepping through code with output.
 If optional fourth argument PREEMPT is non-nil CMD is put at front of
 `idlwave-shell-pending-commands'.  If PREEMPT is 'wait, wait for all
 output to complete and the next prompt to arrive before returning
-\(useful if you need an answer now\).  IDL is considered ready if the
+\(useful if you need an answer now).  IDL is considered ready if the
 prompt is present and if `idlwave-shell-ready' is non-nil.
 
 If SHOW-IF-ERROR is non-nil, show the output if it contains an error
@@ -3122,7 +3122,7 @@ versions of IDL."
         (string-match "\\.\\'" pre)))             ;; structure member
 
        ;; Skip over strings
-       ((and (string-match "\\([\"\']\\)[^\1]*$" pre)
+       ((and (string-match "\\([\"']\\)[^\1]*$" pre)
             (string-match (concat "^[^" (match-string 1 pre) "]*"
                                   (match-string 1 pre)) post))
        (setq start (+ start (match-end 0))))
@@ -3212,7 +3212,7 @@ size(___,/DIMENSIONS)"
 
 (defvar idlwave-shell-bp-alist nil
   "Alist of breakpoints.
-A breakpoint is a cons cell \(\(file line\) . \(\(index module\) data\)\)
+A breakpoint is a cons cell \((file line) . \((index module) data))
 
 The car is the `frame' for the breakpoint:
 file - full path file name.
@@ -3921,7 +3921,7 @@ Query as a function if TYPE set to something beside 
`pro'."
   "Get module source, and update `idlwave-shell-sources-alist'."
   (let ((old (assoc (upcase module) idlwave-shell-sources-alist))
        filename)
-    (when (string-match "\.PATH *[\n\r]\\([^%][^\r\n]+\\)[\n\r]"
+    (when (string-match ".PATH *[\n\r]\\([^%][^\r\n]+\\)[\n\r]"
                        idlwave-shell-command-output)
       (setq filename (substring idlwave-shell-command-output
                                (match-beginning 1) (match-end 1)))
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index b524b76..ac2259d 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -742,7 +742,7 @@ The actions that can be performed are listed in 
`idlwave-indent-action-table'."
 
 (defcustom idlwave-abbrev-start-char "\\"
   "A single character string used to start abbreviations in abbrev mode.
-Possible characters to choose from: ~\\=`\%
+Possible characters to choose from: ~\\=`%
 or even `?'.  `.' is not a good choice because it can make structure
 field names act like abbrevs in certain circumstances.
 
@@ -1559,7 +1559,7 @@ KEY in `idlwave-mode-map' by defining an anonymous 
function calling
 `self-insert-command' followed by CMD.  If KEY contains more than one
 character a binding will only be set if SELECT is 'both.
 
-\(KEY . CMD\) is also placed in the `idlwave-indent-expand-table',
+\(KEY . CMD) is also placed in the `idlwave-indent-expand-table',
 replacing any previous value for KEY.  If a binding is not set then it
 will instead be placed in `idlwave-indent-action-table'.
 
diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el
index 17aaab9..290ebee 100644
--- a/lisp/progmodes/inf-lisp.el
+++ b/lisp/progmodes/inf-lisp.el
@@ -510,7 +510,7 @@ Used by these commands to determine defaults."
                                     (file-name-nondirectory file-name)))
   (comint-send-string (inferior-lisp-proc) (concat "(compile-file \""
                                                   file-name
-                                                  "\"\)\n"))
+                                                  "\")\n"))
   (switch-to-lisp t))
 
 
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index 98a22dd..ab994f3 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -126,7 +126,7 @@ An example of this is \"Class.prototype = { method1: 
...}\".")
 (defconst js--prototype-objextend-class-decl-re-2
   (concat "^\\s-*\\(?:var\\s-+\\)?"
           "\\(" js--dotted-name-re "\\)"
-          "\\s-*=\\s-*Object\\.extend\\s-*\("))
+          "\\s-*=\\s-*Object\\.extend\\s-*("))
 
 ;; var NewClass = Class.create({
 (defconst js--prototype-class-decl-re
@@ -639,7 +639,7 @@ enabled frameworks."
          (js--maybe-join
           "\\(?:var[ \t]+\\)?[a-zA-Z_$0-9.]+[ \t]*=[ \t]*\\(?:"
           "\\|"
-          "\\)[ \t]*\("
+          "\\)[ \t]*("
 
           (when (memq 'prototype js-enabled-frameworks)
                     "Class\\.create")
@@ -651,10 +651,10 @@ enabled frameworks."
             "[a-zA-Z_$0-9]+\\.extend\\(?:Final\\)?"))
 
          (when (memq 'dojo js-enabled-frameworks)
-           "dojo\\.declare[ \t]*\(")
+           "dojo\\.declare[ \t]*(")
 
          (when (memq 'mochikit js-enabled-frameworks)
-           "MochiKit\\.Base\\.update[ \t]*\(")
+           "MochiKit\\.Base\\.update[ \t]*(")
 
          ;; mumble.prototypeTHING
          (js--maybe-join
@@ -662,7 +662,7 @@ enabled frameworks."
 
           (when (memq 'javascript js-enabled-frameworks)
             '( ;; foo.prototype.bar = function(
-              "\\.[a-zA-Z_$0-9]+[ \t]*=[ \t]*function[ \t]*\("
+              "\\.[a-zA-Z_$0-9]+[ \t]*=[ \t]*function[ \t]*("
 
               ;; mumble.prototype = {
               "[ \t]*=[ \t]*{")))))
@@ -1370,17 +1370,6 @@ LIMIT defaults to point."
              (looking-at "\"\\s-*,\\s-*\\[")
              (eq (match-end 0) (1+ list-begin)))))))
 
-(defun js--syntax-begin-function ()
-  (when (< js--cache-end (point))
-    (goto-char (max (point-min) js--cache-end)))
-
-  (let ((pitem))
-    (while (and (setq pitem (car (js--backward-pstate)))
-                (not (eq 0 (js--pitem-paren-depth pitem)))))
-
-    (when pitem
-      (goto-char (js--pitem-h-begin pitem )))))
-
 ;;; Font Lock
 (defun js--make-framework-matcher (framework &rest regexps)
   "Helper function for building `js--font-lock-keywords'.
@@ -1735,6 +1724,12 @@ This performs fontification according to 
`js--class-styles'."
            (js-syntax-propertize-regexp end))))))
    (point) end))
 
+(defconst js--prettify-symbols-alist
+  '(("=>" . ?⇒)
+    (">=" . ?≥)
+    ("<=" . ?≤))
+  "Alist of symbol prettifications for JavaScript.")
+
 ;;; Indentation
 
 (defconst js--possibly-braceless-keyword-re
@@ -3506,6 +3501,7 @@ If one hasn't been set, or if it's stale, prompt for a 
new one."
   (setq-local open-paren-in-column-0-is-defun-start nil)
   (setq-local font-lock-defaults (list js--font-lock-keywords))
   (setq-local syntax-propertize-function #'js-syntax-propertize)
+  (setq-local prettify-symbols-alist js--prettify-symbols-alist)
 
   (setq-local parse-sexp-ignore-comments t)
   (setq-local parse-sexp-lookup-properties t)
@@ -3550,8 +3546,6 @@ If one hasn't been set, or if it's stale, prompt for a 
new one."
     (make-local-variable 'adaptive-fill-regexp)
     (c-setup-paragraph-variables))
 
-  (setq-local syntax-begin-function #'js--syntax-begin-function)
-
   ;; Important to fontify the whole buffer syntactically! If we don't,
   ;; then we might have regular expression literals that aren't marked
   ;; as strings, which will screw up parse-partial-sexp, scan-lists,
@@ -3577,4 +3571,8 @@ If one hasn't been set, or if it's stale, prompt for a 
new one."
 
 (provide 'js)
 
+;; Local Variables:
+;; coding: utf-8
+;; End:
+
 ;; js.el ends here
diff --git a/lisp/progmodes/m4-mode.el b/lisp/progmodes/m4-mode.el
index 511b254..80a93a4 100644
--- a/lisp/progmodes/m4-mode.el
+++ b/lisp/progmodes/m4-mode.el
@@ -2,8 +2,7 @@
 
 ;; Copyright (C) 1996-1997, 2001-2015 Free Software Foundation, Inc.
 
-;; Author: Andrew Csillag <address@hidden>
-;; Maintainer: Andrew Csillag <address@hidden>
+;; Author: Andrew Csillag <address@hidden>
 ;; Keywords: languages, faces
 
 ;; This file is part of GNU Emacs.
@@ -67,10 +66,9 @@ If m4 is not in your PATH, set this to an absolute file 
name."
   `(
     ("\\(\\_<\\(m4_\\)?dnl\\_>\\).*$" . font-lock-comment-face)
     ("address@hidden" . font-lock-variable-name-face)
-    ("\\\$\\\@" . font-lock-variable-name-face)
-    ("\\\$\\\*" . font-lock-variable-name-face)
-    
("\\b\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(file\\|mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef\\)\\|e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|gnu\\|i\\(f\\(def\\|else\\)\\|n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|m\\(4\\(exit\\|wrap\\)\\|aketemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)\\|regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(ff\\|n\\)\\|nslit\\)\\|un\\(d\\(efine\\|ivert\\)\\|ix
 [...]
-    
("\\b\\(m4_\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(file\\|mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef\\)\\|e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|i\\(f\\(def\\|else\\)\\|n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|m\\(4\\(_undefine\\|exit\\|wrap\\)\\|aketemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)\\|regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(ff\\|n\\)\\|nslit\\)\\|undivert\\)\\)\\b"
 [...]
+    ("\\$\\@" . font-lock-variable-name-face)
+    ("\\$\\*" . font-lock-variable-name-face)
+    
("\\_<\\(m4_\\)?\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(file\\|mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef\\)\\|e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|gnu\\|i\\(f\\(def\\|else\\)\\|n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|m\\(4\\(exit\\|wrap\\)\\|aketemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)\\|regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(ff\\|n\\)\\|nslit\\)\\|un\\(d\\(efine\\|iv
 [...]
   "Default `font-lock-keywords' for M4 mode.")
 
 (defcustom m4-mode-hook nil
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el
index 4f46cbe..9736f0f 100644
--- a/lisp/progmodes/make-mode.el
+++ b/lisp/progmodes/make-mode.el
@@ -1502,7 +1502,7 @@ Insertion takes place at point."
   (if (zerop (+ (length targets) (length macros)))
       (progn
        (beep)
-       (message "No macros or targets to browse! Consider running 
'makefile-pickup-everything\'"))
+       (message "No macros or targets to browse! Consider running 
`makefile-pickup-everything'"))
     (let ((browser-buffer (get-buffer-create makefile-browser-buffer-name)))
        (pop-to-buffer browser-buffer)
        (makefile-browser-fill targets macros)
diff --git a/lisp/progmodes/mantemp.el b/lisp/progmodes/mantemp.el
index 6b92c7e..a0f50fc 100644
--- a/lisp/progmodes/mantemp.el
+++ b/lisp/progmodes/mantemp.el
@@ -89,7 +89,7 @@
   (save-excursion
     (goto-char (point-min))
     (message "Removing comments")
-    (while (re-search-forward "^[A-z\.()+0-9: ]*`\\|'.*$" nil t)
+    (while (re-search-forward "^[A-z.()+0-9: ]*`\\|'.*$" nil t)
       (replace-match ""))))
 
 (defun mantemp-remove-memfuncs ()
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index 3521a13..55d69bf 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -932,7 +932,7 @@ Returns (parse-state) if line starts inside a string."
            (if (save-excursion (goto-char indent-point)
                                (looking-at
                                 (if perl-indent-parens-as-block
-                                    "[ \t]*[{(\[]" "[ \t]*{")))
+                                    "[ \t]*[{([]" "[ \t]*{")))
                perl-continued-brace-offset 0)))
        (t
         ;; This line starts a new statement.
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index 8f50887..f1aa35f 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -61,7 +61,7 @@ indentation of a line/region to the indentation engine of the 
sub
 mode, it is supposed to bind this variable to non-nil around the call.
 
 The non-nil value looks as follows
-   \(FIRST-COLUMN (START . END) PREVIOUS-CHUNKS)
+   (FIRST-COLUMN (START . END) PREVIOUS-CHUNKS)
 
 FIRST-COLUMN is the column the indentation engine of the sub mode
 should usually choose for top-level language constructs inside
@@ -86,7 +86,7 @@ values are:
 
  - A function called with the start position of the current
    chunk.  It will return either the region of the previous chunk
-   as \(PREV-START . PREV-END) or nil if there is no further
+   as (PREV-START . PREV-END) or nil if there is no further
    previous chunk.
 
    A typical use case are literate programming sources - the
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el
index 5a4ed84..3d9b0c3 100644
--- a/lisp/progmodes/prolog.el
+++ b/lisp/progmodes/prolog.el
@@ -922,15 +922,38 @@ This is really kludgy, and unneeded (i.e. obsolete) in 
Emacs>=24."
 (defun prolog-smie-rules (kind token)
   (pcase (cons kind token)
     (`(:elem . basic) prolog-indent-width)
+    ;; The list of arguments can never be on a separate line!
+    (`(:list-intro . ,_) t)
+    ;; When we don't know how to indent an empty line, assume the most
+    ;; likely token will be ";".
+    (`(:elem . empty-line-token) ";")
     (`(:after . ".") '(column . 0)) ;; To work around smie-closer-alist.
     ;; Allow indentation of if-then-else as:
     ;;    (   test
-    ;;     -> thenrule
-    ;;     ;  elserule
+    ;;    ->  thenrule
+    ;;    ;   elserule
     ;;    )
     (`(:before . ,(or `"->" `";"))
-     (and (smie-rule-bolp) (smie-rule-parent-p "(") (smie-rule-parent 1)))
-    (`(:after . ,(or `":-" `"->" `"-->")) prolog-indent-width)))
+     (and (smie-rule-bolp) (smie-rule-parent-p "(") (smie-rule-parent 0)))
+    (`(:after . ,(or `"->" `"*->"))
+     ;; We distinguish
+     ;;
+     ;;     (a ->
+     ;;          b;
+     ;;      c)
+     ;; and
+     ;;     (    a ->
+     ;;          b
+     ;;     ;    c)
+     ;;
+     ;; based on the space between the open paren and the "a".
+     (unless (and (smie-rule-parent-p "(")
+                  (save-excursion
+                    (smie-indent-forward-token)
+                    (smie-backward-sexp 'halfsexp)
+                    (not (eq ?\( (char-before)))))
+       prolog-indent-width))
+    (`(:after . ,(or `":-" `"-->")) prolog-indent-width)))
 
 
 ;;-------------------------------------------------------------------
@@ -1005,7 +1028,7 @@ VERSION is of the format (Major . Minor)"
   (setq-local comment-start "%")
   (setq-local comment-end "")
   (setq-local comment-add 1)
-  (setq-local comment-start-skip "\\(?:/\\*+ *\\|%%+ *\\)")
+  (setq-local comment-start-skip "\\(?:/\\*+ *\\|%+ *\\)")
   (setq-local parens-require-spaces nil)
   ;; Initialize Prolog system specific variables
   (dolist (var '(prolog-keywords prolog-types prolog-mode-specificators
@@ -1121,6 +1144,9 @@ Commands:
   (dolist (ar prolog-align-rules) (add-to-list 'align-rules-list ar))
   (add-hook 'post-self-insert-hook #'prolog-post-self-insert nil t)
   ;; `imenu' entry moved to the appropriate hook for consistency.
+  (when prolog-electric-dot-flag
+    (setq-local electric-indent-chars
+                (cons ?\. electric-indent-chars)))
 
   ;; Load SICStus debugger if suitable
   (if (and (eq prolog-system 'sicstus)
@@ -2060,7 +2086,7 @@ Argument BOUND is a buffer position limiting searching."
 (defun prolog-find-unmatched-paren ()
   "Return the column of the last unmatched left parenthesis."
   (save-excursion
-    (goto-char (or (car (nth 9 (syntax-ppss))) (point-min)))
+    (goto-char (or (nth 1 (syntax-ppss)) (point-min)))
     (current-column)))
 
 
@@ -2078,6 +2104,7 @@ whitespace characters, parentheses, or then/else 
branches."
   (when prolog-electric-if-then-else-flag
     (save-excursion
       (let ((regexp (concat "(\\|" prolog-left-indent-regexp))
+            (pos (point))
             level)
         (beginning-of-line)
         (skip-chars-forward " \t")
@@ -2087,6 +2114,9 @@ whitespace characters, parentheses, or then/else 
branches."
         ;;             prolog-paren-indent))
 
         ;; work on all subsequent "->", "(", ";"
+        (and (looking-at regexp)
+             (= pos (match-end 0))
+             (indent-according-to-mode))
         (while (looking-at regexp)
           (goto-char (match-end 0))
           (setq level (+ (prolog-find-unmatched-paren) prolog-paren-indent))
@@ -2357,7 +2387,7 @@ This function is only available when `prolog-system' is 
set to `swi'."
 (defun prolog-atom-under-point ()
   "Return the atom under or left to the point."
   (save-excursion
-    (let ((nonatom_chars "[](){},\. \t\n")
+    (let ((nonatom_chars "[](){},. \t\n")
           start)
       (skip-chars-forward (concat "^" nonatom_chars))
       (skip-chars-backward nonatom_chars)
@@ -2826,10 +2856,10 @@ objects (relevant only if `prolog-system' is set to 
`sicstus')."
                   (eq prolog-system 'sicstus)
                   (prolog-in-object))
              (format
-              "^\\(%s\\|%s\\|[^\n\'\"%%]\\)*&[ \t]*\\(\\|%%.*\\)$\\|[ \t]*}"
+              "^\\(%s\\|%s\\|[^\n'\"%%]\\)*&[ \t]*\\(\\|%%.*\\)$\\|[ \t]*}"
               prolog-quoted-atom-regexp prolog-string-regexp)
            (format
-            "^\\(%s\\|%s\\|[^\n\'\"%%]\\)*\\.[ \t]*\\(\\|%%.*\\)$"
+            "^\\(%s\\|%s\\|[^\n'\"%%]\\)*\\.[ \t]*\\(\\|%%.*\\)$"
             prolog-quoted-atom-regexp prolog-string-regexp))
          nil t)
         (if (and (nth 8 (syntax-ppss))
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 9528ffe..b641e30 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -620,6 +620,11 @@ The type returned can be `comment', `string' or `paren'."
    ((python-rx string-delimiter)
     (0 (ignore (python-syntax-stringify))))))
 
+(defconst python--prettify-symbols-alist
+  '(("lambda"  . ?λ)
+    ("and" . ?∧)
+    ("or" . ?∨)))
+
 (defsubst python-syntax-count-quotes (quote-char &optional point limit)
   "Count number of quotes around point (max is 3).
 QUOTE-CHAR is the quote char to count.  Optional argument POINT is
@@ -3635,12 +3640,18 @@ Never set this variable directly, use
   "Set the buffer for FILE-NAME as the tracked buffer.
 Internally it uses the `python-pdbtrack-tracked-buffer' variable.
 Returns the tracked buffer."
-  (let ((file-buffer (get-file-buffer
-                      (concat (file-remote-p default-directory)
-                              file-name))))
+  (let* ((file-name-prospect (concat (file-remote-p default-directory)
+                              file-name))
+         (file-buffer (get-file-buffer file-name-prospect)))
     (if file-buffer
         (setq python-pdbtrack-tracked-buffer file-buffer)
-      (setq file-buffer (find-file-noselect file-name))
+      (cond
+       ((file-exists-p file-name-prospect)
+        (setq file-buffer (find-file-noselect file-name-prospect)))
+       ((and (not (equal file-name file-name-prospect))
+             (file-exists-p file-name))
+        ;; Fallback to a locally available copy of the file.
+        (setq file-buffer (find-file-noselect file-name-prospect))))
       (when (not (member file-buffer python-pdbtrack-buffers-to-kill))
         (add-to-list 'python-pdbtrack-buffers-to-kill file-buffer)))
     file-buffer))
@@ -5098,6 +5109,9 @@ returned as is."
            "`outline-level' function for Python mode."
            (1+ (/ (current-indentation) python-indent-offset))))
 
+  (set (make-local-variable 'prettify-symbols-alist)
+       python--prettify-symbols-alist)
+
   (python-skeleton-add-menu-items)
 
   (make-local-variable 'python-shell-internal-buffer)
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 5d59a56..0933886 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -695,7 +695,7 @@ It is used when `ruby-encoding-magic-comment-style' is set 
to `custom'."
   (let ((index-alist '()) (case-fold-search nil)
         name next pos decl sing)
     (goto-char beg)
-    (while (re-search-forward "^\\s *\\(\\(class\\s +\\|\\(class\\s *<<\\s 
*\\)\\|module\\s +\\)\\([^\(<\n ]+\\)\\|\\(def\\|alias\\)\\s +\\([^\(\n 
]+\\)\\)" end t)
+    (while (re-search-forward "^\\s *\\(\\(class\\s +\\|\\(class\\s *<<\\s 
*\\)\\|module\\s +\\)\\([^(<\n ]+\\)\\|\\(def\\|alias\\)\\s +\\([^(\n ]+\\)\\)" 
end t)
       (setq sing (match-beginning 3))
       (setq decl (match-string 5))
       (setq next (match-end 0))
@@ -709,7 +709,7 @@ It is used when `ruby-encoding-magic-comment-style' is set 
to `custom'."
         (if prefix
             (setq name
                   (cond
-                   ((string-match "^self\." name)
+                   ((string-match "^self\\." name)
                     (concat (substring prefix 0 -1) (substring name 4)))
                   (t (concat prefix name)))))
         (push (cons name pos) index-alist)
@@ -1795,7 +1795,7 @@ If the result is do-end block, it will always be 
multiline."
       (setq content
             (if (equal string-quote "\"")
                 (replace-regexp-in-string "\\\\\"" "\"" 
(replace-regexp-in-string "\\([^\\\\]\\)'" "\\1\\\\'" content))
-              (replace-regexp-in-string "\\\\\'" "'" (replace-regexp-in-string 
"\\([^\\\\]\\)\"" "\\1\\\\\"" content))))
+              (replace-regexp-in-string "\\\\'" "'" (replace-regexp-in-string 
"\\([^\\\\]\\)\"" "\\1\\\\\"" content))))
       (let ((orig-point (point)))
         (delete-region min max)
         (insert
@@ -2007,7 +2007,8 @@ It will be properly highlighted even when the call omits 
parens.")
          (t
           (error (concat
                   "Internal error on `ruby-in-ppss-context-p': "
-                  "context name `" (symbol-name context) "' is unknown"))))
+                  "context name `%s' is unknown")
+                 context)))
         t)))
 
 (defvar ruby-font-lock-syntax-table
@@ -2192,7 +2193,7 @@ See `font-lock-syntax-table'.")
     ;; Constants.
     ("\\(?:\\_<\\|::\\)\\([A-Z]+\\(\\w\\|_\\)*\\)"
      1 (unless (eq ?\( (char-after)) font-lock-type-face))
-    ("\\(^\\s *\\|[\[\{\(,]\\s *\\|\\sw\\s +\\)\\(\\(\\sw\\|_\\)+\\):[^:]"
+    ("\\(^\\s *\\|[[{(,]\\s *\\|\\sw\\s +\\)\\(\\(\\sw\\|_\\)+\\):[^:]"
      (2 font-lock-constant-face))
     ;; Conversion methods on Kernel.
     (,(concat ruby-font-lock-keyword-beg-re
diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el
index a21bc19..e921e84 100644
--- a/lisp/progmodes/scheme.el
+++ b/lisp/progmodes/scheme.el
@@ -415,7 +415,7 @@ that variable's value is a string."
   (eval-when-compile
     (list
      ;; Similar to Scheme
-     (list "(\\(define\\(-\\w+\\)?\\)\\>[      ]*\\\((?\\)\\(\\sw+\\)\\>"
+     (list "(\\(define\\(-\\w+\\)?\\)\\>[      ]*\\((?\\)\\(\\sw+\\)\\>"
           '(1 font-lock-keyword-face)
           '(4 font-lock-function-name-face))
      (cons
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index 735c8f9..049c93d 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -347,7 +347,7 @@ naming the shell."
      . ((nil
         ;; function FOO
         ;; function FOO()
-         "^\\s-*function\\s-+\\\([[:alpha:]_][[:alnum:]_]*\\)\\s-*\\(?:()\\)?"
+         "^\\s-*function\\s-+\\([[:alpha:]_][[:alnum:]_]*\\)\\s-*\\(?:()\\)?"
          1)
        ;; FOO()
        (nil
@@ -374,7 +374,7 @@ For use in `add-log-current-defun-function'."
           (concat "\\(?:"
                   ;; function FOO
                   ;; function FOO()
-                  
"^\\s-*function\\s-+\\\([[:alpha:]_][[:alnum:]_]*\\)\\s-*\\(?:()\\)?"
+                  
"^\\s-*function\\s-+\\([[:alpha:]_][[:alnum:]_]*\\)\\s-*\\(?:()\\)?"
                   "\\)\\|\\(?:"
                   ;; FOO()
                   "^\\s-*\\([[:alpha:]_][[:alnum:]_]*\\)\\s-*()"
@@ -2319,7 +2319,7 @@ controls whether to query about making the visited file 
executable.
 
 Calls the value of `sh-set-shell-hook' if set."
   (interactive (list (completing-read
-                      (format "Shell \(default %s\): "
+                      (format "Shell (default %s): "
                               sh-shell-file)
                       ;; This used to use interpreter-mode-alist, but that is
                       ;; no longer appropriate now that uses regexps.
@@ -2810,15 +2810,15 @@ Return new point if successful, nil if an error 
occurred."
   "Return indent-info for this line.
 This is a list.  nil means the line is to be left as is.
 Otherwise it contains one or more of the following sublists:
-\(t NUMBER\)   NUMBER is the base location in the buffer that indentation is
+\(t NUMBER)   NUMBER is the base location in the buffer that indentation is
             relative to.  If present, this is always the first of the
             sublists.  The indentation of the line in question is
             derived from the indentation of this point, possibly
             modified by subsequent sublists.
-\(+ VAR\)
-\(- VAR\)      Get the value of variable VAR and add to or subtract from
+\(+ VAR)
+\(- VAR)      Get the value of variable VAR and add to or subtract from
             the indentation calculated so far.
-\(= VAR\)           Get the value of variable VAR and *replace* the
+\(= VAR)      Get the value of variable VAR and *replace* the
             indentation with its value.  This only occurs for
             special variables such as `sh-indent-comment'.
 STRING      This is ignored for the purposes of calculating
@@ -3086,7 +3086,7 @@ we go to the end of the previous line and do not check 
for continuations."
                (setq prev (point))
                ))
          ;; backward-sexp failed
-         (if (zerop (skip-chars-backward " \t()[\]{};`'"))
+         (if (zerop (skip-chars-backward " \t()[]{};`'"))
              (forward-char -1))
          (if (bolp)
              (let ((back (sh-prev-line nil)))
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index cbf65c0..abc99ee 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -360,7 +360,7 @@ file.  Since that is a plaintext file, this could be 
dangerous."
      :sqli-comint-func sql-comint-db2
      :prompt-regexp "^db2 => "
      :prompt-length 7
-     :prompt-cont-regexp "^db2 (cont\.) => "
+     :prompt-cont-regexp "^db2 (cont\\.) => "
      :input-filter sql-escape-newlines-filter)
 
     (informix
@@ -381,9 +381,9 @@ file.  Since that is a plaintext file, this could be 
dangerous."
      :sqli-options sql-ingres-options
      :sqli-login sql-ingres-login-params
      :sqli-comint-func sql-comint-ingres
-     :prompt-regexp "^\* "
+     :prompt-regexp "^\\* "
      :prompt-length 2
-     :prompt-cont-regexp "^\* ")
+     :prompt-cont-regexp "^\\* ")
 
     (interbase
      :name "Interbase"
@@ -491,7 +491,7 @@ file.  Since that is a plaintext file, this could be 
dangerous."
      :completion-object sql-sqlite-completion-object
      :prompt-regexp "^sqlite> "
      :prompt-length 8
-     :prompt-cont-regexp "^   \.\.\.> "
+     :prompt-cont-regexp "^   \\.\\.\\.> "
      :terminator ";")
 
     (sybase
@@ -525,7 +525,7 @@ highlighted and will not support `sql-interactive-mode'.
 
 Each element in the list is in the following format:
 
- \(PRODUCT FEATURE VALUE ...)
+ (PRODUCT FEATURE VALUE ...)
 
 where PRODUCT is the appropriate value of `sql-product'.  The
 product name is then followed by FEATURE-VALUE pairs.  If a
@@ -639,7 +639,7 @@ settings.")
   "An alist of connection parameters for interacting with a SQL product.
 Each element of the alist is as follows:
 
-  \(CONNECTION \(SQL-VARIABLE VALUE) ...)
+  (CONNECTION \(SQL-VARIABLE VALUE) ...)
 
 Where CONNECTION is a case-insensitive string identifying the
 connection, SQL-VARIABLE is the symbol name of a SQL mode
@@ -3897,14 +3897,14 @@ Here is an example for your init file.  It keeps the 
SQLi buffer a
 certain length.
 
 \(add-hook \\='sql-interactive-mode-hook
-    \(function (lambda ()
-        \(setq comint-output-filter-functions \\='comint-truncate-buffer))))
+    (function (lambda ()
+        (setq comint-output-filter-functions \\='comint-truncate-buffer))))
 
 Here is another example.  It will always put point back to the statement
 you entered, right above the output it created.
 
 \(setq comint-output-filter-functions
-       \(function (lambda (STR) (comint-show-output))))"
+       (function (lambda (STR) (comint-show-output))))"
   (delay-mode-hooks (comint-mode))
 
   ;; Get the `sql-product' for this interactive session.
diff --git a/lisp/progmodes/vera-mode.el b/lisp/progmodes/vera-mode.el
index 5f1cb53..bce56a4 100644
--- a/lisp/progmodes/vera-mode.el
+++ b/lisp/progmodes/vera-mode.el
@@ -259,7 +259,7 @@ Usage:
 
   INDENTATION:  Typing `TAB' at the beginning of a line indents the line.
     The amount of indentation is specified by option `vera-basic-offset'.
-    Indentation can be done for an entire region \(`M-C-\\') or buffer (menu).
+    Indentation can be done for an entire region (`M-C-\\') or buffer (menu).
     `TAB' always indents the line if option `vera-intelligent-tab' is nil.
 
   WORD/COMMAND COMPLETION:  Typing `TAB' after a (not completed) word looks
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index f83c676..489094b 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -123,7 +123,7 @@
 ;;
 
 ;; This variable will always hold the version number of the mode
-(defconst verilog-mode-version "2015-08-16-ce03c7a-vpo-GNU"
+(defconst verilog-mode-version "2015-09-18-314cf1d-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.")
@@ -841,7 +841,7 @@ first difference.")
     (verilog-xl-2
      "([WE][0-9A-Z]+)[ \t]+\\([^ \t\n,]+\\)[, \t]+\\(line[ 
\t]+\\)?\\([0-9]+\\):.*$" 1 3)
     (verilog-IES
-     ".*\\*[WE],[0-9A-Z]+\\(\[[0-9A-Z_,]+\]\\)? (\\([^ \t,]+\\),\\([0-9]+\\)" 
2 3)
+     ".*\\*[WE],[0-9A-Z]+\\(\\[[0-9A-Z_,]+\\]\\)? (\\([^ 
\t,]+\\),\\([0-9]+\\)" 2 3)
     (verilog-surefire-1
      "[^\n]*\\[\\([^:]+\\):\\([0-9]+\\)\\]" 1 2)
     (verilog-surefire-2
@@ -885,8 +885,8 @@ See `compilation-error-regexp-alist-alist' for the 
formatting.  For XEmacs.")
     ("([WE][0-9A-Z]+)[ \t]+\\([^ \t\n,]+\\)[, \t]+\\(line[ 
\t]+\\)?\\([0-9]+\\):.*$" 1 bold t)
     ("([WE][0-9A-Z]+)[ \t]+\\([^ \t\n,]+\\)[, \t]+\\(line[ 
\t]+\\)?\\([0-9]+\\):.*$" 3 bold t)
     ;; verilog-IES (nc-verilog)
-    (".*\\*[WE],[0-9A-Z]+\\(\[[0-9A-Z_,]+\]\\)? (\\([^ \t,]+\\),\\([0-9]+\\)|" 
2 bold t)
-    (".*\\*[WE],[0-9A-Z]+\\(\[[0-9A-Z_,]+\]\\)? (\\([^ \t,]+\\),\\([0-9]+\\)|" 
3 bold t)
+    (".*\\*[WE],[0-9A-Z]+\\(\\[[0-9A-Z_,]+\\]\\)? (\\([^ 
\t,]+\\),\\([0-9]+\\)|" 2 bold t)
+    (".*\\*[WE],[0-9A-Z]+\\(\\[[0-9A-Z_,]+\\]\\)? (\\([^ 
\t,]+\\),\\([0-9]+\\)|" 3 bold t)
     ;; verilog-surefire-1
     ("[^\n]*\\[\\([^:]+\\):\\([0-9]+\\)\\]" 1 bold t)
     ("[^\n]*\\[\\([^:]+\\):\\([0-9]+\\)\\]" 2 bold t)
@@ -2303,7 +2303,7 @@ find the errors."
        ;; non blocking assignment operator
        "<="
        ;; comparison
-       "==" "!=" "===" "!==" "<=" ">=" "==\?" "!=\?" "<->"
+       "==" "!=" "===" "!==" "<=" ">=" "==?" "!=?" "<->"
        ;; event_trigger
        "->" "->>"
        ;; property_expr
@@ -2469,7 +2469,7 @@ find the errors."
    "\\(\\<begin\\>\\)\\|"                       ; 1
    "\\(\\<else\\>\\)\\|"                        ; 2
    "\\(\\<end\\>\\s-+\\<else\\>\\)\\|"          ; 3
-   "\\(\\<always\\(?:_ff\\)?\\>\\(?:\[ address@hidden)\\)\\|"    ; 4 (matches 
always or always_ff w/ @...)
+   "\\(\\<always\\(?:_ff\\)?\\>\\(?:[ address@hidden)\\)\\|"    ; 4 (matches 
always or always_ff w/ @...)
    "\\(\\<always\\(?:_comb\\|_latch\\)?\\>\\)\\|"  ; 5 (matches always, 
always_comb, always_latch w/o @...)
    "\\(\\<fork\\>\\)\\|"                        ; 7
    "\\(\\<if\\>\\)\\|"
@@ -3194,10 +3194,10 @@ See also `verilog-font-lock-extra-types'.")
                                                       
'font-lock-preprocessor-face
                                                     'font-lock-type-face))
                 ;; Fontify delays/numbers
-                '("\\(@\\)\\|\\([ 
\t\n\f\r]#\\s-*\\(\\(\[0-9_.\]+\\('s?[hdxbo][0-9a-fA-F_xz]*\\)?\\)\\|\\(([^()]+)\\|\\sw+\\)\\)\\)"
+                '("\\(@\\)\\|\\([ 
\t\n\f\r]#\\s-*\\(\\([0-9_.]+\\('s?[hdxbo][0-9a-fA-F_xz]*\\)?\\)\\|\\(([^()]+)\\|\\sw+\\)\\)\\)"
                   0 font-lock-type-face append)
      ;; Fontify property/sequence cycle delays - these start with '##'
-     '("\\(##\\(\\sw+\\|\\[[^\]]+\\]\\)\\)"
+     '("\\(##\\(\\sw+\\|\\[[^]]+\\]\\)\\)"
        0 font-lock-type-face append)
                 ;; Fontify instantiation names
                 '("\\([A-Za-z][A-Za-z0-9_]*\\)\\s-*(" 1 
font-lock-function-name-face)
@@ -3442,7 +3442,7 @@ Use filename, if current buffer being edited shorten to 
just buffer name."
   (verilog-forward-sexp))
 
 (defun verilog-forward-sexp-function (arg)
-  "Move forward a sexp."
+  "Move forward ARG sexps."
   ;; Used by hs-minor-mode
   (if (< arg 0)
       (verilog-backward-sexp)
@@ -3936,7 +3936,7 @@ With optional ARG, remove existing end of line comments."
 (defun electric-verilog-semi-with-comment ()
   "Insert `;' character, reindent the line and indent for comment."
   (interactive)
-  (insert "\;")
+  (insert ";")
   (save-excursion
     (beginning-of-line)
     (verilog-indent-line))
@@ -4072,7 +4072,7 @@ if it reaches the end of the buffer."
 The upper left corner is defined by point.  Indices begin with 0
 and extend to the MAX - 1.  If no prefix arg is given, the user
 is prompted for a value.  The indices are surrounded by square
-brackets \[].  For example, the following code with the point
+brackets [].  For example, the following code with the point
 located after the first 'a' gives:
 
     a = b                           a[  0] = b
@@ -5072,7 +5072,7 @@ Useful for creating tri's and other expanded fields."
     (if (verilog-within-string)
        (re-search-forward "\"" nil t)
       (if (verilog-in-star-comment-p)
-         (re-search-forward "\*/" nil t)
+         (re-search-forward "\\*/" nil t)
        (let ((bpt (- (point) 2)))
          (end-of-line)
          (delete-region bpt (point))))))
@@ -5184,7 +5184,7 @@ becomes:
                  (t
                   )))
                ((verilog-in-star-comment-p)
-                (re-search-backward "/\*")
+                (re-search-backward "/\\*")
                 (insert (format " // surefire lint_off_line %6s" code )))
                (t
                 (insert (format " // surefire lint_off_line %6s" code ))
@@ -5301,8 +5301,8 @@ Save the result unless optional NO-SAVE is t."
                 (save-excursion
                   (if (not (file-exists-p (buffer-file-name buf)))
                       (error
-                       (concat "File not found: " (buffer-file-name buf))))
-                  (message (concat "Processing " (buffer-file-name buf)))
+                       "File not found: %s" (buffer-file-name buf)))
+                  (message "Processing %s" (buffer-file-name buf))
                   (set-buffer buf)
                   (funcall funref)
                   (when (and (not no-save)
@@ -6054,7 +6054,7 @@ Optional BOUND limits search."
                (verilog-re-search-backward "//" nil 'move)
                 (skip-chars-backward "/"))
                ((nth 4 state)  ; in /* */ comment
-               (verilog-re-search-backward "/\*" nil 'move))))
+               (verilog-re-search-backward "/\\*" nil 'move))))
            (narrow-to-region bound (point))
            (while (/= here (point))
              (setq here (point))
@@ -6092,7 +6092,7 @@ Optional BOUND limits search."
                (skip-chars-forward " \t\n\f")
                )
                ((nth 4 state)  ; in /* */ comment
-               (verilog-re-search-forward "\*\/\\s-*" nil 'move))))
+               (verilog-re-search-forward "\\*/\\s-*" nil 'move))))
            (narrow-to-region (point) bound)
            (while (/= here (point))
              (setq here (point)
@@ -6673,7 +6673,7 @@ Do not count named blocks or case-statements."
               (save-excursion
                 (forward-line -1)
                 (skip-chars-forward " \t")
-                (looking-at "\*")))
+                (looking-at "\\*")))
          (insert "* ")))))
 
 (defun verilog-comment-indent (&optional _arg)
@@ -7078,7 +7078,7 @@ Region is defined by B and EDPOS."
                (beginning-of-line)
                (point-marker)
              (end-of-line))))
-      (if (re-search-backward " /\\* \[#-\]# \[a-zA-Z\]+ \[0-9\]+ ## \\*/" b t)
+      (if (re-search-backward " /\\* [#-]# [a-zA-Z]+ [0-9]+ ## \\*/" b t)
          (progn
            (replace-match " /* -#  ## */")
            (end-of-line))
@@ -8074,9 +8074,9 @@ 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 "
-                                 sv-name bus
-                                 ", the AUTOs may be wrong")))
+                (message (concat "Warning, can't merge into single bus %s%s"
+                                 ", the AUTOs may be wrong")
+                         sv-name bus))
               (setq buswarn ", Couldn't Merge"))
             (if (verilog-sig-comment sig) (setq combo ", ..."))
             (setq sv-memory (or sv-memory (verilog-sig-memory sig))
@@ -8129,7 +8129,8 @@ Tieoff value uses `verilog-active-low-regexp' and
 ;;
 
 (defun verilog-decls-princ (decls &optional header prefix)
-  "For debug, dump the `verilog-read-decls' structure DECLS."
+  "For debug, dump the `verilog-read-decls' structure DECLS.
+Use optional HEADER and PREFIX."
   (when decls
     (if header (princ header))
     (setq prefix (or prefix ""))
@@ -8173,7 +8174,7 @@ Tieoff value uses `verilog-active-low-regexp' and
        (princ "\n")))))
 
 (defun verilog-modport-princ (modports &optional header prefix)
-  "For debug, dump internal MODPORT structures, with HEADER and PREFIX."
+  "For debug, dump internal MODPORTS structures, with HEADER and PREFIX."
   (when modports
     (if header (princ header))
     (while modports
@@ -8196,32 +8197,32 @@ Tieoff value uses `verilog-active-low-regexp' and
   (verilog-backward-open-paren)
   (let (done)
     (while (not done)
-      (verilog-re-search-backward-quick "\\()\\|\\b[a-zA-Z0-9`_\$]\\|\\]\\)" 
nil nil)  ; ] isn't word boundary
+      (verilog-re-search-backward-quick "\\()\\|\\b[a-zA-Z0-9`_$]\\|\\]\\)" 
nil nil)  ; ] isn't word boundary
       (cond ((looking-at ")")
              (verilog-backward-open-paren))
             (t (setq done t)))))
   (while (looking-at "\\]")
     (verilog-backward-open-bracket)
-    (verilog-re-search-backward-quick "\\(\\b[a-zA-Z0-9`_\$]\\|\\]\\)" nil 
nil))
+    (verilog-re-search-backward-quick "\\(\\b[a-zA-Z0-9`_$]\\|\\]\\)" nil nil))
   (skip-chars-backward "a-zA-Z0-9`_$"))
 
 (defun verilog-read-inst-module-matcher ()
   "Set match data 0 with module_name when point is inside instantiation."
   (verilog-read-inst-backward-name)
   ;; Skip over instantiation name
-  (verilog-re-search-backward-quick "\\(\\b[a-zA-Z0-9`_\$]\\|)\\)" nil nil)  ; 
) isn't word boundary
+  (verilog-re-search-backward-quick "\\(\\b[a-zA-Z0-9`_$]\\|)\\)" nil nil)  ; 
) isn't word boundary
   ;; Check for parameterized instantiations
   (when (looking-at ")")
     (verilog-backward-open-paren)
-    (verilog-re-search-backward-quick "\\b[a-zA-Z0-9`_\$]" nil nil))
+    (verilog-re-search-backward-quick "\\b[a-zA-Z0-9`_$]" nil nil))
   (skip-chars-backward "a-zA-Z0-9'_$")
   ;; #1 is legal syntax for gate primitives
   (when (save-excursion
          (verilog-backward-syntactic-ws-quick)
          (eq ?# (char-before)))
-    (verilog-re-search-backward-quick "\\b[a-zA-Z0-9`_\$]" nil nil)
+    (verilog-re-search-backward-quick "\\b[a-zA-Z0-9`_$]" nil nil)
     (skip-chars-backward "a-zA-Z0-9'_$"))
-  (looking-at "[a-zA-Z0-9`_\$]+")
+  (looking-at "[a-zA-Z0-9`_$]+")
   ;; Important: don't use match string, this must work with Emacs 19 font-lock 
on
   (buffer-substring-no-properties (match-beginning 0) (match-end 0))
   ;; Caller assumes match-beginning/match-end is still set
@@ -8236,7 +8237,7 @@ Tieoff value uses `verilog-active-low-regexp' and
   "Return instance_name when point is inside instantiation."
   (save-excursion
     (verilog-read-inst-backward-name)
-    (looking-at "[a-zA-Z0-9`_\$]+")
+    (looking-at "[a-zA-Z0-9`_$]+")
     ;; Important: don't use match string, this must work with Emacs 19 
font-lock on
     (buffer-substring-no-properties (match-beginning 0) (match-end 0))))
 
@@ -8247,7 +8248,7 @@ Tieoff value uses `verilog-active-low-regexp' and
     ;; Due to "module x import y (" we must search for declaration begin
     (verilog-re-search-backward-quick verilog-defun-re nil nil)
     (goto-char (match-end 0))
-    (verilog-re-search-forward-quick "\\b[a-zA-Z0-9`_\$]+" nil nil)
+    (verilog-re-search-forward-quick "\\b[a-zA-Z0-9`_$]+" nil nil)
     ;; Important: don't use match string, this must work with Emacs 19 
font-lock on
     (verilog-symbol-detick
      (buffer-substring-no-properties (match-beginning 0) (match-end 0)) t)))
@@ -8257,7 +8258,7 @@ Tieoff value uses `verilog-active-low-regexp' and
   (save-excursion
     (verilog-read-inst-backward-name)
     ;; Skip over instantiation name
-    (verilog-re-search-backward-quick "\\(\\b[a-zA-Z0-9`_\$]\\|)\\)" nil nil)  
; ) isn't word boundary
+    (verilog-re-search-backward-quick "\\(\\b[a-zA-Z0-9`_$]\\|)\\)" nil nil)  
; ) isn't word boundary
     ;; If there are parameterized instantiations
     (when (looking-at ")")
       (let ((end-pt (point))
@@ -8265,9 +8266,9 @@ Tieoff value uses `verilog-active-low-regexp' and
            param-name paren-beg-pt param-value)
        (verilog-backward-open-paren)
        (while (verilog-re-search-forward-quick "\\." end-pt t)
-         (verilog-re-search-forward-quick "\\([a-zA-Z0-9`_\$]\\)" nil nil)
+         (verilog-re-search-forward-quick "\\([a-zA-Z0-9`_$]\\)" nil nil)
          (skip-chars-backward "a-zA-Z0-9'_$")
-         (looking-at "[a-zA-Z0-9`_\$]+")
+         (looking-at "[a-zA-Z0-9`_$]+")
          (setq param-name (buffer-substring-no-properties
                            (match-beginning 0) (match-end 0)))
          (verilog-re-search-forward-quick "(" nil nil)
@@ -8666,7 +8667,7 @@ Return an array of [outputs inouts inputs wire reg assign 
const]."
 
 (defun verilog-read-sub-decls-expr (submoddecls comment port expr)
   "For `verilog-read-sub-decls-line', parse a subexpression and add signals."
-  ;;(message "vrsde: ‘%s’" expr)
+  ;;(message "vrsde: `%s'" expr)
   ;; Replace special /*[....]*/ comments inserted by verilog-auto-inst-port
   (setq expr (verilog-string-replace-matches "/\\*\\(\\[[^*]+\\]\\)\\*/" "\\1" 
nil nil expr))
   ;; Remove front operators
@@ -8685,25 +8686,25 @@ Return an array of [outputs inouts inputs wire reg 
assign const]."
     (let (sig vec multidim)
       ;; Remove leading reduction operators, etc
       (setq expr (verilog-string-replace-matches "^\\s-*[---+~!|&]+\\s-*" "" 
nil nil expr))
-      ;;(message "vrsde-ptop: ‘%s’" expr)
+      ;;(message "vrsde-ptop: `%s'" expr)
       (cond  ; Find \signal. Final space is part of escaped signal name
        ((string-match "^\\s-*\\(\\\\[^ \t\n\f]+\\s-\\)" expr)
-       ;;(message "vrsde-s: ‘%s’" (match-string 1 expr))
+       ;;(message "vrsde-s: `%s'" (match-string 1 expr))
        (setq sig (match-string 1 expr)
              expr (substring expr (match-end 0))))
        ;; Find signal
        ((string-match "^\\s-*\\([a-zA-Z_][a-zA-Z_0-9]*\\)" expr)
-       ;;(message "vrsde-s: ‘%s’" (match-string 1 expr))
+       ;;(message "vrsde-s: `%s'" (match-string 1 expr))
        (setq sig (verilog-string-remove-spaces (match-string 1 expr))
              expr (substring expr (match-end 0)))))
       ;; Find [vector] or [multi][multi][multi][vector]
       (while (string-match "^\\s-*\\(\\[[^]]+\\]\\)" expr)
-       ;;(message "vrsde-v: ‘%s’" (match-string 1 expr))
+       ;;(message "vrsde-v: `%s'" (match-string 1 expr))
        (when vec (setq multidim (cons vec multidim)))
        (setq vec (match-string 1 expr)
              expr (substring expr (match-end 0))))
       ;; If found signal, and nothing unrecognized, add the signal
-      ;;(message "vrsde-rem: ‘%s’" expr)
+      ;;(message "vrsde-rem: `%s'" expr)
       (when (and sig (string-match "^\\s-*$" expr))
        (verilog-read-sub-decls-sig submoddecls comment port sig vec 
multidim))))))
 
@@ -9324,8 +9325,8 @@ warning message, you need to add to your init file:
        (let ((fns (verilog-library-filenames filename (buffer-file-name))))
          (if fns
              (set-buffer (find-file-noselect (car fns)))
-           (error (concat (verilog-point-text)
-                          ": Can't find verilog-read-defines file: " 
filename)))))
+           (error "%s: Can't find verilog-read-defines file: %s"
+                  (verilog-point-text) filename))))
       (when recurse
        (goto-char (point-min))
        (while (re-search-forward "^\\s-*`include\\s-+\\([^ \t\n\f]+\\)" nil t)
@@ -9506,8 +9507,8 @@ Some macros and such are also found and included.  For 
dinotrace.el."
          line)
       (if fns
          (set-buffer (find-file-noselect (car fns)))
-       (error (concat (verilog-point-text)
-                      ": Can't find verilog-getopt-file -f file: " filename)))
+       (error "%s: Can't find verilog-getopt-file -f file: %s"
+              (verilog-point-text) filename))
       (goto-char (point-min))
       (while (not (eobp))
        (setq line (buffer-substring (point) (point-at-eol)))
@@ -9674,7 +9675,7 @@ If undefined, and WING-IT, return just SYMBOL without the 
tick, else nil."
     ;; something like a[b].  Sorry, it should be substituted into the parser
     (setq symbol
          (verilog-string-replace-matches
-          "\[[^0-9: \t]+\]" "" nil nil
+          "\\[[^0-9: \t]+\\]" "" nil nil
           (or (verilog-symbol-detick symbol nil)
               (if verilog-auto-sense-defines-constant
                   "0"
@@ -9709,7 +9710,8 @@ Or, just the existing dirnames themselves if there are no 
wildcards."
   ;; Note this function is performance critical.
   ;; Do not call anything that requires disk access that cannot be cached.
   (interactive)
-  (unless dirnames (error "`verilog-library-directories' should include at 
least '.'"))
+  (unless dirnames
+    (error "`verilog-library-directories' should include at least `.'"))
   (setq dirnames (reverse dirnames))   ; not nreverse
   (let ((dirlist nil)
        pattern dirfile dirfiles dirname root filename rest basefile)
@@ -9888,17 +9890,18 @@ Return modi if successful, else print message unless 
IGNORE-ERROR is true."
                 (if (not (setq mif (verilog-module-inside-filename-p realname 
(car filenames))))
                     (setq filenames (cdr filenames))))
               ;; mif has correct form to become later elements of modi
-              (cond (mif (setq modi mif))
-                    (t (setq modi nil)
-                       (or ignore-error
-                           (error (concat (verilog-point-text)
-                                          ": Can't locate " module " module 
definition"
-                                          (if (not (equal module realname))
-                                              (concat " (Expanded macro to " 
realname ")")
-                                            "")
-                                          "\n    Check the 
verilog-library-directories variable."
-                                          "\n    I looked in (if not listed, 
doesn't exist):\n\t"
-                                          (mapconcat 'concat orig-filenames 
"\n\t"))))))
+              (setq modi mif)
+              (or mif ignore-error
+                  (error
+                   (concat
+                    "%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
+                   (if (not (equal module realname))
+                       (concat " (Expanded macro to " realname ")")
+                     "")
+                   (mapconcat 'concat orig-filenames "\n\t")))
               (when (eval-when-compile (fboundp 'make-hash-table))
                 (unless verilog-modi-lookup-cache
                   (setq verilog-modi-lookup-cache
@@ -9994,16 +9997,17 @@ and invalidating the cache."
 
 
 (defun verilog-modi-modport-lookup-one (modi name &optional ignore-error)
-  "Given a MODI, return the declarations related to the given modport NAME."
+  "Given a MODI, return the declarations related to the given modport NAME.
+Report errors unless optional IGNORE-ERROR."
   ;; Recursive routine - see below
   (let* ((realname (verilog-symbol-detick name t))
         (modport (assoc name (verilog-decls-get-modports 
(verilog-modi-get-decls modi)))))
     (or modport ignore-error
-       (error (concat (verilog-point-text)
-                      ": Can't locate " name " modport definition"
-                      (if (not (equal name realname))
-                          (concat " (Expanded macro to " realname ")")
-                        ""))))
+       (error "%s: Can't locate %s modport definition%s"
+               (verilog-point-text) name
+               (if (not (equal name realname))
+                   (concat " (Expanded macro to " realname ")")
+                 "")))
     (let* ((decls (verilog-modport-decls modport))
           (clks (verilog-modport-clockings modport)))
       ;; Now expand any clocking's
@@ -10641,7 +10645,7 @@ Typing \\[verilog-inject-auto] will make this into:
   (save-excursion
     (goto-char (point-min))
     ;; It's hard to distinguish modules; we'll instead search for pins.
-    (while (verilog-re-search-forward-quick "\\.\\s *[a-zA-Z0-9`_\$]+\\s *(\\s 
*[a-zA-Z0-9`_\$]+\\s *)" nil t)
+    (while (verilog-re-search-forward-quick "\\.\\s *[a-zA-Z0-9`_$]+\\s *(\\s 
*[a-zA-Z0-9`_$]+\\s *)" nil t)
       (verilog-backward-open-paren)  ; Inst start
       (cond
        ((= (preceding-char) ?\#)  ; #(...) parameter section, not pin.  Skip.
@@ -10656,7 +10660,7 @@ Typing \\[verilog-inject-auto] will make this into:
                (t
                 ;; Delete identical interconnect
                  (let ((case-fold-search nil))  ; So we don't convert 
upper-to-lower, etc
-                  (while (verilog-re-search-forward-quick "\\.\\s 
*\\([a-zA-Z0-9`_\$]+\\)*\\s *(\\s *\\1\\s *)\\s *" end-pt t)
+                  (while (verilog-re-search-forward-quick "\\.\\s 
*\\([a-zA-Z0-9`_$]+\\)*\\s *(\\s *\\1\\s *)\\s *" end-pt t)
                     (delete-region (match-beginning 0) (match-end 0))
                      (setq end-pt (- end-pt (- (match-end 0) (match-beginning 
0))))  ; Keep it correct
                     (while (or (looking-at "[ \t\n\f,]+")
@@ -11397,12 +11401,12 @@ Multiple Module Templates:
   instantiation name.
 
   If a regular expression is provided, the @ character will be replaced
-  with the first \(\) grouping that matches against the cell name.  Using a
-  regexp of \"\\([0-9]+\\)\" provides identical values for @ as when no
+  with the first () grouping that matches against the cell name.  Using a
+  regexp of `\\([0-9]+\\)' provides identical values for @ as when no
   regexp is provided.  If you use multiple layers of parenthesis,
-  \"test\\([^0-9]+\\)_\\([0-9]+\\)\" would replace @ with non-number
+  `test\\([^0-9]+\\)_\\([0-9]+\\)' would replace @ with non-number
   characters after test and before _, whereas
-  \"\\(test\\([a-z]+\\)_\\([0-9]+\\)\\)\" would replace @ with the entire
+  `\\(test\\([a-z]+\\)_\\([0-9]+\\)\\)' would replace @ with the entire
   match.
 
   For example:
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index 19a7e97..9ee4ab5 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -268,7 +268,7 @@ Overrides local variable `indent-tabs-mode'."
     ;; ** Error: adder.vhd(190): Unknown identifier: ctl_numb
     ("ModelSim" "vcom" "-93 -work \\1" "make" "-f \\1"
      nil "vlib \\1; vmap \\2 \\1" "./" "work/" "Makefile" "modelsim"
-     ("^\\(ERROR\\|WARNING\\|\\*\\* Error\\|\\*\\* Warning\\)[^:]*:\\( 
*\[[0-9]+\]\\)? \\([^ \t\n]+\\)(\\([0-9]+\\)):" 3 4 nil) ("" 0)
+     ("^\\(ERROR\\|WARNING\\|\\*\\* Error\\|\\*\\* Warning\\)[^:]*:\\( 
*\\[[0-9]+]\\)? \\([^ \t\n]+\\)(\\([0-9]+\\)):" 3 4 nil) ("" 0)
      ("\\1/_primary.dat" "\\2/\\1.dat" "\\1/_primary.dat"
       "\\1/_primary.dat" "\\1/body.dat" downcase))
     ;; ProVHDL, Synopsys LEDA: provhdl -w work -f test.vhd
@@ -315,7 +315,7 @@ Overrides local variable `indent-tabs-mode'."
     ;;     ERROR[11]::File test.vhd Line 100: Use of undeclared identifier
     ("Speedwave" "analyze" "-libfile vsslib.ini -src" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "speedwave"
-     ("^ *ERROR\[[0-9]+\]::File \\([^ \t\n]+\\) Line \\([0-9]+\\):" 1 2 nil) 
("" 0)
+     ("^ *ERROR\\[[0-9]+]::File \\([^ \t\n]+\\) Line \\([0-9]+\\):" 1 2 nil) 
("" 0)
      nil)
     ;; Synopsys, VHDL Analyzer (sim): vhdlan -nc test.vhd
     ;; **Error: vhdlan,703 test.vhd(22): OTHERS is not legal in this context.
@@ -364,7 +364,7 @@ Overrides local variable `indent-tabs-mode'."
     ;; ERROR:HDLParsers:164 - "test.vhd" Line 3. parse error
     ("Xilinx XST" "xflow" "" "make" "-f \\1"
      nil "mkdir \\1" "./" "work/" "Makefile" "xilinx"
-     ("^ERROR:HDLParsers:[0-9]+ - \"\\([^ \t\n]+\\)\" Line \\([0-9]+\\)\." 1 2 
nil) ("" 0)
+     ("^ERROR:HDLParsers:[0-9]+ - \"\\([^ \t\n]+\\)\" Line \\([0-9]+\\)\\." 1 
2 nil) ("" 0)
      nil)
     )
   "List of available VHDL compilers and their properties.
@@ -376,8 +376,8 @@ Compiler:
   Make command     : command used for compilation using a Makefile
   Make options     : make options (\"\\1\" inserts Makefile name)
   Generate Makefile: use built-in function or command to generate a Makefile
-                     \(\"\\1\" inserts Makefile name, \"\\2\" inserts library 
name)
-  Library command  : command to create library directory \(\"\\1\" inserts
+                     (\"\\1\" inserts Makefile name, \"\\2\" inserts library 
name)
+  Library command  : command to create library directory (\"\\1\" inserts
                      library directory, \"\\2\" inserts library name)
   Compile directory: where compilation is run and the Makefile is placed
   Library directory: directory of default library
@@ -519,9 +519,9 @@ with other user Makefiles."
 Allows you to insert user specific parts into a Makefile.
 
 Example:
-  \(lambda nil
-    \(re-search-backward \"^# Rule for compiling entire design\")
-    \(insert \"# My target\\n\\n.MY_TARGET :\\n\\n\\n\"))"
+  (lambda nil
+    (re-search-backward \"^# Rule for compiling entire design\")
+    (insert \"# My target\\n\\n.MY_TARGET :\\n\\n\\n\"))"
   :type 'hook
   :group 'vhdl-compile)
 
@@ -573,7 +573,7 @@ Is overwritten by project settings if a project is active."
                         \"\\3\" project-specific options)
       - Do not compile: do not compile this file (in Makefile)
   Compile directory: where compilation is run and the Makefile is placed
-                     \(\"\\1\" inserts compiler ID string)
+                     (\"\\1\" inserts compiler ID string)
   Library name     : name of library (default is \"work\")
   Library directory: path to library (\"\\1\" inserts compiler ID string)
   Makefile name    : name of Makefile
@@ -997,7 +997,7 @@ if the header needs to be version controlled.
 The following keywords for template generation are supported:
   <filename>    : replaced by the name of the buffer
   <author>      : replaced by the user name and email address
-                  \(`user-full-name',`mail-host-address', `user-mail-address')
+                  (`user-full-name',`mail-host-address', `user-mail-address')
   <authorfull>  : replaced by the user full name (`user-full-name')
   <login>       : replaced by user login name (`user-login-name')
   <company>     : replaced by contents of option `vhdl-company-name'
@@ -1678,8 +1678,8 @@ syntax (as regular expression) are highlighted in the 
corresponding color.
 
   Name         : string of words and spaces
   Regexp       : regular expression describing word syntax
-                 (e.g. \"\\\\=\<\\\w+_c\\\\=\>\" matches word with suffix 
\"_c\")
-                 expression must start with \"\\\\=\<\" and end with 
\"\\\\=\>\"
+                 (e.g., `\\=\\<\\w+_c\\>' matches word with suffix `_c')
+                 expression must start with `\\=\\<' and end with `\\>'
                  if only whole words should be matched (no substrings)
   Color (light): foreground color for light background
                  (matching color examples: Gold3, Grey50, LimeGreen, Tomato,
@@ -1690,14 +1690,14 @@ syntax (as regular expression) are highlighted in the 
corresponding color.
   In comments  : If non-nil, words are also highlighted inside comments
 
 Can be used for visual support of naming conventions, such as highlighting
-different kinds of signals (e.g. \"Clk50\", \"Rst_n\") or objects (e.g.
-\"Signal_s\", \"Variable_v\", \"Constant_c\") by distinguishing them using
+different kinds of signals (e.g. `Clk50', `Rst_n') or objects (e.g.
+`Signal_s', `Variable_v', `Constant_c') by distinguishing them using
 common substrings or name suffices.
 For each entry, a new face is generated with the specified colors and name
-\"vhdl-font-lock-\" + name + \"-face\".
+`vhdl-font-lock-' + name + `-face'.
 
 NOTE: Activate a changed regexp in a VHDL buffer by re-fontifying it (menu
-      entry \"Fontify Buffer\").  All other changes require restarting Emacs."
+      entry `Fontify Buffer').  All other changes require restarting Emacs."
   :type '(repeat (list :tag "Face" :indent 2
                       (string :tag "Name         ")
                       (regexp :tag "Regexp       " "\\w+_")
@@ -4323,7 +4323,7 @@ Usage:
   TEMPLATE INSERTION (electrification):
     After typing a VHDL keyword and entering `SPC', you are prompted for
     arguments while a template is generated for that VHDL construct.  Typing
-    `RET' or `C-g' at the first \(mandatory) prompt aborts the current
+    `RET' or `C-g' at the first (mandatory) prompt aborts the current
     template generation.  Optional arguments are indicated by square
     brackets and removed if the queried string is left empty.  Prompts for
     mandatory arguments remain in the code if the queried string is left
@@ -4342,7 +4342,7 @@ Usage:
     conf, comp, cons, func, inst, pack, sig, var.
 
       Template styles can be customized in customization group
-    `vhdl-template' \(see OPTIONS).
+    `vhdl-template' (see OPTIONS).
 
 
   HEADER INSERTION:
@@ -4373,7 +4373,7 @@ Usage:
       Typing `TAB' after `(' looks for and inserts complete parenthesized
     expressions (e.g. for array index ranges).  All keywords as well as
     standard types and subprograms of VHDL have predefined abbreviations
-    \(e.g. type \"std\" and `TAB' will toggle through all standard types
+    (e.g., type \"std\" and `TAB' will toggle through all standard types
     beginning with \"std\").
 
       Typing `TAB' after a non-word character indents the line if at the
@@ -4417,7 +4417,7 @@ Usage:
     the entire region.
 
       Indentation can be done for a group of lines (`C-c C-i C-g'), a region
-    \(`M-C-\\') or the entire buffer (menu).  Argument and port lists are
+    (`M-C-\\') or the entire buffer (menu).  Argument and port lists are
     indented normally (nil) or relative to the opening parenthesis (non-nil)
     according to option `vhdl-argument-list-indent'.
 
@@ -4563,7 +4563,7 @@ Usage:
     Enables simple structural composition.  `C-c C-m C-n' creates a skeleton
     for a new component.  Subcomponents (i.e. component declaration and
     instantiation) can be automatically placed from a previously read port
-    \(`C-c C-m C-p') or directly from the hierarchy browser (`P').  Finally,
+    (`C-c C-m C-p') or directly from the hierarchy browser (`P').  Finally,
     all subcomponents can be automatically connected using internal signals
     and ports (`C-c C-m C-w') following these rules:
       - subcomponent actual ports with same name are considered to be
@@ -4763,7 +4763,7 @@ Usage:
           Insert them once manually (will be kept afterwards).
         - Out parameters of procedures are considered to be read.
       Use option `vhdl-entity-file-name' to specify the entity file name
-      \(used to obtain the port names).
+      (used to obtain the port names).
       Use option `vhdl-array-index-record-field-in-sensitivity-list' to
       specify whether to include array indices and record fields in
       sensitivity lists.
@@ -4771,12 +4771,12 @@ Usage:
 
   CODE FIXING:
     `C-c C-x C-p' fixes the closing parenthesis of a generic/port clause
-    \(e.g. if the closing parenthesis is on the wrong line or is missing).
+    (e.g., if the closing parenthesis is on the wrong line or is missing).
 
 
   PRINTING:
     PostScript printing with different faces (an optimized set of faces is
-    used if `vhdl-print-customize-faces' is non-nil) or colors \(if
+    used if `vhdl-print-customize-faces' is non-nil) or colors (if
     `ps-print-color-p' is non-nil) is possible using the standard Emacs
     PostScript printing commands.  Option `vhdl-print-two-column' defines
     appropriate default settings for nice landscape two-column printing.
@@ -4808,7 +4808,7 @@ Usage:
     automatically recognized as VHDL source files.  To add an extension
     \".xxx\", add the following line to your Emacs start-up file (`.emacs'):
 
-      \(push \\='(\"\\\\.xxx\\\\\\='\" . vhdl-mode) auto-mode-alist)
+      (push \\='(\"\\\\.xxx\\\\\\='\" . vhdl-mode) auto-mode-alist)
 
 
   HINTS:
@@ -4895,7 +4895,7 @@ Key bindings:
            (syntax-propertize-rules
             ;; Mark single quotes as having string quote syntax in
             ;; 'c' instances.
-            ("\\(\'\\).\\(\'\\)" (1 "\"'") (2 "\"'"))))
+            ("\\('\\).\\('\\)" (1 "\"'") (2 "\"'"))))
     (set (make-local-variable 'font-lock-syntactic-keywords)
          vhdl-font-lock-syntactic-keywords))
   (unless vhdl-emacs-21
@@ -6707,7 +6707,7 @@ search, and an argument indicating an interactive call."
   (re-search-forward vhdl-e-o-s-re))
 
 (defconst vhdl-b-o-s-re
-  (concat ";[^_]\\|\([^_]\\|\)[^_]\\|\\bwhen\\b[^_]\\|"
+  (concat ";[^_]\\|([^_]\\|)[^_]\\|\\bwhen\\b[^_]\\|"
          vhdl-begin-bwd-re "\\|" vhdl-statement-bwd-re))
 
 (defun vhdl-beginning-of-statement-1 (&optional lim)
@@ -8061,25 +8061,25 @@ end of line, do nothing in comments and strings."
     (setq end (point-marker))
     ;; have no space before and one space after `,' and ';'
     (goto-char beg)
-    (while (re-search-forward 
"\\(--.*\n\\|\"[^\"\n]*[\"\n]\\|\'.\'\\|\\\\[^\\\n]*[\\\n]\\)\\|\\(\\s-*\\([,;]\\)\\)"
 end t)
+    (while (re-search-forward 
"\\(--.*\n\\|\"[^\"\n]*[\"\n]\\|'.'\\|\\\\[^\\\n]*[\\\n]\\)\\|\\(\\s-*\\([,;]\\)\\)"
 end t)
       (if (match-string 1)
          (goto-char (match-end 1))
        (replace-match "\\3 " nil nil nil 2)))
     ;; have no space after `('
     (goto-char beg)
-    (while (re-search-forward 
"\\(--.*\n\\|\"[^\"\n]*[\"\n]\\|\'.\'\\|\\\\[^\\\n]*[\\\n]\\)\\|\\((\\)\\s-+" 
end t)
+    (while (re-search-forward 
"\\(--.*\n\\|\"[^\"\n]*[\"\n]\\|'.'\\|\\\\[^\\\n]*[\\\n]\\)\\|\\((\\)\\s-+" end 
t)
       (if (match-string 1)
          (goto-char (match-end 1))
        (replace-match "\\2")))
     ;; have no space before `)'
     (goto-char beg)
-    (while (re-search-forward 
"\\(--.*\n\\|\"[^\"\n]*[\"\n]\\|\'.\'\\|\\\\[^\\\n]*[\\\n]\\|^\\s-+\\)\\|\\s-+\\()\\)"
 end t)
+    (while (re-search-forward 
"\\(--.*\n\\|\"[^\"\n]*[\"\n]\\|'.'\\|\\\\[^\\\n]*[\\\n]\\|^\\s-+\\)\\|\\s-+\\()\\)"
 end t)
       (if (match-string 1)
          (goto-char (match-end 1))
        (replace-match "\\2")))
     ;; surround operator symbols by one space
     (goto-char beg)
-    (while (re-search-forward 
"\\(--.*\n\\|\"[^\"\n]*[\"\n]\\|\'.\'\\|\\\\[^\\\n]*[\\\n]\\)\\|\\(\\([^/:<>=\n]\\)\\(:\\|\\??=\\|\\??<<\\|\\??>>\\|\\??<\\|\\??>\\|:=\\|\\??<=\\|\\??>=\\|=>\\|\\??/=\\|\\?\\?\\)\\([^=>\n]\\|$\\)\\)"
 end t)
+    (while (re-search-forward 
"\\(--.*\n\\|\"[^\"\n]*[\"\n]\\|'.'\\|\\\\[^\\\n]*[\\\n]\\)\\|\\(\\([^/:<>=\n]\\)\\(:\\|\\??=\\|\\??<<\\|\\??>>\\|\\??<\\|\\??>\\|:=\\|\\??<=\\|\\??>=\\|=>\\|\\??/=\\|\\?\\?\\)\\([^=>\n]\\|$\\)\\)"
 end t)
       (if (or (match-string 1)
              (<= (match-beginning 0)  ; not if at boi
                 (save-excursion (back-to-indentation) (point))))
@@ -11858,7 +11858,7 @@ reflected in a subsequent paste operation."
                  (save-excursion
                    (re-search-backward
                     (concat "^\\s-*use\\s-+" (car clause)
-                            "\." (cdr clause) "\\>") nil t)))
+                            "." (cdr clause) "\\>") nil t)))
        (vhdl-template-standard-package (car clause) (cdr clause))
        (insert "\n"))
       (setq clause-list (cdr clause-list)))))
@@ -12113,7 +12113,7 @@ reflected in a subsequent paste operation."
               (insert name))
              ((equal (cdr vhdl-instance-name) "")
               (setq name (vhdl-template-field "instance name")))
-             ((string-match "\%d" (cdr vhdl-instance-name))
+             ((string-match "%d" (cdr vhdl-instance-name))
               (let ((n 1))
                 (while (save-excursion
                          (setq name (format (vhdl-replace-string
@@ -12978,7 +12978,7 @@ File statistics: \"%s\"\n\
 # empty lines   : %5d\n\
 # comment lines : %5d\n\
 # comments      : %5d\n\
-# total lines   : %5d\n\ "
+# total lines   : %5d\n"
             (buffer-file-name) no-stats no-code-lines no-empty-lines
             no-comm-lines no-comments no-lines)
     (unless vhdl-emacs-21 (vhdl-show-messages))))
@@ -13121,7 +13121,7 @@ File statistics: \"%s\"\n\
                     (vhdl-resolve-env-variable
                      (vhdl-replace-string
                       (cons "\\(.*\\) \\(.*\\)" (car file-name-list))
-                      (concat "\*" " " (user-login-name)))))))
+                      (concat "* " (user-login-name)))))))
       (setq list-length (or list-length (length file-list)))
       (setq file-name-list (cdr file-name-list)))
     (while file-list
@@ -13306,7 +13306,7 @@ File statistics: \"%s\"\n\
 ;; Syntax definitions
 
 (defconst vhdl-font-lock-syntactic-keywords
-  '(("\\(\'\\).\\(\'\\)" (1 (7 . ?\')) (2 (7 . ?\'))))
+  '(("\\('\\).\\('\\)" (1 (7 . ?\')) (2 (7 . ?\'))))
   "Mark single quotes as having string quote syntax in 'c' instances.")
 
 (defvar vhdl-font-lock-keywords nil
@@ -15461,19 +15461,19 @@ NO-POSITION non-nil means do not re-position cursor."
          (let* ((file-entry (vhdl-aget file-alist
                                        speedbar-last-selected-file)))
            (vhdl-speedbar-update-units
-            "\\[.\\] " (nth 0 file-entry)
+            "\\[.] " (nth 0 file-entry)
             speedbar-last-selected-file 'vhdl-speedbar-entity-face)
            (vhdl-speedbar-update-units
             "{.} " (nth 1 file-entry)
             speedbar-last-selected-file 'vhdl-speedbar-architecture-face)
            (vhdl-speedbar-update-units
-            "\\[.\\] " (nth 3 file-entry)
+            "\\[.] " (nth 3 file-entry)
             speedbar-last-selected-file 'vhdl-speedbar-configuration-face)
            (vhdl-speedbar-update-units
             "[]>] " (nth 4 file-entry)
             speedbar-last-selected-file 'vhdl-speedbar-package-face)
            (vhdl-speedbar-update-units
-            "\\[.\\].+(" '("body")
+            "\\[.].+(" '("body")
             speedbar-last-selected-file 'vhdl-speedbar-package-face)
            (vhdl-speedbar-update-units
             "> " (nth 6 file-entry)
@@ -15482,19 +15482,19 @@ NO-POSITION non-nil means do not re-position cursor."
          (let* ((file-entry (vhdl-aget file-alist file-name)))
            (setq
             pos (vhdl-speedbar-update-units
-                 "\\[.\\] " (nth 0 file-entry)
+                 "\\[.] " (nth 0 file-entry)
                  file-name 'vhdl-speedbar-entity-selected-face pos)
             pos (vhdl-speedbar-update-units
                  "{.} " (nth 1 file-entry)
                  file-name 'vhdl-speedbar-architecture-selected-face pos)
             pos (vhdl-speedbar-update-units
-                 "\\[.\\] " (nth 3 file-entry)
+                 "\\[.] " (nth 3 file-entry)
                  file-name 'vhdl-speedbar-configuration-selected-face pos)
             pos (vhdl-speedbar-update-units
                  "[]>] " (nth 4 file-entry)
                  file-name 'vhdl-speedbar-package-selected-face pos)
             pos (vhdl-speedbar-update-units
-                 "\\[.\\].+(" '("body")
+                 "\\[.].+(" '("body")
                  file-name 'vhdl-speedbar-package-selected-face pos)
             pos (vhdl-speedbar-update-units
                  "> " (nth 6 file-entry)
@@ -15926,7 +15926,7 @@ is already shown in a buffer."
     (if (not (or is-entity (vhdl-speedbar-check-unit 'subprogram)))
        (error "ERROR:  No entity/component or subprogram under cursor")
       (beginning-of-line)
-      (if (looking-at "\\([0-9]\\)+:\\s-*\\(\\[[-+?]\\]\\|>\\) 
\\(\\(\\w\\|\\s_\\)+\\)")
+      (if (looking-at "\\([0-9]\\)+:\\s-*\\(\\[[-+?]]\\|>\\) 
\\(\\(\\w\\|\\s_\\)+\\)")
          (condition-case info
              (let ((token (get-text-property
                            (match-beginning 3) 'speedbar-token)))
@@ -17864,17 +17864,17 @@ NOTE: click `mouse-2' on variable names above (not in 
XEmacs).")
 For VHDL coding style and naming convention guidelines, see the following
 references:
 
-\[1] Ben Cohen.
+[1] Ben Cohen.
     \"VHDL Coding Styles and Methodologies\".
     Kluwer Academic Publishers, 1999.
     http://members.aol.com/vhdlcohen/vhdl/
 
-\[2] Michael Keating and Pierre Bricaud.
+[2] Michael Keating and Pierre Bricaud.
     \"Reuse Methodology Manual, Second Edition\".
     Kluwer Academic Publishers, 1999.
     http://www.openmore.com/openmore/rmm2.html
 
-\[3] European Space Agency.
+[3] European Space Agency.
     \"VHDL Modelling Guidelines\".
     ftp://ftp.estec.esa.nl/pub/vhdl/doc/ModelGuide.{pdf,ps}
 
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index d5243da..cf61073 100644
--- a/lisp/progmodes/xscheme.el
+++ b/lisp/progmodes/xscheme.el
@@ -347,9 +347,9 @@ the command interpreter stack:
 
 Some possible command interpreter types and their meanings are:
 
-\[Evaluator]   read-eval-print loop for evaluating expressions
-\[Debugger]    single character commands for debugging errors
-\[Where]               single character commands for examining environments
+[Evaluator]    read-eval-print loop for evaluating expressions
+[Debugger]     single character commands for debugging errors
+[Where]                single character commands for examining environments
 
 Starting with release 6.2 of Scheme, the latter two types of command
 interpreters will change the major mode of the Scheme process buffer
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index 218a02a..e929427 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -1684,7 +1684,7 @@ non-default settings would be \"LPT1\" to \"LPT3\" for 
parallel printers, or
 for a shared network printer.  You can also set it to a name of a file, in
 which case the output gets appended to that file.  \(Note that `ps-print'
 package already has facilities for printing to a file, so you might as well use
-them instead of changing the setting of this variable.\)  If you want to
+them instead of changing the setting of this variable.)  If you want to
 silently discard the printed output, set this to \"NUL\".
 
 Set to t, if the utility given by `ps-lpr-command' needs an empty printer name.
@@ -3172,7 +3172,7 @@ This variable is used only when `ps-print-color-p' is set 
to `black-white'."
       font-lock-variable-name-face
       font-lock-keyword-face
       font-lock-warning-face))
-  "A list of the \(non-bold\) faces that should be printed in bold font.
+  "A list of the (non-bold) faces that should be printed in bold font.
 This applies to generating PostScript."
   :type '(repeat face)
   :version "20"
@@ -3185,7 +3185,7 @@ This applies to generating PostScript."
       font-lock-string-face
       font-lock-comment-face
       font-lock-warning-face))
-  "A list of the \(non-italic\) faces that should be printed in italic font.
+  "A list of the (non-italic) faces that should be printed in italic font.
 This applies to generating PostScript."
   :type '(repeat face)
   :version "20"
@@ -3196,7 +3196,7 @@ This applies to generating PostScript."
     '(font-lock-function-name-face
       font-lock-constant-face
       font-lock-warning-face))
-  "A list of the \(non-underlined\) faces that should be printed underlined.
+  "A list of the (non-underlined) faces that should be printed underlined.
 This applies to generating PostScript."
   :type '(repeat face)
   :version "20"
diff --git a/lisp/replace.el b/lisp/replace.el
index 37e97e2..d84f3a2 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -1,4 +1,4 @@
-;;; replace.el --- replace commands for Emacs
+;;; replace.el --- replace commands for Emacs            -*- coding: utf-8 -*-
 
 ;; Copyright (C) 1985-1987, 1992, 1994, 1996-1997, 2000-2015 Free
 ;; Software Foundation, Inc.
@@ -76,7 +76,7 @@ to the minibuffer that reads the string to replace, or invoke 
replacements
 from Isearch by using a key sequence like `C-s C-s M-%'." "24.3")
 
 (defcustom query-replace-from-to-separator
-  (propertize (if (char-displayable-p ?\u2192) " \u2192 " " -> ")
+  (propertize (if (char-displayable-p ?→) " → " " -> ")
               'face 'minibuffer-prompt)
   "String that separates FROM and TO in the history of replacement pairs."
   ;; Avoids error when attempt to autoload char-displayable-p fails
diff --git a/lisp/simple.el b/lisp/simple.el
index f80faae..8acb683 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -8424,6 +8424,38 @@ contains the list of implementations currently supported 
for this command."
                            command-name)))))))
 
 
+;;; Functions for changing capitalization that Do What I Mean
+(defun upcase-dwim (arg)
+  "Upcase words in the region, if active; if not, upcase word at point.
+If the region is active, this function calls `upcase-region'.
+Otherwise, it calls `upcase-word', with prefix argument passed to it
+to upcase ARG words."
+  (interactive "*p")
+  (if (use-region-p)
+      (upcase-region (region-beginning) (region-end))
+    (upcase-word arg)))
+
+(defun downcase-dwim (arg)
+    "Downcase words in the region, if active; if not, downcase word at point.
+If the region is active, this function calls `downcase-region'.
+Otherwise, it calls `downcase-word', with prefix argument passed to it
+to downcase ARG words."
+  (interactive "*p")
+  (if (use-region-p)
+      (downcase-region (region-beginning) (region-end))
+    (downcase-word arg)))
+
+(defun capitalize-dwim (arg)
+  "Capitalize words in the region, if active; if not, capitalize word at point.
+If the region is active, this function calls `capitalize-region'.
+Otherwise, it calls `capitalize-word', with prefix argument passed to it
+to capitalize ARG words."
+  (interactive "*p")
+  (if (use-region-p)
+      (capitalize-region (region-beginning) (region-end))
+    (capitalize-word arg)))
+
+
 
 (provide 'simple)
 
diff --git a/lisp/sort.el b/lisp/sort.el
index 9b8cec6..9843749 100644
--- a/lisp/sort.el
+++ b/lisp/sort.el
@@ -316,7 +316,7 @@ FIELD, BEG and END.  BEG and END specify region to sort."
 ;;                            (point)
 ;;                            (save-excursion
 ;;                              (re-search-forward
-;;                               "[+-]?[0-9]*\.?[0-9]*\\([eE][+-]?[0-9]+\\)?")
+;;                               "[+-]?[0-9]*\\.?[0-9]*\\([eE][+-]?[0-9]+\\)?")
 ;;                              (point))))))
 ;;              nil))
 
diff --git a/lisp/speedbar.el b/lisp/speedbar.el
index 97c977c..1743058 100644
--- a/lisp/speedbar.el
+++ b/lisp/speedbar.el
@@ -2857,7 +2857,7 @@ indicator, then do not add a space."
        (progn
          (goto-char speedbar-ro-to-do-point)
          (while (and (not (input-pending-p))
-                     (re-search-forward "^\\([0-9]+\\):\\s-*[[<][+-\?][]>] "
+                     (re-search-forward "^\\([0-9]+\\):\\s-*[[<][+-?][]>] "
                                         nil t))
            (setq speedbar-ro-to-do-point (point))
            (let ((f (speedbar-line-file)))
diff --git a/lisp/startup.el b/lisp/startup.el
index 9caf485..3385567 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -114,7 +114,7 @@ the remaining command-line args are in the variable 
`command-line-args-left'.")
 
 (defvaralias 'argv 'command-line-args-left
   "List of command-line args not yet processed.
-This is a convenience alias, so that one can write \(pop argv\)
+This is a convenience alias, so that one can write \(pop argv)
 inside of --eval command line arguments in order to access
 following arguments.")
 (internal-make-var-non-special 'argv)
@@ -803,19 +803,61 @@ to prepare for opening the first frame (e.g. open a 
connection to an X server)."
 (defvar server-name)
 (defvar server-process)
 
-(defun startup--setup-quote-display ()
-  "Display ASCII approximations on user request or if curved quotes don't 
work."
-  (when (memq text-quoting-style '(nil grave straight))
-    (dolist (char-repl '((?‘ . ?\`) (?’ . ?\') (?“ . ?\") (?” . ?\")))
-      (let ((char (car char-repl))
-            (repl (cdr char-repl)))
-        (when (or text-quoting-style (not (char-displayable-p char)))
-          (when (and (eq repl ?\`) (eq text-quoting-style 'straight))
-            (setq repl ?\'))
-          (unless standard-display-table
-            (setq standard-display-table (make-display-table)))
-          (aset standard-display-table char
-                (vector (make-glyph-code repl 'shadow))))))))
+(defun startup--setup-quote-display (&optional style)
+  "If needed, display ASCII approximations to curved quotes.
+Do this by modifying `standard-display-table'.  Optional STYLE
+specifies the desired quoting style, as in `text-quoting-style'.
+If STYLE is nil, display appropriately for the terminal."
+  (let ((repls (let ((style-repls (assq style '((grave . "`'\"\"")
+                                                (straight . "''\"\"")))))
+                 (if style-repls (cdr style-repls) (make-vector 4 nil))))
+        glyph-count)
+    ;; REPLS is a sequence of the four replacements for "‘’“”", respectively.
+    ;; If STYLE is nil, infer REPLS from terminal characteristics.
+    (unless style
+      ;; On a terminal that supports glyph codes,
+      ;; GLYPH-COUNT[i] is the number of times that glyph code I
+      ;; represents either an ASCII character or one of the 4
+      ;; quote characters.  This assumes glyph codes are valid
+      ;; Elisp characters, which is a safe assumption in practice.
+      (when (integerp (internal-char-font nil (max-char)))
+        (setq glyph-count (make-char-table nil 0))
+        (dotimes (i 132)
+          (let ((glyph (internal-char-font
+                        nil (if (< i 128) i (aref "‘’“”" (- i 128))))))
+            (when (<= 0 glyph)
+              (aset glyph-count glyph (1+ (aref glyph-count glyph)))))))
+      (dotimes (i 2)
+        (let ((lq (aref "‘“" i)) (rq (aref "’”" i))
+              (lr (aref "`\"" i)) (rr (aref "'\"" i))
+              (i2 (* i 2)))
+          (unless (if glyph-count
+                      ;; On a terminal that supports glyph codes, use
+                      ;; ASCII replacements unless both quotes are displayable.
+                      ;; If not using ASCII replacements, highlight
+                      ;; quotes unless they are both unique among the
+                      ;; 128 + 4 characters of concern.
+                      (let ((lglyph (internal-char-font nil lq))
+                            (rglyph (internal-char-font nil rq)))
+                        (when (and (<= 0 lglyph) (<= 0 rglyph))
+                          (setq lr lq rr rq)
+                          (and (= 1 (aref glyph-count lglyph))
+                               (= 1 (aref glyph-count rglyph)))))
+                    ;; On a terminal that does not support glyph codes, use
+                    ;; ASCII replacements unless both quotes are displayable.
+                    (and (char-displayable-p lq)
+                         (char-displayable-p rq)))
+            (aset repls i2 lr)
+            (aset repls (1+ i2) rr)))))
+    (dotimes (i 4)
+      (let ((char (aref "‘’“”" i))
+            (repl (aref repls i)))
+        (if repl
+            (aset (or standard-display-table
+                      (setq standard-display-table (make-display-table)))
+                  char (vector (make-glyph-code repl 'escape-glyph)))
+          (when standard-display-table
+            (aset standard-display-table char nil)))))))
 
 (defun command-line ()
   "A subroutine of `normal-top-level'.
@@ -1239,11 +1281,6 @@ the `--debug-init' option to view a complete error 
backtrace."
        ;; unibyte (display table, terminal coding system &c).
        (set-language-environment current-language-environment)))
 
-    ;; Setup quote display again, if the init file sets
-    ;; text-quoting-style to a non-nil value.
-    (when (and (not noninteractive) text-quoting-style)
-      (startup--setup-quote-display))
-
     ;; Do this here in case the init file sets mail-host-address.
     (if (equal user-mail-address "")
        (setq user-mail-address (or (getenv "EMAIL")
@@ -1933,7 +1970,7 @@ To quit a partially entered command, type Control-g.\n")
                 'action (lambda (_button) (info-emacs-manual))
                 'follow-link t)
   (insert "\tView the Emacs manual using Info\n")
-  (insert-button "\(Non)Warranty"
+  (insert-button "(Non)Warranty"
                 'action (lambda (_button) (describe-no-warranty))
                 'follow-link t)
   (insert "\t\tGNU Emacs comes with ABSOLUTELY NO WARRANTY\n")
diff --git a/lisp/subr.el b/lisp/subr.el
index ce3011d..b1b3638 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -1503,19 +1503,6 @@ All symbols are bound before the VALUEFORMs are evalled."
      ,@(mapcar (lambda (binder) `(setq ,@binder)) binders)
      ,@body))
 
-(defmacro let-when-compile (bindings &rest body)
-  "Like `let', but allow for compile time optimization.
-Use BINDINGS as in regular `let', but in BODY each usage should
-be wrapped in `eval-when-compile'.
-This will generate compile-time constants from BINDINGS."
-  (declare (indent 1) (debug let))
-  (cl-progv (mapcar #'car bindings)
-      (mapcar (lambda (x) (eval (cadr x))) bindings)
-    (macroexpand-all
-     (macroexp-progn
-      body)
-     macroexpand-all-environment)))
-
 (defmacro with-wrapper-hook (hook args &rest body)
   "Run BODY, using wrapper functions from HOOK with additional ARGS.
 HOOK is an abnormal hook.  Each hook function in HOOK \"wraps\"
diff --git a/lisp/term.el b/lisp/term.el
index 06a44f2..e5ae553 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -1919,7 +1919,7 @@ A useful command to bind to SPC.  See 
`term-replace-by-expanded-history'."
 (defun term-within-quotes (beg end)
   "Return t if the number of quotes between BEG and END is odd.
 Quotes are single and double."
-  (let ((countsq (term-how-many-region "\\(^\\|[^\\\\]\\)\'" beg end))
+  (let ((countsq (term-how-many-region "\\(^\\|[^\\\\]\\)'" beg end))
        (countdq (term-how-many-region "\\(^\\|[^\\\\]\\)\"" beg end)))
     (or (= (mod countsq 2) 1) (= (mod countdq 2) 1))))
 
diff --git a/lisp/term/README b/lisp/term/README
index 35715d9..d01f133 100644
--- a/lisp/term/README
+++ b/lisp/term/README
@@ -7,22 +7,22 @@ terminal types.
 
    When Emacs opens a new terminal, it checks the TERM environment variable
 to see what type of terminal the user is running on.  (If there is an entry
-for TERM in the `term-file-aliases' variable, Emacs uses the associated value
+for TERM in the 'term-file-aliases' variable, Emacs uses the associated value
 in place of TERM in the following.)  Emacs searches for an elisp file named
 "term/${TERM}.el", and if one exists, loads it.  If Emacs finds no
 suitable file, then it strips the last hyphen and what follows it from TERM,
 and tries again.  If that still doesn't yield a file, then the previous hyphen
 is stripped, and so on until all hyphens are gone.  For example, if the
-terminal type is `aaa-48-foo', Emacs will try first `term/aaa-48-foo.el', then
-`term/aaa-48.el' and finally `term/aaa.el'.  Emacs stops searching at the
+terminal type is 'aaa-48-foo', Emacs will try first 'term/aaa-48-foo.el', then
+'term/aaa-48.el' and finally 'term/aaa.el'.  Emacs stops searching at the
 first file found, and will not load more than one file for any terminal.  Note
 that it is not an error if Emacs is unable to find a terminal initialization
 file; in that case, it will simply proceed with the next step without loading
 any files.
 
    Once the file has been loaded (or the search failed), Emacs tries to call a
-function named `terminal-init-TERMINALNAME' (eg `terminal-init-aaa-48' for the
-`aaa-48' terminal) in order to initialize the terminal.  Once again, if the
+function named 'terminal-init-TERMINALNAME' (eg 'terminal-init-aaa-48' for the
+'aaa-48' terminal) in order to initialize the terminal.  Once again, if the
 function is not found, Emacs strips the last component of the name and tries
 again using the shorter name.  This search is independent of the previous file
 search, so that you can have terminal initialization functions for a family of
@@ -40,7 +40,7 @@ declaration.  Simply loading the file should not have any 
side effect.
 given terminal, when the first frame is created on it.  The function is not
 called for subsequent frames on the same terminal.  Therefore, terminal-init-*
 functions should only modify terminal-local variables (such as
-`local-function-key-map') and terminal parameters.  For example, it is not
+'local-function-key-map') and terminal parameters.  For example, it is not
 correct to modify frame parameters, since the modifications will only be
 applied for the first frame opened on the terminal.
 
@@ -51,7 +51,7 @@ mind.
    First, about keycap names.  Your terminal package can create any keycap
 cookies it likes, but there are good reasons to stick to the set recognized by
 the X-windows code whenever possible.  The key symbols recognized by Emacs
-are listed in src/term.c; look for the string `keys' in that file.
+are listed in src/term.c; look for the string 'keys' in that file.
 
    For one thing, it means that you'll have the same Emacs key bindings on in
 terminal mode as on an X console.  If there are differences, you can bet
@@ -61,7 +61,7 @@ they'll frustrate you after you've forgotten about them.
 about.  It tries to bind many of them to useful things at startup, before your
 .emacs is read (so you can override them).  In some ways, the X keysym standard
 is a admittedly poor one; it's incomplete, and not well matched to the set of
-`virtual keys' that UNIX terminfo(3) provides.  But, trust us, the alternatives
+'virtual keys' that UNIX terminfo(3) provides.  But, trust us, the alternatives
 were worse.
 
    This doesn't mean that if your terminal has a "Cokebottle" key you shouldn't
@@ -70,7 +70,7 @@ that set, try to pattern them on the standard terminfo 
variable names for
 clarity; also, for a fighting chance that your binding may be useful to someone
 else someday.
 
-   For example, if your terminal has a `find' key, observe that terminfo
+   For example, if your terminal has a 'find' key, observe that terminfo
 supports a key_find capability and call your cookie [find].
 
 Here is a complete list, with corresponding X keysyms.
@@ -184,14 +184,14 @@ key_f36           FQ                      function key 36
 key_f64                k1                      function key 64
 
 (1) The terminfo documentation says this may be the 'insert character' or
-    `enter insert mode' key.  Accordingly, key_ic is mapped to the `insertchar'
-    keysym if there is also a key_dc key; otherwise it's mapped to `insert'.
-    The presumption is that keyboards with `insert character' keys usually
-    have `delete character' keys paired with them.
+    'enter insert mode' key.  Accordingly, key_ic is mapped to the 'insertchar'
+    keysym if there is also a key_dc key; otherwise it's mapped to 'insert'.
+    The presumption is that keyboards with 'insert character' keys usually
+    have 'delete character' keys paired with them.
 
 (2) If there is no key_next key but there is a key_npage key, key_npage
-    will be bound to the `next' keysym.  If there is no key_previous key but
-    there is a key_ppage key, key_ppage will be bound to the `previous' keysym.
+    will be bound to the 'next' keysym.  If there is no key_previous key but
+    there is a key_ppage key, key_ppage will be bound to the 'previous' keysym.
 
 (3) Sorry, these are not exact but they're the best we can do.
 
@@ -242,7 +242,7 @@ the setup code to bind anything else.
 
    If your terminal's arrow key sequences are so funky that they conflict with
 normal Emacs key bindings, the package should set up a function called
-(enable-foo-arrow-keys), where `foo' becomes the terminal name, and leave
+(enable-foo-arrow-keys), where 'foo' becomes the terminal name, and leave
 it up to the user's .emacs file whether to call it.
 
    Before writing a terminal-support package, it's a good idea to read the
diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el
index a21c105..373f812 100644
--- a/lisp/term/ns-win.el
+++ b/lisp/term/ns-win.el
@@ -243,7 +243,7 @@ The properties returned may include `top', `left', 
`height', and `width'."
         (insert ns-input-spi-arg))
        ((string-equal ns-input-spi-name "mail-to")
         (compose-mail ns-input-spi-arg))
-       (t (error (concat "Service " ns-input-spi-name " not recognized")))))
+       (t (error "Service %s not recognized" ns-input-spi-name))))
 
 
 ;; Composed key sequence handling for Nextstep system input methods.
diff --git a/lisp/term/tty-colors.el b/lisp/term/tty-colors.el
index 98108ce..3bc1aa0 100644
--- a/lisp/term/tty-colors.el
+++ b/lisp/term/tty-colors.el
@@ -810,9 +810,11 @@ Value is the modified color alist for FRAME."
     (while colors
       (tty-color-define (car color) (cadr color) (cddr color))
       (setq colors (cdr colors) color (car colors)))
-    ;; Modifying color mappings means realized faces don't
-    ;; use the right colors, so clear them.
-    (clear-face-cache)))
+    ;; Modifying color mappings means realized faces don't use the
+    ;; right colors, so clear them, if we modified colors on a TTY
+    ;; frame.
+    (or (display-graphic-p)
+        (clear-face-cache))))
 
 (defun tty-color-canonicalize (color)
   "Return COLOR in canonical form.
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index 279f657..df8066e 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -433,7 +433,7 @@ is present; but these fields are required otherwise.
 OPTIONAL is a list of optional fields.
 
 Each element of these lists is a list of the form
-  \(FIELD COMMENT INIT ALTERNATIVE).
+  (FIELD COMMENT INIT ALTERNATIVE).
 COMMENT, INIT, and ALTERNATIVE are optional.
 
 FIELD is the name of the field.
@@ -2620,7 +2620,7 @@ is returned unchanged."
   "Get content of BibTeX field FIELD.  Return empty string if not found.
 Optional arg CHANGE-LIST is a list of substitution patterns that is
 applied to the content of FIELD.  It is an alist with pairs
-\(OLD-REGEXP . NEW-STRING\)."
+\(OLD-REGEXP . NEW-STRING)."
   (let* ((bibtex-expand-strings bibtex-autokey-expand-strings)
          (content (bibtex-text-in-field field bibtex-autokey-use-crossref))
         case-fold-search)
@@ -3647,7 +3647,7 @@ If optional arg CONTENT is non-nil extract content of 
text fields."
 (defun bibtex-autofill-entry ()
   "Try to fill fields of current BibTeX entry based on neighboring entries.
 The current entry must have a key.  Determine the neighboring entry
-\(previous or next\) whose key is more similar to the key of the current
+\(previous or next) whose key is more similar to the key of the current
 entry.  For all empty fields of the current entry insert the corresponding
 field contents of the neighboring entry.  Finally try to update the text
 based on the difference between the keys of the neighboring and the current
@@ -5111,7 +5111,7 @@ entries from minibuffer."
   "Browse a URL for the BibTeX entry at point.
 Optional POS is the location of the BibTeX entry.
 The URL is generated using the schemes defined in `bibtex-generate-url-list'
-\(see there\).  If multiple schemes match for this entry, or the same scheme
+\(see there).  If multiple schemes match for this entry, or the same scheme
 matches more than once, use the one for which the first step's match is the
 closest to POS.  The URL is passed to `browse-url' unless NO-BROWSE is t.
 Return the URL or nil if none can be generated."
diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el
index 267d23f..770571a 100644
--- a/lisp/textmodes/conf-mode.el
+++ b/lisp/textmodes/conf-mode.el
@@ -434,7 +434,7 @@ For details see `conf-mode'.  Example:
 
 # Conf mode font-locks this right on Unix and with \\[conf-unix-mode]
 
-\[Desktop Entry]
+[Desktop Entry]
         Encoding=UTF-8
         Name=The GIMP
         Name[ca]=El GIMP
@@ -449,11 +449,11 @@ For details see `conf-mode'.  Example:
 
 ; Conf mode font-locks this right on Windows and with \\[conf-windows-mode]
 
-\[ExtShellFolderViews]
+[ExtShellFolderViews]
 Default={5984FFE0-28D4-11CF-AE66-08002B2E1262}
 {5984FFE0-28D4-11CF-AE66-08002B2E1262}={5984FFE0-28D4-11CF-AE66-08002B2E1262}
 
-\[{5984FFE0-28D4-11CF-AE66-08002B2E1262}]
+[{5984FFE0-28D4-11CF-AE66-08002B2E1262}]
 PersistMoniker=file://Folder.htt"
   (conf-mode-initialize ";"))
 
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index 639456d..5f4eebd 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -78,8 +78,8 @@
     "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" "overflow" "padding" "padding-bottom"
-    "padding-left" "padding-right" "padding-top" "page-break-after"
+    "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"
@@ -136,6 +136,10 @@
     "font-variant-east-asian" "font-variant-ligatures"
     "font-variant-numeric" "font-variant-position" "font-weight"
 
+    ;; CSS Overflow Module Level 3
+    ;; (http://www.w3.org/TR/css-overflow-3/#property-index)
+    "max-lines" "overflow" "overflow-x" "overflow-y"
+
     ;; 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"
@@ -265,7 +269,7 @@
        "\\(?:\\(:" (regexp-opt (append css-pseudo-class-ids
                                        css-pseudo-element-ids) t)
        "\\|\\::" (regexp-opt css-pseudo-element-ids t) "\\)"
-       "\\(?:([^\)]+)\\)?"
+       "\\(?:([^)]+)\\)?"
        (if (not sassy)
            "[^:{}\n]*"
          (concat "[^:{}\n#]*\\(?:" scss--hash-re "[^:{}\n#]*\\)*"))
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index 87c2a95..fe27f0f 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -699,8 +699,8 @@ re-start Emacs."
 
 Each element of this list is also a list:
 
-\(DICTIONARY-NAME CASECHARS NOT-CASECHARS OTHERCHARS MANY-OTHERCHARS-P
-        ISPELL-ARGS EXTENDED-CHARACTER-MODE CHARACTER-SET\)
+ (DICTIONARY-NAME CASECHARS NOT-CASECHARS OTHERCHARS MANY-OTHERCHARS-P
+        ISPELL-ARGS EXTENDED-CHARACTER-MODE CHARACTER-SET)
 
 DICTIONARY-NAME is a possible string value of variable `ispell-dictionary',
 nil means the default dictionary.
@@ -747,7 +747,7 @@ when the language uses non-ASCII characters.
 Note that with \"ispell\" as the speller, the CASECHARS and
 OTHERCHARS slots of the alist should contain the same character
 set as casechars and otherchars in the LANGUAGE.aff file \(e.g.,
-english.aff\).  Aspell and Hunspell don't have this limitation.")
+english.aff).  Aspell and Hunspell don't have this limitation.")
 
 (defvar ispell-really-aspell nil
   "Non-nil if we can use Aspell extensions.")
@@ -2024,7 +2024,7 @@ in a window allowing you to choose one.
 
 If optional argument FOLLOWING is non-nil or if `ispell-following-word'
 is non-nil when called interactively, then the following word
-\(rather than preceding\) is checked when the cursor is not over a word.
+\(rather than preceding) is checked when the cursor is not over a word.
 When the optional argument QUIETLY is non-nil or `ispell-quietly' is non-nil
 when called interactively, non-corrective messages are suppressed.
 
@@ -2044,7 +2044,7 @@ Return values:
 nil           word is correct or spelling is accepted.
 0             word is inserted into buffer-local definitions.
 \"word\"        word corrected from word list.
-\(\"word\" arg\)  word is hand entered.
+\(\"word\" arg)  word is hand entered.
 quit          spell session exited."
   (interactive (list ispell-following-word ispell-quietly current-prefix-arg 
t))
   (cond
@@ -2162,7 +2162,7 @@ quit          spell session exited."
   "Return the word for spell-checking according to ispell syntax.
 If optional argument FOLLOWING is non-nil or if `ispell-following-word'
 is non-nil when called interactively, then the following word
-\(rather than preceding\) is checked when the cursor is not over a word.
+\(rather than preceding) is checked when the cursor is not over a word.
 Optional second argument contains otherchars that can be included in word
 many times (see the doc string of `ispell-dictionary-alist' for details
 about otherchars).
diff --git a/lisp/textmodes/makeinfo.el b/lisp/textmodes/makeinfo.el
index b9b72ea..0ca4cbe 100644
--- a/lisp/textmodes/makeinfo.el
+++ b/lisp/textmodes/makeinfo.el
@@ -228,7 +228,7 @@ nonsensical results."
   "Make Info file from current buffer.
 
 Use the \\[next-error] command to move to the next error
-\(if there are errors\)."
+\(if there are errors)."
 
   (interactive)
   (cond ((null buffer-file-name)
diff --git a/lisp/textmodes/page-ext.el b/lisp/textmodes/page-ext.el
index 57134e0..99962c7 100644
--- a/lisp/textmodes/page-ext.el
+++ b/lisp/textmodes/page-ext.el
@@ -446,7 +446,7 @@ REVERSE (non-nil means reverse order), BEG and END (region 
to sort)."
 
 (defun sort-pages-buffer (&optional reverse)
   "Sort pages alphabetically in buffer.  Prefix arg means reverse order.
-\(Non-nil arg if not interactive.\)"
+\(Non-nil arg if not interactive.)"
 
   (interactive "P")
   (or reverse (setq reverse nil))
@@ -461,7 +461,7 @@ REVERSE (non-nil means reverse order), BEG and END (region 
to sort)."
 (defvar pages-directory-previous-regexp nil
   "Value of previous regexp used by `pages-directory'.
 \(This regular expression may be used to select only those pages that
-contain matches to the regexp.\)")
+contain matches to the regexp.)")
 
 (defvar pages-buffer nil
   "The buffer for which the pages-directory function creates the directory.")
diff --git a/lisp/textmodes/refer.el b/lisp/textmodes/refer.el
index 8d824eb..22dc7dc 100644
--- a/lisp/textmodes/refer.el
+++ b/lisp/textmodes/refer.el
@@ -229,7 +229,7 @@ found on the last `refer-find-entry' or 
`refer-find-next-entry'."
                     (sit-for 1)
                     (setq files (cdr files))))))
        (ding)
-       (message "Keywords \"%s\" not found in any \.bib file" keywords))
+       (message "Keywords \"%s\" not found in any .bib file" keywords))
      (select-window old-window)))
 
 (defun refer-find-entry-in-file (keywords-list file &optional old-pos)
@@ -351,21 +351,21 @@ found on the last `refer-find-entry' or 
`refer-find-next-entry'."
                         (if (progn
                               (goto-char (point-min))
                               (re-search-forward (concat refer-bib-files-regexp
-                                                         "\\s-*\{") nil t))
+                                                         "\\s-*{") nil t))
                             (let ((files (list (buffer-substring
                                                 (point)
                                                 (progn
-                                                  (re-search-forward "[,\}]"
+                                                  (re-search-forward "[,}]"
                                                                      nil t)
                                                   (backward-char 1)
                                                   (point))))))
-                              (while (not (looking-at "\}"))
+                              (while (not (looking-at "}"))
                                 (setq files (append files
                                                     (list (buffer-substring
                                                            (progn 
(forward-char 1)
                                                                   (point))
                                                            (progn 
(re-search-forward
-                                                                   "[,\}]" nil 
t)
+                                                                   "[,}]" nil 
t)
                                                                   
(backward-char 1)
                                                                   (point)))))))
                               files)
diff --git a/lisp/textmodes/reftex-cite.el b/lisp/textmodes/reftex-cite.el
index 17e8cfd..8f3f2cc 100644
--- a/lisp/textmodes/reftex-cite.el
+++ b/lisp/textmodes/reftex-cite.el
@@ -210,7 +210,9 @@ Return list with entries."
     (setq first-re (car re-list)    ; We'll use the first re to find things,
           rest-re  (cdr re-list))   ; the others to narrow down.
     (if (string-match "\\`[ \t]*\\'" (or first-re ""))
-        (error "Empty regular expression"))
+        (user-error "Empty regular expression"))
+    (if (string-match first-re "")
+        (user-error "Regular expression matches the empty string."))
 
     (save-excursion
       (save-window-excursion
@@ -385,7 +387,7 @@ The environment should be located in FILES."
                                               (buffer-substring-no-properties
                                                start end)
                                               "[ \t\n\r]*\\\\bibitem[ \t]*\
-\\(\\[[^]]*]\\)*\[ \t]*"))))))
+\\(\\[[^]]*]\\)*[ \t]*"))))))
              (goto-char end))))))
     (unless entries
       (error "No bibitems found"))
@@ -477,7 +479,7 @@ If RAW is non-nil, keep double quotes/curly braces 
delimiting fields."
         (goto-char (point-min))
 
         (if (re-search-forward "@\\(\\(?:\\w\\|\\s_\\)+\\)[ \t\n\r]*\
-\[{(][ \t\n\r]*\\([^ \t\n\r,]+\\)" nil t)
+[{(][ \t\n\r]*\\([^ \t\n\r,]+\\)" nil t)
             (setq alist
                   (list
                    (cons "&type" (downcase (reftex-match-string 1)))
@@ -1195,7 +1197,7 @@ created files in the variables 
`reftex-create-bibtex-header' or
              (widen)
              (goto-char (point-min))
              (while (re-search-forward "^[ address@hidden(?:\\w\\|\\s_\\)+[ 
\t\n\r]*\
-\[{(][ \t\n\r]*\\([^ \t\n\r,]+\\)" nil t)
+[{(][ \t\n\r]*\\([^ \t\n\r,]+\\)" nil t)
                (setq key (match-string 1)
                      beg (match-beginning 0)
                      end (progn
diff --git a/lisp/textmodes/reftex-parse.el b/lisp/textmodes/reftex-parse.el
index 7f186af..f571131 100644
--- a/lisp/textmodes/reftex-parse.el
+++ b/lisp/textmodes/reftex-parse.el
@@ -244,7 +244,7 @@ of master file."
                 (when (or (null reftex-label-ignored-macros-and-environments)
                           ;; \label{} defs should always be honored,
                           ;; just no keyval style [label=foo] defs.
-                          (string-equal "\label{" (substring 
(reftex-match-string 0) 0 7))
+                          (string-equal "\\label{" (substring 
(reftex-match-string 0) 0 7))
                            (if (and (fboundp 'TeX-current-macro)
                                     (fboundp 'LaTeX-current-environment))
                                (not (or (member (save-match-data 
(TeX-current-macro))
diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el
index 482dd4c..357a093 100644
--- a/lisp/textmodes/reftex-vars.el
+++ b/lisp/textmodes/reftex-vars.el
@@ -1991,7 +1991,8 @@ symbol indicating in what context the hook is called."
 
 (defcustom reftex-extra-bindings nil
   "Non-nil means, make additional key bindings on startup.
-These extra bindings are located in the users `C-c letter' map."
+These extra bindings are located in the users `C-c letter' map.
+Note that this variable needs to be set before reftex is loaded."
   :group 'reftex-miscellaneous-configurations
   :type 'boolean)
 
diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el
index 7dc9184..fb96c6c 100644
--- a/lisp/textmodes/reftex.el
+++ b/lisp/textmodes/reftex.el
@@ -2354,7 +2354,7 @@ what in fact did happen.
 Check if the bug is reproducible with an up-to-date version of
 RefTeX available from http://www.gnu.org/software/auctex/.
 
-If the bug is triggered by a specific \(La\)TeX file, you should try
+If the bug is triggered by a specific \(La)TeX file, you should try
 to produce a minimal sample file showing the problem and include it
 in your report.
 
@@ -2446,7 +2446,7 @@ of ENTRY-LIST is a list of cons cells (\"MACRONAME\" . 
LEVEL).  See
 
 ;;;***
 
-;;;### (autoloads nil "reftex-cite" "reftex-cite.el" 
"83811ccf3471820f0ad0dc005ffc88d5")
+;;;### (autoloads nil "reftex-cite" "reftex-cite.el" 
"751df6ee674ea533b755e8cda4ad1cf8")
 ;;; Generated autoloads from reftex-cite.el
 
 (autoload 'reftex-default-bibliography "reftex-cite" "\
@@ -2774,7 +2774,7 @@ Here are all local bindings.
 
 ;;;***
 
-;;;### (autoloads nil "reftex-parse" "reftex-parse.el" 
"c327a848a6d168412b1a9be9f2e3dce8")
+;;;### (autoloads nil "reftex-parse" "reftex-parse.el" 
"7bfdcb2f040dbe9a08d2c38c005c8f21")
 ;;; Generated autoloads from reftex-parse.el
 
 (autoload 'reftex-parse-one "reftex-parse" "\
diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el
index 9625ec2..4c234c9 100644
--- a/lisp/textmodes/rst.el
+++ b/lisp/textmodes/rst.el
@@ -296,7 +296,7 @@ in parentheses follows the development revision and the 
time stamp.")
 ;; syntax.
 (defconst rst-bullets
   ;; Sorted so they can form a character class when concatenated.
-  '(?- ?* ?+ ?\u2022 ?\u2023 ?\u2043)
+  '(?- ?* ?+ ?• ?‣ ?⁃)
   "List of all possible bullet characters for bulleted lists.")
 
 (defconst rst-uri-schemes
@@ -392,8 +392,8 @@ in parentheses follows the development revision and the 
time stamp.")
                                        ; item tag.
 
     ;; Inline markup (`ilm')
-    (ilm-pfx (:alt "^" hws-prt "[-'\"([{<\u2018\u201c\u00ab\u2019/:]"))
-    (ilm-sfx (:alt "$" hws-prt "[]-'\")}>\u2019\u201d\u00bb/:.,;!?\\]"))
+    (ilm-pfx (:alt "^" hws-prt "[-'\"([{<‘“«’/:]"))
+    (ilm-sfx (:alt "$" hws-prt "[]-'\")}>’”»/:.,;!?\\]"))
 
     ;; Inline markup content (`ilc')
     (ilcsgl-tag "\\S ") ; A single non-white character.
@@ -442,7 +442,7 @@ in parentheses follows the development revision and the 
time stamp.")
     (opt-tag (:shy optsta-tag optnam-tag optarg-tag "?")) ; A complete option.
 
     ;; Footnotes and citations (`fnc')
-    (fncnam-prt "[^\]\n]") ; Part of a footnote or citation name.
+    (fncnam-prt "[^]\n]") ; Part of a footnote or citation name.
     (fncnam-tag fncnam-prt "+") ; A footnote or citation name.
     (fnc-tag "\\[" fncnam-tag "]") ; A complete footnote or citation tag.
     (fncdef-tag-2 (:grp exm-sta)
@@ -512,7 +512,7 @@ in parentheses follows the development revision and the 
time stamp.")
                                   ; colon tag.
 
     ;; Comments (`cmt')
-    (cmt-sta-1 (:grp exm-sta) "[^\[|_\n]"
+    (cmt-sta-1 (:grp exm-sta) "[^[|_\n]"
               (:alt "[^:\n]" (:seq ":" (:alt "[^:\n]" "$")))
               "*$") ; Start of a comment block; first group is explicit markup
                     ; start.
@@ -778,12 +778,12 @@ This inherits from Text mode.")
     (modify-syntax-entry ?\\ "\\" st)
     (modify-syntax-entry ?_ "." st)
     (modify-syntax-entry ?| "." st)
-    (modify-syntax-entry ?\u00ab "." st)
-    (modify-syntax-entry ?\u00bb "." st)
-    (modify-syntax-entry ?\u2018 "." st)
-    (modify-syntax-entry ?\u2019 "." st)
-    (modify-syntax-entry ?\u201c "." st)
-    (modify-syntax-entry ?\u201d "." 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 used while in `rst-mode'.")
 
@@ -4235,4 +4235,8 @@ column is used (fill-column vs. end of previous/next 
line)."
 
 (provide 'rst)
 
+;; Local Variables:
+;; coding: utf-8
+;; End:
+
 ;;; rst.el ends here
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index cb65e5f..55a1e6d 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -525,7 +525,7 @@ Do \\[describe-key] on the following bindings to discover 
what they do.
   ;; This is desirable because SGML discards a newline that appears
   ;; immediately after a start tag or immediately before an end tag.
   (setq-local paragraph-start (concat "[ \t]*$\\|\
-\[ \t]*</?\\(" sgml-name-re sgml-attrs-re "\\)?>"))
+[ \t]*</?\\(" sgml-name-re sgml-attrs-re "\\)?>"))
   (setq-local paragraph-separate (concat paragraph-start "$"))
   (setq-local adaptive-fill-regexp "[ \t]*")
   (add-hook 'fill-nobreak-predicate 'sgml-fill-nobreak nil t)
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 5fdf9e3..bf15b26 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -135,8 +135,8 @@ If nil, TeX runs with no options.  See the documentation of 
`tex-command'."
   "TeX commands to use when starting TeX.
 They are shell-quoted and precede the input file name, with a separating space.
 If nil, no commands are used.  See the documentation of `tex-command'."
-  :type '(radio (const :tag "Interactive \(nil\)" nil)
-               (const :tag "Nonstop \(\"\\nonstopmode\\input\"\)"
+  :type '(radio (const :tag "Interactive (nil)" nil)
+               (const :tag "Nonstop (\"\\nonstopmode\\input\")"
                       "\\nonstopmode\\input")
                (string :tag "String at your choice"))
   :group 'tex-run
@@ -266,8 +266,8 @@ tex shell terminates.")
 
 (defvar tex-command "tex"
   "Command to run TeX.
-If this string contains an asterisk \(`*'\), that is replaced by the file name;
-otherwise the value of `tex-start-options', the \(shell-quoted\)
+If this string contains an asterisk \(`*'), that is replaced by the file name;
+otherwise the value of `tex-start-options', the \(shell-quoted)
 value of `tex-start-commands', and the file name are added at the end
 with blanks as separators.
 
@@ -387,7 +387,7 @@ An alternative value is \" . \", if you use a font with a 
narrow period."
       (goto-char (point-min))
       (while (search-forward-regexp
              "\\\\\\(include\\|input\\|verbatiminput\\|bibliography\\)\
-\[ \t]*{\\([^}\n]+\\)}"
+[ \t]*{\\([^}\n]+\\)}"
              nil t)
        (push (cons (concat "<<" (buffer-substring-no-properties
                                  (match-beginning 2)
@@ -1550,7 +1550,7 @@ Puts point on a blank line between them."
   "\\end{" str "}" > \n)
 
 (define-skeleton latex-insert-item
-  "Insert a \item macro."
+  "Insert an \\item macro."
   nil
   \n "\\item " >)
 
@@ -2955,7 +2955,7 @@ There might be text before point."
     ("\\beta" . ?β)
     ("\\gamma" . ?γ)
     ("\\delta" . ?δ)
-    ("\\epsilon" . ?ε)
+    ("\\epsilon" . ?ϵ)
     ("\\zeta" . ?ζ)
     ("\\eta" . ?η)
     ("\\theta" . ?θ)
@@ -3272,7 +3272,8 @@ There might be text before point."
     ("\\prod" . ?∏)
     ("\\propto" . ?∝)
     ("\\qed" . ?∎)
-    ("\\quad" . ? )
+    ("\\qquad" . ?⧢)
+    ("\\quad" . ?␣)
     ("\\rangle" . 10217)            ; Literal ?⟩ breaks indentation.
     ("\\rbrace" . ?})
     ("\\rbrack" . ?\])
@@ -3357,8 +3358,10 @@ There might be text before point."
     ("\\urcorner" . ?⌝)
     ("\\u{i}" . ?ĭ)
     ("\\vDash" . ?⊨)
+    ("\\varepsilon" . ?ε)
     ("\\varprime" . ?′)
     ("\\varpropto" . ?∝)
+    ("\\varrho" . ?ϱ)
     ;; ("\\varsigma" ?ς)               ;FIXME: Looks reversed with the non\var.
     ("\\vartriangleleft" . ?⊲)
     ("\\vartriangleright" . ?⊳)
@@ -3406,16 +3409,17 @@ There might be text before point."
 
 (defun tex--prettify-symbols-compose-p (start end _match)
   (let* ((after-char (char-after end))
-         (after-syntax  (char-syntax after-char)))
+         (after-syntax (char-syntax after-char)))
     (not (or
           ;; Don't compose address@hidden
-          (eq after-syntax ?_)
-          ;; Don't compose inside verbatim blocks!
-          (nth 8 (syntax-ppss))
-          ;; The \alpha in \alpha2 may be composed but of course \alphax may 
not.
+          (eq after-char ?@)
+          ;; The \alpha in \alpha2 or \alpha-\beta may be composed but
+          ;; of course \alphax may not.
           (and (eq after-syntax ?w)
-               (or (< after-char ?0)
-                   (> after-char ?9)))))))
+               (not (memq after-char
+                          '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?+ ?- ?' ?\"))))
+          ;; Don't compose inside verbatim blocks.
+         (eq 2 (nth 7 (syntax-ppss)))))))
 
 (run-hooks 'tex-mode-load-hook)
 
diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el
index 37f10a8..500c1e3 100644
--- a/lisp/textmodes/texinfmt.el
+++ b/lisp/textmodes/texinfmt.el
@@ -1043,7 +1043,7 @@ Leave point after argument."
            (setq texinfo-command-end (point)))
           (t
            (error
-            "Invalid `texinfo-optional-braces-discard' format \(need 
braces?\)")))
+            "Invalid `texinfo-optional-braces-discard' format (need 
braces?)")))
     (delete-region texinfo-command-start texinfo-command-end)))
 
 (defun texinfo-format-parse-line-args ()
@@ -2336,7 +2336,7 @@ Use only the FILENAME arg; for Info, ignore the other 
arguments to @image."
 ;; Write a address@hidden' command on a line and follow it with three
 ;; arguments separated by commas (commas are used as separators in an
 ;; address@hidden' line in the same way).  The first argument to
-;; address@hidden' is the @-command name \(without the `@'\); the
+;; address@hidden' is the @-command name (without the `@'); the
 ;; second argument is the Info start delimiter string; and the third
 ;; argument is the Info end delimiter string.  The latter two arguments
 ;; enclose the highlighted text in the Info file.  A delimiter string
@@ -2491,8 +2491,8 @@ surrounded by in angle brackets."
 Enclose the verbatim text, including the delimiters, in braces.  Print
 text exactly as written (but not the delimiters) in a fixed-width.
 
-For example, @verb\{|@|\} results in @ and
address@hidden@\\='e?\\=`!\\=`+} results in @\\='e?\\=`!\\=`."
+For example, @verb{|@|} results in @ and
address@hidden@\\='e?\\=`!\\=`+} results in @\\='e?\\=`!\\=`."
 
   (let ((delimiter (buffer-substring-no-properties
                    (1+ texinfo-command-end) (+ 2 texinfo-command-end))))
diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el
index 2c6d5b3..5721817 100644
--- a/lisp/textmodes/texinfo.el
+++ b/lisp/textmodes/texinfo.el
@@ -86,7 +86,7 @@ command to gain use of `next-error'."
   "Make Info file from current buffer.
 
 Use the \\[next-error] command to move to the next error
-\(if there are errors\)."
+\(if there are errors)."
   t nil)
 
 (autoload 'kill-compilation
diff --git a/lisp/textmodes/texnfo-upd.el b/lisp/textmodes/texnfo-upd.el
index 0508426..321967a 100644
--- a/lisp/textmodes/texnfo-upd.el
+++ b/lisp/textmodes/texnfo-upd.el
@@ -694,8 +694,8 @@ section titles are often too short to explain a node well.
 
 MENU-LIST has form:
 
-    \(\(\"node-name1\" . \"description\"\)
-    \(\"node-name2\" . \"description\"\) ... \)
+    ((\"node-name1\" . \"description\")
+     (\"node-name2\" . \"description\") ... )
 
 However, the description field might be nil.
 
@@ -1002,9 +1002,9 @@ following menu and the title of the node preceding that 
menu.
 
 The master menu list has this form:
 
-    \(\(\(... \"entry-1-2\"  \"entry-1\"\) \"title-1\"\)
-      \(\(... \"entry-2-2\"  \"entry-2-1\"\) \"title-2\"\)
-      ...\)
+    (((... \"entry-1-2\"  \"entry-1\") \"title-1\")
+     ((... \"entry-2-2\"  \"entry-2-1\") \"title-2\")
+     ...)
 
 However, there does not need to be a title field."
 
@@ -1018,7 +1018,7 @@ However, there does not need to be a title field."
   "Format and insert the master menu in the current buffer."
   (goto-char (point-min))
   ;; Insert a master menu only after `Top' node and before next node
-  ;; \(or include file if there is no next node\).
+  ;; (or include file if there is no next node).
   (unless (re-search-forward "address@hidden [ \t]*top[ \t]*\\(,\\|$\\)" nil t)
     (error "This buffer needs a Top node"))
   (let ((first-chapter
@@ -1407,7 +1407,7 @@ level in the Texinfo file; when looking for the 
`Previous' pointer,
 the section found will be at the same or higher hierarchical level in
 the Texinfo file; when looking for the `Up' pointer, the section found
 will be at some level higher in the Texinfo file.  The fourth argument
-\(one of `next', `previous', or `up'\) specifies whether to find the
+\(one of `next', `previous', or `up') specifies whether to find the
 `Next', `Previous', or `Up' pointer."
   (let ((case-fold-search t))
     (cond ((eq direction 'next)
@@ -1850,8 +1850,8 @@ chapters."
 
 ;; The menu-list has the form:
 ;;
-;;     \(\(\"node-name1\" . \"title1\"\)
-;;       \(\"node-name2\" . \"title2\"\) ... \)
+;;     ((\"node-name1\" . \"title1\")
+;;      (\"node-name2\" . \"title2\") ... )
 ;;
 ;; However, there does not need to be a title field and this function
 ;; does not fill it; however a comment tells you how to do so.
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index a9c539b..654bccd 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -219,7 +219,7 @@ The bounds of THING are determined by 
`bounds-of-thing-at-point'."
 
 (defun thing-at-point-bounds-of-list-at-point ()
   "Return the bounds of the list at point.
-\[Internal function used by `bounds-of-thing-at-point'.]"
+[Internal function used by `bounds-of-thing-at-point'.]"
   (save-excursion
     (let ((opoint (point))
          (beg (ignore-errors
diff --git a/lisp/tutorial.el b/lisp/tutorial.el
index f8660f5..a4a422f 100644
--- a/lisp/tutorial.el
+++ b/lisp/tutorial.el
@@ -63,8 +63,8 @@ with default Emacs bindings information about this is shown.
 
 VALUE should have either of these formats:
 
-  \(cua-mode)
-  \(current-binding KEY-FUN DEF-FUN KEY WHERE)
+  (cua-mode)
+  (current-binding KEY-FUN DEF-FUN KEY WHERE)
 
 Where
   KEY         is a key sequence whose standard binding has been changed
@@ -135,7 +135,7 @@ options:
                            ;; then save this value in mapsym
                            (setq mapsym s)))))
             (insert
-             (format
+             (format-message
               "The default Emacs binding for the key %s is the command `%s'.  "
               (key-description key)
               db))
@@ -402,8 +402,8 @@ where
   REMARK      is a list with info about rebinding. It has either of
               these formats:
 
-                \(TEXT cua-mode)
-                \(TEXT current-binding KEY-FUN DEF-FUN KEY WHERE)
+                (TEXT cua-mode)
+                (TEXT current-binding KEY-FUN DEF-FUN KEY WHERE)
 
               Here TEXT is a link text to show to the user.  The
               rest of the list is used to show information when
diff --git a/lisp/type-break.el b/lisp/type-break.el
index 8503736..5f56956 100644
--- a/lisp/type-break.el
+++ b/lisp/type-break.el
@@ -677,7 +677,7 @@ INTERVAL is the full length of an interval (defaults to 
TIME)."
 (defun type-break-check ()
   "Ask to take a typing break if appropriate.
 This may be the case either because the scheduled time has come \(and the
-minimum keystroke threshold has been reached\) or because the maximum
+minimum keystroke threshold has been reached) or because the maximum
 keystroke threshold has been exceeded."
   (type-break-file-keystroke-count)
   (let* ((min-threshold (car type-break-keystroke-threshold))
diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el
index a7b3d16..df9cf62 100644
--- a/lisp/url/url-cookie.el
+++ b/lisp/url/url-cookie.el
@@ -264,7 +264,7 @@ telling Microsoft that."
     (and expires
         (string-match
          (concat "^[^,]+, +\\(..\\)-\\(...\\)-\\(..\\) +"
-                 "\\(..:..:..\\) +\\[*\\([^\]]+\\)\\]*$")
+                 "\\(..:..:..\\) +\\[*\\([^]]+\\)\\]*$")
          expires)
         (setq expires (concat (match-string 1 expires) " "
                               (match-string 2 expires) " "
@@ -356,7 +356,7 @@ to run the `url-cookie-setup-save-timer' function manually."
 
 (defun url-cookie-list ()
   "Display a buffer listing the current URL cookies, if there are any.
-Use \\<url-cookie-mode-map>\\\[url-cookie-delete] to remove cookies."
+Use \\<url-cookie-mode-map>\\[url-cookie-delete] to remove cookies."
   (interactive)
   (when (and (null url-cookie-secure-storage)
             (null url-cookie-storage))
diff --git a/lisp/url/url-dav.el b/lisp/url/url-dav.el
index 61ca088..1cf6b82 100644
--- a/lisp/url/url-dav.el
+++ b/lisp/url/url-dav.el
@@ -495,7 +495,7 @@ make sure you are comfortable with it leaking to the 
outside world.")
 (defun url-dav-lock-resource (url exclusive &optional depth)
   "Request a lock on URL.  If EXCLUSIVE is non-nil, get an exclusive lock.
 Optional 3rd argument DEPTH says how deep the lock should go, default is 0
-\(lock only the resource and none of its children\).
+\(lock only the resource and none of its children).
 
 Returns a cons-cell of (SUCCESSFUL-RESULTS . FAILURE-RESULTS).
 SUCCESSFUL-RESULTS is a list of (URL STATUS locktoken).
diff --git a/lisp/url/url-gw.el b/lisp/url/url-gw.el
index cc0e4f8..ab61802 100644
--- a/lisp/url/url-gw.el
+++ b/lisp/url/url-gw.el
@@ -39,7 +39,7 @@
   :group 'url-gateway)
 
 (defcustom url-gateway-prompt-pattern
-  "^[^#$%>;]*[#$%>;] *" ;; "bash\\|\$ *\r?$\\|> *\r?"
+  "^[^#$%>;]*[#$%>;] *" ;; "bash\\|[$>] *\r?$"
   "A regular expression matching a shell prompt."
   :type 'regexp
   :group 'url-gateway)
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el
index 001a783..845195e 100644
--- a/lisp/url/url-handlers.el
+++ b/lisp/url/url-handlers.el
@@ -117,9 +117,9 @@ When URL Handler mode is enabled, this regular expression is
 added to `file-name-handler-alist'.
 
 Some valid URL protocols just do not make sense to visit
-interactively \(about, data, info, irc, mailto, etc\).  This
+interactively \(about, data, info, irc, mailto, etc.).  This
 regular expression avoids conflicts with local files that look
-like URLs \(Gnus is particularly bad at this\)."
+like URLs \(Gnus is particularly bad at this)."
   :group 'url
   :type 'regexp
   :version "25.1"
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index 6a7d8e2..7367a1e 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -25,8 +25,8 @@
 
 ;;; Code:
 
+(require 'cl-lib)
 (eval-when-compile
-  (require 'cl-lib)
   (require 'subr-x))
 
 (defvar url-callback-arguments)
@@ -646,6 +646,12 @@ should be shown to the user."
                ;; compute the redirection relative to the URL of the proxy.
               (setq redirect-uri
                     (url-expand-file-name redirect-uri url-http-target-url)))
+          ;; Do not automatically include an authorization header in the
+          ;; redirect.  If needed it will be regenerated by the relevant
+          ;; auth scheme when the new request happens.
+          (setq url-http-extra-headers
+                (cl-remove "Authorization"
+                           url-http-extra-headers :key 'car :test 'equal))
            (let ((url-request-method url-http-method)
                 (url-request-data url-http-data)
                 (url-request-extra-headers url-http-extra-headers))
diff --git a/lisp/vc/add-log.el b/lisp/vc/add-log.el
index d120d05..9ab8d75 100644
--- a/lisp/vc/add-log.el
+++ b/lisp/vc/add-log.el
@@ -158,7 +158,7 @@ use the file's name relative to the directory of the change 
log file."
   :group 'change-log)
 
 (defcustom change-log-version-number-regexp-list
-  (let ((re "\\([0-9]+\.[0-9.]+\\)"))
+  (let ((re "\\([0-9]+\\.[0-9.]+\\)"))
     (list
      ;;  (defconst ad-version "2.15"
      (concat "^(def[^ \t\n]+[ \t]+[^ \t\n][ \t]\"" re)
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index 37ed4a5..464e375 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -1427,8 +1427,8 @@ modified lines of the diff."
                   (diff-hunk-style)))))
     (set (make-local-variable 'whitespace-trailing-regexp)
         (if (eq style 'context)
-            "^[-\+!] .*?\\([\t ]+\\)$"
-          "^[-\+!<>].*?\\([\t ]+\\)$"))))
+            "^[-+!] .*?\\([\t ]+\\)$"
+          "^[-+!<>].*?\\([\t ]+\\)$"))))
 
 (defun diff-delete-if-empty ()
   ;; An empty diff file means there's no more diffs to integrate, so we
diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el
index 352892c..7647544 100644
--- a/lisp/vc/ediff-diff.el
+++ b/lisp/vc/ediff-diff.el
@@ -168,7 +168,7 @@ This variable can be set either in .emacs or toggled 
interactively.
 Use `setq-default' if setting it in .emacs")
 
 (ediff-defvar-local ediff-auto-refine-limit 14000
-  "Auto-refine only the regions of this size \(in bytes\) or less.")
+  "Auto-refine only the regions of this size (in bytes) or less.")
 
 ;;; General
 
diff --git a/lisp/vc/ediff-init.el b/lisp/vc/ediff-init.el
index 8c935bf..bf21159 100644
--- a/lisp/vc/ediff-init.el
+++ b/lisp/vc/ediff-init.el
@@ -776,7 +776,7 @@ TYPE-OF-EMACS is either 'xemacs or 'emacs."
 
 ;; A var local to each control panel buffer.  Indicates highlighting style
 ;; in effect for this buffer: `face', `ascii',
-;; `off' -- turned off \(on a dumb terminal only\).
+;; `off' -- turned off (on a dumb terminal only).
 (ediff-defvar-local ediff-highlighting-style
   (if (and (ediff-has-face-support-p) ediff-use-faces) 'face 'ascii)
   "")
diff --git a/lisp/vc/ediff-ptch.el b/lisp/vc/ediff-ptch.el
index b45d533..a3b8bf0 100644
--- a/lisp/vc/ediff-ptch.el
+++ b/lisp/vc/ediff-ptch.el
@@ -90,14 +90,14 @@ See also `ediff-backup-specs'."
           ;; traditional `patch'
           (format "-b %s" ediff-backup-extension))))
   "Backup directives to pass to the patch program.
-Ediff requires that the old version of the file \(before applying the patch\)
+Ediff requires that the old version of the file \(before applying the patch)
 be saved in a file named `the-patch-file.extension'.  Usually `extension' is
 `.orig', but this can be changed by the user and may depend on the system.
 Therefore, Ediff needs to know the backup extension used by the patch program.
 
 Some versions of the patch program let you specify `-b backup-extension'.
 Other versions only permit `-b', which assumes the extension `.orig'
-\(in which case ediff-backup-extension MUST be also `.orig'\).  The latest
+\(in which case ediff-backup-extension MUST be also `.orig').  The latest
 versions of GNU patch require `-b -z backup-extension'.
 
 Note that both `ediff-backup-extension' and `ediff-backup-specs'
@@ -333,7 +333,7 @@ program."
                      (ediff-with-current-buffer standard-output
                        (fundamental-mode))
                      (princ
-                      (format "
+                      (format-message "
 The patch file contains a context diff for
        %s
        %s
@@ -342,7 +342,7 @@ to be patched on your system.  If you know the correct file 
name,
 please enter it now.
 
 If you don't know and still would like to apply patches to
-other files, enter /dev/null
+other files, enter `/dev/null'.
 "
                               (substring (car proposed-file-names) 6)
                               (substring (cdr proposed-file-names) 6))))
diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el
index bf5bb5c..e664f9f 100644
--- a/lisp/vc/ediff-util.el
+++ b/lisp/vc/ediff-util.el
@@ -1500,7 +1500,7 @@ Used in ediff-windows/regions only."
     (select-window wind)))
 
 (defun ediff-scroll-vertically (&optional arg)
-  "Vertically scroll buffers A, B \(and C if appropriate\).
+  "Vertically scroll buffers A, B (and C if appropriate).
 With optional argument ARG, scroll ARG lines; otherwise scroll by nearly
 the one half of the height of window-A."
   (interactive "P")
@@ -1544,7 +1544,7 @@ the one half of the height of window-A."
 
 
 (defun ediff-scroll-horizontally (&optional arg)
-  "Horizontally scroll buffers A, B \(and C if appropriate\).
+  "Horizontally scroll buffers A, B (and C if appropriate).
 If an argument is given, that is how many columns are scrolled, else nearly
 the width of the A/B/C windows."
   (interactive "P")
@@ -1822,7 +1822,7 @@ If the prefix is negative, count differences from the 
end."
 
 (defun ediff-jump-to-difference-at-point (arg)
   "Go to difference closest to the point in buffer A, B, or C.
-The buffer depends on last command character \(a, b, or c\) that invoked this
+The buffer depends on last command character \(a, b, or c) that invoked this
 command.  For instance, if the command was `ga' then the point value in buffer
 A is used.
 With a prefix argument, synchronize all files around the current point position
@@ -1921,7 +1921,7 @@ in the specified buffer."
 ;;; Copying diffs.
 
 (defun ediff-diff-to-diff (arg &optional keys)
-  "Copy buffer-X'th difference region to buffer Y \(X,Y are A, B, or C\).
+  "Copy buffer-X'th difference region to buffer Y (X,Y are A, B, or C).
 If numerical prefix argument, copy the difference specified in the arg.
 Otherwise, copy the difference given by `ediff-current-difference'.
 This command assumes it is bound to a 2-character key sequence, `ab', `ba',
@@ -1986,7 +1986,7 @@ ARG is a prefix argument.  If nil, copy the current 
difference region."
 
 
 
-;; Copy diff N from FROM-BUF-TYPE \(given as A, B or C\) to TO-BUF-TYPE.
+;; Copy diff N from FROM-BUF-TYPE (given as A, B or C) to TO-BUF-TYPE.
 ;; If optional DO-NOT-SAVE is non-nil, do not save the old value of the
 ;; target diff.  This is used in merging, when constructing the merged
 ;; version.
@@ -2065,7 +2065,7 @@ ARG is a prefix argument.  If nil, copy the current 
difference region."
       (message "%s" messg))
     ))
 
-;; Save Nth diff of buffer BUF-TYPE \(A, B, or C\).
+;; Save Nth diff of buffer BUF-TYPE (A, B, or C).
 ;; That is to say, the Nth diff on the `ediff-killed-diffs-alist'.  REG
 ;; is the region to save.  It is redundant here, but is passed anyway, for
 ;; convenience.
@@ -2385,10 +2385,10 @@ the number seen by the user."
   "Finish an Ediff session and exit Ediff.
 Unselects the selected difference, if any, restores the read-only and modified
 flags of the compared file buffers, kills Ediff buffers for this session
-\(but not buffers A, B, C\).
+\(but not buffers A, B, C).
 
 If `ediff-keep-variants' is nil, the user will be asked whether the buffers
-containing the variants should be removed \(if they haven't been modified\).
+containing the variants should be removed \(if they haven't been modified).
 If it is t, they will be preserved unconditionally.  A prefix argument,
 temporarily reverses the meaning of this variable."
   (interactive "P")
@@ -3312,7 +3312,7 @@ and `wd' saves the diff output.
 
 With prefix argument, `wd' saves plain diff output.
 Without an argument, it saves customized diff argument, if available
-\(and plain output, if customized output was not generated\)."
+\(and plain output, if customized output was not generated)."
   (interactive "P")
   (ediff-barf-if-not-control-buffer)
   (ediff-compute-custom-diffs-maybe)
diff --git a/lisp/vc/ediff-wind.el b/lisp/vc/ediff-wind.el
index c31df82..e0887f0 100644
--- a/lisp/vc/ediff-wind.el
+++ b/lisp/vc/ediff-wind.el
@@ -211,7 +211,7 @@ responsibility."
   "Function to call to determine the desired location for the control panel.
 Expects three parameters: the control buffer, the desired width and height
 of the control frame.  It returns an association list
-of the form \(\(top . <position>\) \(left . <position>\)\)"
+of the form \((top . <position>) \(left . <position>))"
   :type 'function
   :group 'ediff-window)
 
@@ -432,7 +432,7 @@ into icons, regardless of the window manager."
            three-way-comparison ediff-3way-comparison-job))
     ;; if in minibuffer go somewhere else
     (if (save-match-data
-         (string-match "\*Minibuf-" (buffer-name (window-buffer))))
+         (string-match "\\*Minibuf-" (buffer-name (window-buffer))))
        (select-window (next-window nil 'ignore-minibuf)))
     (delete-other-windows)
     (set-window-dedicated-p (selected-window) nil)
diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el
index 65ca0bd..3a2d1e4 100644
--- a/lisp/vc/ediff.el
+++ b/lisp/vc/ediff.el
@@ -963,7 +963,7 @@ If WIND-B is nil, use window next to WIND-A."
 ;;;###autoload
 (defun ediff-regions-wordwise (buffer-A buffer-B &optional startup-hooks)
   "Run Ediff on a pair of regions in specified buffers.
-Regions \(i.e., point and mark\) can be set in advance or marked interactively.
+Regions (i.e., point and mark) can be set in advance or marked interactively.
 This function is effective only for relatively small regions, up to 200
 lines.  For large regions, use `ediff-regions-linewise'."
   (interactive
@@ -1003,7 +1003,7 @@ lines.  For large regions, use `ediff-regions-linewise'."
 ;;;###autoload
 (defun ediff-regions-linewise (buffer-A buffer-B &optional startup-hooks)
   "Run Ediff on a pair of regions in specified buffers.
-Regions \(i.e., point and mark\) can be set in advance or marked interactively.
+Regions (i.e., point and mark) can be set in advance or marked interactively.
 Each region is enlarged to contain full lines.
 This function is effective for large regions, over 100-200
 lines.  For small regions, use `ediff-regions-wordwise'."
diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el
index acbd9c0..9857116 100644
--- a/lisp/vc/log-edit.el
+++ b/lisp/vc/log-edit.el
@@ -905,7 +905,7 @@ Return non-nil if it is."
 The return value looks like this:
   (LOGBUFFER (ENTRYSTART ENTRYEND) ...)
 where LOGBUFFER is the name of the ChangeLog buffer, and each
-\(ENTRYSTART . ENTRYEND\) pair is a buffer region."
+\(ENTRYSTART . ENTRYEND) pair is a buffer region."
   (let ((changelog-file-name
          (let ((default-directory
                  (file-name-directory (expand-file-name file)))
diff --git a/lisp/vc/vc-annotate.el b/lisp/vc/vc-annotate.el
index 3a50c9b..ab3161e 100644
--- a/lisp/vc/vc-annotate.el
+++ b/lisp/vc/vc-annotate.el
@@ -269,7 +269,7 @@ cover the range from the oldest annotation to the newest."
      (/ (- (if full newest current) oldest)
         (vc-annotate-oldest-in-map vc-annotate-color-map))
      (if full newest))
-    (message "Redisplaying annotation...done \(%s\)"
+    (message "Redisplaying annotation...done (%s)"
             (if full
                 (format "Spanned from %.1f to %.1f days old"
                         (- current oldest)
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index 5f8dd0b..9b2711d 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -649,7 +649,7 @@ or a superior directory.")
                                            "" (replace-regexp-in-string
                                                "\n[ \t]?" " " str)))))
 
-(defun vc-bzr-checkin (files comment)
+(defun vc-bzr-checkin (files comment &optional _rev)
   "Check FILES in to bzr with log message COMMENT."
   (apply 'vc-bzr-command "commit" nil 0 files
          (cons "-m" (log-edit-extract-headers
diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el
index 0aa9c5a..5f5807f 100644
--- a/lisp/vc/vc-cvs.el
+++ b/lisp/vc/vc-cvs.el
@@ -107,7 +107,7 @@ switches."
   :version "25.1"
   :group 'vc-cvs)
 
-(defcustom vc-cvs-header '("\$Id\$")
+(defcustom vc-cvs-header '("$Id\ $")
   "Header keywords to be inserted by `vc-insert-headers'."
   :version "24.1"     ; no longer consult the obsolete vc-header-alist
   :type '(repeat string)
@@ -332,38 +332,20 @@ its parents."
                   (directory-file-name dir))))
     (eq dir t)))
 
-;; vc-cvs-checkin used to take a 'rev' second argument that allowed
-;; checking in onto a specified branch tip rather than the current
-;; default branch, but nothing in the entire rest of VC exercised
-;; this code.  Removing it simplifies the backend interface for all
-;; modes.
-;;
-;; Here's the setup code preserved in amber, in case the logic needs
-;; to be broken out into a method someday; (if rev (concat "-r" rev))
-;; used to be part of the switches passed to vc-cvs-command.
-;;
-;;  (unless (or (not rev) (vc-cvs-valid-revision-number-p rev))
-;;    (if (not (vc-cvs-valid-symbolic-tag-name-p rev))
-;;     (error "%s is not a valid symbolic tag name" rev)
-;;      ;; If the input revision is a valid symbolic tag name, we create it
-;;      ;; as a branch, commit and switch to it.
-;;      (apply 'vc-cvs-command nil 0 files "tag" "-b" (list rev))
-;;      (apply 'vc-cvs-command nil 0 files "update" "-r" (list rev))
-;;      (mapc (lambda (file) (vc-file-setprop file 'vc-cvs-sticky-tag rev))
-;;         files)))
-;;
-;; The following postamble cleaned up after the branch change:
-;;
-;;    ;; if this was an explicit check-in (does not include creation of
-;;    ;; a branch), remove the sticky tag.
-;;    (if (and rev (not (vc-cvs-valid-symbolic-tag-name-p rev)))
-;;     (vc-cvs-command nil 0 files "update" "-A"))))
-;;       files)))
-;;
-(defun vc-cvs-checkin (files comment)
+(defun vc-cvs-checkin (files comment &optional rev)
   "CVS-specific version of `vc-backend-checkin'."
+ (unless (or (not rev) (vc-cvs-valid-revision-number-p rev))
+   (if (not (vc-cvs-valid-symbolic-tag-name-p rev))
+       (error "%s is not a valid symbolic tag name" rev)
+     ;; If the input revision is a valid symbolic tag name, we create it
+     ;; as a branch, commit and switch to it.
+     (apply 'vc-cvs-command nil 0 files "tag" "-b" (list rev))
+     (apply 'vc-cvs-command nil 0 files "update" "-r" (list rev))
+     (mapc (lambda (file) (vc-file-setprop file 'vc-cvs-sticky-tag rev))
+           files)))
   (let ((status (apply 'vc-cvs-command nil 1 files
-                      "ci" (concat "-m" comment)
+                      "ci" (if rev (concat "-r" rev))
+                       (concat "-m" comment)
                       (vc-switches 'CVS 'checkin))))
     (set-buffer "*vc*")
     (goto-char (point-min))
@@ -394,7 +376,11 @@ its parents."
     ;; tell it from the permissions of the file (see
     ;; vc-cvs-checkout-model).
     (mapc (lambda (file) (vc-file-setprop file 'vc-checkout-model nil))
-         files)))
+         files)
+    ;; if this was an explicit check-in (does not include creation of
+    ;; a branch), remove the sticky tag.
+    (if (and rev (not (vc-cvs-valid-symbolic-tag-name-p rev)))
+       (vc-cvs-command nil 0 files "update" "-A"))))
 
 (defun vc-cvs-find-revision (file rev buffer)
   (apply 'vc-cvs-command
@@ -932,7 +918,7 @@ state."
        (when (and full
                   (re-search-forward
                    "\\(RCS Version\\|RCS Revision\\|Repository revision\\):\
-\[\t ]+\\([0-9.]+\\)"
+[\t ]+\\([0-9.]+\\)"
                    nil t))
            (vc-file-setprop file 'vc-latest-revision (match-string 2)))
        (vc-file-setprop
diff --git a/lisp/vc/vc-dav.el b/lisp/vc/vc-dav.el
index 3326f29..880e14b 100644
--- a/lisp/vc/vc-dav.el
+++ b/lisp/vc/vc-dav.el
@@ -82,7 +82,7 @@ See `vc-checkout-model' for a list of possible values."
   ;; Do we need to do anything here?  FIXME?
   )
 
-(defun vc-dav-checkin (url comment)
+(defun vc-dav-checkin (url comment &optional _rev)
   "Commit changes in URL to WebDAV. COMMENT is used as a check-in comment."
   ;; This should PUT the resource and release any locks that we hold.
   )
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 8a0f554..2f04393 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -674,7 +674,7 @@ If toggling on, also insert its message into the buffer."
   "Major mode for editing Git log messages.
 It is based on `log-edit-mode', and has Git-specific extensions.")
 
-(defun vc-git-checkin (files comment)
+(defun vc-git-checkin (files comment &optional _rev)
   (let* ((file1 (or (car files) default-directory))
          (root (vc-git-root file1))
          (default-directory (expand-file-name root))
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index f634e2e..4957398 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -465,7 +465,7 @@ Optional arg REVISION is a revision to annotate from."
 
 (declare-function log-edit-extract-headers "log-edit" (headers string))
 
-(defun vc-hg-checkin (files comment)
+(defun vc-hg-checkin (files comment &optional _rev)
   "Hg-specific version of `vc-backend-checkin'.
 REV is ignored."
   (apply 'vc-hg-command nil 0 files
diff --git a/lisp/vc/vc-mtn.el b/lisp/vc/vc-mtn.el
index 685ef3b..b56a08f 100644
--- a/lisp/vc/vc-mtn.el
+++ b/lisp/vc/vc-mtn.el
@@ -199,7 +199,7 @@ switches."
 
 (declare-function log-edit-extract-headers "log-edit" (headers string))
 
-(defun vc-mtn-checkin (files comment)
+(defun vc-mtn-checkin (files comment &optional _rev)
   (apply 'vc-mtn-command nil 0 files
         (nconc (list "commit" "-m")
                (log-edit-extract-headers '(("Author" . "--author")
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 71ffa55..ba13364 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -76,7 +76,7 @@ If nil, use the value of `vc-diff-switches'.  If t, use no 
switches."
   :version "21.1"
   :group 'vc-rcs)
 
-(defcustom vc-rcs-header '("\$Id\$")
+(defcustom vc-rcs-header '("$Id\ $")
   "Header keywords to be inserted by `vc-insert-headers'."
   :type '(repeat string)
   :version "24.1"     ; no longer consult the obsolete vc-header-alist
@@ -306,27 +306,23 @@ whether to remove it."
           (yes-or-no-p (format "Directory %s is empty; remove it? " dir))
           (delete-directory dir)))))
 
-;; It used to be possible to pass in a value for the variable rev, but
-;; nothing in the rest of VC used this capability.  Removing it makes the
-;; backend interface simpler for all modes.
-;;
-(defun vc-rcs-checkin (files comment)
+(defun vc-rcs-checkin (files comment &optional rev)
   "RCS-specific version of `vc-backend-checkin'."
-  (let (rev (switches (vc-switches 'RCS 'checkin)))
+  (let ((switches (vc-switches 'RCS 'checkin)))
     ;; Now operate on the files
     (dolist (file (vc-expand-dirs files 'RCS))
       (let ((old-version (vc-working-revision file)) new-version
            (default-branch (vc-file-getprop file 'vc-rcs-default-branch)))
        ;; Force branch creation if an appropriate
        ;; default branch has been set.
-       (and default-branch
+       (and (not rev)
+             default-branch
             (string-match (concat "^" (regexp-quote old-version) "\\.")
                           default-branch)
             (setq rev default-branch)
             (setq switches (cons "-f" switches)))
-       (if old-version
-           (setq rev (vc-branch-part old-version))
-         (error "can't find current branch"))
+       (if (and (not rev) old-version)
+           (setq rev (vc-branch-part old-version)))
        (apply #'vc-do-command "*vc*" 0 "ci" (vc-master-name file)
               ;; if available, use the secure check-in option
               (and (vc-rcs-release-p "5.6.4") "-j")
@@ -1118,12 +1114,12 @@ Returns: nil            if no headers were found
 (defun vc-release-greater-or-equal (r1 r2)
   "Compare release numbers, represented as strings.
 Release components are assumed cardinal numbers, not decimal fractions
-\(5.10 is a higher release than 5.9\).  Omitted fields are considered
-lower \(5.6.7 is earlier than 5.6.7.1\).  Comparison runs till the end
+\(5.10 is a higher release than 5.9).  Omitted fields are considered
+lower \(5.6.7 is earlier than 5.6.7.1).  Comparison runs till the end
 of the string is found, or a non-numeric component shows up \(5.6.7 is
 earlier than \"5.6.7 beta\", which is probably not what you want in
-some cases\).  This code is suitable for existing RCS release numbers.
-CVS releases are handled reasonably, too \(1.3 < 1.4* < 1.5\)."
+some cases).  This code is suitable for existing RCS release numbers.
+CVS releases are handled reasonably, too \(1.3 < 1.4* < 1.5)."
   (let (v1 v2 i1 i2)
     (catch 'done
       (or (and (string-match "^\\.?\\([0-9]+\\)" r1)
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index 8d8d9e8..a3facc5 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -222,10 +222,11 @@ to the SCCS command."
       (stringp (vc-sccs-search-project-dir (or (file-name-directory file) "")
                                           (file-name-nondirectory file)))))
 
-(defun vc-sccs-checkin (files comment)
+(defun vc-sccs-checkin (files comment &optional rev)
   "SCCS-specific version of `vc-backend-checkin'."
   (dolist (file (vc-expand-dirs files 'SCCS))
     (apply 'vc-sccs-do-command nil 0 "delta" (vc-master-name file)
+           (if rev (concat "-r" rev))
           (concat "-y" comment)
           (vc-switches 'SCCS 'checkin))
        (vc-sccs-do-command nil 0 "get" (vc-master-name file))))
diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el
index d9aa1b1..69e4036 100644
--- a/lisp/vc/vc-src.el
+++ b/lisp/vc/vc-src.el
@@ -227,7 +227,7 @@ This function differs from vc-do-command in that it invokes 
`vc-src-program'."
                                           file
                                         (file-name-directory file)))))
 
-(defun vc-src-checkin (files comment)
+(defun vc-src-checkin (files comment &optional _rev)
   "SRC-specific version of `vc-backend-checkin'.
 REV is ignored."
   (vc-src-command nil files "commit" "-m" comment))
diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el
index 755dbc1..4ef63a2 100644
--- a/lisp/vc/vc-svn.el
+++ b/lisp/vc/vc-svn.el
@@ -106,7 +106,7 @@ switches."
   :version "25.1"
   :group 'vc-svn)
 
-(defcustom vc-svn-header '("\$Id\$")
+(defcustom vc-svn-header '("$Id\ $")
   "Header keywords to be inserted by `vc-insert-headers'."
   :version "24.1"     ; no longer consult the obsolete vc-header-alist
   :type '(repeat string)
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 3b9e788..f08e562 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -233,12 +233,13 @@
 ;;   Unregister FILE from this backend.  This is only needed if this
 ;;   backend may be used as a "more local" backend for temporary editing.
 ;;
-;; * checkin (files comment)
+;; * checkin (files comment &optional rev)
 ;;
 ;;   Commit changes in FILES to this backend. COMMENT is used as a
 ;;   check-in comment.  The implementation should pass the value of
-;;   vc-checkin-switches to the backend command.  The revision argument
-;;   of some older VC versions is no longer supported.
+;;   vc-checkin-switches to the backend command.  The optional REV
+;;   revision argument is only supported with some older VCSes, like
+;;   RCS and CVS, and is otherwise silently ignored.
 ;;
 ;; * find-revision (file rev buffer)
 ;;
@@ -850,9 +851,9 @@ See `run-hooks'."
 
 (defcustom vc-static-header-alist
   '(("\\.c\\'" .
-     "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n#endif /* lint */\n"))
+     "\n#ifndef lint\nstatic char vcid[] = \"%s\";\n#endif /* lint */\n"))
   "Associate static header string templates with file types.
-A \%s in the template is replaced with the first string associated with
+A %s in the template is replaced with the first string associated with
 the file's version control type in `vc-BACKEND-header'."
   :type '(repeat (cons :format "%v"
                       (regexp :tag "File Type")
@@ -1221,10 +1222,15 @@ For old-style locking-based version control systems, 
like RCS:
            (message "No files remain to be committed")
          (if (not verbose)
              (vc-checkin ready-for-commit backend)
-            (let ((new-backend (vc-read-backend "New backend: ")))
-             (if new-backend
-                  (dolist (file files)
-                    (vc-transfer-file file new-backend))))))))
+           (let* ((revision (read-string "New revision or backend: "))
+                   (revision-downcase (downcase revision)))
+             (if (member
+                  revision-downcase
+                  (mapcar (lambda (arg) (downcase (symbol-name arg)))
+                          vc-handled-backends))
+                 (let ((vsym (intern revision-downcase)))
+                   (dolist (file files) (vc-transfer-file file vsym)))
+               (vc-checkin ready-for-commit backend nil nil revision)))))))
      ;; locked by somebody else (locking VCSes only)
      ((stringp state)
       ;; In the old days, we computed the revision once and used it on
@@ -1522,11 +1528,13 @@ Type \\[vc-next-action] to check in changes.")
      ".\n")
     (message "Please explain why you stole the lock.  Type C-c C-c when 
done.")))
 
-(defun vc-checkin (files backend &optional comment initial-contents)
+(defun vc-checkin (files backend &optional comment initial-contents rev)
   "Check in FILES. COMMENT is a comment string; if omitted, a
 buffer is popped up to accept a comment.  If INITIAL-CONTENTS is
 non-nil, then COMMENT is used as the initial contents of the log
 entry buffer.
+The optional argument REV may be a string specifying the new revision
+level (only supported for some older VCSes, like RCS and CVS).
 
 Runs the normal hooks `vc-before-checkin-hook' and `vc-checkin-hook'."
   (when vc-before-checkin-hook
@@ -1549,7 +1557,7 @@ Runs the normal hooks `vc-before-checkin-hook' and 
`vc-checkin-hook'."
        ;; vc-checkin-switches, but 'the' local buffer is
        ;; not a well-defined concept for filesets.
        (progn
-         (vc-call-backend backend 'checkin files comment)
+         (vc-call-backend backend 'checkin files comment rev)
          (mapc 'vc-delete-automatic-version-backups files))
        `((vc-state . up-to-date)
          (vc-checkout-time . ,(nth 5 (file-attributes file)))
@@ -2093,7 +2101,7 @@ changes from the current branch."
 (defun vc-tag-precondition (dir)
   "Scan the tree below DIR, looking for files not up-to-date.
 If any file is not up-to-date, return the name of the first such file.
-\(This means, neither tag creation nor retrieval is allowed.\)
+\(This means, neither tag creation nor retrieval is allowed.)
 If one or more of the files are currently visited, return `visited'.
 Otherwise, return nil."
   (let ((status nil))
diff --git a/lisp/vcursor.el b/lisp/vcursor.el
index 440a278..7e50326 100644
--- a/lisp/vcursor.el
+++ b/lisp/vcursor.el
@@ -573,11 +573,11 @@ With optional NOT-THIS non-nil never return the current 
window.
 
 With NEW-WIN non-nil, display the virtual cursor buffer in another
 window if the virtual cursor is not currently visible \(note, however,
-that this function never changes `window-point'\).
+that this function never changes `window-point').
 
 With THIS-FRAME non-nil, don't search other frames for a new window
 \(though if the vcursor is already off-frame then its current window is
-always considered, and the value of `pop-up-frames' is always respected\).
+always considered, and the value of `pop-up-frames' is always respected).
 
 Returns nil if the virtual cursor is not visible anywhere suitable.
 Set `vcursor-window' to the returned value as a side effect."
diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 0c20850..839ca8c 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -891,22 +891,22 @@ Used when `whitespace-style' includes `lines' or 
`lines-tail'."
 ;; Hacked from `visible-whitespace-mappings' in visws.el
 (defcustom whitespace-display-mappings
   '(
-    (space-mark   ?\     [?\u00B7]     [?.])           ; space - centered dot
-    (space-mark   ?\xA0  [?\u00A4]     [?_])           ; hard space - currency
+    (space-mark   ?\     [?·]     [?.])                ; space - middle dot
+    (space-mark   ?\xA0  [?¤]     [?_])                ; hard space - currency 
sign
     ;; NEWLINE is displayed using the face `whitespace-newline'
     (newline-mark ?\n    [?$ ?\n])                     ; eol - dollar sign
-    ;; (newline-mark ?\n    [?\u21B5 ?\n] [?$ ?\n])    ; eol - downwards arrow
-    ;; (newline-mark ?\n    [?\u00B6 ?\n] [?$ ?\n])    ; eol - pilcrow
-    ;; (newline-mark ?\n    [?\u00AF ?\n]  [?$ ?\n])   ; eol - overscore
-    ;; (newline-mark ?\n    [?\u00AC ?\n]  [?$ ?\n])   ; eol - negation
-    ;; (newline-mark ?\n    [?\u00B0 ?\n]  [?$ ?\n])   ; eol - degrees
+    ;; (newline-mark ?\n    [?↵ ?\n] [?$ ?\n]) ; eol - downwards arrow
+    ;; (newline-mark ?\n    [?¶ ?\n] [?$ ?\n]) ; eol - pilcrow
+    ;; (newline-mark ?\n    [?¯ ?\n]  [?$ ?\n])        ; eol - overscore
+    ;; (newline-mark ?\n    [?¬ ?\n]  [?$ ?\n])        ; eol - negation
+    ;; (newline-mark ?\n    [?° ?\n]  [?$ ?\n])        ; eol - degrees
     ;;
     ;; WARNING: the mapping below has a problem.
     ;; When a TAB occupies exactly one column, it will display the
     ;; character ?\xBB at that column followed by a TAB which goes to
     ;; the next TAB column.
     ;; If this is a problem for you, please, comment the line below.
-    (tab-mark     ?\t    [?\u00BB ?\t] [?\\ ?\t])      ; tab - left quote mark
+    (tab-mark     ?\t    [?» ?\t] [?\\ ?\t])   ; tab - right guillemet
     )
   "Specify an alist of mappings for displaying characters.
 
@@ -2581,5 +2581,8 @@ It should be added buffer-locally to 
`write-file-functions'."
 
 (run-hooks 'whitespace-load-hook)
 
+;; Local Variables:
+;; coding: utf-8
+;; End:
 
 ;;; whitespace.el ends here
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index b64de47..0d9157a 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -2654,8 +2654,7 @@ Return an alist of (TYPE MATCH)."
   (save-excursion
     (let ((children (widget-get widget :children))
          (inhibit-read-only t)
-         before-change-functions
-         after-change-functions)
+         (inhibit-modification-hooks t))
       (cond (before
             (goto-char (widget-get before :entry-from)))
            (t
@@ -2679,8 +2678,7 @@ Return an alist of (TYPE MATCH)."
     (let ((buttons (copy-sequence (widget-get widget :buttons)))
          button
          (inhibit-read-only t)
-         before-change-functions
-         after-change-functions)
+         (inhibit-modification-hooks t))
       (while buttons
        (setq button (car buttons)
              buttons (cdr buttons))
@@ -2691,8 +2689,7 @@ Return an alist of (TYPE MATCH)."
     (let ((entry-from (widget-get child :entry-from))
          (entry-to (widget-get child :entry-to))
          (inhibit-read-only t)
-         before-change-functions
-         after-change-functions)
+         (inhibit-modification-hooks t))
       (widget-delete child)
       (delete-region entry-from entry-to)
       (set-marker entry-from nil)
diff --git a/lisp/winner.el b/lisp/winner.el
index fdf6213..a05f4ba 100644
--- a/lisp/winner.el
+++ b/lisp/winner.el
@@ -177,6 +177,11 @@ You may want to include buffer names such as *Help*, 
*Apropos*,
 ;; Called whenever the window configuration changes
 ;; (a `window-configuration-change-hook').
 (defun winner-change-fun ()
+
+  ;; Cull dead frames.
+  (setq winner-modified-list
+        (cl-remove-if-not 'frame-live-p winner-modified-list))
+
   (unless (or (memq (selected-frame) winner-modified-list)
               (/= 0 (minibuffer-depth)))
     (push (selected-frame) winner-modified-list)))
diff --git a/lisp/woman.el b/lisp/woman.el
index f2e59e5..8fe1bfa 100644
--- a/lisp/woman.el
+++ b/lisp/woman.el
@@ -2716,7 +2716,7 @@ If DELETE is non-nil then delete from point."
 
 (defsubst woman-unescape (macro)
   "Replace escape sequences in the body of MACRO.
-Replaces || by |, but | by \, where | denotes the internal escape."
+Replaces || by |, but | by \\, where | denotes the internal escape."
   (let (start)
     (while (setq start (string-match woman-unescape-regex macro start))
       (setq macro
@@ -2838,7 +2838,7 @@ special characters."
 (defun woman-strings (&optional to)
   "Process ?roff string requests and escape sequences up to buffer position TO.
 Strings are defined/updated by `.ds xx string' requests and
-interpolated by `\*x' and `\*(xx' escapes."
+interpolated by `\\*x' and `\\*(xx' escapes."
   ;; Add support for .as and .rm?
   (while
       ;; Find .ds requests and \* escapes:
@@ -3549,7 +3549,7 @@ The expression may be an argument in quotes."
                       (if (> (woman-parse-numeric-value) 0) 1 0))
                     )))
            ))
-;    (if (looking-at "[ \t\nRC\)\"]")  ; R, C are tab types
+;    (if (looking-at "[ \t\nRC)\"]")   ; R, C are tab types
 ;      ()
 ;      (WoMan-warn "Unimplemented numerical operator `%c' in %s"
 ;                (following-char)
@@ -3583,7 +3583,7 @@ expression in parentheses.  Leaves point after the value."
                    ;; string-to-number returns 0 if number not parsed.
                    (string-to-number (match-string 0)))
                   ((looking-at "\\\\n\\([-+]\\)?\\(?:\
-\\[\\([^]]+\\)\\]\\|\(\\(..\\)\\|\\(.\\)\\)")
+\\[\\([^]]+\\)\\]\\|(\\(..\\)\\|\\(.\\)\\)")
                    ;; interpolate number register, maybe auto-incremented
                    (let* ((pm (match-string-no-properties 1))
                           (name (or (match-string-no-properties 2)
@@ -3761,7 +3761,7 @@ Round to whole lines, default 1 line.  Format paragraphs 
upto TO.
 
 (defun woman2-TH (to)
   ".TH n c x v m -- Begin a man page.  Format paragraphs upto TO.
-n is the name of the page in chapter c\; x is extra commentary\;
+n is the name of the page in chapter c; x is extra commentary;
 v alters page foot left; m alters page head center.
 \(Should set prevailing indent and tabs to 5.)"
   (woman-forward-arg 'unquote 'concat)
@@ -4349,7 +4349,7 @@ Format paragraphs upto TO."
 
 (defun woman2-ta (to)
   ".ta Nt ... -- Set tabs, left type, unless t=R(right), C(centered).
-\(Breaks, but should not.)  The tab stops are separated by spaces\;
+\(Breaks, but should not.)  The tab stops are separated by spaces;
 a value preceded by + represents an increment to the previous stop value.
 Format paragraphs upto TO."
   (setq tab-stop-list nil)
diff --git a/nt/emacs-x64.manifest b/nt/emacs-x64.manifest
index 3cf56dd..57ce333 100644
--- a/nt/emacs-x64.manifest
+++ b/nt/emacs-x64.manifest
@@ -20,14 +20,16 @@
   </trustInfo>
     <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
       <application> 
-         <!-- Windows 8.1 -->
-         <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
-         <!-- Windows Vista -->
-         <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
-         <!-- Windows 7 -->
-         <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
-         <!-- Windows 8 -->
-         <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+        <!-- Windows Vista -->
+        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
+        <!-- Windows 7 -->
+        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+        <!-- Windows 8 -->
+        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+        <!-- Windows 8.1 -->
+        <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+        <!-- Windows 10 -->
+        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
       </application> 
     </compatibility>
   <asmv3:application>
diff --git a/nt/emacs-x86.manifest b/nt/emacs-x86.manifest
index d7053be..1be75b1 100644
--- a/nt/emacs-x86.manifest
+++ b/nt/emacs-x86.manifest
@@ -20,14 +20,16 @@
   </trustInfo>
     <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
       <application> 
-        <!-- Windows 8.1 -->
-        <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
         <!-- Windows Vista -->
-        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
+        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
         <!-- Windows 7 -->
         <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
         <!-- Windows 8 -->
         <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+        <!-- Windows 8.1 -->
+        <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+        <!-- Windows 10 -->
+        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
       </application> 
     </compatibility>
   <asmv3:application>
diff --git a/nt/subdirs.el b/nt/subdirs.el
deleted file mode 100644
index ee1c123..0000000
--- a/nt/subdirs.el
+++ /dev/null
@@ -1,3 +0,0 @@
-;; -*- no-byte-compile: t -*-
-(if (fboundp 'normal-top-level-add-subdirs-to-load-path)
-    (normal-top-level-add-subdirs-to-load-path))
diff --git a/src/README b/src/README
index ef08d14..adc782c 100644
--- a/src/README
+++ b/src/README
@@ -4,16 +4,15 @@ See the end of the file for license conditions.
 
 This directory contains the source files for the C component of GNU Emacs.
 Nothing in this directory is needed for using Emacs once it is built
-and installed, if the dumped Emacs (on Unix systems) is copied elsewhere.
+and installed, if the dumped Emacs is copied elsewhere.
 
 See the files ../README and then ../INSTALL for installation instructions.
 
-Under GNU and Unix systems, the file `Makefile.in' is used as a
-template by the script `../configure' to produce `Makefile'.  This
-is the file which actually controls the compilation of Emacs.
-All of this should work transparently to the user; you should only
-need to run `../configure', and then type `make'.
-
+The file 'Makefile.in' is used as a template by the script
+'../configure' to produce 'Makefile'.  This is the file which actually
+controls the compilation of Emacs C source files.  All of this should
+work transparently; you should only need to change to the parent
+directory, run './configure', and then run 'make'.
 
 This file is part of GNU Emacs.
 
diff --git a/src/buffer.c b/src/buffer.c
index 33f7996..530fe11 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1042,7 +1042,7 @@ DEFUN ("generate-new-buffer-name", 
Fgenerate_new_buffer_name,
        doc: /* Return a string that is the name of no existing buffer based on 
NAME.
 If there is no live buffer named NAME, then return NAME.
 Otherwise modify name by appending `<NUMBER>', incrementing NUMBER
-\(starting at 2) until an unused name is found, and then return that name.
+(starting at 2) until an unused name is found, and then return that name.
 Optional second argument IGNORE specifies a name that is okay to use (if
 it is in the sequence to be tried) even if a buffer with that name exists.
 
@@ -1385,7 +1385,7 @@ DEFUN ("buffer-chars-modified-tick", 
Fbuffer_chars_modified_tick,
        Sbuffer_chars_modified_tick, 0, 1, 0,
        doc: /* Return BUFFER's character-change tick counter.
 Each buffer has a character-change tick counter, which is set to the
-value of the buffer's tick counter \(see `buffer-modified-tick'), each
+value of the buffer's tick counter (see `buffer-modified-tick'), each
 time text in that buffer is inserted or deleted.  By comparing the
 values returned by two individual calls of `buffer-chars-modified-tick',
 you can tell whether a character change occurred in that buffer in
@@ -3791,10 +3791,10 @@ If omitted, BUFFER defaults to the current buffer.
 BEG and END may be integers or markers.
 The fourth arg FRONT-ADVANCE, if non-nil, makes the marker
 for the front of the overlay advance when text is inserted there
-\(which means the text *is not* included in the overlay).
+(which means the text *is not* included in the overlay).
 The fifth arg REAR-ADVANCE, if non-nil, makes the marker
 for the rear of the overlay advance when text is inserted there
-\(which means the text *is* included in the overlay).  */)
+(which means the text *is* included in the overlay).  */)
   (Lisp_Object beg, Lisp_Object end, Lisp_Object buffer,
    Lisp_Object front_advance, Lisp_Object rear_advance)
 {
@@ -6014,7 +6014,7 @@ between 0.0 and 1.0, inclusive.  */);
               doc: /* List of functions to call before each text change.
 Two arguments are passed to each function: the positions of
 the beginning and end of the range of old text to be changed.
-\(For an insertion, the beginning and end are at the same place.)
+(For an insertion, the beginning and end are at the same place.)
 No information is given about the length of the text after the change.
 
 Buffer changes made while executing the `before-change-functions'
@@ -6031,7 +6031,7 @@ from happening repeatedly and making Emacs nonfunctional. 
 */);
 Three arguments are passed to each function: the positions of
 the beginning and end of the range of changed text,
 and the length in chars of the pre-change text replaced by that range.
-\(For an insertion, the pre-change length is zero;
+(For an insertion, the pre-change length is zero;
 for a deletion, that length is the number of chars deleted,
 and the post-change beginning and end are at the same place.)
 
@@ -6076,7 +6076,7 @@ was modified between BEG and END.  PROPERTY is the 
property name,
 and VALUE is the old value.
 
 An entry (apply FUN-NAME . ARGS) means undo the change with
-\(apply FUN-NAME ARGS).
+(apply FUN-NAME ARGS).
 
 An entry (apply DELTA BEG END FUN-NAME . ARGS) supports selective undo
 in the active region.  BEG and END is the range affected by this entry
@@ -6236,7 +6236,7 @@ to the default frame line height.  A value of nil means 
add no extra space.  */)
                     doc: /* Non-nil means show a cursor in non-selected 
windows.
 If nil, only shows a cursor in the selected window.
 If t, displays a cursor related to the usual cursor type
-\(a solid box becomes hollow, a bar becomes a narrower bar).
+(a solid box becomes hollow, a bar becomes a narrower bar).
 You can also specify the cursor type as in the `cursor-type' variable.
 Use Custom to set this variable and update the display."  */);
 
diff --git a/src/bytecode.c b/src/bytecode.c
index 86d44ab..864db1a 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -2000,9 +2000,9 @@ syms_of_bytecode (void)
 
   DEFVAR_LISP ("byte-code-meter", Vbyte_code_meter,
               doc: /* A vector of vectors which holds a histogram of byte-code 
usage.
-\(aref (aref byte-code-meter 0) CODE) indicates how many times the byte
+(aref (aref byte-code-meter 0) CODE) indicates how many times the byte
 opcode CODE has been executed.
-\(aref (aref byte-code-meter CODE1) CODE2), where CODE1 is not 0,
+(aref (aref byte-code-meter CODE1) CODE2), where CODE1 is not 0,
 indicates how many times the byte opcodes CODE1 and CODE2 have been
 executed in succession.  */);
 
diff --git a/src/callproc.c b/src/callproc.c
index 39f0eb6..e38844e 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -226,7 +226,7 @@ The program's input comes from file INFILE (nil means 
`/dev/null').
 Insert output in DESTINATION before point; t means current buffer; nil for 
DESTINATION
  means discard it; 0 means discard and don't wait; and `(:file FILE)', where
  FILE is a file name string, means that it should be written to that file
- \(if the file already exists it is overwritten).
+ (if the file already exists it is overwritten).
 DESTINATION can also have the form (REAL-BUFFER STDERR-FILE); in that case,
 REAL-BUFFER says what to do with standard output, as above,
 while STDERR-FILE says what to do with standard error in the child.
@@ -1462,7 +1462,7 @@ This function searches `process-environment' for VARIABLE.
 
 If optional parameter ENV is a list, then search this list instead of
 `process-environment', and return t when encountering a negative entry
-\(an entry for a variable with no value).  */)
+(an entry for a variable with no value).  */)
   (Lisp_Object variable, Lisp_Object env)
 {
   char *value;
diff --git a/src/category.c b/src/category.c
index bb4a75d..400116f 100644
--- a/src/category.c
+++ b/src/category.c
@@ -464,7 +464,7 @@ Emacs treats a sequence of word constituent characters as a 
single
 word (i.e. finds no word boundary between them) only if they belong to
 the same script.  But, exceptions are allowed in the following cases.
 
-\(1) The case that characters are in different scripts is controlled
+(1) The case that characters are in different scripts is controlled
 by the variable `word-combining-categories'.
 
 Emacs finds no word boundary between characters of different scripts
@@ -478,7 +478,7 @@ For instance, to tell that Han characters followed by 
Hiragana
 characters can form a single word, the element `(?C . ?H)' should be
 in this list.
 
-\(2) The case that character are in the same script is controlled by
+(2) The case that character are in the same script is controlled by
 the variable `word-separating-categories'.
 
 Emacs finds a word boundary between characters of the same script
diff --git a/src/chartab.c b/src/chartab.c
index bd14c4d..274bb60 100644
--- a/src/chartab.c
+++ b/src/chartab.c
@@ -534,7 +534,7 @@ DEFUN ("char-table-parent", Fchar_table_parent, 
Schar_table_parent,
 The value is either nil or another char-table.
 If CHAR-TABLE holds nil for a given character,
 then the actual applicable value is inherited from the parent char-table
-\(or from its parents, if necessary).  */)
+(or from its parents, if necessary).  */)
   (Lisp_Object char_table)
 {
   CHECK_CHAR_TABLE (char_table);
diff --git a/src/cmds.c b/src/cmds.c
index a975a8e..7a575ae 100644
--- a/src/cmds.c
+++ b/src/cmds.c
@@ -108,7 +108,7 @@ right or to the left on the screen.  This is in contrast 
with
 DEFUN ("forward-line", Fforward_line, Sforward_line, 0, 1, "^p",
        doc: /* Move N lines forward (backward if N is negative).
 Precisely, if point is on line I, move to the start of line I + N
-\("start of line" in the logical order).
+("start of line" in the logical order).
 If there isn't room, go as far as possible (no error).
 
 Returns the count of lines left to move.  If moving forward,
diff --git a/src/coding.c b/src/coding.c
index 1544f31..3fc6fb6 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -4295,6 +4295,9 @@ encode_invocation_designation (struct charset *charset,
          else
            ENCODE_LOCKING_SHIFT_3;
          break;
+
+       default:
+         break;
        }
     }
 
@@ -7292,6 +7295,8 @@ produce_annotation (struct coding_system *coding, 
ptrdiff_t pos)
              case CODING_ANNOTATE_CHARSET_MASK:
                produce_charset (coding, charbuf, pos);
                break;
+             default:
+               break;
              }
          charbuf += len;
        }
@@ -9795,7 +9800,7 @@ DEFUN ("find-operation-coding-system", 
Ffind_operation_coding_system,
        doc: /* Choose a coding system for an operation based on the target 
name.
 The value names a pair of coding systems: (DECODING-SYSTEM . ENCODING-SYSTEM).
 DECODING-SYSTEM is the coding system to use for decoding
-\(in case OPERATION does decoding), and ENCODING-SYSTEM is the coding system
+(in case OPERATION does decoding), and ENCODING-SYSTEM is the coding system
 for encoding (in case OPERATION does encoding).
 
 The first argument OPERATION specifies an I/O primitive:
@@ -11170,7 +11175,7 @@ the cdr part is used for encoding a text to be sent to 
a process.  */);
 Table of extra Latin codes in the range 128..159 (inclusive).
 This is a vector of length 256.
 If Nth element is non-nil, the existence of code N in a file
-\(or output of subprocess) doesn't prevent it to be detected as
+(or output of subprocess) doesn't prevent it to be detected as
 a coding system of ISO 2022 variant which has a flag
 `accept-latin-extra-code' t (e.g. iso-latin-1) on reading a file
 or reading output of a subprocess.
diff --git a/src/data.c b/src/data.c
index 88c5a30..eda6110 100644
--- a/src/data.c
+++ b/src/data.c
@@ -226,8 +226,9 @@ for example, (type-of 1) returns `integer'.  */)
           return Qfloat;
         case Lisp_Misc_Finalizer:
           return Qfinalizer;
+       default:
+         emacs_abort ();
        }
-      emacs_abort ();
 
     case Lisp_Vectorlike:
       if (WINDOW_CONFIGURATIONP (object))
@@ -790,7 +791,7 @@ SUBR must be a built-in function.  */)
 DEFUN ("interactive-form", Finteractive_form, Sinteractive_form, 1, 1, 0,
        doc: /* Return the interactive form of CMD or nil if none.
 If CMD is not a command, the return value is nil.
-Value, if non-nil, is a list \(interactive SPEC).  */)
+Value, if non-nil, is a list (interactive SPEC).  */)
   (Lisp_Object cmd)
 {
   Lisp_Object fun = indirect_function (cmd); /* Check cycles.  */
@@ -1659,8 +1660,8 @@ DEFUN ("make-local-variable", Fmake_local_variable, 
Smake_local_variable,
        1, 1, "vMake Local Variable: ",
        doc: /* Make VARIABLE have a separate value in the current buffer.
 Other buffers will continue to share a common default value.
-\(The buffer-local value of VARIABLE starts out as the same value
-VARIABLE previously had.  If VARIABLE was void, it remains void.\)
+(The buffer-local value of VARIABLE starts out as the same value
+VARIABLE previously had.  If VARIABLE was void, it remains void.)
 Return VARIABLE.
 
 If the variable is already arranged to become local when set,
diff --git a/src/dbusbind.c b/src/dbusbind.c
index e5318fd..181c7d0 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -1233,20 +1233,20 @@ This is an internal function, it shall not be used 
outside dbus.el.
 The following usages are expected:
 
 `dbus-call-method', `dbus-call-method-asynchronously':
-  \(dbus-message-internal
+  (dbus-message-internal
     dbus-message-type-method-call BUS SERVICE PATH INTERFACE METHOD HANDLER
     &optional :timeout TIMEOUT &rest ARGS)
 
 `dbus-send-signal':
-  \(dbus-message-internal
+  (dbus-message-internal
     dbus-message-type-signal BUS SERVICE PATH INTERFACE SIGNAL &rest ARGS)
 
 `dbus-method-return-internal':
-  \(dbus-message-internal
+  (dbus-message-internal
     dbus-message-type-method-return BUS SERVICE SERIAL &rest ARGS)
 
 `dbus-method-error-internal':
-  \(dbus-message-internal
+  (dbus-message-internal
     dbus-message-type-error BUS SERVICE SERIAL &rest ARGS)
 
 usage: (dbus-message-internal &rest REST)  */)
@@ -1796,7 +1796,7 @@ string which denotes a D-Bus interface, and MEMBER, also 
a string, is
 either a method, a signal or a property INTERFACE is offering.  All
 arguments but BUS must not be nil.
 
-The value in the hash table is a list of quadruple lists \((UNAME
+The value in the hash table is a list of quadruple lists ((UNAME
 SERVICE PATH OBJECT [RULE]) ...).  SERVICE is the service name as
 registered, UNAME is the corresponding unique name.  In case of
 registered methods and properties, UNAME is nil.  PATH is the object
diff --git a/src/dispextern.h b/src/dispextern.h
index e5adeab..e44b70b 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -2378,10 +2378,6 @@ struct it
        struct it_slice slice;
        ptrdiff_t image_id;
       } image;
-      /* method == GET_FROM_COMPOSITION */
-      struct {
-       Lisp_Object object;
-      } comp;
       /* method == GET_FROM_STRETCH */
       struct {
        Lisp_Object object;
diff --git a/src/dispnew.c b/src/dispnew.c
index 18afe50..00d086e 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -3004,7 +3004,7 @@ redraw_frame (struct frame *f)
   clear_frame (f);
   clear_current_matrices (f);
   update_end (f);
-  windows_or_buffers_changed = 13;
+  fset_redisplay (f);
   /* Mark all windows as inaccurate, so that every window will have
      its redisplay done.  */
   mark_window_display_accurate (FRAME_ROOT_WINDOW (f), 0);
@@ -5665,7 +5665,7 @@ DEFUN ("sleep-for", Fsleep_for, Ssleep_for, 1, 2, 0,
 SECONDS may be a floating-point value, meaning that you can wait for a
 fraction of a second.  Optional second arg MILLISECONDS specifies an
 additional wait period, in milliseconds; this is for backwards compatibility.
-\(Not all operating systems support waiting for a fraction of a second.)  */)
+(Not all operating systems support waiting for a fraction of a second.)  */)
   (Lisp_Object seconds, Lisp_Object milliseconds)
 {
   double duration = extract_float (seconds);
diff --git a/src/doc.c b/src/doc.c
index b6963d2..68d4367 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -716,7 +716,7 @@ is not on any keys.
 Each substring of the form \\=\\{MAPVAR} is replaced by a summary of
 the value of MAPVAR as a keymap.  This summary is similar to the one
 produced by `describe-bindings'.  The summary ends in two newlines
-\(used by the helper function `help-make-xrefs' to find the end of the
+(used by the helper function `help-make-xrefs' to find the end of the
 summary).
 
 Each substring of the form \\=\\<MAPVAR> specifies the use of MAPVAR
diff --git a/src/doprnt.c b/src/doprnt.c
index 7c5a6af..51f8fd7 100644
--- a/src/doprnt.c
+++ b/src/doprnt.c
@@ -1,4 +1,4 @@
-/* Output like sprintf to a buffer of specified size.
+/* Output like sprintf to a buffer of specified size.    -*- coding: utf-8 -*-
    Also takes args differently: pass one pointer to the end
    of the format string in addition to the format string itself.
    Copyright (C) 1985, 2001-2015 Free Software Foundation, Inc.
diff --git a/src/editfns.c b/src/editfns.c
index 831edb4..12e5ca8 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1,4 +1,4 @@
-/* Lisp functions pertaining to editing.
+/* Lisp functions pertaining to editing.                 -*- coding: utf-8 -*-
 
 Copyright (C) 1985-1987, 1989, 1993-2015 Free Software Foundation, Inc.
 
@@ -3627,7 +3627,7 @@ save_restriction_restore (Lisp_Object data)
 DEFUN ("save-restriction", Fsave_restriction, Ssave_restriction, 0, UNEVALLED, 
0,
        doc: /* Execute BODY, saving and restoring current buffer's 
restrictions.
 The buffer's restrictions make parts of the beginning and end invisible.
-\(They are set up with `narrow-to-region' and eliminated with `widen'.)
+(They are set up with `narrow-to-region' and eliminated with `widen'.)
 This special form, `save-restriction', saves the current buffer's restrictions
 when it is entered, and restores them when it is exited.
 So any `narrow-to-region' within BODY lasts only until the end of the form.
@@ -4154,7 +4154,7 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool 
message)
                      || conversion == 'X'))
            error ("Invalid format operation %%%c",
                   STRING_CHAR ((unsigned char *) format - 1));
-         else if (! (INTEGERP (args[n]) || FLOATP (args[n])))
+         else if (! NUMBERP (args[n]))
            error ("Format specifier doesn't match argument type");
          else
            {
diff --git a/src/eval.c b/src/eval.c
index 77d435a..ac98ca1 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -596,6 +596,11 @@ The return value is BASE-VARIABLE.  */)
       error ("Cannot make an internal variable an alias");
     case SYMBOL_LOCALIZED:
       error ("Don't know how to make a localized variable an alias");
+    case SYMBOL_PLAINVAL:
+    case SYMBOL_VARALIAS:
+      break;
+    default:
+      emacs_abort ();
     }
 
   /* http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg00834.html
@@ -640,6 +645,17 @@ default_toplevel_binding (Lisp_Object symbol)
          if (EQ (specpdl_symbol (pdl), symbol))
            binding = pdl;
          break;
+
+       case SPECPDL_UNWIND:
+       case SPECPDL_UNWIND_PTR:
+       case SPECPDL_UNWIND_INT:
+       case SPECPDL_UNWIND_VOID:
+       case SPECPDL_BACKTRACE:
+       case SPECPDL_LET_LOCAL:
+         break;
+
+       default:
+         emacs_abort ();
        }
     }
   return binding;
@@ -689,7 +705,7 @@ If SYMBOL has a local binding, then this form affects the 
local
 binding.  This is usually not what you want.  Thus, if you need to
 load a file defining variables, with this form or with `defconst' or
 `defcustom', you should always load that file _outside_ any bindings
-for these variables.  \(`defconst' and `defcustom' behave similarly in
+for these variables.  (`defconst' and `defcustom' behave similarly in
 this respect.)
 
 The optional argument DOCSTRING is a documentation string for the
@@ -1172,7 +1188,7 @@ suppresses the debugger).
 When a handler handles an error, control returns to the `condition-case'
 and it executes the handler's BODY...
 with VAR bound to (ERROR-SYMBOL . SIGNAL-DATA) from the error.
-\(If VAR is nil, the handler can't access that information.)
+(If VAR is nil, the handler can't access that information.)
 Then the value of the last BODY form is returned from the `condition-case'
 expression.
 
@@ -2350,7 +2366,7 @@ may be nil, a function, or a list of functions.  Call each
 function in order with arguments ARGS, stopping at the first
 one that returns nil, and return nil.  Otherwise (if all functions
 return non-nil, or if there are no functions to call), return non-nil
-\(do not rely on the precise return value in this case).
+(do not rely on the precise return value in this case).
 
 Do not use `make-local-variable' to make a hook variable buffer-local.
 Instead, use `add-hook' and specify t for the LOCAL argument.
@@ -3462,6 +3478,17 @@ NFRAMES and BASE specify the activation frame to use, as 
in `backtrace-frame'.
              else
                result = Fcons (Fcons (sym, val), result);
            }
+           break;
+
+         case SPECPDL_UNWIND:
+         case SPECPDL_UNWIND_PTR:
+         case SPECPDL_UNWIND_INT:
+         case SPECPDL_UNWIND_VOID:
+         case SPECPDL_BACKTRACE:
+           break;
+
+         default:
+           emacs_abort ();
          }
       }
   }
@@ -3504,6 +3531,14 @@ mark_specpdl (void)
          mark_object (specpdl_symbol (pdl));
          mark_object (specpdl_old_value (pdl));
          break;
+
+       case SPECPDL_UNWIND_PTR:
+       case SPECPDL_UNWIND_INT:
+       case SPECPDL_UNWIND_VOID:
+         break;
+
+       default:
+         emacs_abort ();
        }
     }
 }
diff --git a/src/fileio.c b/src/fileio.c
index d4341f8..e4b255a 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -210,6 +210,22 @@ report_file_error (char const *string, Lisp_Object name)
   report_file_errno (string, name, errno);
 }
 
+/* Like report_file_error, but reports a file-notify-error instead.  */
+
+void
+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);
+  Lisp_Object errstring
+    = code_convert_string_norecord (build_unibyte_string (str),
+                                   Vlocale_coding_system, 0);
+  Lisp_Object errdata = Fcons (errstring, data);
+
+  xsignal (Qfile_notify_error, Fcons (build_string (string), errdata));
+}
+
 void
 close_file_unwind (int fd)
 {
@@ -435,7 +451,7 @@ DEFUN ("unhandled-file-name-directory", 
Funhandled_file_name_directory,
 A `directly usable' directory name is one that may be used without the
 intervention of any file handler.
 If FILENAME is a directly usable file itself, return
-\(file-name-directory FILENAME).
+(file-name-directory FILENAME).
 If FILENAME refers to a file which is not accessible from a local process,
 then this should return nil.
 The `call-process' and `start-process' functions use this function to
@@ -726,7 +742,7 @@ DEFUN ("make-temp-name", Fmake_temp_name, Smake_temp_name, 
1, 1, 0,
        doc: /* Generate temporary file name (string) starting with PREFIX (a 
string).
 The Emacs process number forms part of the result, so there is no
 danger of generating a name being used by another Emacs process
-\(so long as only a single host can access the containing directory...).
+(so long as only a single host can access the containing directory...).
 
 This function tries to choose a name that has no existing file.
 For this to work, PREFIX should be an absolute file name.
@@ -742,7 +758,7 @@ normally use `make-temp-file' instead.  */)
 DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
        doc: /* Convert filename NAME to absolute, and canonicalize it.
 Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative
-\(does not start with slash or tilde); both the directory name and
+(does not start with slash or tilde); both the directory name and
 a directory's file name are accepted.  If DEFAULT-DIRECTORY is nil or
 missing, the current buffer's value of `default-directory' is used.
 NAME should be a string that is a valid file name for the underlying
@@ -760,8 +776,8 @@ See also the function `substitute-in-file-name'.
 
 For technical reasons, this function can return correct but
 non-intuitive results for the root directory; for instance,
-\(expand-file-name ".." "/") returns "/..".  For this reason, use
-\(directory-file-name (file-name-directory dirname)) to traverse a
+(expand-file-name ".." "/") returns "/..".  For this reason, use
+(directory-file-name (file-name-directory dirname)) to traverse a
 filesystem tree, not (expand-file-name ".."  dirname).  */)
   (Lisp_Object name, Lisp_Object default_directory)
 {
@@ -1444,7 +1460,7 @@ filesystem tree, not (expand-file-name ".."  dirname).  
*/)
 DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
   "Convert FILENAME to absolute, and canonicalize it.\n\
 Second arg DEFAULT is directory to start with if FILENAME is relative\n\
-\(does not start with slash); if DEFAULT is nil or missing,\n\
+(does not start with slash); if DEFAULT is nil or missing,\n\
 the current buffer's value of default-directory is used.\n\
 Filenames containing `.' or `..' as components are simplified;\n\
 initial `~/' expands to your home directory.\n\
@@ -2453,7 +2469,7 @@ Use `file-symlink-p' to test for such links.  */)
 DEFUN ("file-executable-p", Ffile_executable_p, Sfile_executable_p, 1, 1, 0,
        doc: /* Return t if FILENAME can be executed by you.
 For a directory, this means you can access files in that directory.
-\(It is generally better to use `file-accessible-directory-p' for that
+(It is generally better to use `file-accessible-directory-p' for that
 purpose, though.)  */)
   (Lisp_Object filename)
 {
@@ -5290,8 +5306,8 @@ DEFUN ("set-visited-file-modtime", 
Fset_visited_file_modtime,
 Useful if the buffer was not read from the file normally
 or if the file itself has been changed for some known benign reason.
 An argument specifies the modification time value to use
-\(instead of that of the visited file), in the form of a list
-\(HIGH LOW USEC PSEC) or an integer flag as returned by
+(instead of that of the visited file), in the form of a list
+(HIGH LOW USEC PSEC) or an integer flag as returned by
 `visited-file-modtime'.  */)
   (Lisp_Object time_flag)
 {
diff --git a/src/floatfns.c b/src/floatfns.c
index 63d35b8..46eb85f 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -170,7 +170,7 @@ Cause an error if X1 or X2 is not a float.  */)
 DEFUN ("frexp", Ffrexp, Sfrexp, 1, 1, 0,
        doc: /* Get significand and exponent of a floating point number.
 Breaks the floating point number X into its binary significand SGNFCAND
-\(a floating point value between 0.5 (included) and 1.0 (excluded))
+(a floating point value between 0.5 (included) and 1.0 (excluded))
 and an integral exponent EXP for 2, such that:
 
   X = SGNFCAND * 2^EXP
@@ -454,7 +454,7 @@ With optional DIVISOR, return the nearest integer to 
ARG/DIVISOR.
 
 Rounding a value equidistant between two integers may choose the
 integer closer to zero, or it may prefer an even integer, depending on
-your machine.  For example, \(round 2.5\) can return 3 on some
+your machine.  For example, (round 2.5) can return 3 on some
 systems, but 2 on others.  */)
   (Lisp_Object arg, Lisp_Object divisor)
 {
@@ -491,7 +491,7 @@ fmod_float (Lisp_Object x, Lisp_Object y)
 
 DEFUN ("fceiling", Ffceiling, Sfceiling, 1, 1, 0,
        doc: /* Return the smallest integer no less than ARG, as a float.
-\(Round toward +inf.\)  */)
+(Round toward +inf.)  */)
   (Lisp_Object arg)
 {
   double d = extract_float (arg);
@@ -501,7 +501,7 @@ DEFUN ("fceiling", Ffceiling, Sfceiling, 1, 1, 0,
 
 DEFUN ("ffloor", Fffloor, Sffloor, 1, 1, 0,
        doc: /* Return the largest integer no greater than ARG, as a float.
-\(Round towards -inf.\)  */)
+(Round towards -inf.)  */)
   (Lisp_Object arg)
 {
   double d = extract_float (arg);
diff --git a/src/fns.c b/src/fns.c
index aa917ac..b31bd81 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -224,7 +224,7 @@ DEFUN ("compare-strings", Fcompare_strings, 
Scompare_strings, 6, 7, 0,
 The arguments START1, END1, START2, and END2, if non-nil, are
 positions specifying which parts of STR1 or STR2 to compare.  In
 string STR1, compare the part between START1 (inclusive) and END1
-\(exclusive).  If START1 is nil, it defaults to 0, the beginning of
+(exclusive).  If START1 is nil, it defaults to 0, the beginning of
 the string; if END1 is nil, it defaults to the length of the string.
 Likewise, in string STR2, compare the part between START2 and END2.
 Like in `substring', negative values are counted from the end.
@@ -347,8 +347,8 @@ This function obeys the conventions for collation order in 
your
 locale settings.  For example, punctuation and whitespace characters
 might be considered less significant for sorting:
 
-\(sort '\("11" "12" "1 1" "1 2" "1.1" "1.2") \\='string-collate-lessp)
-  => \("11" "1 1" "1.1" "12" "1 2" "1.2")
+(sort '("11" "12" "1 1" "1 2" "1.1" "1.2") \\='string-collate-lessp)
+  => ("11" "1 1" "1.1" "12" "1 2" "1.2")
 
 The optional argument LOCALE, a string, overrides the setting of your
 current locale identifier for collation.  The value is system
@@ -393,7 +393,7 @@ settings.  For example, characters with different coding 
points but
 the same meaning might be considered as equal, like different grave
 accent Unicode characters:
 
-\(string-collate-equalp \(string ?\\uFF40) \(string ?\\u1FEF))
+(string-collate-equalp (string ?\\uFF40) (string ?\\u1FEF))
   => t
 
 The optional argument LOCALE, a string, overrides the setting of your
@@ -1026,7 +1026,7 @@ to a multibyte character.  In this case, the returned 
string is a
 newly created string with no text properties.  If STRING is multibyte
 or entirely ASCII, it is returned unchanged.  In particular, when
 STRING is unibyte and entirely ASCII, the returned string is unibyte.
-\(When the characters are all ASCII, Emacs primitives will treat the
+(When the characters are all ASCII, Emacs primitives will treat the
 string the same way whether it is unibyte or multibyte.)  */)
   (Lisp_Object string)
 {
@@ -1225,14 +1225,14 @@ validate_subarray (Lisp_Object array, Lisp_Object from, 
Lisp_Object to,
 DEFUN ("substring", Fsubstring, Ssubstring, 1, 3, 0,
        doc: /* Return a new string whose contents are a substring of STRING.
 The returned string consists of the characters between index FROM
-\(inclusive) and index TO (exclusive) of STRING.  FROM and TO are
+(inclusive) and index TO (exclusive) of STRING.  FROM and TO are
 zero-indexed: 0 means the first character of STRING.  Negative values
 are counted from the end of STRING.  If TO is nil, the substring runs
 to the end of STRING.
 
 The STRING argument may also be a vector.  In that case, the return
 value is a new vector that contains the elements between index FROM
-\(inclusive) and index TO (exclusive) of that vector argument.
+(inclusive) and index TO (exclusive) of that vector argument.
 
 With one argument, just copy STRING (with properties, if any).  */)
   (Lisp_Object string, Lisp_Object from, Lisp_Object to)
@@ -2051,7 +2051,7 @@ merge (Lisp_Object org_l1, Lisp_Object org_l2, 
Lisp_Object pred)
 DEFUN ("plist-get", Fplist_get, Splist_get, 2, 2, 0,
        doc: /* Extract a value from a property list.
 PLIST is a property list, which is a list of the form
-\(PROP1 VALUE1 PROP2 VALUE2...).  This function returns the value
+(PROP1 VALUE1 PROP2 VALUE2...).  This function returns the value
 corresponding to the given PROP, or nil if PROP is not one of the
 properties on the list.  This function never signals an error.  */)
   (Lisp_Object plist, Lisp_Object prop)
@@ -2086,7 +2086,7 @@ This is the last value stored with `(put SYMBOL PROPNAME 
VALUE)'.  */)
 DEFUN ("plist-put", Fplist_put, Splist_put, 3, 3, 0,
        doc: /* Change value in PLIST of PROP to VAL.
 PLIST is a property list, which is a list of the form
-\(PROP1 VALUE1 PROP2 VALUE2 ...).  PROP is a symbol and VAL is any object.
+(PROP1 VALUE1 PROP2 VALUE2 ...).  PROP is a symbol and VAL is any object.
 If PROP is already a property on the list, its value is set to VAL,
 otherwise the new PROP VAL pair is added.  The new plist is returned;
 use `(setq x (plist-put x prop val))' to be sure to use the new value.
@@ -2130,7 +2130,7 @@ It can be retrieved with `(get SYMBOL PROPNAME)'.  */)
 DEFUN ("lax-plist-get", Flax_plist_get, Slax_plist_get, 2, 2, 0,
        doc: /* Extract a value from a property list, comparing with `equal'.
 PLIST is a property list, which is a list of the form
-\(PROP1 VALUE1 PROP2 VALUE2...).  This function returns the value
+(PROP1 VALUE1 PROP2 VALUE2...).  This function returns the value
 corresponding to the given PROP, or nil if PROP is not
 one of the properties on the list.  */)
   (Lisp_Object plist, Lisp_Object prop)
@@ -2155,7 +2155,7 @@ one of the properties on the list.  */)
 DEFUN ("lax-plist-put", Flax_plist_put, Slax_plist_put, 3, 3, 0,
        doc: /* Change value in PLIST of PROP to VAL, comparing with `equal'.
 PLIST is a property list, which is a list of the form
-\(PROP1 VALUE1 PROP2 VALUE2 ...).  PROP and VAL are any objects.
+(PROP1 VALUE1 PROP2 VALUE2 ...).  PROP and VAL are any objects.
 If PROP is already a property on the list, its value is set to VAL,
 otherwise the new PROP VAL pair is added.  The new plist is returned;
 use `(setq x (lax-plist-put x prop val))' to be sure to use the new value.
@@ -2867,7 +2867,7 @@ The normal messages at start and end of loading FILENAME 
are suppressed.  */)
 DEFUN ("plist-member", Fplist_member, Splist_member, 2, 2, 0,
        doc: /* Return non-nil if PLIST has the property PROP.
 PLIST is a property list, which is a list of the form
-\(PROP1 VALUE1 PROP2 VALUE2 ...\).  PROP is a symbol.
+(PROP1 VALUE1 PROP2 VALUE2 ...).  PROP is a symbol.
 Unlike `plist-get', this allows you to distinguish between a missing
 property and a property with the value nil.
 The value is actually the tail of PLIST whose car is PROP.  */)
diff --git a/src/font.c b/src/font.c
index 50b966e..ce144e7 100644
--- a/src/font.c
+++ b/src/font.c
@@ -4068,7 +4068,7 @@ DEFUN ("font-face-attributes", Ffont_face_attributes, 
Sfont_face_attributes, 1,
 FONT is a font name, a font-spec, a font-entity, or a font-object.
 The return value is a list of the form
 
-\(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH)
+(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH)
 
 where FAMILY, HEIGHT, WEIGHT, SLANT, and WIDTH are face attribute values
 compatible with `set-face-attribute'.  Some of these key-attribute pairs
@@ -4472,6 +4472,106 @@ where
   return val;
 }
 
+/* Return a description of the font at POSITION in the current buffer.
+   If the 2nd optional arg CH is non-nil, it is a character to check
+   the font instead of the character at POSITION.
+
+   For a graphical display, return a cons (FONT-OBJECT . GLYPH-CODE).
+   FONT-OBJECT is the font for the character at POSITION in the current
+   buffer.  This is computed from all the text properties and overlays
+   that apply to POSITION.  POSITION may be nil, in which case,
+   FONT-SPEC is the font for displaying the character CH with the
+   default face.  GLYPH-CODE is the glyph code in the font to use for
+   the character.
+
+   For a text terminal, return a nonnegative integer glyph code for
+   the character, or a negative integer if the character is not
+   displayable.  Terminal glyph codes are system-dependent integers
+   that represent displayable characters: for example, on a Linux x86
+   console they represent VGA code points.
+
+   It returns nil in the following cases:
+
+   (1) The window system doesn't have a font for the character (thus
+   it is displayed by an empty box).
+
+   (2) The character code is invalid.
+
+   (3) If POSITION is not nil, and the current buffer is not displayed
+   in any window.
+
+   (4) For a text terminal, the terminal does not report glyph codes.
+
+   In addition, the returned font name may not take into account of
+   such redisplay engine hooks as what used in jit-lock-mode if
+   POSITION is currently not visible.  */
+
+
+DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0,
+       doc: /* For internal use only.  */)
+  (Lisp_Object position, Lisp_Object ch)
+{
+  ptrdiff_t pos, pos_byte, dummy;
+  int face_id;
+  int c;
+  struct frame *f;
+
+  if (NILP (position))
+    {
+      CHECK_CHARACTER (ch);
+      c = XINT (ch);
+      f = XFRAME (selected_frame);
+      face_id = lookup_basic_face (f, DEFAULT_FACE_ID);
+      pos = -1;
+    }
+  else
+    {
+      Lisp_Object window;
+      struct window *w;
+
+      CHECK_NUMBER_COERCE_MARKER (position);
+      if (! (BEGV <= XINT (position) && XINT (position) < ZV))
+       args_out_of_range_3 (position, make_number (BEGV), make_number (ZV));
+      pos = XINT (position);
+      pos_byte = CHAR_TO_BYTE (pos);
+      if (NILP (ch))
+       c = FETCH_CHAR (pos_byte);
+      else
+       {
+         CHECK_NATNUM (ch);
+         c = XINT (ch);
+       }
+      window = Fget_buffer_window (Fcurrent_buffer (), Qnil);
+      if (NILP (window))
+       return Qnil;
+      w = XWINDOW (window);
+      f = XFRAME (w->frame);
+      face_id = face_at_buffer_position (w, pos, &dummy,
+                                        pos + 100, false, -1);
+    }
+  if (! CHAR_VALID_P (c))
+    return Qnil;
+
+  if (! FRAME_WINDOW_P (f))
+    return terminal_glyph_code (FRAME_TERMINAL (f), c);
+
+  /* We need the basic faces to be valid below, so recompute them if
+     some code just happened to clear the face cache.  */
+  if (FRAME_FACE_CACHE (f)->used == 0)
+    recompute_basic_faces (f);
+
+  face_id = FACE_FOR_CHAR (f, FACE_FROM_ID (f, face_id), c, pos, Qnil);
+  struct face *face = FACE_FROM_ID (f, face_id);
+  if (! face->font)
+    return Qnil;
+  unsigned code = face->font->driver->encode_char (face->font, c);
+  if (code == FONT_INVALID_CODE)
+    return Qnil;
+  Lisp_Object font_object;
+  XSETFONT (font_object, face->font);
+  return Fcons (font_object, INTEGER_TO_CONS (code));
+}
+
 #if 0
 
 DEFUN ("font-drive-otf", Ffont_drive_otf, Sfont_drive_otf, 6, 6, 0,
@@ -4649,15 +4749,15 @@ ASCENT, DESCENT, SPACE-WIDTH, AVERAGE-WIDTH are metrics 
of the font in
 pixels.
 
 CAPABILITY is a list whose first element is a symbol representing the
-font format \(x, opentype, truetype, type1, pcf, or bdf) and the
+font format (x, opentype, truetype, type1, pcf, or bdf) and the
 remaining elements describe the details of the font capability.
 
 If the font is OpenType font, the form of the list is
-  \(opentype GSUB GPOS)
+  (opentype GSUB GPOS)
 where GSUB shows which "GSUB" features the font supports, and GPOS
 shows which "GPOS" features the font supports.  Both GSUB and GPOS are
 lists of the format:
-  \((SCRIPT (LANGSYS FEATURE ...) ...) ...)
+  ((SCRIPT (LANGSYS FEATURE ...) ...) ...)
 
 If the font is not OpenType font, currently the length of the form is
 one.
@@ -4943,11 +5043,11 @@ where
     as follows:
 
       If the font is OpenType font, the form of the list is
-        \(opentype GSUB GPOS)
+        (opentype GSUB GPOS)
       where GSUB shows which "GSUB" features the font supports, and GPOS
       shows which "GPOS" features the font supports.  Both GSUB and GPOS are
       lists of the form:
-       \((SCRIPT (LANGSYS FEATURE ...) ...) ...)
+       ((SCRIPT (LANGSYS FEATURE ...) ...) ...)
 
       where
         SCRIPT is a symbol representing OpenType script tag.
@@ -5229,6 +5329,7 @@ syms_of_font (void)
   defsubr (&Sclear_font_cache);
   defsubr (&Sfont_shape_gstring);
   defsubr (&Sfont_variation_glyphs);
+  defsubr (&Sinternal_char_font);
 #if 0
   defsubr (&Sfont_drive_otf);
   defsubr (&Sfont_otf_alternates);
@@ -5258,7 +5359,7 @@ where ENCODING is a charset or a char-table,
 and REPERTORY is a charset, a char-table, or nil.
 
 If ENCODING and REPERTORY are the same, the element can have the form
-\(REGEXP . ENCODING).
+(REGEXP . ENCODING).
 
 ENCODING is for converting a character to a glyph code of the font.
 If ENCODING is a charset, encoding a character by the charset gives
diff --git a/src/fontset.c b/src/fontset.c
index 50fcc64..e735989 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -1787,100 +1787,6 @@ update_auto_fontset_alist (Lisp_Object font_object, 
Lisp_Object fontset)
 }
 
 
-/* Return a cons (FONT-OBJECT . GLYPH-CODE).
-   FONT-OBJECT is the font for the character at POSITION in the current
-   buffer.  This is computed from all the text properties and overlays
-   that apply to POSITION.  POSITION may be nil, in which case,
-   FONT-SPEC is the font for displaying the character CH with the
-   default face.
-
-   GLYPH-CODE is the glyph code in the font to use for the character.
-
-   If the 2nd optional arg CH is non-nil, it is a character to check
-   the font instead of the character at POSITION.
-
-   It returns nil in the following cases:
-
-   (1) The window system doesn't have a font for the character (thus
-   it is displayed by an empty box).
-
-   (2) The character code is invalid.
-
-   (3) If POSITION is not nil, and the current buffer is not displayed
-   in any window.
-
-   In addition, the returned font name may not take into account of
-   such redisplay engine hooks as what used in jit-lock-mode if
-   POSITION is currently not visible.  */
-
-
-DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0,
-       doc: /* For internal use only.  */)
-  (Lisp_Object position, Lisp_Object ch)
-{
-  ptrdiff_t pos, pos_byte, dummy;
-  int face_id;
-  int c;
-  struct frame *f;
-  struct face *face;
-
-  if (NILP (position))
-    {
-      CHECK_CHARACTER (ch);
-      c = XINT (ch);
-      f = XFRAME (selected_frame);
-      face_id = lookup_basic_face (f, DEFAULT_FACE_ID);
-      pos = -1;
-    }
-  else
-    {
-      Lisp_Object window;
-      struct window *w;
-
-      CHECK_NUMBER_COERCE_MARKER (position);
-      if (! (BEGV <= XINT (position) && XINT (position) < ZV))
-       args_out_of_range_3 (position, make_number (BEGV), make_number (ZV));
-      pos = XINT (position);
-      pos_byte = CHAR_TO_BYTE (pos);
-      if (NILP (ch))
-       c = FETCH_CHAR (pos_byte);
-      else
-       {
-         CHECK_NATNUM (ch);
-         c = XINT (ch);
-       }
-      window = Fget_buffer_window (Fcurrent_buffer (), Qnil);
-      if (NILP (window))
-       return Qnil;
-      w = XWINDOW (window);
-      f = XFRAME (w->frame);
-      face_id = face_at_buffer_position (w, pos, &dummy,
-                                        pos + 100, false, -1);
-    }
-  if (! CHAR_VALID_P (c))
-    return Qnil;
-  if (!FRAME_WINDOW_P (f))
-    return Qnil;
-  /* We need the basic faces to be valid below, so recompute them if
-     some code just happened to clear the face cache.  */
-  if (FRAME_FACE_CACHE (f)->used == 0)
-    recompute_basic_faces (f);
-  face_id = FACE_FOR_CHAR (f, FACE_FROM_ID (f, face_id), c, pos, Qnil);
-  face = FACE_FROM_ID (f, face_id);
-  if (face->font)
-    {
-      unsigned code = face->font->driver->encode_char (face->font, c);
-      Lisp_Object font_object;
-
-      if (code == FONT_INVALID_CODE)
-       return Qnil;
-      XSETFONT (font_object, face->font);
-      return Fcons (font_object, INTEGER_TO_CONS (code));
-    }
-  return Qnil;
-}
-
-
 DEFUN ("fontset-info", Ffontset_info, Sfontset_info, 1, 2, 0,
        doc: /* Return information about a fontset FONTSET on frame FRAME.
 
@@ -2247,7 +2153,6 @@ at the vertical center of lines.  */);
   defsubr (&Squery_fontset);
   defsubr (&Snew_fontset);
   defsubr (&Sset_fontset_font);
-  defsubr (&Sinternal_char_font);
   defsubr (&Sfontset_info);
   defsubr (&Sfontset_font);
   defsubr (&Sfontset_list);
diff --git a/src/frame.c b/src/frame.c
index 6debcb8..121c55f 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -634,7 +634,6 @@ make_frame (bool mini_p)
   f->garbaged = true;
   f->can_x_set_window_size = false;
   f->after_make_frame = false;
-  f->tool_bar_redisplayed_once = false;
   f->column_width = 1;  /* !FRAME_WINDOW_P value.  */
   f->line_height = 1;  /* !FRAME_WINDOW_P value.  */
 #ifdef HAVE_WINDOW_SYSTEM
@@ -3540,7 +3539,8 @@ x_set_screen_gamma (struct frame *f, Lisp_Object 
new_value, Lisp_Object old_valu
            (f, bgcolor, Qnil);
     }
 
-  Fclear_face_cache (Qnil);
+  clear_face_cache (true);
+  windows_or_buffers_changed = 70;
 }
 
 
@@ -3634,7 +3634,6 @@ x_set_font (struct frame *f, Lisp_Object arg, Lisp_Object 
oldval)
 #endif
   /* Recalculate toolbar height.  */
   f->n_tool_bar_rows = 0;
-  f->tool_bar_redisplayed_once = false;
 
   /* Ensure we redraw it.  */
   clear_current_matrices (f);
@@ -5177,7 +5176,7 @@ keep it unchanged if this option is either t or a list 
containing
 `vertical-scroll-bars'.
 
 The default value is \\='(tool-bar-lines) on Lucid, Motif and Windows
-\(which means that adding/removing a tool bar does not change the frame
+(which means that adding/removing a tool bar does not change the frame
 height), nil on all other window systems including GTK+ (which means
 that changing any of the parameters listed above may change the size of
 the frame), and t otherwise (which means the frame size never changes
diff --git a/src/frame.h b/src/frame.h
index 8ee37df..af0dadb 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -335,9 +335,8 @@ struct frame
   /* Set to true after this frame was made by `make-frame'.  */
   bool_bf after_make_frame : 1;
 
-  /* True means tool bar has been redisplayed at least once in current
-     session.  */
-  bool_bf tool_bar_redisplayed_once : 1;
+  /* Non-zero if this frame's faces need to be recomputed.  */
+  bool_bf face_change : 1;
 
   /* Bitfield area ends here.  */
 
@@ -618,7 +617,7 @@ fset_desired_tool_bar_string (struct frame *f, Lisp_Object 
val)
 }
 #endif /* HAVE_WINDOW_SYSTEM && !USE_GTK && !HAVE_NS */
 
-#define NUMVAL(X) ((INTEGERP (X) || FLOATP (X)) ? XFLOATINT (X) : -1)
+#define NUMVAL(X) (NUMBERP (X) ? XFLOATINT (X) : -1)
 
 INLINE double
 default_pixels_per_inch_x (void)
diff --git a/src/gfilenotify.c b/src/gfilenotify.c
index 5c6ebe6..8b6b0a0 100644
--- a/src/gfilenotify.c
+++ b/src/gfilenotify.c
@@ -29,6 +29,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "process.h"
 
 
+/* This is a list, elements are triples (DESCRIPTOR FILE FLAGS CALLBACK)  */
 static Lisp_Object watch_list;
 
 /* This is the callback function for arriving signals from
@@ -41,7 +42,7 @@ dir_monitor_callback (GFileMonitor *monitor,
                      GFileMonitorEvent event_type,
                      gpointer user_data)
 {
-  Lisp_Object symbol, monitor_object, watch_object;
+  Lisp_Object symbol, monitor_object, watch_object, flags;
   char *name = g_file_get_parse_name (file);
   char *oname = other_file ? g_file_get_parse_name (other_file) : NULL;
 
@@ -83,20 +84,36 @@ dir_monitor_callback (GFileMonitor *monitor,
 
   if (CONSP (watch_object))
     {
-      /* Construct an event.  */
       struct input_event event;
       Lisp_Object otail = oname ? list1 (build_string (oname)) : Qnil;
-      EVENT_INIT (event);
-      event.kind = FILE_NOTIFY_EVENT;
-      event.frame_or_window = Qnil;
-      event.arg = list2 (Fcons (monitor_object,
-                               Fcons (symbol,
-                                      Fcons (build_string (name),
-                                             otail))),
-                        XCDR (watch_object));
-
-      /* Store it into the input event queue.  */
-      kbd_buffer_store_event (&event);
+
+      /* Check, whether event_type is expected.  */
+      flags = XCAR (XCDR (XCDR (watch_object)));
+      if ((!NILP (Fmember (Qchange, flags)) &&
+          !NILP (Fmember (symbol, list5 (Qchanged, Qchanges_done_hint,
+                                         Qdeleted, Qcreated, Qmoved)))) ||
+         (!NILP (Fmember (Qattribute_change, flags)) &&
+          ((EQ (symbol, Qattribute_changed)))))
+       {
+         /* Construct an event.  */
+         EVENT_INIT (event);
+         event.kind = FILE_NOTIFY_EVENT;
+         event.frame_or_window = Qnil;
+         event.arg = list2 (Fcons (monitor_object,
+                                   Fcons (symbol,
+                                          Fcons (build_string (name),
+                                                 otail))),
+                            XCAR (XCDR (XCDR (XCDR (watch_object)))));
+
+         /* Store it into the input event queue.  */
+         kbd_buffer_store_event (&event);
+         // XD_DEBUG_MESSAGE ("%s", XD_OBJECT_TO_STRING (event.arg));
+       }
+
+      /* Cancel monitor if file or directory is deleted.  */
+      if (!NILP (Fmember (symbol, list2 (Qdeleted, Qmoved))) &&
+         !g_file_monitor_is_cancelled (monitor))
+       g_file_monitor_cancel (monitor);
     }
 
   /* Cleanup.  */
@@ -119,9 +136,13 @@ watched for some reason, this function signals a 
`file-notify-error' error.
 FLAGS is a list of conditions to set what will be watched for.  It can
 include the following symbols:
 
-  `watch-mounts' -- watch for mount events
-  `send-moved'   -- pair `deleted' and `created' events caused by file
-                    renames and send a single `renamed' event instead
+  `change'           -- watch for file changes
+  `attribute-change' -- watch for file attributes changes, like
+                        permissions or modification time
+  `watch-mounts'     -- watch for mount events
+  `send-moved'       -- pair `deleted' and `created' events caused by
+                        file renames and send a single `renamed' event
+                        instead
 
 When any event happens, Emacs will call the CALLBACK function passing
 it a single argument EVENT, which is of the form
@@ -194,11 +215,15 @@ will be reported only in case of the `moved' event.  */)
                file);
     }
 
+  /* The default rate limit is 800 msec.  We adapt this.  */
+  g_file_monitor_set_rate_limit (monitor, 100);
+
+  /* Subscribe to the "changed" signal.  */
   g_signal_connect (monitor, "changed",
                    (GCallback) dir_monitor_callback, NULL);
 
   /* Store watch object in watch list.  */
-  watch_object = Fcons (watch_descriptor, callback);
+  watch_object = list4 (watch_descriptor, file, flags, callback);
   watch_list = Fcons (watch_object, watch_list);
 
   return watch_descriptor;
@@ -218,11 +243,12 @@ WATCH-DESCRIPTOR should be an object returned by 
`gfile-add-watch'.  */)
 
   eassert (INTEGERP (watch_descriptor));
   GFileMonitor *monitor = XINTPTR (watch_descriptor);
-  if (!g_file_monitor_cancel (monitor))
-    xsignal2 (Qfile_notify_error, build_string ("Could not rm watch"),
-             watch_descriptor);
+  if (!g_file_monitor_is_cancelled (monitor) &&
+      !g_file_monitor_cancel (monitor))
+      xsignal2 (Qfile_notify_error, build_string ("Could not rm watch"),
+               watch_descriptor);
 
-  /* Remove watch descriptor from watch list. */
+  /* Remove watch descriptor from watch list.  */
   watch_list = Fdelq (watch_object, watch_list);
 
   /* Cleanup.  */
@@ -231,6 +257,27 @@ WATCH-DESCRIPTOR should be an object returned by 
`gfile-add-watch'.  */)
   return Qt;
 }
 
+DEFUN ("gfile-valid-p", Fgfile_valid_p, Sgfile_valid_p, 1, 1, 0,
+       doc: /* "Check a watch specified by its WATCH-DESCRIPTOR.
+
+WATCH-DESCRIPTOR should be an object returned by `gfile-add-watch'.
+
+A watch can become invalid if the file or directory it watches is
+deleted, or if the watcher thread exits abnormally for any other
+reason.  Removing the watch by calling `gfile-rm-watch' also makes it
+invalid.  */)
+     (Lisp_Object watch_descriptor)
+{
+  Lisp_Object watch_object = Fassoc (watch_descriptor, watch_list);
+  if (NILP (watch_object))
+    return Qnil;
+  else
+    {
+      GFileMonitor *monitor = XINTPTR (watch_descriptor);
+      return g_file_monitor_is_cancelled (monitor) ? Qnil : Qt;
+    }
+}
+
 
 void
 globals_of_gfilenotify (void)
@@ -246,8 +293,11 @@ syms_of_gfilenotify (void)
 {
   defsubr (&Sgfile_add_watch);
   defsubr (&Sgfile_rm_watch);
+  defsubr (&Sgfile_valid_p);
 
   /* Filter objects.  */
+  DEFSYM (Qchange, "change");
+  DEFSYM (Qattribute_change, "attribute-change");
   DEFSYM (Qwatch_mounts, "watch-mounts"); /* G_FILE_MONITOR_WATCH_MOUNTS  */
   DEFSYM (Qsend_moved, "send-moved");  /* G_FILE_MONITOR_SEND_MOVED  */
 
diff --git a/src/image.c b/src/image.c
index 85cf801..b586c53 100644
--- a/src/image.c
+++ b/src/image.c
@@ -797,7 +797,7 @@ parse_image_spec (Lisp_Object spec, struct image_keyword 
*keywords,
          return 0;
 
        case IMAGE_NUMBER_VALUE:
-         if (!INTEGERP (value) && !FLOATP (value))
+         if (! NUMBERP (value))
            return 0;
          break;
 
@@ -7499,6 +7499,12 @@ gif_image_p (Lisp_Object object)
 #  define GIFLIB_MAJOR 4
 # endif
 
+/* GifErrorString is declared to return char const * when GIFLIB_MAJOR
+   and GIFLIB_MINOR indicate 5.1 or later.  Do not bother using it in
+   earlier releases, where either it returns char * or GIFLIB_MINOR
+   may be incorrect.  */
+# define HAVE_GIFERRORSTRING (5 < GIFLIB_MAJOR + (1 <= GIFLIB_MINOR))
+
 # ifdef WINDOWSNT
 
 /* GIF library details.  */
@@ -7514,7 +7520,9 @@ DEF_DLL_FN (GifFileType *, DGifOpenFileName, (const char 
*));
 #  else
 DEF_DLL_FN (GifFileType *, DGifOpen, (void *, InputFunc, int *));
 DEF_DLL_FN (GifFileType *, DGifOpenFileName, (const char *, int *));
-DEF_DLL_FN (char *, GifErrorString, (int));
+#  endif
+#  if HAVE_GIFERRORSTRING
+DEF_DLL_FN (char const *, GifErrorString, (int));
 #  endif
 
 static bool
@@ -7529,7 +7537,7 @@ init_gif_functions (void)
   LOAD_DLL_FN (library, DGifSlurp);
   LOAD_DLL_FN (library, DGifOpen);
   LOAD_DLL_FN (library, DGifOpenFileName);
-#  if GIFLIB_MAJOR >= 5
+#  if HAVE_GIFERRORSTRING
   LOAD_DLL_FN (library, GifErrorString);
 #  endif
   return 1;
@@ -7641,20 +7649,19 @@ gif_load (struct frame *f, struct image *img)
       /* Open the GIF file.  */
 #if GIFLIB_MAJOR < 5
       gif = DGifOpenFileName (SSDATA (encoded_file));
-      if (gif == NULL)
-       {
-         image_error ("Cannot open `%s'", file);
-         return 0;
-       }
 #else
       gif = DGifOpenFileName (SSDATA (encoded_file), &gif_err);
+#endif
       if (gif == NULL)
        {
+#if HAVE_GIFERRORSTRING
          image_error ("Cannot open `%s': %s",
                       file, build_string (GifErrorString (gif_err)));
+#else
+         image_error ("Cannot open `%s'", file);
+#endif
          return 0;
        }
-#endif
     }
   else
     {
@@ -7672,20 +7679,19 @@ gif_load (struct frame *f, struct image *img)
 
 #if GIFLIB_MAJOR < 5
       gif = DGifOpen (&memsrc, gif_read_from_memory);
-      if (!gif)
-       {
-         image_error ("Cannot open memory source `%s'", img->spec);
-         return 0;
-       }
 #else
       gif = DGifOpen (&memsrc, gif_read_from_memory, &gif_err);
+#endif
       if (!gif)
        {
+#if HAVE_GIFERRORSTRING
          image_error ("Cannot open memory source `%s': %s",
                       img->spec, build_string (GifErrorString (gif_err)));
+#else
+         image_error ("Cannot open memory source `%s'", img->spec);
+#endif
          return 0;
        }
-#endif
     }
 
   /* Before reading entire contents, check the declared image size. */
@@ -7980,8 +7986,8 @@ gif_load (struct frame *f, struct image *img)
 
   if (gif_close (gif, &gif_err) == GIF_ERROR)
     {
-#if 5 <= GIFLIB_MAJOR
-      char *error_text = GifErrorString (gif_err);
+#if HAVE_GIFERRORSTRING
+      char const *error_text = GifErrorString (gif_err);
 
       if (error_text)
        image_error ("Error closing `%s': %s",
diff --git a/src/indent.c b/src/indent.c
index 7e8f0a5..584f217 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -485,7 +485,9 @@ check_display_width (ptrdiff_t pos, ptrdiff_t col, 
ptrdiff_t *endpos)
         : MOST_POSITIVE_FIXNUM);
 
       if ((prop = Fplist_get (plist, QCwidth),
-          RANGED_INTEGERP (0, prop, INT_MAX)))
+          RANGED_INTEGERP (0, prop, INT_MAX))
+         || (prop = Fplist_get (plist, QCrelative_width),
+             RANGED_INTEGERP (0, prop, INT_MAX)))
        width = XINT (prop);
       else if (FLOATP (prop) && 0 <= XFLOAT_DATA (prop)
               && XFLOAT_DATA (prop) <= INT_MAX)
@@ -504,6 +506,18 @@ check_display_width (ptrdiff_t pos, ptrdiff_t col, 
ptrdiff_t *endpos)
            *endpos = OVERLAY_POSITION (OVERLAY_END (overlay));
          else
            get_property_and_range (pos, Qdisplay, &val, &start, endpos, Qnil);
+
+         /* For :relative-width, we need to multiply by the column
+            width of the character at POS, if it is greater than 1.  */
+         if (!NILP (Fplist_get (plist, QCrelative_width))
+             && !NILP (BVAR (current_buffer, enable_multibyte_characters)))
+           {
+             int b, wd;
+             unsigned char *p = BYTE_POS_ADDR (CHAR_TO_BYTE (pos));
+
+             MULTIBYTE_BYTES_WIDTH (p, buffer_display_table (), b, wd);
+             width *= wd;
+           }
          return width;
        }
     }
@@ -2195,7 +2209,27 @@ whether or not it is currently displayed in some window. 
 */)
         was originally hscrolled, the goal column is interpreted as
         an addition to the hscroll amount.  */
       if (lcols_given)
-       move_it_in_display_line (&it, ZV, first_x + to_x, MOVE_TO_X);
+       {
+         move_it_in_display_line (&it, ZV, first_x + to_x, MOVE_TO_X);
+         /* If we find ourselves in the middle of an overlay string
+            which includes a newline after current string position,
+            we need to move by lines until we get out of the string,
+            and then reposition point at the requested X coordinate;
+            if we don't, the cursor will be placed just after the
+            string, which might not be the requested column.  */
+         if (nlines > 0 && it.area == TEXT_AREA)
+           {
+             while (it.method == GET_FROM_STRING
+                    && !it.string_from_display_prop_p
+                    && memchr (SSDATA (it.string) + IT_STRING_BYTEPOS (it),
+                               '\n',
+                               SBYTES (it.string) - IT_STRING_BYTEPOS (it)))
+               {
+                 move_it_by_lines (&it, 1);
+                 move_it_in_display_line (&it, ZV, first_x + to_x, MOVE_TO_X);
+               }
+           }
+       }
 
       SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
       bidi_unshelve_cache (itdata, 0);
diff --git a/src/inotify.c b/src/inotify.c
index eddad73..be8c1dd 100644
--- a/src/inotify.c
+++ b/src/inotify.c
@@ -29,6 +29,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "frame.h" /* Required for termhooks.h.  */
 #include "termhooks.h"
 
+#include <errno.h>
 #include <sys/inotify.h>
 #include <sys/ioctl.h>
 
@@ -129,17 +130,14 @@ inotify_callback (int fd, void *_)
 
   to_read = 0;
   if (ioctl (fd, FIONREAD, &to_read) == -1)
-    xsignal1
-      (Qfile_notify_error,
-       build_string ("Error while trying to retrieve file system events"));
+    report_file_notify_error ("Error while retrieving file system events",
+                             Qnil);
   buffer = xmalloc (to_read);
   n = read (fd, buffer, to_read);
   if (n < 0)
     {
       xfree (buffer);
-      xsignal1
-      (Qfile_notify_error,
-       build_string ("Error while trying to read file system events"));
+      report_file_notify_error ("Error while reading file system events", 
Qnil);
     }
 
   EVENT_INIT (event);
@@ -215,7 +213,10 @@ symbol_to_inotifymask (Lisp_Object symb)
   else if (EQ (symb, Qt) || EQ (symb, Qall_events))
     return IN_ALL_EVENTS;
   else
-      xsignal2 (Qfile_notify_error, build_string ("Unknown aspect"), symb);
+    {
+      errno = EINVAL;
+      report_file_notify_error ("Unknown aspect", symb);
+    }
 }
 
 static uint32_t
@@ -307,9 +308,7 @@ is managed internally and there is no corresponding 
inotify_init.  Use
     {
       inotifyfd = inotify_init1 (IN_NONBLOCK|IN_CLOEXEC);
       if (inotifyfd < 0)
-       xsignal1
-         (Qfile_notify_error,
-          build_string ("File watching feature (inotify) is not available"));
+       report_file_notify_error ("File watching is not available", Qnil);
       watch_list = Qnil;
       add_read_fd (inotifyfd, &inotify_callback, NULL);
     }
@@ -318,17 +317,16 @@ is managed internally and there is no corresponding 
inotify_init.  Use
   encoded_file_name = ENCODE_FILE (file_name);
   watchdesc = inotify_add_watch (inotifyfd, SSDATA (encoded_file_name), mask);
   if (watchdesc == -1)
-    xsignal2 (Qfile_notify_error,
-             build_string ("Could not add watch for file"), file_name);
+    report_file_notify_error ("Could not add watch for file", file_name);
 
   watch_descriptor = make_watch_descriptor (watchdesc);
 
-  /* Delete existing watch object. */
+  /* Delete existing watch object.  */
   watch_object = Fassoc (watch_descriptor, watch_list);
   if (!NILP (watch_object))
       watch_list = Fdelete (watch_object, watch_list);
 
-  /* Store watch object in watch list. */
+  /* Store watch object in watch list.  */
   watch_object = Fcons (watch_descriptor, callback);
   watch_list = Fcons (watch_object, watch_list);
 
@@ -348,15 +346,14 @@ See inotify_rm_watch(2) for more information.
   int wd = XINT (watch_descriptor);
 
   if (inotify_rm_watch (inotifyfd, wd) == -1)
-    xsignal2 (Qfile_notify_error,
-             build_string ("Could not rm watch"), watch_descriptor);
+    report_file_notify_error ("Could not rm watch", watch_descriptor);
 
-  /* Remove watch descriptor from watch list. */
+  /* Remove watch descriptor from watch list.  */
   watch_object = Fassoc (watch_descriptor, watch_list);
   if (!NILP (watch_object))
     watch_list = Fdelete (watch_object, watch_list);
 
-  /* Cleanup if no more files are watched. */
+  /* Cleanup if no more files are watched.  */
   if (NILP (watch_list))
     {
       emacs_close (inotifyfd);
@@ -367,6 +364,21 @@ See inotify_rm_watch(2) for more information.
   return Qt;
 }
 
+DEFUN ("inotify-valid-p", Finotify_valid_p, Sinotify_valid_p, 1, 1, 0,
+       doc: /* "Check a watch specified by its WATCH-DESCRIPTOR.
+
+WATCH-DESCRIPTOR should be an object returned by `inotify-add-watch'.
+
+A watch can become invalid if the file or directory it watches is
+deleted, or if the watcher thread exits abnormally for any other
+reason.  Removing the watch by calling `inotify-rm-watch' also makes
+it invalid.  */)
+     (Lisp_Object watch_descriptor)
+{
+  Lisp_Object watch_object = Fassoc (watch_descriptor, watch_list);
+  return NILP (watch_object) ? Qnil : Qt;
+}
+
 void
 syms_of_inotify (void)
 {
@@ -401,6 +413,7 @@ syms_of_inotify (void)
 
   defsubr (&Sinotify_add_watch);
   defsubr (&Sinotify_rm_watch);
+  defsubr (&Sinotify_valid_p);
 
   staticpro (&watch_list);
 
diff --git a/src/keyboard.c b/src/keyboard.c
index ccd3405..966af69 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -11332,7 +11332,7 @@ See Info node `(elisp)Multiple Terminals'.  */);
 
   DEFVAR_BOOL ("cannot-suspend", cannot_suspend,
               doc: /* Non-nil means to always spawn a subshell instead of 
suspending.
-\(Even if the operating system has support for stopping a process.\)  */);
+(Even if the operating system has support for stopping a process.)  */);
   cannot_suspend = false;
 
   DEFVAR_BOOL ("menu-prompting", menu_prompting,
@@ -11538,7 +11538,7 @@ immediately after running `post-command-hook'.  */);
   DEFVAR_LISP ("input-method-function", Vinput_method_function,
               doc: /* If non-nil, the function that implements the current 
input method.
 It's called with one argument, a printing character that was just read.
-\(That means a character with code 040...0176.)
+(That means a character with code 040...0176.)
 Typically this function uses `read-event' to read additional events.
 When it does so, it should first bind `input-method-function' to nil
 so it will not be called recursively.
diff --git a/src/keymap.c b/src/keymap.c
index 3668d4b..6a8d129 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -1687,7 +1687,7 @@ DEFUN ("global-key-binding", Fglobal_key_binding, 
Sglobal_key_binding, 1, 2, 0,
 KEYS is a string or vector, a sequence of keystrokes.
 The binding is probably a symbol with a function definition.
 This function's return values are the same as those of `lookup-key'
-\(which see).
+(which see).
 
 If optional argument ACCEPT-DEFAULT is non-nil, recognize default
 bindings; see the description of `lookup-key' for more details about this.  */)
@@ -2492,7 +2492,7 @@ If FIRSTONLY is the symbol `non-ascii', return the first 
binding found,
 no matter what it is.
 If FIRSTONLY has another non-nil value, prefer bindings
 that use the modifier key specified in `where-is-preferred-modifier'
-\(or their meta variants) and entirely reject menu bindings.
+(or their meta variants) and entirely reject menu bindings.
 
 If optional 4th arg NOINDIRECT is non-nil, don't extract the commands inside
 menu-items.  This makes it possible to search for a menu-item itself.
@@ -2723,7 +2723,7 @@ looked up in BUFFER.
 The optional argument PREFIX, if non-nil, should be a key sequence;
 then we display only bindings that start with that prefix.
 The optional argument MENUS, if non-nil, says to mention menu bindings.
-\(Ordinarily these are omitted from the output.)  */)
+(Ordinarily these are omitted from the output.)  */)
   (Lisp_Object buffer, Lisp_Object prefix, Lisp_Object menus)
 {
   Lisp_Object outbuf, shadow;
diff --git a/src/lisp.h b/src/lisp.h
index d2d3856..2d66617 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1,4 +1,4 @@
-/* Fundamental definitions for GNU Emacs Lisp interpreter.
+/* Fundamental definitions for GNU Emacs Lisp interpreter. -*- coding: utf-8 
-*-
 
 Copyright (C) 1985-1987, 1993-1995, 1997-2015 Free Software Foundation,
 Inc.
@@ -2736,7 +2736,7 @@ XFLOATINT (Lisp_Object n)
 INLINE void
 CHECK_NUMBER_OR_FLOAT (Lisp_Object x)
 {
-  CHECK_TYPE (FLOATP (x) || INTEGERP (x), Qnumberp, x);
+  CHECK_TYPE (NUMBERP (x), Qnumberp, x);
 }
 
 #define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x)                         \
@@ -2744,7 +2744,7 @@ CHECK_NUMBER_OR_FLOAT (Lisp_Object x)
     if (MARKERP (x))                                                   \
       XSETFASTINT (x, marker_position (x));                            \
     else                                                               \
-      CHECK_TYPE (INTEGERP (x) || FLOATP (x), Qnumber_or_marker_p, x); \
+      CHECK_TYPE (NUMBERP (x), Qnumber_or_marker_p, x);                        
\
   } while (false)
 
 /* Since we can't assign directly to the CAR or CDR fields of a cons
@@ -3840,6 +3840,7 @@ extern void fclose_unwind (void *);
 extern void restore_point_unwind (Lisp_Object);
 extern _Noreturn void report_file_errno (const char *, Lisp_Object, int);
 extern _Noreturn void report_file_error (const char *, Lisp_Object);
+extern _Noreturn void report_file_notify_error (const char *, Lisp_Object);
 extern bool internal_delete_file (Lisp_Object);
 extern Lisp_Object emacs_readlinkat (int, const char *);
 extern bool file_directory_p (const char *);
@@ -4352,12 +4353,13 @@ INLINE ptrdiff_t
 lisp_word_count (ptrdiff_t nbytes)
 {
   if (-1 >> 1 == -1)
-    switch (word_size)
+    switch (word_size + 0)
       {
       case 2: return nbytes >> 1;
       case 4: return nbytes >> 2;
       case 8: return nbytes >> 3;
       case 16: return nbytes >> 4;
+      default: break;
       }
   return nbytes / word_size - (nbytes % word_size < 0);
 }
diff --git a/src/lread.c b/src/lread.c
index 6099545..bceec4b 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -4512,7 +4512,7 @@ customize `jka-compr-load-suffixes' rather than the 
present variable.  */);
 Each element looks like (REGEXP-OR-FEATURE FUNCS...).
 
 REGEXP-OR-FEATURE is either a regular expression to match file names, or
-a symbol \(a feature name).
+a symbol (a feature name).
 
 When `load' is run and the file-name argument matches an element's
 REGEXP-OR-FEATURE, or when `provide' is run and provides the symbol
diff --git a/src/macfont.m b/src/macfont.m
index 23d272c..97a255b 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -945,13 +945,7 @@ macfont_set_family_cache (Lisp_Object symbol, CFStringRef 
string)
   Lisp_Object value;
 
   if (!HASH_TABLE_P (macfont_family_cache))
-    {
-      Lisp_Object args[2];
-
-      args[0] = QCtest;
-      args[1] = Qeq;
-      macfont_family_cache = Fmake_hash_table (2, args);
-    }
+    macfont_family_cache = CALLN (Fmake_hash_table, QCtest, Qeq);
 
   h = XHASH_TABLE (macfont_family_cache);
   i = hash_lookup (h, symbol, &hash);
diff --git a/src/menu.c b/src/menu.c
index e36fe26..dc82809 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1129,7 +1129,7 @@ If POSITION is t, it means to use the current mouse 
position.
 MENU is a specifier for a menu.  For the simplest case, MENU is a keymap.
 The menu items come from key bindings that have a menu string as well as
 a definition; actually, the "definition" in such a key binding looks like
-\(STRING . REAL-DEFINITION).  To give the menu a title, put a string into
+(STRING . REAL-DEFINITION).  To give the menu a title, put a string into
 the keymap as a top-level element.
 
 If REAL-DEFINITION is nil, that puts a nonselectable string in the menu.
@@ -1491,7 +1491,7 @@ The return value is VALUE from the chosen item.
 An ITEM may also be just a string--that makes a nonselectable item.
 An ITEM may also be nil--that means to put all preceding items
 on the left of the dialog box and all following items on the right.
-\(By default, approximately half appear on each side.)
+(By default, approximately half appear on each side.)
 
 If HEADER is non-nil, the frame title for the box is "Information",
 otherwise it is "Question".
diff --git a/src/minibuf.c b/src/minibuf.c
index cf0cbca..4e5c17d 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -916,7 +916,7 @@ INITIAL-CONTENTS argument in more detail.  It is only 
relevant when
 studying existing code, or when HIST is a cons.  If non-nil,
 INITIAL-CONTENTS is a string to be inserted into the minibuffer before
 reading input.  Normally, point is put at the end of that string.
-However, if INITIAL-CONTENTS is \(STRING . POSITION), the initial
+However, if INITIAL-CONTENTS is (STRING . POSITION), the initial
 input is STRING, but point is placed at _one-indexed_ position
 POSITION in the minibuffer.  Any integer value less than or equal to
 one puts point at the beginning of the string.  *Note* that this
@@ -996,7 +996,7 @@ DEFUN ("read-no-blanks-input", Fread_no_blanks_input, 
Sread_no_blanks_input, 1,
 Prompt with PROMPT.  Whitespace terminates the input.  If INITIAL is
 non-nil, it should be a string, which is used as initial input, with
 point positioned at the end, so that SPACE will accept the input.
-\(Actually, INITIAL can also be a cons of a string and an integer.
+(Actually, INITIAL can also be a cons of a string and an integer.
 Such values are treated as in `read-from-minibuffer', but are normally
 not useful in this function.)
 Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
diff --git a/src/nsfns.m b/src/nsfns.m
index 89b9f7c..ad71a50 100644
--- a/src/nsfns.m
+++ b/src/nsfns.m
@@ -1009,7 +1009,7 @@ unwind_create_frame (Lisp_Object frame)
       x_free_frame_resources (f);
       free_glyphs (f);
 
-#ifdef GLYPH_DEBUG
+#if defined GLYPH_DEBUG && defined ENABLE_CHECKING
       /* Check that reference counts are indeed correct.  */
       eassert (dpyinfo->terminal->image_cache->refcount == 
image_cache_refcount);
 #endif
@@ -1639,7 +1639,7 @@ DEFUN ("x-server-max-request-size", 
Fx_server_max_request_size,
 
 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
        doc: /* Return the "vendor ID" string of Nextstep display server 
TERMINAL.
-\(Labeling every distributor as a "vendor" embodies the false assumption
+(Labeling every distributor as a "vendor" embodies the false assumption
 that operating systems cannot be developed and distributed noncommercially.)
 The optional argument TERMINAL specifies which display to ask about.
 TERMINAL should be a terminal object, a frame or a display name (a string).
@@ -1816,7 +1816,7 @@ DISPLAY is the name of the display to connect to.
 Optional second arg XRM-STRING is a string of resources in xrdb format.
 If the optional third arg MUST-SUCCEED is non-nil,
 terminate Emacs if we can't open the connection.
-\(In the Nextstep version, the last two arguments are currently ignored.)  */)
+(In the Nextstep version, the last two arguments are currently ignored.)  */)
      (Lisp_Object display, Lisp_Object resource_string, Lisp_Object 
must_succeed)
 {
   struct ns_display_info *dpyinfo;
@@ -2289,7 +2289,7 @@ x_get_focus_frame (struct frame *frame)
 
 DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
        doc: /* Internal function called by `color-defined-p', which see.
-\(Note that the Nextstep version of this function ignores FRAME.)  */)
+(Note that the Nextstep version of this function ignores FRAME.)  */)
      (Lisp_Object color, Lisp_Object frame)
 {
   NSColor * col;
diff --git a/src/nsselect.m b/src/nsselect.m
index 918fb55..5579cc5 100644
--- a/src/nsselect.m
+++ b/src/nsselect.m
@@ -316,7 +316,7 @@ DEFUN ("ns-own-selection-internal", 
Fns_own_selection_internal,
        Sns_own_selection_internal, 2, 2, 0,
        doc: /* Assert an X selection of type SELECTION and value VALUE.
 SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
-\(Those are literal upper-case symbol names, since that's what X expects.)
+(Those are literal upper-case symbol names, since that's what X expects.)
 VALUE is typically a string, or a cons of two markers, but may be
 anything that the functions on `selection-converter-alist' know about.  */)
      (Lisp_Object selection, Lisp_Object value)
@@ -414,7 +414,7 @@ DEFUN ("ns-selection-owner-p", Fns_selection_owner_p, 
Sns_selection_owner_p,
        doc: /* Whether the current Emacs process owns the given X Selection.
 The arg should be the name of the selection in question, typically one of
 the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
-\(Those are literal upper-case symbol names, since that's what X expects.)
+(Those are literal upper-case symbol names, since that's what X expects.)
 For convenience, the symbol nil is the same as `PRIMARY',
 and t is the same as `SECONDARY'.  */)
      (Lisp_Object selection)
@@ -433,7 +433,7 @@ DEFUN ("ns-get-selection", Fns_get_selection,
        Sns_get_selection, 2, 2, 0,
        doc: /* Return text selected from some X window.
 SELECTION-SYMBOL is typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
-\(Those are literal upper-case symbol names, since that's what X expects.)
+(Those are literal upper-case symbol names, since that's what X expects.)
 TARGET-TYPE is the type of data desired, typically `STRING'.  */)
      (Lisp_Object selection_name, Lisp_Object target_type)
 {
diff --git a/src/nsterm.m b/src/nsterm.m
index 2806f31..a5bf06a 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -1,4 +1,4 @@
-/* NeXT/Open/GNUstep / MacOSX communication module.
+/* NeXT/Open/GNUstep / MacOSX communication module.      -*- coding: utf-8 -*-
 
 Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2015 Free Software
 Foundation, Inc.
@@ -440,10 +440,7 @@ append2 (Lisp_Object list, Lisp_Object item)
    Utility to append to a list
    -------------------------------------------------------------------------- 
*/
 {
-  Lisp_Object array[2];
-  array[0] = list;
-  array[1] = list1 (item);
-  return Fnconc (2, &array[0]);
+  return CALLN (Fnconc, list, list1 (item));
 }
 
 
@@ -1333,6 +1330,7 @@ x_set_window_size (struct frame *f,
   int tb = FRAME_EXTERNAL_TOOL_BAR (f);
   int pixelwidth, pixelheight;
   int rows, cols;
+  int orig_height = wr.size.height;
 
   NSTRACE (x_set_window_size);
 
@@ -1386,7 +1384,7 @@ x_set_window_size (struct frame *f,
  if (f->output_data.ns->zooming)
    f->output_data.ns->zooming = 0;
  else
-   wr.origin.y += FRAME_PIXEL_HEIGHT (f) - pixelheight;
+   wr.origin.y += orig_height - wr.size.height;
 
   [view setRows: rows andColumns: cols];
   [window setFrame: wr display: YES];
diff --git a/src/print.c b/src/print.c
index 94f3fcd..3c3dca7 100644
--- a/src/print.c
+++ b/src/print.c
@@ -2198,7 +2198,7 @@ Also print formfeeds as `\\f'.  */);
 
   DEFVAR_BOOL ("print-escape-nonascii", print_escape_nonascii,
               doc: /* Non-nil means print unibyte non-ASCII chars in strings 
as \\OOO.
-\(OOO is the octal representation of the character code.)
+(OOO is the octal representation of the character code.)
 Only single-byte characters are affected, and only in `prin1'.
 When the output goes in a multibyte buffer, this feature is
 enabled regardless of the value of the variable.  */);
@@ -2206,7 +2206,7 @@ enabled regardless of the value of the variable.  */);
 
   DEFVAR_BOOL ("print-escape-multibyte", print_escape_multibyte,
               doc: /* Non-nil means print multibyte characters in strings as 
\\xXXXX.
-\(XXXX is the hex representation of the character code.)
+(XXXX is the hex representation of the character code.)
 This affects only `prin1'.  */);
   print_escape_multibyte = 0;
 
diff --git a/src/process.c b/src/process.c
index f4613be..42dd17c 100644
--- a/src/process.c
+++ b/src/process.c
@@ -957,7 +957,7 @@ DEFUN ("process-command", Fprocess_command, 
Sprocess_command, 1, 1, 0,
 This is a list of strings, the first string being the program executed
 and the rest of the strings being the arguments given to it.
 For a network or serial process, this is nil (process is running) or t
-\(process is stopped).  */)
+(process is stopped).  */)
   (register Lisp_Object process)
 {
   CHECK_PROCESS (process);
@@ -2674,7 +2674,7 @@ is not given or nil, 1 stopbit is used.
 :flowcontrol FLOWCONTROL -- FLOWCONTROL determines the type of
 flowcontrol to be used, which is either nil (don't use flowcontrol),
 the symbol `hw' (use RTS/CTS hardware flowcontrol), or the symbol `sw'
-\(use XON/XOFF software flowcontrol).  If FLOWCONTROL is not given, no
+(use XON/XOFF software flowcontrol).  If FLOWCONTROL is not given, no
 flowcontrol is used.
 
 `serial-process-configure' is called by `make-serial-process' for the
@@ -2682,12 +2682,12 @@ initial configuration of the serial port.
 
 Examples:
 
-\(serial-process-configure :process "/dev/ttyS0" :speed 1200)
+(serial-process-configure :process "/dev/ttyS0" :speed 1200)
 
-\(serial-process-configure
+(serial-process-configure
     :buffer "COM1" :stopbits 1 :parity \\='odd :flowcontrol \\='hw)
 
-\(serial-process-configure :port "\\\\.\\COM13" :bytesize 7)
+(serial-process-configure :port "\\\\.\\COM13" :bytesize 7)
 
 usage: (serial-process-configure &rest ARGS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
@@ -2781,13 +2781,13 @@ is available via the function `process-contact'.
 
 Examples:
 
-\(make-serial-process :port "/dev/ttyS0" :speed 9600)
+(make-serial-process :port "/dev/ttyS0" :speed 9600)
 
-\(make-serial-process :port "COM1" :speed 115200 :stopbits 2)
+(make-serial-process :port "COM1" :speed 115200 :stopbits 2)
 
-\(make-serial-process :port "\\\\.\\COM13" :speed 1200 :bytesize 7 :parity 
\\='odd)
+(make-serial-process :port "\\\\.\\COM13" :speed 1200 :bytesize 7 :parity 
\\='odd)
 
-\(make-serial-process :port "/dev/tty.BlueConsole-SPP-1" :speed nil)
+(make-serial-process :port "/dev/tty.BlueConsole-SPP-1" :speed nil)
 
 usage:  (make-serial-process &rest ARGS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
@@ -5031,12 +5031,18 @@ wait_reading_process_output (intmax_t time_limit, int 
nsecs, int read_kbd,
       for (channel = 0; channel <= max_input_desc; ++channel)
         {
           struct fd_callback_data *d = &fd_callback_info[channel];
-          if (d->func
-             && ((d->condition & FOR_READ
-                  && FD_ISSET (channel, &Available))
-                 || (d->condition & FOR_WRITE
-                     && FD_ISSET (channel, &write_mask))))
-            d->func (channel, d->data);
+          if (d->func)
+           {
+             if (d->condition & FOR_READ
+                 && FD_ISSET (channel, &Available))
+               {
+                 d->func (channel, d->data);
+                 FD_CLR (channel, &Available);
+               }
+             else if (d->condition & FOR_WRITE
+                      && FD_ISSET (channel, &write_mask))
+               d->func (channel, d->data);
+           }
        }
 
       for (channel = 0; channel <= max_process_desc; channel++)
@@ -6269,7 +6275,7 @@ SIGCODE may be an integer, or a symbol whose name is a 
signal name.  */)
        {
          Lisp_Object process_number
            = string_to_number (SSDATA (process), 10, 1);
-         if (INTEGERP (process_number) || FLOATP (process_number))
+         if (NUMBERP (process_number))
            tem = process_number;
        }
       process = tem;
@@ -6694,10 +6700,12 @@ status_notify (struct Lisp_Process *deleting_process,
          p->update_tick = p->tick;
          /* Now output the message suitably.  */
          exec_sentinel (proc, msg);
+         if (BUFFERP (p->buffer))
+           /* In case it uses %s in mode-line-format.  */
+           bset_update_mode_line (XBUFFER (p->buffer));
        }
     } /* end for */
 
-  update_mode_lines = 24;  /* In case buffers use %s in mode-line-format.  */
   return got_some_output;
 }
 
@@ -7294,7 +7302,7 @@ DEFUN ("process-attributes", Fprocess_attributes,
 
 Value is an alist where each element is a cons cell of the form
 
-    \(KEY . VALUE)
+    (KEY . VALUE)
 
 If this functionality is unsupported, the value is nil.
 
diff --git a/src/process.h b/src/process.h
index e889055..24bad45 100644
--- a/src/process.h
+++ b/src/process.h
@@ -43,25 +43,25 @@ struct Lisp_Process
     /* Name of subprocess terminal.  */
     Lisp_Object tty_name;
 
-    /* Name of this process */
+    /* Name of this process.  */
     Lisp_Object name;
 
     /* List of command arguments that this process was run with.
-       Is set to t for a stopped network process; nil otherwise. */
+       Is set to t for a stopped network process; nil otherwise.  */
     Lisp_Object command;
 
     /* (funcall FILTER PROC STRING)  (if FILTER is non-nil)
-       to dispose of a bunch of chars from the process all at once */
+       to dispose of a bunch of chars from the process all at once.  */
     Lisp_Object filter;
 
-    /* (funcall SENTINEL PROCESS) when process state changes */
+    /* (funcall SENTINEL PROCESS) when process state changes.  */
     Lisp_Object sentinel;
 
     /* (funcall LOG SERVER CLIENT MESSAGE) when a server process
        accepts a connection from a client.  */
     Lisp_Object log;
 
-    /* Buffer that output is going to */
+    /* Buffer that output is going to.  */
     Lisp_Object buffer;
 
     /* t if this is a real child process.  For a network or serial
@@ -73,10 +73,10 @@ struct Lisp_Process
     /* Plist for programs to keep per-process state information, parameters, 
etc.  */
     Lisp_Object plist;
 
-    /* Symbol indicating the type of process: real, network, serial  */
+    /* Symbol indicating the type of process: real, network, serial.  */
     Lisp_Object type;
 
-    /* Marker set to end of last buffer-inserted output from this process */
+    /* Marker set to end of last buffer-inserted output from this process.  */
     Lisp_Object mark;
 
     /* Symbol indicating status of process.
@@ -98,7 +98,7 @@ struct Lisp_Process
     /* Working buffer for encoding.  */
     Lisp_Object encoding_buf;
 
-    /* Queue for storing waiting writes */
+    /* Queue for storing waiting writes.  */
     Lisp_Object write_queue;
 
 #ifdef HAVE_GNUTLS
@@ -116,9 +116,9 @@ struct Lisp_Process
        A value 0 is used for pseudo-processes such as network or serial
        connections.  */
     pid_t pid;
-    /* Descriptor by which we read from this process */
+    /* Descriptor by which we read from this process.  */
     int infd;
-    /* Descriptor by which we write to this process */
+    /* Descriptor by which we write to this process.  */
     int outfd;
     /* Descriptors that were created for this process and that need
        closing.  Unused entries are negative.  */
diff --git a/src/search.c b/src/search.c
index 106a462..8c9714e 100644
--- a/src/search.c
+++ b/src/search.c
@@ -2784,7 +2784,7 @@ if the last match was on a buffer; integers or nil if a 
string was matched.
 Use `set-match-data' to reinstate the data in this list.
 
 If INTEGERS (the optional first argument) is non-nil, always use
-integers \(rather than markers) to represent buffer positions.  In
+integers (rather than markers) to represent buffer positions.  In
 this case, and if the last match was in a buffer, the buffer will get
 stored as one additional element at the end of the list.
 
diff --git a/src/syntax.c b/src/syntax.c
index dc82210..cacdf18 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -181,6 +181,7 @@ static void scan_sexps_forward (struct lisp_parse_state *,
                                 ptrdiff_t, ptrdiff_t, ptrdiff_t, EMACS_INT,
                                 bool, Lisp_Object, int);
 static bool in_classes (int, Lisp_Object);
+static void parse_sexp_propertize (ptrdiff_t charpos);
 
 /* This setter is used only in this file, so it can be private.  */
 static void
@@ -246,8 +247,15 @@ SETUP_SYNTAX_TABLE (ptrdiff_t from, ptrdiff_t count)
   gl_state.object = Qnil;
   gl_state.offset = 0;
   if (parse_sexp_lookup_properties)
-    if (count > 0 || from > BEGV)
-      update_syntax_table (count > 0 ? from : from - 1, count, 1, Qnil);
+    {
+      if (count > 0)
+       update_syntax_table_forward (from, true, Qnil);
+      else if (from > BEGV)
+       {
+         update_syntax_table (from - 1, count, true, Qnil);
+         parse_sexp_propertize (from - 1);
+       }
+    }
 }
 
 /* Same as above, but in OBJECT.  If OBJECT is nil, use current buffer.
@@ -313,7 +321,7 @@ update_syntax_table (ptrdiff_t charpos, EMACS_INT count, 
bool init,
 {
   Lisp_Object tmp_table;
   int cnt = 0;
-  bool invalidate = 1;
+  bool invalidate = true;
   INTERVAL i;
 
   if (init)
@@ -323,7 +331,7 @@ update_syntax_table (ptrdiff_t charpos, EMACS_INT count, 
bool init,
       gl_state.stop = gl_state.e_property;
       i = interval_of (charpos, object);
       gl_state.backward_i = gl_state.forward_i = i;
-      invalidate = 0;
+      invalidate = false;
       if (!i)
        return;
       /* interval_of updates only ->position of the return value, so
@@ -359,7 +367,7 @@ update_syntax_table (ptrdiff_t charpos, EMACS_INT count, 
bool init,
       i = update_interval (i, charpos);
       if (INTERVAL_LAST_POS (i) != gl_state.b_property)
        {
-         invalidate = 0;
+         invalidate = false;
          gl_state.forward_i = i;
          gl_state.e_property = INTERVAL_LAST_POS (i) - gl_state.offset;
        }
@@ -372,7 +380,7 @@ update_syntax_table (ptrdiff_t charpos, EMACS_INT count, 
bool init,
       i = update_interval (i, charpos);
       if (i->position != gl_state.e_property)
        {
-         invalidate = 0;
+         invalidate = false;
          gl_state.backward_i = i;
          gl_state.b_property = i->position - gl_state.offset;
        }
@@ -460,14 +468,69 @@ update_syntax_table (ptrdiff_t charpos, EMACS_INT count, 
bool init,
     }
   eassert (i == NULL); /* This property goes to the end.  */
   if (count > 0)
-    gl_state.e_property = gl_state.stop;
+    {
+      gl_state.e_property = gl_state.stop;
+      gl_state.forward_i = i;
+    }
   else
     gl_state.b_property = gl_state.start;
 }
+
+static void
+parse_sexp_propertize (ptrdiff_t charpos)
+{
+  EMACS_INT zv = ZV;
+  if (syntax_propertize__done <= charpos
+      && syntax_propertize__done < zv)
+    {
+      EMACS_INT modiffs = CHARS_MODIFF;
+      safe_call1 (Qinternal__syntax_propertize,
+                 make_number (min (zv, 1 + charpos)));
+      if (modiffs != CHARS_MODIFF)
+       error ("parse-sexp-propertize-function modified the buffer!");
+      if (syntax_propertize__done <= charpos
+         && syntax_propertize__done < zv)
+       error ("parse-sexp-propertize-function did not move"
+              " syntax-propertize--done");
+      SETUP_SYNTAX_TABLE (charpos, 1);
+    }
+  else if (gl_state.e_property > syntax_propertize__done)
+    {
+      gl_state.e_property = syntax_propertize__done;
+      gl_state.e_property_truncated = true;
+    }
+  else if (gl_state.e_property_truncated
+          && gl_state.e_property < syntax_propertize__done)
+    { /* When moving backward, e_property might be set without resetting
+        e_property_truncated, so the e_property_truncated flag may
+        occasionally be left raised spuriously.  This should be rare.  */
+      gl_state.e_property_truncated = false;
+      update_syntax_table_forward (charpos, false, Qnil);
+    }
+}
+
+void
+update_syntax_table_forward (ptrdiff_t charpos, bool init,
+                            Lisp_Object object)
+{
+  if (gl_state.e_property_truncated)
+    {
+      eassert (NILP (object));
+      eassert (charpos >= gl_state.e_property);
+      parse_sexp_propertize (charpos);
+    }
+  else
+    {
+      update_syntax_table (charpos, 1, init, object);
+      if (gl_state.e_property > syntax_propertize__done
+         && NILP (object))
+       parse_sexp_propertize (charpos);
+    }
+}
 
 /* Returns true if char at CHARPOS is quoted.
    Global syntax-table data should be set up already to be good at CHARPOS
-   or after.  On return global syntax data is good for lookup at CHARPOS. */
+   or after.  On return global syntax data is good for lookup at CHARPOS.  */
 
 static bool
 char_quoted (ptrdiff_t charpos, ptrdiff_t bytepos)
@@ -628,7 +691,7 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, 
ptrdiff_t stop,
      OFROM[I] is position of the earliest comment-starter seen
      which is I+2X quotes from the comment-end.
      PARITY is current parity of quotes from the comment end.  */
-  int string_style = -1;       /* Presumed outside of any string. */
+  int string_style = -1;       /* Presumed outside of any string.  */
   bool string_lossage = 0;
   /* Not a real lossage: indicates that we have passed a matching comment
      starter plus a non-matching comment-ender, meaning that any matching
@@ -645,7 +708,7 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, 
ptrdiff_t stop,
   ptrdiff_t defun_start = 0;
   ptrdiff_t defun_start_byte = 0;
   enum syntaxcode code;
-  ptrdiff_t nesting = 1;               /* current comment nesting */
+  ptrdiff_t nesting = 1;               /* Current comment nesting.  */
   int c;
   int syntax = 0;
 
@@ -876,7 +939,7 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, 
ptrdiff_t stop,
                   is nested, so we need to try again from within the
                   surrounding comment.  Example: { a (* " *)  */
                {
-                 /* FIXME: We should advance by one or two chars. */
+                 /* FIXME: We should advance by one or two chars.  */
                  defun_start = state.comstr_start + 2;
                  defun_start_byte = CHAR_TO_BYTE (defun_start);
                }
@@ -1042,7 +1105,7 @@ DEFUN ("string-to-syntax", Fstring_to_syntax, 
Sstring_to_syntax, 1, 1, 0,
        doc: /* Convert a syntax descriptor STRING into a raw syntax descriptor.
 STRING should be a string of the form allowed as argument of
 `modify-syntax-entry'.  The return value is a raw syntax descriptor: a
-cons cell \(CODE . MATCHING-CHAR) which can be used, for example, as
+cons cell (CODE . MATCHING-CHAR) which can be used, for example, as
 the value of a `syntax-table' text property.  */)
   (Lisp_Object string)
 {
@@ -2288,13 +2351,13 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, 
ptrdiff_t stop,
          && SYNTAX_FLAGS_COMMENT_STYLE (syntax, 0) == style
          && (SYNTAX_FLAGS_COMMENT_NESTED (syntax) ?
              (nesting > 0 && --nesting == 0) : nesting < 0))
-       /* we have encountered a comment end of the same style
+       /* We have encountered a comment end of the same style
           as the comment sequence which began this comment
-          section */
+          section.  */
        break;
       if (code == Scomment_fence
          && style == ST_COMMENT_STYLE)
-       /* we have encountered a comment end of the same style
+       /* We have encountered a comment end of the same style
           as the comment sequence which began this comment
           section.  */
        break;
@@ -2302,8 +2365,8 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, 
ptrdiff_t stop,
          && code == Scomment
          && SYNTAX_FLAGS_COMMENT_NESTED (syntax)
          && SYNTAX_FLAGS_COMMENT_STYLE (syntax, 0) == style)
-       /* we have encountered a nested comment of the same style
-          as the comment sequence which began this comment section */
+       /* We have encountered a nested comment of the same style
+          as the comment sequence which began this comment section.  */
        nesting++;
       INC_BOTH (from, from_byte);
       UPDATE_SYNTAX_TABLE_FORWARD (from);
@@ -2319,9 +2382,8 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, 
ptrdiff_t stop,
              ? nesting > 0 : nesting < 0))
        {
          if (--nesting <= 0)
-           /* we have encountered a comment end of the same style
-              as the comment sequence which began this comment
-              section */
+           /* We have encountered a comment end of the same style
+              as the comment sequence which began this comment section.  */
            break;
          else
            {
@@ -2338,9 +2400,8 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, 
ptrdiff_t stop,
              && SYNTAX_FLAGS_COMSTART_SECOND (other_syntax))
          && (SYNTAX_FLAGS_COMMENT_NESTED (syntax) ||
              SYNTAX_FLAGS_COMMENT_NESTED (other_syntax)))
-       /* we have encountered a nested comment of the same style
-          as the comment sequence which began this comment
-          section */
+       /* We have encountered a nested comment of the same style
+          as the comment sequence which began this comment section.  */
        {
          INC_BOTH (from, from_byte);
          UPDATE_SYNTAX_TABLE_FORWARD (from);
@@ -2584,9 +2645,9 @@ scan_lists (EMACS_INT from, EMACS_INT count, EMACS_INT 
depth, bool sexpflag)
   bool quoted;
   bool mathexit = 0;
   enum syntaxcode code;
-  EMACS_INT min_depth = depth;    /* Err out if depth gets less than this.  */
-  int comstyle = 0;        /* style of comment encountered */
-  bool comnested = 0;      /* whether the comment is nestable or not */
+  EMACS_INT min_depth = depth;  /* Err out if depth gets less than this.  */
+  int comstyle = 0;            /* Style of comment encountered.  */
+  bool comnested = 0;          /* Whether the comment is nestable or not.  */
   ptrdiff_t temp_pos;
   EMACS_INT last_good = from;
   bool found;
@@ -2630,11 +2691,11 @@ scan_lists (EMACS_INT from, EMACS_INT count, EMACS_INT 
depth, bool sexpflag)
                  SYNTAX_FLAGS_COMSTART_SECOND (other_syntax))
              && parse_sexp_ignore_comments)
            {
-             /* we have encountered a comment start sequence and we
+             /* We have encountered a comment start sequence and we
                 are ignoring all text inside comments.  We must record
                 the comment style this sequence begins so that later,
                 only a comment end of the same style actually ends
-                the comment section */
+                the comment section.  */
              code = Scomment;
              comstyle = SYNTAX_FLAGS_COMMENT_STYLE (other_syntax, syntax);
              comnested |= SYNTAX_FLAGS_COMMENT_NESTED (other_syntax);
@@ -2652,7 +2713,7 @@ scan_lists (EMACS_INT from, EMACS_INT count, EMACS_INT 
depth, bool sexpflag)
              if (from == stop)
                goto lose;
              INC_BOTH (from, from_byte);
-             /* treat following character as a word constituent */
+             /* Treat following character as a word constituent.  */
            case Sword:
            case Ssymbol:
              if (depth || !sexpflag) break;
@@ -2745,12 +2806,8 @@ scan_lists (EMACS_INT from, EMACS_INT count, EMACS_INT 
depth, bool sexpflag)
                      : c_code == Sstring_fence)
                    break;
 
-                 switch (c_code)
-                   {
-                   case Scharquote:
-                   case Sescape:
-                     INC_BOTH (from, from_byte);
-                   }
+                 if (c_code == Scharquote || c_code == Sescape)
+                   INC_BOTH (from, from_byte);
                  INC_BOTH (from, from_byte);
                }
              INC_BOTH (from, from_byte);
@@ -3365,11 +3422,16 @@ do { prev_from = from;                          \
                  case Sstring_fence:
                    if (!nofence) goto string_end;
                    break;
+
                  case Scharquote:
                  case Sescape:
                    INC_FROM;
                  startquotedinstring:
                    if (from >= end) goto endquoted;
+                   break;
+
+                 default:
+                   break;
                  }
                INC_FROM;
              }
@@ -3457,7 +3519,7 @@ Sixth arg COMMENTSTOP non-nil means stop at the start of 
a comment.
       target = XINT (targetdepth);
     }
   else
-    target = TYPE_MINIMUM (EMACS_INT); /* We won't reach this depth */
+    target = TYPE_MINIMUM (EMACS_INT); /* We won't reach this depth.  */
 
   validate_region (&from, &to);
   scan_sexps_forward (&state, XINT (from), CHAR_TO_BYTE (XINT (from)),
@@ -3588,7 +3650,7 @@ syms_of_syntax (void)
   staticpro (&gl_state.current_syntax_table);
   staticpro (&gl_state.old_prop);
 
-  /* Defined in regex.c */
+  /* Defined in regex.c.  */
   staticpro (&re_match_object);
 
   DEFSYM (Qscan_error, "scan-error");
@@ -3606,6 +3668,11 @@ Otherwise, that text property is simply ignored.
 See the info node `(elisp)Syntax Properties' for a description of the
 `syntax-table' property.  */);
 
+  DEFVAR_INT ("syntax-propertize--done", syntax_propertize__done,
+             doc: /* Position up to which syntax-table properties have been 
set.  */);
+  syntax_propertize__done = -1;
+  DEFSYM (Qinternal__syntax_propertize, "internal--syntax-propertize");
+
   words_include_escapes = 0;
   DEFVAR_BOOL ("words-include-escapes", words_include_escapes,
               doc: /* Non-nil means `forward-word', etc., should treat escape 
chars part of words.  */);
diff --git a/src/syntax.h b/src/syntax.h
index bfcb871..34b652b 100644
--- a/src/syntax.h
+++ b/src/syntax.h
@@ -21,6 +21,7 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 INLINE_HEADER_BEGIN
 
 extern void update_syntax_table (ptrdiff_t, EMACS_INT, bool, Lisp_Object);
+extern void update_syntax_table_forward (ptrdiff_t, bool, Lisp_Object);
 
 /* The standard syntax table is stored where it will automatically
    be used in all new buffers.  */
@@ -52,30 +53,32 @@ enum syntaxcode
                       other side by any char with the same syntaxcode.  */
     Sstring_fence,  /* Starts/ends string which is delimited on the
                       other side by any char with the same syntaxcode.  */
-    Smax        /* Upper bound on codes that are meaningful */
+    Smax        /* Upper bound on codes that are meaningful.  */
   };
 
 
 struct gl_state_s
 {
-  Lisp_Object object;                  /* The object we are scanning. */
-  ptrdiff_t start;                     /* Where to stop. */
-  ptrdiff_t stop;                      /* Where to stop. */
+  Lisp_Object object;                  /* The object we are scanning.  */
+  ptrdiff_t start;                     /* Where to stop.  */
+  ptrdiff_t stop;                      /* Where to stop.  */
   bool use_global;                     /* Whether to use global_code
-                                          or c_s_t. */
-  Lisp_Object global_code;             /* Syntax code of current char. */
-  Lisp_Object current_syntax_table;    /* Syntax table for current pos. */
-  Lisp_Object old_prop;                        /* Syntax-table prop at prev 
pos. */
-  ptrdiff_t b_property;                        /* First index where c_s_t is 
valid. */
+                                          or c_s_t.  */
+  Lisp_Object global_code;             /* Syntax code of current char.  */
+  Lisp_Object current_syntax_table;    /* Syntax table for current pos.  */
+  Lisp_Object old_prop;                        /* Syntax-table prop at prev 
pos.  */
+  ptrdiff_t b_property;                        /* First index where c_s_t is 
valid.  */
   ptrdiff_t e_property;                        /* First index where c_s_t is
-                                          not valid. */
-  INTERVAL forward_i;                  /* Where to start lookup on forward */
+                                          not valid.  */
+  bool e_property_truncated;           /* true if e_property if was truncated
+                                          by parse_sexp_propertize_done.  */
+  INTERVAL forward_i;                  /* Where to start lookup on forward.  */
   INTERVAL backward_i;                 /* or backward movement.  The
                                           data in c_s_t is valid
                                           between these intervals,
                                           and possibly at the
                                           intervals too, depending
-                                          on: */
+                                          on:  */
   /* Offset for positions specified to UPDATE_SYNTAX_TABLE.  */
   ptrdiff_t offset;
 };
@@ -171,9 +174,10 @@ SYNTAX_TABLE_BYTE_TO_CHAR (ptrdiff_t bytepos)
 
 INLINE void
 UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos)
-{
+{ /* Performs just-in-time syntax-propertization.  */
   if (parse_sexp_lookup_properties && charpos >= gl_state.e_property)
-    update_syntax_table (charpos + gl_state.offset, 1, false, gl_state.object);
+    update_syntax_table_forward (charpos + gl_state.offset,
+                                false, gl_state.object);
 }
 
 /* Make syntax table state (gl_state) good for CHARPOS, assuming it is
@@ -201,6 +205,7 @@ INLINE void
 SETUP_BUFFER_SYNTAX_TABLE (void)
 {
   gl_state.use_global = false;
+  gl_state.e_property_truncated = false;
   gl_state.current_syntax_table = BVAR (current_buffer, syntax_table);
 }
 
diff --git a/src/term.c b/src/term.c
index 8ebb620..5acc473 100644
--- a/src/term.c
+++ b/src/term.c
@@ -3117,6 +3117,7 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
   Lisp_Object selectface;
   int first_item = 0;
   int col, row;
+  Lisp_Object prev_inhibit_redisplay = Vinhibit_redisplay;
   USE_SAFE_ALLOCA;
 
   /* Don't allow non-positive x0 and y0, lest the menu will wrap
@@ -3159,6 +3160,11 @@ tty_menu_activate (tty_menu *menu, int *pane, int 
*selidx,
       buffers_num_deleted = 1;
     }
 
+  /* Inhibit redisplay for as long as the menu is active, to avoid
+     messing the screen if some timer calls sit-for or a similar
+     function.  */
+  Vinhibit_redisplay = Qt;
+
   /* Force update of the current frame, so that the desired and the
      current matrices are identical.  */
   update_frame_with_menu (sf, -1, -1);
@@ -3349,6 +3355,7 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
   if (!kbd_buffer_events_waiting ())
     clear_input_pending ();
   SAFE_FREE ();
+  Vinhibit_redisplay = prev_inhibit_redisplay;
   return result;
 }
 
diff --git a/src/termhooks.h b/src/termhooks.h
index 168bc35..88c62df 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -383,6 +383,11 @@ struct terminal
     the selection-values.  */
   Lisp_Object Vselection_alist;
 
+  /* If a char-table, this maps characters to terminal glyph codes.
+     If t, the mapping is not available.  If nil, it is not known
+     whether the mapping is available.  */
+  Lisp_Object glyph_code_table;
+
   /* All fields before `next_terminal' should be Lisp_Object and are traced
      by the GC.  All fields afterwards are ignored by the GC.  */
 
@@ -690,6 +695,7 @@ extern struct terminal *get_named_terminal (const char *);
 extern struct terminal *create_terminal (enum output_method,
                                         struct redisplay_interface *);
 extern void delete_terminal (struct terminal *);
+extern Lisp_Object terminal_glyph_code (struct terminal *, int);
 
 /* The initial terminal device, created by initial_term_init.  */
 extern struct terminal *initial_terminal;
diff --git a/src/terminal.c b/src/terminal.c
index b48d062..80c6aa2 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -28,6 +28,12 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>.  */
 #include "coding.h"
 #include "keyboard.h"
 
+#if HAVE_STRUCT_UNIPAIR_UNICODE
+# include <errno.h>
+# include <linux/kd.h>
+# include <sys/ioctl.h>
+#endif
+
 /* Chain of all terminals currently in use.  */
 struct terminal *terminal_list;
 
@@ -526,6 +532,65 @@ selected frame's terminal).  */)
   return store_terminal_param (decode_live_terminal (terminal), parameter, 
value);
 }
 
+#if HAVE_STRUCT_UNIPAIR_UNICODE
+
+/* Compute the glyph code table for T.  */
+
+static void
+calculate_glyph_code_table (struct terminal *t)
+{
+  Lisp_Object glyphtab = Qt;
+  enum { initial_unipairs = 1000 };
+  int entry_ct = initial_unipairs;
+  struct unipair unipair_buffer[initial_unipairs];
+  struct unipair *entries = unipair_buffer;
+  struct unipair *alloced = 0;
+
+  while (true)
+    {
+      int fd = fileno (t->display_info.tty->output);
+      struct unimapdesc unimapdesc = { entry_ct, entries };
+      if (ioctl (fd, GIO_UNIMAP, &unimapdesc) == 0)
+       {
+         glyphtab = Fmake_char_table (Qnil, make_number (-1));
+         for (int i = 0; i < unimapdesc.entry_ct; i++)
+           char_table_set (glyphtab, entries[i].unicode,
+                           make_number (entries[i].fontpos));
+         break;
+       }
+      if (errno != ENOMEM)
+       break;
+      entry_ct = unimapdesc.entry_ct;
+      entries = alloced = xrealloc (alloced, entry_ct * sizeof *alloced);
+    }
+
+  xfree (alloced);
+  t->glyph_code_table = glyphtab;
+}
+#endif
+
+/* Return the glyph code in T of character CH, or -1 if CH does not
+   have a font position in T, or nil if T does not report glyph codes.  */
+
+Lisp_Object
+terminal_glyph_code (struct terminal *t, int ch)
+{
+#if HAVE_STRUCT_UNIPAIR_UNICODE
+  if (t->type == output_termcap)
+    {
+      /* As a hack, recompute the table when CH is the maximum
+        character.  */
+      if (NILP (t->glyph_code_table) || ch == MAX_CHAR)
+       calculate_glyph_code_table (t);
+
+      if (! EQ (t->glyph_code_table, Qt))
+       return char_table_ref (t->glyph_code_table, ch);
+    }
+#endif
+
+  return Qnil;
+}
+
 /* Initial frame has no device-dependent output data, but has
    face cache which should be freed when the frame is deleted.  */
 
diff --git a/src/textprop.c b/src/textprop.c
index 3f7c8d1..6758d4d 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -1494,7 +1494,7 @@ DEFUN ("remove-text-properties", Fremove_text_properties,
        doc: /* Remove some properties from text from START to END.
 The third argument PROPERTIES is a property list
 whose property names specify the properties to remove.
-\(The values stored in PROPERTIES are ignored.)
+(The values stored in PROPERTIES are ignored.)
 If the optional fourth argument OBJECT is a buffer (or nil, which means
 the current buffer), START and END are buffer positions (integers or
 markers).  If OBJECT is a string, START and END are 0-based indices into it.
diff --git a/src/vm-limit.c b/src/vm-limit.c
index ab102e3..503aaae 100644
--- a/src/vm-limit.c
+++ b/src/vm-limit.c
@@ -170,19 +170,13 @@ check_memory_limits (void)
   if (new_warnlevel > warnlevel || new_warnlevel == warned_95)
     {
       warnlevel = new_warnlevel;
-      switch (warnlevel)
+      static char const *const warn_diagnostic[] =
        {
-       case warned_75:
-         (*warn_function) ("Warning: past 75% of memory limit");
-         break;
-
-       case warned_85:
-         (*warn_function) ("Warning: past 85% of memory limit");
-         break;
-
-       case warned_95:
-         (*warn_function) ("Warning: past 95% of memory limit");
-       }
+         "Warning: past 75% of memory limit",
+         "Warning: past 85% of memory limit",
+         "Warning: past 95% of memory limit"
+       };
+      warn_function (warn_diagnostic[warnlevel - 1]);
     }
   /* Handle going down in usage levels, with some hysteresis.  */
   else
diff --git a/src/w16select.c b/src/w16select.c
index 96f8437..70b9dd0 100644
--- a/src/w16select.c
+++ b/src/w16select.c
@@ -686,7 +686,7 @@ For MS-Windows and MS-DOS:
 When sending or receiving text via selection and clipboard, the text
 is encoded or decoded by this coding system.  The default value is
 the current system default encoding on 9x/Me, `utf-16le-dos'
-\(Unicode) on NT/W2K/XP, and `iso-latin-1-dos' on MS-DOS.
+(Unicode) on NT/W2K/XP, and `iso-latin-1-dos' on MS-DOS.
 
 For X Windows:
 When sending text via selection and clipboard, if the target
diff --git a/src/w32fns.c b/src/w32fns.c
index d8e22e2..99fd3ba 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -1763,10 +1763,8 @@ x_change_tool_bar_height (struct frame *f, int height)
   f->n_tool_bar_rows = 0;
 
   adjust_frame_size (f, -1, -1,
-                    ((!f->tool_bar_redisplayed_once
-                      && (NILP (fullscreen =
-                                get_frame_param (f, Qfullscreen))
-                          || EQ (fullscreen, Qfullwidth))) ? 1
+                    ((NILP (fullscreen = get_frame_param (f, Qfullscreen))
+                      || EQ (fullscreen, Qfullwidth)) ? 1
                      : (old_height == 0 || height == 0) ? 2
                      : 4),
                     false, Qtool_bar_lines);
@@ -5307,7 +5305,7 @@ x_get_focus_frame (struct frame *frame)
 
 DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
        doc: /* Internal function called by `color-defined-p', which see.
-\(Note that the Nextstep version of this function ignores FRAME.)  */)
+(Note that the Nextstep version of this function ignores FRAME.)  */)
   (Lisp_Object color, Lisp_Object frame)
 {
   XColor foo;
@@ -5449,7 +5447,7 @@ If omitted or nil, that stands for the selected frame's 
display.  */)
 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
        doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
 
-\(Labeling every distributor as a "vendor" embodies the false assumption
+(Labeling every distributor as a "vendor" embodies the false assumption
 that operating systems cannot be developed and distributed noncommercially.)
 
 For GNU and Unix systems, this queries the X server software; for
@@ -5852,7 +5850,7 @@ DISPLAY is the name of the display to connect to.
 Optional second arg XRM-STRING is a string of resources in xrdb format.
 If the optional third arg MUST-SUCCEED is non-nil,
 terminate Emacs if we can't open the connection.
-\(In the Nextstep version, the last two arguments are currently ignored.)  */)
+(In the Nextstep version, the last two arguments are currently ignored.)  */)
   (Lisp_Object display, Lisp_Object xrm_string, Lisp_Object must_succeed)
 {
   unsigned char *xrm_option;
diff --git a/src/w32notify.c b/src/w32notify.c
index ab6cd12..e822d95 100644
--- a/src/w32notify.c
+++ b/src/w32notify.c
@@ -528,8 +528,8 @@ generate notifications correctly, though.  */)
       || (w32_major_version == 5 && w32_major_version < 1))
     {
       errno = ENOSYS;
-      report_file_error ("Watching filesystem events is not supported",
-                        Qnil);
+      report_file_notify_error ("Watching filesystem events is not supported",
+                               Qnil);
     }
 
   /* filenotify.el always passes us a directory, either the parent
@@ -573,11 +573,11 @@ generate notifications correctly, though.  */)
                                              Vlocale_coding_system, 0);
          else
            lisp_errstr = build_string (errstr);
-         report_file_error ("Cannot watch file",
-                            Fcons (lisp_errstr, Fcons (file, Qnil)));
+         report_file_notify_error ("Cannot watch file",
+                                   Fcons (lisp_errstr, Fcons (file, Qnil)));
        }
       else
-       report_file_error ("Cannot watch file", Fcons (file, Qnil));
+       report_file_notify_error ("Cannot watch file", Fcons (file, Qnil));
     }
   /* Store watch object in watch list. */
   watch_descriptor = make_pointer_integer (dirwatch);
@@ -611,8 +611,8 @@ WATCH-DESCRIPTOR should be an object returned by 
`w32notify-add-watch'.  */)
     }
 
   if (status == -1)
-    report_file_error ("Invalid watch descriptor", Fcons (watch_descriptor,
-                                                         Qnil));
+    report_file_notify_error ("Invalid watch descriptor",
+                             Fcons (watch_descriptor, Qnil));
 
   return Qnil;
 }
@@ -628,6 +628,30 @@ w32_get_watch_object (void *desc)
   return NILP (watch_list) ? Qnil : assoc_no_quit (descriptor, watch_list);
 }
 
+DEFUN ("w32notify-valid-p", Fw32notify_valid_p, Sw32notify_valid_p, 1, 1, 0,
+       doc: /* "Check a watch specified by its WATCH-DESCRIPTOR for validity.
+
+WATCH-DESCRIPTOR should be an object returned by `w32notify-add-watch'.
+
+A watch can become invalid if the directory it watches is deleted, or if
+the watcher thread exits abnormally for any other reason.  Removing the
+watch by calling `w32notify-rm-watch' also makes it invalid.  */)
+     (Lisp_Object watch_descriptor)
+{
+  Lisp_Object watch_object = Fassoc (watch_descriptor, watch_list);
+
+  if (!NILP (watch_object))
+    {
+      struct notification *dirwatch =
+       (struct notification *)XINTPTR (watch_descriptor);
+      if (w32_valid_pointer_p (dirwatch, sizeof(struct notification))
+         && dirwatch->dir != NULL)
+       return Qt;
+    }
+
+  return Qnil;
+}
+
 void
 globals_of_w32notify (void)
 {
@@ -648,6 +672,7 @@ syms_of_w32notify (void)
 
   defsubr (&Sw32notify_add_watch);
   defsubr (&Sw32notify_rm_watch);
+  defsubr (&Sw32notify_valid_p);
 
   staticpro (&watch_list);
 
diff --git a/src/window.c b/src/window.c
index f6fe0cd..42a2ca6 100644
--- a/src/window.c
+++ b/src/window.c
@@ -641,7 +641,7 @@ DEFUN ("window-combination-limit", 
Fwindow_combination_limit, Swindow_combinatio
 WINDOW must be a valid window used in horizontal or vertical combination.
 If the return value is nil, child windows of WINDOW can be recombined with
 WINDOW's siblings.  A return value of t means that child windows of
-WINDOW are never \(re-)combined with WINDOW's siblings.  */)
+WINDOW are never (re-)combined with WINDOW's siblings.  */)
   (Lisp_Object window)
 {
   struct window *w;
@@ -658,7 +658,7 @@ DEFUN ("set-window-combination-limit", 
Fset_window_combination_limit, Sset_windo
 WINDOW must be a valid window used in horizontal or vertical combination.
 If LIMIT is nil, child windows of WINDOW can be recombined with WINDOW's
 siblings.  LIMIT t means that child windows of WINDOW are never
-\(re-)combined with WINDOW's siblings.  Other values are reserved for
+(re-)combined with WINDOW's siblings.  Other values are reserved for
 future use.  */)
   (Lisp_Object window, Lisp_Object limit)
 {
@@ -1291,10 +1291,18 @@ window_relative_x_coord (struct window *w, enum 
window_part part, int x)
              + window_box_width (w, RIGHT_MARGIN_AREA)
              + ((WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w))
                 ? WINDOW_RIGHT_FRINGE_WIDTH (w) : 0));
-    }
 
-  /* ON_SCROLL_BAR, ON_NOTHING, and ON_VERTICAL_BORDER:  */
-  return 0;
+    case ON_NOTHING:
+    case ON_VERTICAL_BORDER:
+    case ON_VERTICAL_SCROLL_BAR:
+    case ON_HORIZONTAL_SCROLL_BAR:
+    case ON_RIGHT_DIVIDER:
+    case ON_BOTTOM_DIVIDER:
+      return 0;
+
+    default:
+      emacs_abort ();
+    }
 }
 
 
@@ -1304,7 +1312,7 @@ DEFUN ("coordinates-in-window-p", 
Fcoordinates_in_window_p,
 WINDOW must be a live window and defaults to the selected one.
 COORDINATES is a cons of the form (X . Y), X and Y being distances
 measured in characters from the upper-left corner of the frame.
-\(0 . 0) denotes the character in the upper left corner of the
+(0 . 0) denotes the character in the upper left corner of the
 frame.
 If COORDINATES are in the text portion of WINDOW,
    the coordinates relative to the window are returned.
@@ -1688,7 +1696,7 @@ of the window.  The remaining elements are omitted if the 
character after
 POS is fully visible; otherwise, RTOP and RBOT are the number of pixels
 off-window at the top and bottom of the screen line ("row") containing
 POS, ROWH is the visible height of that row, and VPOS is the row number
-\(zero-based).  */)
+(zero-based).  */)
   (Lisp_Object pos, Lisp_Object window, Lisp_Object partially)
 {
   struct window *w;
diff --git a/src/xdisp.c b/src/xdisp.c
index 82931b8..2c38aa9 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -768,7 +768,7 @@ static void push_it (struct it *, struct text_pos *);
 static void iterate_out_of_display_property (struct it *);
 static void pop_it (struct it *);
 static void redisplay_internal (void);
-static bool echo_area_display (bool);
+static void echo_area_display (bool);
 static void redisplay_windows (Lisp_Object);
 static void redisplay_window (Lisp_Object, bool);
 static Lisp_Object redisplay_window_error (Lisp_Object);
@@ -2661,10 +2661,18 @@ init_iterator (struct it *it, struct window *w,
      free realized faces now because they depend on face definitions
      that might have changed.  Don't free faces while there might be
      desired matrices pending which reference these faces.  */
-  if (face_change && !inhibit_free_realized_faces)
+  if (!inhibit_free_realized_faces)
     {
-      face_change = false;
-      free_all_realized_faces (Qnil);
+      if (face_change)
+       {
+         face_change = false;
+         free_all_realized_faces (Qnil);
+       }
+      else if (XFRAME (w->frame)->face_change)
+       {
+         XFRAME (w->frame)->face_change = 0;
+         free_all_realized_faces (w->frame);
+       }
     }
 
   /* Perhaps remap BASE_FACE_ID to a user-specified alternative.  */
@@ -4014,21 +4022,26 @@ face_before_or_after_it_pos (struct it *it, bool 
before_p)
              /* With bidi iteration, the character before the current
                 in the visual order cannot be found by simple
                 iteration, because "reverse" reordering is not
-                supported.  Instead, we need to use the move_it_*
-                family of functions.  */
+                supported.  Instead, we need to start from the string
+                beginning and go all the way to the current string
+                position, remembering the previous position.  */
              /* Ignore face changes before the first visible
                 character on this display line.  */
              if (it->current_x <= it->first_visible_x)
                return it->face_id;
              SAVE_IT (it_copy, *it, it_copy_data);
-             /* Implementation note: Since move_it_in_display_line
-                works in the iterator geometry, and thinks the first
-                character is always the leftmost, even in R2L lines,
-                we don't need to distinguish between the R2L and L2R
-                cases here.  */
-             move_it_in_display_line (&it_copy, SCHARS (it_copy.string),
-                                      it_copy.current_x - 1, MOVE_TO_X);
-             charpos = IT_STRING_CHARPOS (it_copy);
+             IT_STRING_CHARPOS (it_copy) = 0;
+             bidi_init_it (0, 0, FRAME_WINDOW_P (it_copy.f), &it_copy.bidi_it);
+
+             do
+               {
+                 charpos = IT_STRING_CHARPOS (it_copy);
+                 if (charpos >= SCHARS (it->string))
+                   break;
+                 bidi_move_to_visually_next (&it_copy.bidi_it);
+               }
+             while (IT_STRING_CHARPOS (it_copy) != IT_STRING_CHARPOS (*it));
+
              RESTORE_IT (it, it, it_copy_data);
            }
          else
@@ -4108,11 +4121,15 @@ face_before_or_after_it_pos (struct it *it, bool 
before_p)
        {
          if (before_p)
            {
+             int current_x;
+
              /* With bidi iteration, the character before the current
                 in the visual order cannot be found by simple
                 iteration, because "reverse" reordering is not
                 supported.  Instead, we need to use the move_it_*
-                family of functions.  */
+                family of functions, and move to the previous
+                character starting from the beginning of the visual
+                line.  */
              /* Ignore face changes before the first visible
                 character on this display line.  */
              if (it->current_x <= it->first_visible_x)
@@ -4123,8 +4140,9 @@ face_before_or_after_it_pos (struct it *it, bool before_p)
                 character is always the leftmost, even in R2L lines,
                 we don't need to distinguish between the R2L and L2R
                 cases here.  */
-             move_it_in_display_line (&it_copy, ZV,
-                                      it_copy.current_x - 1, MOVE_TO_X);
+             current_x = it_copy.current_x;
+             move_it_vertically_backward (&it_copy, 0);
+             move_it_in_display_line (&it_copy, ZV, current_x - 1, MOVE_TO_X);
              pos = it_copy.current.pos;
              RESTORE_IT (it, it, it_copy_data);
            }
@@ -5895,6 +5913,13 @@ push_it (struct it *it, struct text_pos *position)
     case GET_FROM_STRETCH:
       p->u.stretch.object = it->object;
       break;
+    case GET_FROM_BUFFER:
+    case GET_FROM_DISPLAY_VECTOR:
+    case GET_FROM_STRING:
+    case GET_FROM_C_STRING:
+      break;
+    default:
+      emacs_abort ();
     }
   p->position = position ? *position : it->position;
   p->current = it->current;
@@ -6017,6 +6042,11 @@ pop_it (struct it *it)
          it->method = GET_FROM_BUFFER;
          it->object = it->w->contents;
        }
+      break;
+    case GET_FROM_C_STRING:
+      break;
+    default:
+      emacs_abort ();
     }
   it->end_charpos = p->end_charpos;
   it->string_nchars = p->string_nchars;
@@ -11119,11 +11149,10 @@ clear_garbaged_frames (void)
 }
 
 
-/* Redisplay the echo area of the selected frame.  If UPDATE_FRAME_P,
-   update selected_frame.  Value is true if the mini-windows height
-   has been changed.  */
+/* Redisplay the echo area of the selected frame.  If UPDATE_FRAME_P, update
+   selected_frame.  */
 
-static bool
+static void
 echo_area_display (bool update_frame_p)
 {
   Lisp_Object mini_window;
@@ -11138,14 +11167,14 @@ echo_area_display (bool update_frame_p)
 
   /* Don't display if frame is invisible or not yet initialized.  */
   if (!FRAME_VISIBLE_P (f) || !f->glyphs_initialized_p)
-    return false;
+    return;
 
 #ifdef HAVE_WINDOW_SYSTEM
   /* When Emacs starts, selected_frame may be the initial terminal
      frame.  If we let this through, a message would be displayed on
      the terminal.  */
   if (FRAME_INITIAL_P (XFRAME (selected_frame)))
-    return false;
+    return;
 #endif /* HAVE_WINDOW_SYSTEM */
 
   /* Redraw garbaged frames.  */
@@ -11183,7 +11212,7 @@ echo_area_display (bool update_frame_p)
                 pending input.  */
              ptrdiff_t count = SPECPDL_INDEX ();
              specbind (Qredisplay_dont_pause, Qt);
-             windows_or_buffers_changed = 44;
+             fset_redisplay (f);
              redisplay_internal ();
              unbind_to (count, Qnil);
            }
@@ -11219,7 +11248,16 @@ echo_area_display (bool update_frame_p)
   if (EQ (mini_window, selected_window))
     CHARPOS (this_line_start_pos) = 0;
 
-  return window_height_changed_p;
+  if (window_height_changed_p)
+    {
+      fset_redisplay (f);
+
+      /* If window configuration was changed, frames may have been
+        marked garbaged.  Clear them or we will experience
+        surprises wrt scrolling.
+        FIXME: How/why/when?  */
+      clear_garbaged_frames ();
+    }
 }
 
 /* True if W's buffer was changed but not saved.  */
@@ -13445,7 +13483,7 @@ redisplay_internal (void)
             echo-area doesn't show through.  */
          && !MINI_WINDOW_P (XWINDOW (selected_window))))
     {
-      bool window_height_changed_p = echo_area_display (false);
+      echo_area_display (false);
 
       if (message_cleared_p)
        update_miniwindow_p = true;
@@ -13458,16 +13496,6 @@ redisplay_internal (void)
         the echo area.  */
       if (!display_last_displayed_message_p)
        message_cleared_p = false;
-
-      if (window_height_changed_p)
-       {
-         windows_or_buffers_changed = 50;
-
-         /* If window configuration was changed, frames may have been
-            marked garbaged.  Clear them or we will experience
-            surprises wrt scrolling.  */
-         clear_garbaged_frames ();
-       }
     }
   else if (EQ (selected_window, minibuf_window)
           && (current_buffer->clip_changed || window_outdated (w))
@@ -13521,6 +13549,7 @@ redisplay_internal (void)
       && FRAME_VISIBLE_P (XFRAME (w->frame))
       && !FRAME_OBSCURED_P (XFRAME (w->frame))
       && !XFRAME (w->frame)->cursor_type_changed
+      && !XFRAME (w->frame)->face_change
       /* Make sure recorded data applies to current buffer, etc.  */
       && this_line_buffer == current_buffer
       && match_p
@@ -13737,18 +13766,6 @@ redisplay_internal (void)
            continue;
 
        retry_frame:
-
-#if defined (HAVE_WINDOW_SYSTEM) && !defined (USE_GTK) && !defined (HAVE_NS)
-         /* Redisplay internal tool bar if this is the first time so we
-            can adjust the frame height right now, if necessary.  */
-         if (!f->tool_bar_redisplayed_once)
-           {
-             if (redisplay_tool_bar (f))
-               adjust_frame_glyphs (f);
-             f->tool_bar_redisplayed_once = true;
-           }
-#endif
-
          if (FRAME_WINDOW_P (f) || FRAME_TERMCAP_P (f) || f == sf)
            {
              bool gcscrollbars
@@ -15879,6 +15896,7 @@ redisplay_window (Lisp_Object window, bool 
just_this_one_p)
       && REDISPLAY_SOME_P ()
       && !w->redisplay
       && !w->update_mode_line
+      && !f->face_change
       && !f->redisplay
       && !buffer->text->redisplay
       && BUF_PT (buffer) == w->last_point)
@@ -21040,7 +21058,7 @@ window-specific overlays, which can affect the results.
 
 Strong directional characters `L', `R', and `AL' can have their
 intrinsic directionality overridden by directional override
-control characters RLO \(u+202e) and LRO \(u+202d).  See the
+control characters RLO (u+202e) and LRO (u+202d).  See the
 function `get-char-code-property' for a way to inquire about
 the `bidi-class' property of a character.  */)
   (Lisp_Object from, Lisp_Object to, Lisp_Object object)
@@ -24065,7 +24083,7 @@ calc_pixel_width_or_height (double *res, struct it *it, 
Lisp_Object prop,
        prop = Qnil;
     }
 
-  if (INTEGERP (prop) || FLOATP (prop))
+  if (NUMBERP (prop))
     {
       int base_unit = (width_p
                       ? FRAME_COLUMN_WIDTH (it->f)
@@ -24117,7 +24135,7 @@ calc_pixel_width_or_height (double *res, struct it *it, 
Lisp_Object prop,
            car = Qnil;
        }
 
-      if (INTEGERP (car) || FLOATP (car))
+      if (NUMBERP (car))
        {
          double fact;
          pixels = XFLOATINT (car);
@@ -25948,9 +25966,7 @@ produce_stretch_glyph (struct it *it)
       zero_width_ok_p = true;
       width = (int)tem;
     }
-#ifdef HAVE_WINDOW_SYSTEM
-  else if (FRAME_WINDOW_P (it->f)
-          && (prop = Fplist_get (plist, QCrelative_width), NUMVAL (prop) > 0))
+  else if (prop = Fplist_get (plist, QCrelative_width), NUMVAL (prop) > 0)
     {
       /* Relative width `:relative-width FACTOR' specified and valid.
         Compute the width of the characters having the `glyph'
@@ -25970,10 +25986,9 @@ produce_stretch_glyph (struct it *it)
 
       it2.glyph_row = NULL;
       it2.what = IT_CHARACTER;
-      x_produce_glyphs (&it2);
+      PRODUCE_GLYPHS (&it2);
       width = NUMVAL (prop) * it2.pixel_width;
     }
-#endif /* HAVE_WINDOW_SYSTEM */
   else if ((prop = Fplist_get (plist, QCalign_to), !NILP (prop))
           && calc_pixel_width_or_height (&tem, it, prop, font, true,
                                          &align_to))
@@ -29064,7 +29079,7 @@ on_hot_spot_p (Lisp_Object hot_spot, int x, int y)
       Lisp_Object lr, lx0, ly0;
       if (CONSP (circ)
          && CONSP (XCAR (circ))
-         && (lr = XCDR (circ), INTEGERP (lr) || FLOATP (lr))
+         && (lr = XCDR (circ), NUMBERP (lr))
          && (lx0 = XCAR (XCAR (circ)), INTEGERP (lx0))
          && (ly0 = XCDR (XCAR (circ)), INTEGERP (ly0)))
        {
@@ -30996,18 +31011,18 @@ This variable is not guaranteed to be accurate except 
while processing
 
   DEFVAR_LISP ("frame-title-format", Vframe_title_format,
     doc: /* Template for displaying the title bar of visible frames.
-\(Assuming the window manager supports this feature.)
+(Assuming the window manager supports this feature.)
 
 This variable has the same structure as `mode-line-format', except that
 the %c and %l constructs are ignored.  It is used only on frames for
-which no explicit name has been set \(see `modify-frame-parameters').  */);
+which no explicit name has been set (see `modify-frame-parameters').  */);
 
   DEFVAR_LISP ("icon-title-format", Vicon_title_format,
     doc: /* Template for displaying the title bar of an iconified frame.
-\(Assuming the window manager supports this feature.)
+(Assuming the window manager supports this feature.)
 This variable has the same structure as `mode-line-format' (which see),
 and is used only on frames for which no explicit name has been set
-\(see `modify-frame-parameters').  */);
+(see `modify-frame-parameters').  */);
   Vicon_title_format
     = Vframe_title_format
     = listn (CONSTYPE_PURE, 3,
@@ -31066,9 +31081,9 @@ A positive number means delay autoselection by that 
many seconds: a
 window is autoselected only after the mouse has remained in that
 window for the duration of the delay.
 A negative number has a similar effect, but causes windows to be
-autoselected only after the mouse has stopped moving.  \(Because of
+autoselected only after the mouse has stopped moving.  (Because of
 the way Emacs compares mouse events, you will occasionally wait twice
-that time before the window gets selected.\)
+that time before the window gets selected.)
 Any other value means to autoselect window instantaneously when the
 mouse pointer enters it.
 
diff --git a/src/xfaces.c b/src/xfaces.c
index 0303249..40713f1 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -687,7 +687,6 @@ clear_face_cache (bool clear_fonts_p)
 #endif /* HAVE_WINDOW_SYSTEM */
 }
 
-
 DEFUN ("clear-face-cache", Fclear_face_cache, Sclear_face_cache, 0, 1, 0,
        doc: /* Clear face caches on all frames.
 Optional THOROUGHLY non-nil means try to free unused fonts, too.  */)
@@ -709,10 +708,10 @@ Optional THOROUGHLY non-nil means try to free unused 
fonts, too.  */)
 DEFUN ("bitmap-spec-p", Fbitmap_spec_p, Sbitmap_spec_p, 1, 1, 0,
        doc: /* Value is non-nil if OBJECT is a valid bitmap specification.
 A bitmap specification is either a string, a file name, or a list
-\(WIDTH HEIGHT DATA) where WIDTH is the pixel width of the bitmap,
+(WIDTH HEIGHT DATA) where WIDTH is the pixel width of the bitmap,
 HEIGHT is its height, and DATA is a string containing the bits of
 the pixmap.  Bits are stored row by row, each row occupies
-\(WIDTH + 7)/8 bytes.  */)
+(WIDTH + 7)/8 bytes.  */)
   (Lisp_Object object)
 {
   bool pixmap_p = false;
@@ -1669,8 +1668,7 @@ check_lface_attrs (Lisp_Object attrs[LFACE_VECTOR_SIZE])
           || SYMBOLP (attrs[LFACE_SWIDTH_INDEX]));
   eassert (UNSPECIFIEDP (attrs[LFACE_HEIGHT_INDEX])
           || IGNORE_DEFFACE_P (attrs[LFACE_HEIGHT_INDEX])
-          || INTEGERP (attrs[LFACE_HEIGHT_INDEX])
-          || FLOATP (attrs[LFACE_HEIGHT_INDEX])
+          || NUMBERP (attrs[LFACE_HEIGHT_INDEX])
           || FUNCTIONP (attrs[LFACE_HEIGHT_INDEX]));
   eassert (UNSPECIFIEDP (attrs[LFACE_WEIGHT_INDEX])
           || IGNORE_DEFFACE_P (attrs[LFACE_WEIGHT_INDEX])
@@ -2529,7 +2527,10 @@ Value is a vector of face attributes.  */)
      free realized faces.  */
   if (NILP (Fget (face, Qface_no_inherit)))
     {
-      face_change = true;
+      if (f)
+       f->face_change = 1;
+      else
+       face_change = true;
       windows_or_buffers_changed = 54;
     }
 
@@ -2577,6 +2578,7 @@ The value is TO.  */)
   (Lisp_Object from, Lisp_Object to, Lisp_Object frame, Lisp_Object new_frame)
 {
   Lisp_Object lface, copy;
+  struct frame *f;
 
   CHECK_SYMBOL (from);
   CHECK_SYMBOL (to);
@@ -2587,6 +2589,7 @@ The value is TO.  */)
         strings etc. because 20.2 didn't do it either.  */
       lface = lface_from_face_name (NULL, from, true);
       copy = Finternal_make_lisp_face (to, Qnil);
+      f = NULL;
     }
   else
     {
@@ -2597,6 +2600,7 @@ The value is TO.  */)
       CHECK_LIVE_FRAME (new_frame);
       lface = lface_from_face_name (XFRAME (frame), from, true);
       copy = Finternal_make_lisp_face (to, new_frame);
+      f = XFRAME (new_frame);
     }
 
   vcopy (copy, 0, XVECTOR (lface)->contents, LFACE_VECTOR_SIZE);
@@ -2608,7 +2612,10 @@ The value is TO.  */)
      free realized faces.  */
   if (NILP (Fget (to, Qface_no_inherit)))
     {
-      face_change = true;
+      if (f)
+       f->face_change = 1;
+      else
+       face_change = true;
       windows_or_buffers_changed = 55;
     }
 
@@ -2631,6 +2638,7 @@ FRAME 0 means change the face on all frames, and change 
the default
   /* Set one of enum font_property_index (> 0) if ATTR is one of
      font-related attributes other than QCfont and QCfontset.  */
   enum font_property_index prop_index = 0;
+  struct frame *f;
 
   CHECK_SYMBOL (face);
   CHECK_SYMBOL (attr);
@@ -2651,6 +2659,7 @@ FRAME 0 means change the face on all frames, and change 
the default
   /* Set lface to the Lisp attribute vector of FACE.  */
   if (EQ (frame, Qt))
     {
+      f = NULL;
       lface = lface_from_face_name (NULL, face, true);
 
       /* When updating face-new-frame-defaults, we put :ignore-defface
@@ -2666,9 +2675,10 @@ FRAME 0 means change the face on all frames, and change 
the default
     {
       if (NILP (frame))
        frame = selected_frame;
+      f = XFRAME (frame);
 
       CHECK_LIVE_FRAME (frame);
-      lface = lface_from_face_name (XFRAME (frame), face, false);
+      lface = lface_from_face_name (f, face, false);
 
       /* If a frame-local face doesn't exist yet, create one.  */
       if (NILP (lface))
@@ -2990,11 +3000,11 @@ FRAME 0 means change the face on all frames, and change 
the default
   else if (EQ (attr, QCfont))
     {
 #ifdef HAVE_WINDOW_SYSTEM
-      if (EQ (frame, Qt) || FRAME_WINDOW_P (XFRAME (frame)))
+      if (EQ (frame, Qt) || FRAME_WINDOW_P (f))
        {
          if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
            {
-             struct frame *f;
+             struct frame *f1;
 
              old_value = LFACE_FONT (lface);
              if (! FONTP (value))
@@ -3014,28 +3024,29 @@ FRAME 0 means change the face on all frames, and change 
the default
                    signal_error ("Invalid font or font-spec", value);
                }
              if (EQ (frame, Qt))
-               f = XFRAME (selected_frame);
+               f1 = XFRAME (selected_frame);
              else
-               f = XFRAME (frame);
+               f1 = XFRAME (frame);
 
               /* FIXME:
                  If frame is t, and selected frame is a tty frame, the font
                  can't be realized.  An improvement would be to loop over 
frames
                  for a non-tty frame and use that.  See discussion in 
Bug#18573.
                  For a daemon, frame may be an initial frame (Bug#18869).  */
-              if (FRAME_WINDOW_P (f))
+              if (FRAME_WINDOW_P (f1))
                 {
                   if (! FONT_OBJECT_P (value))
                     {
                       Lisp_Object *attrs = XVECTOR (lface)->contents;
                       Lisp_Object font_object;
 
-                      font_object = font_load_for_lface (f, attrs, value);
+                      font_object = font_load_for_lface (f1, attrs, value);
                       if (NILP (font_object))
                         signal_error ("Font not available", value);
                       value = font_object;
                     }
-                  set_lface_from_font (f, lface, value, true);
+                  set_lface_from_font (f1, lface, value, true);
+                 f1->face_change = 1;
                 }
            }
          else
@@ -3046,7 +3057,7 @@ FRAME 0 means change the face on all frames, and change 
the default
   else if (EQ (attr, QCfontset))
     {
 #ifdef HAVE_WINDOW_SYSTEM
-      if (EQ (frame, Qt) || FRAME_WINDOW_P (XFRAME (frame)))
+      if (EQ (frame, Qt) || FRAME_WINDOW_P (f))
        {
          Lisp_Object tmp;
 
@@ -3108,7 +3119,7 @@ FRAME 0 means change the face on all frames, and change 
the default
       && NILP (Fget (face, Qface_no_inherit))
       && NILP (Fequal (old_value, value)))
     {
-      face_change = true;
+      f->face_change = true;
       windows_or_buffers_changed = 56;
     }
 
@@ -3281,7 +3292,7 @@ update_face_from_frame_parameter (struct frame *f, 
Lisp_Object param,
   if (!NILP (face)
       && NILP (Fget (face, Qface_no_inherit)))
     {
-      face_change = true;
+      f->face_change = true;
       windows_or_buffers_changed = 57;
     }
 }
@@ -4186,7 +4197,7 @@ free_realized_faces (struct face_cache *c)
       if (WINDOWP (f->root_window))
        {
          clear_current_matrices (f);
-         windows_or_buffers_changed = 58;
+         fset_redisplay (f);
        }
 
       unblock_input ();
@@ -4206,6 +4217,7 @@ free_all_realized_faces (Lisp_Object frame)
       Lisp_Object rest;
       FOR_EACH_FRAME (rest, frame)
        free_realized_faces (FRAME_FACE_CACHE (XFRAME (frame)));
+      windows_or_buffers_changed = 58;
     }
   else
     free_realized_faces (FRAME_FACE_CACHE (XFRAME (frame)));
@@ -4631,8 +4643,8 @@ DEFUN ("face-attributes-as-vector", 
Fface_attributes_as_vector,
    that a face containing all the attributes in ATTRS, when merged with the
    default face for display, can be represented in a way that's
 
-    \(1) different in appearance than the default face, and
-    \(2) `close in spirit' to what the attributes specify, if not exact.  */
+    (1) different in appearance than the default face, and
+    (2) `close in spirit' to what the attributes specify, if not exact.  */
 
 static bool
 x_supports_face_attributes_p (struct frame *f,
@@ -4731,8 +4743,8 @@ x_supports_face_attributes_p (struct frame *f,
    that a face containing all the attributes in ATTRS, when merged
    with the default face for display, can be represented in a way that's
 
-    \(1) different in appearance than the default face, and
-    \(2) `close in spirit' to what the attributes specify, if not exact.
+    (1) different in appearance than the default face, and
+    (2) `close in spirit' to what the attributes specify, if not exact.
 
    Point (2) implies that a `:weight black' attribute will be satisfied
    by any terminal that can display bold, and a `:foreground "yellow"' as
@@ -4914,8 +4926,8 @@ The definition of `supported' is somewhat heuristic, but 
basically means
 that a face containing all the attributes in ATTRIBUTES, when merged
 with the default face for display, can be represented in a way that's
 
- \(1) different in appearance than the default face, and
- \(2) `close in spirit' to what the attributes specify, if not exact.
+ (1) different in appearance than the default face, and
+ (2) `close in spirit' to what the attributes specify, if not exact.
 
 Point (2) implies that a `:weight black' attribute will be satisfied by
 any display that can display bold, and a `:foreground \"yellow\"' as long
@@ -6521,7 +6533,7 @@ changing this variable for it to take effect.  */);
 Each element is a cons (FONT-PATTERN . RESCALE-RATIO), where
 FONT-PATTERN is a font-spec or a regular expression matching a font name, and
 RESCALE-RATIO is a floating point number to specify how much larger
-\(or smaller) font we should use.  For instance, if a face requests
+(or smaller) font we should use.  For instance, if a face requests
 a font of 10 point, we actually use a font of 10 * RESCALE-RATIO point.  */);
   Vface_font_rescale_alist = Qnil;
 
diff --git a/src/xfns.c b/src/xfns.c
index 0079e7b..d6a3d76 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -1189,10 +1189,8 @@ x_change_tool_bar_height (struct frame *f, int height)
   f->n_tool_bar_rows = 0;
 
   adjust_frame_size (f, -1, -1,
-                    ((!f->tool_bar_redisplayed_once
-                      && (NILP (fullscreen =
-                                get_frame_param (f, Qfullscreen))
-                          || EQ (fullscreen, Qfullwidth))) ? 1
+                    ((NILP (fullscreen = get_frame_param (f, Qfullscreen))
+                      || EQ (fullscreen, Qfullwidth)) ? 1
                      : (old_height == 0 || height == 0) ? 2
                      : 4),
                     false, Qtool_bar_lines);
@@ -3446,8 +3444,8 @@ x_focus_frame (struct frame *f)
 
 
 DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
-       doc: /* Internal function called by `color-defined-p', which see
-.\(Note that the Nextstep version of this function ignores FRAME.)  */)
+       doc: /* Internal function called by `color-defined-p', which see.
+(Note that the Nextstep version of this function ignores FRAME.)  */)
   (Lisp_Object color, Lisp_Object frame)
 {
   XColor foo;
@@ -3614,7 +3612,7 @@ If omitted or nil, that stands for the selected frame's 
display.  */)
 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
        doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
 
-\(Labeling every distributor as a "vendor" embodies the false assumption
+(Labeling every distributor as a "vendor" embodies the false assumption
 that operating systems cannot be developed and distributed noncommercially.)
 The optional argument TERMINAL specifies which display to ask about.
 
@@ -4712,7 +4710,7 @@ DISPLAY is the name of the display to connect to.
 Optional second arg XRM-STRING is a string of resources in xrdb format.
 If the optional third arg MUST-SUCCEED is non-nil,
 terminate Emacs if we can't open the connection.
-\(In the Nextstep version, the last two arguments are currently ignored.)  */)
+(In the Nextstep version, the last two arguments are currently ignored.)  */)
   (Lisp_Object display, Lisp_Object xrm_string, Lisp_Object must_succeed)
 {
   char *xrm_option;
diff --git a/src/xselect.c b/src/xselect.c
index 94a5584..9aaa10c 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -1915,7 +1915,7 @@ DEFUN ("x-own-selection-internal", 
Fx_own_selection_internal,
        Sx_own_selection_internal, 2, 3, 0,
        doc: /* Assert an X selection of type SELECTION and value VALUE.
 SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
-\(Those are literal upper-case symbol names, since that's what X expects.)
+(Those are literal upper-case symbol names, since that's what X expects.)
 VALUE is typically a string, or a cons of two markers, but may be
 anything that the functions on `selection-converter-alist' know about.
 
@@ -1944,7 +1944,7 @@ DEFUN ("x-get-selection-internal", 
Fx_get_selection_internal,
        Sx_get_selection_internal, 2, 4, 0,
        doc: /* Return text selected from some X window.
 SELECTION-SYMBOL is typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
-\(Those are literal upper-case symbol names, since that's what X expects.)
+(Those are literal upper-case symbol names, since that's what X expects.)
 TARGET-TYPE is the type of data desired, typically `STRING'.
 
 TIME-STAMP is the time to use in the XConvertSelection call for foreign
@@ -2048,7 +2048,7 @@ DEFUN ("x-selection-owner-p", Fx_selection_owner_p, 
Sx_selection_owner_p,
        doc: /* Whether the current Emacs process owns the given X Selection.
 The arg should be the name of the selection in question, typically one of
 the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
-\(Those are literal upper-case symbol names, since that's what X expects.)
+(Those are literal upper-case symbol names, since that's what X expects.)
 For convenience, the symbol nil is the same as `PRIMARY',
 and t is the same as `SECONDARY'.
 
@@ -2271,7 +2271,7 @@ x_fill_property_data (Display *dpy, Lisp_Object data, 
void *ret, int format)
     {
       Lisp_Object o = XCAR (iter);
 
-      if (INTEGERP (o) || FLOATP (o) || CONSP (o))
+      if (NUMBERP (o) || CONSP (o))
         {
           if (CONSP (o)
              && RANGED_INTEGERP (X_LONG_MIN >> 16, XCAR (o), X_LONG_MAX >> 16)
@@ -2547,7 +2547,7 @@ x_send_client_event (Lisp_Object display, Lisp_Object 
dest, Lisp_Object from,
       else
         error ("DEST as a string must be one of PointerWindow or InputFocus");
     }
-  else if (INTEGERP (dest) || FLOATP (dest) || CONSP (dest))
+  else if (NUMBERP (dest) || CONSP (dest))
     CONS_TO_INTEGER (dest, Window, wdest);
   else
     error ("DEST must be a frame, nil, string, number or cons");
@@ -2623,7 +2623,7 @@ and the local selection value (whatever was given to
 `x-own-selection-internal').
 
 The function should return the value to send to the X server
-\(typically a string).  A return value of nil
+(typically a string).  A return value of nil
 means that the conversion could not be done.
 A return value which is the symbol `NULL'
 means that a side-effect was executed,
@@ -2632,10 +2632,10 @@ and there is no meaningful selection value.  */);
 
   DEFVAR_LISP ("x-lost-selection-functions", Vx_lost_selection_functions,
               doc: /* A list of functions to be called when Emacs loses an X 
selection.
-\(This happens when some other X client makes its own selection
+(This happens when some other X client makes its own selection
 or when a Lisp program explicitly clears the selection.)
 The functions are called with one argument, the selection type
-\(a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD').  */);
+(a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD').  */);
   Vx_lost_selection_functions = Qnil;
 
   DEFVAR_LISP ("x-sent-selection-functions", Vx_sent_selection_functions,
diff --git a/src/xterm.c b/src/xterm.c
index 9ee76e9..dd54552 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -575,7 +575,7 @@ x_cr_export_frames (Lisp_Object frames, 
cairo_surface_type_t surface_type)
   cairo_t *cr;
   int width, height;
   void (*surface_set_size_func) (cairo_surface_t *, double, double) = NULL;
-  Lisp_Object acc = Qnil, args[2];
+  Lisp_Object acc = Qnil;
   int count = SPECPDL_INDEX ();
 
   Fredisplay (Qt);
@@ -659,9 +659,7 @@ x_cr_export_frames (Lisp_Object frames, 
cairo_surface_type_t surface_type)
 #endif
   unbind_to (count, Qnil);
 
-  args[0] = intern ("concat");
-  args[1] = Fnreverse (acc);
-  return Fapply (2, args);
+  return CALLN (Fapply, intern ("concat"), Fnreverse (acc));
 }
 
 #endif /* USE_CAIRO */
@@ -5407,6 +5405,8 @@ xg_scroll_callback (GtkRange     *range,
              ? scroll_bar_after_handle : scroll_bar_below_handle);
       bar->dragging = -1;
       break;
+    default:
+      break;
     }
 
   if (part != scroll_bar_nowhere)
@@ -10193,6 +10193,9 @@ x_check_fullscreen (struct frame *f)
         case FULLSCREEN_HEIGHT:
           lval = Qfullheight;
           height = x_display_pixel_height (dpyinfo);
+         break;
+       default:
+         emacs_abort ();
         }
 
       frame_size_history_add
diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in
index 59a8866..41f54f8 100644
--- a/test/automated/Makefile.in
+++ b/test/automated/Makefile.in
@@ -86,7 +86,7 @@ WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo 
$$stat: $@
 ## -l ./basename treats basename as a literal file (it would be nice
 ## to change this; bug#17848 - if that gets done, this can be simplified).
 ##
-## Beware: it approximates `no-byte-compile', so watch out for false-positives!
+## Beware: it approximates 'no-byte-compile', so watch out for false-positives!
 %.log: ${srcdir}/%.el
        @if grep '^;.*no-byte-compile: t' $< > /dev/null; then \
          loadfile=$<; \
diff --git a/test/automated/auto-revert-tests.el 
b/test/automated/auto-revert-tests.el
index 204e03d..86184d6 100644
--- a/test/automated/auto-revert-tests.el
+++ b/test/automated/auto-revert-tests.el
@@ -28,7 +28,18 @@
 (setq auto-revert-notify-exclude-dir-regexp "nothing-to-be-excluded"
       auto-revert-stop-on-user-input nil)
 
-(defvar auto-revert--timeout 10)
+(defconst auto-revert--timeout 10
+  "Time to wait until a message appears in the *Messages* buffer.")
+
+(defun auto-revert--wait-for-revert (buffer)
+  "Wait until the *Messages* buffer reports reversion of BUFFER."
+  (with-timeout (auto-revert--timeout nil)
+    (with-current-buffer "*Messages*"
+      (while
+          (null (string-match
+                 (format-message "Reverting buffer `%s'." (buffer-name buffer))
+                 (buffer-string)))
+        (read-event nil nil 0.1)))))
 
 (ert-deftest auto-revert-test00-auto-revert-mode ()
   "Check autorevert for a file."
@@ -57,13 +68,7 @@
             (write-region "another text" nil tmpfile nil 'no-message)
 
            ;; Check, that the buffer has been reverted.
-            (with-timeout (auto-revert--timeout nil)
-              (with-current-buffer "*Messages*"
-                (while
-                    (null (string-match
-                           (format "Reverting buffer `%s'." (buffer-name buf))
-                           (buffer-string)))
-                  (read-event nil nil 0.1))))
+            (auto-revert--wait-for-revert buf)
             (should (string-match "another text" (buffer-string)))
 
             ;; When the buffer is modified, it shall not be reverted.
@@ -73,14 +78,8 @@
            (sleep-for 1)
             (write-region "any text" nil tmpfile nil 'no-message)
 
-           ;; Check, whether the buffer has been reverted.
-            (with-timeout (auto-revert--timeout nil)
-              (with-current-buffer "*Messages*"
-                (while
-                    (null (string-match
-                           (format "Reverting buffer `%s'." (buffer-name buf))
-                           (buffer-string)))
-                  (read-event nil nil 0.1))))
+           ;; Check, that the buffer hasn't been reverted.
+            (auto-revert--wait-for-revert buf)
             (should-not (string-match "any text" (buffer-string)))))
 
       ;; Exit.
@@ -119,13 +118,7 @@
             (write-region "another text" nil tmpfile 'append 'no-message)
 
            ;; Check, that the buffer has been reverted.
-            (with-timeout (auto-revert--timeout nil)
-              (with-current-buffer "*Messages*"
-                (while
-                    (null (string-match
-                           (format "Reverting buffer `%s'." (buffer-name buf))
-                           (buffer-string)))
-                  (read-event nil nil 0.1))))
+            (auto-revert--wait-for-revert buf)
             (should
              (string-match "modified text\nanother text" (buffer-string)))))
 
@@ -162,16 +155,9 @@
             (delete-file tmpfile)
 
            ;; Check, that the buffer has been reverted.
-            (with-timeout (auto-revert--timeout nil)
-              (with-current-buffer "*Messages*"
-                (while
-                    (null (string-match
-                           (format "Reverting buffer `%s'." (buffer-name buf))
-                           (buffer-string)))
-                  (read-event nil nil 0.1))))
-            (should
-             (null
-              (string-match name (substring-no-properties (buffer-string)))))
+            (auto-revert--wait-for-revert buf)
+            (should-not
+             (string-match name (substring-no-properties (buffer-string))))
 
             ;; Make dired buffer modified.  Check, that the buffer has
             ;; been still reverted.
@@ -181,14 +167,8 @@
            (sleep-for 1)
             (write-region "any text" nil tmpfile nil 'no-message)
 
-           ;; Check, that the buffer hasn't been reverted.
-            (with-timeout (auto-revert--timeout nil)
-              (with-current-buffer "*Messages*"
-                (while
-                    (null (string-match
-                           (format "Reverting buffer `%s'." (buffer-name buf))
-                           (buffer-string)))
-                  (read-event nil nil 0.1))))
+           ;; Check, that the buffer has been reverted.
+            (auto-revert--wait-for-revert buf)
             (should
              (string-match name (substring-no-properties (buffer-string))))))
 
diff --git a/test/automated/compile-tests.el b/test/automated/compile-tests.el
index 0c383f7..0974a78 100644
--- a/test/automated/compile-tests.el
+++ b/test/automated/compile-tests.el
@@ -228,10 +228,10 @@
     ("1>test_main.cpp(29): error C4430: missing type specifier - int assumed. 
Note: C++ does not support default-int"
      3 nil 29 "test_main.cpp")
     ;; watcom
-    ("..\src\ctrl\lister.c(109): Error! E1009: Expecting ';' but found '{'"
-     1 nil 109 "..\src\ctrl\lister.c")
-    ("..\src\ctrl\lister.c(120): Warning! W201: Unreachable code"
-     1 nil 120 "..\src\ctrl\lister.c")
+    ("..\\src\\ctrl\\lister.c(109): Error! E1009: Expecting ';' but found '{'"
+     1 nil 109 "..\\src\\ctrl\\lister.c")
+    ("..\\src\\ctrl\\lister.c(120): Warning! W201: Unreachable code"
+     1 nil 120 "..\\src\\ctrl\\lister.c")
     ;; oracle
     ("Semantic error at line 528, column 5, file erosacqdb.pc:"
      1 5 528 "erosacqdb.pc")
diff --git a/test/automated/elisp-mode-tests.el 
b/test/automated/elisp-mode-tests.el
index 7886b55..2f6675a 100644
--- a/test/automated/elisp-mode-tests.el
+++ b/test/automated/elisp-mode-tests.el
@@ -258,7 +258,7 @@ to (xref-elisp-test-descr-to-target xref)."
 (cl-defstruct (xref-elisp-root-type)
   slot-1)
 
-(cl-defgeneric xref-elisp-generic-no-methods ()
+(cl-defgeneric xref-elisp-generic-no-methods (arg1 arg2)
   "doc string generic no-methods"
   ;; No default implementation, no methods, but fboundp is true for
   ;; this symbol; it calls cl-no-applicable-method
@@ -269,44 +269,44 @@ to (xref-elisp-test-descr-to-target xref)."
 ;; causes the batch mode test to fail; the symbol shows up as
 ;; ‘this’. It passes in interactive tests, so I haven't been able to
 ;; track down the problem.
-(cl-defmethod xref-elisp-generic-no-default ((this xref-elisp-root-type))
+(cl-defmethod xref-elisp-generic-no-default ((this xref-elisp-root-type) arg2)
   "doc string generic no-default xref-elisp-root-type"
   "non-default for no-default")
 
 ;; defgeneric after defmethod in file to ensure the fallback search
 ;; method of just looking for the function name will fail.
-(cl-defgeneric xref-elisp-generic-no-default ()
+(cl-defgeneric xref-elisp-generic-no-default (arg1 arg2)
   "doc string generic no-default generic"
   ;; No default implementation; this function calls the cl-generic
   ;; dispatching code.
   )
 
-(cl-defgeneric xref-elisp-generic-co-located-default ()
+(cl-defgeneric xref-elisp-generic-co-located-default (arg1 arg2)
   "doc string generic co-located-default"
   "co-located default")
 
-(cl-defmethod xref-elisp-generic-co-located-default ((this 
xref-elisp-root-type))
+(cl-defmethod xref-elisp-generic-co-located-default ((this 
xref-elisp-root-type) arg2)
   "doc string generic co-located-default xref-elisp-root-type"
   "non-default for co-located-default")
 
-(cl-defgeneric xref-elisp-generic-separate-default ()
+(cl-defgeneric xref-elisp-generic-separate-default (arg1 arg2)
   "doc string generic separate-default"
   ;; default implementation provided separately
   )
 
-(cl-defmethod xref-elisp-generic-separate-default ()
+(cl-defmethod xref-elisp-generic-separate-default (arg1 arg2)
   "doc string generic separate-default default"
   "separate default")
 
-(cl-defmethod xref-elisp-generic-separate-default ((this xref-elisp-root-type))
+(cl-defmethod xref-elisp-generic-separate-default ((this xref-elisp-root-type) 
arg2)
   "doc string generic separate-default xref-elisp-root-type"
   "non-default for separate-default")
 
-(cl-defmethod xref-elisp-generic-implicit-generic ()
+(cl-defmethod xref-elisp-generic-implicit-generic (arg1 arg2)
   "doc string generic implicit-generic default"
   "default for implicit generic")
 
-(cl-defmethod xref-elisp-generic-implicit-generic ((this xref-elisp-root-type))
+(cl-defmethod xref-elisp-generic-implicit-generic ((this xref-elisp-root-type) 
arg2)
   "doc string generic implicit-generic xref-elisp-root-type"
   "non-default for implicit generic")
 
@@ -327,9 +327,9 @@ to (xref-elisp-test-descr-to-target xref)."
              (xref-make-elisp-location
               'xref-elisp-generic-no-default 'cl-defgeneric
               (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
-   (xref-make "(cl-defmethod xref-elisp-generic-no-default ((this 
xref-elisp-root-type)))"
+   (xref-make "(cl-defmethod xref-elisp-generic-no-default ((this 
xref-elisp-root-type) arg2))"
              (xref-make-elisp-location
-              '(xref-elisp-generic-no-default xref-elisp-root-type) 
'cl-defmethod
+              '(xref-elisp-generic-no-default xref-elisp-root-type t) 
'cl-defmethod
               (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
    ))
 
@@ -340,9 +340,9 @@ to (xref-elisp-test-descr-to-target xref)."
              (xref-make-elisp-location
               'xref-elisp-generic-co-located-default 'cl-defgeneric
               (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
-   (xref-make "(cl-defmethod xref-elisp-generic-co-located-default ((this 
xref-elisp-root-type)))"
+   (xref-make "(cl-defmethod xref-elisp-generic-co-located-default ((this 
xref-elisp-root-type) arg2))"
              (xref-make-elisp-location
-              '(xref-elisp-generic-co-located-default xref-elisp-root-type) 
'cl-defmethod
+              '(xref-elisp-generic-co-located-default xref-elisp-root-type t) 
'cl-defmethod
               (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
    ))
 
@@ -353,26 +353,26 @@ to (xref-elisp-test-descr-to-target xref)."
              (xref-make-elisp-location
               'xref-elisp-generic-separate-default 'cl-defgeneric
               (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
-   (xref-make "(cl-defmethod xref-elisp-generic-separate-default ())"
+   (xref-make "(cl-defmethod xref-elisp-generic-separate-default (arg1 arg2))"
               (xref-make-elisp-location
-               '(xref-elisp-generic-separate-default) 'cl-defmethod
+               '(xref-elisp-generic-separate-default t t) 'cl-defmethod
                (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
-   (xref-make "(cl-defmethod xref-elisp-generic-separate-default ((this 
xref-elisp-root-type)))"
+   (xref-make "(cl-defmethod xref-elisp-generic-separate-default ((this 
xref-elisp-root-type) arg2))"
              (xref-make-elisp-location
-              '(xref-elisp-generic-separate-default xref-elisp-root-type) 
'cl-defmethod
+              '(xref-elisp-generic-separate-default xref-elisp-root-type t) 
'cl-defmethod
               (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
    ))
 
 (xref-elisp-deftest find-defs-defgeneric-implicit-generic
   (elisp--xref-find-definitions 'xref-elisp-generic-implicit-generic)
   (list
-   (xref-make "(cl-defmethod xref-elisp-generic-implicit-generic ())"
+   (xref-make "(cl-defmethod xref-elisp-generic-implicit-generic (arg1 arg2))"
              (xref-make-elisp-location
-              '(xref-elisp-generic-implicit-generic) 'cl-defmethod
+              '(xref-elisp-generic-implicit-generic t t) 'cl-defmethod
               (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
-   (xref-make "(cl-defmethod xref-elisp-generic-implicit-generic ((this 
xref-elisp-root-type)))"
+   (xref-make "(cl-defmethod xref-elisp-generic-implicit-generic ((this 
xref-elisp-root-type) arg2))"
              (xref-make-elisp-location
-              '(xref-elisp-generic-implicit-generic xref-elisp-root-type) 
'cl-defmethod
+              '(xref-elisp-generic-implicit-generic xref-elisp-root-type t) 
'cl-defmethod
               (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
    ))
 
diff --git a/test/automated/ert-x-tests.el b/test/automated/ert-x-tests.el
index 11b7ed4..660a1cb 100644
--- a/test/automated/ert-x-tests.el
+++ b/test/automated/ert-x-tests.el
@@ -224,8 +224,8 @@
   "This test attempts to demonstrate that there is no way to
 force immediate truncation of the *Messages* buffer from Lisp
 \(and hence justifies the existence of
-`ert--force-message-log-buffer-truncation'\): The only way that
-came to my mind was \(message \"\"\), which doesn't have the
+`ert--force-message-log-buffer-truncation'): The only way that
+came to my mind was \(message \"\"), which doesn't have the
 desired effect."
   :tags '(:causes-redisplay)
   (ert-with-buffer-renamed ("*Messages*")
diff --git a/test/automated/file-notify-tests.el 
b/test/automated/file-notify-tests.el
index 11589b9..03946dd 100644
--- a/test/automated/file-notify-tests.el
+++ b/test/automated/file-notify-tests.el
@@ -1,4 +1,4 @@
-;;; file-notify-tests.el --- Tests of file notifications
+;;; file-notify-tests.el --- Tests of file notifications  -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
@@ -60,6 +60,35 @@
 (defvar file-notify--test-desc nil)
 (defvar file-notify--test-results nil)
 (defvar file-notify--test-event nil)
+(defvar file-notify--test-events nil)
+(defun file-notify--test-timeout ()
+  (if (file-remote-p temporary-file-directory) 6 3))
+
+(defun file-notify--test-cleanup ()
+  "Cleanup after a test."
+  (file-notify-rm-watch file-notify--test-desc)
+
+  (when (and file-notify--test-tmpfile
+             (file-exists-p file-notify--test-tmpfile))
+    (if (directory-name-p file-notify--test-tmpfile)
+        (delete-directory file-notify--test-tmpfile 'recursive)
+      (delete-file file-notify--test-tmpfile)))
+  (when (and file-notify--test-tmpfile1
+             (file-exists-p file-notify--test-tmpfile1))
+    (if (directory-name-p file-notify--test-tmpfile1)
+        (delete-directory file-notify--test-tmpfile1 'recursive)
+      (delete-file file-notify--test-tmpfile1)))
+  (when (file-remote-p temporary-file-directory)
+    (tramp-cleanup-connection
+     (tramp-dissect-file-name temporary-file-directory) nil 'keep-password))
+
+  (setq file-notify--test-tmpfile nil)
+  (setq file-notify--test-tmpfile1 nil)
+  (setq file-notify--test-desc nil)
+  (setq file-notify--test-results nil)
+  (setq file-notify--test-events nil)
+  (when file-notify--test-event
+    (error "file-notify--test-event should not be set but bound dynamically")))
 
 (setq password-cache-expiry nil
       tramp-verbose 0
@@ -116,10 +145,19 @@ being the result.")
 (ert-deftest file-notify-test00-availability ()
   "Test availability of `file-notify'."
   (skip-unless (file-notify--test-local-enabled))
+  ;; Report the native library which has been used.
+  (if (null (file-remote-p temporary-file-directory))
+      (message "Local library: `%s'" file-notify--library)
+    (message "Remote command: `%s'"
+             (replace-regexp-in-string
+              "<[[:digit:]]+>\\'" ""
+              (process-name (cdr file-notify--test-remote-enabled-checked)))))
   (should
    (setq file-notify--test-desc
          (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
-  (file-notify-rm-watch file-notify--test-desc))
+
+  ;; Cleanup.
+  (file-notify--test-cleanup))
 
 (file-notify--deftest-remote file-notify-test00-availability
   "Test availability of `file-notify' for remote files.")
@@ -157,7 +195,10 @@ being the result.")
   (should
    (equal (should-error
            (file-notify-add-watch temporary-file-directory '(change) 3))
-          '(wrong-type-argument 3))))
+          '(wrong-type-argument 3)))
+
+  ;; Cleanup.
+  (file-notify--test-cleanup))
 
 (file-notify--deftest-remote file-notify-test01-add-watch
   "Check `file-notify-add-watch' for remote files.")
@@ -166,7 +207,7 @@ being the result.")
   "Ert test function to be called by `file-notify--test-event-handler'.
 We cannot pass arguments, so we assume that `file-notify--test-event'
 is bound somewhere."
-  ;(message "Event %S" file-notify--test-event)
+  ;;(message "Event %S" file-notify--test-event)
   ;; Check the descriptor.
   (should (equal (car file-notify--test-event) file-notify--test-desc))
   ;; Check the file name.
@@ -180,11 +221,15 @@ is bound somewhere."
       (file-notify--event-file1-name file-notify--test-event)
       file-notify--test-tmpfile1))))
 
-(defun file-notify--test-event-handler (file-notify--test-event)
+(defun file-notify--test-event-handler (event)
   "Run a test over FILE-NOTIFY--TEST-EVENT.
-Save the result in `file-notify--test-results', for later analysis."
-  (let ((result
-        (ert-run-test (make-ert-test :body 'file-notify--test-event-test))))
+For later analysis, append the test result to `file-notify--test-results'
+and the event to `file-notify--test-events'."
+  (let* ((file-notify--test-event event)
+         (result
+          (ert-run-test (make-ert-test :body 'file-notify--test-event-test))))
+    (setq file-notify--test-events
+          (append file-notify--test-events `(,file-notify--test-event)))
     (setq file-notify--test-results
          (append file-notify--test-results `(,result)))))
 
@@ -194,60 +239,123 @@ Save the result in `file-notify--test-results', for 
later analysis."
    (make-temp-name "file-notify-test") temporary-file-directory))
 
 (defmacro file-notify--wait-for-events (timeout until)
-  "Wait for file notification events until form UNTIL is true.
+  "Wait for and return file notification events until form UNTIL is true.
 TIMEOUT is the maximum time to wait for, in seconds."
   `(with-timeout (,timeout (ignore))
      (while (null ,until)
        (read-event nil nil 0.1))))
 
+(defmacro file-notify--test-with-events (timeout events &rest body)
+  "Run BODY collecting events and then compare with EVENTS.
+Don't wait longer than TIMEOUT seconds for the events to be delivered."
+  (declare (indent 2))
+  (let ((outer (make-symbol "outer")))
+    `(let ((,outer file-notify--test-events))
+       (let (file-notify--test-events)
+         ,@body
+         (file-notify--wait-for-events
+          ,timeout (= (length ,events) (length file-notify--test-events)))
+         (should (equal ,events (mapcar #'cadr file-notify--test-events)))
+         (setq ,outer (append ,outer file-notify--test-events)))
+       (setq file-notify--test-events ,outer))))
+
 (ert-deftest file-notify-test02-events ()
-  "Check file creation/removal notifications."
+  "Check file creation/change/removal notifications."
   (skip-unless (file-notify--test-local-enabled))
   (unwind-protect
       (progn
-        (setq file-notify--test-results nil
-              file-notify--test-tmpfile (file-notify--test-make-temp-name)
+        ;; Check creation, change, and deletion.
+        (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
               file-notify--test-tmpfile1 (file-notify--test-make-temp-name)
               file-notify--test-desc
               (file-notify-add-watch
                file-notify--test-tmpfile
                '(change) 'file-notify--test-event-handler))
+        (file-notify--test-with-events
+            (file-notify--test-timeout) '(created changed deleted)
+          (write-region
+           "any text" nil file-notify--test-tmpfile nil 'no-message)
+          (delete-file file-notify--test-tmpfile))
+        (file-notify-rm-watch file-notify--test-desc)
+
+        ;; Check copy.
+        (setq file-notify--test-desc
+              (file-notify-add-watch
+               file-notify--test-tmpfile
+               '(change) 'file-notify--test-event-handler))
         (should file-notify--test-desc)
-
-        ;; Check creation and removal.
-        (write-region
-         "any text" nil file-notify--test-tmpfile nil 'no-message)
-        (delete-file file-notify--test-tmpfile)
-        (sleep-for 0.1)
-
-        ;; Check copy and rename.
-        (write-region
-         "any text" nil file-notify--test-tmpfile nil 'no-message)
-        (copy-file file-notify--test-tmpfile file-notify--test-tmpfile1)
-        (delete-file file-notify--test-tmpfile)
-        (delete-file file-notify--test-tmpfile1)
-        (sleep-for 0.1)
-
-        (write-region
-         "any text" nil file-notify--test-tmpfile nil 'no-message)
-        (rename-file file-notify--test-tmpfile file-notify--test-tmpfile1)
-        (delete-file file-notify--test-tmpfile1)
-        (sleep-for 0.1))
-
-    ;; Wait for events, and exit.
-    (file-notify--wait-for-events 5 file-notify--test-results)
-    (file-notify-rm-watch file-notify--test-desc)
-    (ignore-errors (delete-file file-notify--test-tmpfile))
-    (ignore-errors (delete-file file-notify--test-tmpfile1)))
-
-  (should file-notify--test-results)
-  (dolist (result file-notify--test-results)
-    ;(message "%s" (ert-test-result-messages result))
-    (when (ert-test-failed-p result)
-      (ert-fail (cadr (ert-test-result-with-condition-condition result))))))
+        (file-notify--test-with-events
+            (file-notify--test-timeout)
+            ;; w32notify does not distinguish between `changed' and
+            ;; `attribute-changed'.
+            (if (eq file-notify--library 'w32notify)
+                '(created changed changed deleted)
+              '(created changed deleted))
+          (write-region
+           "any text" nil file-notify--test-tmpfile nil 'no-message)
+          (copy-file file-notify--test-tmpfile file-notify--test-tmpfile1)
+          ;; The next two events shall not be visible.
+          (set-file-modes file-notify--test-tmpfile 000)
+          (read-event nil nil 0.1) ; In order to distinguish the events.
+          (set-file-times file-notify--test-tmpfile '(0 0))
+          (delete-file file-notify--test-tmpfile)
+          (delete-file file-notify--test-tmpfile1))
+        (file-notify-rm-watch file-notify--test-desc)
+
+        ;; Check rename.
+        (setq file-notify--test-desc
+              (file-notify-add-watch
+               file-notify--test-tmpfile
+               '(change) 'file-notify--test-event-handler))
+        (should file-notify--test-desc)
+        (file-notify--test-with-events
+            (file-notify--test-timeout) '(created changed renamed)
+          (write-region
+           "any text" nil file-notify--test-tmpfile nil 'no-message)
+          (rename-file file-notify--test-tmpfile file-notify--test-tmpfile1)
+          ;; After the rename, we won't get events anymore.
+          (delete-file file-notify--test-tmpfile1))
+        (file-notify-rm-watch file-notify--test-desc)
+
+        ;; Check attribute change.  It doesn't work for w32notify.
+        (unless (eq file-notify--library 'w32notify)
+          (setq file-notify--test-desc
+                (file-notify-add-watch
+                 file-notify--test-tmpfile
+                 '(attribute-change) 'file-notify--test-event-handler))
+          (file-notify--test-with-events
+              (file-notify--test-timeout) '(attribute-changed 
attribute-changed)
+            (write-region
+             "any text" nil file-notify--test-tmpfile nil 'no-message)
+            (set-file-modes file-notify--test-tmpfile 000)
+            (read-event nil nil 0.1) ; In order to distinguish the events.
+            (set-file-times file-notify--test-tmpfile '(0 0))
+            (delete-file file-notify--test-tmpfile))
+          (file-notify-rm-watch file-notify--test-desc))
+
+        ;; Check the global sequence again just to make sure that
+        ;; `file-notify--test-events' has been set correctly.
+        (should (equal (mapcar #'cadr file-notify--test-events)
+                       (if (eq file-notify--library 'w32notify)
+                           '(created changed deleted
+                                     created changed changed deleted
+                                     created changed renamed)
+                         '(created changed deleted
+                                   created changed deleted
+                                   created changed renamed
+                                   attribute-changed attribute-changed))))
+        (should file-notify--test-results)
+        (dolist (result file-notify--test-results)
+          ;;(message "%s" (ert-test-result-messages result))
+          (when (ert-test-failed-p result)
+            (ert-fail
+             (cadr (ert-test-result-with-condition-condition result))))))
+
+    ;; Cleanup.
+    (file-notify--test-cleanup)))
 
 (file-notify--deftest-remote file-notify-test02-events
-  "Check file creation/removal notifications for remote files.")
+  "Check file creation/change/removal notifications for remote files.")
 
 (require 'autorevert)
 (setq auto-revert-notify-exclude-dir-regexp "nothing-to-be-excluded"
@@ -255,8 +363,7 @@ TIMEOUT is the maximum time to wait for, in seconds."
       auto-revert-stop-on-user-input nil)
 
 (ert-deftest file-notify-test03-autorevert ()
-  "Check autorevert via file notification.
-This test is skipped in batch mode."
+  "Check autorevert via file notification."
   (skip-unless (file-notify--test-local-enabled))
   ;; `auto-revert-buffers' runs every 5".  And we must wait, until the
   ;; file has been reverted.
@@ -297,17 +404,121 @@ This test is skipped in batch mode."
            (with-current-buffer (get-buffer-create "*Messages*")
              (file-notify--wait-for-events
               timeout
-              (string-match (format "Reverting buffer `%s'." (buffer-name buf))
-                            (buffer-string))))
+              (string-match
+                (format-message "Reverting buffer `%s'." (buffer-name buf))
+                (buffer-string))))
            (should (string-match "another text" (buffer-string)))))
 
-      ;; Exit.
+      ;; Cleanup.
       (ignore-errors (kill-buffer buf))
-      (ignore-errors (delete-file file-notify--test-tmpfile)))))
+      (file-notify--test-cleanup))))
 
 (file-notify--deftest-remote file-notify-test03-autorevert
-  "Check autorevert via file notification for remote files.
-This test is skipped in batch mode.")
+  "Check autorevert via file notification for remote files.")
+
+(ert-deftest file-notify-test04-file-validity ()
+  "Check `file-notify-valid-p' for files."
+  (skip-unless (file-notify--test-local-enabled))
+
+  (unwind-protect
+      (progn
+        (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
+        (setq file-notify--test-desc
+              (file-notify-add-watch
+               file-notify--test-tmpfile
+               '(change) #'file-notify--test-event-handler))
+        (file-notify--test-with-events
+            (file-notify--test-timeout) '(created changed)
+          (should (file-notify-valid-p file-notify--test-desc))
+          (write-region
+           "any text" nil file-notify--test-tmpfile nil 'no-message)
+          (should (file-notify-valid-p file-notify--test-desc)))
+        ;; After removing the watch, the descriptor must not be valid
+        ;; anymore.
+        (file-notify-rm-watch file-notify--test-desc)
+        (should-not (file-notify-valid-p file-notify--test-desc)))
+
+    ;; Cleanup.
+    (file-notify--test-cleanup))
+
+  (unwind-protect
+      ;; The batch-mode operation of w32notify is fragile (there's no
+      ;; input threads to send the message to).
+      (unless (and noninteractive (eq file-notify--library 'w32notify))
+        (let ((temporary-file-directory (make-temp-file
+                                         "file-notify-test-parent" t)))
+          (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
+          (setq file-notify--test-desc
+                (file-notify-add-watch
+                 file-notify--test-tmpfile
+                 '(change) #'file-notify--test-event-handler))
+          (file-notify--test-with-events
+              (file-notify--test-timeout) '(created changed)
+            (should (file-notify-valid-p file-notify--test-desc))
+            (write-region
+             "any text" nil file-notify--test-tmpfile nil 'no-message)
+            (should (file-notify-valid-p file-notify--test-desc)))
+          ;; After deleting the parent, the descriptor must not be valid
+          ;; anymore.
+          (delete-directory temporary-file-directory t)
+          (file-notify--wait-for-events
+           (file-notify--test-timeout)
+           (not (file-notify-valid-p file-notify--test-desc)))
+          (should-not (file-notify-valid-p file-notify--test-desc))))
+
+    ;; Cleanup.
+    (file-notify--test-cleanup)))
+
+(file-notify--deftest-remote file-notify-test04-file-validity
+  "Check `file-notify-valid-p' via file notification for remote files.")
+
+(ert-deftest file-notify-test05-dir-validity ()
+  "Check `file-notify-valid-p' for directories."
+  (skip-unless (file-notify--test-local-enabled))
+
+  (unwind-protect
+      (progn
+        (setq file-notify--test-tmpfile (file-name-as-directory
+                                         (file-notify--test-make-temp-name)))
+        (make-directory file-notify--test-tmpfile)
+        (setq file-notify--test-desc
+              (file-notify-add-watch
+               file-notify--test-tmpfile
+               '(change) #'file-notify--test-event-handler))
+        (should (file-notify-valid-p file-notify--test-desc))
+        ;; After removing the watch, the descriptor must not be valid
+        ;; anymore.
+        (file-notify-rm-watch file-notify--test-desc)
+        (should-not (file-notify-valid-p file-notify--test-desc)))
+
+    ;; Cleanup.
+    (file-notify--test-cleanup))
+
+  (unwind-protect
+      ;; The batch-mode operation of w32notify is fragile (there's no
+      ;; input threads to send the message to).
+      (unless (and noninteractive (eq file-notify--library 'w32notify))
+        (setq file-notify--test-tmpfile (file-name-as-directory
+                                         (file-notify--test-make-temp-name)))
+        (make-directory file-notify--test-tmpfile)
+        (setq file-notify--test-desc
+              (file-notify-add-watch
+               file-notify--test-tmpfile
+               '(change) #'file-notify--test-event-handler))
+        (should (file-notify-valid-p file-notify--test-desc))
+        ;; After deleting the directory, the descriptor must not be
+        ;; valid anymore.
+        (delete-directory file-notify--test-tmpfile t)
+        (file-notify--wait-for-events
+         (file-notify--test-timeout)
+        (not (file-notify-valid-p file-notify--test-desc)))
+        (should-not (file-notify-valid-p file-notify--test-desc)))
+
+    ;; Cleanup.
+    (file-notify--test-cleanup)))
+
+(file-notify--deftest-remote file-notify-test05-dir-validity
+  "Check `file-notify-valid-p' via file notification for remote directories.")
 
 (defun file-notify-test-all (&optional interactive)
   "Run all tests for \\[file-notify]."
diff --git a/test/automated/icalendar-tests.el 
b/test/automated/icalendar-tests.el
index c83044c..7e05d49 100644
--- a/test/automated/icalendar-tests.el
+++ b/test/automated/icalendar-tests.el
@@ -213,7 +213,7 @@ END:VTIMEZONE
     (should (string= "STD-02:00DST-03:00,M3.5.0/03:00:00,M10.5.0/04:00:00"
                      (cdr result)))
     (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
-TZID:anothername\, with a comma
+TZID:anothername, with a comma
 BEGIN:STANDARD
 DTSTART:16010101T040000
 TZOFFSETFROM:+0300
@@ -235,7 +235,7 @@ END:VTIMEZONE
                      (cdr result)))
     ;; offsetfrom = offsetto
     (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
-TZID:Kolkata\, Chennai\, Mumbai\, New Delhi
+TZID:Kolkata, Chennai, Mumbai, New Delhi
 X-MICROSOFT-CDO-TZID:23
 BEGIN:STANDARD
 DTSTART:16010101T000000
@@ -1327,7 +1327,7 @@ DTEND;VALUE=DATE-TIME:20030919T113000"
   (icalendar-tests--test-import
    "BEGIN:VCALENDAR
 BEGIN:VTIMEZONE
-TZID:fictional\, nonexistent\, arbitrary
+TZID:fictional, nonexistent, arbitrary
 BEGIN:STANDARD
 DTSTART:20100101T000000
 TZOFFSETFROM:+0200
@@ -1463,7 +1463,7 @@ METHOD:REQUEST
 PRODID:Microsoft CDO for Microsoft Exchange
 VERSION:2.0
 BEGIN:VTIMEZONE
-TZID:Kolkata\, Chennai\, Mumbai\, New Delhi
+TZID:Kolkata, Chennai, Mumbai, New Delhi
 X-MICROSOFT-CDO-TZID:23
 BEGIN:STANDARD
 DTSTART:16010101T000000
@@ -2174,7 +2174,7 @@ METHOD:REQUEST
 PRODID:Microsoft Exchange Server 2007
 VERSION:2.0
 BEGIN:VTIMEZONE
-TZID:(UTC+01:00) Amsterdam\, Berlin\, Bern\, Rome\, Stockholm\, Vienna
+TZID:(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
 BEGIN:STANDARD
 DTSTART:16010101T030000
 TZOFFSETFROM:+0200
diff --git a/test/automated/info-xref.el b/test/automated/info-xref.el
index 98d24e1..67f963b 100644
--- a/test/automated/info-xref.el
+++ b/test/automated/info-xref.el
@@ -64,7 +64,7 @@ RESULT is a list (NBAD NGOOD NUNAVAIL)."
   "Write BODY to texi FILE."
   (with-temp-buffer
     (insert "\
-\input texinfo
+\\input texinfo
 @setfilename "
             (format "%s.info\n" (file-name-sans-extension file))
             "\
diff --git a/test/automated/seq-tests.el b/test/automated/seq-tests.el
index 07a183d..7023c94 100644
--- a/test/automated/seq-tests.el
+++ b/test/automated/seq-tests.el
@@ -138,6 +138,16 @@ Evaluate BODY for each created sequence.
     (should-not (seq-some #'test-sequences-oddp seq)))
   (should (seq-some #'null '(1 nil 2))))
 
+(ert-deftest test-seq-find ()
+  (with-test-sequences (seq '(4 3 2 1))
+    (should (= 4 (seq-find #'test-sequences-evenp seq)))
+    (should (= 3 (seq-find #'test-sequences-oddp seq)))
+    (should-not (seq-find (lambda (elt) (> elt 10)) seq)))
+  (should-not (seq-find #'null '(1 nil 2)))
+  (should-not (seq-find #'null '(1 nil 2) t))
+  (should-not (seq-find #'null '(1 2 3)))
+  (should (seq-find #'null '(1 2 3) 'sentinel)))
+
 (ert-deftest test-seq-contains ()
   (with-test-sequences (seq '(3 4 5 6))
     (should (seq-contains seq 3))
diff --git a/test/etags/el-src/emacs/lisp/progmodes/etags.el 
b/test/etags/el-src/emacs/lisp/progmodes/etags.el
index 6acafdb..4e07920 100644
--- a/test/etags/el-src/emacs/lisp/progmodes/etags.el
+++ b/test/etags/el-src/emacs/lisp/progmodes/etags.el
@@ -1766,7 +1766,7 @@ if the file was newly read in, the value is the filename."
                "No \\[tags-search] or \\[tags-query-replace] in progress"))
   "Form for `tags-loop-continue' to eval to scan one file.
 If it returns non-nil, this file needs processing by evalling
-\`tags-loop-operate'.  Otherwise, move on to the next file.")
+`tags-loop-operate'.  Otherwise, move on to the next file.")
 
 (defun tags-loop-eval (form)
   "Evaluate FORM and return its result.
diff --git a/test/indent/prolog.prolog b/test/indent/prolog.prolog
index 5b5d272..6bf9437 100644
--- a/test/indent/prolog.prolog
+++ b/test/indent/prolog.prolog
@@ -1,5 +1,26 @@
 %% -*- mode: prolog; coding: utf-8; fill-column: 78 -*-
 
+%% bug#21526
+test1 :-
+    (   a ->
+            (   a ->
+                b
+            ;   c
+            )
+    ;   c
+    ).
+
+test2 :-
+    (    a
+    ->   (   a,
+             b
+         ;   c
+         ),
+         b2
+    ;    c1,
+         c2
+    )
+
 %% Testing correct tokenizing.
 foo(X) :- 0'= = X.
 foo(X) :- 8'234 = X.
@@ -50,9 +71,9 @@ subst(X, V, FV, lambda(Y, Ti, Bi), lambda(Y1, To, Bo)) :-
      %% Perform substitution on the body.
      subst(X, V, FV, Bi1, Bo)),
     (  X = Y
-     %% If X is equal to Y, X is shadowed, so no subst can take place.
-     ->        Y1 = Y, Bo = Bi
-     ; (member((Y, _), FV)
+    %% If X is equal to Y, X is shadowed, so no subst can take place.
+    -> Y1 = Y, Bo = Bi
+    ;  (member((Y, _), FV)
         %% If Y appears in FV, it can appear in V, so we need to
         %% rename it to avoid name capture.
         -> new_atom(Y, Y1),



reply via email to

[Prev in Thread] Current Thread [Next in Thread]