]> code.delx.au - gnu-emacs/commitdiff
Merge emacs-25 into master (using imerge)
authorJohn Wiegley <johnw@newartisans.com>
Wed, 30 Dec 2015 05:40:28 +0000 (21:40 -0800)
committerJohn Wiegley <johnw@newartisans.com>
Wed, 30 Dec 2015 05:40:28 +0000 (21:40 -0800)
336 files changed:
.gitignore
CONTRIBUTE
ChangeLog.2
Makefile.in
README
admin/gitmerge.el
admin/release-process
configure.ac
doc/emacs/dired.texi
doc/lispref/os.texi
doc/misc/eww.texi
etc/NEWS
lisp/Makefile.in
lisp/abbrev.el
lisp/bindings.el
lisp/calculator.el
lisp/cus-edit.el
lisp/dired-aux.el
lisp/dired-x.el
lisp/dired.el
lisp/emacs-lisp/eieio-compat.el
lisp/emacs-lisp/eieio-core.el
lisp/emacs-lisp/eieio-custom.el
lisp/emacs-lisp/eieio-opt.el
lisp/emacs-lisp/eieio.el
lisp/emacs-lisp/let-alist.el
lisp/emacs-lisp/package.el
lisp/epa.el
lisp/erc/erc-backend.el
lisp/erc/erc.el
lisp/ffap.el
lisp/filenotify.el
lisp/gnus/gnus-util.el
lisp/gnus/mml-sec.el
lisp/hfy-cmap.el
lisp/htmlfontify.el
lisp/ibuf-ext.el
lisp/ibuffer.el
lisp/linum.el
lisp/loadup.el
lisp/mail/rmail.el
lisp/mail/rmailedit.el
lisp/mail/rmailkwd.el
lisp/mail/rmailmm.el
lisp/mail/rmailmsc.el
lisp/mail/rmailsort.el
lisp/mail/rmailsum.el
lisp/mail/undigest.el
lisp/menu-bar.el
lisp/net/eww.el
lisp/net/network-stream.el
lisp/net/puny.el [new file with mode: 0644]
lisp/net/shr.el
lisp/progmodes/cc-defs.el
lisp/progmodes/verilog-mode.el
lisp/progmodes/which-func.el
lisp/ps-mule.el
lisp/ps-print.el
lisp/textmodes/reftex-auc.el
lisp/textmodes/reftex-cite.el
lisp/textmodes/reftex-dcr.el
lisp/textmodes/reftex-global.el
lisp/textmodes/reftex-index.el
lisp/textmodes/reftex-parse.el
lisp/textmodes/reftex-ref.el
lisp/textmodes/reftex-sel.el
lisp/textmodes/reftex-toc.el
lisp/textmodes/reftex.el
lisp/url/url-handlers.el
lisp/url/url-http.el
lisp/url/url-util.el
msdos/sed2v2.inp
src/Makefile.in
src/emacs.c
src/inotify.c
src/keyboard.c
src/kqueue.c [new file with mode: 0644]
src/lisp.h
test/Makefile.in [moved from test/automated/Makefile.in with 76% similarity]
test/data/decompress/foo.gz [moved from test/automated/data/decompress/foo.gz with 100% similarity]
test/data/epg/pubkey.asc [moved from test/automated/data/epg/pubkey.asc with 100% similarity]
test/data/epg/seckey.asc [moved from test/automated/data/epg/seckey.asc with 100% similarity]
test/data/files-bug18141.el.gz [moved from test/automated/data/files-bug18141.el.gz with 100% similarity]
test/file-organisation.org [new file with mode: 0644]
test/lisp/abbrev-tests.el [moved from test/automated/abbrev-tests.el with 73% similarity]
test/lisp/autorevert-tests.el [moved from test/automated/auto-revert-tests.el with 99% similarity]
test/lisp/calc/calc-tests.el [moved from test/automated/calc-tests.el with 100% similarity]
test/lisp/calendar/icalendar-tests.el [moved from test/automated/icalendar-tests.el with 100% similarity]
test/lisp/character-fold-tests.el [moved from test/automated/character-fold-tests.el with 100% similarity]
test/lisp/comint-tests.el [moved from test/automated/comint-testsuite.el with 100% similarity]
test/lisp/descr-text-tests.el [moved from test/automated/descr-text-test.el with 100% similarity]
test/lisp/dired-tests.el [new file with mode: 0644]
test/lisp/electric-tests.el [moved from test/automated/electric-tests.el with 100% similarity]
test/lisp/emacs-lisp/cl-generic-tests.el [moved from test/automated/cl-generic-tests.el with 100% similarity]
test/lisp/emacs-lisp/cl-lib-tests.el [moved from test/automated/cl-lib-tests.el with 100% similarity]
test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el [moved from test/automated/eieio-test-methodinvoke.el with 100% similarity]
test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el [moved from test/automated/eieio-test-persist.el with 100% similarity]
test/lisp/emacs-lisp/eieio-tests/eieio-tests.el [moved from test/automated/eieio-tests.el with 99% similarity]
test/lisp/emacs-lisp/ert-tests.el [moved from test/automated/ert-tests.el with 100% similarity]
test/lisp/emacs-lisp/ert-x-tests.el [moved from test/automated/ert-x-tests.el with 100% similarity]
test/lisp/emacs-lisp/generator-tests.el [moved from test/automated/generator-tests.el with 100% similarity]
test/lisp/emacs-lisp/let-alist-tests.el [moved from test/automated/let-alist.el with 100% similarity]
test/lisp/emacs-lisp/map-tests.el [moved from test/automated/map-tests.el with 100% similarity]
test/lisp/emacs-lisp/nadvice-tests.el [moved from test/automated/advice-tests.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/archive-contents [moved from test/automated/data/package/archive-contents with 100% similarity]
test/lisp/emacs-lisp/package-resources/key.pub [moved from test/automated/data/package/key.pub with 100% similarity]
test/lisp/emacs-lisp/package-resources/key.sec [moved from test/automated/data/package/key.sec with 100% similarity]
test/lisp/emacs-lisp/package-resources/multi-file-0.2.3.tar [moved from test/automated/data/package/multi-file-0.2.3.tar with 100% similarity]
test/lisp/emacs-lisp/package-resources/multi-file-readme.txt [moved from test/automated/data/package/multi-file-readme.txt with 100% similarity]
test/lisp/emacs-lisp/package-resources/newer-versions/archive-contents [moved from test/automated/data/package/newer-versions/archive-contents with 100% similarity]
test/lisp/emacs-lisp/package-resources/newer-versions/new-pkg-1.0.el [moved from test/automated/data/package/newer-versions/new-pkg-1.0.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/newer-versions/simple-single-1.4.el [moved from test/automated/data/package/newer-versions/simple-single-1.4.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/package-test-server.py [moved from test/automated/data/package/package-test-server.py with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/archive-contents [moved from test/automated/data/package/signed/archive-contents with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/archive-contents.sig [moved from test/automated/data/package/signed/archive-contents.sig with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/signed-bad-1.0.el [moved from test/automated/data/package/signed/signed-bad-1.0.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/signed-bad-1.0.el.sig [moved from test/automated/data/package/signed/signed-bad-1.0.el.sig with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/signed-good-1.0.el [moved from test/automated/data/package/signed/signed-good-1.0.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/signed/signed-good-1.0.el.sig [moved from test/automated/data/package/signed/signed-good-1.0.el.sig with 100% similarity]
test/lisp/emacs-lisp/package-resources/simple-depend-1.0.el [moved from test/automated/data/package/simple-depend-1.0.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/simple-single-1.3.el [moved from test/automated/data/package/simple-single-1.3.el with 100% similarity]
test/lisp/emacs-lisp/package-resources/simple-single-readme.txt [moved from test/automated/data/package/simple-single-readme.txt with 100% similarity]
test/lisp/emacs-lisp/package-resources/simple-two-depend-1.1.el [moved from test/automated/data/package/simple-two-depend-1.1.el with 100% similarity]
test/lisp/emacs-lisp/package-tests.el [moved from test/automated/package-test.el with 96% similarity]
test/lisp/emacs-lisp/pcase-tests.el [moved from test/automated/pcase-tests.el with 100% similarity]
test/lisp/emacs-lisp/regexp-opt-tests.el [moved from test/automated/regexp-tests.el with 100% similarity]
test/lisp/emacs-lisp/seq-tests.el [moved from test/automated/seq-tests.el with 100% similarity]
test/lisp/emacs-lisp/subr-x-tests.el [moved from test/automated/subr-x-tests.el with 100% similarity]
test/lisp/emacs-lisp/tabulated-list-test.el [moved from test/automated/tabulated-list-test.el with 100% similarity]
test/lisp/emacs-lisp/thunk-tests.el [moved from test/automated/thunk-tests.el with 100% similarity]
test/lisp/emacs-lisp/timer-tests.el [moved from test/automated/timer-tests.el with 100% similarity]
test/lisp/epg-tests.el [moved from test/automated/epg-tests.el with 100% similarity]
test/lisp/eshell/eshell.el [moved from test/automated/eshell.el with 100% similarity]
test/lisp/faces-tests.el [moved from test/automated/faces-tests.el with 100% similarity]
test/lisp/filenotify-tests.el [moved from test/automated/file-notify-tests.el with 50% similarity]
test/lisp/gnus/auth-source-tests.el [moved from test/automated/auth-source-tests.el with 100% similarity]
test/lisp/gnus/gnus-tests.el [moved from test/automated/gnus-tests.el with 100% similarity]
test/lisp/gnus/message-tests.el [moved from test/automated/message-mode-tests.el with 100% similarity]
test/lisp/help-fns-tests.el [moved from test/automated/help-fns.el with 100% similarity]
test/lisp/htmlfontify-tests.el [new file with mode: 0644]
test/lisp/ibuffer-tests.el [new file with mode: 0644]
test/lisp/imenu-tests.el [moved from test/automated/imenu-test.el with 100% similarity]
test/lisp/info-xref-tests.el [moved from test/automated/info-xref.el with 100% similarity]
test/lisp/international/mule-util-tests.el [moved from test/automated/mule-util.el with 100% similarity]
test/lisp/isearch-tests.el [moved from test/automated/isearch-tests.el with 100% similarity]
test/lisp/json-tests.el [moved from test/automated/json-tests.el with 100% similarity]
test/lisp/legacy/bytecomp-tests.el [moved from test/automated/bytecomp-tests.el with 100% similarity]
test/lisp/legacy/coding-tests.el [moved from test/automated/coding-tests.el with 100% similarity]
test/lisp/legacy/core-elisp-tests.el [moved from test/automated/core-elisp-tests.el with 100% similarity]
test/lisp/legacy/decoder-tests.el [moved from test/automated/decoder-tests.el with 100% similarity]
test/lisp/legacy/files-tests.el [moved from test/automated/files.el with 100% similarity]
test/lisp/legacy/font-parse-tests.el [moved from test/automated/font-parse-tests.el with 100% similarity]
test/lisp/legacy/lexbind-tests.el [moved from test/automated/lexbind-tests.el with 100% similarity]
test/lisp/legacy/occur-tests.el [moved from test/automated/occur-tests.el with 100% similarity]
test/lisp/legacy/process-tests.el [moved from test/automated/process-tests.el with 100% similarity]
test/lisp/legacy/syntax-tests.el [moved from test/automated/syntax-tests.el with 100% similarity]
test/lisp/legacy/textprop-tests.el [moved from test/automated/textprop-tests.el with 100% similarity]
test/lisp/legacy/undo-tests.el [moved from test/automated/undo-tests.el with 100% similarity]
test/lisp/mail/rmail-tests.el [new file with mode: 0644]
test/lisp/man-tests.el [moved from test/automated/man-tests.el with 100% similarity]
test/lisp/minibuffer-tests.el [moved from test/automated/completion-tests.el with 100% similarity]
test/lisp/net/dbus-tests.el [moved from test/automated/dbus-tests.el with 100% similarity]
test/lisp/net/newsticker-tests.el [moved from test/automated/newsticker-tests.el with 100% similarity]
test/lisp/net/sasl-scram-rfc-tests.el [moved from test/automated/sasl-scram-rfc-tests.el with 100% similarity]
test/lisp/net/tramp-tests.el [moved from test/automated/tramp-tests.el with 100% similarity]
test/lisp/obarray-tests.el [moved from test/automated/obarray-tests.el with 100% similarity]
test/lisp/progmodes/compile-tests.el [moved from test/automated/compile-tests.el with 100% similarity]
test/lisp/progmodes/elisp-mode-tests.el [moved from test/automated/elisp-mode-tests.el with 95% similarity]
test/lisp/progmodes/f90.el [moved from test/automated/f90.el with 100% similarity]
test/lisp/progmodes/flymake-resources/Makefile [moved from test/automated/data/flymake/Makefile with 100% similarity]
test/lisp/progmodes/flymake-resources/test.c [moved from test/automated/data/flymake/test.c with 100% similarity]
test/lisp/progmodes/flymake-resources/test.pl [moved from test/automated/data/flymake/test.pl with 100% similarity]
test/lisp/progmodes/flymake-tests.el [moved from test/automated/flymake-tests.el with 97% similarity]
test/lisp/progmodes/python-tests.el [moved from test/automated/python-tests.el with 100% similarity]
test/lisp/progmodes/ruby-mode-tests.el [moved from test/automated/ruby-mode-tests.el with 100% similarity]
test/lisp/progmodes/subword-tests.el [moved from test/automated/subword-tests.el with 100% similarity]
test/lisp/ps-print-tests.el [new file with mode: 0644]
test/lisp/replace-tests.el [moved from test/automated/replace-tests.el with 100% similarity]
test/lisp/simple-tests.el [moved from test/automated/simple-test.el with 100% similarity]
test/lisp/sort-tests.el [moved from test/automated/sort-tests.el with 100% similarity]
test/lisp/subr-tests.el [moved from test/automated/subr-tests.el with 100% similarity]
test/lisp/textmodes/reftex-tests.el [moved from test/automated/reftex-tests.el with 96% similarity]
test/lisp/textmodes/sgml-mode-tests.el [moved from test/automated/sgml-mode-tests.el with 100% similarity]
test/lisp/textmodes/tildify-tests.el [moved from test/automated/tildify-tests.el with 100% similarity]
test/lisp/thingatpt-tests.el [moved from test/automated/thingatpt.el with 100% similarity]
test/lisp/url/url-future-tests.el [moved from test/automated/url-future-tests.el with 100% similarity]
test/lisp/url/url-parse-tests.el [new file with mode: 0644]
test/lisp/url/url-util-tests.el [moved from test/automated/url-util-tests.el with 100% similarity]
test/lisp/vc/add-log-tests.el [moved from test/automated/add-log-tests.el with 100% similarity]
test/lisp/vc/vc-bzr-tests.el [moved from test/automated/vc-bzr.el with 100% similarity]
test/lisp/vc/vc-tests.el [moved from test/automated/vc-tests.el with 100% similarity]
test/lisp/xml-tests.el [moved from test/automated/xml-parse-tests.el with 100% similarity]
test/make-test-deps.emacs-lisp [new file with mode: 0644]
test/manual/BidiCharacterTest.txt [moved from test/BidiCharacterTest.txt with 100% similarity]
test/manual/biditest.el [moved from test/biditest.el with 100% similarity]
test/manual/cedet/cedet-utests.el [moved from test/cedet/cedet-utests.el with 100% similarity]
test/manual/cedet/ede-tests.el [moved from test/cedet/ede-tests.el with 100% similarity]
test/manual/cedet/semantic-ia-utest.el [moved from test/cedet/semantic-ia-utest.el with 100% similarity]
test/manual/cedet/semantic-tests.el [moved from test/cedet/semantic-tests.el with 100% similarity]
test/manual/cedet/semantic-utest-c.el [moved from test/cedet/semantic-utest-c.el with 100% similarity]
test/manual/cedet/semantic-utest.el [moved from test/cedet/semantic-utest.el with 100% similarity]
test/manual/cedet/srecode-tests.el [moved from test/cedet/srecode-tests.el with 100% similarity]
test/manual/cedet/tests/test.c [moved from test/cedet/tests/test.c with 100% similarity]
test/manual/cedet/tests/test.el [moved from test/cedet/tests/test.el with 100% similarity]
test/manual/cedet/tests/test.make [moved from test/cedet/tests/test.make with 100% similarity]
test/manual/cedet/tests/testdoublens.cpp [moved from test/cedet/tests/testdoublens.cpp with 100% similarity]
test/manual/cedet/tests/testdoublens.hpp [moved from test/cedet/tests/testdoublens.hpp with 100% similarity]
test/manual/cedet/tests/testfriends.cpp [moved from test/cedet/tests/testfriends.cpp with 100% similarity]
test/manual/cedet/tests/testjavacomp.java [moved from test/cedet/tests/testjavacomp.java with 100% similarity]
test/manual/cedet/tests/testnsp.cpp [moved from test/cedet/tests/testnsp.cpp with 100% similarity]
test/manual/cedet/tests/testpolymorph.cpp [moved from test/cedet/tests/testpolymorph.cpp with 100% similarity]
test/manual/cedet/tests/testspp.c [moved from test/cedet/tests/testspp.c with 100% similarity]
test/manual/cedet/tests/testsppcomplete.c [moved from test/cedet/tests/testsppcomplete.c with 100% similarity]
test/manual/cedet/tests/testsppreplace.c [moved from test/cedet/tests/testsppreplace.c with 100% similarity]
test/manual/cedet/tests/testsppreplaced.c [moved from test/cedet/tests/testsppreplaced.c with 100% similarity]
test/manual/cedet/tests/testsubclass.cpp [moved from test/cedet/tests/testsubclass.cpp with 100% similarity]
test/manual/cedet/tests/testsubclass.hh [moved from test/cedet/tests/testsubclass.hh with 100% similarity]
test/manual/cedet/tests/testtypedefs.cpp [moved from test/cedet/tests/testtypedefs.cpp with 100% similarity]
test/manual/cedet/tests/testvarnames.c [moved from test/cedet/tests/testvarnames.c with 100% similarity]
test/manual/etags/CTAGS.good [moved from test/etags/CTAGS.good with 100% similarity]
test/manual/etags/ETAGS.good_1 [moved from test/etags/ETAGS.good_1 with 100% similarity]
test/manual/etags/ETAGS.good_2 [moved from test/etags/ETAGS.good_2 with 100% similarity]
test/manual/etags/ETAGS.good_3 [moved from test/etags/ETAGS.good_3 with 100% similarity]
test/manual/etags/ETAGS.good_4 [moved from test/etags/ETAGS.good_4 with 100% similarity]
test/manual/etags/ETAGS.good_5 [moved from test/etags/ETAGS.good_5 with 100% similarity]
test/manual/etags/ETAGS.good_6 [moved from test/etags/ETAGS.good_6 with 100% similarity]
test/manual/etags/Makefile [moved from test/etags/Makefile with 98% similarity]
test/manual/etags/a-src/empty.zz [moved from test/etags/a-src/empty.zz with 100% similarity]
test/manual/etags/a-src/empty.zz.gz [moved from test/etags/a-src/empty.zz.gz with 100% similarity]
test/manual/etags/ada-src/2ataspri.adb [moved from test/etags/ada-src/2ataspri.adb with 100% similarity]
test/manual/etags/ada-src/2ataspri.ads [moved from test/etags/ada-src/2ataspri.ads with 100% similarity]
test/manual/etags/ada-src/etags-test-for.ada [moved from test/etags/ada-src/etags-test-for.ada with 100% similarity]
test/manual/etags/ada-src/waroquiers.ada [moved from test/etags/ada-src/waroquiers.ada with 100% similarity]
test/manual/etags/c-src/a/b/b.c [moved from test/etags/c-src/a/b/b.c with 100% similarity]
test/manual/etags/c-src/abbrev.c [moved from test/etags/c-src/abbrev.c with 100% similarity]
test/manual/etags/c-src/c.c [moved from test/etags/c-src/c.c with 100% similarity]
test/manual/etags/c-src/dostorture.c [moved from test/etags/c-src/dostorture.c with 100% similarity]
test/manual/etags/c-src/emacs/src/gmalloc.c [moved from test/etags/c-src/emacs/src/gmalloc.c with 100% similarity]
test/manual/etags/c-src/emacs/src/keyboard.c [moved from test/etags/c-src/emacs/src/keyboard.c with 100% similarity]
test/manual/etags/c-src/emacs/src/lisp.h [moved from test/etags/c-src/emacs/src/lisp.h with 100% similarity]
test/manual/etags/c-src/emacs/src/regex.h [moved from test/etags/c-src/emacs/src/regex.h with 100% similarity]
test/manual/etags/c-src/etags.c [moved from test/etags/c-src/etags.c with 100% similarity]
test/manual/etags/c-src/exit.c [moved from test/etags/c-src/exit.c with 100% similarity]
test/manual/etags/c-src/exit.strange_suffix [moved from test/etags/c-src/exit.strange_suffix with 100% similarity]
test/manual/etags/c-src/fail.c [moved from test/etags/c-src/fail.c with 100% similarity]
test/manual/etags/c-src/getopt.h [moved from test/etags/c-src/getopt.h with 100% similarity]
test/manual/etags/c-src/h.h [moved from test/etags/c-src/h.h with 100% similarity]
test/manual/etags/c-src/machsyscalls.c [moved from test/etags/c-src/machsyscalls.c with 100% similarity]
test/manual/etags/c-src/machsyscalls.h [moved from test/etags/c-src/machsyscalls.h with 100% similarity]
test/manual/etags/c-src/sysdep.h [moved from test/etags/c-src/sysdep.h with 100% similarity]
test/manual/etags/c-src/tab.c [moved from test/etags/c-src/tab.c with 100% similarity]
test/manual/etags/c-src/torture.c [moved from test/etags/c-src/torture.c with 100% similarity]
test/manual/etags/cp-src/MDiagArray2.h [moved from test/etags/cp-src/MDiagArray2.h with 100% similarity]
test/manual/etags/cp-src/Range.h [moved from test/etags/cp-src/Range.h with 100% similarity]
test/manual/etags/cp-src/burton.cpp [moved from test/etags/cp-src/burton.cpp with 100% similarity]
test/manual/etags/cp-src/c.C [moved from test/etags/cp-src/c.C with 100% similarity]
test/manual/etags/cp-src/clheir.cpp.gz [moved from test/etags/cp-src/clheir.cpp.gz with 100% similarity]
test/manual/etags/cp-src/clheir.hpp [moved from test/etags/cp-src/clheir.hpp with 100% similarity]
test/manual/etags/cp-src/conway.cpp [moved from test/etags/cp-src/conway.cpp with 100% similarity]
test/manual/etags/cp-src/conway.hpp [moved from test/etags/cp-src/conway.hpp with 100% similarity]
test/manual/etags/cp-src/fail.C [moved from test/etags/cp-src/fail.C with 100% similarity]
test/manual/etags/cp-src/functions.cpp [moved from test/etags/cp-src/functions.cpp with 100% similarity]
test/manual/etags/cp-src/screen.cpp [moved from test/etags/cp-src/screen.cpp with 100% similarity]
test/manual/etags/cp-src/screen.hpp [moved from test/etags/cp-src/screen.hpp with 100% similarity]
test/manual/etags/cp-src/x.cc [moved from test/etags/cp-src/x.cc with 100% similarity]
test/manual/etags/el-src/TAGTEST.EL [moved from test/etags/el-src/TAGTEST.EL with 100% similarity]
test/manual/etags/el-src/emacs/lisp/progmodes/etags.el [moved from test/etags/el-src/emacs/lisp/progmodes/etags.el with 100% similarity]
test/manual/etags/erl-src/gs_dialog.erl [moved from test/etags/erl-src/gs_dialog.erl with 100% similarity]
test/manual/etags/f-src/entry.for [moved from test/etags/f-src/entry.for with 100% similarity]
test/manual/etags/f-src/entry.strange.gz [moved from test/etags/f-src/entry.strange.gz with 100% similarity]
test/manual/etags/f-src/entry.strange_suffix [moved from test/etags/f-src/entry.strange_suffix with 100% similarity]
test/manual/etags/forth-src/test-forth.fth [moved from test/etags/forth-src/test-forth.fth with 100% similarity]
test/manual/etags/html-src/algrthms.html [moved from test/etags/html-src/algrthms.html with 100% similarity]
test/manual/etags/html-src/index.shtml [moved from test/etags/html-src/index.shtml with 100% similarity]
test/manual/etags/html-src/software.html [moved from test/etags/html-src/software.html with 100% similarity]
test/manual/etags/html-src/softwarelibero.html [moved from test/etags/html-src/softwarelibero.html with 100% similarity]
test/manual/etags/lua-src/allegro.lua [moved from test/etags/lua-src/allegro.lua with 100% similarity]
test/manual/etags/make-src/Makefile [moved from test/etags/make-src/Makefile with 100% similarity]
test/manual/etags/objc-src/PackInsp.h [moved from test/etags/objc-src/PackInsp.h with 100% similarity]
test/manual/etags/objc-src/PackInsp.m [moved from test/etags/objc-src/PackInsp.m with 100% similarity]
test/manual/etags/objc-src/Subprocess.h [moved from test/etags/objc-src/Subprocess.h with 100% similarity]
test/manual/etags/objc-src/Subprocess.m [moved from test/etags/objc-src/Subprocess.m with 100% similarity]
test/manual/etags/objcpp-src/SimpleCalc.H [moved from test/etags/objcpp-src/SimpleCalc.H with 100% similarity]
test/manual/etags/objcpp-src/SimpleCalc.M [moved from test/etags/objcpp-src/SimpleCalc.M with 100% similarity]
test/manual/etags/pas-src/common.pas [moved from test/etags/pas-src/common.pas with 100% similarity]
test/manual/etags/perl-src/htlmify-cystic [moved from test/etags/perl-src/htlmify-cystic with 100% similarity]
test/manual/etags/perl-src/kai-test.pl [moved from test/etags/perl-src/kai-test.pl with 100% similarity]
test/manual/etags/perl-src/yagrip.pl [moved from test/etags/perl-src/yagrip.pl with 100% similarity]
test/manual/etags/php-src/lce_functions.php [moved from test/etags/php-src/lce_functions.php with 100% similarity]
test/manual/etags/php-src/ptest.php [moved from test/etags/php-src/ptest.php with 100% similarity]
test/manual/etags/php-src/sendmail.php [moved from test/etags/php-src/sendmail.php with 100% similarity]
test/manual/etags/prol-src/natded.prolog [moved from test/etags/prol-src/natded.prolog with 100% similarity]
test/manual/etags/prol-src/ordsets.prolog [moved from test/etags/prol-src/ordsets.prolog with 100% similarity]
test/manual/etags/ps-src/rfc1245.ps [moved from test/etags/ps-src/rfc1245.ps with 100% similarity]
test/manual/etags/pyt-src/server.py [moved from test/etags/pyt-src/server.py with 100% similarity]
test/manual/etags/tex-src/gzip.texi [moved from test/etags/tex-src/gzip.texi with 100% similarity]
test/manual/etags/tex-src/nonewline.tex [moved from test/etags/tex-src/nonewline.tex with 100% similarity]
test/manual/etags/tex-src/testenv.tex [moved from test/etags/tex-src/testenv.tex with 100% similarity]
test/manual/etags/tex-src/texinfo.tex [moved from test/etags/tex-src/texinfo.tex with 100% similarity]
test/manual/etags/y-src/atest.y [moved from test/etags/y-src/atest.y with 100% similarity]
test/manual/etags/y-src/cccp.c [moved from test/etags/y-src/cccp.c with 100% similarity]
test/manual/etags/y-src/cccp.y [moved from test/etags/y-src/cccp.y with 100% similarity]
test/manual/etags/y-src/parse.c [moved from test/etags/y-src/parse.c with 100% similarity]
test/manual/etags/y-src/parse.y [moved from test/etags/y-src/parse.y with 100% similarity]
test/manual/indent/Makefile [moved from test/indent/Makefile with 100% similarity]
test/manual/indent/css-mode.css [moved from test/indent/css-mode.css with 100% similarity]
test/manual/indent/js-indent-init-dynamic.js [moved from test/indent/js-indent-init-dynamic.js with 100% similarity]
test/manual/indent/js-indent-init-t.js [moved from test/indent/js-indent-init-t.js with 100% similarity]
test/manual/indent/js-jsx.js [moved from test/indent/js-jsx.js with 100% similarity]
test/manual/indent/js.js [moved from test/indent/js.js with 100% similarity]
test/manual/indent/latex-mode.tex [moved from test/indent/latex-mode.tex with 100% similarity]
test/manual/indent/modula2.mod [moved from test/indent/modula2.mod with 100% similarity]
test/manual/indent/nxml.xml [moved from test/indent/nxml.xml with 100% similarity]
test/manual/indent/octave.m [moved from test/indent/octave.m with 100% similarity]
test/manual/indent/pascal.pas [moved from test/indent/pascal.pas with 100% similarity]
test/manual/indent/perl.perl [moved from test/indent/perl.perl with 100% similarity]
test/manual/indent/prolog.prolog [moved from test/indent/prolog.prolog with 100% similarity]
test/manual/indent/ps-mode.ps [moved from test/indent/ps-mode.ps with 100% similarity]
test/manual/indent/ruby.rb [moved from test/indent/ruby.rb with 100% similarity]
test/manual/indent/scheme.scm [moved from test/indent/scheme.scm with 100% similarity]
test/manual/indent/scss-mode.scss [moved from test/indent/scss-mode.scss with 100% similarity]
test/manual/indent/sgml-mode-attribute.html [moved from test/indent/sgml-mode-attribute.html with 100% similarity]
test/manual/indent/shell.rc [moved from test/indent/shell.rc with 100% similarity]
test/manual/indent/shell.sh [moved from test/indent/shell.sh with 100% similarity]
test/manual/redisplay-testsuite.el [moved from test/redisplay-testsuite.el with 100% similarity]
test/manual/rmailmm.el [moved from test/rmailmm.el with 100% similarity]
test/src/alloc-tests.el [moved from test/automated/finalizer-tests.el with 93% similarity]
test/src/buffer-tests.el [moved from test/automated/buffer-tests.el with 100% similarity]
test/src/cmds-tests.el [moved from test/automated/cmds-tests.el with 100% similarity]
test/src/data-tests.el [moved from test/automated/data-tests.el with 100% similarity]
test/src/decompress-tests.el [moved from test/automated/zlib-tests.el with 92% similarity]
test/src/fns-tests.el [moved from test/automated/fns-tests.el with 100% similarity]
test/src/inotify-tests.el [moved from test/automated/inotify-test.el with 100% similarity]
test/src/keymap-tests.el [moved from test/automated/keymap-tests.el with 100% similarity]
test/src/print-tests.el [moved from test/automated/print-tests.el with 100% similarity]
test/src/xml-tests.el [moved from test/automated/libxml-tests.el with 100% similarity]

index 34b0c02fec47a1dd1e120d2e850bd0ca3ed687d5..e544b10808b295d7f7b6e44cdf9a555b20b81ce2 100644 (file)
@@ -43,10 +43,10 @@ Makefile
 makefile
 !etc/refcards/Makefile
 !modules/mod-test/Makefile
-!test/automated/data/flymake/Makefile
-!test/indent/Makefile
-!test/etags/Makefile
-!test/etags/make-src/Makefile
+!test/lisp/progmodes/flymake-resources/Makefile
+!test/manual/indent/Makefile
+!test/manual/etags/Makefile
+!test/manual/etags/make-src/Makefile
 /*.cache
 /confdefs.h
 /config.status
@@ -152,10 +152,12 @@ src/*.map
 # Tests.
 test/indent/*.new
 test/biditest.txt
-test/etags/srclist
-test/etags/regexfile
-test/etags/ETAGS
-test/etags/CTAGS
+test/manual/etags/srclist
+test/manual/etags/regexfile
+test/manual/etags/ETAGS
+test/manual/etags/CTAGS
+# Generated by test/make-test-deps.emacs-lisp
+test/make-test-deps.mk
 
 # ctags, etags.
 TAGS
index 9061007fc9ce606e09360cf61964dc75f64f8445..c9c4b74f0904fe5e5df53aae4cefe240ca755821 100644 (file)
@@ -253,9 +253,9 @@ for more information on writing and running tests.
 
 To run tests on the entire Emacs tree, run "make check" from the
 top-level directory.  Most tests are in the directory
-"test/automated".  From the "test/automated" directory, run "make
+"test/".  From the "test/" directory, run "make
 <filename>" to run the tests for <filename>.el(c).  See
-"test/automated/Makefile" for more information.
+"test/Makefile" for more information.
 
 ** Understanding Emacs Internals.
 
index 945f7871ddf59fcc16702a7633344bad5e9a5591..6a8f539da462096e38abc3d2f406ff6119fc6673 100644 (file)
+2015-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * shr.el (shr-descend): Allow using lambdas in external functions.
+
+2015-12-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * admin/gitmerge.el: Tweaks that seemed necessary
+
+       * admin/gitmerge.el (gitmerge-skip-regexp): Remove "sync".
+       (gitmerge-maybe-resume): Provide explicit empty commit message.
+
+2015-12-25  Łukasz Stelmach  <stlman@poczta.fm>  (tiny change)
+
+       Use a different port for TLS erc
+
+       * lisp/erc/erc.el (erc-default-port-tls): New variable
+       (bug#19497).
+       * lisp/erc/erc.el (erc-tls): Use it.
+
+2015-12-25  Alain Schneble  <a.s@realize.ch>
+
+       Make relative URL parsing and resolution consistent with RFC 3986 (bug#22044)
+
+       * test/lisp/url/url-parse-tests.el: Add tests covering url-generic-parse-url.
+       * test/lisp/url/url-expand-tests.el: Add tests covering url-expand-file-name.
+       * lisp/url/url-parse.el (url-generic-parse-url): Keep empty fragment
+       information in URL-struct.
+       * lisp/url/url-parse.el (url-path-and-query): Do not artificially turn empty
+       path and query into nil path and query, respectively.
+       * lisp/url/url-expand.el (url-expander-remove-relative-links): Do not turn
+       empty path into an absolute ("/") path.
+       * lisp/url/url-expand.el (url-expand-file-name): Properly resolve
+       fragment-only URIs. Do not just return them unchanged.
+       * lisp/url/url-expand.el (url-default-expander): An empty path in the relative
+       reference URI should not drop the last segment.
+
+2015-12-25  Alain Schneble  <a.s@realize.ch>
+
+       Make relative URL parsing and resolution consistent with RFC 3986 (bug#22044)
+
+       * test/lisp/url/url-parse-tests.el: Add tests covering url-generic-parse-url.
+       * test/lisp/url/url-expand-tests.el: Add tests covering url-expand-file-name.
+       * lisp/url/url-parse.el (url-generic-parse-url): Keep empty fragment
+       information in URL-struct.
+       * lisp/url/url-parse.el (url-path-and-query): Do not artificially turn empty
+       path and query into nil path and query, respectively.
+       * lisp/url/url-expand.el (url-expander-remove-relative-links): Do not turn
+       empty path into an absolute ("/") path.
+       * lisp/url/url-expand.el (url-expand-file-name): Properly resolve
+       fragment-only URIs. Do not just return them unchanged.
+       * lisp/url/url-expand.el (url-default-expander): An empty path in the relative
+       reference URI should not drop the last segment.
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Let url use default file modes when copying files
+
+       * lisp/url/url-handlers.el (url-copy-file): Use default file
+       modes when copying files (bug#11400).
+
+2015-12-25  Devon Sean McCullough  <Emacs-Hacker2012@jovi.net>
+
+       Doc fix for url-http
+
+       * lisp/url/url-http.el (url-http): Document better return values
+         (bug#13187) (tiny change)
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * eww.el (eww-display-html): Support <button> tags (bug#20485).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Made ffap-url-p a defun instead of a defsubst
+
+       * lisp/ffap.el (ffap-url-p): Change from defsusbt to defun,
+       since there doesn't seem to be much of a reason for it to be a
+       defsubst (bug#18203).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a command to view files in the browser to dired
+
+       * lisp/dired.el (dired-mode-map): Add the `W' command
+       (bug#18810).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow http://user:pass@foo/ URLs again
+
+       * lisp/url/url-auth.el (url-basic-auth): Allow explicit
+       user/passwords in URLs (bug#19046).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * eww.el (eww-mode-map): Fix command name of eww-toggle-colors.
+
+2015-12-25  Samer Masterson  <samer@samertm.com>
+
+       Autoload url-insert-buffer-contents
+
+       * lisp/url/url-handlers.el: Add autoload cookie so that
+       `package-list-packages' doesn't bug out (bug#21927) (tiny change)
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow toggling colors in eww
+
+       * doc/misc/eww.texi (Basics): Mention "C".
+
+       * lisp/net/eww.el (eww-toggle-colors): New command and keystroke.
+
+       * lisp/net/shr.el (shr-use-colors): New variable.
+       (shr-colorize-region): Use it.
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Follow meta refresh tags in eww
+
+       * eww.el (eww-tag-meta): Follow meta refresh tags (bug#22234).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       More eww file name coding fixes
+
+       * eww.el (eww-decode-url-file-name): Use the base coding
+       system to check for encodability.
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Always save eww history
+
+       * eww.el (eww-setup-buffer): Always save history, even when
+       called from outside the eww buffer (bug#19638).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Default web pages to right-to-left
+
+       * eww.el (eww-mode): Most web pages are left-to-right, so make
+       that the default (bug#19801).
+
+       * shr.el (shr-tag-html): Respect "dir" attributes
+       (left-to-right, right-to-left).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make toggling checkboxes work again
+
+       * eww.el (eww-update-field): Make toggling checkboxes work
+       again (bug#21881).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't store cookies with empty names
+
+       * lisp/url/url-cookie.el (url-cookie-store): Refuse to store
+       cookies with empty names (bug#21936).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Stop rendering HTML before specdlr exhaustion
+
+       Fixes: 22117
+
+       * shr.el (shr-descend): Stop rendering before we run out of
+       specpdl room (bug#22117).
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use cl-reduce, not reduce.
+
+2015-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow several <tbody> tags in shr
+
+       * shr.el (shr-table-body): New function to find the real body
+       of a table.
+       (shr-tag-table): Use it to render several <tbody> tags in a
+       table (bug#22170).
+
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make prettier unique file names in eww
+
+       (eww-make-unique-file-name): Make unique file names by making
+       files like foo(2).jpg instead of foo(1)(2).jpg.
+
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Decode hex-encoded URLs before using them as file names
+
+       * eww.el (eww-decode-url-file-name): New function.
+       (eww-download-callback): Use it to decode file names before
+       saving them.
+
+2015-12-24  Ashish SHUKLA  <ashish.is@lostca.se>
+
+       Add FreeBSD cert bundle
+
+       * doc/misc/emacs-gnutls.texi (Help For Users): Document
+       FreeBSD bundle.
+
+       * lisp/net/gnutls.el (gnutls-trustfiles): Add FreeBSD cert bundle.
+
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow overriding shr functions from eww
+
+       * eww.el (eww-display-html): Allow overriding elements in
+       `shr-external-rendering-functions'.
+
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ignore invalid SVG images
+
+       * shr.el (shr-tag-svg): Ignore SVG images that have no width
+       or height, because these can't be displayed by ImageMagick,
+       anyway.
+
+2015-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       shr table rendering fix
+
+       * shr.el (shr-tag-table): Allow rendering body-less tables
+       that have headers.
+
+2015-12-22  Sam Steingold  <sds@gnu.org>
+
+       clipboard should still work even if interprogram-* is disabled
+
+       (clipboard-yank): When `interprogram-cut-function' is nil,
+       bind it to `gui-selection-value' - the default value.
+       (clipboard-kill-region, clipboard-kill-ring-save): When
+       `interprogram-paste-function' is nil, bind it to `gui-select-text' -
+       the default value.
+
+2015-12-18  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Fix bootstrap issue with dired-loaddefs
+
+       * lisp/dired.el: Autoloads for secondary files loaded optionally.
+
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       dired generate autoloads to non-versioned file.
+
+       * lisp/dired.el: Remove autoloads.
+       * lisp/Makefile.in: Add dired to autogenel.
+       * lisp/dired-aux.el,lisp/dired-x.el: Update file local.
+       * test/lisp/dired-tests.el: Add new test.
+
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       eieio generate autoloads to non-versioned file.
+
+       * lisp/Makefile.in: eieio-loaddefs add to autogenel.
+       * lisp/emacs-lisp/eieio.el,lisp/emacs-lisp/eieio-core.el:
+         Remove autoloads.
+       * lisp/emacs-lisp/eieio-compat.el,lisp/emacs-lisp/eieio-custom.el,
+         lisp/emacs-lisp/eieio-opt.el: Update file local.
+       * test/lisp/emacs-lisp/eieio-tests/eieio-tests.el: New test.
+
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       htmlfontify generate autoload to non-versioned file.
+
+       * lisp/Makefile.in: Add htmlfontity-loaddefs to autogenel.
+       * lisp/hfy-cmap.el: Update file local.
+       * lisp/htmlfontify.el: Remove autoloads, add require.
+       * test/lisp/htmlfontify-tests.el: Test autoload functionality.
+
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       ibuffer generate autoloads to non-versioned file.
+
+       * lisp/Makefile.in: Add ibuffer-loaddefs to autogenel.
+       * lisp/ibuf-ext.el: Update file local.
+       * lisp/ibuffer.el: Remove autoloads and add a require.
+       * test/lisp/ibuffer-tests.el: Test that autoload is working.
+
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       rmail generate autoloads to non-versioned file.
+
+       * lisp/Makefile.in: Add rmail-loaddefs.el to autogenel.
+       * lisp/mail/rmail.el: Remove autoloads, add require.
+       * lisp/mail/rmailedit.el,lisp/mail/rmailkwd.el,
+         lisp/mail/rmailmm.el,lisp/mail/rmailmsc.el,
+         lisp/mail/rmailsort.el,lisp/mail/rmailsum.el,
+         lisp/mail/undigest.el: Update file-local.
+       * test/lisp/mail/rmail-tests.el:
+
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Add autoload-force target.
+
+       * lisp/Makefile.in (autoload-force): New target.
+
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       ps-print generate autoloads to non versioned file.
+
+       * lisp/Makefile.in: Add ps-print-loaddefs.el to autogen list.
+       * lisp/ps-print.el: Remove autoloads.
+       * lisp/ps-mule.el: Update file-local.
+       * test/lisp/ps-print-tests.el: Test autoload functionality.
+
+2015-12-17  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       reftex generate autoloads to non versioned file.
+
+       * lisp/Makefile.in: Add reftex-loaddefs to autogen files
+       * lisp/textmodes/reftex.el: Remove autoloads.
+       * lisp/textmodes/reftex-auc.el,lisp/textmodes/reftex-cite.el,
+         lisp/textmodes/reftex-dcr.el,lisp/textmodes/reftex-global.el,
+         lisp/textmodes/reftex-index.el,lisp/textmodes/reftex-parse.el,
+         lisp/textmodes/reftex-ref.el,lisp/textmodes/reftex-sel.el,
+         lisp/textmodes/reftex-toc.el: Update autoload file-local.
+       * test/lisp/textmodes/reftex-tests.el: Add test of an autoloaded
+         function.
+
+2015-12-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calculator.el (calculator-define-key): Undo last change
+
+       Make map argument mandatory instead (bug#22106).
+       (calculator-add-operators): Pass the argument that's not optional any more.
+
+2015-12-03  Glenn Morris  <rgm@gnu.org>
+
+       * Makefile.in: Avoid duplication.
+
+       (have-tests): New rule.
+       (check, check-maybe): Use it.
+
+2015-12-02  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       make check unconditional, check-maybe top-level.
+
+        * Makefile.in: Add check-maybe target.
+        * test/Makefile.in: Restore unconditional behaviour to make check.
+
+2015-12-01  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Tests now support out-of-source-build.
+
+        * tests/Makefile.in,test/make-test-deps.emacs-lisp: Remove assumptions
+          about current working directory.
+
+2015-12-01  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/let-alist.el: Now an Elpa :core package
+
+2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Improve documentation and clean up.
+
+        * test/Makefile.in: Improve documentation, use EMACS variable
+          correctly, and clean up makefile rules.
+
+2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Update file headers for name change.
+
+        * (test/src/decompress-tests.el, test/src/alloc-tests.el): Update headers.
+
+2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Test files renamed to new scheme.
+
+        * (finalizer-tests.el): Now renamed alloc-tests.el
+        * (zlib-tests.el): Now renamed decompress-tests.el.
+
+2015-11-30  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Tests now depend on source files
+
+        * test/Makefile.in: Include dependences from tests to source files.
+        * test/make-test-deps.emacs-lisp: New file
+        * .gitignore: Ignore generated make include file
+
+2015-11-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/which-func.el: Improve disabling the mode
+
+       Use lexical-binding.
+       (which-func-modes, which-func-non-auto-modes, which-func-maxout)
+       (which-func, which-func-format): Remove redundant :group arg.
+       (which-func-try-to-enable): New function.
+       (which-func-ff-hook, which-function-mode): Use it.
+       (mode-line-misc-info): Add ourselves here instead of in bindings.el.
+       * lisp/bindings.el (mode-line-misc-info): Remove which-func-mode entry.
+
+2015-11-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calculator.el (calculator-define-key): Silence warning
+
+       ...about unknown calculator-mode-map.
+
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
+
+       * lisp/calculator.el: more improvements and bugfixes.
+
+       - Mark `calculator-paste-decimals' as obsolete.  (It wasn't having an
+         effect anyway.)
+
+       - Simplify `calculator-number-to-string' by throwing most of the work
+         onto `number-to-string', leaving just some tweaks for decimal inputs.
+         This leads to some minor changes, for example, pasting "1x1" in hex
+         mode would warn that "x" is ignored and result in "11" (and it wasn't
+         done in decimal mode), whereas now it just ignores everything from the
+         "x" and on and result in a "1" just like in decimal input mode.  Also,
+         overflows are left for `number-to-string' to deal with.
+
+       - `calculator-paste' is very simple as a result.
+
+       - Extend the simplified `calculator-paste': with a prefix argument it
+         pastes a string as if the characters were entered.  This can be used
+         to reduce expressions, but note that it's a simple literal operation,
+         so precedence can be messed, a number can be paster while entering a
+         number, spaces and newlines matter, etc.
+
+       - Fix a minor bug where "e+" in hex mode wouldn't use "+" as an
+         operator.
+
+       - Fix a bug in `calculator-put-value': avoid grouping in the display
+         that is used to construct `calculator-curnum'.  This would trigger
+         when pasting or getting a value from a register in some radix mode
+         with a large enough value.  Another fix: make the output radix equal
+         the input one, otherwise numbers could be converted twice.
+
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
+
+       * lisp/calculator.el: Re-do key bindings.
+
+       Use a helper function that arranges a parent keymap that binds alternate
+       case keys so if some letter key is unbound and it's un/shifted version
+       is, it will get used.  This makes the global-map trickery unnecessary.
+
+       Also switch to passing strings that name keys through `kbd'.
+
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
+
+       * lisp/calculator.el: improve radix modes
+
+       Fix prompt for some input radix with decimal output (eg, "BD" instead of
+       the incorrect "B="); also, some minor docstring tweaks for these.
+
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
+
+       * lisp/calculator.el: better reading of register names
+
+       Use `register-read-with-preview' with a dynamically bound
+       `register-alist' and a proper preview function to read register names.
+
+2015-11-29  Eli Barzilay  <eli@barzilay.org>
+
+       * lisp/calculator.el: General improvements
+
+       Use things like `when', `unless', and `push'.
+
+       Improve `calculator-last-input' so it doesn't barf when hitting `F1' in
+       non-electric mode.
+
+2015-11-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix a problem with gfilenotify in filenotify-tests.el
+
+       * test/lisp/filenotify-tests.el
+       (file-notify--test-expected-events): Remove.
+       (file-notify--test-cleanup): Do not set that variable.
+       (file-notify--test-with-events): EVENTS can also be a list of lists.
+       (file-notify-test02-events, file-notify-test04-file-validity):
+       Adapt expected result.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       * .gitignore: Adjust to changes in 'test' directory structure.
+
+2015-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix test/manual/etags/Makefile
+
+       * test/manual/etags/Makefile (ETAGS_PROG, CTAGS_PROG): Adjust to
+       changes in 'test' directory structure.
+
+2015-11-27  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Exclude resource dirs from search for tests.
+
+       * test/Makefile.in: Test file locations are now found with find
+         rather than using finds native functions.
+
+2015-11-27  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Add test targets without directory names.
+
+        * (test/Makefile.in): Extend test_template to add two targets for each
+          file.
+
+2015-11-27  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el: Require url-handlers
+
+2015-11-27  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Move elisp-mode-tests to new function names.
+
+        * test/lisp/progmodes/elisp-mode-tests.el (find-defsdefun-c-defvar-c,
+        find-defs-defun-el-defvar-c): Call `elisp--xref-find-definitions'.
+
+2015-11-27  Juanma Barranquero  <lekktu@gmail.com>
+
+       * lisp/emacs-lisp/package.el: Declare `url-insert-buffer-contents'
+
+2015-11-26  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Merge branch 'feature/standard-test-location'
+
+2015-11-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/eieio.el: Add some default implementations
+
+       (standard-class): Mark it obsolete.
+       (slot-missing): Give it a default implementation.
+       (destructor): Simplify and mark it obsolete.
+       (object-print): Give it a default implementation.
+       (eieio-change-class): Rename from change-class.
+       (change-class): Redefine as obsolete alias.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some final fixes in file notification before merging with master
+
+       * lisp/filenotify.el (file-notify--rm-descriptor): Remove WHAT arg.
+       (file-notify-callback): Improve check for `stopped' event.  Call
+       `file-notify-rm-watch' rather than `file-notify--rm-descriptor'.
+       (file-notify-add-watch): In case FILE is not a directory, call the
+       file monitor for the kqueue backend.  Otherwise, call the
+       directory monitor for the upper directory.
+
+       * src/inotify.c (inotifyevent_to_event): Extract file name from
+       watch_object if the event doesn't provide it.
+       (Finotify_add_watch): Add file name to watch_object.
+
+       * test/automated/file-notify-tests.el (file-notify--test-timeout):
+       Use different timeouts for different libraries.
+       (file-notify--test-with-events): Suppress lock files.  Flush
+       outstanding events before running the body.
+       (file-notify-test02-events, file-notify-test04-file-validity): Do
+       not skip cygwin tests.  Add additional test for file creation.
+       Adapt expected result for different backends.
+       (file-notify-test03-autorevert): Some of the tests don't work for
+       w32notify.
+       (file-notify-test06-many-events): Rename into both directions.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Rework file notifications, kqueue has problems with directory monitors
+
+       * lisp/filenotify.el (file-notify-add-watch): Call the native
+       add-watch function on the file, not on the dir.
+
+       * src/kqueue.c (kqueue_compare_dir_list): Make also bookkeeping
+       about already deleted entries.
+
+       * test/automated/auto-revert-tests.el
+       (auto-revert-test01-auto-revert-several-files): Do not call "cp -f"
+       since this deletes the target file first.
+
+       * test/automated/file-notify-tests.el (file-notify--test-event-test):
+       Make stronger checks.
+       (file-notify-test01-add-watch, file-notify-test02-events)
+       (file-notify-test04-file-validity, file-notify-test05-dir-validity):
+       Rewrite in order to call file monitors but directory monitors.
+       (file-notify-test06-many-events): Ler rename work in both directions.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Continue with pending events
+
+       * src/kqueue.c (pending_events): Remove global variable.
+       (kqueue_compare_dir_list): Create `write' event for not used
+       pending events.
+       (globals_of_kqueue): Remove initialization of pending_events.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve loops in file-notify-test06-many-events
+
+       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       Use `read-event' pauses for the `write-file' loops; otherwise
+       events are lost in inotify and gfilenotify cases.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle more complex rename operation in kqueue
+
+       * src/kqueue.c (pending_events): New variable.
+       (kqueue_compare_dir_list): Handle more complex rename operation.
+       (globals_of_kqueue): Initialize pending_events.
+
+       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       Adapt expected events in the `rename-file' case.
+       (file-notify-test06-many-events-remote): Declare.
+
+2015-11-25  Wolfgang Jenkner  <wjenkner@inode.at>
+
+       New test with a larger number of events
+
+       * test/automated/file-notify-tests.el (file-notify--test-with-events):
+       Make timeout heuristically depend on the number of events.
+
+       (file-notify-test06-many-events): Use it for new test.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Further fixes for kqueue
+
+       * lisp/filenotify.el (file-notify-callback): Raise also event if
+       directory name matches.
+       (file-notify-add-watch): Add `create' to the flags for `kqueue'.
+
+       * src/kqueue.c (kqueue_generate_event): Use watch_object as
+       argument instead of ident.  Remove callback argument.  Adapt
+       callees.  Check actions whether they are monitored flags.
+
+       * test/automated/file-notify-tests.el (file-notify--test-library):
+       New defun.
+       (file-notify-test00-availability, file-notify-test02-events)
+       (file-notify-test04-file-validity)
+       (file-notify-test05-dir-validity): Use it.
+       (file-notify-test02-events, file-notify-test04-file-validity): Add
+       `read-event' calls between different file actions, in order to
+       give the backends a chance to rais an event.  Needed especially
+       for kqueue.  In case of deleting a directory, there are two
+       `deleted' events.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Code cleanup of kqueue.c
+
+       * src/kqueue.c (kqueue_directory_listing): Skip "." and "..".
+       (kqueue_compare_dir_list): Do not loop when calling
+       directory_files_internal.  Remove checks for "." and "..", this is
+       done in kqueue_directory_listing now.
+       (Fkqueue_add_watch): Check for proper emacs_open flags.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Doc changes for kqueue
+
+       * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
+       Fix some glitches in the example.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Finish implementation in kqueue.c
+
+       * src/kqueue.c (kqueue_directory_listing, kqueue_callback):
+       Simplify access to list.
+       (kqueue_compare_dir_list): Simplify access to list.  Raise
+       `delete' event if directory does not exist any longer.  Otherwise,
+       wait until directory contents has changed.  Fix error in check.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/filenotify.el (file-notify-add-watch): Fix thinko.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       More work on kqueue
+
+       * lisp/filenotify.el (file-notify-callback): Handle also the
+       `rename' event from kqueue.
+       (file-notify-add-watch): Do not register an entry twice.
+
+       * src/kqueue.c (kqueue_directory_listing): New function.
+       (kqueue_generate_event): New argument FILE1.  Adapt callees.
+       (kqueue_compare_dir_list): Rewrite in order to make it more robust.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement directory events
+
+       * lisp/filenotify.el (file-notify-handle-event)
+       (file-notify-callback): Remove traces.
+
+       * src/kqueue.c: Include <sys/time.h>.
+       (kqueue_generate_event, kqueue_compare_dir_list): New functions.
+       (kqueue_callback): Use them.  Call kevent() with a zero timeout.
+       (Fkqueue_add_watch): Adapt docstring.  Support directory events.
+       Compute initial directory listing.  Close file descriptor in case
+       of errors.
+       (syms_of_kqueue): Declare Qcreate.
+
+2015-11-25  Wolfgang Jenkner  <wjenkner@inode.at>
+
+       Build fixes for kqueue support
+
+       * src/kqueue.c (Fkqueue_add_watch): O_BINARY is not a POSIX open(3)
+       flag.
+
+       * configure.ac (HAVE_KQUEUE): There is no pkg-config module for native
+       kqueue on *BSD.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Continue kqueue implementation
+
+       * lisp/filenotify.el (file-notify-handle-event)
+       (file-notify-callback): Enable trace messages.
+
+       * src/kqueue.c: Include also <sys/types.h>.
+       (kqueue_callback): Remove watch in case of NOTE_DELETE or NOTE_RENAME.
+       (Fkqueue_rm_watch, Fkqueue_valid_p): New functions.
+       (syms_of_kqueue): Add them.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Work on kqueue
+
+       * lisp/filenotify.el (file-notify--library)
+       (file-notify-descriptors, file-notify-callback)
+       (file-notify-add-watch, file-notify-rm-watch)
+       (file-notify-valid-p): Add kqueue support.
+
+       * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
+
+2015-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add kqueue support
+
+       * configure.ac (--with-file-notification): Add kqueue.
+       (top): Remove special test for "${HAVE_NS}" and
+       ${with_file_notification}, this is handled inside gfilenotify
+       tests.  Add kqueue tests.  Use NOTIFY_CFLAGS and NOTIFY_LIBS
+       instead of library specific variables.
+
+       * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
+
+       * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
+
+       * src/kqueue.c: New file.
+
+       * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Update elisp-mode-tests for changed file location.
+
+        * test/lisp/progmodes/elisp-mode-tests.el:
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Exclude manual tests from Makefile
+
+        * test/Makefile.in:
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Move package test files to new directory.
+
+        * test/lisp/emacs-lisp/package-tests.el: Update resoruce file location.
+        * test/data/package: Moved to test/lisp/emacs-lisp/package-resources
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Restore delete Makefiles and fix .gitignore.
+
+        * .gitignore: Update Makefiles to changed locations
+        * test/lisp/progmodes/flymake-resources/Makefile,
+          test/manual/etags/Makefile,
+          test/manual/etags/make-src/Makefile,
+          test/manual/indent/Makefile: Restored and moved to new location.
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Test infrastructure: updates after directory move
+
+        * (test/Makefile.in): Support directories several levels deep.
+        * (test/data/flymake): Rename to test/lisp/progmodes/flymake-resources.
+        * (test/lisp/progmodes/flymake-tests.el): Support renamed resource directory.
+
+2015-11-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Rename all test files to reflect source layout.
+
+        * CONTRIBUTE,Makefile.in,configure.ac: Update to reflect
+          test directory moves.
+        * test/file-organisation.org: New file.
+        * test/automated/Makefile.in
+          test/automated/data/decompress/foo.gz
+          test/automated/data/epg/pubkey.asc
+          test/automated/data/epg/seckey.asc
+          test/automated/data/files-bug18141.el.gz
+          test/automated/data/flymake/test.c
+          test/automated/data/flymake/test.pl
+          test/automated/data/package/archive-contents
+          test/automated/data/package/key.pub
+          test/automated/data/package/key.sec
+          test/automated/data/package/multi-file-0.2.3.tar
+          test/automated/data/package/multi-file-readme.txt
+          test/automated/data/package/newer-versions/archive-contents
+          test/automated/data/package/newer-versions/new-pkg-1.0.el
+          test/automated/data/package/newer-versions/simple-single-1.4.el
+          test/automated/data/package/package-test-server.py
+          test/automated/data/package/signed/archive-contents
+          test/automated/data/package/signed/archive-contents.sig
+          test/automated/data/package/signed/signed-bad-1.0.el
+          test/automated/data/package/signed/signed-bad-1.0.el.sig
+          test/automated/data/package/signed/signed-good-1.0.el
+          test/automated/data/package/signed/signed-good-1.0.el.sig
+          test/automated/data/package/simple-depend-1.0.el
+          test/automated/data/package/simple-single-1.3.el
+          test/automated/data/package/simple-single-readme.txt
+          test/automated/data/package/simple-two-depend-1.1.el
+          test/automated/abbrev-tests.el
+          test/automated/auto-revert-tests.el
+          test/automated/calc-tests.el
+          test/automated/icalendar-tests.el
+          test/automated/character-fold-tests.el
+          test/automated/comint-testsuite.el
+          test/automated/descr-text-test.el
+          test/automated/electric-tests.el
+          test/automated/cl-generic-tests.el
+          test/automated/cl-lib-tests.el
+          test/automated/eieio-test-methodinvoke.el
+          test/automated/eieio-test-persist.el
+          test/automated/eieio-tests.el
+          test/automated/ert-tests.el
+          test/automated/ert-x-tests.el
+          test/automated/generator-tests.el
+          test/automated/let-alist.el
+          test/automated/map-tests.el
+          test/automated/advice-tests.el
+          test/automated/package-test.el
+          test/automated/pcase-tests.el
+          test/automated/regexp-tests.el
+          test/automated/seq-tests.el
+          test/automated/subr-x-tests.el
+          test/automated/tabulated-list-test.el
+          test/automated/thunk-tests.el
+          test/automated/timer-tests.el
+          test/automated/epg-tests.el
+          test/automated/eshell.el
+          test/automated/faces-tests.el
+          test/automated/file-notify-tests.el
+          test/automated/auth-source-tests.el
+          test/automated/gnus-tests.el
+          test/automated/message-mode-tests.el
+          test/automated/help-fns.el
+          test/automated/imenu-test.el
+          test/automated/info-xref.el
+          test/automated/mule-util.el
+          test/automated/isearch-tests.el
+          test/automated/json-tests.el
+          test/automated/bytecomp-tests.el
+          test/automated/coding-tests.el
+          test/automated/core-elisp-tests.el
+          test/automated/decoder-tests.el
+          test/automated/files.el
+          test/automated/font-parse-tests.el
+          test/automated/lexbind-tests.el
+          test/automated/occur-tests.el
+          test/automated/process-tests.el
+          test/automated/syntax-tests.el
+          test/automated/textprop-tests.el
+          test/automated/undo-tests.el
+          test/automated/man-tests.el
+          test/automated/completion-tests.el
+          test/automated/dbus-tests.el
+          test/automated/newsticker-tests.el
+          test/automated/sasl-scram-rfc-tests.el
+          test/automated/tramp-tests.el
+          test/automated/obarray-tests.el
+          test/automated/compile-tests.el
+          test/automated/elisp-mode-tests.el
+          test/automated/f90.el
+          test/automated/flymake-tests.el
+          test/automated/python-tests.el
+          test/automated/ruby-mode-tests.el
+          test/automated/subword-tests.el
+          test/automated/replace-tests.el
+          test/automated/simple-test.el
+          test/automated/sort-tests.el
+          test/automated/subr-tests.el
+          test/automated/reftex-tests.el
+          test/automated/sgml-mode-tests.el
+          test/automated/tildify-tests.el
+          test/automated/thingatpt.el
+          test/automated/url-future-tests.el
+          test/automated/url-util-tests.el
+          test/automated/add-log-tests.el
+          test/automated/vc-bzr.el
+          test/automated/vc-tests.el
+          test/automated/xml-parse-tests.el
+          test/BidiCharacterTest.txt
+          test/biditest.el
+          test/cedet/cedet-utests.el
+          test/cedet/ede-tests.el
+          test/cedet/semantic-ia-utest.el
+          test/cedet/semantic-tests.el
+          test/cedet/semantic-utest-c.el
+          test/cedet/semantic-utest.el
+          test/cedet/srecode-tests.el
+          test/cedet/tests/test.c
+          test/cedet/tests/test.el
+          test/cedet/tests/test.make
+          test/cedet/tests/testdoublens.cpp
+          test/cedet/tests/testdoublens.hpp
+          test/cedet/tests/testfriends.cpp
+          test/cedet/tests/testjavacomp.java
+          test/cedet/tests/testnsp.cpp
+          test/cedet/tests/testpolymorph.cpp
+          test/cedet/tests/testspp.c
+          test/cedet/tests/testsppcomplete.c
+          test/cedet/tests/testsppreplace.c
+          test/cedet/tests/testsppreplaced.c
+          test/cedet/tests/testsubclass.cpp
+          test/cedet/tests/testsubclass.hh
+          test/cedet/tests/testtypedefs.cpp
+          test/cedet/tests/testvarnames.c
+          test/etags/CTAGS.good
+          test/etags/ETAGS.good_1
+          test/etags/ETAGS.good_2
+          test/etags/ETAGS.good_3
+          test/etags/ETAGS.good_4
+          test/etags/ETAGS.good_5
+          test/etags/ETAGS.good_6
+          test/etags/a-src/empty.zz
+          test/etags/a-src/empty.zz.gz
+          test/etags/ada-src/2ataspri.adb
+          test/etags/ada-src/2ataspri.ads
+          test/etags/ada-src/etags-test-for.ada
+          test/etags/ada-src/waroquiers.ada
+          test/etags/c-src/a/b/b.c
+          test/etags/c-src/abbrev.c
+          test/etags/c-src/c.c
+          test/etags/c-src/dostorture.c
+          test/etags/c-src/emacs/src/gmalloc.c
+          test/etags/c-src/emacs/src/keyboard.c
+          test/etags/c-src/emacs/src/lisp.h
+          test/etags/c-src/emacs/src/regex.h
+          test/etags/c-src/etags.c
+          test/etags/c-src/exit.c
+          test/etags/c-src/exit.strange_suffix
+          test/etags/c-src/fail.c
+          test/etags/c-src/getopt.h
+          test/etags/c-src/h.h
+          test/etags/c-src/machsyscalls.c
+          test/etags/c-src/machsyscalls.h
+          test/etags/c-src/sysdep.h
+          test/etags/c-src/tab.c
+          test/etags/c-src/torture.c
+          test/etags/cp-src/MDiagArray2.h
+          test/etags/cp-src/Range.h
+          test/etags/cp-src/burton.cpp
+          test/etags/cp-src/c.C
+          test/etags/cp-src/clheir.cpp.gz
+          test/etags/cp-src/clheir.hpp
+          test/etags/cp-src/conway.cpp
+          test/etags/cp-src/conway.hpp
+          test/etags/cp-src/fail.C
+          test/etags/cp-src/functions.cpp
+          test/etags/cp-src/screen.cpp
+          test/etags/cp-src/screen.hpp
+          test/etags/cp-src/x.cc
+          test/etags/el-src/TAGTEST.EL
+          test/etags/el-src/emacs/lisp/progmodes/etags.el
+          test/etags/erl-src/gs_dialog.erl
+          test/etags/f-src/entry.for
+          test/etags/f-src/entry.strange.gz
+          test/etags/f-src/entry.strange_suffix
+          test/etags/forth-src/test-forth.fth
+          test/etags/html-src/algrthms.html
+          test/etags/html-src/index.shtml
+          test/etags/html-src/software.html
+          test/etags/html-src/softwarelibero.html
+          test/etags/lua-src/allegro.lua
+          test/etags/objc-src/PackInsp.h
+          test/etags/objc-src/PackInsp.m
+          test/etags/objc-src/Subprocess.h
+          test/etags/objc-src/Subprocess.m
+          test/etags/objcpp-src/SimpleCalc.H
+          test/etags/objcpp-src/SimpleCalc.M
+          test/etags/pas-src/common.pas
+          test/etags/perl-src/htlmify-cystic
+          test/etags/perl-src/kai-test.pl
+          test/etags/perl-src/yagrip.pl
+          test/etags/php-src/lce_functions.php
+          test/etags/php-src/ptest.php
+          test/etags/php-src/sendmail.php
+          test/etags/prol-src/natded.prolog
+          test/etags/prol-src/ordsets.prolog
+          test/etags/ps-src/rfc1245.ps
+          test/etags/pyt-src/server.py
+          test/etags/tex-src/gzip.texi
+          test/etags/tex-src/nonewline.tex
+          test/etags/tex-src/testenv.tex
+          test/etags/tex-src/texinfo.tex
+          test/etags/y-src/atest.y
+          test/etags/y-src/cccp.c
+          test/etags/y-src/cccp.y
+          test/etags/y-src/parse.c
+          test/etags/y-src/parse.y
+          test/indent/css-mode.css
+          test/indent/js-indent-init-dynamic.js
+          test/indent/js-indent-init-t.js
+          test/indent/js-jsx.js
+          test/indent/js.js
+          test/indent/latex-mode.tex
+          test/indent/modula2.mod
+          test/indent/nxml.xml
+          test/indent/octave.m
+          test/indent/pascal.pas
+          test/indent/perl.perl
+          test/indent/prolog.prolog
+          test/indent/ps-mode.ps
+          test/indent/ruby.rb
+          test/indent/scheme.scm
+          test/indent/scss-mode.scss
+          test/indent/sgml-mode-attribute.html
+          test/indent/shell.rc
+          test/indent/shell.sh
+          test/redisplay-testsuite.el
+          test/rmailmm.el
+          test/automated/buffer-tests.el
+          test/automated/cmds-tests.el
+          test/automated/data-tests.el
+          test/automated/finalizer-tests.el
+          test/automated/fns-tests.el
+          test/automated/inotify-test.el
+          test/automated/keymap-tests.el
+          test/automated/print-tests.el
+          test/automated/libxml-tests.el
+          test/automated/zlib-tests.el: Files Moved.
+
+2015-11-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Rework file notifications, kqueue has problems with directory monitors
+
+       * lisp/filenotify.el (file-notify-add-watch): Call the native
+       add-watch function on the file, not on the dir.
+
+       * src/kqueue.c (kqueue_compare_dir_list): Make also bookkeeping
+       about already deleted entries.
+
+       * test/automated/auto-revert-tests.el
+       (auto-revert-test01-auto-revert-several-files): Do not call "cp -f"
+       since this deletes the target file first.
+
+       * test/automated/file-notify-tests.el (file-notify--test-event-test):
+       Make stronger checks.
+       (file-notify-test01-add-watch, file-notify-test02-events)
+       (file-notify-test04-file-validity, file-notify-test05-dir-validity):
+       Rewrite in order to call file monitors but directory monitors.
+       (file-notify-test06-many-events): Ler rename work in both directions.
+
+2015-11-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Continie with pending events
+
+       * src/kqueue.c (pending_events): Remove global variable.
+       (kqueue_compare_dir_list): Create `write' event for not used
+       pending events.
+       (globals_of_kqueue): Remove initialization of pending_events.
+
+2015-11-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve loops in file-notify-test06-many-events
+
+       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       Use `read-event' pauses for the `write-file' loops; otherwise
+       events are lost in inotify and gfilenotify cases.
+
+2015-11-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle more complex rename operation in kqueue
+
+       * src/kqueue.c (pending_events): New variable.
+       (kqueue_compare_dir_list): Handle more complex rename operation.
+       (globals_of_kqueue): Initialize pending_events.
+
+       * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+       Adapt expected events in the `rename-file' case.
+       (file-notify-test06-many-events-remote): Declare.
+
+2015-11-18  Wolfgang Jenkner  <wjenkner@inode.at>
+
+       New test with a larger number of events.
+
+       * test/automated/file-notify-tests.el (file-notify--test-with-events):
+       Make timeout heuristically depend on the number of events.
+
+       (file-notify-test06-many-events): Use it for new test.
+
+2015-11-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Further fixes for kqueue.
+
+       * lisp/filenotify.el (file-notify-callback): Raise also event if
+       directory name matches.
+       (file-notify-add-watch): Add `create' to the flags for `kqueue'.
+
+       * src/kqueue.c (kqueue_generate_event): Use watch_object as
+       argument instead of ident.  Remove callback argument.  Adapt
+       callees.  Check actions whether they are monitored flags.
+
+       * test/automated/file-notify-tests.el (file-notify--test-library):
+       New defun.
+       (file-notify-test00-availability, file-notify-test02-events)
+       (file-notify-test04-file-validity)
+       (file-notify-test05-dir-validity): Use it.
+       (file-notify-test02-events, file-notify-test04-file-validity): Add
+       `read-event' calls between different file actions, in order to
+       give the backends a chance to rais an event.  Needed especially
+       for kqueue.  In case of deleting a directory, there are two
+       `deleted' events.
+
+2015-11-17  Michael Albinus  <michael.albinus@gmx.de>
+
+       Code cleanup of kqueue.c
+
+       * src/kqueue.c (kqueue_directory_listing): Skip "." and "..".
+       (kqueue_compare_dir_list): Do not loop when calling
+       directory_files_internal.  Remove checks for "." and "..", this is
+       done in kqueue_directory_listing now.
+       (Fkqueue_add_watch): Check for proper emacs_open flags.
+
+2015-11-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Doc changes for kqueue
+
+       * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
+       Fix some glitches in the example.
+
+2015-11-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Finish implementation in kqueue.c
+
+       * src/kqueue.c (kqueue_directory_listing, kqueue_callback):
+       Simplify access to list.
+       (kqueue_compare_dir_list): Simplify access to list.  Raise
+       `delete' event if directory does not exist any longer.  Otherwise,
+       wait until directory contents has changed.  Fix error in check.
+
+2015-11-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/filenotify.el (file-notify-add-watch): Fix thinko.
+
+2015-11-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       More work on kqueue
+
+       * lisp/filenotify.el (file-notify-callback): Handle also the
+       `rename' event from kqueue.
+       (file-notify-add-watch): Do not register an entry twice.
+
+       * src/kqueue.c (kqueue_directory_listing): New function.
+       (kqueue_generate_event): New argument FILE1.  Adapt callees.
+       (kqueue_compare_dir_list): Rewrite in order to make it more robust.
+
+2015-11-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement directory events
+
+       * lisp/filenotify.el (file-notify-handle-event)
+       (file-notify-callback): Remove traces.
+
+       * src/kqueue.c: Include <sys/time.h>.
+       (kqueue_generate_event, kqueue_compare_dir_list): New functions.
+       (kqueue_callback): Use them.  Call kevent() with a zero timeout.
+       (Fkqueue_add_watch): Adapt docstring.  Support directory events.
+       Compute initial directory listing.  Close file descriptor in case
+       of errors.
+       (syms_of_kqueue): Declare Qcreate.
+
+2015-11-11  Wolfgang Jenkner  <wjenkner@inode.at>
+
+       Build fixes for kqueue support.
+
+       * src/kqueue.c (Fkqueue_add_watch): O_BINARY is not a POSIX open(3)
+       flag.
+
+       * configure.ac (HAVE_KQUEUE): There is no pkg-config module for native
+       kqueue on *BSD.
+
+2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Continue kqueue implementation
+
+       * lisp/filenotify.el (file-notify-handle-event)
+       (file-notify-callback): Enable trace messages.
+
+       * src/kqueue.c: Include also <sys/types.h>.
+       (kqueue_callback): Remove watch in case of NOTE_DELETE or NOTE_RENAME.
+       (Fkqueue_rm_watch, Fkqueue_valid_p): New functions.
+       (syms_of_kqueue): Add them.
+
+2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Work on kqueue
+
+       * lisp/filenotify.el (file-notify--library)
+       (file-notify-descriptors, file-notify-callback)
+       (file-notify-add-watch, file-notify-rm-watch)
+       (file-notify-valid-p): Add kqueue support.
+
+       * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
+
+2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add kqueue support
+
+       * configure.ac (--with-file-notification): Add kqueue.
+       (top): Remove special test for "${HAVE_NS}" and
+       ${with_file_notification}, this is handled inside gfilenotify
+       tests.  Add kqueue tests.  Use NOTIFY_CFLAGS and NOTIFY_LIBS
+       instead of library specific variables.
+
+       * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
+
+       * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
+
+       * src/kqueue.c: New file.
+
+       * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
+
+2015-11-21  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       verilog-mode.el: Commentary and fix pre-Emacs 21 behavior.
+
+       * verilog-mode.el (verilog-save-font-no-change-functions):
+       Commentary and fix pre-Emacs 21 behavior.
+
+2015-11-19  Przemysław Wojnowski  <esperanto@cumego.com>
+
+       Use obarray functions from obarray.
+
+       * lisp/abbrev.el (copy-abbrev-table, abbrev-table-p, make-abbrev-table,
+         abbrev-table-get, abbrev-table-put, abbrev-table-empty-p,
+         clear-abbrev-table, define-abbrev, abbrev--symbol, abbrev-table-menu):
+         delegate to obarray.el functions.
+       * lisp/loadup.el: load obarray before abbrev
+       * test/automated/abbrev-tests.el: new tests
+
+2015-11-18  Christian Schwarzgruber  <c.schwarzgruber.cs@gmail.com>  (tiny change)
+
+       epa.el: Add option to replace original text
+
+       * lisp/epa.el (epa-replace-original-text): New user option.
+       (Bug#21947)
+
+2015-11-18  Mark Oteiza  <mvoteiza@udel.edu>
+
+       Add interactive seek command.
+
+       * lisp/mpc.el (mpc-cmd-seekcur): New function.
+       (mpc-seek-current): New command.
+       (mpc-mode-menu): Add entry for mpc-seek-current
+       (mpc-mode-map): Bind mpc-seek-current to "g"
+
+2015-11-18  Mark Oteiza  <mvoteiza@udel.edu>
+
+       Fix issue where a new tempfile was created every refresh
+
+       * lisp/mpc.el (mpc-format): Leave dir as relative path
+
+2015-11-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/cc-defs.el: Use with-silent-modifications
+
+       (c-save-buffer-state): Use with-silent-modifications when available.
+       (c--macroexpand-all): Check macroexpand-all directly rather than
+       c--mapcan-status.
+
+2015-11-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/loadup.el: Set max-lisp-eval-depth here
+
+       * lisp/Makefile.in (BIG_STACK_DEPTH, BIG_STACK_OPTS): Remove.
+       (BYTE_COMPILE_FLAGS): Adjust accordingly.
+
+2015-11-17  João Távora  <joaotavora@gmail.com>
+
+       Minor fix to comment indentation and typo in last commit
+
+       * linum.el (linum-update-window): Fix comment indentation and a
+       typo.
+
+2015-11-17  João Távora  <joaotavora@gmail.com>
+
+       linum-mode plays more nicely with other margin-setting extensions
+
+       linum.el will only modify the left margin if it needs to, and will
+       only reset the it back to 0 if it guesses that no-one has touched that
+       margin in the meantime.
+
+       As such, this is a more of a workaround than an actual fix, but fixes
+       the problems described in bug#20674 regarding the interaction with
+       modes such as darkroom-mode and olivetti-mode.
+
+       A similar fix was commited to nlinum.el in ELPA.git's
+       e7f5f549fbfb740b911fb7f33b42381ecece56d8
+
+       * linum.el (linum-delete-overlays): Restore margins more
+       criteriously.
+       (linum-update-window): Set margins more criteriously.
+
+2015-11-16  Daiki Ueno  <ueno@gnu.org>
+
+       * lisp/image-mode.el: Support encrypted file
+
+       (image-toggle-display-image): Read content from the buffer instead
+       of the file, if the buffer holds a decrypted data.  (Bug#21870)
+
+2015-11-15  Juanma Barranquero  <lekktu@gmail.com>
+
+       * lisp/progmodes/verilog-mode.el (verilog-save-buffer-state): Add backquote
+
+2015-11-15  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el: Fix a decoding issue
+
+       (package--with-response-buffer): Use `url-insert-buffer-contents'.
+       The previous code had some issues with decoding. Refactoring that
+       function allows us to use the decoding from url-handlers while still
+       treating both sync and async requests the same.
+
+       * lisp/url/url-handlers.el (url-insert-file-contents): Move some code to
+       `url-insert-buffer-contents'.
+       (url-insert-buffer-contents): New function
+
+2015-11-15  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el: Refactor -with-work-buffer-async
+
+       (package--with-work-buffer-async): Reimplement as
+       `package--with-response-buffer'.
+       (package--with-work-buffer): Mark obsolete.
+       (package--with-response-buffer): New macro. This is a more self
+       contained and less contrived version of
+       `package--with-work-buffer-async'.  It uses keyword arguments,
+       doesn't have async on the name, doesn't fallback on
+       `package--with-work-buffer', and has _much_ simpler error
+       handling.
+
+       (package--check-signature, package--download-one-archive)
+       (package-install-from-archive, describe-package-1): Use it.
+
+       (package--download-and-read-archives): Let
+       `package--download-one-archive' take care of calling
+       `package--update-downloads-in-progress'.
+
+2015-11-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/verilog-mode.el: Use with-silent-modifications
+
+       (verilog-save-buffer-state): Use with-silent-modifications when available.
+       (verilog-save-font-no-change-functions): Don't bind
+       before/after-change-functions if it's not needed.
+
+2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
+
+       * CONTRIBUTE: Remove information about feature freeze.
+
+       Merge branch 'release-process-lowercase'
+
+2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
+
+       Document the release process
+
+       * admin/notes/versioning: Add information about RC releases.
+       * admin/release-process: Document the release process.
+       * admin/authors.el (authors-ignored-files):
+       * admin/README: Change FOR-RELEASE to release-process.
+       * CONTRIBUTE:
+       * admin/notes/bugtracker: Don't mention FOR-RELEASE.
+
+2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
+
+       * admin/release-process: Rename from admin/FOR-RELEASE.
+
+2015-11-14  David Engster  <deng@randomsample.de>
+
+       gitmerge: Fix git log command
+
+       * admin/gitmerge.el (gitmerge-missing): Use '--left-only' since we
+       only want commits from the branch that is to be merged.
+       (gitmerge-setup-log-buffer): Use the same symmetric range as in
+       `gitmerge-missing'.
+
+2015-11-14  David Engster  <deng@randomsample.de>
+
+       gitmerge: Try to detect cherry-picks
+
+       * admin/gitmerge.el (gitmerge-default-branch): Change to
+       origin/emacs-25.
+       (gitmerge-missing): Use symmetric difference ('...') between
+       branch and master so that cherry-picks can be detected.
+
+2015-11-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Increment Emacs version on master branch
+
+       * lisp/cus-edit.el (customize-changed-options-previous-release):
+       Increase previous version to 24.5.
+
+       * configure.ac:
+       * msdos/sed2v2.inp: Bump version to 25.1.50.
+
+2015-11-14  Xue Fuqiao  <xfq.free@gmail.com>
+
+       Mention CONTRIBUTE in README, since it was moved from etc/ to root.
+       * etc/TODO: Remove the reference to `etc/CONTRIBUTE'.
+       * README: Mention CONTRIBUTE.
+
+2015-11-13  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       Update verilog-mode.el to 2015-11-09-b121d60-vpo
+
+       * verilog-mode.el (verilog-auto, verilog-delete-auto)
+       (verilog-modi-cache-results, verilog-save-buffer-state)
+       (verilog-save-font-no-change-functions): When internally suppressing
+       change functions, use `inhibit-modification-hooks' and call
+       `after-change-funtions' to more nicely work with user hooks.
+       Reported by Stefan Monnier.
+       (verilog-auto, verilog-delete-auto, verilog-delete-auto-buffer):
+       Create `verilog-delete-auto-buffer' to avoid double-calling
+       fontification hooks.
+       (verilog-restore-buffer-modified-p, verilog-auto)
+       (verilog-save-buffer-state): Prefer restore-buffer-modified-p over
+       set-buffer-modified-p.  Reported by Stefan Monnier.
+       (verilog-diff-auto, verilog-diff-buffers-p)
+       (verilog-diff-ignore-regexp): Add `verilog-diff-ignore-regexp'.
+       (verilog-auto-inst-port, verilog-read-sub-decls-expr): Fix
+       AUTOINST with unpacked dimensional parameters, bug981.  Reported by
+       by Amol Nagapurkar.
+       (verilog-read-decls, verilog-read-sub-decls-line): Avoid unneeded
+       properties inside internal structures.  No functional change
+       intended.
+
+2015-11-13  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use generic dispatch for xref backends
+
+       * lisp/progmodes/xref.el (xref-backend-functions):
+       New variable.
+       (xref-find-function): Remove.
+       (xref-find-backend)
+       (xref--etags-backend): New functions.
+       (xref-identifier-at-point-function)
+       (xref-identifier-completion-table-function): Remove.
+       (xref-backend-definitions, xref-backend-references)
+       (xref-backend-apropos, xref-backend-identifier-at-point)
+       (xref-backend-identifier-completion-table):
+       New generic functions.
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
+       Add `elisp--xref-backend' to the beginning of
+       `xref-backend-functions', locally.  Delete references to
+       removed functions and vars.
+       (elisp-xref-find): Remove.
+       (elisp--xref-backend): New function.
+       (elisp--xref-find-references, elisp--xref-find-apropos)
+       (elisp--xref-identifier-completion-table):
+       Turn into appropriately named generic methods.
+
+       * lisp/progmodes/etags.el (etags-xref-find): Remove.
+       (xref-backend-identifier-completion-table)
+       (xref-backend-references, xref-backend-definitions)
+       (xref-backend-apropos): New generic methods.
+
+2015-11-13  Juri Linkov  <juri@linkov.net>
+
+       Support rectangular regions for more commands
+
+       * lisp/simple.el (region-extract-function): Handle the arg
+       value ‘bounds’.
+       (region-insert-function): New function.
+       (shell-command-on-region): Add arg ‘region-noncontiguous-p’.
+       If non-nil, operate on multiple chunks.
+       (region-noncontiguous-p): New function.
+
+       * lisp/rect.el: Add function rectangle--insert-region
+       around region-insert-function.
+       (extract-rectangle-bounds): New function.
+       (rectangle--extract-region): Handle the arg value ‘bounds’.
+       (rectangle--insert-region): New function.
+
+       * lisp/emulation/cua-rect.el: Add function cua--insert-rectangle
+       around region-insert-function.
+       (cua--extract-rectangle-bounds): New function.
+       (cua--rectangle-region-extract): Handle the arg value ‘bounds’.
+
+       * lisp/replace.el (query-replace, query-replace-regexp): Add arg
+       ‘region-noncontiguous-p’.  Use ‘use-region-p’.
+       (query-replace-regexp-eval, map-query-replace-regexp)
+       (replace-string, replace-regexp): Use ‘use-region-p’.
+       (keep-lines, flush-lines, how-many): Use ‘use-region-p’.
+       (perform-replace): Add arg ‘region-noncontiguous-p’.
+       If non-nil, operate on multiple chunks.
+
+       * src/casefiddle.c (Fdowncase_region): Add arg ‘region-noncontiguous-p’.
+       If non-nil, operate on multiple chunks.  (Bug#19829)
+
+2015-11-13  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Handle multiple matches on the same line; add highlighting
+
+       * lisp/progmodes/xref.el (xref-location-marker): Interpret the
+       column value in characters.
+       (xref--collect-matches): Rename from `xref--collect-match'.
+       Search for all matches in the hit line.  Add `highlight' face to
+       the matched region in the summary.  Update both callers.
+
+2015-11-13  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Replace xref-match-bounds with xref-match-length
+
+       Relying on xref-location-marker to point to the beginning of the match
+
+       * lisp/progmodes/xref.el (xref-match-bounds): Remove.
+       (xref-match-length): Add.
+       (xref-make-match): Change the arguments.
+       (xref--match-buffer-bounds): Remove.
+       (xref-match-item): Store length, instead of end-column.
+       (xref-pulse-momentarily)
+       (xref--collect-match)
+       (xref--query-replace-1): Update accordingly.
+       (xref-query-replace): Ditto.  And check that the search results
+       are up-to-date.
+
+2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from gnulib
+
+       This incorporates:
+       2015-11-13 xalloc-oversized: improve performance with GCC 5
+       * lib/xalloc-oversized.h: Copy from gnulib.
+
+2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spruce up ftfont.c memory allocation
+
+       * src/ftfont.c (setup_otf_gstring):
+       Avoid O(N**2) behavior when reallocating.
+       (ftfont_shape_by_flt): Prefer xpalloc to xrealloc when
+       reallocating buffers; this simplifies the code.  Do not trust
+       mflt_run to leave the output areas unchanged on failure, as
+       this isn’t part of its interface spec.
+
+2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port recent XCB changes to 64-bit ‘long int’
+
+       For historical reasons, libX11 represents 32-bit values like Atoms as
+       ‘long int’ even on platforms where ‘long int’ is 64 bits.  XCB doesn’t
+       do that, so adapt the recent XCB code to behave properly on 64-bit
+       platforms.  Also, fix what appears to be a bug in the interpretation
+       of xcb_get_property_value_length, at least on my Fedora platform
+       which is running libxcb-1.11-5.fc21.
+       * src/xfns.c (x_real_pos_and_offsets):
+       * src/xterm.c (get_current_wm_state):
+       xcb_get_property_value_length returns a byte count, not a word count.
+       For 32-bit quantities, xcb_get_property_value returns a vector
+       of 32-bit words, not of (possibly 64-bit) long int.
+
+2015-11-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/undo.c (run_undoable_change): Now static.
+
+2015-11-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Remove support for ':timeout' from w32 tray notifications
+
+       * src/w32fns.c (Fw32_notification_notify): Delete the code that
+       supports ':timeout'.
+       (syms_of_w32fns): Don't DEFSYM ':timeout'.  This avoids clashes
+       with dbusbind.c when D-Bus is compiled in.
+
+       * doc/lispref/os.texi (Desktop Notifications): Don't mention
+       ':timeout'.
+
+2015-11-13  Juanma Barranquero  <lekktu@gmail.com>
+
+       * test/automated/simple-test.el: Add test for bug#20698 (bug#21885)
+       (simple-test--transpositions): New macro.
+       (simple-transpose-subr): New test.
+
+2015-11-13  Juanma Barranquero  <lekktu@gmail.com>
+
+       * lisp/progmodes/elisp-mode.el: Declare function `project-roots'
+
+2015-11-13  Juanma Barranquero  <lekktu@gmail.com>
+
+       * src/undo.c: Small fixes for previous change
+       (run_undoable_change): Mark void argument list.
+       (record_property_change): Remove unused variable `boundary'.
+
+2015-11-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Add a few more variables to redisplay--variables
+
+       * lisp/frame.el (redisplay--variables): Add bidi-paragraph-direction
+       and bidi-display-reordering to the list.
+
+2015-11-13  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/loadup.el: Enlarge the size of the hash table to 80000.
+
+2015-11-13  Eli Barzilay  <eli@barzilay.org>
+
+       Fix point positioning after transposing with negative arg
+
+       * lisp/simple.el (transpose-subr): When invoked with a negative
+       argument, move point to after the transposed text, like we do
+       when invoked with a positive argument.  (Bug#21885)
+
+2015-11-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in shr.el
+
+       * lisp/net/shr.el (shr--have-one-fringe-p): Rename from
+       have-fringes-p.  All callers changed.  Doc fix.  (Bug#21895)
+
+2015-11-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * src/w32fns.c (syms_of_w32fns) [WINDOWSNT && !HAVE_DBUS]:
+       Don't DEFSYM tray notification symbols if D-Bus is being used.
+
+2015-11-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Another fix for MinGW64 and Cygwin builds due to notifications
+
+       * src/w32fns.c: Ifdef away tray notification code if D-Bus is
+       being compiled into Emacs.
+       (syms_of_w32fns) [WINDOWSNT && !HAVE_DBUS]: Don't defsubr
+       Sw32_notification_notify and Sw32_notification_close if the code
+       is not compiled.  Reported by Andy Moreton <andrewjmoreton@gmail.com>.
+
+2015-11-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Remove intern calls and XXX comments from Fx_export_frames
+
+       * src/xfns.c (Fx_export_frames): Use Qpdf, Qpng, Qpostscript, and
+       Qsvg instead of intern calls.  Use "postscript" instead of "ps"
+       for consistency with image types.  Remove XXX comments.
+       (syms_of_xfns) <Qpdf>: DEFSYM it.
+
+2015-11-12  Eric Hanchrow  <eric.hanchrow@gmail.com>
+
+       shr: don't invoke unbound function (Bug#21895)
+
+       * lisp/net/shr.el (have-fringes-p): New function.
+       (shr-insert-document, shr-fill-text): Use it.
+
+2015-11-12  Juanma Barranquero  <lekktu@gmail.com>
+
+       * test/automated/keymaps-test.el: Fix test to make it repeatable
+
+       (keymap-store_in_keymap-FASTINT-on-nonchars): Reset Buffer-menu-mode-map
+       entry to its initial value to make the test repeatable in interactive
+       sessions (assuming it doesn't fail and crashes Emacs, of course).
+
+2015-11-12  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * test/automated/cl-lib-tests.el (cl-lib-struct-constructors):
+       Small fix.
+
+2015-11-12  Phillip Lord  <phillip.lord@newcastle.ac.uk>
+
+       The heuristic that Emacs uses to add an `undo-boundary' has been
+       reworked, as it interacts poorly with functions on `post-command-hook'
+       or `after-change-functions'.
+
+       * lisp/simple.el: New section added.
+       * src/cmds.c (remove_excessive_undo_boundaries): Now in lisp.
+       (self_insert_command): Calls simple.el to amalgamate.
+       (delete_char): Calls simple.el to amalgamate.
+       * src/keyboard.c (last_undo_boundary): Removed.
+       * src/undo.c (run_undoable_change): New function.
+
+2015-11-12  Juri Linkov  <juri@linkov.net>
+
+       Bind [?\S-\ ] to previous line command in Dired-like modes
+
+       * lisp/arc-mode.el (archive-mode-map):
+       * lisp/dired.el (dired-mode-map):
+       * lisp/proced.el (proced-mode-map):
+       * lisp/vc/vc-dir.el (vc-dir-mode-map):
+       Bind [?\S-\ ] to previous line command.
+       (Bug#20790)
+
+2015-11-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the MinGW64 and Cygwin-w32 builds
+
+       * src/w32fns.c (MYNOTIFYICONDATAW_V1_SIZE)
+       (MYNOTIFYICONDATAW_V2_SIZE, MYNOTIFYICONDATAW_V3_SIZE): Define and
+       use instead of the corresponding NOTIFYICONDATAW_Vn_SIZE macros,
+       which cause trouble with MinGW42 headers.  Ifdef away tray
+       notifications code for Cygwin.  Reported by Andy Moreton
+       <andrewjmoreton@gmail.com>.
+
+2015-11-12  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Enable sorting of JSON object keys when encoding
+
+       * lisp/json.el (json-encoding-object-sort-predicate): New variable
+       for specifying a sorting predicate for JSON objects during encoding.
+       (json--plist-to-alist): New utility function.
+       (json-encode-hash-table): Re-use `json-encode-alist' when object keys
+       are to be sorted.
+       (json-encode-alist): Sort output by
+       `json-encoding-object-sort-predicate, when set.
+       (json-encode-plist): Re-use `json-encode-alist' when object keys are
+       to be sorted.
+       (json-pretty-print-buffer-ordered): New command to pretty print the
+       buffer with object keys sorted alphabetically.
+       (json-pretty-print-ordered): New command to pretty print the region
+       with object keys sorted alphabetically.
+
+       * test/automated/json-tests.el (test-json-plist-to-alist)
+       (test-json-encode-plist, test-json-encode-hash-table)
+       (test-json-encode-alist-with-sort-predicate)
+       (test-json-encode-plist-with-sort-predicate): New tests.
+
+       * etc/NEWS: Add an entry for the new commands.
+
+2015-11-12  Juanma Barranquero  <lekktu@gmail.com>
+
+       * test/automated/keymap-tests.el: New test file.
+
+2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
+
+       Speed up x_real_pos_and_offsets using XCB
+
+       * src/xfns.c (x_real_pos_and_offsets) [USE_XCB]: Add XCB flavors of
+       all X calls, and pipeline requests when possible, collecting results
+       later.  Eliminate use of x_catch_errors (and thus XSync) in XCB case.
+
+2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
+
+       Enable use of XCB for checking window manager state
+
+       * src/xterm.c (get_current_wm_state) [USE_XCB]: Use XCB calls instead
+       of XGetWindowProperty plus error-catching, since we can explicitly
+       check for errors in the XCB version.  This eliminates 3 XSync calls on
+       top of the round-trip actually fetching the information.
+
+2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
+
+       Detect XCB and save a connection handle
+
+       * configure.ac: If using X11, check for XCB libraries and header.
+       * src/Makefile.in (XCB_LIBS): Define.
+       (LIBX_EXTRA): Include it.
+
+       * src/xterm.h [USE_XCB]: Include X11/Xlib-xcb.h.
+       (struct x_display_info) [USE_XCB]: Add an XCB connection handle field.
+       * src/xterm.c (x_term_init) [USE_XCB]: Initialize the new field.
+
+2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
+
+       Reduce some data dependencies between X calls
+
+       Gains nothing in the traditional-Xlib code, but more closely aligns
+       with how the XCB version will work.
+
+       * src/xfns.c (x_real_pos_and_offsets): When translating coordinates,
+       send coordinates (0,0) to the X server and add in the real coordinates
+       after getting the response.  Move XGetGeometry for outer window inside
+       error-trapping block.  Use DPY variable more, since it's available.
+
+2015-11-12  Ken Raeburn  <raeburn@raeburn.org>
+
+       Use color cache for creating bitmap
+
+       * src/image.c (x_create_bitmap_from_xpm_data) [ALLOC_XPM_COLORS]:
+       Set attributes to use the caching color allocator.  Initialize and
+       free the cache.
+
+2015-11-12  Eli Barzilay  <eli@barzilay.org>
+
+       Add "^" to the interactive specs of `dired-next/previous-line'
+
+       * lisp/dired.el (dired-next-line, dired-previous-line): It makes sense
+       to bind these commands to the arrow keys, and that means that they work
+       better with a "^" in the `interactive' declaration so selection works
+       as expected.
+
+2015-11-11  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       Sync with soap-client repository, version 3.0.2
+
+       * soap-client.el: Bump version to 3.0.2.
+
+       * soap-client.el (soap-warning): Use format, not format-message.
+
+       * soap-client.el: Add cl-lib to Package-Requires.  Require cl-lib.
+       (soap-validate-xs-simple-type): Use cl-labels instead of cl-flet.
+
+       * soap-client.el: Support Emacs versions that do not have
+       define-error.
+
+       * soap-inspect.el: Remove version header.
+
+       * soap-client.el, soap-inspect.el, jira2.el: Fix first line header
+       format.
+
+2015-11-11  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Respect users' settings of open-paren-in-column-0-is-defun-start
+
+       * lisp/progmodes/cc-engine.el (c-backward-single-comment)
+       (c-backward-comments, c-invalidate-state-cache-1, c-parse-state-1)
+       (c-guess-basic-syntax):
+       Remove bindings of open-paren-in-column-0-is-defun-start to nil.
+       (c-get-fallback-scan-pos): "New" function (existed several years ago).
+       (c-parse-state-get-strategy): Reintroduce the 'BOD strategy, using
+       c-get-fallback-scan-pos.
+       (c-parse-state-1): Handle 'BOD strategy.
+
+       * lisp/progmodes/cc-mode.el (c-before-change, c-after-change)
+       (c-font-lock-fontify-region): Remove bindings of
+       open-paren-in-column-0-is-defun-start to nil.
+
+       * doc/misc/cc-mode.texi (Performance Issues)
+       (Limitations and Known Bugs): Fix mix up between @chapter and @appendix.
+
+2015-11-11  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/obarray.el: Fix shadowed variables.
+       (obarray-map, obarray-remove, obarray-put, obarray-get):
+       Change OBARRAY arg to OB to avoid shadowing ‘obarray’.
+
+2015-11-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid error in submitting a form with EWW
+
+       * lisp/gnus/mm-url.el (mm-url-form-encode-xwfu): Allow argument
+       CHUNK to be nil.  (Bug#21881)
+
+2015-11-11  Nicolas Petton  <nicolas@petton.fr>
+
+       Rename seq-p and map-p to seqp and mapp
+
+       * lisp/emacs-lisp/seq.el (seqp): New name.
+       * lisp/emacs-lisp/map.el (mapp): New name.
+       * doc/lispref/sequences.texi: Update the documentation for seqp.
+       * test/automated/map-tests.el: Update the tests for mapp.
+
+2015-11-11  Nicolas Petton  <nicolas@petton.fr>
+
+       Rename obarray-p to obarrayp
+
+       * lisp/obarray.el (obarrayp): New name.
+       * test/automated/obarray-tests.el: Update the tests.
+
+2015-11-11  Nicolas Petton  <nicolas@petton.fr>
+
+       Rename obarray-foreach to obarray-map
+
+       * lisp/obarray.el (obarray-map): New name.
+       * test/automated/obarray-tests.el: Update the corresponding tests.
+
+2015-11-11  Przemysław Wojnowski  <esperanto@cumego.com>
+
+       New file with obarray functions
+
+       * lisp/obarray.el: Basic obarray functions extracted from abbrev.el.
+       * test/automated/obarray-tests.el: New file.
+
+2015-11-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Implement tray notifications for MS-Windows
+
+       * src/w32fns.c (MY_NOTIFYICONDATAW): New typedef.
+       (NOTIFYICONDATAW_V1_SIZE, NOTIFYICONDATAW_V2_SIZE)
+       (NOTIFYICONDATAW_V3_SIZE, NIF_INFO, NIIF_NONE, NIIF_INFO)
+       (NIIF_WARNING, NIIF_ERROR, EMACS_TRAY_NOTIFICATION_ID)
+       (EMACS_NOTIFICATION_MSG): New macros.
+       (NI_Severity): New enumeration.
+       (get_dll_version, utf8_mbslen_lim, add_tray_notification)
+       (delete_tray_notification, Fw32_notification_notify)
+       (Fw32_notification_close): New functions.
+       (syms_of_w32fns): Defsubr functions exposed to Lisp.  DEFSYM
+       keywords used by w32-notification-notify.
+
+       * doc/lispref/os.texi (Desktop Notifications): Describe the native
+       w32 tray notifications.
+
+2015-11-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Optimize `file-equal-p' and `file-in-directory-p' in Tramp
+
+       * lisp/net/tramp.el (tramp-handle-file-equal-p)
+       (tramp-handle-file-in-directory-p): New defuns.  Suggested by
+       Harvey Chapman <hchapman@3gfp.com>.
+
+       * 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): Use them.
+
+2015-11-10  Karl Fogel  <kfogel@red-bean.com>
+
+       * CONTRIBUTE: Encourage adding tests.
+
+       Based on this post from John Wiegley:
+
+         From: "John Wiegley" <johnw@newartisans.com>
+         Subject: Re: [Emacs-diffs] master 1f02cbe: Fix bug#21766 and add test
+         To: Juanma Barranquero <lekktu@gmail.com>
+         Cc: emacs-diffs@gnu.org, bruce.connor.am@gmail.com,
+             emacs-devel <emacs-devel@gnu.org>
+         Date: Wed, 28 Oct 2015 18:45:29 -0700
+         Message-ID: <m2y4emqwg6.fsf@newartisans.com>
+
+         https://lists.gnu.org/archive/html/emacs-devel/2015-10/msg02372.html
+
+2015-11-10  David Reitter  <david.reitter@gmail.com>
+
+       Avoid creating notification objects when possible
+
+       * src/nsterm.m (windowWillEnterFullScreen, windowWillExitFullScreen:)
+       (windowDidEnterFullScreen, windowDidExitFullScreen): Provide convenience
+       functions that do not require a notification object.  When needed,
+       define NSWindowDidEnterFullScreenNotification to allow for compilation
+       on OS X 10.6.8.
+
+2015-11-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Move INTEGER_TO_CONS body out of .h file
+
+       * src/data.c (INTBIG_TO_LISP): New macro, with most
+       of the contents of the old INTEGER_TO_CONS.
+       (intbig_to_lisp, uintbig_to_lisp): New functions.
+       * src/lisp.h (INTEGER_TO_CONS):
+       Simplify by using EXPR_SIGNED and the new functions.
+       This shrinks code size a bit, and makes it easier to
+       put a breakpoint on handling of large integers.
+
+2015-11-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from gnulib
+
+       This incorporates:
+       2015-11-10 intprops: new public macro EXPR_SIGNED
+       2015-11-10 intprops: fix typo in clang port
+       * lib/intprops.h: Copy from gnulib.
+
+2015-11-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling fixes
+
+       * lisp/net/soap-inspect.el (soap-inspect-xs-simple-type):
+       Fix misspelling in output.
+
+2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * doc/lispref/variables.texi (Directory Local Variables):
+       Document dir-locals wildcards.
+
+       * lisp/files.el (dir-locals-file): Point to Info node.
+
+       * doc/emacs/custom.texi (Directory Variables):
+       Document dir-locals wildcards.
+
+       * etc/NEWS: Document new functionality.
+
+2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/files.el: Don't allow customization of dir-locals sorting.
+       In retrospect, this is not a good idea for the same reason that
+       `dir-locals-file' is a defconst, because it is important that this
+       behaviour be "uniform across different environments and users".
+       Sure, the user can still change the sorting with a hack, but we
+       shouldn't encourage them to change it.
+       (dir-locals--all-files): Return list in the order returned by
+       `file-expand-wildcards'.
+       (file-expand-wildcards): Document the sorting predicate used.
+       (dir-locals-sort-predicate): Delete variable.
+
+2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/files.el (dir-locals-read-from-file): Better handle errors.
+
+       * lisp/isearch.el (search-default-regexp-mode): Change default value.
+
+2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/files.el (dir-locals-find-file): Don't stop at unreadable files.
+       `locate-dominating-file' will now keep looking if the files it finds in
+       a given directory are unreadable (or not files).
+
+2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/files.el (dir-locals-file): Allow wildcards.
+       (dir-locals-find-file, dir-locals-collect-variables)
+       (dir-locals-read-from-file): Update accordingly.
+       (hack-dir-local-variables): Rename a local variable.
+
+       * lisp/files-x.el (modify-dir-local-variable): Update accordingly.
+
+       * lisp/help-fns.el (describe-variable): Update accordingly.
+
+       * .gitignore: Add .dir-locals?.el.
+
+2015-11-10  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/map.el (map-merge-with): New function.
+
+       * test/automated/map-tests.el (test-map-merge-with): New test.
+
+2015-11-09  Karl Fogel  <kfogel@red-bean.com>
+
+       Fix some recently-perturbed bookmark autoloads
+
+       * lisp/bookmark.el (bookmark-set-internal): Remove unnecessary autoload.
+       (bookmark-set): Restore autoload.
+       (bookmark-set-no-overwrite): Add autoload.
+
+       Thanks to Juanma Barranquero for noticing the autoload problems
+       introduced by my recent commit adding/changing the above functions
+       (Sun Nov 8 14:16:43 2015 -0500, git commit 3812e17978).
+
+2015-11-09  Noah Friedman  <friedman@splode.com>
+
+       * etc/emacs-buffer.gdb (ydump-buffer): Handle case where gap is at
+       the start of buffer.  I don't recall if older versions of gdb were
+       less strict but you cannot dump a 0-length range in gdb 7.9.1.
+
+2015-11-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * lisp/progmodes/project.el: Update Commentary.
+
+       Merge branch 'project-next'
+
+2015-11-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fold `project-ask-user' into `project-current'
+
+       * lisp/progmodes/project.el (project-find-functions):
+       Remove `project-ask-user'.
+       (project-ask-user): Remove function and the corresponding
+       `project-roots' implementation.
+       (project-current): Add a new argument, MAYBE-PROMPT.  Prompt the
+       user in case there's no project in the current directory.  Update
+       all callers.
+
+2015-11-09  Karl Fogel  <kfogel@red-bean.com>
+
+       When VC detects a conflict, specify which file
+
+       * lisp/vc/vc.el (vc-message-unresolved-conflicts): New function.
+       * lisp/vc/vc-svn.el (vc-svn-find-file-hook):
+       * lisp/vc/vc-hg.el (vc-hg-find-file-hook):
+       * lisp/vc/vc-bzr.el (vc-bzr-find-file-hook):
+       * lisp/vc/vc-git.el (vc-git-find-file-hook): Use above new function
+         to display a standard message that specifies the conflicted file.
+
+       Before this change, the message VC used for indicating a conflicted
+       file was just "There are unresolved conflicts in this file" without
+       naming the file (and this language was duplicated in several places).
+       After this change, it's "There are unresolved conflicts in file FOO"
+       (and this language is now centralized in one function in vc.el).
+
+       Justification: It's important for the message to name the conflicted
+       file because the moment when VC realizes a file is conflicted does not
+       always come interactively.  For example, some people automatically
+       find a set of Org Mode files on startup, and may keep those .org files
+       under version control.  If any of the files are conflicted, the user
+       just sees some messages fly by, and might later check the "*Messages*"
+       buffer to find out what files were conflicted.  I'm not saying this
+       happened to me or anything; it's a purely hypothetical example.
+
+2015-11-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix assertion violation in define-key
+
+       * src/keymap.c (store_in_keymap): Don't use XFASTINT on non-character
+       objects.  Reported by Drew Adams <drew.adams@oracle.com>
+       and Juanma Barranquero <lekktu@gmail.com>.
+
+2015-11-09  Dima Kogan  <dima@secretsauce.net>
+
+       Fix a memory leak in GC of font cache
+
+       * src/alloc.c (compact_font_cache_entry): Don't GC unmarked font
+       entities if some of the fonts it references are marked.  This
+       plugs a memory leak.  (Bug#21556)
+
+2015-11-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Use INT_ADD_WRAPV etc. to check integer overflow
+
+       * src/alloc.c (xnmalloc, xnrealloc, xpalloc, Fmake_string):
+       * src/buffer.c (record_overlay_string, overlay_strings):
+       * src/casefiddle.c (casify_object):
+       * src/ccl.c (Fccl_execute_on_string):
+       * src/character.c (char_width, c_string_width, lisp_string_width)
+       (count_size_as_multibyte, string_escape_byte8):
+       * src/coding.c (coding_alloc_by_realloc, produce_chars):
+       * src/data.c (arith_driver):
+       * src/dispnew.c (realloc_glyph_pool, init_display):
+       * src/editfns.c (styled_format):
+       * src/fns.c (Ffillarray):
+       * src/ftfont.c (ftfont_shape_by_flt):
+       * src/gnutls.c (gnutls_hex_string):
+       * src/gtkutil.c (get_utf8_string):
+       * src/image.c (x_to_xcolors, x_detect_edges, png_load_body):
+       * src/keymap.c (Fkey_description):
+       * src/lisp.h (SAFE_ALLOCA_LISP):
+       * src/term.c (encode_terminal_code):
+       * src/tparam.c (tparam1):
+       * src/xselect.c (x_property_data_to_lisp):
+       * src/xsmfns.c (smc_save_yourself_CB):
+       * src/xterm.c (x_term_init):
+       When checking for integer overflow, prefer INT_MULTIPLY_WRAPV to
+       more-complicated code involving division and/or
+       INT_MULTIPLY_OVERFLOW, and similarly for INT_ADD_WRAPV and
+       subtraction and/or INT_ADD_OVERFLOW.
+       * src/casefiddle.c (casify_object): Simplify multibyte size check.
+       * src/character.c: Remove some obsolete ‘#ifdef emacs’s.
+       * src/data.c (arith_driver): Also check for division overflow,
+       as that’s now possible given that the accumulator can now contain
+       any Emacs integer.
+       * src/lisp.h (lisp_word_count): Remove; no longer used.
+
+2015-11-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make sure that the ignore file exists
+
+       * lisp/vc/vc.el (vc-default-ignore-completion-table):
+       Make sure that the ignore file exists.
+
+2015-11-08  Michael Sperber  <mike@xemacs.org>
+
+       * gnus-sum.el (gnus-summary-backend-map): Bind B-backspace to
+       `gnus-summary-delete-article` in a way that also works on XEmacs.
+
+2015-11-08  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Add support for retrieving paths to JSON elements
+
+       Add support for retrieving the path to a JSON element. This can for
+       instance be useful to retrieve paths in deeply nested JSON
+       structures.
+
+       * lisp/json.el (json-pre-element-read-function)
+       (json-post-element-read-function): New variables to hold pre- and post
+       read callback functions for `json-read-array' and `json-read-object'.
+       (json--path): New variable used internally by `json-path-to-position'.
+       (json--record-path, json--check-position): New functions used
+       internally by `json-path-to-position'.
+       (json-path-to-position): New function for retrieving the path to a
+       JSON element at a given position.
+       (json-read-object, json-read-array): Call
+       `json-pre-element-read-function' and `json-post-element-read-function'
+       when set.
+
+       * test/automated/json-tests.el (test-json-path-to-position-with-objects)
+       (test-json-path-to-position-with-arrays)
+       (test-json-path-to-position-no-match): New tests for
+       `json-path-to-position'.
+
+2015-11-08  Karl Fogel  <kfogel@red-bean.com>
+
+       * etc/NEWS: Mention new `bookmark-set-no-overwrite'.
+
+       This really should been part of my previous commit
+       (Sun Nov 8 14:16:43 2015 -0500, git commit 3812e17978).
+
+2015-11-08  Karl Fogel  <kfogel@red-bean.com>
+
+       Offer non-overwrite bookmark setter (Bug#15746)
+
+       * lisp/bookmark.el (bookmark-set-internal): New helper function to do
+       what `bookmark-set' used to do, but with more choices for overwrite
+       vs push, and with minor changes to the interactive prompt format.
+       (bookmark-set): Rewrite as wrapper around above.
+       If overwriting, inform the user of that in the prompt.
+       (bookmark-set-no-overwrite): New function, also done as wrapper.
+       Bind to "M" in `ctl-x-r-map' autoloads.
+       (bookmark-map): Similarly bind "M" here.
+
+2015-11-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/unexelf.c (NEW_PROGRAM_H): Remove unused macro (Bug#20614).
+
+2015-11-08  Alan Modra  <amodra@gmail.com>
+
+       ELF unexec: Don't insert a new section
+
+       Reuse the .bss section instead, making it SHT_PROGBITS.  This way we
+       don't need to mess with symbol st_shndx, or section sh_link and
+       sh_info.
+
+       This does lead to eu-elflint complaints about symbols defined in .bss
+       with a needed version, because normally it is undefined symbols that
+       have needed versions;  Defined symbols have version definitions.
+       The exception is symbols defined by the linker in .dynbss for
+       variables copied from a shared library in order to avoid text
+       relocations, with copy relocs to copy their initial values from the
+       shared library.  These symbols are both defined and have needed
+       versions, and eu-elflink only expects to see them in SHT_NOBITS
+       sections.  Of course there is no real problem with having such symbols
+       in SHT_PROGBITS sections.  glibc ld.so handles them fine.
+
+       * src/unexelf.c: Delete outdated comments.
+       (PATCH_INDEX): Delete.
+       (find_section): Delete.
+       (unexec): Don't add a new section.  Instead reuse the last bss
+       section, extending it to cover dumped data.  Make bss sections
+       SHT_PROGBITS.  Remove all patching of sh_link, sh_info and
+       st_shndx.  Rename bss sections.
+
+2015-11-08  Alan Modra  <amodra@gmail.com>
+
+       ELF unexec: Drive from PT_LOAD header rather than sections
+
+       This rewrites bss handling in the ELF unexec code.  Finding bss
+       sections by name results in complicated code that
+       - does not account for all names of possible bss sections,
+       - assumes specific ordering of bss sections,
+       - can wrongly choose a SHT_NOBITS section not in the bss segment,
+       - incorrectly calculates bss size (no accounting for alignment gaps),
+       - assumes .data and .bss are in the same segment.
+
+       All of these problems and more are solved by finding the bss segment
+       in PT_LOAD headers, ie. the address range included in p_memsz but not
+       p_filesz of the last PT_LOAD header, then matching SHT_NOBITS sections
+       in that address range.
+
+       * src/unexelf.c: Delete old ppc comment.
+       (OLD_PROGRAM_H): Define.
+       (round_up): Delete.
+       (unexec): Don't search for bss style sections by name.  Instead,
+       use the last PT_LOAD header address range covered by p_memsz
+       but not p_filesz and match any SHT_NOBITS section in that
+       address range.  Simplify initialisation of section header vars.
+       Don't assume that section headers are above bss segment.  Move
+       copying of bss area out of section loop.  Align .data2 section
+       to 1, since it now covers the entire bss area.  For SHT_NOBITS
+       sections in the bss segment, leave sh_addr and sh_addralign
+       unchanged, but correct sh_offset.  Clear memory corresponding
+       to SHT_NOBITS .plt section.  Delete comment and hacks for
+       sections partly overlapping bss range now that the full range
+       is properly calculated.  Delete now dead .sbss code.
+       (Bug#20614)
+
+2015-11-08  Alan Modra  <amodra@gmail.com>
+
+       ELF unexec: R_*_NONE relocs
+
+       These should be ignored on all targets.
+
+       * src/unexelf.c (unexec): Ignore R_*_NONE relocs for any target,
+       not just Alpha.  Comment on reloc size assumption.
+
+2015-11-08  Alan Modra  <amodra@gmail.com>
+
+       ELF unexec: _OBJC_ symbols in bss sections
+
+       This code assumed that there was only one bss section.  Rather than
+       checking for a particular index, check the section type.  Also, handle
+       the possibility that the section was SHT_NOBITS originally and is
+       unchanged, in which case no clearing is needed (and sh_offset isn't
+       necessarily valid, which can lead to a wild memset).
+
+       * src/unexelf.c (unexec): Properly handle _OBJC_ symbols in
+       bss sections.
+
+2015-11-08  Alan Modra  <amodra@gmail.com>
+
+       ELF unexec: Symbol table patching
+
+       No st_shndx value larger than SHN_LORESERVE should be changed.
+       * src/unexelf.c (unexec): Don't adjust any st_shndx larger than
+       SHN_LORESERVE.  Error on SHN_XINDEX.
+
+2015-11-08  Alan Modra  <amodra@gmail.com>
+
+       ELF unexec: Merge Alpha and MIPS COFF debug handling
+
+       * src/unexelf.c (unexec): Merge Alpha and MIPS COFF debug handling.
+       Don't find .mdebug section index, find the section in the loop.
+       Allow for unlikely possibility that .mdebug is located at sh_offset
+       before bss segment, by calculating move from difference in
+       sh_offset rather than just assuming new_data2_size.  Simplify
+       cbLineOffset handling.
+
+2015-11-08  Alan Modra  <amodra@gmail.com>
+
+       ELF unexec: Tidy code
+
+       Separate out some of the more mechanical changes so following patches
+       are smaller.
+
+       * src/unexelf.c (unexec): Rearrange initialisation of program
+       header vars.  Use pointer vars in loops rather than indexing
+       section header array via macros.  Simplify _OBJC_ sym code
+       and reloc handling code.
+
+2015-11-08  Alan Modra  <amodra@gmail.com>
+
+       ELF unexec: Correct section header index
+
+       First a small fix.  The code incorrectly uses "NEW_SECTION_H (n)" when
+       it should have been using "NEW_SECTION_H (nn)" to find the name of the
+       section currently being processed.  Of course, before the bss
+       sections, n and nn have the same value, so this doesn't matter except
+       in the case of .sbss.  For .sbss this probably meant .bss (most likely
+       the next section) was copied from memory.  A later patch removes the
+       bogus .sbss handling anyway.
+
+       * src/unexelf.c (unexec): Use correct index to look up names.
+
+2015-11-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#21841
+
+       * lisp/filenotify.el (file-notify--rm-descriptor):
+       Use `descriptor' instead of computing its value.
+       (file-notify--descriptor): Additional argument FILE.  Adapt all callees.
+       (file-notify-rm-watch): Use `descriptor' when calling file name handler.
+       (Bug#21841)
+
+2015-11-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Remove dirs in vc project roots from the the vc project library roots
+
+       * lisp/progmodes/project.el (project-library-roots):
+       Remove directories inside the project roots from the result.
+       (http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg00536.html)
+
+2015-11-07  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Move and rename xref-find-regexp to the project package
+
+       * lisp/progmodes/project.el (project-find-regexp)
+       (project--read-regexp)
+       (project--find-regexp-in): New functions.
+
+       * lisp/progmodes/xref.el (xref--find-xrefs): Extract from
+       xref--show-xrefs.  Use in existing callers in place of that
+       function.
+       (xref--show-xrefs): Only do the "show" part.
+       (xref-find-regexp): Rename, more or less, to
+       project-or-libraries-find-regexp.
+
+2015-11-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Abolish temporary buffer management for xref
+
+       * lisp/progmodes/xref.el (xref--temporary-buffers)
+       (xref--current)
+       (xref--inhibit-mark-current)
+       (xref--mark-selected): Remove.  Remove all references.
+       (xref--show-xrefs): Do not construct the
+       list of the temporary buffers, nor pass it along.
+
+2015-11-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Rename "search path" to "library roots"
+
+       * lisp/emacs-lisp/cl-seq.el (cl-set-difference): Retain the order
+       of the elements from CL-LIST1.
+
+       * test/automated/cl-lib-tests.el (cl-lib-test-set-functions):
+       Update WRT to the above change.
+
+       * lisp/progmodes/project.el (project-search-path-function): Rename
+       to project-library-roots-function, update the documentation and
+       references.
+       (project-search-path): Likewise, to project-library-roots.
+       (project-roots): Clarify documentation.
+       (project-vc-search-path): Likewise, to project-vc-library-roots.
+       (project-library-roots): In addition to the renames, thread the
+       results through file-name-as-directory.
+       (project-prune-directories): Accept a variable number of
+       arguments.  Rename to project-combine-directories.
+       (project-subtract-directories): New function.
+
+       * lisp/progmodes/elisp-mode.el (elisp--xref-find-references):
+       Append project-roots and project-library-roots together.
+
+       * lisp/progmodes/etags.el (etags--xref-find-references): Ditto.
+
 2015-11-08  Paul Eggert  <eggert@cs.ucla.edu>
 
        Prefer xpalloc to doubling buffers by hand
 
 This file records repository revisions from
 commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
-commit 8a8613bcf4227dfe46a694b761e9575bdf6ca2ce (inclusive).
+commit 531b28b4d96adf39d853fcb5e0bba7251fcce4b6 (inclusive).
 See ChangeLog.1 for earlier changes.
 
 ;; Local Variables:
index 1245f76fabfb656caf23467ed5a67507a72fe514..57e29d7f983857ce6bd6b542728ac9599712e05c 100644 (file)
@@ -921,14 +921,17 @@ extraclean: $(extraclean_dirs:=_extraclean)
 TAGS tags: lib lib-src src
        $(MAKE) -C src tags
 
-check: all
-       @if test ! -d test/automated; then \
+.PHONY: have-tests
+have-tests:
+       @if test ! -d test; then \
          echo "You do not seem to have the test/ directory."; \
          echo "Maybe you are using a release tarfile, rather than a repository checkout."; \
-       else \
-         $(MAKE) -C test/automated check; \
+        exit 1; \
        fi
 
+check check-maybe: have-tests all
+       $(MAKE) -C test $@
+
 dist:
        cd ${srcdir}; ./make-dist
 
@@ -943,7 +946,7 @@ $(DOCS):
        $(MAKE) -C doc/$(subst -, ,$@)
 
 .PHONY: $(DOCS) docs pdf ps
-.PHONY: info dvi dist check html info-real info-dir check-info
+.PHONY: info dvi dist check check-maybe html info-real info-dir check-info
 
 ## TODO add etc/refcards.
 docs: $(DOCS)
diff --git a/README b/README
index 1f3de15f683017775320449a3c31489e28cab014..82a5a8f324f0eae7115e420ff183cefeab29e3be 100644 (file)
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
-This directory tree holds version 25.0.50 of GNU Emacs, the extensible,
+This directory tree holds version 25.1.50 of GNU Emacs, the extensible,
 customizable, self-documenting real-time display editor.
 
 The file INSTALL in this directory says how to build and install GNU
index c8cf2dcc565bba770c5cd99359a03e6e8500072c..69e4d28852292e04da90671ad7a167f9b6b23478 100644 (file)
@@ -48,7 +48,9 @@
 (require 'smerge-mode)
 
 (defvar gitmerge-skip-regexp
-  "back[- ]?port\\|merge\\|sync\\|re-?generate\\|bump version\\|from trunk\\|\
+  ;; We used to include "sync" in there, but in my experience it only
+  ;; caused false positives.  --Stef
+  "back[- ]?port\\|merge\\|re-?generate\\|bump version\\|from trunk\\|\
 Auto-commit"
   "Regexp matching logs of revisions that might be skipped.
 `gitmerge-missing' will ask you if it should skip any matches.")
@@ -65,7 +67,7 @@ Auto-commit"
   '((t (:strike-through t)))
   "Face for skipped commits.")
 
-(defconst gitmerge-default-branch "origin/emacs-24"
+(defconst gitmerge-default-branch "origin/emacs-25"
   "Default for branch that should be merged.")
 
 (defconst gitmerge-buffer "*gitmerge*"
@@ -183,8 +185,8 @@ if and why this commit should be skipped."
     ;; Go through the log and remember all commits that match
     ;; `gitmerge-skip-regexp' or are marked by --cherry-mark.
     (with-temp-buffer
-      (call-process "git" nil t nil "log" "--cherry-mark" from
-                   (concat "^" (car (vc-git-branches))))
+      (call-process "git" nil t nil "log" "--cherry-mark" "--left-only"
+                   (concat from "..." (car (vc-git-branches))))
       (goto-char (point-max))
       (while (re-search-backward "^commit \\(.+\\) \\([0-9a-f]+\\).*" nil t)
        (let ((cherrymark (match-string 1))
@@ -206,9 +208,9 @@ if and why this commit should be skipped."
   "Create the buffer for choosing commits."
   (with-current-buffer (get-buffer-create gitmerge-buffer)
     (erase-buffer)
-    (call-process "git" nil t nil "log"
+    (call-process "git" nil t nil "log" "--left-only"
                  "--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s"
-                 from (concat "^" (car (vc-git-branches))))
+                 (concat from "..." (car (vc-git-branches))))
     (goto-char (point-min))
     (while (looking-at "^\\([a-f0-9]+\\)")
       (let ((skipreason (gitmerge-skip-commit-p (match-string 1) commits)))
@@ -429,8 +431,14 @@ If so, add no longer conflicted files and commit."
        (when mergehead
          (with-current-buffer (get-buffer-create gitmerge-output-buffer)
            (erase-buffer)
+            ;; FIXME: We add "-m-" because the default commit message
+            ;; apparently tickles our commit hook:
+            ;;    Line longer than 78 characters in commit message
+            ;;    Line longer than 78 characters in commit message
+            ;;    Line longer than 78 characters in commit message
+            ;;    Commit aborted; please see the file CONTRIBUTE
            (unless (zerop (call-process "git" nil t nil
-                                        "commit" "--no-edit"))
+                                        "commit" "--no-edit" "-m-"))
              (error "Git error during merge - fix it manually"))))
        ;; Successfully resumed.
        t))))
index d0b55badab0ec72628511476dc1583b867fcef7c..a6f9c2a19e0011091b16b36116272a08dca61f4a 100644 (file)
@@ -44,9 +44,10 @@ branches merges bugfix commits from the "emacs-NN" branch.
 Emacs uses the "blocking bug(s)" feature of Debbugs for bugs need to
 be addressed in the next release.
 
-Currently, bug#19759 is the tracking bug for release of 25.1.  Say
-bug#123 needs to be fixed for Emacs 25.1.  Send a message to
-control@debbugs.gnu.org that says:
+Currently, bug#19759 is the tracking bug for release of 25.1 and
+bug#21966 is the tracking bug for release of 25.2.  Say bug#123 needs
+to be fixed for Emacs 25.1.  Send a message to control@debbugs.gnu.org
+that says:
 
    block 19759 by 123
 
index a5b9bd3d377de6d9275c2815f78f1c29abcae778..94007a495379bbc0a1ea855c96f855835df06e50 100644 (file)
@@ -23,7 +23,7 @@ dnl  along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 AC_PREREQ(2.65)
 dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
-AC_INIT(GNU Emacs, 25.0.50, bug-gnu-emacs@gnu.org)
+AC_INIT(GNU Emacs, 25.1.50, bug-gnu-emacs@gnu.org)
 
 dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
 dnl and then quoted again for a C string.  Separate options with spaces.
@@ -356,17 +356,18 @@ OPTION_DEFAULT_ON([zlib],[don't compile with zlib decompression support])
 OPTION_DEFAULT_OFF([modules],[compile with dynamic modules support])
 
 AC_ARG_WITH([file-notification],[AS_HELP_STRING([--with-file-notification=LIB],
- [use a file notification library (LIB one of: yes, gfile, inotify, w32, no)])],
+ [use a file notification library (LIB one of: yes, inotify, kqueue, gfile, w32, no)])],
  [ case "${withval}" in
     y | ye | yes )     val=yes ;;
     n | no )           val=no  ;;
-    g | gf | gfi | gfil | gfile )      val=gfile ;;
     i | in | ino | inot | inoti | inotif | inotify )   val=inotify ;;
+    k | kq | kqu | kque | kqueu | kqueue )     val=kqueue ;;
+    g | gf | gfi | gfil | gfile )      val=gfile ;;
     w | w3 | w32 )     val=w32 ;;
     * ) AC_MSG_ERROR(['--with-file-notification=$withval' is invalid;
-this option's value should be 'yes', 'no', 'gfile', 'inotify' or 'w32'.
+this option's value should be 'yes', 'no', 'inotify', 'kqeue', 'gfile' or 'w32'.
 'yes' is a synonym for 'w32' on MS-Windows, for 'no' on Nextstep,
-otherwise for the first of 'inotify' or 'gfile' that is usable.])
+otherwise for the first of 'inotify', 'kqueue' or 'gfile' that is usable.])
     ;;
    esac
    with_file_notification=$val
@@ -2689,12 +2690,6 @@ AC_SUBST(LIBGNUTLS_CFLAGS)
 NOTIFY_OBJ=
 NOTIFY_SUMMARY=no
 
-dnl FIXME?  Don't auto-detect on NS, but do allow someone to specify
-dnl a particular library.  This doesn't make much sense?
-if test "${HAVE_NS}" = yes && test ${with_file_notification} = yes; then
-  with_file_notification=no
-fi
-
 dnl MS Windows native file monitor is available for mingw32 only.
 case $with_file_notification,$opsys in
   w32,cygwin)
@@ -2725,16 +2720,41 @@ case $with_file_notification,$NOTIFY_OBJ in
     fi ;;
 esac
 
+dnl kqueue is available on BSD-like systems.
+case $with_file_notification,$NOTIFY_OBJ in
+  kqueue,* | yes,)
+    EMACS_CHECK_MODULES([KQUEUE], [libkqueue])
+    if test "$HAVE_KQUEUE" = "yes"; then
+       AC_DEFINE(HAVE_KQUEUE, 1, [Define to 1 to use kqueue.])
+       CPPFLAGS="$CPPFLAGS -I/usr/include/kqueue"
+       NOTIFY_CFLAGS=$KQUEUE_CFLAGS
+       NOTIFY_LIBS=$KQUEUE_LIBS
+       NOTIFY_OBJ=kqueue.o
+       NOTIFY_SUMMARY="yes -lkqueue"
+    else
+       AC_SEARCH_LIBS(kqueue, [])
+       if test "$ac_cv_search_kqueue" != no; then
+         AC_DEFINE(HAVE_KQUEUE, 1, [Define to 1 to use kqueue.])
+        NOTIFY_OBJ=kqueue.o
+        NOTIFY_SUMMARY="yes (kqueue)"
+       fi
+    fi ;;
+esac
+
 dnl g_file_monitor exists since glib 2.18.  G_FILE_MONITOR_EVENT_MOVED
 dnl has been added in glib 2.24.  It has been tested under
 dnl GNU/Linux only.
 case $with_file_notification,$NOTIFY_OBJ in
   gfile,* | yes,)
-    EMACS_CHECK_MODULES([GFILENOTIFY], [gio-2.0 >= 2.24])
-    if test "$HAVE_GFILENOTIFY" = "yes"; then
-       AC_DEFINE(HAVE_GFILENOTIFY, 1, [Define to 1 if using GFile.])
-       NOTIFY_OBJ=gfilenotify.o
-       NOTIFY_SUMMARY="yes -lgio (gfile)"
+    if test "${HAVE_NS}" != yes; then
+       EMACS_CHECK_MODULES([GFILENOTIFY], [gio-2.0 >= 2.24])
+       if test "$HAVE_GFILENOTIFY" = "yes"; then
+         AC_DEFINE(HAVE_GFILENOTIFY, 1, [Define to 1 if using GFile.])
+         NOTIFY_CFLAGS=$GFILENOTIFY_CFLAGS
+         NOTIFY_LIBS=$GFILENOTIFY_LIBS
+         NOTIFY_OBJ=gfilenotify.o
+         NOTIFY_SUMMARY="yes -lgio (gfile)"
+       fi
     fi ;;
 esac
 
@@ -2746,9 +2766,9 @@ esac
 if test -n "$NOTIFY_OBJ"; then
    AC_DEFINE(USE_FILE_NOTIFY, 1, [Define to 1 if using file notifications.])
 fi
+AC_SUBST(NOTIFY_CFLAGS)
+AC_SUBST(NOTIFY_LIBS)
 AC_SUBST(NOTIFY_OBJ)
-AC_SUBST(GFILENOTIFY_CFLAGS)
-AC_SUBST(GFILENOTIFY_LIBS)
 
 dnl Do not put whitespace before the #include statements below.
 dnl Older compilers (eg sunos4 cc) choke on it.
@@ -4111,8 +4131,8 @@ OLDCFLAGS="$CFLAGS"
 OLDLIBS="$LIBS"
 CFLAGS="$CFLAGS $GTK_CFLAGS $RSVG_CFLAGS $DBUS_CFLAGS $SETTINGS_CFLAGS"
 LIBS="$LIBS $GTK_LIBS $RSVG_LIBS $DBUS_LIBS $SETTINGS_LIBS"
-CFLAGS="$CFLAGS $GFILENOTIFY_CFLAGS $CAIRO_CFLAGS"
-LIBS="$LIBS $GFILENOTIFY_LIBS $CAIRO_LIBS"
+CFLAGS="$CFLAGS $NOTIFY_CFLAGS $CAIRO_CFLAGS"
+LIBS="$LIBS $NOTIFY_LIBS $CAIRO_LIBS"
 AC_MSG_CHECKING([whether GLib is linked in])
 AC_LINK_IFELSE([AC_LANG_PROGRAM(
        [[#include <glib.h>
@@ -4192,7 +4212,7 @@ else
   SEPCHAR=':'
 fi
 AC_DEFINE_UNQUOTED(SEPCHAR, ['$SEPCHAR'], [Character that separates PATH elements.])
-dnl This is for MinGW, and is used in test/automated/Makefile.in.
+dnl This is for MinGW, and is used in test/Makefile.in.
 dnl The MSYS Bash has heuristics for replacing ':' with ';' when it
 dnl decides that a command-line argument to be passed to a MinGW program
 dnl is a PATH-style list of directories.  But that heuristics plays it
@@ -5344,13 +5364,13 @@ AC_CONFIG_FILES([Makefile lib/Makefile lib-src/Makefile oldXMenu/Makefile \
        leim/Makefile nextstep/Makefile nt/Makefile])
 
 dnl test/ is not present in release tarfiles.
-opt_makefile=test/automated/Makefile
+opt_makefile=test/Makefile
 
 if test -f "$srcdir/$opt_makefile.in"; then
   SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES $opt_makefile"
   dnl Again, it's best not to use a variable.  Though you can add
   dnl ", [], [opt_makefile='$opt_makefile']" and it should work.
-  AC_CONFIG_FILES([test/automated/Makefile])
+  AC_CONFIG_FILES([test/Makefile])
 fi
 
 
index e7e49445b54f6e7433798bdb3e579281d95152a1..04cef3848dba5c66d7d61222f48e52e1968fe49f 100644 (file)
@@ -1414,6 +1414,13 @@ names into arguments for other Emacs commands.  It also displays what
 it added to the kill ring, so you can use it to display the list of
 currently marked files in the echo area.
 
+@kindex W @r{(Dired)}
+@findex browse-url-of-dired-file
+  If you have an HTML file in the file listing, it can be useful to
+view that file with a browser.  The @kbd{W}
+(@code{browse-url-of-dired-file}) command will use the standard
+configured browser to view that file.
+
 @kindex ( @r{(Dired)}
 @findex dired-hide-details-mode
 @vindex dired-hide-details-hide-symlink-targets
index 5b89e1ad5813ea84436637eb63e6efd454296554..92e3ee2b33cc31614759993e7de6405cfb814f91 100644 (file)
@@ -2643,9 +2643,9 @@ This function removes the tray notification given by its unique
 
 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}
-statically.  These libraries enable watching of filesystems on the
-local machine.
+like @file{inotify}, @file{kqueue}, @file{gfilenotify}, or
+@file{w32notify} statically.  These libraries enable watching of
+filesystems on the local machine.
 
 It is also possible to watch filesystems on remote machines,
 @pxref{Remote Files,, Remote Files, emacs, The GNU Emacs Manual}
@@ -2716,7 +2716,8 @@ watching @var{file} has been stopped
 Note that the @file{w32notify} library does not report
 @code{attribute-changed} events.  When some file's attribute, like
 permissions or modification time, has changed, this library reports a
-@code{changed} event.
+@code{changed} event.  Likewise, the @file{kqueue} library does not
+report reliably file attribute changes when watching a directory.
 
 The @code{stopped} event reports, that watching the file has been
 stopped.  This could be because @code{file-notify-rm-watch} was called
@@ -2755,7 +2756,7 @@ being reported.  For example:
 @group
 (write-region "bla" nil "/tmp/foo")
      @result{} Event (35025468 created "/tmp/.#foo")
-        Event (35025468 changed "/tmp/foo") [2 times]
+        Event (35025468 changed "/tmp/foo")
         Event (35025468 deleted "/tmp/.#foo")
 @end group
 
@@ -2801,14 +2802,14 @@ also makes it invalid.
 @example
 @group
 (make-directory "/tmp/foo")
-     @result{} nil
+     @result{} Event (35025468 created "/tmp/foo")
 @end group
 
 @group
 (setq desc
       (file-notify-add-watch
         "/tmp/foo" '(change) 'my-notify-callback))
-     @result{} 35025468
+     @result{} 11359632
 @end group
 
 @group
@@ -2818,32 +2819,34 @@ also makes it invalid.
 
 @group
 (write-region "bla" nil "/tmp/foo/bla")
-     @result{} Event (35025468 created "/tmp/foo/.#bla")
-        Event (35025468 created "/tmp/foo/bla")
-        Event (35025468 changed "/tmp/foo/bla")
-        Event (35025468 changed "/tmp/foo/.#bla")
+     @result{} Event (11359632 created "/tmp/foo/.#bla")
+        Event (11359632 created "/tmp/foo/bla")
+        Event (11359632 changed "/tmp/foo/bla")
+        Event (11359632 deleted "/tmp/foo/.#bla")
 @end group
 
 @group
 ;; Deleting a file in the directory doesn't invalidate the watch.
 (delete-file "/tmp/foo/bla")
-     @result{} Event (35025468 deleted "/tmp/foo/bla")
+     @result{} Event (11359632 deleted "/tmp/foo/bla")
 @end group
 
 @group
 (write-region "bla" nil "/tmp/foo/bla")
-     @result{} Event (35025468 created "/tmp/foo/.#bla")
-        Event (35025468 created "/tmp/foo/bla")
-        Event (35025468 changed "/tmp/foo/bla")
-        Event (35025468 changed "/tmp/foo/.#bla")
+     @result{} Event (11359632 created "/tmp/foo/.#bla")
+        Event (11359632 created "/tmp/foo/bla")
+        Event (11359632 changed "/tmp/foo/bla")
+        Event (11359632 deleted "/tmp/foo/.#bla")
 @end group
 
 @group
 ;; Deleting the directory invalidates the watch.
+;; Events arrive for different watch descriptors.
 (delete-directory "/tmp/foo" 'recursive)
-     @result{} Event (35025468 deleted "/tmp/foo/bla")
-        Event (35025468 deleted "/tmp/foo")
-        Event (35025468 stopped "/tmp/foo")
+     @result{} Event (35025468 deleted "/tmp/foo")
+        Event (11359632 deleted "/tmp/foo/bla")
+        Event (11359632 deleted "/tmp/foo")
+        Event (11359632 stopped "/tmp/foo")
 @end group
 
 @group
index f1347b7b3bb06b18cad21b5515942c9200907120..15cc867dc7fa4596986b27dce5ebf7e9262fbba6 100644 (file)
@@ -109,6 +109,12 @@ only display this part.  This usually gets rid of menus and the like.
   The @kbd{F} command (@code{eww-toggle-fonts}) toggles whether to use
 variable-pitch fonts or not.  This sets the @code{shr-use-fonts} variable.
 
+@findex eww-toggle-colors
+@findex shr-use-colors
+@kindex F
+  The @kbd{C} command (@code{eww-toggle-colors}) toggles whether to use
+HTML-specified colors or not.  This sets the @code{shr-use-colors} variable.
+
 @findex eww-download
 @vindex eww-download-directory
 @kindex d
index 10d516bc23f0a286a401e01945621ba654d9cc01..05db9980ee9207faf828ef42609b962e466abbcf 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -22,6 +22,19 @@ Temporary note:
 When you add a new item, use the appropriate mark if you are sure it applies,
 otherwise leave it unmarked.
 
+\f
+* Installation Changes in Emacs 25.2
+
+** 'configure' detects the kqueue file notification library on *BSD
+and Mac OS X machines.
+
+\f
+* Changes in Specialized Modes and Packages in Emacs 25.2
+
+** File Notifications
+
+*** The kqueue library is integrated for *BSD and Mac OS X machines.
+
 \f
 * Installation Changes in Emacs 25.1
 
@@ -161,6 +174,11 @@ the variable `dir-locals-file' for more information.
 added via the new Network Security Manager (NSM) and controlled via
 the `network-security-level' variable.
 
+---
+** International domain names (IDNA) are now encoded via the new
+puny.el library, so that one can visit web sites like
+"http://méxico.icom.museum".
+
 ** If Emacs isn't built with TLS support, an external TLS-capable
 program is used instead.  This program used to be run in --insecure
 mode by default, but has now changed to be secure instead, and will
@@ -170,9 +188,12 @@ controlled by the `tls-program' variable.
 +++
 ** C-h l now also lists the commands that were run.
 
-+++
-** x-select-enable-clipboard is renamed select-enable-clipboard
-and x-select-enable-primary is renamed select-enable-primary.
+** The new M-s M-w key binding uses eww to search the web for the
+text in the region.
+
+** M-x suggests shorthands and ignores obsolete commands for completion.
+** x-select-enable-clipboard is renamed select-enable-clipboard.
+x-select-enable-primary and renamed select-enable-primary.
 Additionally they both now apply to all systems (OSX, GNUstep, Windows, you
 name it), with the proviso that on some systems (e.g. Windows)
 select-enable-primary is ineffective since the system doesn't
@@ -388,6 +409,9 @@ additionally need to add `getSelection' to `xterm-extra-capabilities'.
 `erc-network-hide-list' and `erc-channel-hide-list' will only hide the
 specified message types for the respective specified targets.
 
+*** New variable `erc-default-port-tls' used to connect to TLS IRC
+servers.
+
 ** Midnight-mode
 
 ---
@@ -586,6 +610,11 @@ useful when, for example, one needs to distinguish various spaces (e.g. ] [,
 whether to use variable-pitch fonts or not.  The user can also
 customize the `shr-use-fonts' variable.
 
++++
+*** A new command `C' (`eww-toggle-colors) can be used to toggle
+whether to use the HTML-specified colors or not.  The user can also
+customize the `shr-use-colors variable.
+
 +++
 *** A new command `R' (`eww-readable') will try do identify the main
 textual parts of a web page and display only that, leaving menus and
@@ -1027,6 +1056,10 @@ compress many marked files into a single named archive.  The
 compression command is determined from the new
 `dired-compress-files-alist' variable.
 
++++
+*** `W' is now bound to `browse-url-of-dired-file', and is useful for
+viewing HTML files and the like.
+
 ** Tabulated List Mode
 
 +++
index ed1246b0cf47c8027ba83163af0c8cc2842f945b..164df2555854ddeacfd36940ac54a31181164434 100644 (file)
@@ -81,23 +81,23 @@ AUTOGENEL = loaddefs.el \
        cus-load.el \
        finder-inf.el \
        subdirs.el \
+       ps-print-loaddefs.el \
        emacs-lisp/cl-loaddefs.el \
        calc/calc-loaddefs.el \
        eshell/esh-groups.el \
        cedet/semantic/loaddefs.el \
        cedet/ede/loaddefs.el \
        cedet/srecode/loaddefs.el \
-       org/org-loaddefs.el
-
-# Value of max-lisp-eval-depth when compiling initially.
-# During bootstrapping the byte-compiler is run interpreted when compiling
-# itself, and uses more stack than usual.
-#
-BIG_STACK_DEPTH = 2200
-BIG_STACK_OPTS = --eval "(setq max-lisp-eval-depth $(BIG_STACK_DEPTH))"
+       org/org-loaddefs.el \
+       textmodes/reftex-loaddefs.el \
+       mail/rmail-loaddefs.el \
+       ibuffer-loaddefs.el \
+       htmlfontify-loaddefs \
+       emacs-lisp/eieio-loaddefs.el \
+       dired-loaddefs.el
 
 # Set load-prefer-newer for the benefit of the non-bootstrappers.
-BYTE_COMPILE_FLAGS = $(BIG_STACK_OPTS) \
+BYTE_COMPILE_FLAGS = \
   --eval '(setq load-prefer-newer t)' $(BYTE_COMPILE_EXTRA_FLAGS)
 
 # Files to compile before others during a bootstrap.  This is done to
@@ -185,6 +185,13 @@ $(lisp)/loaddefs.el: $(LOADDEFS)
            --eval '(setq generated-autoload-file (expand-file-name (unmsys--file-name "$@")))' \
            -f batch-update-autoloads ${SUBDIRS_ALMOST}
 
+# autoloads only runs when loaddefs.el is non-existant, although it
+# generates a number of different files. Provide a force option to enable
+# regeneration of all these files.
+autoloads-force .PHONY:
+       rm loaddefs.el
+       $(MAKE) autoloads
+
 # This is required by the bootstrap-emacs target in ../src/Makefile, so
 # we know that if we have an emacs executable, we also have a subdirs.el.
 $(lisp)/subdirs.el:
index 43a905b906e976811ea79db161671a337de27104..c95e1ea9dfd76324d2b4d3551d66e555b44f0904 100644 (file)
@@ -33,6 +33,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl-lib))
+(require 'obarray)
 
 (defgroup abbrev-mode nil
   "Word abbreviations mode."
@@ -87,7 +88,7 @@ be replaced by its expansion."
   "Make a new abbrev-table with the same abbrevs as TABLE.
 Does not copy property lists."
   (let ((new-table (make-abbrev-table)))
-    (mapatoms
+    (obarray-map
      (lambda (symbol)
        (define-abbrev new-table
         (symbol-name symbol)
@@ -406,12 +407,12 @@ A prefix argument means don't query; expand all abbrevs."
 
 (defun abbrev-table-get (table prop)
   "Get the PROP property of abbrev table TABLE."
-  (let ((sym (intern-soft "" table)))
+  (let ((sym (obarray-get table "")))
     (if sym (get sym prop))))
 
 (defun abbrev-table-put (table prop val)
   "Set the PROP property of abbrev table TABLE to VAL."
-  (let ((sym (intern "" table)))
+  (let ((sym (obarray-put table "")))
     (set sym nil)           ; Make sure it won't be confused for an abbrev.
     (put sym prop val)))
 
@@ -435,8 +436,7 @@ See `define-abbrev' for the effect of some special properties.
 (defun make-abbrev-table (&optional props)
   "Create a new, empty abbrev table object.
 PROPS is a list of properties."
-  ;; The value 59 is an arbitrary prime number.
-  (let ((table (make-vector 59 0)))
+  (let ((table (obarray-make)))
     ;; Each abbrev-table has a `modiff' counter which can be used to detect
     ;; when an abbreviation was added.  An example of use would be to
     ;; construct :regexp dynamically as the union of all abbrev names, so
@@ -451,7 +451,7 @@ PROPS is a list of properties."
 
 (defun abbrev-table-p (object)
   "Return non-nil if OBJECT is an abbrev table."
-  (and (vectorp object)
+  (and (obarrayp object)
        (numberp (abbrev-table-get object :abbrev-table-modiff))))
 
 (defun abbrev-table-empty-p (object &optional ignore-system)
@@ -460,12 +460,12 @@ If IGNORE-SYSTEM is non-nil, system definitions are ignored."
   (unless (abbrev-table-p object)
     (error "Non abbrev table object"))
   (not (catch 'some
-        (mapatoms (lambda (abbrev)
-                    (unless (or (zerop (length (symbol-name abbrev)))
-                                (and ignore-system
-                                     (abbrev-get abbrev :system)))
-                      (throw 'some t)))
-                  object))))
+        (obarray-map (lambda (abbrev)
+                        (unless (or (zerop (length (symbol-name abbrev)))
+                                    (and ignore-system
+                                         (abbrev-get abbrev :system)))
+                          (throw 'some t)))
+                      object))))
 
 (defvar global-abbrev-table (make-abbrev-table)
   "The abbrev table whose abbrevs affect all buffers.
@@ -529,12 +529,12 @@ the current abbrev table before abbrev lookup happens."
 (defun clear-abbrev-table (table)
   "Undefine all abbrevs in abbrev table TABLE, leaving it empty."
   (setq abbrevs-changed t)
-  (let* ((sym (intern-soft "" table)))
+  (let* ((sym (obarray-get table "")))
     (dotimes (i (length table))
       (aset table i 0))
     ;; Preserve the table's properties.
     (cl-assert sym)
-    (let ((newsym (intern "" table)))
+    (let ((newsym (obarray-put table "")))
       (set newsym nil)      ; Make sure it won't be confused for an abbrev.
       (setplist newsym (symbol-plist sym)))
     (abbrev-table-put table :abbrev-table-modiff
@@ -583,7 +583,7 @@ An obsolete but still supported calling form is:
   (setq props (plist-put props :abbrev-table-modiff
                          (abbrev-table-get table :abbrev-table-modiff)))
   (let ((system-flag (plist-get props :system))
-        (sym (intern name table)))
+        (sym (obarray-put table name)))
     ;; Don't override a prior user-defined abbrev with a system abbrev,
     ;; unless system-flag is `force'.
     (unless (and (not (memq system-flag '(nil force)))
@@ -673,10 +673,10 @@ The value is nil if that abbrev is not defined."
          ;; abbrevs do, we have to be careful.
          (sym
           ;; First try without case-folding.
-          (or (intern-soft abbrev table)
+          (or (obarray-get table abbrev)
               (when case-fold
                 ;; We didn't find any abbrev, try case-folding.
-                (let ((sym (intern-soft (downcase abbrev) table)))
+                (let ((sym (obarray-get table (downcase abbrev))))
                   ;; Only use it if it doesn't require :case-fixed.
                   (and sym (not (abbrev-get sym :case-fixed))
                        sym))))))
@@ -1005,17 +1005,17 @@ PROMPT is the prompt to use for the keymap.
 SORTFUN is passed to `sort' to change the default ordering."
   (unless sortfun (setq sortfun 'string-lessp))
   (let ((entries ()))
-    (mapatoms (lambda (abbrev)
-                (when (symbol-value abbrev)
-                  (let ((name (symbol-name abbrev)))
-                    (push `(,(intern name) menu-item ,name
-                            (lambda () (interactive)
-                              (abbrev-insert ',abbrev)))
-                          entries))))
-              table)
+    (obarray-map (lambda (abbrev)
+                   (when (symbol-value abbrev)
+                     (let ((name (symbol-name abbrev)))
+                       (push `(,(intern name) menu-item ,name
+                               (lambda () (interactive)
+                                 (abbrev-insert ',abbrev)))
+                             entries))))
+                 table)
     (nconc (make-sparse-keymap prompt)
            (sort entries (lambda (x y)
-                (funcall sortfun (nth 2 x) (nth 2 y)))))))
+                           (funcall sortfun (nth 2 x) (nth 2 y)))))))
 
 ;; Keep it after define-abbrev-table, since define-derived-mode uses
 ;; define-abbrev-table.
index 8560871694de1d84c15741973b1f9c203e95e9d7..e2d0f5268c105bdbe8961efccea4a0e0aaad84bc 100644 (file)
@@ -430,11 +430,9 @@ Major modes that edit things other than ordinary files may change this
 (make-variable-buffer-local 'mode-line-buffer-identification)
 
 (defvar mode-line-misc-info
-  '((which-func-mode ("" which-func-format " "))
-    (global-mode-string ("" global-mode-string " ")))
+  '((global-mode-string ("" global-mode-string " ")))
   "Mode line construct for miscellaneous information.
-By default, this shows the information specified by
-`which-func-mode' and `global-mode-string'.")
+By default, this shows the information specified by `global-mode-string'.")
 (put 'mode-line-misc-info 'risky-local-variable t)
 
 (defvar mode-line-end-spaces '(:eval (unless (display-graphic-p) "-%-"))
index b09080127149e72b27d10dbe7b9c8263c5d5c099..4f1ad76f28089dcc6afe87dd6f06b298cfcd8b55 100644 (file)
@@ -161,6 +161,8 @@ This makes it possible to paste big integers since they will be read as
 floats, otherwise the Emacs reader will fail on them."
   :type  'boolean
   :group 'calculator)
+(make-obsolete-variable 'calculator-paste-decimals
+                        "it is no longer used." nil)
 
 (defcustom calculator-copy-displayer nil
   "If non-nil, this is any value that can be used for
@@ -195,9 +197,9 @@ For example, use this to define the golden ratio number:
 before you load calculator."
   :type  '(repeat (cons character number))
   :set   (lambda (_ val)
-           (and (boundp 'calculator-registers)
-                (setq calculator-registers
-                      (append val calculator-registers)))
+           (when (boundp 'calculator-registers)
+             (setq calculator-registers
+                   (append val calculator-registers)))
            (setq calculator-user-registers val))
   :group 'calculator)
 
@@ -221,10 +223,10 @@ Examples:
           (\"tF\" mt-to-ft (/ X 0.3048)         1)
           (\"tM\" ft-to-mt (* X 0.3048)         1)))
 
-* Using a function-like form is very simple: use `X' for the argument
-  (`Y' for the second in case of a binary operator), `TX' is a truncated
+* Using a function-like form is simple: use `X' for the argument (`Y'
+  for a second one in case of a binary operator), `TX' is a truncated
   version of `X' and `F' for a recursive call.  Here is a [very
-  inefficient] Fibonacci number calculation:
+  inefficient] Fibonacci number operator:
 
   (add-to-list \\='calculator-user-operators
                \\='(\"F\" fib
@@ -290,7 +292,8 @@ user-defined operators, use `calculator-user-operators' instead.")
 (defvar calculator-operators nil
   "The calculator operators, each a list with:
 
-1. The key that is bound to for this operation (usually a string);
+1. The key(s) that is bound to for this operation, a string that is
+   used with `kbd';
 
 2. The displayed symbol for this function;
 
@@ -312,8 +315,8 @@ user-defined operators, use `calculator-user-operators' instead.")
 
 It it possible have a unary prefix version of a binary operator if it
 comes later in this list.  If the list begins with the symbol `nobind',
-then no key binding will take place -- this is only useful for
-predefined keys.
+then no key binding will take place -- this is only used for predefined
+keys.
 
 Use `calculator-user-operators' to add operators to this list, see its
 documentation for an example.")
@@ -370,73 +373,96 @@ Used for repeating operations in calculator-repR/L.")
           (list (cons ?e float-e) (cons ?p float-pi)))
   "The association list of calculator register values.")
 
-(defvar calculator-saved-global-map nil
-  "Saved global key map.")
-
 (defvar calculator-restart-other-mode nil
   "Used to hack restarting with the electric mode changed.")
 
 ;;;---------------------------------------------------------------------
 ;;; Key bindings
 
+(defun calculator-define-key (key cmd map)
+  ;; Arranges for unbound alphabetic keys to be used as their un/shifted
+  ;; versions if those are bound (mimics the usual Emacs global bindings).
+  ;; FIXME: We should adjust Emacs's native "fallback to unshifted binding"
+  ;; such that it can also be used here, rather than having to use a hack like
+  ;; this one.
+  (let* ((key  (if (stringp key) (kbd key) key))
+         (omap (keymap-parent map)))
+    (define-key map key cmd)
+    ;; "other" map, used for case-flipped bindings
+    (unless omap
+      (setq omap (make-sparse-keymap))
+      (suppress-keymap omap t)
+      (set-keymap-parent map omap))
+    (let ((m omap))
+      ;; Bind all case-flipped versions.
+      (dotimes (i (length key))
+        (let* ((c (aref key i))
+               (k (vector c))
+               (b (lookup-key m k))
+               (defkey (lambda (x)
+                         (define-key m k x)
+                         (when (and (characterp c)
+                                    (or (<= ?A c ?Z) (<= ?a c ?z)))
+                           (define-key m (vector (logxor 32 c)) x)))))
+          (cond ((= i (1- (length key)))
+                 ;; Prefer longer sequences.
+                 (unless (keymapp b) (funcall defkey cmd)))
+                ((keymapp b) (setq m b))
+                (t (let ((sub (make-sparse-keymap)))
+                     (funcall defkey sub)
+                     (setq m sub)))))))))
+
 (defvar calculator-mode-map
   (let ((map (make-sparse-keymap)))
     (suppress-keymap map t)
-    (define-key map "i" nil)
-    (define-key map "o" nil)
-    (let ((p
-           '((calculator-open-paren  "[")
-             (calculator-close-paren "]")
-             (calculator-op-or-exp   "+" "-" [kp-add] [kp-subtract])
-             (calculator-digit       "0" "1" "2" "3" "4" "5" "6" "7" "8"
-                                     "9" "a" "b" "c" "d" "f"
-                                     [kp-0] [kp-1] [kp-2] [kp-3] [kp-4]
-                                     [kp-5] [kp-6] [kp-7] [kp-8] [kp-9])
-             (calculator-op          [kp-divide] [kp-multiply])
-             (calculator-decimal     "." [kp-decimal])
-             (calculator-exp         "e")
-             (calculator-dec/deg-mode "D")
-             (calculator-set-register "s")
-             (calculator-get-register "g")
-             (calculator-radix-mode        "H" "X" "O" "B")
-             (calculator-radix-input-mode  "id" "ih" "ix" "io" "ib"
-                                           "iD" "iH" "iX" "iO" "iB")
-             (calculator-radix-output-mode "od" "oh" "ox" "oo" "ob"
-                                           "oD" "oH" "oX" "oO" "oB")
-             (calculator-rotate-displayer      "'")
-             (calculator-rotate-displayer-back "\"")
-             (calculator-displayer-prev        "{")
-             (calculator-displayer-next        "}")
-             (calculator-saved-up      [up] [?\C-p])
-             (calculator-saved-down    [down] [?\C-n])
-             (calculator-quit          "q" [?\C-g])
-             (calculator-enter         [enter] [linefeed] [kp-enter]
-                                       [return] [?\r] [?\n])
-             (calculator-save-on-list  " " [space])
-             (calculator-clear-saved   [?\C-c] [(control delete)])
-             (calculator-save-and-quit [(control return)]
-                                       [(control kp-enter)])
-             (calculator-paste         [insert] [(shift insert)]
-                                       [paste] [mouse-2] [?\C-y])
-             (calculator-clear         [delete] [?\C-?] [?\C-d])
-             (calculator-help          [?h] [??] [f1] [help])
-             (calculator-copy          [(control insert)] [copy])
-             (calculator-backspace     [backspace])
-             )))
-      (while p
-        ;; reverse the keys so earlier definitions come last -- makes
-        ;; the more sensible bindings visible in the menu
-        (let ((func (caar p)) (keys (reverse (cdar p))))
-          (while keys
-            (define-key map (car keys) func)
-            (setq keys (cdr keys))))
-        (setq p (cdr p))))
+    (dolist (x '((calculator-digit
+                  "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c"
+                  "d" "f" "<kp-0>" "<kp-1>" "<kp-2>" "<kp-3>" "<kp-4>"
+                  "<kp-5>" "<kp-6>" "<kp-7>" "<kp-8>" "<kp-9>")
+                 (calculator-open-paren  "[")
+                 (calculator-close-paren "]")
+                 (calculator-op-or-exp   "+" "-"
+                                         "<kp-add>" "<kp-subtract>")
+                 (calculator-op          "<kp-divide>" "<kp-multiply>")
+                 (calculator-decimal     "." "<kp-decimal>")
+                 (calculator-exp         "e")
+                 (calculator-dec/deg-mode "D")
+                 (calculator-set-register "s")
+                 (calculator-get-register "g")
+                 (calculator-radix-mode        "H" "X" "O" "B")
+                 (calculator-radix-input-mode  "iD" "iH" "iX" "iO" "iB")
+                 (calculator-radix-output-mode "oD" "oH" "oX" "oO" "oB")
+                 (calculator-rotate-displayer      "'")
+                 (calculator-rotate-displayer-back "\"")
+                 (calculator-displayer-prev        "{")
+                 (calculator-displayer-next        "}")
+                 (calculator-saved-up     "<up>" "C-p")
+                 (calculator-saved-down   "<down>" "C-n")
+                 (calculator-quit         "q" "C-g")
+                 (calculator-enter        "<enter>" "<linefeed>"
+                                          "<kp-enter>" "<return>"
+                                          "RET" "LFD")
+                 (calculator-save-on-list "SPC" "<space>")
+                 (calculator-clear-saved  "C-c" "<C-delete>")
+                 (calculator-save-and-quit "<C-return>" "<C-kp-enter>")
+                 (calculator-paste        "<insert>" "<S-insert>"
+                                          "<paste>" "<mouse-2>" "C-y")
+                 (calculator-clear        "<delete>" "DEL" "C-d")
+                 (calculator-help         "h" "?" "<f1>" "<help>")
+                 (calculator-copy         "<C-insert>" "<copy>")
+                 (calculator-backspace    "<backspace>")
+                 ))
+      ;; reverse the keys so earlier definitions come last -- makes the
+      ;; more sensible bindings visible in the menu
+      (dolist (k (reverse (cdr x)))
+        (calculator-define-key k (car x) map)))
     (if calculator-bind-escape
-      (progn (define-key map [?\e] 'calculator-quit)
-             (define-key map [escape] 'calculator-quit))
-      (define-key map [?\e ?\e ?\e] 'calculator-quit))
+      (progn (calculator-define-key "ESC" 'calculator-quit map)
+             (calculator-define-key "<escape>" 'calculator-quit map))
+      (calculator-define-key "ESC ESC ESC" 'calculator-quit map))
     ;; make C-h work in text-mode
-    (or window-system (define-key map [?\C-h] 'calculator-backspace))
+    (unless window-system
+      (calculator-define-key "C-h" 'calculator-backspace map))
     ;; set up a menu
     (when (and calculator-use-menu (not (boundp 'calculator-menu)))
       (let ((radix-selectors
@@ -530,9 +556,9 @@ Used for repeating operations in calculator-repR/L.")
             ("Modes"
              ["Radians"
               (progn
-                (and (or calculator-input-radix calculator-output-radix)
-                     (calculator-radix-mode "D"))
-                (and calculator-deg (calculator-dec/deg-mode)))
+                (when (or calculator-input-radix calculator-output-radix)
+                  (calculator-radix-mode "D"))
+                (when calculator-deg (calculator-dec/deg-mode)))
               :keys "D"
               :style radio
               :selected (not (or calculator-input-radix
@@ -540,9 +566,9 @@ Used for repeating operations in calculator-repR/L.")
                                  calculator-deg))]
              ["Degrees"
               (progn
-                (and (or calculator-input-radix calculator-output-radix)
-                     (calculator-radix-mode "D"))
-                (or calculator-deg (calculator-dec/deg-mode)))
+                (when (or calculator-input-radix calculator-output-radix)
+                  (calculator-radix-mode "D"))
+                (unless calculator-deg (calculator-dec/deg-mode)))
               :keys "D"
               :style radio
               :selected (and calculator-deg
@@ -619,16 +645,17 @@ argument.
 hex/oct/bin modes can be set for input and for display separately.
 Another toggle-able mode is for using degrees instead of radians for
 trigonometric functions.
-The keys to switch modes are (`X' is shortcut for `H'):
+The keys to switch modes are (both `H' and `X' are for hex):
 * `D'             switch to all-decimal mode, or toggle degrees/radians
 * `B' `O' `H' `X' binary/octal/hexadecimal modes for input & display
 * `i' `o'         followed by one of `D' `B' `O' `H' `X' (case
                   insensitive) sets only the input or display radix mode
 The prompt indicates the current modes:
-* \"D=\": degrees mode;
-* \"?=\": (? is B/O/H) this is the radix for both input and output;
-* \"=?\": (? is B/O/H) the display radix (when input is decimal);
-* \"??\": (? is D/B/O/H) 1st char for input radix, 2nd for display.
+* \"==\": decimal mode (using radians);
+* \"D=\": decimal mode using degrees;
+* \"?=\": ? is B/O/H, the radix for both input and output;
+* \"=?\": ? is B/O/H, the display radix (with decimal input);
+* \"??\": ? is D/B/O/H, 1st char for input radix, 2nd for display.
 
 Also, the quote key can be used to switch display modes for decimal
 numbers (double-quote rotates back), and the two brace characters
@@ -688,19 +715,14 @@ See the documentation for `calculator-mode' for more information."
   (if calculator-electric-mode
     (save-window-excursion
       (require 'electric) (message nil) ; hide load message
-      (let (old-g-map old-l-map
-            (old-buf (window-buffer (minibuffer-window)))
+      (let ((old-buf (window-buffer (minibuffer-window)))
             (echo-keystrokes 0)
             (garbage-collection-messages nil)) ; no gc msg when electric
         (set-window-buffer (minibuffer-window) calculator-buffer)
         (select-window (minibuffer-window))
         (calculator-reset)
         (calculator-update-display)
-        (setq old-l-map (current-local-map))
-        (setq old-g-map (current-global-map))
-        (setq calculator-saved-global-map (current-global-map))
-        (use-local-map nil)
-        (use-global-map calculator-mode-map)
+        (use-local-map calculator-mode-map)
         (run-hooks 'calculator-mode-hook)
         (unwind-protect
             (catch 'calculator-done
@@ -711,9 +733,7 @@ See the documentation for `calculator-mode' for more information."
                nil
                (lambda (_x _y) (calculator-update-display))))
           (set-window-buffer (minibuffer-window) old-buf)
-          (kill-buffer calculator-buffer)
-          (use-local-map old-l-map)
-          (use-global-map old-g-map))))
+          (kill-buffer calculator-buffer))))
     (progn
       (cond
         ((not (get-buffer-window calculator-buffer))
@@ -780,25 +800,11 @@ Defaults to 1."
 Adds MORE-OPS to `calculator-operator', called initially to handle
 `calculator-initial-operators' and `calculator-user-operators'."
   (let ((added-ops nil))
-    (while more-ops
-      (or (eq (caar more-ops) 'nobind)
-          (let ((i -1) (key (caar more-ops)))
-            ;; make sure the key is undefined, so it's easy to define
-            ;; prefix keys
-            (while (< (setq i (1+ i)) (length key))
-              (or (keymapp
-                   (lookup-key calculator-mode-map
-                               (substring key 0 (1+ i))))
-                  (progn
-                    (define-key
-                      calculator-mode-map (substring key 0 (1+ i)) nil)
-                    (setq i (length key)))))
-            (define-key calculator-mode-map key 'calculator-op)))
-      (setq added-ops (cons (if (eq (caar more-ops) 'nobind)
-                              (cdar more-ops)
-                              (car more-ops))
-                            added-ops))
-      (setq more-ops (cdr more-ops)))
+    (dolist (op more-ops)
+      (unless (eq (car op) 'nobind)
+        (calculator-define-key (car op) 'calculator-op calculator-mode-map))
+      (push (if (eq (car op) 'nobind) (cdr op) op)
+            added-ops))
     ;; added-ops come first, but in correct order
     (setq calculator-operators
           (append (nreverse added-ops) calculator-operators))))
@@ -808,11 +814,11 @@ Adds MORE-OPS to `calculator-operator', called initially to handle
 
 (defun calculator-reset ()
   "Reset calculator variables."
-  (or calculator-restart-other-mode
-      (setq calculator-stack           nil
-            calculator-curnum          nil
-            calculator-stack-display   nil
-            calculator-display-fragile nil))
+  (unless calculator-restart-other-mode
+    (setq calculator-stack           nil
+          calculator-curnum          nil
+          calculator-stack-display   nil
+          calculator-display-fragile nil))
   (setq calculator-restart-other-mode nil)
   (calculator-update-display))
 
@@ -831,7 +837,7 @@ The result should not exceed the screen width."
                          (cond ((or in-r out-r)
                                 (concat (or in-r "=")
                                         (if (equal in-r out-r) "="
-                                            (or out-r "="))))
+                                            (or out-r "D"))))
                                (calculator-deg "D=")
                                (t "=="))))
          (expr
@@ -852,39 +858,13 @@ The result should not exceed the screen width."
   "Convert the given STR to a number, according to the value of
 `calculator-input-radix'."
   (if calculator-input-radix
-    (let ((radix
-           (cdr (assq calculator-input-radix
-                      '((bin . 2) (oct . 8) (hex . 16)))))
-          (i -1) (value 0) (new-value 0))
-      ;; assume mostly valid input (e.g., characters in range)
-      (while (< (setq i (1+ i)) (length str))
-        (setq new-value
-              (let* ((ch (upcase (aref str i)))
-                     (n (cond ((< ch ?0)  nil)
-                              ((<= ch ?9) (- ch ?0))
-                              ((< ch ?A)  nil)
-                              ((<= ch ?Z) (- ch (- ?A 10)))
-                              (t          nil))))
-                (if (and n (<= 0 n) (< n radix))
-                  (+ n (* radix value))
-                  (progn
-                    (calculator-message
-                     "Warning: Ignoring bad input character `%c'." ch)
-                    (sit-for 1)
-                    value))))
-        (when (if (< new-value 0) (> value 0) (< value 0))
-          (calculator-message "Warning: Overflow in input."))
-        (setq value new-value))
-      value)
-    (car (read-from-string
-          (cond ((equal "." str) "0.0")
-                ((string-match-p "[eE][+-]?$" str) (concat str "0"))
-                ((string-match-p "\\.[0-9]\\|[eE]" str) str)
-                ((string-match-p "\\." str)
-                 ;; do this because Emacs reads "23." as an integer
-                 (concat str "0"))
-                ((stringp str) (concat str ".0"))
-                (t "0.0"))))))
+    (string-to-number str (cadr (assq calculator-input-radix
+                                      '((bin 2) (oct 8) (hex 16)))))
+    (let* ((str (replace-regexp-in-string
+                 "\\.\\([^0-9].*\\)?$" ".0\\1" str))
+           (str (replace-regexp-in-string
+                 "[eE][+-]?\\([^0-9].*\\)?$" "e0\\1" str)))
+      (string-to-number str))))
 
 (defun calculator-push-curnum ()
   "Push the numeric value of the displayed number to the stack."
@@ -911,9 +891,7 @@ If radix output mode is active, toggle digit grouping."
            (if (and new-disp (memq new-disp calculator-displayers))
              (let ((tmp nil))
                (while (not (eq (car calculator-displayers) new-disp))
-                 (setq tmp (cons (car calculator-displayers) tmp))
-                 (setq calculator-displayers
-                       (cdr calculator-displayers)))
+                 (push (pop calculator-displayers) tmp))
                (setq calculator-displayers
                      (nconc calculator-displayers (nreverse tmp))))
              (nconc (cdr calculator-displayers)
@@ -938,11 +916,11 @@ If radix output mode is active, increase the grouping size."
     (progn (setq calculator-radix-grouping-digits
                  (1+ calculator-radix-grouping-digits))
            (calculator-enter))
-    (and (car calculator-displayers)
-         (let ((disp (caar calculator-displayers)))
-           (cond ((symbolp disp) (funcall disp 'left))
-                 ((and (consp disp) (eq 'std (car disp)))
-                  (calculator-standard-displayer 'left)))))))
+    (when (car calculator-displayers)
+      (let ((disp (caar calculator-displayers)))
+        (cond ((symbolp disp) (funcall disp 'left))
+              ((and (consp disp) (eq 'std (car disp)))
+               (calculator-standard-displayer 'left)))))))
 
 (defun calculator-displayer-next ()
   "Send the current displayer function a `right' argument.
@@ -954,11 +932,11 @@ If radix output mode is active, decrease the grouping size."
     (progn (setq calculator-radix-grouping-digits
                  (max 2 (1- calculator-radix-grouping-digits)))
            (calculator-enter))
-    (and (car calculator-displayers)
-         (let ((disp (caar calculator-displayers)))
-           (cond ((symbolp disp) (funcall disp 'right))
-                 ((and (consp disp) (eq 'std (car disp)))
-                  (calculator-standard-displayer 'right)))))))
+    (when (car calculator-displayers)
+      (let ((disp (caar calculator-displayers)))
+        (cond ((symbolp disp) (funcall disp 'right))
+              ((and (consp disp) (eq 'std (car disp)))
+               (calculator-standard-displayer 'right)))))))
 
 (defun calculator-remove-zeros (numstr)
   "Get a number string NUMSTR and remove unnecessary zeros.
@@ -1003,10 +981,10 @@ The special `left' and `right' symbols will make it change the current
 number of digits displayed (`calculator-number-digits')."
   (if (symbolp num)
     (cond ((eq num 'left)
-           (and (> calculator-number-digits 0)
-                (setq calculator-number-digits
-                      (1- calculator-number-digits))
-                (calculator-enter)))
+           (when (> calculator-number-digits 0)
+             (setq calculator-number-digits
+                   (1- calculator-number-digits))
+             (calculator-enter)))
           ((eq num 'right)
            (setq calculator-number-digits
                  (1+ calculator-number-digits))
@@ -1054,7 +1032,7 @@ the `left' or `right' when one of the standard modes is used."
             (while (< i 0)
               (setq num (/ num 1000.0)) (setq exp (+ exp 3))
               (setq i (1+ i))))))
-      (or calculator-eng-tmp-show (setq calculator-eng-extra nil))
+      (unless calculator-eng-tmp-show (setq calculator-eng-extra nil))
       (let ((str (format (format "%%.%sf" calculator-number-digits)
                          num)))
         (concat (let ((calculator-remove-zeros
@@ -1206,7 +1184,7 @@ arguments."
           (DX (if (and X calculator-deg) (degrees-to-radians X) X))
           (L  calculator-saved-list)
           (fF `(calculator-funcall ',f x y))
-          (fD `(if calculator-deg (radians-to-degrees x) x)))
+          (fD `(if calculator-deg (radians-to-degrees x) x)))
       (eval `(cl-flet ((F (&optional x y) ,fF) (D (x) ,fD))
                (let ((X ,X) (Y ,Y) (DX ,DX) (TX ,TX) (TY ,TY) (L ',L))
                  ,f))
@@ -1216,19 +1194,20 @@ arguments."
 ;;; Input interaction
 
 (defun calculator-last-input (&optional keys)
-  "Last char (or event or event sequence) that was read.
-Use KEYS if given, otherwise use `this-command-keys'."
-  (let ((inp (or keys (this-command-keys))))
-    (if (or (stringp inp) (not (arrayp inp)))
+  "Return the last key sequence that was used to invoke this command, or
+the input KEYS.  Uses the `function-key-map' translate keypad numbers to
+plain ones."
+  (let* ((inp (or keys (this-command-keys)))
+         (inp (or (and (arrayp inp) (not (stringp inp))
+                       (lookup-key function-key-map inp))
+                  inp)))
+    (if (or (not inp) (stringp inp) (not (arrayp inp))
+            (catch 'done ; any non-chars?
+              (dotimes (i (length inp))
+                (unless (characterp (aref inp i)) (throw 'done t)))
+              nil))
       inp
-      ;; Translates kp-x to x and [tries to] create a string to lookup
-      ;; operators; assume all symbols are translatable via
-      ;; `function-key-map'.  This is needed because we have key
-      ;; bindings for kp-* (which might be the wrong thing to do) so
-      ;; they don't get translated in `this-command-keys'.
-      (concat (mapcar (lambda (k)
-                        (if (numberp k) k (error "??bad key?? (%S)" k)))
-                      (or (lookup-key function-key-map inp) inp))))))
+      (concat inp))))
 
 (defun calculator-clear-fragile (&optional op)
   "Clear the fragile flag if it was set, then maybe reset all.
@@ -1270,7 +1249,7 @@ OP is the operator (if any) that caused this call."
     (calculator-update-display)))
 
 (defun calculator-exp ()
-  "Enter an `E' exponent character, or a digit in hex input mode."
+  "Enter an exponent, or an \"E\" digit in hex input mode."
   (interactive)
   (cond
     (calculator-input-radix (calculator-digit))
@@ -1312,18 +1291,13 @@ Optional string argument KEYS will force using it as the keys entered."
         (throw 'op-error nil))
       (push op calculator-stack)
       (calculator-reduce-stack (calculator-op-prec op))
-      (and (= (length calculator-stack) 1)
-           (numberp (car calculator-stack))
-           ;; the display is fragile if it contains only one number
-           (setq calculator-display-fragile t)
-           ;; add number to the saved-list
-           calculator-add-saved
-           (if (= 0 calculator-saved-ptr)
-             (setq calculator-saved-list
-                   (cons (car calculator-stack) calculator-saved-list))
-             (let ((p (nthcdr (1- calculator-saved-ptr)
-                              calculator-saved-list)))
-               (setcdr p (cons (car calculator-stack) (cdr p))))))
+      (when (and (= (length calculator-stack) 1)
+                 (numberp (car calculator-stack)))
+        ;; the display is fragile if it contains only one number
+        (setq calculator-display-fragile t)
+        (when calculator-add-saved ; add number to the saved-list
+          (push (car calculator-stack)
+                (nthcdr calculator-saved-ptr calculator-saved-list))))
       (calculator-update-display))))
 
 (defun calculator-op-or-exp ()
@@ -1332,7 +1306,8 @@ Used with +/- for entering them as digits in numbers like 1e-3 (there is
 no need for negative numbers since these are handled by unary
 operators)."
   (interactive)
-  (if (and (not calculator-display-fragile)
+  (if (and (not calculator-input-radix)
+           (not calculator-display-fragile)
            calculator-curnum
            (string-match-p "[eE]$" calculator-curnum))
     (calculator-digit)
@@ -1346,8 +1321,8 @@ operators)."
   (interactive)
   (calculator-push-curnum)
   (if (or calculator-input-radix calculator-output-radix)
-    (progn (setq calculator-input-radix nil)
-           (setq calculator-output-radix nil))
+    (setq calculator-input-radix nil
+          calculator-output-radix nil)
     ;; already decimal -- toggle degrees mode
     (setq calculator-deg (not calculator-deg)))
   (calculator-update-display t))
@@ -1393,8 +1368,8 @@ Optional string argument KEYS will force using it as the keys entered."
 (defun calculator-clear-saved ()
   "Clear the list of saved values in `calculator-saved-list'."
   (interactive)
-  (setq calculator-saved-list nil)
-  (setq calculator-saved-ptr 0)
+  (setq calculator-saved-list nil
+        calculator-saved-ptr 0)
   (calculator-update-display t))
 
 (defun calculator-saved-move (n)
@@ -1492,21 +1467,6 @@ Optional string argument KEYS will force using it as the keys entered."
         (kill-new (replace-regexp-in-string
                    "^\\([^ ]+\\) *\\(\\[[0-9/]+\\]\\)? *$" "\\1" s))))))
 
-(defun calculator-set-register (reg)
-  "Set a register value for REG."
-  ;; FIXME: this should use `register-read-with-preview', but it uses
-  ;; calculator-registers rather than `register-alist'.  (Maybe
-  ;; dynamically rebinding it will get blessed?)  Also in to
-  ;; `calculator-get-register'.
-  (interactive "cRegister to store into: ")
-  (let* ((as  (assq reg calculator-registers))
-         (val (progn (calculator-enter) (car calculator-stack))))
-    (if as
-      (setcdr as val)
-      (setq calculator-registers
-            (cons (cons reg val) calculator-registers)))
-    (calculator-message "[%c] := %S" reg val)))
-
 (defun calculator-put-value (val)
   "Paste VAL as if entered.
 Used by `calculator-paste' and `get-register'."
@@ -1515,31 +1475,55 @@ Used by `calculator-paste' and `get-register'."
              (or calculator-display-fragile
                  (not (numberp (car calculator-stack)))))
     (calculator-clear-fragile)
-    (setq calculator-curnum (let ((calculator-displayer "%S"))
-                              (calculator-number-to-string val)))
+    (setq calculator-curnum
+          (let ((calculator-displayer "%S")
+                (calculator-radix-grouping-mode nil)
+                (calculator-output-radix calculator-input-radix))
+            (calculator-number-to-string val)))
     (calculator-update-display)))
 
-(defun calculator-paste ()
-  "Paste a value from the `kill-ring'."
-  (interactive)
-  (calculator-put-value
-   (let ((str (replace-regexp-in-string
-               "^ *\\(.+[^ ]\\) *$" "\\1" (current-kill 0))))
-     (and (not calculator-input-radix)
-          calculator-paste-decimals
-          (string-match "\\([0-9]+\\)\\(\\.[0-9]+\\)?\\(e[0-9]+\\)?"
-                        str)
-          (or (match-string 1 str)
-              (match-string 2 str)
-              (match-string 3 str))
-          (setq str (concat (or (match-string 1 str) "0")
-                            (or (match-string 2 str) ".0")
-                            (or (match-string 3 str) ""))))
-     (ignore-errors (calculator-string-to-number str)))))
+(defun calculator-paste (arg)
+  "Paste a value from the `kill-ring'.
+
+With a prefix argument, paste the raw string as a sequence of key
+presses, which can be used to paste expressions.  Note that this
+is literal; examples: spaces will store values, pasting \"1+2\"
+will not produce 3 if it's done you're entering a number or after
+a multiplication."
+  (interactive "P")
+  (let ((str (current-kill 0)))
+    (if arg
+      (setq unread-command-events
+            `(,@(listify-key-sequence str) ,@unread-command-events))
+      (calculator-put-value (calculator-string-to-number str)))))
+
+(defun calculator-register-read-with-preview (prompt)
+  "Similar to `register-read-with-preview' but for calculator
+registers."
+  (let ((register-alist calculator-registers)
+        (register-preview-delay 1)
+        (register-preview-function
+         (lambda (r)
+           (format "%s: %s\n"
+                   (single-key-description (car r))
+                   (calculator-number-to-string (cdr r))))))
+    (register-read-with-preview prompt)))
+
+(defun calculator-set-register (reg)
+  "Set a register value for REG."
+  (interactive (list (calculator-register-read-with-preview
+                      "Register to store value into: ")))
+  (let* ((as  (assq reg calculator-registers))
+         (val (progn (calculator-enter) (car calculator-stack))))
+    (if as
+      (setcdr as val)
+      (push (cons reg val) calculator-registers))
+    (calculator-message "[%c] := %S" reg val)))
 
 (defun calculator-get-register (reg)
   "Get a value from a register REG."
-  (interactive "cRegister to get value from: ")
+  (interactive (list (calculator-register-read-with-preview
+                      "Register to get value from: ")))
   (calculator-put-value (cdr (assq reg calculator-registers))))
 
 (declare-function electric-describe-mode "ehelp" ())
@@ -1551,10 +1535,11 @@ Used by `calculator-paste' and `get-register'."
   + - * / \\(div) %(rem) _(-X,postfix) ;(1/X,postfix) ^(exp) L(og)
   Q(sqrt) !(fact) S(in) C(os) T(an) |(or) #(xor) &(and) ~(not)
 * >/< repeats last binary operation with its 2nd (1st) arg as postfix op
-* I inverses next trig function        * \\='/\"/{} - display/display args
+* I inverse the next trig function     \
+* \\='/\"/{/}  - display/display args
 * D         - switch to all-decimal, or toggle deg/rad mode
-* B/O/H/X   - binary/octal/hex mode for i/o (X is a shortcut for H)
-* i/o       - prefix for d/b/o/x - set only input/output modes
+* B/O/H/X   - binary/octal/hex mode for i/o (both H and X are for hex)
+* i/o       - prefix for D/B/O/X - set only input/output modes
 * enter/=   - evaluate current expr.   * s/g      - set/get a register
 * space     - evaluate & save on list  * l/v      - list total/average
 * up/down/C-p/C-n - browse saved       * C-delete - clear all saved
@@ -1566,15 +1551,11 @@ Used by `calculator-paste' and `get-register'."
   (if (eq last-command 'calculator-help)
     (let ((mode-name "Calculator")
           (major-mode 'calculator-mode)
-          (g-map (current-global-map))
           (win (selected-window)))
       (require 'ehelp)
-      (when calculator-electric-mode
-        (use-global-map calculator-saved-global-map))
-      (if calculator-electric-mode
-        (electric-describe-mode)
-        (describe-mode))
-      (when calculator-electric-mode (use-global-map g-map))
+      (if (not calculator-electric-mode)
+        (describe-mode)
+        (electric-describe-mode))
       (select-window win)
       (message nil))
     (let ((one (one-window-p t))
index aa26ac38fc5fd6f543c80cf7d010686979fe06b8..22f12bac99fa4494198378abe7aac8f42586ed18 100644 (file)
@@ -1164,7 +1164,7 @@ Show the buffer in another window, but don't select it."
     (unless (eq symbol basevar)
       (message "`%s' is an alias for `%s'" symbol basevar))))
 
-(defvar customize-changed-options-previous-release "24.1"
+(defvar customize-changed-options-previous-release "24.5"
   "Version for `customize-changed-options' to refer back to by default.")
 
 ;; Packages will update this variable, so make it available.
index 9f115140527808c4e32fca3177ada6144783c896..c0d1a908ba2ef88392f24fdde54cfff47096f227 100644 (file)
@@ -2736,7 +2736,7 @@ instead."
 
 ;; Local Variables:
 ;; byte-compile-dynamic: t
-;; generated-autoload-file: "dired.el"
+;; generated-autoload-file: "dired-loaddefs.el"
 ;; End:
 
 ;;; dired-aux.el ends here
index b6704bb34fd6503a33af33fd6e985fdf5257dda9..750e89d0ffca19d7c306b7811afc6cbc19143c62 100644 (file)
@@ -1669,7 +1669,7 @@ If `current-prefix-arg' is non-nil, uses name at point as guess."
 
 ;; Local Variables:
 ;; byte-compile-dynamic: t
-;; generated-autoload-file: "dired.el"
+;; generated-autoload-file: "dired-loaddefs.el"
 ;; End:
 
 ;;; dired-x.el ends here
index 9ec39af21ae7d056cd02c6261f4585ec4712b65a..0a1b064fb207178ec4195b8026f25a8ddffd3b63 100644 (file)
@@ -34,6 +34,9 @@
 
 ;;; Code:
 
+;; When bootstrapping dired-loaddefs has not been generated.
+(require 'dired-loaddefs nil t)
+
 (declare-function dired-buffer-more-recently-used-p
                  "dired-x" (buffer1 buffer2))
 
@@ -1535,6 +1538,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
     (define-key map "u" 'dired-unmark)
     (define-key map "v" 'dired-view-file)
     (define-key map "w" 'dired-copy-filename-as-kill)
+    (define-key map "W" 'browse-url-of-dired-file)
     (define-key map "x" 'dired-do-flagged-delete)
     (define-key map "y" 'dired-show-file-type)
     (define-key map "+" 'dired-create-directory)
@@ -3900,561 +3904,6 @@ Ask means pop up a menu for the user to select one of copy, move or link."
 (add-to-list 'desktop-buffer-mode-handlers
             '(dired-mode . dired-restore-desktop-buffer))
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "dired-aux" "dired-aux.el" "29842a53d6651f8f535ec8e02d20d7cc")
-;;; Generated autoloads from dired-aux.el
-
-(autoload 'dired-diff "dired-aux" "\
-Compare file at point with file FILE using `diff'.
-If called interactively, prompt for FILE.  If the file at point
-has a backup file, use that as the default.  If the file at point
-is a backup file, use its original.  If the mark is active
-in Transient Mark mode, use the file at the mark as the default.
-\(That's the mark set by \\[set-mark-command], not by Dired's
-\\[dired-mark] command.)
-
-FILE is the first file given to `diff'.  The file at point
-is the second file given to `diff'.
-
-With prefix arg, prompt for second argument SWITCHES, which is
-the string of command switches for the third argument of `diff'.
-
-\(fn FILE &optional SWITCHES)" t nil)
-
-(autoload 'dired-backup-diff "dired-aux" "\
-Diff this file with its backup file or vice versa.
-Uses the latest backup, if there are several numerical backups.
-If this file is a backup, diff it with its original.
-The backup file is the first file given to `diff'.
-With prefix arg, prompt for argument SWITCHES which is options for `diff'.
-
-\(fn &optional SWITCHES)" t nil)
-
-(autoload 'dired-compare-directories "dired-aux" "\
-Mark files with different file attributes in two dired buffers.
-Compare file attributes of files in the current directory
-with file attributes in directory DIR2 using PREDICATE on pairs of files
-with the same name.  Mark files for which PREDICATE returns non-nil.
-Mark files with different names if PREDICATE is nil (or interactively
-with empty input at the predicate prompt).
-
-PREDICATE is a Lisp expression that can refer to the following variables:
-
-    size1, size2   - file size in bytes
-    mtime1, mtime2 - last modification time in seconds, as a float
-    fa1, fa2       - list of file attributes
-                     returned by function `file-attributes'
-
-    where 1 refers to attribute of file in the current dired buffer
-    and 2 to attribute of file in second dired buffer.
-
-Examples of PREDICATE:
-
-    (> mtime1 mtime2) - mark newer files
-    (not (= size1 size2)) - mark files with different sizes
-    (not (string= (nth 8 fa1) (nth 8 fa2))) - mark files with different modes
-    (not (and (= (nth 2 fa1) (nth 2 fa2))   - mark files with different UID
-              (= (nth 3 fa1) (nth 3 fa2))))   and GID.
-
-\(fn DIR2 PREDICATE)" t nil)
-
-(autoload 'dired-do-chmod "dired-aux" "\
-Change the mode of the marked (or next ARG) files.
-Symbolic modes like `g+w' are allowed.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-chgrp "dired-aux" "\
-Change the group of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-chown "dired-aux" "\
-Change the owner of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-touch "dired-aux" "\
-Change the timestamp of the marked (or next ARG) files.
-This calls touch.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-print "dired-aux" "\
-Print the marked (or next ARG) files.
-Uses the shell command coming from variables `lpr-command' and
-`lpr-switches' as default.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-clean-directory "dired-aux" "\
-Flag numerical backups for deletion.
-Spares `dired-kept-versions' latest versions, and `kept-old-versions' oldest.
-Positive prefix arg KEEP overrides `dired-kept-versions';
-Negative prefix arg KEEP overrides `kept-old-versions' with KEEP made positive.
-
-To clear the flags on these files, you can use \\[dired-flag-backup-files]
-with a prefix argument.
-
-\(fn KEEP)" t nil)
-
-(autoload 'dired-do-async-shell-command "dired-aux" "\
-Run a shell command COMMAND on the marked files asynchronously.
-
-Like `dired-do-shell-command', but adds `&' at the end of COMMAND
-to execute it asynchronously.
-
-When operating on multiple files, asynchronous commands
-are executed in the background on each file in parallel.
-In shell syntax this means separating the individual commands
-with `&'.  However, when COMMAND ends in `;' or `;&' then commands
-are executed in the background on each file sequentially waiting
-for each command to terminate before running the next command.
-In shell syntax this means separating the individual commands with `;'.
-
-The output appears in the buffer `*Async Shell Command*'.
-
-\(fn COMMAND &optional ARG FILE-LIST)" t nil)
-
-(autoload 'dired-do-shell-command "dired-aux" "\
-Run a shell command COMMAND on the marked files.
-If no files are marked or a numeric prefix arg is given,
-the next ARG files are used.  Just \\[universal-argument] means the current file.
-The prompt mentions the file(s) or the marker, as appropriate.
-
-If there is a `*' in COMMAND, surrounded by whitespace, this runs
-COMMAND just once with the entire file list substituted there.
-
-If there is no `*', but there is a `?' in COMMAND, surrounded by
-whitespace, this runs COMMAND on each file individually with the
-file name substituted for `?'.
-
-Otherwise, this runs COMMAND on each file individually with the
-file name added at the end of COMMAND (separated by a space).
-
-`*' and `?' when not surrounded by whitespace have no special
-significance for `dired-do-shell-command', and are passed through
-normally to the shell, but you must confirm first.
-
-If you want to use `*' as a shell wildcard with whitespace around
-it, write `*\"\"' in place of just `*'.  This is equivalent to just
-`*' in the shell, but avoids Dired's special handling.
-
-If COMMAND ends in `&', `;', or `;&', it is executed in the
-background asynchronously, and the output appears in the buffer
-`*Async Shell Command*'.  When operating on multiple files and COMMAND
-ends in `&', the shell command is executed on each file in parallel.
-However, when COMMAND ends in `;' or `;&' then commands are executed
-in the background on each file sequentially waiting for each command
-to terminate before running the next command.  You can also use
-`dired-do-async-shell-command' that automatically adds `&'.
-
-Otherwise, COMMAND is executed synchronously, and the output
-appears in the buffer `*Shell Command Output*'.
-
-This feature does not try to redisplay Dired buffers afterward, as
-there's no telling what files COMMAND may have changed.
-Type \\[dired-do-redisplay] to redisplay the marked files.
-
-When COMMAND runs, its working directory is the top-level directory
-of the Dired buffer, so output files usually are created there
-instead of in a subdir.
-
-In a noninteractive call (from Lisp code), you must specify
-the list of file names explicitly with the FILE-LIST argument, which
-can be produced by `dired-get-marked-files', for example.
-
-\(fn COMMAND &optional ARG FILE-LIST)" t nil)
-
-(autoload 'dired-run-shell-command "dired-aux" "\
-
-
-\(fn COMMAND)" nil nil)
-
-(autoload 'dired-do-kill-lines "dired-aux" "\
-Kill all marked lines (not the files).
-With a prefix argument, kill that many lines starting with the current line.
-\(A negative argument kills backward.)
-If you use this command with a prefix argument to kill the line
-for a file that is a directory, which you have inserted in the
-Dired buffer as a subdirectory, then it deletes that subdirectory
-from the buffer as well.
-To kill an entire subdirectory (without killing its line in the
-parent directory), go to its directory header line and use this
-command with a prefix argument (the value does not matter).
-
-\(fn &optional ARG FMT)" t nil)
-
-(autoload 'dired-do-compress-to "dired-aux" "\
-Compress selected files and directories to an archive.
-You are prompted for the archive name.
-The archiving command is chosen based on the archive name extension and
-`dired-compress-files-alist'.
-
-\(fn)" t nil)
-
-(autoload 'dired-compress-file "dired-aux" "\
-Compress or uncompress FILE.
-Return the name of the compressed or uncompressed file.
-Return nil if no change in files.
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-query "dired-aux" "\
-Format PROMPT with ARGS, query user, and store the result in SYM.
-The return value is either nil or t.
-
-The user may type y or SPC to accept once; n or DEL to skip once;
-! to accept this and subsequent queries; or q or ESC to decline
-this and subsequent queries.
-
-If SYM is already bound to a non-nil value, this function may
-return automatically without querying the user.  If SYM is !,
-return t; if SYM is q or ESC, return nil.
-
-\(fn SYM PROMPT &rest ARGS)" nil nil)
-
-(autoload 'dired-do-compress "dired-aux" "\
-Compress or uncompress marked (or next ARG) files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-byte-compile "dired-aux" "\
-Byte compile marked (or next ARG) Emacs Lisp files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-load "dired-aux" "\
-Load the marked (or next ARG) Emacs Lisp files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-redisplay "dired-aux" "\
-Redisplay all marked (or next ARG) files.
-If on a subdir line, redisplay that subdirectory.  In that case,
-a prefix arg lets you edit the `ls' switches used for the new listing.
-
-Dired remembers switches specified with a prefix arg, so that reverting
-the buffer will not reset them.  However, using `dired-undo' to re-insert
-or delete subdirectories can bypass this machinery.  Hence, you sometimes
-may have to reset some subdirectory switches after a `dired-undo'.
-You can reset all subdirectory switches to the default using
-\\<dired-mode-map>\\[dired-reset-subdir-switches].
-See Info node `(emacs)Subdir switches' for more details.
-
-\(fn &optional ARG TEST-FOR-SUBDIR)" t nil)
-
-(autoload 'dired-add-file "dired-aux" "\
-
-
-\(fn FILENAME &optional MARKER-CHAR)" nil nil)
-
-(autoload 'dired-remove-file "dired-aux" "\
-
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-relist-file "dired-aux" "\
-Create or update the line for FILE in all Dired buffers it would belong in.
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-copy-file "dired-aux" "\
-
-
-\(fn FROM TO OK-FLAG)" nil nil)
-
-(autoload 'dired-rename-file "dired-aux" "\
-
-
-\(fn FILE NEWNAME OK-IF-ALREADY-EXISTS)" nil nil)
-
-(autoload 'dired-create-directory "dired-aux" "\
-Create a directory called DIRECTORY.
-If DIRECTORY already exists, signal an error.
-
-\(fn DIRECTORY)" t nil)
-
-(autoload 'dired-do-copy "dired-aux" "\
-Copy all marked (or next ARG) files, or copy the current file.
-When operating on just the current file, prompt for the new name.
-
-When operating on multiple or marked files, prompt for a target
-directory, and make the new copies in that directory, with the
-same names as the original files.  The initial suggestion for the
-target directory is the Dired buffer's current directory (or, if
-`dired-dwim-target' is non-nil, the current directory of a
-neighboring Dired window).
-
-If `dired-copy-preserve-time' is non-nil, this command preserves
-the modification time of each old file in the copy, similar to
-the \"-p\" option for the \"cp\" shell command.
-
-This command copies symbolic links by creating new ones, similar
-to the \"-d\" option for the \"cp\" shell command.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-symlink "dired-aux" "\
-Make symbolic links to current file or all marked (or next ARG) files.
-When operating on just the current file, you specify the new name.
-When operating on multiple or marked files, you specify a directory
-and new symbolic links are made in that directory
-with the same names that the files currently have.  The default
-suggested for the target directory depends on the value of
-`dired-dwim-target', which see.
-
-For relative symlinks, use \\[dired-do-relsymlink].
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-hardlink "dired-aux" "\
-Add names (hard links) current file or all marked (or next ARG) files.
-When operating on just the current file, you specify the new name.
-When operating on multiple or marked files, you specify a directory
-and new hard links are made in that directory
-with the same names that the files currently have.  The default
-suggested for the target directory depends on the value of
-`dired-dwim-target', which see.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-rename "dired-aux" "\
-Rename current file or all marked (or next ARG) files.
-When renaming just the current file, you specify the new name.
-When renaming multiple or marked files, you specify a directory.
-This command also renames any buffers that are visiting the files.
-The default suggested for the target directory depends on the value
-of `dired-dwim-target', which see.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-rename-regexp "dired-aux" "\
-Rename selected files whose names match REGEXP to NEWNAME.
-
-With non-zero prefix argument ARG, the command operates on the next ARG
-files.  Otherwise, it operates on all the marked files, or the current
-file if none are marked.
-
-As each match is found, the user must type a character saying
-  what to do with it.  For directions, type \\[help-command] at that time.
-NEWNAME may contain \\=\\<n> or \\& as in `query-replace-regexp'.
-REGEXP defaults to the last regexp used.
-
-With a zero prefix arg, renaming by regexp affects the absolute file name.
-Normally, only the non-directory part of the file name is used and changed.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-do-copy-regexp "dired-aux" "\
-Copy selected files whose names match REGEXP to NEWNAME.
-See function `dired-do-rename-regexp' for more info.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-do-hardlink-regexp "dired-aux" "\
-Hardlink selected files whose names match REGEXP to NEWNAME.
-See function `dired-do-rename-regexp' for more info.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-do-symlink-regexp "dired-aux" "\
-Symlink selected files whose names match REGEXP to NEWNAME.
-See function `dired-do-rename-regexp' for more info.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-upcase "dired-aux" "\
-Rename all marked (or next ARG) files to upper case.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-downcase "dired-aux" "\
-Rename all marked (or next ARG) files to lower case.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-maybe-insert-subdir "dired-aux" "\
-Insert this subdirectory into the same dired buffer.
-If it is already present, just move to it (type \\[dired-do-redisplay] to refresh),
-  else inserts it at its natural place (as `ls -lR' would have done).
-With a prefix arg, you may edit the ls switches used for this listing.
-  You can add `R' to the switches to expand the whole tree starting at
-  this subdirectory.
-This function takes some pains to conform to `ls -lR' output.
-
-Dired remembers switches specified with a prefix arg, so that reverting
-the buffer will not reset them.  However, using `dired-undo' to re-insert
-or delete subdirectories can bypass this machinery.  Hence, you sometimes
-may have to reset some subdirectory switches after a `dired-undo'.
-You can reset all subdirectory switches to the default using
-\\<dired-mode-map>\\[dired-reset-subdir-switches].
-See Info node `(emacs)Subdir switches' for more details.
-
-\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-
-(autoload 'dired-insert-subdir "dired-aux" "\
-Insert this subdirectory into the same Dired buffer.
-If it is already present, overwrite the previous entry;
-  otherwise, insert it at its natural place (as `ls -lR' would
-  have done).
-With a prefix arg, you may edit the `ls' switches used for this listing.
-  You can add `R' to the switches to expand the whole tree starting at
-  this subdirectory.
-This function takes some pains to conform to `ls -lR' output.
-
-\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-
-(autoload 'dired-prev-subdir "dired-aux" "\
-Go to previous subdirectory, regardless of level.
-When called interactively and not on a subdir line, go to this subdir's line.
-
-\(fn ARG &optional NO-ERROR-IF-NOT-FOUND NO-SKIP)" t nil)
-
-(autoload 'dired-goto-subdir "dired-aux" "\
-Go to end of header line of DIR in this dired buffer.
-Return value of point on success, otherwise return nil.
-The next char is either \\n, or \\r if DIR is hidden.
-
-\(fn DIR)" t nil)
-
-(autoload 'dired-mark-subdir-files "dired-aux" "\
-Mark all files except `.' and `..' in current subdirectory.
-If the Dired buffer shows multiple directories, this command
-marks the files listed in the subdirectory that point is in.
-
-\(fn)" t nil)
-
-(autoload 'dired-kill-subdir "dired-aux" "\
-Remove all lines of current subdirectory.
-Lower levels are unaffected.
-
-\(fn &optional REMEMBER-MARKS)" t nil)
-
-(autoload 'dired-tree-up "dired-aux" "\
-Go up ARG levels in the dired tree.
-
-\(fn ARG)" t nil)
-
-(autoload 'dired-tree-down "dired-aux" "\
-Go down in the dired tree.
-
-\(fn)" t nil)
-
-(autoload 'dired-hide-subdir "dired-aux" "\
-Hide or unhide the current subdirectory and move to next directory.
-Optional prefix arg is a repeat factor.
-Use \\[dired-hide-all] to (un)hide all directories.
-
-\(fn ARG)" t nil)
-
-(autoload 'dired-hide-all "dired-aux" "\
-Hide all subdirectories, leaving only their header lines.
-If there is already something hidden, make everything visible again.
-Use \\[dired-hide-subdir] to (un)hide a particular subdirectory.
-
-\(fn &optional IGNORED)" t nil)
-
-(autoload 'dired-isearch-filenames-setup "dired-aux" "\
-Set up isearch to search in Dired file names.
-Intended to be added to `isearch-mode-hook'.
-
-\(fn)" nil nil)
-
-(autoload 'dired-isearch-filenames "dired-aux" "\
-Search for a string using Isearch only in file names in the Dired buffer.
-
-\(fn)" t nil)
-
-(autoload 'dired-isearch-filenames-regexp "dired-aux" "\
-Search for a regexp using Isearch only in file names in the Dired buffer.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-isearch "dired-aux" "\
-Search for a string through all marked files using Isearch.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-isearch-regexp "dired-aux" "\
-Search for a regexp through all marked files using Isearch.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-search "dired-aux" "\
-Search through all marked files for a match for REGEXP.
-Stops when a match is found.
-To continue searching for next match, use command \\[tags-loop-continue].
-
-\(fn REGEXP)" t nil)
-
-(autoload 'dired-do-query-replace-regexp "dired-aux" "\
-Do `query-replace-regexp' of FROM with TO, on all marked files.
-Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
-If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue].
-
-\(fn FROM TO &optional DELIMITED)" t nil)
-
-(autoload 'dired-show-file-type "dired-aux" "\
-Print the type of FILE, according to the `file' command.
-If you give a prefix to this command, and FILE is a symbolic
-link, then the type of the file linked to by FILE is printed
-instead.
-
-\(fn FILE &optional DEREF-SYMLINKS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "dired-x" "dired-x.el" "06f532e2e812fa1cb10ade31249e9700")
-;;; Generated autoloads from dired-x.el
-
-(autoload 'dired-jump "dired-x" "\
-Jump to Dired buffer corresponding to current buffer.
-If in a file, Dired the current directory and move to file's line.
-If in Dired already, pop up a level and goto old directory's line.
-In case the proper Dired file line cannot be found, refresh the dired
-buffer and try again.
-When OTHER-WINDOW is non-nil, jump to Dired buffer in other window.
-Interactively with prefix argument, read FILE-NAME and
-move to its line in dired.
-
-\(fn &optional OTHER-WINDOW FILE-NAME)" t nil)
-
-(autoload 'dired-jump-other-window "dired-x" "\
-Like \\[dired-jump] (`dired-jump') but in other window.
-
-\(fn &optional FILE-NAME)" t nil)
-
-(autoload 'dired-do-relsymlink "dired-x" "\
-Relative symlink all marked (or next ARG) files into a directory.
-Otherwise make a relative symbolic link to the current file.
-This creates relative symbolic links like
-
-    foo -> ../bar/foo
-
-not absolute ones like
-
-    foo -> /ugly/file/name/that/may/change/any/day/bar/foo
-
-For absolute symlinks, use \\[dired-do-symlink].
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
 (provide 'dired)
 
 (run-hooks 'dired-load-hook)           ; for your customizations
index 641d65725922e4ee2aa4e3e95e497889fb452b02..9f1b8951a1c303b351a583ab9f93259fbfad3a2e 100644 (file)
@@ -265,7 +265,7 @@ Summary:
 
 
 ;; Local Variables:
-;; generated-autoload-file: "eieio-core.el"
+;; generated-autoload-file: "eieio-loaddefs.el"
 ;; End:
 
 (provide 'eieio-compat)
index f524c17e759b177d0140ee4072ec5a728a94f5e1..61d076da87593b14ea687cf61342557aaaeaeded 100644 (file)
@@ -33,6 +33,7 @@
 
 (require 'cl-lib)
 (require 'pcase)
+(require 'eieio-loaddefs)
 
 ;;;
 ;; A few functions that are better in the official EIEIO src, but
@@ -756,9 +757,7 @@ Argument FN is the function calling this verifier."
          ;; The slot-missing method is a cool way of allowing an object author
          ;; to intercept missing slot definitions.  Since it is also the LAST
          ;; thing called in this fn, its return value would be retrieved.
-         (slot-missing obj slot 'oref)
-         ;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
-         )
+         (slot-missing obj slot 'oref))
       (cl-check-type obj eieio-object)
       (eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref))))
 
@@ -780,9 +779,7 @@ Fills in OBJ's SLOT with its default value."
            ;; Oref that slot.
            (aref (eieio--class-class-allocation-values cl)
                  c)
-         (slot-missing obj slot 'oref-default)
-         ;;(signal 'invalid-slot-name (list (class-name cl) slot))
-         )
+         (slot-missing obj slot 'oref-default))
       (eieio-barf-if-slot-unbound
        (let ((val (cl--slot-descriptor-initform
                    (aref (eieio--class-slots cl)
@@ -822,9 +819,7 @@ Fills in OBJ's SLOT with VALUE."
              (aset (eieio--class-class-allocation-values class)
                    c value))
          ;; See oref for comment on `slot-missing'
-         (slot-missing obj slot 'oset value)
-         ;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
-         )
+         (slot-missing obj slot 'oset value))
       (eieio--validate-slot-value class c value slot)
       (aset obj c value))))
 
@@ -1100,98 +1095,6 @@ method invocation orders of the involved classes."
 (cl-defmethod cl-generic-generalizers ((_specializer (head subclass)))
   (list eieio--generic-subclass-generalizer))
 
-\f
-;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "52d481d50642de76b077ba0bafdd2cd4")
-;;; Generated autoloads from eieio-compat.el
-
-(autoload 'eieio--defalias "eieio-compat" "\
-Like `defalias', but with less side-effects.
-More specifically, it has no side-effects at all when the new function
-definition is the same (`eq') as the old one.
-
-\(fn NAME BODY)" nil nil)
-
-(autoload 'defgeneric "eieio-compat" "\
-Create a generic function METHOD.
-DOC-STRING is the base documentation for this class.  A generic
-function has no body, as its purpose is to decide which method body
-is appropriate to use.  Uses `defmethod' to create methods, and calls
-`defgeneric' for you.  With this implementation the ARGS are
-currently ignored.  You can use `defgeneric' to apply specialized
-top level documentation to a method.
-
-\(fn METHOD ARGS &optional DOC-STRING)" nil t)
-
-(function-put 'defgeneric 'doc-string-elt '3)
-
-(make-obsolete 'defgeneric 'cl-defgeneric '"25.1")
-
-(autoload 'defmethod "eieio-compat" "\
-Create a new METHOD through `defgeneric' with ARGS.
-
-The optional second argument KEY is a specifier that
-modifies how the method is called, including:
-   :before  - Method will be called before the :primary
-   :primary - The default if not specified
-   :after   - Method will be called after the :primary
-   :static  - First arg could be an object or class
-The next argument is the ARGLIST.  The ARGLIST specifies the arguments
-to the method as with `defun'.  The first argument can have a type
-specifier, such as:
-  ((VARNAME CLASS) ARG2 ...)
-where VARNAME is the name of the local variable for the method being
-created.  The CLASS is a class symbol for a class made with `defclass'.
-A DOCSTRING comes after the ARGLIST, and is optional.
-All the rest of the args are the BODY of the method.  A method will
-return the value of the last form in the BODY.
-
-Summary:
-
- (defmethod mymethod [:before | :primary | :after | :static]
-                     ((typearg class-name) arg2 &optional opt &rest rest)
-    \"doc-string\"
-     body)
-
-\(fn METHOD &rest ARGS)" nil t)
-
-(function-put 'defmethod 'doc-string-elt '3)
-
-(make-obsolete 'defmethod 'cl-defmethod '"25.1")
-
-(autoload 'eieio--defgeneric-init-form "eieio-compat" "\
-
-
-\(fn METHOD DOC-STRING)" nil nil)
-
-(autoload 'eieio--defmethod "eieio-compat" "\
-
-
-\(fn METHOD KIND ARGCLASS CODE)" nil nil)
-
-(autoload 'eieio-defmethod "eieio-compat" "\
-Obsolete work part of an old version of the `defmethod' macro.
-
-\(fn METHOD ARGS)" nil nil)
-
-(make-obsolete 'eieio-defmethod 'cl-defmethod '"24.1")
-
-(autoload 'eieio-defgeneric "eieio-compat" "\
-Obsolete work part of an old version of the `defgeneric' macro.
-
-\(fn METHOD DOC-STRING)" nil nil)
-
-(make-obsolete 'eieio-defgeneric 'cl-defgeneric '"24.1")
-
-(autoload 'eieio-defclass "eieio-compat" "\
-
-
-\(fn CNAME SUPERCLASSES SLOTS OPTIONS)" nil nil)
-
-(make-obsolete 'eieio-defclass 'eieio-defclass-internal '"25.1")
-
-;;;***
-\f
-
 (provide 'eieio-core)
 
 ;;; eieio-core.el ends here
index 31d0b85c55a5e21e7f243178edf3a4ba32ab4e34..08b1908c0bab0696a7e1c29aa9d880d1a50d0c74 100644 (file)
@@ -473,7 +473,7 @@ Return the symbol for the group, or nil"
 (provide 'eieio-custom)
 
 ;; Local variables:
-;; generated-autoload-file: "eieio.el"
+;; generated-autoload-file: "eieio-loaddefs.el"
 ;; End:
 
 ;;; eieio-custom.el ends here
index a5d8b6fcf8951c737955b610b3c571724862803b..60fcafa1ed1a475ce5e658cbb352e649ba1a4537 100644 (file)
@@ -349,7 +349,7 @@ INDENT is the current indentation level."
 (provide 'eieio-opt)
 
 ;; Local variables:
-;; generated-autoload-file: "eieio.el"
+;; generated-autoload-file: "eieio-loaddefs.el"
 ;; End:
 
 ;;; eieio-opt.el ends here
index 790e8bc9e0e3cce930cc0551c7630b90b59c0f0a..909785c3e6df1b53ec13ef56a77c131fbc846d01 100644 (file)
@@ -678,7 +678,8 @@ This class is not stored in the `parent' slot of a class vector."
 
 (setq eieio-default-superclass (cl--find-class 'eieio-default-superclass))
 
-(defalias 'standard-class 'eieio-default-superclass)
+(define-obsolete-function-alias 'standard-class
+  'eieio-default-superclass "25.2")
 
 (cl-defgeneric make-instance (class &rest initargs)
   "Make a new instance of CLASS based on INITARGS.
@@ -765,11 +766,7 @@ dynamically set from SLOTS."
   ;; Shared initialize will parse our slots for us.
   (shared-initialize this slots))
 
-(cl-defgeneric slot-missing (object slot-name operation &optional new-value)
-  "Method invoked when an attempt to access a slot in OBJECT fails.")
-
-(cl-defmethod slot-missing ((object eieio-default-superclass) slot-name
-                        _operation &optional _new-value)
+(cl-defgeneric slot-missing (object slot-name _operation &optional _new-value)
   "Method invoked when an attempt to access a slot in OBJECT fails.
 SLOT-NAME is the name of the failed slot, OPERATION is the type of access
 that was requested, and optional NEW-VALUE is the value that was desired
@@ -777,8 +774,9 @@ to be set.
 
 This method is called from `oref', `oset', and other functions which
 directly reference slots in EIEIO objects."
-  (signal 'invalid-slot-name (list (eieio-object-name object)
-                                  slot-name)))
+  (signal 'invalid-slot-name
+          (list (if (eieio-object-p object) (eieio-object-name object) object)
+                slot-name)))
 
 (cl-defgeneric slot-unbound (object class slot-name fn)
   "Slot unbound is invoked during an attempt to reference an unbound slot.")
@@ -815,22 +813,19 @@ first and modify the returned object.")
     (if params (shared-initialize nobj params))
     nobj))
 
-(cl-defgeneric destructor (this &rest params)
-  "Destructor for cleaning up any dynamic links to our object.")
-
-(cl-defmethod destructor ((_this eieio-default-superclass) &rest _params)
-  "Destructor for cleaning up any dynamic links to our object.
-Argument THIS is the object being destroyed.  PARAMS are additional
-ignored parameters."
+(cl-defgeneric destructor (_this &rest _params)
+  "Destructor for cleaning up any dynamic links to our object."
+  (declare (obsolete nil "25.2"))
   ;; No cleanup... yet.
-  )
+  nil)
 
-(cl-defgeneric object-print (this &rest strings)
-  "Pretty printer for object THIS.  Call function `object-name' with STRINGS.
+(cl-defgeneric object-print (this &rest _strings)
+  "Pretty printer for object THIS.
 
 It is sometimes useful to put a summary of the object into the
 default #<notation> string when using EIEIO browsing tools.
-Implement this method to customize the summary.")
+Implement this method to customize the summary."
+  (format "%S" this))
 
 (cl-defmethod object-print ((this eieio-default-superclass) &rest strings)
   "Pretty printer for object THIS.  Call function `object-name' with STRINGS.
@@ -938,11 +933,12 @@ this object."
 \f
 ;;; Unimplemented functions from CLOS
 ;;
-(defun change-class (_obj _class)
+(defun eieio-change-class (_obj _class)
   "Change the class of OBJ to type CLASS.
 This may create or delete slots, but does not affect the return value
 of `eq'."
   (error "EIEIO: `change-class' is unimplemented"))
+(define-obsolete-function-alias 'change-class 'eieio-change-class "25.2")
 
 ;; Hook ourselves into help system for describing classes and methods.
 ;; FIXME: This is not actually needed any more since we can click on the
@@ -970,41 +966,6 @@ variable PRINT-FUNCTION.  Optional argument NOESCAPE is passed to
 (advice-add 'edebug-prin1-to-string
             :around #'eieio-edebug-prin1-to-string)
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "eieio-custom" "eieio-custom.el" "916f54b818479a77a02f3ecccda84a11")
-;;; Generated autoloads from eieio-custom.el
-
-(autoload 'customize-object "eieio-custom" "\
-Customize OBJ in a custom buffer.
-Optional argument GROUP is the sub-group of slots to display.
-
-\(fn OBJ &optional GROUP)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "d00419c898056fadf2f8e491f864aa1e")
-;;; Generated autoloads from eieio-opt.el
-
-(autoload 'eieio-browse "eieio-opt" "\
-Create an object browser window to show all objects.
-If optional ROOT-CLASS, then start with that, otherwise start with
-variable `eieio-default-superclass'.
-
-\(fn &optional ROOT-CLASS)" t nil)
-
-(define-obsolete-function-alias 'eieio-help-class 'cl--describe-class "25.1")
-
-(autoload 'eieio-help-constructor "eieio-opt" "\
-Describe CTR if it is a class constructor.
-
-\(fn CTR)" nil nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
 (provide 'eieio)
 
 ;;; eieio ends here
index 393f1d51050252636ad1aab73e57f4866298ef82..0b647a028ca223bab32f9289b10731d5e5ec99ca 100644 (file)
@@ -2,13 +2,16 @@
 
 ;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
-;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-;; Maintainer: Artur Malabarba <bruce.connor.am@gmail.com>
+;; Author: Artur Malabarba <emacs@endlessparentheses.com>
+;; Package-Requires: ((emacs "24.1"))
 ;; Version: 1.0.4
 ;; Keywords: extensions lisp
 ;; Prefix: let-alist
 ;; Separator: -
 
+;; This is an Elpa :core package. Don't use functionality that is not
+;; compatible with Emacs 24.1.
+
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software: you can redistribute it and/or modify
@@ -134,7 +137,7 @@ displayed in the example above."
   (let ((var (make-symbol "alist")))
     `(let ((,var ,alist))
        (let ,(mapcar (lambda (x) `(,(car x) ,(let-alist--access-sexp (car x) var)))
-               (delete-dups (let-alist--deep-dot-search body)))
+                     (delete-dups (let-alist--deep-dot-search body)))
          ,@body))))
 
 (provide 'let-alist)
index f60bff4a477f9014cd8afcd316cb1fd32a683371..97b899754693194c05ab1b89e58077b0467b6076 100644 (file)
 
 (require 'tabulated-list)
 (require 'macroexp)
+(require 'url-handlers)
 
 (defgroup package nil
   "Manager for Emacs Lisp packages."
index 9f112c4eb83c6a2d20723c04551c9da4ebca75b9..e51d5d86540f8ca858462349da6ceef9624a7fa3 100644 (file)
   :link '(custom-manual "(epa) Top")
   :group 'epg)
 
+(defcustom epa-replace-original-text 'ask
+  "Whether the original text shall be replaced by the decrypted.
+
+If t, replace the original text without any confirmation.
+If nil, don't replace the original text and show the result in a new buffer.
+If neither t nor nil, ask user for confirmation."
+  :type '(choice (const :tag "Never" nil)
+                (const :tag "Ask the user" ask)
+                (const :tag "Always" t))
+  :group 'epa)
+
 (defcustom epa-popup-info-window t
   "If non-nil, display status information from epa commands in another window."
   :type 'boolean
@@ -872,7 +883,9 @@ For example:
          (with-current-buffer (funcall make-buffer-function)
            (let ((inhibit-read-only t))
              (insert plain)))
-       (if (y-or-n-p "Replace the original text? ")
+       (if (or (eq epa-replace-original-text t)
+                (and epa-replace-original-text
+                     (y-or-n-p "Replace the original text? ")))
            (let ((inhibit-read-only t))
              (delete-region start end)
              (goto-char start)
@@ -968,7 +981,9 @@ For example:
                 (or coding-system-for-read
                     (get-text-property start 'epa-coding-system-used)
                     'undecided)))
-    (if (y-or-n-p "Replace the original text? ")
+    (if (or (eq epa-replace-original-text t)
+            (and epa-replace-original-text
+                 (y-or-n-p "Replace the original text? ")))
        (let ((inhibit-read-only t)
              buffer-read-only)
          (delete-region start end)
index 06a23e80fdd781ae6d9eaecc98a5571ebc9010bb..e07dc90fcdcb1f05d2d48eb72fc23941c3889860 100644 (file)
@@ -523,47 +523,45 @@ The current buffer is given by BUFFER."
 (defun erc-server-connect (server port buffer)
   "Perform the connection and login using the specified SERVER and PORT.
 We will store server variables in the buffer given by BUFFER."
-  (let ((msg (erc-format-message 'connect ?S server ?p port)))
+  (let ((msg (erc-format-message 'connect ?S server ?p port)) process)
     (message "%s" msg)
-    (let ((process (funcall erc-server-connect-function
-                            (format "erc-%s-%s" server port)
-                            nil server port)))
-      (unless (processp process)
-        (error "Connection attempt failed"))
+    (setq process (funcall erc-server-connect-function
+                           (format "erc-%s-%s" server port) nil server port))
+    (unless (processp process)
+      (error "Connection attempt failed"))
+    ;; Misc server variables
+    (with-current-buffer buffer
+      (setq erc-server-process process)
+      (setq erc-server-quitting nil)
+      (setq erc-server-reconnecting nil)
+      (setq erc-server-timed-out nil)
+      (setq erc-server-banned nil)
+      (setq erc-server-error-occurred nil)
+      (let ((time (erc-current-time)))
+        (setq erc-server-last-sent-time time)
+        (setq erc-server-last-ping-time time)
+        (setq erc-server-last-received-time time))
+      (setq erc-server-lines-sent 0)
+      ;; last peers (sender and receiver)
+      (setq erc-server-last-peers '(nil . nil)))
+    ;; we do our own encoding and decoding
+    (when (fboundp 'set-process-coding-system)
+      (set-process-coding-system process 'raw-text))
+    ;; process handlers
+    (set-process-sentinel process 'erc-process-sentinel)
+    (set-process-filter process 'erc-server-filter-function)
+    (set-process-buffer process buffer)
+    (erc-log "\n\n\n********************************************\n")
+    (message "%s" (erc-format-message
+                   'login ?n
+                   (with-current-buffer buffer (erc-current-nick))))
+    ;; wait with script loading until we receive a confirmation (first
+    ;; MOTD line)
+    (if (eq (process-status process) 'connect)
+        ;; waiting for a non-blocking connect - keep the user informed
+        (erc-display-message nil nil buffer "Opening connection..\n")
       (message "%s...done" msg)
-      ;; Misc server variables
-      (with-current-buffer buffer
-        (setq erc-server-process process)
-        (setq erc-server-quitting nil)
-        (setq erc-server-reconnecting nil)
-        (setq erc-server-timed-out nil)
-        (setq erc-server-banned nil)
-        (setq erc-server-error-occurred nil)
-        (let ((time (erc-current-time)))
-          (setq erc-server-last-sent-time time)
-          (setq erc-server-last-ping-time time)
-          (setq erc-server-last-received-time time))
-        (setq erc-server-lines-sent 0)
-        ;; last peers (sender and receiver)
-        (setq erc-server-last-peers '(nil . nil)))
-      ;; we do our own encoding and decoding
-      (when (fboundp 'set-process-coding-system)
-        (set-process-coding-system process 'raw-text))
-      ;; process handlers
-      (set-process-sentinel process 'erc-process-sentinel)
-      (set-process-filter process 'erc-server-filter-function)
-      (set-process-buffer process buffer)))
-  (erc-log "\n\n\n********************************************\n")
-  (message "%s" (erc-format-message
-            'login ?n
-            (with-current-buffer buffer (erc-current-nick))))
-  ;; wait with script loading until we receive a confirmation (first
-  ;; MOTD line)
-  (if (eq erc-server-connect-function 'open-network-stream-nowait)
-      ;; it's a bit unclear otherwise that it's attempting to establish a
-      ;; connection
-      (erc-display-message nil nil buffer "Opening connection..\n")
-    (erc-login)))
+      (erc-login)) ))
 
 (defun erc-server-reconnect ()
 "Reestablish the current IRC connection.
index 2b22bd55ccc4ca09fa435365d26b0f125601d2ff..49ba4ccf8cb4b05d0b23c2ef4b29fdef28f5da47 100644 (file)
@@ -1471,6 +1471,10 @@ Defaults to the server buffer."
 (defconst erc-default-port 6667
   "IRC port to use if it cannot be detected otherwise.")
 
+(defconst erc-default-port-tls 6697
+  "IRC port to use for encrypted connections if it cannot be
+  detected otherwise.")
+
 (defcustom erc-join-buffer 'buffer
   "Determines how to display a newly created IRC buffer.
 
@@ -2197,7 +2201,8 @@ be invoked for the values of the other parameters."
 (defun erc-tls (&rest r)
   "Interactively select TLS connection parameters and run ERC.
 Arguments are the same as for `erc'."
-  (interactive (erc-select-read-args))
+  (interactive (let ((erc-default-port erc-default-port-tls))
+                (erc-select-read-args)))
   (let ((erc-server-connect-function 'erc-open-tls-stream))
     (apply #'erc r)))
 
index 8d3f8bfc37dcaae730a235fb40860b5c55ca0557..037b978b6fb42e634cd28c40736ac2f7040a56b4 100644 (file)
@@ -570,7 +570,7 @@ Looks at `ffap-ftp-default-user', returns \"\" for \"localhost\"."
 (defvaralias 'ffap-newsgroup-heads  'thing-at-point-newsgroup-heads)
 (defalias 'ffap-newsgroup-p 'thing-at-point-newsgroup-p)
 
-(defsubst ffap-url-p (string)
+(defun ffap-url-p (string)
   "If STRING looks like an URL, return it (maybe improved), else nil."
   (when (and (stringp string) ffap-url-regexp)
     (let* ((case-fold-search t)
index 4c5d43fb44eaca7156e553c862460197e141e22c..b6c1f686fe15b4457da4fa1f71d76c0af41f9d6c 100644 (file)
 ;;; Commentary
 
 ;; This package is an abstraction layer from the different low-level
-;; file notification packages `gfilenotify', `inotify' and
+;; file notification packages `inotify', `kqueue', `gfilenotify' and
 ;; `w32notify'.
 
 ;;; Code:
 
 (defconst file-notify--library
   (cond
-   ((featurep 'gfilenotify) 'gfilenotify)
    ((featurep 'inotify) 'inotify)
+   ((featurep 'kqueue) 'kqueue)
+   ((featurep 'gfilenotify) 'gfilenotify)
    ((featurep 'w32notify) 'w32notify))
   "Non-nil when Emacs has been compiled with file notification support.
 The value is the name of the low-level file notification package
@@ -40,25 +41,24 @@ could use another implementation.")
 (defvar file-notify-descriptors (make-hash-table :test 'equal)
   "Hash table for registered file notification descriptors.
 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
+`inotify', `kqueue', `gfilenotify', `w32notify' or a file name
+handler.  The value in the hash table is a list
 
   (DIR (FILE . CALLBACK) (FILE . CALLBACK) ...)
 
 Several values for a given DIR happen only for `inotify', when
 different files from the same directory are watched.")
 
-(defun file-notify--rm-descriptor (descriptor &optional what)
+(defun file-notify--rm-descriptor (descriptor)
   "Remove DESCRIPTOR from `file-notify-descriptors'.
 DESCRIPTOR should be an object returned by `file-notify-add-watch'.
-If it is registered in `file-notify-descriptors', a stopped event is sent.
-WHAT is a file or directory name to be removed, needed just for `inotify'."
+If it is registered in `file-notify-descriptors', a stopped event is sent."
   (let* ((desc (if (consp descriptor) (car descriptor) descriptor))
         (file (if (consp descriptor) (cdr descriptor)))
          (registered (gethash desc file-notify-descriptors))
         (dir (car registered)))
 
-    (when (and (consp registered) (or (null what) (string-equal dir what)))
+    (when (consp registered)
       ;; Send `stopped' event.
       (dolist (entry (cdr registered))
        (funcall (cdr entry)
@@ -76,7 +76,8 @@ WHAT is a file or directory name to be removed, needed just for `inotify'."
            (remhash desc file-notify-descriptors)
          (puthash desc registered file-notify-descriptors))))))
 
-;; This function is used by `gfilenotify', `inotify' and `w32notify' events.
+;; This function is used by `inotify', `kqueue', `gfilenotify' and
+;; `w32notify' events.
 ;;;###autoload
 (defun file-notify-handle-event (event)
   "Handle file system monitoring event.
@@ -159,7 +160,7 @@ EVENT is the cadr of the event in `file-notify-handle-event'
        (setq actions nil))
 
       ;; Loop over actions.  In fact, more than one action happens only
-      ;; for `inotify'.
+      ;; for `inotify' and `kqueue'.
       (dolist (action actions)
 
        ;; Send pending event, if it doesn't match.
@@ -184,19 +185,17 @@ EVENT is the cadr of the event in `file-notify-handle-event'
        ;; Map action.  We ignore all events which cannot be mapped.
        (setq action
              (cond
-              ;; gfilenotify.
-              ((memq action '(attribute-changed changed created deleted))
+              ((memq action
+                      '(attribute-changed changed created deleted renamed))
                action)
-              ((eq action 'moved)
+              ((memq action '(moved rename))
                (setq file1 (file-notify--event-file1-name event))
                'renamed)
-
-              ;; inotify, w32notify.
               ((eq action 'ignored)
                 (setq stopped t actions nil))
-              ((eq action 'attrib) 'attribute-changed)
+              ((memq action '(attrib link)) 'attribute-changed)
               ((memq action '(create added)) 'created)
-              ((memq action '(modify modified)) 'changed)
+              ((memq action '(modify modified write)) 'changed)
               ((memq action '(delete delete-self move-self removed)) 'deleted)
               ;; Make the event pending.
               ((memq action '(moved-from renamed-from))
@@ -236,7 +235,6 @@ EVENT is the cadr of the event in `file-notify-handle-event'
           (setq pending-event nil))
 
         ;; Check for stopped.
-       ;;(message "file-notify-callback %S %S" file registered)
         (setq
          stopped
          (or
@@ -244,10 +242,13 @@ EVENT is the cadr of the event in `file-notify-handle-event'
           (and
            (memq action '(deleted renamed))
            (= (length (cdr registered)) 1)
-           (string-equal
-            (file-name-nondirectory file)
-           (or (file-name-nondirectory (car registered))
-               (car (cadr registered)))))))
+           (or
+            (string-equal
+             (file-name-nondirectory file)
+            (file-name-nondirectory (car registered)))
+            (string-equal
+             (file-name-nondirectory file)
+             (car (cadr registered)))))))
 
        ;; Apply callback.
        (when (and action
@@ -258,10 +259,17 @@ EVENT is the cadr of the event in `file-notify-handle-event'
                    ;; File matches.
                    (string-equal
                     (nth 0 entry) (file-name-nondirectory file))
+                   ;; Directory matches.
+                   (string-equal
+                    (file-name-nondirectory file)
+                    (file-name-nondirectory (car registered)))
                    ;; File1 matches.
                    (and (stringp file1)
                         (string-equal
                          (nth 0 entry) (file-name-nondirectory file1)))))
+          ;;(message
+           ;;"file-notify-callback %S %S %S %S %S"
+           ;;(file-notify--descriptor desc file) action file file1 registered)
          (if file1
              (funcall
               callback
@@ -272,11 +280,10 @@ EVENT is the cadr of the event in `file-notify-handle-event'
 
       ;; Modify `file-notify-descriptors'.
       (when stopped
-        (file-notify--rm-descriptor
-         (file-notify--descriptor desc file) file)))))
+        (file-notify-rm-watch (file-notify--descriptor desc file))))))
 
-;; `gfilenotify' and `w32notify' return a unique descriptor for every
-;; `file-notify-add-watch', while `inotify' returns a unique
+;; `kqueue', `gfilenotify' and `w32notify' return a unique descriptor
+;; for every `file-notify-add-watch', while `inotify' returns a unique
 ;; descriptor per inode only.
 (defun file-notify-add-watch (file flags callback)
   "Add a watch for filesystem events pertaining to FILE.
@@ -329,7 +336,7 @@ FILE is the name of the file whose event is being reported."
               (if (file-directory-p file)
                   file
                 (file-name-directory file))))
-       desc func l-flags registered)
+       desc func l-flags registered entry)
 
     (unless (file-directory-p dir)
       (signal 'file-notify-error `("Directory does not exist" ,dir)))
@@ -338,7 +345,12 @@ FILE is the name of the file whose event is being reported."
        ;; A file name handler could exist even if there is no local
        ;; file notification support.
        (setq desc (funcall
-                   handler 'file-notify-add-watch dir flags callback))
+                   handler 'file-notify-add-watch
+                    ;; kqueue does not report file changes in
+                    ;; directory monitor.  So we must watch the file
+                    ;; itself.
+                    (if (eq file-notify--library 'kqueue) file dir)
+                    flags callback))
 
       ;; Check, whether Emacs has been compiled with file notification
       ;; support.
@@ -349,8 +361,9 @@ FILE is the name of the file whose event is being reported."
       ;; Determine low-level function to be called.
       (setq func
            (cond
-            ((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
             ((eq file-notify--library 'inotify) 'inotify-add-watch)
+            ((eq file-notify--library 'kqueue) 'kqueue-add-watch)
+            ((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
             ((eq file-notify--library 'w32notify) 'w32notify-add-watch)))
 
       ;; Determine respective flags.
@@ -362,30 +375,32 @@ FILE is the name of the file whose event is being reported."
           (cond
            ((eq file-notify--library 'inotify)
             '(create delete delete-self modify move-self move))
+           ((eq file-notify--library 'kqueue)
+            '(create delete write extend rename))
            ((eq file-notify--library 'w32notify)
             '(file-name directory-name size last-write-time)))))
        (when (memq 'attribute-change flags)
          (push (cond
                  ((eq file-notify--library 'inotify) 'attrib)
+                 ((eq file-notify--library 'kqueue) 'attrib)
                  ((eq file-notify--library 'w32notify) 'attributes))
                 l-flags)))
 
       ;; Call low-level function.
-      (setq desc (funcall func dir l-flags 'file-notify-callback)))
+      (setq desc (funcall
+                  func (if (eq file-notify--library 'kqueue) file dir)
+                  l-flags 'file-notify-callback)))
 
     ;; Modify `file-notify-descriptors'.
-    (setq registered (gethash desc file-notify-descriptors))
-    (puthash
-     desc
-     `(,dir
-       (,(unless (file-directory-p file) (file-name-nondirectory file))
-       . ,callback)
-       . ,(cdr registered))
-     file-notify-descriptors)
+    (setq file (unless (file-directory-p file) (file-name-nondirectory file))
+         desc (if (consp desc) (car desc) desc)
+         registered (gethash desc file-notify-descriptors)
+         entry `(,file . ,callback))
+    (unless (member entry (cdr registered))
+      (puthash desc `(,dir ,entry . ,(cdr registered)) file-notify-descriptors))
 
     ;; Return descriptor.
-    (file-notify--descriptor
-     desc (unless (file-directory-p file) (file-name-nondirectory file)))))
+    (file-notify--descriptor desc file)))
 
 (defun file-notify-rm-watch (descriptor)
   "Remove an existing watch specified by its DESCRIPTOR.
@@ -410,8 +425,9 @@ DESCRIPTOR should be an object returned by `file-notify-add-watch'."
 
               (funcall
                (cond
-                ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
                 ((eq file-notify--library 'inotify) 'inotify-rm-watch)
+                ((eq file-notify--library 'kqueue) 'kqueue-rm-watch)
+                ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
                 ((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
                desc))
           (file-notify-error nil)))
@@ -441,8 +457,9 @@ DESCRIPTOR should be an object returned by `file-notify-add-watch'."
                (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 'kqueue) 'kqueue-valid-p)
+               ((eq file-notify--library 'gfilenotify) 'gfile-valid-p)
                ((eq file-notify--library 'w32notify) 'w32notify-valid-p))
               desc))
            t))))
index 6759c0715b79ee6f427a14217b4c82b43ecda1a6..63ae2e628d11ba61d6b5a5e06efb93f8b2b6bc39 100644 (file)
@@ -1996,6 +1996,16 @@ to case differences."
   (defun gnus-timer--function (timer)
     (elt timer 5)))
 
+(defun gnus-subsetp (list1 list2)
+  "Return t if LIST1 is a subset of LIST2.
+Similar to `subsetp' but use member for element test so that this works for
+lists of strings."
+  (when (and (listp list1) (listp list2))
+    (if list1
+       (and (member (car list1) list2)
+            (gnus-subsetp (cdr list1) list2))
+      t)))
+
 (provide 'gnus-util)
 
 ;;; gnus-util.el ends here
index 090023760c5f49358131d841ffcbdb2c9a13a1cd..fd01098fdcb41fc102cfc1328ec52ac658c1bacb 100644 (file)
@@ -125,6 +125,21 @@ Whether the passphrase is cached at all is controlled by
   :group 'message
   :type 'integer)
 
+(defcustom mml-secure-safe-bcc-list nil
+  "List of e-mail addresses that are safe to use in Bcc headers.
+EasyPG encrypts e-mails to Bcc addresses, and the encrypted e-mail
+by default identifies the used encryption keys, giving away the
+Bcc'ed identities.  Clearly, this contradicts the original goal of
+*blind* copies.
+For an academic paper explaining the problem, see URL
+`http://crypto.stanford.edu/portia/papers/bb-bcc.pdf'.
+Use this variable to specify e-mail addresses whose owners do not
+mind if they are identifiable as recipients.  This may be useful if
+you use Bcc headers to encrypt e-mails to yourself."
+  :version "25.1"
+  :group 'message
+  :type '(repeat string))
+
 ;;; Configuration/helper functions
 
 (defun mml-signencrypt-style (method &optional style)
@@ -275,6 +290,36 @@ Use METHOD if given.  Else use `mml-secure-method' or
   (interactive)
   (mml-secure-part "smime"))
 
+(defun mml-secure-is-encrypted-p ()
+  "Check whether secure encrypt tag is present."
+  (save-excursion
+    (goto-char (point-min))
+    (re-search-forward
+     (concat "^" (regexp-quote mail-header-separator) "\n"
+            "<#secure[^>]+encrypt")
+     nil t)))
+
+(defun mml-secure-bcc-is-safe ()
+  "Check whether usage of Bcc is safe (or absent).
+Bcc usage is safe in two cases: first, if the current message does
+not contain an MML secure encrypt tag;
+second, if the Bcc addresses are a subset of `mml-secure-safe-bcc-list'.
+In all other cases, ask the user whether Bcc usage is safe.
+Raise error if user answers no.
+Note that this function does not produce a meaningful return value:
+either an error is raised or not."
+  (when (mml-secure-is-encrypted-p)
+    (let ((bcc (mail-strip-quoted-names (message-fetch-field "bcc"))))
+      (when bcc
+       (let ((bcc-list (mapcar #'cadr
+                               (mail-extract-address-components bcc t))))
+         (unless (gnus-subsetp bcc-list mml-secure-safe-bcc-list)
+           (unless (yes-or-no-p "Message for encryption contains Bcc header.\
+  This may give away all Bcc'ed identities to all recipients.\
+  Are you sure that this is safe?\
+  (Customize `mml-secure-safe-bcc-list' to avoid this warning.) ")
+             (error "Aborted"))))))))
+
 ;; defuns that add the proper <#secure ...> tag to the top of the message body
 (defun mml-secure-message (method &optional modesym)
   (let ((mode (prin1-to-string modesym))
index 6b7f2caed1e9a5fcea4db2a4a0e8c867eb5b1041..0dc532f0c19b25b821ee913c7508e19a27780018 100644 (file)
@@ -845,7 +845,7 @@ Loads the variable `hfy-rgb-txt-colour-map', which is used by
 (provide 'hfy-cmap)
 
 ;; Local Variables:
-;; generated-autoload-file: "htmlfontify.el"
+;; generated-autoload-file: "htmlfontify-loaddefs.el"
 ;; End:
 
 ;;; hfy-cmap.el ends here
index aed341c371301d4f9b5bb774e48cb65c89e056ba..3731be621e2b8b9284093f4706632ddaf424a1fd 100644 (file)
@@ -90,6 +90,8 @@
 ;;  (`font-lock-fontify-region')
 (require 'cus-edit)
 
+(require 'htmlfontify-loaddefs)
+
 (defconst htmlfontify-version 0.21)
 
 (defconst hfy-meta-tags
@@ -2411,26 +2413,6 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'."
   (let ((file (hfy-initfile)))
     (load file 'NOERROR nil nil) ))
 
-\f
-;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" "1fb78b15b18622256262c7246b2a3520")
-;;; Generated autoloads from hfy-cmap.el
-
-(autoload 'htmlfontify-load-rgb-file "hfy-cmap" "\
-Load an X11 style rgb.txt FILE.
-Search `hfy-rgb-load-path' if FILE is not specified.
-Loads the variable `hfy-rgb-txt-colour-map', which is used by
-`hfy-fallback-colour-values'.
-
-\(fn &optional FILE)" t nil)
-
-(autoload 'hfy-fallback-colour-values "hfy-cmap" "\
-Use a fallback method for obtaining the rgb values for a color.
-
-\(fn COLOUR-STRING)" nil nil)
-
-;;;***
-\f
-
 (provide 'htmlfontify)
 
 ;;; htmlfontify.el ends here
index e5df9997b5a8e0b8f12a2684f36e30ccc5ae8d69..a2d92e9d9ab5c1d3bf9044f0c327940e4a73cd85 100644 (file)
@@ -1598,7 +1598,7 @@ defaults to one."
 (provide 'ibuf-ext)
 
 ;; Local Variables:
-;; generated-autoload-file: "ibuffer.el"
+;; generated-autoload-file: "ibuffer-loaddefs.el"
 ;; End:
 
 ;;; ibuf-ext.el ends here
index bfb247ca8424cbb273b927772f504eedb1e24920..517e80f7dffb5ebc3a93248c9f57881b5ad4cf72 100644 (file)
@@ -37,6 +37,7 @@
 
 (require 'font-core)
 
+(require 'ibuffer-loaddefs)
 ;; These come from ibuf-ext.el, which can not be require'd at compile time
 ;; because it has a recursive dependency on ibuffer.el
 (defvar ibuffer-auto-mode)
@@ -2611,382 +2612,6 @@ will be inserted before the group at point."
     (setq default-directory ibuffer-default-directory))
   (add-hook 'change-major-mode-hook 'font-lock-defontify nil t))
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "65ef908165926cf48da6f43fd01ef50b")
-;;; Generated autoloads from ibuf-ext.el
-
-(autoload 'ibuffer-auto-mode "ibuf-ext" "\
-Toggle use of Ibuffer's auto-update facility (Ibuffer Auto mode).
-With a prefix argument ARG, enable Ibuffer Auto mode if ARG is
-positive, and disable it otherwise.  If called from Lisp, enable
-the mode if ARG is omitted or nil.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'ibuffer-mouse-filter-by-mode "ibuf-ext" "\
-Enable or disable filtering by the major mode chosen via mouse.
-
-\(fn EVENT)" t nil)
-
-(autoload 'ibuffer-interactive-filter-by-mode "ibuf-ext" "\
-Enable or disable filtering by the major mode at point.
-
-\(fn EVENT-OR-POINT)" t nil)
-
-(autoload 'ibuffer-mouse-toggle-filter-group "ibuf-ext" "\
-Toggle the display status of the filter group chosen with the mouse.
-
-\(fn EVENT)" t nil)
-
-(autoload 'ibuffer-toggle-filter-group "ibuf-ext" "\
-Toggle the display status of the filter group on this line.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-forward-filter-group "ibuf-ext" "\
-Move point forwards by COUNT filtering groups.
-
-\(fn &optional COUNT)" t nil)
-
-(autoload 'ibuffer-backward-filter-group "ibuf-ext" "\
-Move point backwards by COUNT filtering groups.
-
-\(fn &optional COUNT)" t nil)
- (autoload 'ibuffer-do-shell-command-pipe "ibuf-ext")
- (autoload 'ibuffer-do-shell-command-pipe-replace "ibuf-ext")
- (autoload 'ibuffer-do-shell-command-file "ibuf-ext")
- (autoload 'ibuffer-do-eval "ibuf-ext")
- (autoload 'ibuffer-do-view-and-eval "ibuf-ext")
- (autoload 'ibuffer-do-rename-uniquely "ibuf-ext")
- (autoload 'ibuffer-do-revert "ibuf-ext")
- (autoload 'ibuffer-do-isearch "ibuf-ext")
- (autoload 'ibuffer-do-isearch-regexp "ibuf-ext")
- (autoload 'ibuffer-do-replace-regexp "ibuf-ext")
- (autoload 'ibuffer-do-query-replace "ibuf-ext")
- (autoload 'ibuffer-do-query-replace-regexp "ibuf-ext")
- (autoload 'ibuffer-do-print "ibuf-ext")
-
-(autoload 'ibuffer-included-in-filters-p "ibuf-ext" "\
-
-
-\(fn BUF FILTERS)" nil nil)
-
-(autoload 'ibuffer-filters-to-filter-group "ibuf-ext" "\
-Make the current filters into a filtering group.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-set-filter-groups-by-mode "ibuf-ext" "\
-Set the current filter groups to filter by mode.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-pop-filter-group "ibuf-ext" "\
-Remove the first filter group.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-decompose-filter-group "ibuf-ext" "\
-Decompose the filter group GROUP into active filters.
-
-\(fn GROUP)" t nil)
-
-(autoload 'ibuffer-clear-filter-groups "ibuf-ext" "\
-Remove all filter groups.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-jump-to-filter-group "ibuf-ext" "\
-Move point to the filter group whose name is NAME.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-kill-filter-group "ibuf-ext" "\
-Kill the filter group named NAME.
-The group will be added to `ibuffer-filter-group-kill-ring'.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-kill-line "ibuf-ext" "\
-Kill the filter group at point.
-See also `ibuffer-kill-filter-group'.
-
-\(fn &optional ARG INTERACTIVE-P)" t nil)
-
-(autoload 'ibuffer-yank "ibuf-ext" "\
-Yank the last killed filter group before group at point.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-yank-filter-group "ibuf-ext" "\
-Yank the last killed filter group before group named NAME.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-save-filter-groups "ibuf-ext" "\
-Save all active filter groups GROUPS as NAME.
-They are added to `ibuffer-saved-filter-groups'.  Interactively,
-prompt for NAME, and use the current filters.
-
-\(fn NAME GROUPS)" t nil)
-
-(autoload 'ibuffer-delete-saved-filter-groups "ibuf-ext" "\
-Delete saved filter groups with NAME.
-They are removed from `ibuffer-saved-filter-groups'.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-switch-to-saved-filter-groups "ibuf-ext" "\
-Set this buffer's filter groups to saved version with NAME.
-The value from `ibuffer-saved-filter-groups' is used.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-filter-disable "ibuf-ext" "\
-Disable all filters currently in effect in this buffer.
-With optional arg DELETE-FILTER-GROUPS non-nil, delete all filter
-group definitions by setting `ibuffer-filter-groups' to nil.
-
-\(fn &optional DELETE-FILTER-GROUPS)" t nil)
-
-(autoload 'ibuffer-pop-filter "ibuf-ext" "\
-Remove the top filter in this buffer.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-decompose-filter "ibuf-ext" "\
-Separate the top compound filter (OR, NOT, or SAVED) in this buffer.
-
-This means that the topmost filter on the filtering stack, which must
-be a complex filter like (OR [name: foo] [mode: bar-mode]), will be
-turned into two separate filters [name: foo] and [mode: bar-mode].
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-exchange-filters "ibuf-ext" "\
-Exchange the top two filters on the stack in this buffer.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-negate-filter "ibuf-ext" "\
-Negate the sense of the top filter in the current buffer.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-or-filter "ibuf-ext" "\
-Replace the top two filters in this buffer with their logical OR.
-If optional argument REVERSE is non-nil, instead break the top OR
-filter into parts.
-
-\(fn &optional REVERSE)" t nil)
-
-(autoload 'ibuffer-save-filters "ibuf-ext" "\
-Save FILTERS in this buffer with name NAME in `ibuffer-saved-filters'.
-Interactively, prompt for NAME, and use the current filters.
-
-\(fn NAME FILTERS)" t nil)
-
-(autoload 'ibuffer-delete-saved-filters "ibuf-ext" "\
-Delete saved filters with NAME from `ibuffer-saved-filters'.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-add-saved-filters "ibuf-ext" "\
-Add saved filters from `ibuffer-saved-filters' to this buffer's filters.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-switch-to-saved-filters "ibuf-ext" "\
-Set this buffer's filters to filters with NAME from `ibuffer-saved-filters'.
-
-\(fn NAME)" t nil)
- (autoload 'ibuffer-filter-by-mode "ibuf-ext")
- (autoload 'ibuffer-filter-by-used-mode "ibuf-ext")
- (autoload 'ibuffer-filter-by-derived-mode "ibuf-ext")
- (autoload 'ibuffer-filter-by-name "ibuf-ext")
- (autoload 'ibuffer-filter-by-filename "ibuf-ext")
- (autoload 'ibuffer-filter-by-size-gt  "ibuf-ext")
- (autoload 'ibuffer-filter-by-size-lt  "ibuf-ext")
- (autoload 'ibuffer-filter-by-content "ibuf-ext")
- (autoload 'ibuffer-filter-by-predicate "ibuf-ext")
-
-(autoload 'ibuffer-toggle-sorting-mode "ibuf-ext" "\
-Toggle the current sorting mode.
-Default sorting modes are:
- Recency - the last time the buffer was viewed
- Name - the name of the buffer
- Major Mode - the name of the major mode of the buffer
- Size - the size of the buffer
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-invert-sorting "ibuf-ext" "\
-Toggle whether or not sorting is in reverse order.
-
-\(fn)" t nil)
- (autoload 'ibuffer-do-sort-by-major-mode "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-mode-name "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-alphabetic "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-size "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-filename/process "ibuf-ext")
-
-(autoload 'ibuffer-bs-show "ibuf-ext" "\
-Emulate `bs-show' from the bs.el package.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-add-to-tmp-hide "ibuf-ext" "\
-Add REGEXP to `ibuffer-tmp-hide-regexps'.
-This means that buffers whose name matches REGEXP will not be shown
-for this Ibuffer session.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-add-to-tmp-show "ibuf-ext" "\
-Add REGEXP to `ibuffer-tmp-show-regexps'.
-This means that buffers whose name matches REGEXP will always be shown
-for this Ibuffer session.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-forward-next-marked "ibuf-ext" "\
-Move forward by COUNT marked buffers (default 1).
-
-If MARK is non-nil, it should be a character denoting the type of mark
-to move by.  The default is `ibuffer-marked-char'.
-
-If DIRECTION is non-nil, it should be an integer; negative integers
-mean move backwards, non-negative integers mean move forwards.
-
-\(fn &optional COUNT MARK DIRECTION)" t nil)
-
-(autoload 'ibuffer-backwards-next-marked "ibuf-ext" "\
-Move backwards by COUNT marked buffers (default 1).
-
-If MARK is non-nil, it should be a character denoting the type of mark
-to move by.  The default is `ibuffer-marked-char'.
-
-\(fn &optional COUNT MARK)" t nil)
-
-(autoload 'ibuffer-do-kill-lines "ibuf-ext" "\
-Hide all of the currently marked lines.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-jump-to-buffer "ibuf-ext" "\
-Move point to the buffer whose name is NAME.
-
-If called interactively, prompt for a buffer name and go to the
-corresponding line in the Ibuffer buffer.  If said buffer is in a
-hidden group filter, open it.
-
-If `ibuffer-jump-offer-only-visible-buffers' is non-nil, only offer
-visible buffers in the completion list.  Calling the command with
-a prefix argument reverses the meaning of that variable.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-diff-with-file "ibuf-ext" "\
-View the differences between marked buffers and their associated files.
-If no buffers are marked, use buffer at point.
-This requires the external program \"diff\" to be in your `exec-path'.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-copy-filename-as-kill "ibuf-ext" "\
-Copy filenames of marked buffers into the kill ring.
-
-The names are separated by a space.
-If a buffer has no filename, it is ignored.
-
-With no prefix arg, use the filename sans its directory of each marked file.
-With a zero prefix arg, use the complete filename of each marked file.
-With \\[universal-argument], use the filename of each marked file relative
-to `ibuffer-default-directory' if non-nil, otherwise `default-directory'.
-
-You can then feed the file name(s) to other commands with \\[yank].
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'ibuffer-mark-by-name-regexp "ibuf-ext" "\
-Mark all buffers whose name matches REGEXP.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-mark-by-mode-regexp "ibuf-ext" "\
-Mark all buffers whose major mode matches REGEXP.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-mark-by-file-name-regexp "ibuf-ext" "\
-Mark all buffers whose file name matches REGEXP.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-mark-by-mode "ibuf-ext" "\
-Mark all buffers whose major mode equals MODE.
-
-\(fn MODE)" t nil)
-
-(autoload 'ibuffer-mark-modified-buffers "ibuf-ext" "\
-Mark all modified buffers.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-unsaved-buffers "ibuf-ext" "\
-Mark all modified buffers that have an associated file.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-dissociated-buffers "ibuf-ext" "\
-Mark all buffers whose associated file does not exist.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-help-buffers "ibuf-ext" "\
-Mark buffers whose major mode is in variable `ibuffer-help-buffer-modes'.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-compressed-file-buffers "ibuf-ext" "\
-Mark buffers whose associated file is compressed.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-old-buffers "ibuf-ext" "\
-Mark buffers which have not been viewed in `ibuffer-old-time' hours.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-special-buffers "ibuf-ext" "\
-Mark all buffers whose name begins and ends with `*'.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-read-only-buffers "ibuf-ext" "\
-Mark all read-only buffers.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-dired-buffers "ibuf-ext" "\
-Mark all `dired' buffers.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-do-occur "ibuf-ext" "\
-View lines which match REGEXP in all marked buffers.
-Optional argument NLINES says how many lines of context to display: it
-defaults to one.
-
-\(fn REGEXP &optional NLINES)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
-
 (provide 'ibuffer)
 
 (run-hooks 'ibuffer-load-hook)
index 7b6a3ea4e42829bd19dfd9ff64eabd6dae41ea55..4e0bc56877a72231a949fc97c40c5cd8e9973748 100644 (file)
@@ -120,7 +120,15 @@ Linum mode is a buffer-local minor mode."
   (mapc #'delete-overlay linum-overlays)
   (setq linum-overlays nil)
   (dolist (w (get-buffer-window-list (current-buffer) nil t))
-    (set-window-margins w 0 (cdr (window-margins w)))))
+    ;; restore margins if needed FIXME: This still fails if the
+    ;; "other" mode has incidently set margins to exactly what linum
+    ;; had: see bug#20674 for a similar workaround in nlinum.el
+    (let ((set-margins (window-parameter w 'linum--set-margins))
+          (current-margins (window-margins w)))
+      (when (and set-margins
+                 (equal set-margins current-margins))
+        (set-window-margins w 0 (cdr current-margins))
+        (set-window-parameter w 'linum--set-margins nil)))))
 
 (defun linum-update-current ()
   "Update line numbers for the current buffer."
@@ -143,10 +151,10 @@ Linum mode is a buffer-local minor mode."
 
 (defun linum--face-width (face)
   (let ((info (font-info (face-font face)))
-       width)
+        width)
     (setq width (aref info 11))
     (if (<= width 0)
-       (setq width (aref info 10)))
+        (setq width (aref info 10)))
     width))
 
 (defun linum-update-window (win)
@@ -170,7 +178,7 @@ Linum mode is a buffer-local minor mode."
              (visited (catch 'visited
                         (dolist (o (overlays-in (point) (point)))
                           (when (equal-including-properties
-                                (overlay-get o 'linum-str) str)
+                                 (overlay-get o 'linum-str) str)
                             (unless (memq o linum-overlays)
                               (push o linum-overlays))
                             (setq linum-available (delq o linum-available))
@@ -193,7 +201,12 @@ Linum mode is a buffer-local minor mode."
       (setq width (ceiling
                    (/ (* width 1.0 (linum--face-width 'linum))
                       (frame-char-width)))))
-    (set-window-margins win width (cdr (window-margins win)))))
+    ;; open up space in the left margin, if needed, and record that
+    ;; fact as the window-parameter `linum--set-margins'
+    (let ((existing-margins (window-margins win)))
+      (when (> width (or (car existing-margins) 0))
+        (set-window-margins win width (cdr existing-margins))
+        (set-window-parameter win 'linum--set-margins (window-margins win))))))
 
 (defun linum-after-change (beg end _len)
   ;; update overlays on deletions, and after newlines are inserted
index a58d04223eababdc2afbd0d778b8d9669e28b727..e3e0eb7762267e1b01f17d481fbc2df2e0170698 100644 (file)
     (let ((dir (car load-path)))
       ;; We'll probably overflow the pure space.
       (setq purify-flag nil)
+      ;; Value of max-lisp-eval-depth when compiling initially.
+      ;; During bootstrapping the byte-compiler is run interpreted when
+      ;; compiling itself, which uses a lot more stack than usual.
+      (setq max-lisp-eval-depth 2200)
       (setq load-path (list (expand-file-name "." dir)
                            (expand-file-name "emacs-lisp" dir)
                            (expand-file-name "language" dir)
 (load "emacs-lisp/nadvice")
 (load "emacs-lisp/cl-preloaded")
 (load "minibuffer")            ;After loaddefs, for define-minor-mode.
+(load "obarray")        ;abbrev.el is implemented in terms of obarrays.
 (load "abbrev")         ;lisp-mode.el and simple.el use define-abbrev-table.
 (load "simple")
 
index 1a211a3e9cb93fc6e78b12a8152d98686fe02ed9..fe3375e8f58e34d70634b91a5e4e4343c4beb89f 100644 (file)
@@ -40,6 +40,8 @@
 (require 'mail-utils)
 (require 'rfc2047)
 
+(require 'rmail-loaddefs)
+
 (declare-function compilation--message->loc "compile" (cl-x) t)
 (declare-function epa--find-coding-system-for-mime-charset "epa" (mime-charset))
 
@@ -4722,227 +4724,6 @@ Argument MIME is non-nil if this is a mime message."
        (setq buffer-file-coding-system rmail-message-encoding))))
 (add-hook 'after-save-hook 'rmail-after-save-hook)
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "rmailedit" "rmailedit.el" "1ed1c211e6e9c254ba3e0dd8d546e745")
-;;; Generated autoloads from rmailedit.el
-
-(autoload 'rmail-edit-current-message "rmailedit" "\
-Edit the contents of this message.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailkwd" "rmailkwd.el" "298dcda7febb6e4ebf0a166101f40650")
-;;; Generated autoloads from rmailkwd.el
-
-(autoload 'rmail-add-label "rmailkwd" "\
-Add LABEL to labels associated with current RMAIL message.
-Completes (see `rmail-read-label') over known labels when reading.
-LABEL may be a symbol or string.  Only one label is allowed.
-
-\(fn LABEL)" t nil)
-
-(autoload 'rmail-kill-label "rmailkwd" "\
-Remove LABEL from labels associated with current RMAIL message.
-Completes (see `rmail-read-label') over known labels when reading.
-LABEL may be a symbol or string.  Only one label is allowed.
-
-\(fn LABEL)" t nil)
-
-(autoload 'rmail-read-label "rmailkwd" "\
-Read a label with completion, prompting with PROMPT.
-Completions are chosen from `rmail-label-obarray'.  The default
-is `rmail-last-label', if that is non-nil.  Updates `rmail-last-label'
-according to the choice made, and returns a symbol.
-
-\(fn PROMPT)" nil nil)
-
-(autoload 'rmail-previous-labeled-message "rmailkwd" "\
-Show previous message with one of the labels LABELS.
-LABELS should be a comma-separated list of label names.
-If LABELS is empty, the last set of labels specified is used.
-With prefix argument N moves backward N messages with these labels.
-
-\(fn N LABELS)" t nil)
-
-(autoload 'rmail-next-labeled-message "rmailkwd" "\
-Show next message with one of the labels LABELS.
-LABELS should be a comma-separated list of label names.
-If LABELS is empty, the last set of labels specified is used.
-With prefix argument N moves forward N messages with these labels.
-
-\(fn N LABELS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailmm" "rmailmm.el" "36f518e036612a33eb436cb267fd39c7")
-;;; Generated autoloads from rmailmm.el
-
-(autoload 'rmail-mime "rmailmm" "\
-Toggle the display of a MIME message.
-
-The actual behavior depends on the value of `rmail-enable-mime'.
-
-If `rmail-enable-mime' is non-nil (the default), this command toggles
-the display of a MIME message between decoded presentation form and
-raw data.  With optional prefix argument ARG, it toggles the display only
-of the MIME entity at point, if there is one.  The optional argument
-STATE forces a particular display state, rather than toggling.
-`raw' forces raw mode, any other non-nil value forces decoded mode.
-
-If `rmail-enable-mime' is nil, this creates a temporary \"*RMAIL*\"
-buffer holding a decoded copy of the message. Inline content-types are
-handled according to `rmail-mime-media-type-handlers-alist'.
-By default, this displays text and multipart messages, and offers to
-download attachments as specified by `rmail-mime-attachment-dirs-alist'.
-The arguments ARG and STATE have no effect in this case.
-
-\(fn &optional ARG STATE)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailmsc" "rmailmsc.el" "c3f0d33739768fc12acc4258ae0da72e")
-;;; Generated autoloads from rmailmsc.el
-
-(autoload 'set-rmail-inbox-list "rmailmsc" "\
-Set the inbox list of the current RMAIL file to FILE-NAME.
-You can specify one file name, or several names separated by commas.
-If FILE-NAME is empty, remove any existing inbox list.
-
-This applies only to the current session.
-
-\(fn FILE-NAME)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailsort" "rmailsort.el" "8f551773021df4fa1a14ec2517e6a4f1")
-;;; Generated autoloads from rmailsort.el
-
-(autoload 'rmail-sort-by-date "rmailsort" "\
-Sort messages of current Rmail buffer by \"Date\" header.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-subject "rmailsort" "\
-Sort messages of current Rmail buffer by \"Subject\" header.
-Ignores any \"Re: \" prefix.  If prefix argument REVERSE is
-non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-author "rmailsort" "\
-Sort messages of current Rmail buffer by author.
-This uses either the \"From\" or \"Sender\" header, downcased.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-recipient "rmailsort" "\
-Sort messages of current Rmail buffer by recipient.
-This uses either the \"To\" or \"Apparently-To\" header, downcased.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-correspondent "rmailsort" "\
-Sort messages of current Rmail buffer by other correspondent.
-This uses either the \"From\", \"Sender\", \"To\", or
-\"Apparently-To\" header, downcased.  Uses the first header not
-excluded by `mail-dont-reply-to-names'.  If prefix argument
-REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-lines "rmailsort" "\
-Sort messages of current Rmail buffer by the number of lines.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-labels "rmailsort" "\
-Sort messages of current Rmail buffer by labels.
-LABELS is a comma-separated list of labels.  The order of these
-labels specifies the order of messages: messages with the first
-label come first, messages with the second label come second, and
-so on.  Messages that have none of these labels come last.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE LABELS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailsum" "rmailsum.el" "4bc0d1a65aede332348200e1937c84d4")
-;;; Generated autoloads from rmailsum.el
-
-(autoload 'rmail-summary "rmailsum" "\
-Display a summary of all messages, one line per message.
-
-\(fn)" t nil)
-
-(autoload 'rmail-summary-by-labels "rmailsum" "\
-Display a summary of all messages with one or more LABELS.
-LABELS should be a string containing the desired labels, separated by commas.
-
-\(fn LABELS)" t nil)
-
-(autoload 'rmail-summary-by-recipients "rmailsum" "\
-Display a summary of all messages with the given RECIPIENTS.
-Normally checks the To, From and Cc fields of headers;
-but if PRIMARY-ONLY is non-nil (prefix arg given),
- only look in the To and From fields.
-RECIPIENTS is a regular expression.
-
-\(fn RECIPIENTS &optional PRIMARY-ONLY)" t nil)
-
-(autoload 'rmail-summary-by-regexp "rmailsum" "\
-Display a summary of all messages according to regexp REGEXP.
-If the regular expression is found in the header of the message
-\(including in the date and other lines, as well as the subject line),
-Emacs will list the message in the summary.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'rmail-summary-by-topic "rmailsum" "\
-Display a summary of all messages with the given SUBJECT.
-Normally checks just the Subject field of headers; but with prefix
-argument WHOLE-MESSAGE is non-nil, looks in the whole message.
-SUBJECT is a regular expression.
-
-\(fn SUBJECT &optional WHOLE-MESSAGE)" t nil)
-
-(autoload 'rmail-summary-by-senders "rmailsum" "\
-Display a summary of all messages whose \"From\" field matches SENDERS.
-SENDERS is a regular expression.
-
-\(fn SENDERS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "undigest" "undigest.el" "c0ddfad4fe34ef9c1e790c2cc72b571d")
-;;; Generated autoloads from undigest.el
-
-(autoload 'undigestify-rmail-message "undigest" "\
-Break up a digest message into its constituent messages.
-Leaves original message, deleted, before the undigestified messages.
-
-\(fn)" t nil)
-
-(autoload 'unforward-rmail-message "undigest" "\
-Extract a forwarded message from the containing message.
-This puts the forwarded message into a separate rmail message following
-the containing message.  This command is only useful when messages are
-forwarded with `rmail-enable-mime-composing' set to nil.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
 
 (provide 'rmail)
 
index 0b49782d80f43442577a855285fe174c207ee971..d79ec39da8056059f7c9f4c326d03bf10f2c71de 100644 (file)
@@ -448,7 +448,7 @@ HEADER-DIFF should be a return value from `rmail-edit-diff-headers'."
 (provide 'rmailedit)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailedit.el ends here
index f46a687d152cdae5ab518e9cff2eb58bb315a4d9..5fe867e2fb13c5664d8d4c8cf2044fc038662c7d 100644 (file)
@@ -192,7 +192,7 @@ With prefix argument N moves forward N messages with these labels."
 (provide 'rmailkwd)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailkwd.el ends here
index 16f62154fbcf4613bfb1ad90203d681b2df0583c..8ca10b26246cfa6152a589ce9464b37030d17c5c 100644 (file)
@@ -1560,7 +1560,7 @@ This is the usual value of `rmail-insert-mime-forwarded-message-function'."
 (provide 'rmailmm)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailmm.el ends here
index aefb35d5c520d702e380ba946897adff45367cae..16329f4d3bbcf950b0e5399690780e86eccf260e 100644 (file)
@@ -55,7 +55,7 @@ This applies only to the current session."
   (rmail-show-message-1 rmail-current-message))
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailmsc.el ends here
index 3e01b58a5232a2ca7a466ae29a2b7eb57598de7b..1e1b425c257bfdb4a74e944bdef17a740cd5495a 100644 (file)
@@ -251,7 +251,7 @@ Numeric keys are sorted numerically, all others as strings."
 (provide 'rmailsort)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailsort.el ends here
index eeb42e81c6d0960b6561589604ba7bbec0830d35..0717bb8d784ec3895e200bfd9f01cc657e09eb70 100644 (file)
@@ -1870,7 +1870,7 @@ the summary is only showing a subset of messages."
 (provide 'rmailsum)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; rmailsum.el ends here
index 9fbbd94b08384bfad8939a9a2455387e623acf59..7346d0d4165992b412b2fa3e0bfa159a939838bd 100644 (file)
@@ -327,7 +327,7 @@ forwarded with `rmail-enable-mime-composing' set to nil."
 (provide 'undigest)
 
 ;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
 ;; End:
 
 ;;; undigest.el ends here
index fe2b6a6681bdb006ec748c5582d5a85d2eda22b3..1ca783ac43dc19cbfdcddb2e10cf2ce18983840f 100644 (file)
 (defun clipboard-yank ()
   "Insert the clipboard contents, or the last stretch of killed text."
   (interactive "*")
-  (let ((gui-select-enable-clipboard t))
+  (let ((gui-select-enable-clipboard t)
+        (interprogram-paste-function (or interprogram-paste-function
+                                         #'gui-selection-value)))
     (yank)))
 
 (defun clipboard-kill-ring-save (beg end &optional region)
   "Copy region to kill ring, and save in the GUI's clipboard."
   (interactive "r\np")
-  (let ((gui-select-enable-clipboard t))
+  (let ((gui-select-enable-clipboard t)
+        (interprogram-cut-function (or interprogram-cut-function
+                                       #'gui-select-text)))
     (kill-ring-save beg end region)))
 
 (defun clipboard-kill-region (beg end &optional region)
   "Kill the region, and save it in the GUI's clipboard."
   (interactive "r\np")
-  (let ((gui-select-enable-clipboard t))
+  (let ((gui-select-enable-clipboard t)
+        (interprogram-cut-function (or interprogram-cut-function
+                                       #'gui-select-text)))
     (kill-region beg end region)))
 
 (defun menu-bar-enable-clipboard ()
index e8fdc972fb372c244a7770bad9e2c451836c862b..107df24e865a357704db298313034cb564b8a160 100644 (file)
@@ -409,9 +409,11 @@ Currently this means either text/html or application/xhtml+xml."
            (shr-target-id (url-target (url-generic-parse-url url)))
            (shr-external-rendering-functions
              (append
+              shr-external-rendering-functions
               '((title . eww-tag-title)
                 (form . eww-tag-form)
                 (input . eww-tag-input)
+                (button . eww-form-submit)
                 (textarea . eww-tag-textarea)
                 (select . eww-tag-select)
                 (link . eww-tag-link)
@@ -680,6 +682,7 @@ the like."
     (define-key map "E" 'eww-set-character-encoding)
     (define-key map "S" 'eww-list-buffers)
     (define-key map "F" 'eww-toggle-fonts)
+    (define-key map [(meta C)] 'eww-toggle-colors)
 
     (define-key map "b" 'eww-add-bookmark)
     (define-key map "B" 'eww-list-bookmarks)
@@ -704,6 +707,8 @@ the like."
        ["Add bookmark" eww-add-bookmark t]
        ["List bookmarks" eww-list-bookmarks t]
        ["List cookies" url-cookie-list t]
+       ["Toggle fonts" eww-toggle-fonts t]
+       ["Toggle colors" eww-toggle-colors t]
        ["Character Encoding" eww-set-character-encoding]))
     map))
 
@@ -1493,6 +1498,15 @@ If CHARSET is nil then use UTF-8."
             "off"))
   (eww-reload))
 
+(defun eww-toggle-colors ()
+  "Toggle whether to use HTML-specified colors or not."
+  (interactive)
+  (message "Colors are now %s"
+          (if (setq shr-use-colors (not shr-use-colors))
+              "on"
+            "off"))
+  (eww-reload))
+
 ;;; Bookmarks code
 
 (defvar eww-bookmarks nil)
index 1eb5342009ca90193284c6ca444b0704a6420c5c..8e1ad637b294ebfbe8c2def9cb482b74b056ebec 100644 (file)
@@ -46,6 +46,7 @@
 (require 'starttls)
 (require 'auth-source)
 (require 'nsm)
+(require 'puny)
 
 (autoload 'gnutls-negotiate "gnutls")
 (autoload 'open-gnutls-stream "gnutls")
@@ -148,7 +149,7 @@ asynchronously, if possible."
                                (plist-get parameters :capability-command))))))
        ;; The simplest case: wrapper around `make-network-process'.
        (make-network-process :name name :buffer buffer
-                             :host host :service service
+                             :host (puny-encode-domain host) :service service
                              :nowait (plist-get parameters :nowait))
       (let ((work-buffer (or buffer
                             (generate-new-buffer " *stream buffer*")))
@@ -198,7 +199,8 @@ asynchronously, if possible."
 (defun network-stream-open-plain (name buffer host service parameters)
   (let ((start (with-current-buffer buffer (point)))
        (stream (make-network-process :name name :buffer buffer
-                                     :host host :service service
+                                     :host (puny-encode-domain host)
+                                      :service service
                                      :nowait (plist-get parameters :nowait))))
     (when (plist-get parameters :warn-unless-encrypted)
       (setq stream (nsm-verify-connection stream host service nil t)))
@@ -219,7 +221,8 @@ asynchronously, if possible."
                                 eoc))
         ;; Return (STREAM GREETING CAPABILITIES RESULTING-TYPE)
         (stream (make-network-process :name name :buffer buffer
-                                      :host host :service service))
+                                      :host (puny-encode-domain host)
+                                       :service service))
         (greeting (and (not (plist-get parameters :nogreeting))
                        (network-stream-get-response stream start eoc)))
         (capabilities (network-stream-command stream capability-command
@@ -296,7 +299,8 @@ asynchronously, if possible."
          (unless require-tls
            (setq stream
                  (make-network-process :name name :buffer buffer
-                                       :host host :service service))
+                                       :host (puny-encode-domain host)
+                                        :service service))
            (network-stream-get-response stream start eoc)))
        ;; Re-get the capabilities, which may have now changed.
        (setq capabilities
diff --git a/lisp/net/puny.el b/lisp/net/puny.el
new file mode 100644 (file)
index 0000000..ac47e13
--- /dev/null
@@ -0,0 +1,238 @@
+;;; puny.el --- translate non-ASCII domain names to ASCII
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: mail, net
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Written by looking at
+;; http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion
+
+;;; Code:
+
+(require 'seq)
+
+(defun puny-encode-domain (domain)
+  "Encode DOMAIN according to the IDNA/punycode algorith.
+For instance, \"fśf.org\" => \"xn--ff-2sa.org\"."
+  ;; The vast majority of domain names are not IDNA domain names, so
+  ;; add a check first to avoid doing unnecessary work.
+  (if (string-match "\\'[[:ascii:]]+\\'" domain)
+      domain
+    (mapconcat 'puny-encode-string (split-string domain "[.]") ".")))
+
+(defun puny-encode-string (string)
+  "Encode STRING according to the IDNA/punycode algorithm.
+This is used to encode non-ASCII domain names.
+For instance, \"bücher\" => \"xn--bcher-kva\"."
+  (let ((ascii (seq-filter (lambda (char)
+                             (< char 128))
+                           string)))
+    (if (= (length ascii) (length string))
+        string
+      (concat "xn--"
+              (if (null ascii)
+                  ""
+                (concat ascii "-"))
+              (puny-encode-complex (length ascii) string)))))
+
+(defun puny-decode-domain (domain)
+  "Decode DOMAIN according to the IDNA/punycode algorith.
+For instance, \"xn--ff-2sa.org\" => \"fśf.org\"."
+  (mapconcat 'puny-decode-string (split-string domain "[.]") "."))
+
+(defun puny-decode-string (string)
+  "Decode an IDNA/punycode-encoded string.
+For instance \"xn--bcher-kva\" => \"bücher\"."
+  (if (string-match "\\`xn--" string)
+      (puny-decode-string-internal (substring string 4))
+    string))
+
+(defconst puny-initial-n 128)
+(defconst puny-initial-bias 72)
+(defconst puny-base 36)
+(defconst puny-damp 700)
+(defconst puny-tmin 1)
+(defconst puny-tmax 26)
+(defconst puny-skew 28)
+
+;; 0-25  a-z
+;; 26-36 0-9
+(defun puny-encode-digit (d)
+  (if (< d 26)
+      (+ ?a d)
+    (+ ?0 (- d 26))))
+
+(defun puny-adapt (delta num-points first-time)
+  (let ((delta (if first-time
+                   (/ delta puny-damp)
+                 (/ delta 2)))
+        (k 0))
+    (setq delta (+ delta (/ delta num-points)))
+    (while (> delta (/ (* (- puny-base puny-tmin)
+                          puny-tmax)
+                       2))
+      (setq delta (/ delta (- puny-base puny-tmin))
+            k (+ k puny-base)))
+    (+ k (/ (* (1+ (- puny-base puny-tmin)) delta)
+            (+ delta puny-skew)))))
+
+(defun puny-encode-complex (insertion-points string)
+  (let ((n puny-initial-n)
+        (delta 0)
+        (bias puny-initial-bias)
+        (h insertion-points)
+        result m ijv q)
+    (while (< h (length string))
+      (setq ijv (cl-loop for char across string
+                         when (>= char n)
+                         minimize char))
+      (setq m ijv)
+      (setq delta (+ delta (* (- m n) (+ h 1)))
+            n m)
+      (cl-loop for char across string
+               when (< char n)
+               do (cl-incf delta)
+               when (= char ijv)
+               do (progn
+                    (setq q delta)
+                    (cl-loop with k = puny-base
+                             for t1 = (cond
+                                       ((<= k bias)
+                                        puny-tmin)
+                                       ((>= k (+ bias puny-tmax))
+                                        puny-tmax)
+                                       (t
+                                        (- k bias)))
+                             while (>= q t1)
+                             do (push (puny-encode-digit
+                                       (+ t1 (mod (- q t1)
+                                                  (- puny-base t1))))
+                                      result)
+                             do (setq q (/ (- q t1) (- puny-base t1))
+                                      k (+ k puny-base)))
+                    (push (puny-encode-digit q) result)
+                    (setq bias (puny-adapt delta (+ h 1) (= h insertion-points))
+                          delta 0
+                          h (1+ h))))
+      (cl-incf delta)
+      (cl-incf n))
+    (nreverse result)))
+
+(defun puny-decode-digit (cp)
+  (cond
+   ((<= cp ?9)
+    (+ (- cp ?0) 26))
+   ((<= cp ?Z)
+    (- cp ?A))
+   ((<= cp ?z)
+    (- cp ?a))
+   (t
+    puny-base)))
+
+(defun puny-decode-string-internal (string)
+  (with-temp-buffer
+    (insert string)
+    (goto-char (point-max))
+    (search-backward "-" nil (point-min))
+    ;; The encoded chars are after the final dash.
+    (let ((encoded (buffer-substring (1+ (point)) (point-max)))
+          (ic 0)
+          (i 0)
+          (bias puny-initial-bias)
+          (n puny-initial-n)
+          out)
+      (delete-region (point) (point-max))
+      (while (< ic (length encoded))
+        (let ((old-i i)
+              (w 1)
+              (k puny-base)
+              digit t1)
+          (cl-loop do (progn
+                        (setq digit (puny-decode-digit (aref encoded ic)))
+                        (cl-incf ic)
+                        (cl-incf i (* digit w))
+                        (setq t1 (cond
+                                  ((<= k bias)
+                                   puny-tmin)
+                                  ((>= k (+ bias puny-tmax))
+                                   puny-tmax)
+                                  (t
+                                   (- k bias)))))
+                   while (>= digit t1)
+                   do (setq w (* w (- puny-base t1))
+                            k (+ k puny-base)))
+          (setq out (1+ (buffer-size)))
+          (setq bias (puny-adapt (- i old-i) out (= old-i 0))))
+
+        (setq n (+ n (/ i out))
+              i (mod i out))
+        (goto-char (point-min))
+        (forward-char i)
+        (insert (format "%c" n))
+        (cl-incf i)))
+    (buffer-string)))
+
+;; http://www.unicode.org/reports/tr39/#Restriction_Level_Detection
+;; http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Inclusion_in_Identifiers
+
+(defun puny-highly-restrictive-p (string)
+  (let ((scripts
+         (delq
+          t
+          (seq-uniq
+           (seq-map (lambda (char)
+                      (if (memq char
+                                ;; These characters are always allowed
+                                ;; in any string.
+                                '(#x0027 ; APOSTROPHE
+                                  #x002D ; HYPHEN-MINUS
+                                  #x002E ; FULL STOP
+                                  #x003A ; COLON
+                                  #x00B7 ; MIDDLE DOT
+                                  #x058A ; ARMENIAN HYPHEN
+                                  #x05F3 ; HEBREW PUNCTUATION GERESH
+                                  #x05F4 ; HEBREW PUNCTUATION GERSHAYIM
+                                  #x0F0B ; IBETAN MARK INTERSYLLABIC TSHEG
+                                  #x200C ; ERO WIDTH NON-JOINER*
+                                  #x200D ; ERO WIDTH JOINER*
+                                  #x2010 ; YPHEN
+                                  #x2019 ; IGHT SINGLE QUOTATION MARK
+                                  #x2027 ; YPHENATION POINT
+                                  #x30A0 ; KATAKANA-HIRAGANA DOUBLE HYPHEN
+                                  #x30FB)) ; KATAKANA MIDDLE DOT
+                          t
+                        (aref char-script-table char)))
+                    string)))))
+    (or
+     ;; Every character uses the same script.
+     (= (length scripts) 1)
+     (seq-some 'identity
+               (mapcar (lambda (list)
+                         (seq-every-p (lambda (script)
+                                        (memq script list))
+                                      scripts))
+                       '((latin han hiragana kana)
+                         (latin han bopomofo)
+                         (latin han hangul)))))))
+
+(provide 'puny)
+
+;;; puny.el ends here
index 330f7b5d84ba48298cdc4fbdd506f248f20e6b85..0effa93b197ff7ea0fe7fe3d706d238ad67d7bca 100644 (file)
@@ -63,6 +63,12 @@ fit these criteria."
   :group 'shr
   :type 'boolean)
 
+(defcustom shr-use-colors t
+  "If non-nil, respect color specifications in the HTML."
+  :version "25.2"
+  :group 'shr
+  :type 'boolean)
+
 (defcustom shr-table-horizontal-line nil
   "Character used to draw horizontal table lines.
 If nil, don't draw horizontal table lines."
@@ -135,6 +141,14 @@ cid: URL as the argument.")
 (defvar shr-inhibit-images nil
   "If non-nil, inhibit loading images.")
 
+(defvar shr-external-rendering-functions nil
+  "Alist of tag/function pairs used to alter how shr renders certain tags.
+For instance, eww uses this to alter rendering of title, forms
+and other things:
+((title . eww-tag-title)
+ (form . eww-tag-form)
+ ...)")
+
 ;;; Internal variables.
 
 (defvar shr-folding-mode nil)
@@ -150,7 +164,6 @@ cid: URL as the argument.")
 (defvar shr-depth 0)
 (defvar shr-warning nil)
 (defvar shr-ignore-cache nil)
-(defvar shr-external-rendering-functions nil)
 (defvar shr-target-id nil)
 (defvar shr-table-separator-length 1)
 (defvar shr-table-separator-pixel-width 0)
@@ -429,11 +442,10 @@ size, and full-buffer size."
 
 (defun shr-descend (dom)
   (let ((function
-        (or
-         ;; Allow other packages to override (or provide) rendering
-         ;; of elements.
-         (cdr (assq (dom-tag dom) shr-external-rendering-functions))
-         (intern (concat "shr-tag-" (symbol-name (dom-tag dom))) obarray)))
+         (intern (concat "shr-tag-" (symbol-name (dom-tag dom))) obarray))
+        ;; Allow other packages to override (or provide) rendering
+        ;; of elements.
+        (external (cdr (assq (dom-tag dom) shr-external-rendering-functions)))
        (style (dom-attr dom 'style))
        (shr-stylesheet shr-stylesheet)
        (shr-depth (1+ shr-depth))
@@ -448,9 +460,12 @@ size, and full-buffer size."
          (setq style nil)))
       ;; If we have a display:none, then just ignore this part of the DOM.
       (unless (equal (cdr (assq 'display shr-stylesheet)) "none")
-       (if (fboundp function)
-           (funcall function dom)
-         (shr-generic dom))
+        (cond (external
+               (funcall external dom))
+              ((fboundp function)
+               (funcall function dom))
+              (t
+               (shr-generic dom)))
        (when (and shr-target-id
                   (equal (dom-attr dom 'id) shr-target-id))
          ;; If the element was empty, we don't have anything to put the
@@ -1088,7 +1103,9 @@ ones, in case fg and bg are nil."
                (shr-color-visible bg fg)))))))
 
 (defun shr-colorize-region (start end fg &optional bg)
-  (when (and (or fg bg) (>= (display-color-cells) 88))
+  (when (and shr-use-colors
+             (or fg bg)
+             (>= (display-color-cells) 88))
     (let ((new-colors (shr-color-check fg bg)))
       (when new-colors
        (when fg
index ac4aa19e565cf9cd34faadbebde94db380c80af6..8eed4b1b86ed224046fc7688572adf23fd44b081 100644 (file)
@@ -206,7 +206,7 @@ This variant works around bugs in `eval-when-compile' in various
 (eval-and-compile
   (defmacro c--macroexpand-all (form &optional environment)
     ;; Macro to smooth out the renaming of `cl-macroexpand-all' in Emacs 24.3.
-    (if (eq c--mapcan-status 'cl-mapcan)
+    (if (fboundp 'macroexpand-all)
        `(macroexpand-all ,form ,environment)
       `(cl-macroexpand-all ,form ,environment)))
 
@@ -493,19 +493,21 @@ must not be within a `c-save-buffer-state', since the user then
 wouldn't be able to undo them.
 
 The return value is the value of the last form in BODY."
-  `(let* ((modified (buffer-modified-p)) (buffer-undo-list t)
-         (inhibit-read-only t) (inhibit-point-motion-hooks t)
-         before-change-functions after-change-functions
-         deactivate-mark
-         buffer-file-name buffer-file-truename ; Prevent primitives checking
-                                               ; for file modification
-         ,@varlist)
-     (unwind-protect
-        (progn ,@body)
-       (and (not modified)
-           (buffer-modified-p)
-           (set-buffer-modified-p nil)))))
-(put 'c-save-buffer-state 'lisp-indent-function 1)
+  (declare (debug t) (indent 1))
+  (if (fboundp 'with-silent-modifications)
+      `(with-silent-modifications (let* ,varlist ,@body))
+    `(let* ((modified (buffer-modified-p)) (buffer-undo-list t)
+           (inhibit-read-only t) (inhibit-point-motion-hooks t)
+           before-change-functions after-change-functions
+           deactivate-mark
+           buffer-file-name buffer-file-truename ; Prevent primitives checking
+                                                 ; for file modification
+           ,@varlist)
+       (unwind-protect
+          (progn ,@body)
+        (and (not modified)
+             (buffer-modified-p)
+             (set-buffer-modified-p nil))))))
 
 (defmacro c-tentative-buffer-changes (&rest body)
   "Eval BODY and optionally restore the buffer contents to the state it
index eae2f6cb8a68fd35975f2b69d99c1a966d75a7f0..90145ddff8bf92d3d073152bb4722fe2278aa2f4 100644 (file)
 ;;
 
 ;; This variable will always hold the version number of the mode
-(defconst verilog-mode-version "2015-09-18-314cf1d-vpo-GNU"
+(defconst verilog-mode-version "2015-11-21-8112ca0-vpo-GNU"
   "Version of this Verilog mode.")
 (defconst verilog-mode-release-emacs t
   "If non-nil, this version of Verilog mode was released with Emacs itself.")
@@ -230,10 +230,9 @@ STRING should be given if the last search was by `string-match' on STRING."
         `(customize ,var))
       )
 
-    (unless (boundp 'inhibit-point-motion-hooks)
-      (defvar inhibit-point-motion-hooks nil))
-    (unless (boundp 'deactivate-mark)
-      (defvar deactivate-mark nil))
+    (defvar inhibit-modification-hooks)
+    (defvar inhibit-point-motion-hooks)
+    (defvar deactivate-mark)
     )
   ;;
   ;; OK, do this stuff if we are NOT XEmacs:
@@ -326,6 +325,14 @@ wherever possible, since it is slow."
                 (looking-at (concat "\\(?:"  regexp "\\)\\'")))))
         (not (null pos)))))))
 
+(eval-and-compile
+  (cond
+   ((fboundp 'restore-buffer-modified-p)
+    ;; Faster, as does not update mode line when nothing changes
+    (defalias 'verilog-restore-buffer-modified-p 'restore-buffer-modified-p))
+   (t
+    (defalias 'verilog-restore-buffer-modified-p 'set-buffer-modified-p))))
+
 (eval-and-compile
   ;; Both xemacs and emacs
   (condition-case nil
@@ -827,6 +834,10 @@ Function takes three arguments, the original buffer, the
 difference buffer, and the point in original buffer with the
 first difference.")
 
+(defvar verilog-diff-ignore-regexp nil
+  "Non-nil specifies regexp which `verilog-diff-auto' will ignore.
+This is typically nil.")
+
 ;;; Compile support:
 ;;
 
@@ -2937,8 +2948,6 @@ find the errors."
     (modify-syntax-entry ?> "." table)
     (modify-syntax-entry ?& "." table)
     (modify-syntax-entry ?| "." table)
-    ;; FIXME: This goes against Emacs conventions.  Use "_" syntax instead and
-    ;; then use regexps with things like "\\_<...\\_>".
     (modify-syntax-entry ?` "w" table)  ; ` is part of definition symbols in Verilog
     (modify-syntax-entry ?_ "w" table)
     (modify-syntax-entry ?\' "." table)
@@ -3225,56 +3234,63 @@ A change is considered significant if it affects the buffer text
 in any way that isn't completely restored again.  Any
 user-visible changes to the buffer must not be within a
 `verilog-save-buffer-state'."
-  ;; From c-save-buffer-state
-  `(let* ((modified (buffer-modified-p))
-         (buffer-undo-list t)
-         (inhibit-read-only t)
-         (inhibit-point-motion-hooks t)
-         (verilog-no-change-functions t)
-         before-change-functions
-         after-change-functions
-         deactivate-mark
-         buffer-file-name ; Prevent primitives checking
-         buffer-file-truename) ; for file modification
-     (unwind-protect
-        (progn ,@body)
-       (and (not modified)
-           (buffer-modified-p)
-           (set-buffer-modified-p nil)))))
+  `(let ((inhibit-point-motion-hooks t)
+         (verilog-no-change-functions t))
+     ,(if (fboundp 'with-silent-modifications)
+          `(with-silent-modifications ,@body)
+        ;; Backward compatible version of with-silent-modifications
+        `(let* ((modified (buffer-modified-p))
+                (buffer-undo-list t)
+                (inhibit-read-only t)
+                (inhibit-modification-hooks t)
+                ;; XEmacs ignores inhibit-modification-hooks.
+                before-change-functions after-change-functions
+                deactivate-mark
+                buffer-file-name        ; Prevent primitives checking
+                buffer-file-truename)  ; for file modification
+           (unwind-protect
+               (progn ,@body)
+             (and (not modified)
+                  (buffer-modified-p)
+                  (verilog-restore-buffer-modified-p nil)))))))
 
-(defmacro verilog-save-no-change-functions (&rest body)
-  "Execute BODY forms, disabling all change hooks in BODY.
-For insignificant changes, see instead `verilog-save-buffer-state'."
-  `(let* ((inhibit-point-motion-hooks t)
-         (verilog-no-change-functions t)
-         before-change-functions
-         after-change-functions)
-     (progn ,@body)))
 
 (defvar verilog-save-font-mod-hooked nil
-  "Local variable when inside a `verilog-save-font-mods' block.")
+  "Local variable when inside a `verilog-save-font-no-change-functions' block.")
 (make-variable-buffer-local 'verilog-save-font-mod-hooked)
 
-(defmacro verilog-save-font-mods (&rest body)
 "Execute BODY forms, disabling text modifications to allow performing BODY.
+(defmacro verilog-save-font-no-change-functions (&rest body)
"Execute BODY forms, disabling all change hooks in BODY.
 Includes temporary disabling of `font-lock' to restore the buffer
 to full text form for parsing.  Additional actions may be specified with
-`verilog-before-save-font-hook' and `verilog-after-save-font-hook'."
-  ;; Before version 20, match-string with font-lock returns a
-  ;; vector that is not equal to the string.  IE if on "input"
-  ;; nil==(equal "input" (progn (looking-at "input") (match-string 0)))
-  `(let* ((hooked (unless verilog-save-font-mod-hooked
-                   (verilog-run-hooks 'verilog-before-save-font-hook)
-                   t))
-         (verilog-save-font-mod-hooked t)
-         (fontlocked (when (and (boundp 'font-lock-mode) font-lock-mode)
-                       (font-lock-mode 0)
-                       t)))
-     (unwind-protect
-         (progn ,@body)
-       ;; Unwind forms
-       (when fontlocked (font-lock-mode t))
-       (when hooked (verilog-run-hooks 'verilog-after-save-font-hook)))))
+`verilog-before-save-font-hook' and `verilog-after-save-font-hook'.
+For insignificant changes, see instead `verilog-save-buffer-state'."
+ `(if verilog-save-font-mod-hooked ; Short-circuit a recursive call
+      (progn ,@body)
+    ;; Before version 20, match-string with font-lock returns a
+    ;; vector that is not equal to the string.  IE if on "input"
+    ;; nil==(equal "input" (progn (looking-at "input") (match-string 0)))
+    ;; Therefore we must remove and restore font-lock mode
+    (verilog-run-hooks 'verilog-before-save-font-hook)
+    (let* ((verilog-save-font-mod-hooked (- (point-max) (point-min)))
+           ;; Significant speed savings with no font-lock properties
+           (fontlocked (when (and (boundp 'font-lock-mode) font-lock-mode)
+                         (font-lock-mode 0)
+                         t)))
+      (run-hook-with-args 'before-change-functions (point-min) (point-max))
+      (unwind-protect
+          ;; Must inhibit and restore hooks before restoring font-lock
+          (let* ((inhibit-point-motion-hooks t)
+                 (inhibit-modification-hooks t)
+                 (verilog-no-change-functions t)
+                 ;; XEmacs and pre-Emacs 21 ignore inhibit-modification-hooks.
+                 before-change-functions after-change-functions)
+            (progn ,@body))
+        ;; Unwind forms
+        (run-hook-with-args 'after-change-functions (point-min) (point-max)
+                            verilog-save-font-mod-hooked) ; old length
+        (when fontlocked (font-lock-mode t))
+        (verilog-run-hooks 'verilog-after-save-font-hook)))))
 
 ;;
 ;; Comment detection and caching
@@ -8074,7 +8090,7 @@ Duplicate signals are also removed.  For example A[2] and A[1] become A[2:1]."
             (when (and sv-busstring
                        (not (equal sv-busstring (verilog-sig-bits sig))))
                (when nil  ; Debugging
-                (message (concat "Warning, can't merge into single bus %s%s"
+                (message (concat "Warning, can't merge into single bus `%s%s'"
                                  ", the AUTOs may be wrong")
                          sv-name bus))
               (setq buswarn ", Couldn't Merge"))
@@ -8377,18 +8393,18 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                 (setcar (cdr (cdr (cdr newsig)))
                         (if (verilog-sig-memory newsig)
                             (concat (verilog-sig-memory newsig) (match-string 1))
-                          (match-string 1))))
+                          (match-string-no-properties 1))))
                 (vec  ; Multidimensional
                 (setq multidim (cons vec multidim))
                 (setq vec (verilog-string-replace-matches
-                           "\\s-+" "" nil nil (match-string 1))))
+                           "\\s-+" "" nil nil (match-string-no-properties 1))))
                 (t  ; Bit width
                 (setq vec (verilog-string-replace-matches
-                           "\\s-+" "" nil nil (match-string 1))))))
+                           "\\s-+" "" nil nil (match-string-no-properties 1))))))
         ;; Normal or escaped identifier -- note we remember the \ if escaped
         ((looking-at "\\s-*\\([a-zA-Z0-9`_$]+\\|\\\\[^ \t\n\f]+\\)")
          (goto-char (match-end 0))
-         (setq keywd (match-string 1))
+         (setq keywd (match-string-no-properties 1))
          (when (string-match "^\\\\" (match-string 1))
             (setq keywd (concat keywd " ")))  ; Escaped ID needs space at end
          ;; Add any :: package names to same identifier
@@ -8573,11 +8589,12 @@ Return an array of [outputs inouts inputs wire reg assign const]."
   (defvar sigs-out-unk)
   (defvar sigs-temp)
   ;; These are known to be from other packages and may not be defined
-  (defvar diff-command nil)
+  (defvar diff-command)
   ;; There are known to be from newer versions of Emacs
-  (defvar create-lockfiles))
+  (defvar create-lockfiles)
+  (defvar which-func-modes))
 
-(defun verilog-read-sub-decls-sig (submoddecls comment port sig vec multidim)
+(defun verilog-read-sub-decls-sig (submoddecls comment port sig vec multidim mem)
   "For `verilog-read-sub-decls-line', add a signal."
   ;; sig eq t to indicate .name syntax
   ;;(message "vrsds: %s(%S)" port sig)
@@ -8588,6 +8605,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
       (setq sig  (if dotname port (verilog-symbol-detick-denumber sig)))
       (if vec (setq vec  (verilog-symbol-detick-denumber vec)))
       (if multidim (setq multidim  (mapcar `verilog-symbol-detick-denumber multidim)))
+      (if mem (setq mem (verilog-symbol-detick-denumber mem)))
       (unless (or (not sig)
                   (equal sig ""))  ; Ignore .foo(1'b1) assignments
        (cond ((or (setq portdata (assoc port (verilog-decls-get-inouts submoddecls)))
@@ -8597,7 +8615,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To/From " comment)
-                           (verilog-sig-memory portdata)
+                            mem
                            nil
                            (verilog-sig-signed portdata)
                            (unless (member (verilog-sig-type portdata) '("wire" "reg"))
@@ -8611,7 +8629,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "From " comment)
-                           (verilog-sig-memory portdata)
+                           mem
                            nil
                            (verilog-sig-signed portdata)
                            ;; Though ok in SV, in V2K code, propagating the
@@ -8630,7 +8648,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To " comment)
-                           (verilog-sig-memory portdata)
+                           mem
                            nil
                            (verilog-sig-signed portdata)
                            (unless (member (verilog-sig-type portdata) '("wire" "reg"))
@@ -8643,7 +8661,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To/From " comment)
-                           (verilog-sig-memory portdata)
+                           mem
                            nil
                            (verilog-sig-signed portdata)
                            (verilog-sig-type portdata)
@@ -8656,7 +8674,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
                            sig
                            (if dotname (verilog-sig-bits portdata) vec)
                            (concat "To/From " comment)
-                           (verilog-sig-memory portdata)
+                           mem
                            nil
                            (verilog-sig-signed portdata)
                            (verilog-sig-type portdata)
@@ -8669,7 +8687,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
   "For `verilog-read-sub-decls-line', parse a subexpression and add signals."
   ;;(message "vrsde: `%s'" expr)
   ;; Replace special /*[....]*/ comments inserted by verilog-auto-inst-port
-  (setq expr (verilog-string-replace-matches "/\\*\\(\\[[^*]+\\]\\)\\*/" "\\1" nil nil expr))
+  (setq expr (verilog-string-replace-matches "/\\*\\(\\.?\\[[^*]+\\]\\)\\*/" "\\1" nil nil expr))
   ;; Remove front operators
   (setq expr (verilog-string-replace-matches "^\\s-*[---+~!|&]+\\s-*" "" nil nil expr))
   ;;
@@ -8683,7 +8701,7 @@ Return an array of [outputs inouts inputs wire reg assign const]."
        (while (setq mstr (pop mlst))
          (verilog-read-sub-decls-expr submoddecls comment port mstr)))))
    (t
-    (let (sig vec multidim)
+    (let (sig vec multidim mem)
       ;; Remove leading reduction operators, etc
       (setq expr (verilog-string-replace-matches "^\\s-*[---+~!|&]+\\s-*" "" nil nil expr))
       ;;(message "vrsde-ptop: `%s'" expr)
@@ -8703,10 +8721,15 @@ Return an array of [outputs inouts inputs wire reg assign const]."
        (when vec (setq multidim (cons vec multidim)))
        (setq vec (match-string 1 expr)
              expr (substring expr (match-end 0))))
+      ;; Find .[unpacked_memory] or .[unpacked][unpacked]...
+      (while (string-match "^\\s-*\\.\\(\\[[^]]+\\]\\)" expr)
+       ;;(message "vrsde-m: `%s'" (match-string 1 expr))
+       (setq mem (match-string 1 expr)
+             expr (substring expr (match-end 0))))
       ;; If found signal, and nothing unrecognized, add the signal
       ;;(message "vrsde-rem: `%s'" expr)
       (when (and sig (string-match "^\\s-*$" expr))
-       (verilog-read-sub-decls-sig submoddecls comment port sig vec multidim))))))
+       (verilog-read-sub-decls-sig submoddecls comment port sig vec multidim mem))))))
 
 (defun verilog-read-sub-decls-line (submoddecls comment)
   "For `verilog-read-sub-decls', read lines of port defs until none match.
@@ -8717,23 +8740,23 @@ Inserts the list of signals found, using submodi to look up each port."
       (while (not done)
        ;; Get port name
        (cond ((looking-at "\\s-*\\.\\s-*\\([a-zA-Z0-9`_$]*\\)\\s-*(\\s-*")
-              (setq port (match-string 1))
+              (setq port (match-string-no-properties 1))
               (goto-char (match-end 0)))
              ;; .\escaped (
              ((looking-at "\\s-*\\.\\s-*\\(\\\\[^ \t\n\f]*\\)\\s-*(\\s-*")
-               (setq port (concat (match-string 1) " "))  ; escaped id's need trailing space
+               (setq port (concat (match-string-no-properties 1) " "))  ; escaped id's need trailing space
               (goto-char (match-end 0)))
              ;; .name
              ((looking-at "\\s-*\\.\\s-*\\([a-zA-Z0-9`_$]*\\)\\s-*[,)/]")
               (verilog-read-sub-decls-sig
-               submoddecls comment (match-string 1) t ; sig==t for .name
-               nil nil) ; vec multidim
+               submoddecls comment (match-string-no-properties 1) t ; sig==t for .name
+               nil nil nil) ; vec multidim mem
               (setq port nil))
              ;; .\escaped_name
              ((looking-at "\\s-*\\.\\s-*\\(\\\\[^ \t\n\f]*\\)\\s-*[,)/]")
               (verilog-read-sub-decls-sig
-               submoddecls comment (concat (match-string 1) " ") t ; sig==t for .name
-               nil nil) ; vec multidim
+               submoddecls comment (concat (match-string-no-properties 1) " ") t ; sig==t for .name
+               nil nil nil) ; vec multidim mem
               (setq port nil))
              ;; random
              ((looking-at "\\s-*\\.[^(]*(")
@@ -8748,20 +8771,20 @@ Inserts the list of signals found, using submodi to look up each port."
          (cond ((looking-at "\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\s-*)")
                 (verilog-read-sub-decls-sig
                  submoddecls comment port
-                 (verilog-string-remove-spaces (match-string 1)) ; sig
-                 nil nil)) ; vec multidim
+                 (verilog-string-remove-spaces (match-string-no-properties 1)) ; sig
+                 nil nil nil)) ; vec multidim mem
                ;;
                ((looking-at "\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\s-*\\(\\[[^]]+\\]\\)\\s-*)")
                 (verilog-read-sub-decls-sig
                  submoddecls comment port
-                 (verilog-string-remove-spaces (match-string 1)) ; sig
-                 (match-string 2) nil)) ; vec multidim
+                 (verilog-string-remove-spaces (match-string-no-properties 1)) ; sig
+                 (match-string-no-properties 2) nil nil)) ; vec multidim mem
                ;; Fastpath was above looking-at's.
                ;; For something more complicated invoke a parser
                ((looking-at "[^)]+")
                 (verilog-read-sub-decls-expr
                  submoddecls comment port
-                 (buffer-substring
+                 (buffer-substring-no-properties
                   (point) (1- (progn (search-backward "(") ; start at (
                                      (verilog-forward-sexp-ign-cmt 1)
                                      (point)))))))) ; expr
@@ -9894,7 +9917,7 @@ Return modi if successful, else print message unless IGNORE-ERROR is true."
               (or mif ignore-error
                   (error
                    (concat
-                    "%s: Can't locate %s module definition%s"
+                    "%s: Can't locate `%s' module definition%s"
                     "\n    Check the verilog-library-directories variable."
                     "\n    I looked in (if not listed, doesn't exist):\n\t%s")
                    (verilog-point-text) module
@@ -9959,9 +9982,9 @@ Cache the output of function so next call may have faster access."
            (t
             ;; Read from file
             ;; Clear then restore any highlighting to make emacs19 happy
-            (let (func-returns)
-              (verilog-save-font-mods
-               (setq func-returns (funcall function)))
+             (let ((func-returns
+                    (verilog-save-font-no-change-functions
+                     (funcall function))))
               ;; Cache for next time
               (setq verilog-modi-cache-list
                     (cons (list (list modi function)
@@ -10003,7 +10026,7 @@ Report errors unless optional IGNORE-ERROR."
   (let* ((realname (verilog-symbol-detick name t))
         (modport (assoc name (verilog-decls-get-modports (verilog-modi-get-decls modi)))))
     (or modport ignore-error
-       (error "%s: Can't locate %s modport definition%s"
+       (error "%s: Can't locate `%s' modport definition%s"
                (verilog-point-text) name
                (if (not (equal name realname))
                    (concat " (Expanded macro to " realname ")")
@@ -10193,7 +10216,7 @@ When MODI is non-null, also add to modi-cache, for tracking."
          ((equal direction "parameter")
           (verilog-modi-cache-add-gparams modi sigs))
          (t
-          (error "Unsupported verilog-insert-definition direction: %s" direction))))
+          (error "Unsupported verilog-insert-definition direction: `%s'" direction))))
   (or dont-sort
       (setq sigs (sort (copy-alist sigs) `verilog-signals-sort-compare)))
   (while sigs
@@ -10224,7 +10247,7 @@ When MODI is non-null, also add to modi-cache, for tracking."
 
 (eval-when-compile
   (if (not (boundp 'indent-pt))
-      (defvar indent-pt nil "Local used by insert-indent")))
+      (defvar indent-pt nil "Local used by `verilog-insert-indent'.")))
 
 (defun verilog-insert-indent (&rest stuff)
   "Indent to position stored in local `indent-pt' variable, then insert STUFF.
@@ -10510,6 +10533,41 @@ removed."
          (re-search-backward ",")
          (delete-char 1))))))
 
+(defun verilog-delete-auto-buffer ()
+  "Perform `verilog-delete-auto' on the current buffer.
+Intended for internal use inside a `verilog-save-font-no-change-functions' block."
+  ;; Allow user to customize
+  (verilog-run-hooks 'verilog-before-delete-auto-hook)
+
+  ;; Remove those that have multi-line insertions, possibly with parameters
+  ;; We allow anything beginning with AUTO, so that users can add their own
+  ;; patterns
+  (verilog-auto-re-search-do
+   (concat "/\\*AUTO[A-Za-z0-9_]+"
+           ;; Optional parens or quoted parameter or .* for (((...)))
+           "\\(\\|([^)]*)\\|(\"[^\"]*\")\\).*?"
+           "\\*/")
+   'verilog-delete-autos-lined)
+  ;; Remove those that are in parenthesis
+  (verilog-auto-re-search-do
+   (concat "/\\*"
+           (eval-when-compile
+             (verilog-regexp-words
+              `("AS" "AUTOARG" "AUTOCONCATWIDTH" "AUTOINST" "AUTOINSTPARAM"
+                "AUTOSENSE")))
+           "\\*/")
+   'verilog-delete-to-paren)
+  ;; Do .* instantiations, but avoid removing any user pins by looking for our magic comments
+  (verilog-auto-re-search-do "\\.\\*"
+                             'verilog-delete-auto-star-all)
+  ;; Remove template comments ... anywhere in case was pasted after AUTOINST removed
+  (goto-char (point-min))
+  (while (re-search-forward "\\s-*// \\(Templated\\|Implicit \\.\\*\\)\\([ \tLT0-9]*\\| LHS: .*\\)?$" nil t)
+    (replace-match ""))
+
+  ;; Final customize
+  (verilog-run-hooks 'verilog-delete-auto-hook))
+
 (defun verilog-delete-auto ()
   "Delete the automatic outputs, regs, and wires created by \\[verilog-auto].
 Use \\[verilog-auto] to re-insert the updated AUTOs.
@@ -10520,39 +10578,10 @@ called before and after this function, respectively."
   (save-excursion
     (if (buffer-file-name)
         (find-file-noselect (buffer-file-name)))  ; To check we have latest version
-    (verilog-save-no-change-functions
+    (verilog-save-font-no-change-functions
      (verilog-save-scan-cache
-      ;; Allow user to customize
-      (verilog-run-hooks 'verilog-before-delete-auto-hook)
-
-      ;; Remove those that have multi-line insertions, possibly with parameters
-      ;; We allow anything beginning with AUTO, so that users can add their own
-      ;; patterns
-      (verilog-auto-re-search-do
-       (concat "/\\*AUTO[A-Za-z0-9_]+"
-              ;; Optional parens or quoted parameter or .* for (((...)))
-              "\\(\\|([^)]*)\\|(\"[^\"]*\")\\).*?"
-              "\\*/")
-       'verilog-delete-autos-lined)
-      ;; Remove those that are in parenthesis
-      (verilog-auto-re-search-do
-       (concat "/\\*"
-              (eval-when-compile
-                (verilog-regexp-words
-                 `("AS" "AUTOARG" "AUTOCONCATWIDTH" "AUTOINST" "AUTOINSTPARAM"
-                   "AUTOSENSE")))
-              "\\*/")
-       'verilog-delete-to-paren)
-      ;; Do .* instantiations, but avoid removing any user pins by looking for our magic comments
-      (verilog-auto-re-search-do "\\.\\*"
-                                'verilog-delete-auto-star-all)
-      ;; Remove template comments ... anywhere in case was pasted after AUTOINST removed
-      (goto-char (point-min))
-      (while (re-search-forward "\\s-*// \\(Templated\\|Implicit \\.\\*\\)\\([ \tLT0-9]*\\| LHS: .*\\)?$" nil t)
-       (replace-match ""))
+      (verilog-delete-auto-buffer)))))
 
-      ;; Final customize
-      (verilog-run-hooks 'verilog-delete-auto-hook)))))
 \f
 ;;; Auto inject:
 ;;
@@ -10679,10 +10708,11 @@ Typing \\[verilog-inject-auto] will make this into:
 ;; Auto diff:
 ;;
 
-(defun verilog-diff-buffers-p (b1 b2 &optional whitespace)
+(defun verilog-diff-buffers-p (b1 b2 &optional whitespace regexp)
   "Return nil if buffers B1 and B2 have same contents.
 Else, return point in B1 that first mismatches.
-If optional WHITESPACE true, ignore whitespace."
+If optional WHITESPACE true, ignore whitespace.
+If optional REGEXP, ignore differences matching it."
   (save-excursion
     (let* ((case-fold-search nil)  ; compare-buffer-substrings cares
           (p1 (with-current-buffer b1 (goto-char (point-min))))
@@ -10703,6 +10733,15 @@ If optional WHITESPACE true, ignore whitespace."
            (goto-char p2)
            (skip-chars-forward " \t\n\r\f\v")
            (setq p2 (point))))
+       (when regexp
+         (with-current-buffer b1
+           (goto-char p1)
+           (when (looking-at regexp)
+              (setq p1 (match-end 0))))
+         (with-current-buffer b2
+           (goto-char p2)
+           (when (looking-at regexp)
+              (setq p2 (match-end 0)))))
        (setq size (min (- maxp1 p1) (- maxp2 p2)))
        (setq progress (compare-buffer-substrings b2 p2 (+ size p2)
                                                  b1 p1 (+ size p1)))
@@ -10723,7 +10762,7 @@ Ignores WHITESPACE if t, and writes output to stdout if SHOW."
   ;; call `diff' as `diff' has different calling semantics on different
   ;; versions of Emacs.
   (if (not (file-exists-p f1))
-      (message "Buffer %s has no associated file on disc" (buffer-name b2))
+      (message "Buffer `%s' has no associated file on disk" (buffer-name b2))
     (with-temp-buffer "*Verilog-Diff*"
                       (let ((outbuf (current-buffer))
                             (f2 (make-temp-file "vm-diff-auto-")))
@@ -10791,7 +10830,7 @@ or `diff' in batch mode."
            ;; Restore name if unwind
            (with-current-buffer b1 (setq buffer-file-name name1)))))
       ;;
-      (setq diffpt (verilog-diff-buffers-p b1 b2 t))
+      (setq diffpt (verilog-diff-buffers-p b1 b2 t verilog-diff-ignore-regexp))
       (cond ((not diffpt)
             (unless noninteractive (message "AUTO expansion identical"))
              (kill-buffer newname))  ; Nice to cleanup after oneself
@@ -11054,6 +11093,7 @@ If PAR-VALUES replace final strings with these parameter values."
         (vl-name (verilog-sig-name port-st))
         (vl-width (verilog-sig-width port-st))
         (vl-modport (verilog-sig-modport port-st))
+        (vl-memory (verilog-sig-memory port-st))
         (vl-mbits (if (verilog-sig-multidim port-st)
                        (verilog-sig-multidim-string port-st) ""))
         (vl-bits (if (or verilog-auto-inst-vector
@@ -11078,15 +11118,25 @@ If PAR-VALUES replace final strings with these parameter values."
                        (concat "\\<" (nth 0 (car check-values)) "\\>")
                        (concat "(" (nth 1 (car check-values)) ")")
                        t t vl-mbits)
+             vl-memory (when vl-memory
+                          (verilog-string-replace-matches
+                           (concat "\\<" (nth 0 (car check-values)) "\\>")
+                           (concat "(" (nth 1 (car check-values)) ")")
+                           t t vl-memory))
              check-values (cdr check-values)))
       (setq vl-bits (verilog-simplify-range-expression vl-bits)
            vl-mbits (verilog-simplify-range-expression vl-mbits)
+           vl-memory (when vl-memory (verilog-simplify-range-expression vl-memory))
            vl-width (verilog-make-width-expression vl-bits))) ; Not in the loop for speed
     ;; Default net value if not found
-    (setq dflt-bits (if (and (verilog-sig-bits port-st)
-                            (or (verilog-sig-multidim port-st)
-                                (verilog-sig-memory port-st)))
-                       (concat "/*" vl-mbits vl-bits "*/")
+    (setq dflt-bits (if (or (and (verilog-sig-bits port-st)
+                                 (verilog-sig-multidim port-st))
+                            (verilog-sig-memory port-st))
+                       (concat "/*" vl-mbits vl-bits
+                                ;; .[ used to separate packed from unpacked
+                                (if vl-memory "." "")
+                                (if vl-memory vl-memory "")
+                                "*/")
                      (concat vl-bits))
          tpl-net (concat port
                          (if (and vl-modport
@@ -11157,7 +11207,7 @@ If PAR-VALUES replace final strings with these parameter values."
          (for-star
           (indent-to (+ (if (< verilog-auto-inst-column 48) 24 16)
                         verilog-auto-inst-column))
-          (verilog-insert " // Implicit .\*\n")) ;For some reason the . or * must be escaped...
+          (verilog-insert " // Implicit .*\n"))
          (t
           (insert "\n")))))
 ;;(verilog-auto-inst-port (list "foo" "[5:0]") 10 (list (list "foo" "a@\"(% (+ @ 1) 4)\"a")) "3")
@@ -13316,13 +13366,16 @@ Typing \\[verilog-auto] will make this into:
           (sig-list-all  (verilog-decls-get-iovars moddecls))
           ;;
           (undecode-sig (or (assoc undecode-name sig-list-all)
-                            (error "%s: Signal %s not found in design" (verilog-point-text) undecode-name)))
+                            (error "%s: Signal `%s' not found in design"
+                                    (verilog-point-text) undecode-name)))
           (undecode-enum (or (verilog-sig-enum undecode-sig)
-                             (error "%s: Signal %s does not have an enum tag" (verilog-point-text) undecode-name)))
+                             (error "%s: Signal `%s' does not have an enum tag"
+                                     (verilog-point-text) undecode-name)))
           ;;
           (enum-sigs (verilog-signals-not-in
                       (or (verilog-signals-matching-enum sig-list-consts undecode-enum)
-                          (error "%s: No state definitions for %s" (verilog-point-text) undecode-enum))
+                          (error "%s: No state definitions for `%s'"
+                                  (verilog-point-text) undecode-enum))
                       nil))
           ;;
           (one-hot (or
@@ -13518,120 +13571,115 @@ Wilson Snyder (wsnyder@wsnyder.org)."
   (unless noninteractive (message "Updating AUTOs..."))
   (if (fboundp 'dinotrace-unannotate-all)
       (dinotrace-unannotate-all))
-  (verilog-save-font-mods
+  ;; Disable change hooks for speed
+  ;; This let can't be part of above let; must restore
+  ;; after-change-functions before font-lock resumes
+  (verilog-save-font-no-change-functions
    (let ((oldbuf (if (not (buffer-modified-p))
-                    (buffer-string)))
-        (case-fold-search verilog-case-fold)
-        ;; Cache directories; we don't write new files, so can't change
-        (verilog-dir-cache-preserving t)
-        ;; Cache current module
-        (verilog-modi-cache-current-enable t)
-        (verilog-modi-cache-current-max (point-min)) ; IE it's invalid
-        verilog-modi-cache-current)
-     (unwind-protect
-        ;; Disable change hooks for speed
-        ;; This let can't be part of above let; must restore
-        ;; after-change-functions before font-lock resumes
-        (verilog-save-no-change-functions
-         (verilog-save-scan-cache
-          (save-excursion
-            ;; Wipe cache; otherwise if we AUTOed a block above this one,
-            ;; we'll misremember we have generated IOs, confusing AUTOOUTPUT
-            (setq verilog-modi-cache-list nil)
-            ;; Local state
-            (verilog-read-auto-template-init)
-            ;; If we're not in verilog-mode, change syntax table so parsing works right
-            (unless (eq major-mode `verilog-mode) (verilog-mode))
-            ;; Allow user to customize
-            (verilog-run-hooks 'verilog-before-auto-hook)
-            ;; Try to save the user from needing to revert-file to reread file local-variables
-            (verilog-auto-reeval-locals)
-            (verilog-read-auto-lisp-present)
-            (verilog-read-auto-lisp (point-min) (point-max))
-            (verilog-getopt-flags)
-            ;; From here on out, we can cache anything we read from disk
-            (verilog-preserve-dir-cache
-             ;; These two may seem obvious to do always, but on large includes it can be way too slow
-             (when verilog-auto-read-includes
-               (verilog-read-includes)
-               (verilog-read-defines nil nil t))
-             ;; Setup variables due to SystemVerilog expansion
-             (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic-setup)
-             ;; This particular ordering is important
-             ;; INST: Lower modules correct, no internal dependencies, FIRST
-             (verilog-preserve-modi-cache
-              ;; Clear existing autos else we'll be screwed by existing ones
-              (verilog-delete-auto)
-              ;; Injection if appropriate
-              (when inject
-                (verilog-inject-inst)
-                (verilog-inject-sense)
-                (verilog-inject-arg))
-              ;;
-              ;; Do user inserts first, so their code can insert AUTOs
-              (verilog-auto-re-search-do "/\\*AUTOINSERTLISP(.*?)\\*/"
-                                         'verilog-auto-insert-lisp)
-              ;; Expand instances before need the signals the instances input/output
-              (verilog-auto-re-search-do "/\\*AUTOINSTPARAM\\*/" 'verilog-auto-inst-param)
-              (verilog-auto-re-search-do "/\\*AUTOINST\\*/" 'verilog-auto-inst)
-              (verilog-auto-re-search-do "\\.\\*" 'verilog-auto-star)
-              ;; Doesn't matter when done, but combine it with a common changer
-              (verilog-auto-re-search-do "/\\*\\(AUTOSENSE\\|AS\\)\\*/" 'verilog-auto-sense)
-              (verilog-auto-re-search-do "/\\*AUTORESET\\*/" 'verilog-auto-reset)
-              ;; Must be done before autoin/out as creates a reg
-              (verilog-auto-re-search-do "/\\*AUTOASCIIENUM(.*?)\\*/" 'verilog-auto-ascii-enum)
-              ;;
-              ;; first in/outs from other files
-              (verilog-auto-re-search-do "/\\*AUTOINOUTMODPORT(.*?)\\*/" 'verilog-auto-inout-modport)
-              (verilog-auto-re-search-do "/\\*AUTOINOUTMODULE(.*?)\\*/" 'verilog-auto-inout-module)
-              (verilog-auto-re-search-do "/\\*AUTOINOUTCOMP(.*?)\\*/" 'verilog-auto-inout-comp)
-              (verilog-auto-re-search-do "/\\*AUTOINOUTIN(.*?)\\*/" 'verilog-auto-inout-in)
-              (verilog-auto-re-search-do "/\\*AUTOINOUTPARAM(.*?)\\*/" 'verilog-auto-inout-param)
-              ;; next in/outs which need previous sucked inputs first
-              (verilog-auto-re-search-do "/\\*AUTOOUTPUT\\((.*?)\\)?\\*/" 'verilog-auto-output)
-              (verilog-auto-re-search-do "/\\*AUTOINPUT\\((.*?)\\)?\\*/" 'verilog-auto-input)
-              (verilog-auto-re-search-do "/\\*AUTOINOUT\\((.*?)\\)?\\*/" 'verilog-auto-inout)
-              ;; Then tie off those in/outs
-              (verilog-auto-re-search-do "/\\*AUTOTIEOFF\\*/" 'verilog-auto-tieoff)
-              ;; These can be anywhere after AUTOINSERTLISP
-              (verilog-auto-re-search-do "/\\*AUTOUNDEF\\((.*?)\\)?\\*/" 'verilog-auto-undef)
-              ;; Wires/regs must be after inputs/outputs
-              (verilog-auto-re-search-do "/\\*AUTOASSIGNMODPORT(.*?)\\*/" 'verilog-auto-assign-modport)
-              (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic)
-              (verilog-auto-re-search-do "/\\*AUTOWIRE\\*/" 'verilog-auto-wire)
-              (verilog-auto-re-search-do "/\\*AUTOREG\\*/" 'verilog-auto-reg)
-              (verilog-auto-re-search-do "/\\*AUTOREGINPUT\\*/" 'verilog-auto-reg-input)
-              ;; outputevery needs AUTOOUTPUTs done first
-              (verilog-auto-re-search-do "/\\*AUTOOUTPUTEVERY\\((.*?)\\)?\\*/" 'verilog-auto-output-every)
-              ;; After we've created all new variables
-              (verilog-auto-re-search-do "/\\*AUTOUNUSED\\*/" 'verilog-auto-unused)
-              ;; Must be after all inputs outputs are generated
-              (verilog-auto-re-search-do "/\\*AUTOARG\\*/" 'verilog-auto-arg)
-              ;; User inserts
-              (verilog-auto-re-search-do "/\\*AUTOINSERTLAST(.*?)\\*/" 'verilog-auto-insert-last)
-              ;; Fix line numbers (comments only)
-              (when verilog-auto-inst-template-numbers
-                (verilog-auto-templated-rel))
-              (when verilog-auto-template-warn-unused
-                (verilog-auto-template-lint))))
-            ;;
-            (verilog-run-hooks 'verilog-auto-hook)
-            ;;
-            (when verilog-auto-delete-trailing-whitespace
-              (verilog-delete-trailing-whitespace))
-            ;;
-            (set (make-local-variable 'verilog-auto-update-tick) (buffer-chars-modified-tick))
-            ;;
-            ;; If end result is same as when started, clear modified flag
-            (cond ((and oldbuf (equal oldbuf (buffer-string)))
-                   (set-buffer-modified-p nil)
-                   (unless noninteractive (message "Updating AUTOs...done (no changes)")))
-                  (t (unless noninteractive (message "Updating AUTOs...done"))))
-            ;; End of after-change protection
-            )))
-       ;; Unwind forms
-       ;; Currently handled in verilog-save-font-mods
-       ))))
+                     (buffer-string)))
+         (case-fold-search verilog-case-fold)
+         ;; Cache directories; we don't write new files, so can't change
+         (verilog-dir-cache-preserving t)
+         ;; Cache current module
+         (verilog-modi-cache-current-enable t)
+         (verilog-modi-cache-current-max (point-min)) ; IE it's invalid
+         verilog-modi-cache-current)
+     (verilog-save-scan-cache
+      (save-excursion
+        ;; Wipe cache; otherwise if we AUTOed a block above this one,
+        ;; we'll misremember we have generated IOs, confusing AUTOOUTPUT
+        (setq verilog-modi-cache-list nil)
+        ;; Local state
+        (verilog-read-auto-template-init)
+        ;; If we're not in verilog-mode, change syntax table so parsing works right
+        (unless (eq major-mode `verilog-mode) (verilog-mode))
+        ;; Allow user to customize
+        (verilog-run-hooks 'verilog-before-auto-hook)
+        ;; Try to save the user from needing to revert-file to reread file local-variables
+        (verilog-auto-reeval-locals)
+        (verilog-read-auto-lisp-present)
+        (verilog-read-auto-lisp (point-min) (point-max))
+        (verilog-getopt-flags)
+        ;; From here on out, we can cache anything we read from disk
+        (verilog-preserve-dir-cache
+         ;; These two may seem obvious to do always, but on large includes it can be way too slow
+         (when verilog-auto-read-includes
+           (verilog-read-includes)
+           (verilog-read-defines nil nil t))
+         ;; Setup variables due to SystemVerilog expansion
+         (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic-setup)
+         ;; This particular ordering is important
+         ;; INST: Lower modules correct, no internal dependencies, FIRST
+         (verilog-preserve-modi-cache
+          ;; Clear existing autos else we'll be screwed by existing ones
+          (verilog-delete-auto-buffer)
+          ;; Injection if appropriate
+          (when inject
+            (verilog-inject-inst)
+            (verilog-inject-sense)
+            (verilog-inject-arg))
+          ;;
+          ;; Do user inserts first, so their code can insert AUTOs
+          (verilog-auto-re-search-do "/\\*AUTOINSERTLISP(.*?)\\*/"
+                                     'verilog-auto-insert-lisp)
+          ;; Expand instances before need the signals the instances input/output
+          (verilog-auto-re-search-do "/\\*AUTOINSTPARAM\\*/" 'verilog-auto-inst-param)
+          (verilog-auto-re-search-do "/\\*AUTOINST\\*/" 'verilog-auto-inst)
+          (verilog-auto-re-search-do "\\.\\*" 'verilog-auto-star)
+          ;; Doesn't matter when done, but combine it with a common changer
+          (verilog-auto-re-search-do "/\\*\\(AUTOSENSE\\|AS\\)\\*/" 'verilog-auto-sense)
+          (verilog-auto-re-search-do "/\\*AUTORESET\\*/" 'verilog-auto-reset)
+          ;; Must be done before autoin/out as creates a reg
+          (verilog-auto-re-search-do "/\\*AUTOASCIIENUM(.*?)\\*/" 'verilog-auto-ascii-enum)
+          ;;
+          ;; first in/outs from other files
+          (verilog-auto-re-search-do "/\\*AUTOINOUTMODPORT(.*?)\\*/" 'verilog-auto-inout-modport)
+          (verilog-auto-re-search-do "/\\*AUTOINOUTMODULE(.*?)\\*/" 'verilog-auto-inout-module)
+          (verilog-auto-re-search-do "/\\*AUTOINOUTCOMP(.*?)\\*/" 'verilog-auto-inout-comp)
+          (verilog-auto-re-search-do "/\\*AUTOINOUTIN(.*?)\\*/" 'verilog-auto-inout-in)
+          (verilog-auto-re-search-do "/\\*AUTOINOUTPARAM(.*?)\\*/" 'verilog-auto-inout-param)
+          ;; next in/outs which need previous sucked inputs first
+          (verilog-auto-re-search-do "/\\*AUTOOUTPUT\\((.*?)\\)?\\*/" 'verilog-auto-output)
+          (verilog-auto-re-search-do "/\\*AUTOINPUT\\((.*?)\\)?\\*/" 'verilog-auto-input)
+          (verilog-auto-re-search-do "/\\*AUTOINOUT\\((.*?)\\)?\\*/" 'verilog-auto-inout)
+          ;; Then tie off those in/outs
+          (verilog-auto-re-search-do "/\\*AUTOTIEOFF\\*/" 'verilog-auto-tieoff)
+          ;; These can be anywhere after AUTOINSERTLISP
+          (verilog-auto-re-search-do "/\\*AUTOUNDEF\\((.*?)\\)?\\*/" 'verilog-auto-undef)
+          ;; Wires/regs must be after inputs/outputs
+          (verilog-auto-re-search-do "/\\*AUTOASSIGNMODPORT(.*?)\\*/" 'verilog-auto-assign-modport)
+          (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic)
+          (verilog-auto-re-search-do "/\\*AUTOWIRE\\*/" 'verilog-auto-wire)
+          (verilog-auto-re-search-do "/\\*AUTOREG\\*/" 'verilog-auto-reg)
+          (verilog-auto-re-search-do "/\\*AUTOREGINPUT\\*/" 'verilog-auto-reg-input)
+          ;; outputevery needs AUTOOUTPUTs done first
+          (verilog-auto-re-search-do "/\\*AUTOOUTPUTEVERY\\((.*?)\\)?\\*/" 'verilog-auto-output-every)
+          ;; After we've created all new variables
+          (verilog-auto-re-search-do "/\\*AUTOUNUSED\\*/" 'verilog-auto-unused)
+          ;; Must be after all inputs outputs are generated
+          (verilog-auto-re-search-do "/\\*AUTOARG\\*/" 'verilog-auto-arg)
+          ;; User inserts
+          (verilog-auto-re-search-do "/\\*AUTOINSERTLAST(.*?)\\*/" 'verilog-auto-insert-last)
+          ;; Fix line numbers (comments only)
+          (when verilog-auto-inst-template-numbers
+            (verilog-auto-templated-rel))
+          (when verilog-auto-template-warn-unused
+            (verilog-auto-template-lint))))
+        ;;
+        (verilog-run-hooks 'verilog-auto-hook)
+        ;;
+        (when verilog-auto-delete-trailing-whitespace
+          (verilog-delete-trailing-whitespace))
+        ;;
+        (set (make-local-variable 'verilog-auto-update-tick) (buffer-chars-modified-tick))
+        ;;
+        ;; If end result is same as when started, clear modified flag
+        (cond ((and oldbuf (equal oldbuf (buffer-string)))
+               (verilog-restore-buffer-modified-p nil)
+               (unless noninteractive (message "Updating AUTOs...done (no changes)")))
+              (t (unless noninteractive (message "Updating AUTOs...done"))))
+        ;; End of save-cache
+        )))))
 \f
 ;;; Skeletons:
 ;;
index a8c28130660cba23c6e75e413d8398cb32a8453f..7e289b3ff5b4d26381e9688ad7409057bfafcf72 100644 (file)
@@ -1,4 +1,4 @@
-;;; which-func.el --- print current function in mode line
+;;; which-func.el --- print current function in mode line  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1994, 1997-1998, 2001-2015 Free Software Foundation,
 ;; Inc.
@@ -80,7 +80,6 @@
   "List of major modes for which Which Function mode should be used.
 For other modes it is disabled.  If this is equal to t,
 then Which Function mode is enabled in any major mode that supports it."
-  :group 'which-func
   :version "24.3"                       ; explicit list -> t
   :type '(choice (const :tag "All modes" t)
                 (repeat (symbol :tag "Major mode"))))
@@ -91,13 +90,11 @@ This means that Which Function mode won't really do anything
 until you use Imenu, in these modes.  Note that files
 larger than `which-func-maxout' behave in this way too;
 Which Function mode doesn't do anything until you use Imenu."
-  :group 'which-func
   :type '(repeat (symbol :tag "Major mode")))
 
 (defcustom which-func-maxout 500000
   "Don't automatically compute the Imenu menu if buffer is this big or bigger.
 Zero means compute the Imenu menu regardless of size."
-  :group 'which-func
   :type 'integer)
 
 (defvar which-func-keymap
@@ -137,8 +134,7 @@ Zero means compute the Imenu menu regardless of size."
      :foreground "Blue1")
     (t
      :foreground "LightSkyBlue"))
-  "Face used to highlight mode line function names."
-  :group 'which-func)
+  "Face used to highlight mode line function names.")
 
 (defcustom which-func-format
   `("["
@@ -152,7 +148,6 @@ mouse-3: go to end")
     "]")
   "Format for displaying the function in the mode line."
   :version "24.2"                  ; added mouse-face; 24point2 is correct
-  :group 'which-func
   :type 'sexp)
 ;;;###autoload (put 'which-func-format 'risky-local-variable t)
 
@@ -193,14 +188,16 @@ This makes a difference only if `which-function-mode' is non-nil.")
 
 (add-hook 'find-file-hook 'which-func-ff-hook t)
 
+(defun which-func-try-to-enable ()
+  (unless (or (not which-function-mode)
+              (local-variable-p 'which-func-mode))
+    (setq which-func-mode (or (eq which-func-modes t)
+                              (member major-mode which-func-modes)))))
+
 (defun which-func-ff-hook ()
   "File find hook for Which Function mode.
 It creates the Imenu index for the buffer, if necessary."
-  (unless (local-variable-p 'which-func-mode)
-    (setq which-func-mode
-          (and which-function-mode
-               (or (eq which-func-modes t)
-                   (member major-mode which-func-modes)))))
+  (which-func-try-to-enable)
 
   (condition-case err
       (if (and which-func-mode
@@ -239,6 +236,13 @@ It creates the Imenu index for the buffer, if necessary."
 
 (defvar which-func-update-timer nil)
 
+(unless (or (assq 'which-func-mode mode-line-misc-info)
+            (assq 'which-function-mode mode-line-misc-info))
+  (add-to-list 'mode-line-misc-info
+               '(which-function-mode    ;Only display if mode is enabled.
+                 (which-func-mode       ;Only display if buffer supports it.
+                  ("" which-func-format " ")))))
+
 ;; This is the name people would normally expect.
 ;;;###autoload
 (define-minor-mode which-function-mode
@@ -254,17 +258,12 @@ in certain major modes."
   (when (timerp which-func-update-timer)
     (cancel-timer which-func-update-timer))
   (setq which-func-update-timer nil)
-  (if which-function-mode
-      ;;Turn it on
-      (progn
-        (setq which-func-update-timer
-              (run-with-idle-timer idle-update-delay t #'which-func-update))
-        (dolist (buf (buffer-list))
-          (with-current-buffer buf
-            (unless (local-variable-p 'which-func-mode)
-              (setq which-func-mode
-                    (or (eq which-func-modes t)
-                        (member major-mode which-func-modes)))))))))
+  (when which-function-mode
+    ;;Turn it on.
+    (setq which-func-update-timer
+          (run-with-idle-timer idle-update-delay t #'which-func-update))
+    (dolist (buf (buffer-list))
+      (with-current-buffer buf (which-func-try-to-enable)))))
 
 (defvar which-function-imenu-failed nil
   "Locally t in a buffer if `imenu--make-index-alist' found nothing there.")
index 3afb72aab16a84599a8c2ba24d651dfcb9625d4a..853c915946cb5f855ca3f6da460da9db64f329ae 100644 (file)
@@ -1232,7 +1232,7 @@ V%s 0 /%s-latin1 /%s Latin1Encoding put\n"
 (provide 'ps-mule)
 
 ;; Local Variables:
-;; generated-autoload-file: "ps-print.el"
+;; generated-autoload-file: "ps-print-loaddefs.el"
 ;; End:
 
 ;;; ps-mule.el ends here
index ff60926d48ab51a836113b9a8adc8cc735fbebe4..c0c3d5fa0647494cb0b8735ec9059f3409c15469 100644 (file)
@@ -1475,6 +1475,8 @@ Please send all bug fixes and enhancements to
 ;; Load XEmacs/Emacs definitions
 (require 'ps-def)
 
+;; autoloads for secondary file
+(require 'ps-print-loaddefs)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; User Variables:
@@ -6584,79 +6586,6 @@ If FACE is not a valid face name, use default face."
 (unless noninteractive
   (add-hook 'kill-emacs-hook #'ps-kill-emacs-check))
 
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; To make this file smaller, some commands go in a separate file.
-;; But autoload them here to make the separation invisible.
-\f
-;;;### (autoloads nil "ps-mule" "ps-mule.el" "231b07356e5a37ebf517c613a3a12bba")
-;;; Generated autoloads from ps-mule.el
-
-(defvar ps-multibyte-buffer nil "\
-Specifies the multi-byte buffer handling.
-
-Valid values are:
-
-  nil                    This is the value to use the default settings;
-                         by default, this only works to print buffers with
-                         only ASCII and Latin characters.   But this default
-                         setting can be changed by setting the variable
-                         `ps-mule-font-info-database-default' differently.
-                         The initial value of this variable is
-                         `ps-mule-font-info-database-latin' (see
-                         documentation).
-
-  `non-latin-printer'    This is the value to use when you have a Japanese
-                         or Korean PostScript printer and want to print
-                         buffer with ASCII, Latin-1, Japanese (JISX0208 and
-                         JISX0201-Kana) and Korean characters.  At present,
-                         it was not tested with the Korean characters
-                         printing.  If you have a korean PostScript printer,
-                         please, test it.
-
-  `bdf-font'             This is the value to use when you want to print
-                         buffer with BDF fonts.  BDF fonts include both latin
-                         and non-latin fonts.  BDF (Bitmap Distribution
-                         Format) is a format used for distributing X's font
-                         source file.  BDF fonts are included in
-                         `intlfonts-1.2' which is a collection of X11 fonts
-                         for all characters supported by Emacs.  In order to
-                         use this value, be sure to have installed
-                         `intlfonts-1.2' and set the variable
-                         `bdf-directory-list' appropriately (see ps-bdf.el for
-                         documentation of this variable).
-
-  `bdf-font-except-latin' This is like `bdf-font' except that it uses
-                         PostScript default fonts to print ASCII and Latin-1
-                         characters.  This is convenient when you want or
-                         need to use both latin and non-latin characters on
-                         the same buffer.  See `ps-font-family',
-                         `ps-header-font-family' and `ps-font-info-database'.
-
-Any other value is treated as nil.")
-
-(custom-autoload 'ps-multibyte-buffer "ps-mule" t)
-
-(autoload 'ps-mule-initialize "ps-mule" "\
-Initialize global data for printing multi-byte characters.
-
-\(fn)" nil nil)
-
-(autoload 'ps-mule-begin-job "ps-mule" "\
-Start printing job for multi-byte chars between FROM and TO.
-It checks if all multi-byte characters in the region are printable or not.
-
-\(fn FROM TO)" nil nil)
-
-(autoload 'ps-mule-end-job "ps-mule" "\
-Finish printing job for multi-byte chars.
-
-\(fn)" nil nil)
-
-;;;***
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 (provide 'ps-print)
 
 ;;; ps-print.el ends here
index 151be592367f44d1c077741decbe8cfbfbf2e2c5..8316fe5072b06c151b1a938e00aab67cf1d3b0dd 100644 (file)
@@ -237,5 +237,5 @@ of ENTRY-LIST is a list of cons cells (\"MACRONAME\" . LEVEL).  See
 ;;; reftex-auc.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index a35d41109e64f78a66ad474042b4944a9559b0a3..b2229d557b9d74146d087213abd5cc0da91714fb 100644 (file)
@@ -1262,5 +1262,5 @@ created files in the variables `reftex-create-bibtex-header' or
 ;;; reftex-cite.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 60cb1f652578eb086edb0c1a199d7a20f390ecef..8601294ee732f6339ee3d54d09c12e2db4626913 100644 (file)
@@ -488,5 +488,5 @@ Calling this function several times find successive citation locations."
 ;;; reftex-dcr.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 15d42fe7b022aea34fb4ab367c6f59369b1e290d..94635c0c122211ee442e36b01983a85a3c29b7f6 100644 (file)
@@ -477,5 +477,5 @@ With no argument, this command toggles
 ;;; reftex-global.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 7e961e8340669f216405511ba806fe95ece7b8a6..47ba14b02f8ca3a4bf4ab70ec19469366970b77d 100644 (file)
@@ -2119,5 +2119,5 @@ Does not do a save-excursion."
 ;;; reftex-index.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index f57113177c5909b3e29e68aa101c4c5ec7480931..d27989ade058ca93edd7617b42aa62ba3332bfc0 100644 (file)
@@ -1131,5 +1131,5 @@ When LEVEL is non-nil, increase section numbers on that level."
 ;;; reftex-parse.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index df78447defb1f588f768fd9a7e599d18a457fe75..3d44e5a879d7a55a27b435896d33236a34fa21bd 100644 (file)
@@ -881,5 +881,5 @@ Optional prefix argument OTHER-WINDOW goes to the label in another window."
 ;;; reftex-ref.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 643dbfb5a35dbe2c0138d7c62a2a78c81f67ad81..1948d9f96c305dffeee52b5299380494896a60df 100644 (file)
@@ -745,5 +745,5 @@ Cycle in reverse order if optional argument REVERSE is non-nil."
 ;;; reftex-sel.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index bdae6e54ef37b166d659d537987a8fac19dfd749..87f7944c7f0b36812b0c83748f7714ac7cd3a9e0 100644 (file)
@@ -1111,5 +1111,5 @@ always show the current section in connection with the option
 ;;; reftex-toc.el ends here
 
 ;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
 ;; End:
index 4ee36584929961bb8e8d7ca5a09a6d98571b54ba..b29a56a4db514958f20f952978cf9e411eee2e76 100644 (file)
@@ -70,7 +70,8 @@
 (require 'reftex-vars)
 
 
-;;; Autoloads - see end for automatic autoloads
+;;; Autoloads to ensure loading of support files when necessary
+(require 'reftex-loaddefs)
 
 ;; We autoload tons of functions from these files, but some have
 ;; a single function that needs to be globally autoloaded.
@@ -2394,702 +2395,6 @@ Your bug report will be posted to the AUCTeX bug reporting list.
 
 (setq reftex-tables-dirty t)  ; in case this file is evaluated by hand
 
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "reftex-auc" "reftex-auc.el" "7c0e0b46919f4ceefe1026e31e73ebcd")
-;;; Generated autoloads from reftex-auc.el
-
-(autoload 'reftex-arg-label "reftex-auc" "\
-Use `reftex-label', `reftex-reference' or AUCTeX's code to insert label arg.
-What is being used depends upon `reftex-plug-into-AUCTeX'.
-
-\(fn OPTIONAL &optional PROMPT DEFINITION)" nil nil)
-
-(autoload 'reftex-arg-cite "reftex-auc" "\
-Use `reftex-citation' or AUCTeX's code to insert a cite-key macro argument.
-What is being used depends upon `reftex-plug-into-AUCTeX'.
-
-\(fn OPTIONAL &optional PROMPT DEFINITION)" nil nil)
-
-(autoload 'reftex-arg-index-tag "reftex-auc" "\
-Prompt for an index tag with completion.
-This is the name of an index, not the entry.
-
-\(fn OPTIONAL &optional PROMPT &rest ARGS)" nil nil)
-
-(autoload 'reftex-arg-index "reftex-auc" "\
-Prompt for an index entry completing with known entries.
-Completion is specific for just one index, if the macro or a tag
-argument identify one of multiple indices.
-
-\(fn OPTIONAL &optional PROMPT &rest ARGS)" nil nil)
-
-(autoload 'reftex-plug-into-AUCTeX "reftex-auc" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-toggle-plug-into-AUCTeX "reftex-auc" "\
-Toggle Interface between AUCTeX and RefTeX on and off.
-
-\(fn)" t nil)
-
-(autoload 'reftex-add-label-environments "reftex-auc" "\
-Add label environment descriptions to `reftex-label-alist-style'.
-The format of ENTRY-LIST is exactly like `reftex-label-alist'.  See there
-for details.
-This function makes it possible to support RefTeX from AUCTeX style files.
-The entries in ENTRY-LIST will be processed after the user settings in
-`reftex-label-alist', and before the defaults (specified in
-`reftex-default-label-alist-entries').  Any changes made to
-`reftex-label-alist-style' will raise a flag to the effect that
-the label information is recompiled on next use.
-
-\(fn ENTRY-LIST)" nil nil)
-
-(defalias 'reftex-add-to-label-alist 'reftex-add-label-environments)
-
-(autoload 'reftex-add-section-levels "reftex-auc" "\
-Add entries to the value of `reftex-section-levels'.
-The added values are kept local to the current document.  The format
-of ENTRY-LIST is a list of cons cells (\"MACRONAME\" . LEVEL).  See
-`reftex-section-levels' for an example.
-
-\(fn ENTRY-LIST)" nil nil)
-
-(autoload 'reftex-notice-new-section "reftex-auc" "\
-
-
-\(fn)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-cite" "reftex-cite.el" "7eaa61c05a6578999ea68f1be0fbcf49")
-;;; Generated autoloads from reftex-cite.el
-
-(autoload 'reftex-default-bibliography "reftex-cite" "\
-Return the expanded value of variable `reftex-default-bibliography'.
-The expanded value is cached.
-
-\(fn)" nil nil)
-
-(autoload 'reftex-bib-or-thebib "reftex-cite" "\
-Test if BibTeX or \begin{thebibliography} should be used for the citation.
-Find the bof of the current file
-
-\(fn)" nil nil)
-
-(autoload 'reftex-get-bibfile-list "reftex-cite" "\
-Return list of bibfiles for current document.
-When using the chapterbib or bibunits package you should either
-use the same database files everywhere, or separate parts using
-different databases into different files (included into the mater file).
-Then this function will return the applicable database files.
-
-\(fn)" nil nil)
-
-(autoload 'reftex-pop-to-bibtex-entry "reftex-cite" "\
-Find BibTeX KEY in any file in FILE-LIST in another window.
-If MARK-TO-KILL is non-nil, mark new buffer to kill.
-If HIGHLIGHT is non-nil, highlight the match.
-If ITEM in non-nil, search for bibitem instead of database entry.
-If RETURN is non-nil, just return the entry and restore point.
-
-\(fn KEY FILE-LIST &optional MARK-TO-KILL HIGHLIGHT ITEM RETURN)" nil nil)
-
-(autoload 'reftex-end-of-bib-entry "reftex-cite" "\
-
-
-\(fn ITEM)" nil nil)
-
-(autoload 'reftex-parse-bibtex-entry "reftex-cite" "\
-Parse BibTeX ENTRY.
-If ENTRY is nil then parse the entry in current buffer between FROM and TO.
-If RAW is non-nil, keep double quotes/curly braces delimiting fields.
-
-\(fn ENTRY &optional FROM TO RAW)" nil nil)
-
-(autoload 'reftex-citation "reftex-cite" "\
-Make a citation using BibTeX database files.
-After prompting for a regular expression, scans the buffers with
-bibtex entries (taken from the \\bibliography command) and offers the
-matching entries for selection.  The selected entry is formatted according
-to `reftex-cite-format' and inserted into the buffer.
-
-If NO-INSERT is non-nil, nothing is inserted, only the selected key returned.
-
-FORMAT-KEY can be used to pre-select a citation format.
-
-When called with a `C-u' prefix, prompt for optional arguments in
-cite macros.  When called with a numeric prefix, make that many
-citations.  When called with point inside the braces of a `\\cite'
-command, it will add another key, ignoring the value of
-`reftex-cite-format'.
-
-The regular expression uses an expanded syntax: && is interpreted as `and'.
-Thus, `aaaa&&bbb' matches entries which contain both `aaaa' and `bbb'.
-While entering the regexp, completion on knows citation keys is possible.
-`=' is a good regular expression to match all entries in all files.
-
-\(fn &optional NO-INSERT FORMAT-KEY)" t nil)
-
-(autoload 'reftex-citep "reftex-cite" "\
-Call `reftex-citation' with a format selector `?p'.
-
-\(fn)" t nil)
-
-(autoload 'reftex-citet "reftex-cite" "\
-Call `reftex-citation' with a format selector `?t'.
-
-\(fn)" t nil)
-
-(autoload 'reftex-make-cite-echo-string "reftex-cite" "\
-Format a bibtex ENTRY for the echo area and cache the result.
-
-\(fn ENTRY DOCSTRUCT-SYMBOL)" nil nil)
-
-(autoload 'reftex-create-bibtex-file "reftex-cite" "\
-Create a new BibTeX database BIBFILE with all entries referenced in document.
-The command prompts for a filename and writes the collected
-entries to that file.  Only entries referenced in the current
-document with any \\cite-like macros are used.  The sequence in
-the new file is the same as it was in the old database.
-
-Entries referenced from other entries must appear after all
-referencing entries.
-
-You can define strings to be used as header or footer for the
-created files in the variables `reftex-create-bibtex-header' or
-`reftex-create-bibtex-footer' respectively.
-
-\(fn BIBFILE)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-dcr" "reftex-dcr.el" "08fc5bd6c35f9d6ab4a6ad336d3769c0")
-;;; Generated autoloads from reftex-dcr.el
-
-(autoload 'reftex-view-crossref "reftex-dcr" "\
-View cross reference of macro at point.  Point must be on the KEY
-argument.  When at a `\\ref' macro, show corresponding `\\label'
-definition, also in external documents (`xr').  When on a label, show
-a locations where KEY is referenced.  Subsequent calls find additional
-locations.  When on a `\\cite', show the associated `\\bibitem' macro or
-the BibTeX database entry.  When on a `\\bibitem', show a `\\cite' macro
-which uses this KEY. When on an `\\index', show other locations marked
-by the same index entry.
-To define additional cross referencing items, use the option
-`reftex-view-crossref-extra'.  See also `reftex-view-crossref-from-bibtex'.
-With one or two C-u prefixes, enforce rescanning of the document.
-With argument 2, select the window showing the cross reference.
-AUTO-HOW is only for the automatic crossref display and is handed through
-to the functions `reftex-view-cr-cite' and `reftex-view-cr-ref'.
-
-\(fn &optional ARG AUTO-HOW FAIL-QUIETLY)" t nil)
-
-(autoload 'reftex-mouse-view-crossref "reftex-dcr" "\
-View cross reference of \\ref or \\cite macro where you click.
-If the macro at point is a \\ref, show the corresponding label definition.
-If it is a \\cite, show the BibTeX database entry.
-If there is no such macro at point, search forward to find one.
-With argument, actually select the window showing the cross reference.
-
-\(fn EV)" t nil)
-
-(autoload 'reftex-toggle-auto-view-crossref "reftex-dcr" "\
-Toggle the automatic display of crossref information in the echo area.
-When active, leaving point idle in the argument of a \\ref or \\cite macro
-will display info in the echo area.
-
-\(fn)" t nil)
-
-(autoload 'reftex-view-crossref-from-bibtex "reftex-dcr" "\
-View location in a LaTeX document which cites the BibTeX entry at point.
-Since BibTeX files can be used by many LaTeX documents, this function
-prompts upon first use for a buffer in RefTeX mode.  To reset this
-link to a document, call the function with a prefix arg.
-Calling this function several times find successive citation locations.
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-global" "reftex-global.el" "5fdd9c2edced0882471f86baf4b4b234")
-;;; Generated autoloads from reftex-global.el
-
-(autoload 'reftex-create-tags-file "reftex-global" "\
-Create TAGS file by running `etags' on the current document.
-The TAGS file is also immediately visited with `visit-tags-table'.
-
-\(fn)" t nil)
-
-(autoload 'reftex-grep-document "reftex-global" "\
-Run grep query through all files related to this document.
-With prefix arg, force to rescan document.
-No active TAGS table is required.
-
-\(fn GREP-CMD)" t nil)
-
-(autoload 'reftex-search-document "reftex-global" "\
-Regexp search through all files of the current document.
-Starts always in the master file.  Stops when a match is found.
-To continue searching for next match, use command \\[tags-loop-continue].
-No active TAGS table is required.
-
-\(fn &optional REGEXP)" t nil)
-
-(autoload 'reftex-query-replace-document "reftex-global" "\
-Do `query-replace-regexp' of FROM with TO over the entire document.
-Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
-If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue].
-No active TAGS table is required.
-
-\(fn &optional FROM TO DELIMITED)" t nil)
-
-(autoload 'reftex-find-duplicate-labels "reftex-global" "\
-Produce a list of all duplicate labels in the document.
-
-\(fn)" t nil)
-
-(autoload 'reftex-change-label "reftex-global" "\
-Run `query-replace-regexp' of FROM with TO in all macro arguments.
-Works on the entire multifile document.
-If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue].
-No active TAGS table is required.
-
-\(fn &optional FROM TO)" t nil)
-
-(autoload 'reftex-renumber-simple-labels "reftex-global" "\
-Renumber all simple labels in the document to make them sequentially.
-Simple labels are the ones created by RefTeX, consisting only of the
-prefix and a number.  After the command completes, all these labels will
-have sequential numbers throughout the document.  Any references to
-the labels will be changed as well.  For this, RefTeX looks at the
-arguments of any macros which either start or end in the string `ref'.
-This command should be used with care, in particular in multifile
-documents.  You should not use it if another document refers to this
-one with the `xr' package.
-
-\(fn)" t nil)
-
-(autoload 'reftex-save-all-document-buffers "reftex-global" "\
-Save all documents associated with the current document.
-The function is useful after a global action like replacing or renumbering
-labels.
-
-\(fn)" t nil)
-
-(autoload 'reftex-isearch-minor-mode "reftex-global" "\
-When on, isearch searches the whole document, not only the current file.
-This minor mode allows isearch to search through all the files of
-the current TeX document.
-
-With no argument, this command toggles
-`reftex-isearch-minor-mode'.  With a prefix argument ARG, turn
-`reftex-isearch-minor-mode' on if ARG is positive, otherwise turn it off.
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-index" "reftex-index.el" "29cb6e91c2e06592053e9d543f30f0ea")
-;;; Generated autoloads from reftex-index.el
-
-(autoload 'reftex-index-selection-or-word "reftex-index" "\
-Put selection or the word near point into the default index macro.
-This uses the information in `reftex-index-default-macro' to make an index
-entry.  The phrase indexed is the current selection or the word near point.
-When called with one `C-u' prefix, let the user have a chance to edit the
-index entry.  When called with 2 `C-u' as prefix, also ask for the index
-macro and other stuff.
-When called inside TeX math mode as determined by the `texmathp.el' library
-which is part of AUCTeX, the string is first processed with the
-`reftex-index-math-format', which see.
-
-\(fn &optional ARG PHRASE)" t nil)
-
-(autoload 'reftex-index "reftex-index" "\
-Query for an index macro and insert it along with its arguments.
-The index macros available are those defined in `reftex-index-macro' or
-by a call to `reftex-add-index-macros', typically from an AUCTeX style file.
-RefteX provides completion for the index tag and the index key, and
-will prompt for other arguments.
-
-\(fn &optional CHAR KEY TAG SEL NO-INSERT)" t nil)
-
-(autoload 'reftex-index-complete-tag "reftex-index" "\
-
-
-\(fn &optional ITAG OPT-ARGS)" nil nil)
-
-(autoload 'reftex-index-select-tag "reftex-index" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-index-complete-key "reftex-index" "\
-
-
-\(fn &optional TAG OPTIONAL INITIAL)" nil nil)
-
-(autoload 'reftex-index-show-entry "reftex-index" "\
-
-
-\(fn DATA &optional NO-REVISIT)" nil nil)
-
-(autoload 'reftex-display-index "reftex-index" "\
-Display a buffer with an index compiled from the current document.
-When the document has multiple indices, first prompts for the correct one.
-When index support is turned off, offer to turn it on.
-With one or two `C-u' prefixes, rescan document first.
-With prefix 2, restrict index to current document section.
-With prefix 3, restrict index to region.
-
-\(fn &optional TAG OVERRIDING-RESTRICTION REDO &rest LOCATIONS)" t nil)
-
-(autoload 'reftex-index-phrase-selection-or-word "reftex-index" "\
-Add current selection or word at point to the phrases buffer.
-When you are in transient-mark-mode and the region is active, the
-selection will be used - otherwise the word at point.
-You get a chance to edit the entry in the phrases buffer - finish with
-`C-c C-c'.
-
-\(fn ARG)" t nil)
-
-(autoload 'reftex-index-visit-phrases-buffer "reftex-index" "\
-Switch to the phrases buffer, initialize if empty.
-
-\(fn)" t nil)
-
-(autoload 'reftex-index-phrases-mode "reftex-index" "\
-Major mode for managing the Index phrases of a LaTeX document.
-This buffer was created with RefTeX.
-
-To insert new phrases, use
- - `C-c \\' in the LaTeX document to copy selection or word
- - `\\[reftex-index-new-phrase]' in the phrases buffer.
-
-To index phrases use one of:
-
-\\[reftex-index-this-phrase]     index current phrase
-\\[reftex-index-next-phrase]     index next phrase (or N with prefix arg)
-\\[reftex-index-all-phrases]     index all phrases
-\\[reftex-index-remaining-phrases]     index current and following phrases
-\\[reftex-index-region-phrases]     index the phrases in the region
-
-You can sort the phrases in this buffer with \\[reftex-index-sort-phrases].
-To display information about the phrase at point, use \\[reftex-index-phrases-info].
-
-For more information see the RefTeX User Manual.
-
-Here are all local bindings.
-
-\\{reftex-index-phrases-mode-map}
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-parse" "reftex-parse.el" "7bfdcb2f040dbe9a08d2c38c005c8f21")
-;;; Generated autoloads from reftex-parse.el
-
-(autoload 'reftex-parse-one "reftex-parse" "\
-Re-parse this file.
-
-\(fn)" t nil)
-
-(autoload 'reftex-parse-all "reftex-parse" "\
-Re-parse entire document.
-
-\(fn)" t nil)
-
-(autoload 'reftex-do-parse "reftex-parse" "\
-Do a document rescan.
-When allowed, do only a partial scan from FILE.
-
-\(fn RESCAN &optional FILE)" nil nil)
-
-(autoload 'reftex-everything-regexp "reftex-parse" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-all-document-files "reftex-parse" "\
-Return a list of all files belonging to the current document.
-When RELATIVE is non-nil, give file names relative to directory
-of master file.
-
-\(fn &optional RELATIVE)" nil nil)
-
-(autoload 'reftex-locate-bibliography-files "reftex-parse" "\
-Scan buffer for bibliography macros and return file list.
-
-\(fn MASTER-DIR &optional FILES)" nil nil)
-
-(autoload 'reftex-section-info "reftex-parse" "\
-Return a section entry for the current match.
-Careful: This function expects the match-data to be still in place!
-
-\(fn FILE)" nil nil)
-
-(autoload 'reftex-ensure-index-support "reftex-parse" "\
-When index support is turned off, ask to turn it on and
-set the current prefix argument so that `reftex-access-scan-info'
-will rescan the entire document.
-
-\(fn &optional ABORT)" nil nil)
-
-(autoload 'reftex-index-info-safe "reftex-parse" "\
-
-
-\(fn FILE)" nil nil)
-
-(autoload 'reftex-index-info "reftex-parse" "\
-Return an index entry for the current match.
-Careful: This function expects the match-data to be still in place!
-
-\(fn FILE)" nil nil)
-
-(autoload 'reftex-short-context "reftex-parse" "\
-Get about one line of useful context for the label definition at point.
-
-\(fn ENV PARSE &optional BOUND DERIVE)" nil nil)
-
-(autoload 'reftex-where-am-I "reftex-parse" "\
-Return the docstruct entry above point.
-Actually returns a cons cell in which the cdr is a flag indicating
-if the information is exact (t) or approximate (nil).
-
-\(fn)" nil nil)
-
-(autoload 'reftex-notice-new "reftex-parse" "\
-Hook to handshake with RefTeX after something new has been inserted.
-
-\(fn &optional N FORCE)" nil nil)
-
-(autoload 'reftex-what-macro-safe "reftex-parse" "\
-Call `reftex-what-macro' with special syntax table.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-what-macro "reftex-parse" "\
-Find out if point is within the arguments of any TeX-macro.
-The return value is either (\"\\macro\" . (point)) or a list of them.
-
-If WHICH is nil, immediately return nil.
-If WHICH is 1, return innermost enclosing macro.
-If WHICH is t, return list of all macros enclosing point.
-If WHICH is a list of macros, look only for those macros and return the
-  name of the first macro in this list found to enclose point.
-If the optional BOUND is an integer, bound backwards directed
-  searches to this point.  If it is nil, limit to nearest \\section -
-  like statement.
-
-This function is pretty stable, but can be fooled if the text contains
-things like \\macro{aa}{bb} where \\macro is defined to take only one
-argument.  As RefTeX cannot know this, the string \"bb\" would still be
-considered an argument of macro \\macro.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-what-environment "reftex-parse" "\
-Find out if point is inside a LaTeX environment.
-The return value is (e.g.) either (\"equation\" . (point)) or a list of
-them.
-
-If WHICH is nil, immediately return nil.
-If WHICH is 1, return innermost enclosing environment.
-If WHICH is t, return list of all environments enclosing point.
-If WHICH is a list of environments, look only for those environments and
-  return the name of the first environment in this list found to enclose
-  point.
-
-If the optional BOUND is an integer, bound backwards directed searches to
-this point.  If it is nil, limit to nearest \\section - like statement.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-what-special-env "reftex-parse" "\
-Run the special environment parsers and return the matches.
-
-The return value is (e.g.) either (\"my-parser-function\" . (point))
-or a list of them.
-
-If WHICH is nil, immediately return nil.
-If WHICH is 1, return innermost enclosing environment.
-If WHICH is t, return list of all environments enclosing point.
-If WHICH is a list of environments, look only for those environments and
-  return the name of the first environment in this list found to enclose
-  point.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-nth-arg "reftex-parse" "\
-Return the Nth following {} or [] parentheses content.
-OPT-ARGS is a list of argument numbers which are optional.
-
-\(fn N &optional OPT-ARGS)" nil nil)
-
-(autoload 'reftex-move-over-touching-args "reftex-parse" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-init-section-numbers "reftex-parse" "\
-Initialize the section numbers with zeros or with what is found in the TOC-ENTRY.
-
-\(fn &optional TOC-ENTRY APPENDIX)" nil nil)
-
-(autoload 'reftex-section-number "reftex-parse" "\
-Return a string with the current section number.
-When LEVEL is non-nil, increase section numbers on that level.
-
-\(fn &optional LEVEL STAR)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-ref" "reftex-ref.el" "86c0a243e49d55bb33a32ddac613e189")
-;;; Generated autoloads from reftex-ref.el
-
-(autoload 'reftex-label-location "reftex-ref" "\
-Return the environment or macro which determines the label type at point.
-If optional BOUND is an integer, limit backward searches to that point.
-
-\(fn &optional BOUND)" nil nil)
-
-(autoload 'reftex-label-info-update "reftex-ref" "\
-
-
-\(fn CELL)" nil nil)
-
-(autoload 'reftex-label-info "reftex-ref" "\
-
-
-\(fn LABEL &optional FILE BOUND DERIVE ENV-OR-MAC)" nil nil)
-
-(autoload 'reftex-label "reftex-ref" "\
-Insert a unique label.  Return the label.
-If ENVIRONMENT is given, don't bother to find out yourself.
-If NO-INSERT is non-nil, do not insert label into buffer.
-With prefix arg, force to rescan document first.
-When you are prompted to enter or confirm a label, and you reply with
-just the prefix or an empty string, no label at all will be inserted.
-A new label is also recorded into the label list.
-This function is controlled by the settings of reftex-insert-label-flags.
-
-\(fn &optional ENVIRONMENT NO-INSERT)" t nil)
-
-(autoload 'reftex-reference "reftex-ref" "\
-Make a LaTeX reference.  Look only for labels of a certain TYPE.
-With prefix arg, force to rescan buffer for labels.  This should only be
-necessary if you have recently entered labels yourself without using
-reftex-label.  Rescanning of the buffer can also be requested from the
-label selection menu.
-The function returns the selected label or nil.
-If NO-INSERT is non-nil, do not insert \\ref command, just return label.
-When called with 2 C-u prefix args, disable magic word recognition.
-
-\(fn &optional TYPE NO-INSERT CUT)" t nil)
-
-(autoload 'reftex-query-label-type "reftex-ref" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-show-label-location "reftex-ref" "\
-
-
-\(fn DATA FORWARD NO-REVISIT &optional STAY ERROR)" nil nil)
-
-(autoload 'reftex-goto-label "reftex-ref" "\
-Prompt for a label (with completion) and jump to the location of this label.
-Optional prefix argument OTHER-WINDOW goes to the label in another window.
-
-\(fn &optional OTHER-WINDOW)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-sel" "reftex-sel.el" "faea36cbe37033efd3f9063187eef7ee")
-;;; Generated autoloads from reftex-sel.el
-
-(autoload 'reftex-select-label-mode "reftex-sel" "\
-Major mode for selecting a label in a LaTeX document.
-This buffer was created with RefTeX.
-It only has a meaningful keymap when you are in the middle of a
-selection process.
-To select a label, move the cursor to it and press RET.
-Press `?' for a summary of important key bindings.
-
-During a selection process, these are the local bindings.
-
-\\{reftex-select-label-mode-map}
-
-\(fn)" t nil)
-
-(autoload 'reftex-select-bib-mode "reftex-sel" "\
-Major mode for selecting a citation key in a LaTeX document.
-This buffer was created with RefTeX.
-It only has a meaningful keymap when you are in the middle of a
-selection process.
-In order to select a citation, move the cursor to it and press RET.
-Press `?' for a summary of important key bindings.
-
-During a selection process, these are the local bindings.
-
-\\{reftex-select-label-mode-map}
-
-\(fn)" t nil)
-
-(autoload 'reftex-get-offset "reftex-sel" "\
-
-
-\(fn BUF HERE-AM-I &optional TYPEKEY TOC INDEX FILE)" nil nil)
-
-(autoload 'reftex-insert-docstruct "reftex-sel" "\
-
-
-\(fn BUF TOC LABELS INDEX-ENTRIES FILES CONTEXT COUNTER SHOW-COMMENTED HERE-I-AM XR-PREFIX TOC-BUFFER)" nil nil)
-
-(autoload 'reftex-find-start-point "reftex-sel" "\
-
-
-\(fn FALLBACK &rest LOCATIONS)" nil nil)
-
-(autoload 'reftex-select-item "reftex-sel" "\
-
-
-\(fn REFTEX-SELECT-PROMPT HELP-STRING KEYMAP &optional OFFSET CALL-BACK CB-FLAG)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-toc" "reftex-toc.el" "db9b727d89e2a6ff01986e7c6aff1058")
-;;; Generated autoloads from reftex-toc.el
-
-(autoload 'reftex-toc "reftex-toc" "\
-Show the table of contents for the current document.
-When called with a raw C-u prefix, rescan the document first.
-
-\(fn &optional REBUILD REUSE)" t nil)
-
-(autoload 'reftex-toc-recenter "reftex-toc" "\
-Display the TOC window and highlight line corresponding to current position.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'reftex-toggle-auto-toc-recenter "reftex-toc" "\
-Toggle the automatic recentering of the TOC window.
-When active, leaving point idle will make the TOC window jump to the correct
-section.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
 (provide 'reftex)
 
 ;;; reftex.el ends here
index 6df26a4c9cda87fc118b0a687f3524348ec847d2..9c27276785892170bd1165763714df45889c3afa 100644 (file)
@@ -269,7 +269,8 @@ A prefix arg makes KEEP-TIME non-nil."
        (error "Opening input file: No such file or directory, %s" url))
     (with-current-buffer buffer
       (setq handle (mm-dissect-buffer t)))
-    (mm-save-part-to-file handle newname)
+    (let ((mm-attachment-file-modes (default-file-modes)))
+      (mm-save-part-to-file handle newname))
     (kill-buffer buffer)
     (mm-destroy-parts handle)))
 (put 'copy-file 'url-file-handlers 'url-copy-file)
index e34f352e11d36a9381e9fbbcadc2bf4e47bd7258..36cc2f32bbcd3be3aba4c89076c6fc71921b897d 100644 (file)
@@ -26,6 +26,7 @@
 ;;; Code:
 
 (require 'cl-lib)
+(require 'puny)
 (eval-when-compile
   (require 'subr-x))
 
@@ -307,8 +308,9 @@ request.")
                      (url-scheme-get-property
                       (url-type url-http-target-url) 'default-port))
                  (format
-                  "Host: %s:%d\r\n" host (url-port url-http-target-url))
-               (format "Host: %s\r\n" host))
+                  "Host: %s:%d\r\n" (puny-encode-domain host)
+                  (url-port url-http-target-url))
+               (format "Host: %s\r\n" (puny-encode-domain host)))
              ;; Who its from
              (if url-personal-mail-address
                  (concat
@@ -1195,17 +1197,20 @@ the end of the document."
   "Retrieve URL via HTTP asynchronously.
 URL must be a parsed URL.  See `url-generic-parse-url' for details.
 
-When retrieval is completed, execute the function CALLBACK, passing it
-an updated value of CBARGS as arguments.  The first element in CBARGS
-should be a plist describing what has happened so far during the
-request, as described in the docstring of `url-retrieve' (if in
-doubt, specify nil).
+When retrieval is completed, execute the function CALLBACK,
+passing it an updated value of CBARGS as arguments.  The first
+element in CBARGS should be a plist describing what has happened
+so far during the request, as described in the docstring of
+`url-retrieve' (if in doubt, specify nil).  The current buffer
+then CALLBACK is executed is the retrieval buffer.
 
 Optional arg RETRY-BUFFER, if non-nil, specifies the buffer of a
 previous `url-http' call, which is being re-attempted.
 
 Optional arg GATEWAY-METHOD specifies the gateway to be used,
-overriding the value of `url-gateway-method'."
+overriding the value of `url-gateway-method'.
+
+The return value of this function is the retrieval buffer."
   (cl-check-type url vector "Need a pre-parsed URL.")
   (let* ((host (url-host (or url-using-proxy url)))
         (port (url-port (or url-using-proxy url)))
index 7a186df474ee0da3c0e2a9eb5ba834049cc80727..65a24a5bbb73ae4749059010898f8509dddce0b6 100644 (file)
@@ -468,7 +468,7 @@ should return it unchanged."
     (and host
         (not (string-match "\\`\\[.*\\]\\'" host))
         (setf (url-host obj)
-              (url-hexify-string host url-host-allowed-chars)))
+               (decode-coding-string (url-host obj) 'utf-8)))
 
     (if path
        (setq path (url-hexify-string path url-path-allowed-chars)))
index e1609f2f470924de95cb173a5f5297cbf3456734..c82b27a1ea213ff09593578368d6bc4ebd25a809 100644 (file)
@@ -66,7 +66,7 @@
 /^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/
 /^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION ""/
 /^#undef PENDING_OUTPUT_COUNT/s/^.*$/#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_ptr - (FILE)->_base)/
-/^#undef VERSION/s/^.*$/#define VERSION "25.0.50"/
+/^#undef VERSION/s/^.*$/#define VERSION "25.1.50"/
 /^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/
 /^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/
 /^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/
index 8357655af3bd82fb9375ae98ae71b54ca7bd192d..f96ebb2aeeb370806f7ec2619db213c8f0a4941a 100644 (file)
@@ -160,12 +160,13 @@ SETTINGS_LIBS = @SETTINGS_LIBS@
 ## gtkutil.o if USE_GTK, else empty.
 GTK_OBJ=@GTK_OBJ@
 
-## gfilenotify.o if HAVE_GFILENOTIFY.
 ## inotify.o if HAVE_INOTIFY.
+## kqueue.o if HAVE_KQUEUE.
+## gfilenotify.o if HAVE_GFILENOTIFY.
 ## w32notify.o if HAVE_W32NOTIFY.
 NOTIFY_OBJ = @NOTIFY_OBJ@
-GFILENOTIFY_CFLAGS = @GFILENOTIFY_CFLAGS@
-GFILENOTIFY_LIBS = @GFILENOTIFY_LIBS@
+NOTIFY_CFLAGS = @NOTIFY_CFLAGS@
+NOTIFY_LIBS = @NOTIFY_LIBS@
 
 ## -ltermcap, or -lncurses, or -lcurses, or "".
 LIBS_TERMCAP=@LIBS_TERMCAP@
@@ -360,7 +361,7 @@ ALL_CFLAGS=-Demacs $(MYCPPFLAGS) -I. -I$(srcdir) \
   $(XRANDR_CFLAGS) $(XINERAMA_CFLAGS) $(XFIXES_CFLAGS) \
   $(SETTINGS_CFLAGS) $(FREETYPE_CFLAGS) $(FONTCONFIG_CFLAGS) \
   $(LIBOTF_CFLAGS) $(M17N_FLT_CFLAGS) $(DEPFLAGS) \
-  $(LIBGNUTLS_CFLAGS) $(GFILENOTIFY_CFLAGS) $(CAIRO_CFLAGS) \
+  $(LIBGNUTLS_CFLAGS) $(NOTIFY_CFLAGS) $(CAIRO_CFLAGS) \
   $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAGS)
 ALL_OBJC_CFLAGS=$(ALL_CFLAGS) $(GNU_OBJC_CFLAGS)
 
@@ -473,7 +474,7 @@ LIBES = $(LIBS) $(W32_LIBS) $(LIBS_GNUSTEP) $(LIBX_BASE) $(LIBIMAGE) \
    $(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \
    $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
    $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) \
-   $(GFILENOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES)
+   $(NOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES)
 
 $(leimdir)/leim-list.el: bootstrap-emacs$(EXEEXT)
        $(MAKE) -C ../leim leim-list.el EMACS="$(bootstrap_exe)"
index 48ff20a11ce4e127167366d2444fd685110c22f1..926aa989e6a429222bed09873388e7c58e7be878 100644 (file)
@@ -1357,6 +1357,10 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
     tzset ();
 #endif /* MSDOS */
 
+#ifdef HAVE_KQUEUE
+  globals_of_kqueue ();
+#endif
+
 #ifdef HAVE_GFILENOTIFY
   globals_of_gfilenotify ();
 #endif
@@ -1532,14 +1536,18 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
 
       syms_of_gnutls ();
 
-#ifdef HAVE_GFILENOTIFY
-      syms_of_gfilenotify ();
-#endif /* HAVE_GFILENOTIFY */
-
 #ifdef HAVE_INOTIFY
       syms_of_inotify ();
 #endif /* HAVE_INOTIFY */
 
+#ifdef HAVE_KQUEUE
+      syms_of_kqueue ();
+#endif /* HAVE_KQUEUE */
+
+#ifdef HAVE_GFILENOTIFY
+      syms_of_gfilenotify ();
+#endif /* HAVE_GFILENOTIFY */
+
 #ifdef HAVE_DBUS
       syms_of_dbusbind ();
 #endif /* HAVE_DBUS */
index d1a80bbad1bd60d297dbfc7e01c63fddb4f5b223..6577ee28cd135029fe904dc4bd5462e7888daf73 100644 (file)
@@ -46,8 +46,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 static int inotifyfd = -1;
 
 /* Assoc list of files being watched.
-   Format:
-   (watch-descriptor . callback)
+   Format: (watch-descriptor name callback)
  */
 static Lisp_Object watch_list;
 
@@ -106,12 +105,14 @@ inotifyevent_to_event (Lisp_Object watch_object, struct inotify_event const *ev)
       name = make_unibyte_string (ev->name, min (len, ev->len));
       name = DECODE_FILE (name);
     }
+  else
+    name = XCAR (XCDR (watch_object));
 
   return list2 (list4 (make_watch_descriptor (ev->wd),
                        mask_to_aspects (ev->mask),
                        name,
                        make_number (ev->cookie)),
-                XCDR (watch_object));
+               Fnth (make_number (2), watch_object));
 }
 
 /* This callback is called when the FD is available for read.  The inotify
@@ -325,7 +326,7 @@ is managed internally and there is no corresponding inotify_init.  Use
       watch_list = Fdelete (watch_object, watch_list);
 
   /* Store watch object in watch list.  */
-  watch_object = Fcons (watch_descriptor, callback);
+  watch_object = list3 (watch_descriptor, encoded_file_name, callback);
   watch_list = Fcons (watch_object, watch_list);
 
   return watch_descriptor;
index 9ebd86b53560dfb367e4ea21657478e07a461909..6fa38aa1328e2c601fcc2881f894c3c996146ceb 100644 (file)
@@ -5947,12 +5947,12 @@ make_lispy_event (struct input_event *event)
       }
 #endif /* HAVE_DBUS */
 
-#if defined HAVE_GFILENOTIFY || defined HAVE_INOTIFY
+#if defined HAVE_INOTIFY || defined HAVE_KQUEUE || defined HAVE_GFILENOTIFY
     case FILE_NOTIFY_EVENT:
       {
         return Fcons (Qfile_notify, event->arg);
       }
-#endif /* defined HAVE_GFILENOTIFY || defined HAVE_INOTIFY */
+#endif /* HAVE_INOTIFY || HAVE_KQUEUE || HAVE_GFILENOTIFY */
 
     case CONFIG_CHANGED_EVENT:
        return list3 (Qconfig_changed_event,
diff --git a/src/kqueue.c b/src/kqueue.c
new file mode 100644 (file)
index 0000000..1830040
--- /dev/null
@@ -0,0 +1,520 @@
+/* Filesystem notifications support with kqueue API.
+   Copyright (C) 2015 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#ifdef HAVE_KQUEUE
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/time.h>
+#include <sys/file.h>
+#include "lisp.h"
+#include "keyboard.h"
+#include "process.h"
+
+\f
+/* File handle for kqueue.  */
+static int kqueuefd = -1;
+
+/* This is a list, elements are (DESCRIPTOR FILE FLAGS CALLBACK [DIRLIST]).  */
+static Lisp_Object watch_list;
+
+/* Generate a list from the directory_files_internal output.
+   Items are (INODE FILE-NAME LAST-MOD LAST-STATUS-MOD SIZE).  */
+Lisp_Object
+kqueue_directory_listing (Lisp_Object directory_files)
+{
+  Lisp_Object dl, result = Qnil;
+
+  for (dl = directory_files; ! NILP (dl); dl = XCDR (dl)) {
+    /* We ignore "." and "..".  */
+    if ((strcmp (".", SSDATA (XCAR (XCAR (dl)))) == 0) ||
+       (strcmp ("..", SSDATA (XCAR (XCAR (dl)))) == 0))
+      continue;
+
+    result = Fcons
+      (list5 (/* inode.  */
+             Fnth (make_number (11), XCAR (dl)),
+             /* filename.  */
+             XCAR (XCAR (dl)),
+             /* last modification time.  */
+             Fnth (make_number (6), XCAR (dl)),
+             /* last status change time.  */
+             Fnth (make_number (7), XCAR (dl)),
+             /* size.  */
+             Fnth (make_number (8), XCAR (dl))),
+       result);
+  }
+  return result;
+}
+
+/* Generate a file notification event.  */
+static void
+kqueue_generate_event
+(Lisp_Object watch_object, Lisp_Object actions,
+ Lisp_Object file, Lisp_Object file1)
+{
+  Lisp_Object flags, action, entry;
+  struct input_event event;
+
+  /* Check, whether all actions shall be monitored.  */
+  flags = Fnth (make_number (2), watch_object);
+  action = actions;
+  do {
+    if (NILP (action))
+      break;
+    entry = XCAR (action);
+    if (NILP (Fmember (entry, flags))) {
+      action = XCDR (action);
+      actions = Fdelq (entry, actions);
+    } else
+      action = XCDR (action);
+  } while (1);
+
+  /* Store it into the input event queue.  */
+  if (! NILP (actions)) {
+    EVENT_INIT (event);
+    event.kind = FILE_NOTIFY_EVENT;
+    event.frame_or_window = Qnil;
+    event.arg = list2 (Fcons (XCAR (watch_object),
+                             Fcons (actions,
+                                    NILP (file1)
+                                    ? Fcons (file, Qnil)
+                                    : list2 (file, file1))),
+                      Fnth (make_number (3), watch_object));
+    kbd_buffer_store_event (&event);
+  }
+}
+
+/* This compares two directory listings in case of a `write' event for
+   a directory.  Generate resulting file notification events.  The old
+   directory listing is retrieved from watch_object, it will be
+   replaced by the new directory listing at the end of this
+   function.  */
+static void
+kqueue_compare_dir_list
+(Lisp_Object watch_object)
+{
+  Lisp_Object dir, pending_dl, deleted_dl;
+  Lisp_Object old_directory_files, old_dl, new_directory_files, new_dl, dl;
+
+  dir = XCAR (XCDR (watch_object));
+  pending_dl = Qnil;
+  deleted_dl = Qnil;
+
+  old_directory_files = Fnth (make_number (4), watch_object);
+  old_dl = kqueue_directory_listing (old_directory_files);
+
+  /* When the directory is not accessible anymore, it has been deleted.  */
+  if (NILP (Ffile_directory_p (dir))) {
+    kqueue_generate_event (watch_object, Fcons (Qdelete, Qnil), dir, Qnil);
+    return;
+  }
+  new_directory_files =
+    directory_files_internal (dir, Qnil, Qnil, Qnil, 1, Qnil);
+  new_dl = kqueue_directory_listing (new_directory_files);
+
+  /* Parse through the old list.  */
+  dl = old_dl;
+  while (1) {
+    Lisp_Object old_entry, new_entry, dl1;
+    if (NILP (dl))
+      break;
+
+    /* Search for an entry with the same inode.  */
+    old_entry = XCAR (dl);
+    new_entry = assq_no_quit (XCAR (old_entry), new_dl);
+    if (! NILP (Fequal (old_entry, new_entry))) {
+      /* Both entries are identical.  Nothing to do.  */
+      new_dl = Fdelq (new_entry, new_dl);
+      goto the_end;
+    }
+
+    /* Both entries have the same inode.  */
+    if (! NILP (new_entry)) {
+      /* Both entries have the same file name.  */
+      if (strcmp (SSDATA (XCAR (XCDR (old_entry))),
+                 SSDATA (XCAR (XCDR (new_entry)))) == 0) {
+       /* Modification time has been changed, the file has been written.  */
+       if (NILP (Fequal (Fnth (make_number (2), old_entry),
+                         Fnth (make_number (2), new_entry))))
+         kqueue_generate_event
+           (watch_object, Fcons (Qwrite, Qnil), XCAR (XCDR (old_entry)), Qnil);
+       /* Status change time has been changed, the file attributes
+          have changed.  */
+         if (NILP (Fequal (Fnth (make_number (3), old_entry),
+                           Fnth (make_number (3), new_entry))))
+         kqueue_generate_event
+           (watch_object, Fcons (Qattrib, Qnil),
+            XCAR (XCDR (old_entry)), Qnil);
+
+      } else {
+       /* The file has been renamed.  */
+       kqueue_generate_event
+         (watch_object, Fcons (Qrename, Qnil),
+          XCAR (XCDR (old_entry)), XCAR (XCDR (new_entry)));
+       deleted_dl = Fcons (new_entry, deleted_dl);
+      }
+      new_dl = Fdelq (new_entry, new_dl);
+      goto the_end;
+    }
+
+    /* Search, whether there is a file with the same name but another
+       inode.  */
+    for (dl1 = new_dl; ! NILP (dl1); dl1 = XCDR (dl1)) {
+      new_entry = XCAR (dl1);
+      if (strcmp (SSDATA (XCAR (XCDR (old_entry))),
+                 SSDATA (XCAR (XCDR (new_entry)))) == 0) {
+       pending_dl = Fcons (new_entry, pending_dl);
+       new_dl = Fdelq (new_entry, new_dl);
+       goto the_end;
+      }
+    }
+
+    /* Check, whether this a pending file.  */
+    new_entry = assq_no_quit (XCAR (old_entry), pending_dl);
+
+    if (NILP (new_entry)) {
+      /* Check, whether this is an already deleted file (by rename).  */
+      for (dl1 = deleted_dl; ! NILP (dl1); dl1 = XCDR (dl1)) {
+       new_entry = XCAR (dl1);
+       if (strcmp (SSDATA (XCAR (XCDR (old_entry))),
+                   SSDATA (XCAR (XCDR (new_entry)))) == 0) {
+         deleted_dl = Fdelq (new_entry, deleted_dl);
+         goto the_end;
+       }
+      }
+      /* The file has been deleted.  */
+      kqueue_generate_event
+       (watch_object, Fcons (Qdelete, Qnil), XCAR (XCDR (old_entry)), Qnil);
+
+    } else {
+      /* The file has been renamed.  */
+      kqueue_generate_event
+       (watch_object, Fcons (Qrename, Qnil),
+        XCAR (XCDR (old_entry)), XCAR (XCDR (new_entry)));
+      pending_dl = Fdelq (new_entry, pending_dl);
+    }
+
+  the_end:
+    dl = XCDR (dl);
+    old_dl = Fdelq (old_entry, old_dl);
+  }
+
+  /* Parse through the resulting new list.  */
+  dl = new_dl;
+  while (1) {
+    Lisp_Object entry;
+    if (NILP (dl))
+      break;
+
+    /* A new file has appeared.  */
+    entry = XCAR (dl);
+    kqueue_generate_event
+      (watch_object, Fcons (Qcreate, Qnil), XCAR (XCDR (entry)), Qnil);
+
+    /* Check size of that file.  */
+    Lisp_Object size = Fnth (make_number (4), entry);
+    if (FLOATP (size) || (XINT (size) > 0))
+      kqueue_generate_event
+       (watch_object, Fcons (Qwrite, Qnil), XCAR (XCDR (entry)), Qnil);
+
+    dl = XCDR (dl);
+    new_dl = Fdelq (entry, new_dl);
+  }
+
+  /* Parse through the resulting pending_dl list.  */
+  dl = pending_dl;
+  while (1) {
+    Lisp_Object entry;
+    if (NILP (dl))
+      break;
+
+    /* A file is still pending.  Assume it was a write.  */
+    entry = XCAR (dl);
+    kqueue_generate_event
+      (watch_object, Fcons (Qwrite, Qnil), XCAR (XCDR (entry)), Qnil);
+
+    dl = XCDR (dl);
+    pending_dl = Fdelq (entry, pending_dl);
+  }
+
+  /* At this point, old_dl, new_dl and pending_dl shall be empty.
+     deleted_dl might not be empty when there was a rename to a
+     nonexisting file.  Let's make a check for this (might be removed
+     once the code is stable).  */
+  if (! NILP (old_dl))
+    report_file_error ("Old list not empty", old_dl);
+  if (! NILP (new_dl))
+    report_file_error ("New list not empty", new_dl);
+  if (! NILP (pending_dl))
+    report_file_error ("Pending events list not empty", pending_dl);
+  //  if (! NILP (deleted_dl))
+  //    report_file_error ("Deleted events list not empty", deleted_dl);
+
+  /* Replace old directory listing with the new one.  */
+  XSETCDR (Fnthcdr (make_number (3), watch_object),
+          Fcons (new_directory_files, Qnil));
+  return;
+}
+
+/* This is the callback function for arriving input on kqueuefd.  It
+   shall create a Lisp event, and put it into the Emacs input queue.  */
+static void
+kqueue_callback (int fd, void *data)
+{
+  for (;;) {
+    struct kevent kev;
+    static const struct timespec nullts = { 0, 0 };
+    Lisp_Object descriptor, watch_object, file, actions;
+
+    /* Read one event.  */
+    int ret = kevent (kqueuefd, NULL, 0, &kev, 1, &nullts);
+    if (ret < 1) {
+      /* All events read.  */
+      return;
+    }
+
+    /* Determine descriptor and file name.  */
+    descriptor = make_number (kev.ident);
+    watch_object = assq_no_quit (descriptor, watch_list);
+    if (CONSP (watch_object))
+      file = XCAR (XCDR (watch_object));
+    else
+      continue;
+
+    /* Determine event actions.  */
+    actions = Qnil;
+    if (kev.fflags & NOTE_DELETE)
+      actions = Fcons (Qdelete, actions);
+    if (kev.fflags & NOTE_WRITE) {
+      /* Check, whether this is a directory event.  */
+      if (NILP (Fnth (make_number (4), watch_object)))
+       actions = Fcons (Qwrite, actions);
+      else
+       kqueue_compare_dir_list (watch_object);
+    }
+    if (kev.fflags & NOTE_EXTEND)
+      actions = Fcons (Qextend, actions);
+    if (kev.fflags & NOTE_ATTRIB)
+      actions = Fcons (Qattrib, actions);
+    if (kev.fflags & NOTE_LINK)
+      actions = Fcons (Qlink, actions);
+    /* It would be useful to know the target of the rename operation.
+       At this point, it is not possible.  Happens only when the upper
+       directory is monitored.  */
+    if (kev.fflags & NOTE_RENAME)
+      actions = Fcons (Qrename, actions);
+
+    /* Create the event.  */
+    if (! NILP (actions))
+      kqueue_generate_event (watch_object, actions, file, Qnil);
+
+    /* Cancel monitor if file or directory is deleted or renamed.  */
+    if (kev.fflags & (NOTE_DELETE | NOTE_RENAME))
+      Fkqueue_rm_watch (descriptor);
+  }
+  return;
+}
+
+DEFUN ("kqueue-add-watch", Fkqueue_add_watch, Skqueue_add_watch, 3, 3, 0,
+       doc: /* Add a watch for filesystem events pertaining to FILE.
+
+This arranges for filesystem events pertaining to FILE to be reported
+to Emacs.  Use `kqueue-rm-watch' to cancel the watch.
+
+Returned value is a descriptor for the added watch.  If the file cannot be
+watched for some reason, this function signals a `file-notify-error' error.
+
+FLAGS is a list of events to be watched for.  It can include the
+following symbols:
+
+  `create' -- FILE was created
+  `delete' -- FILE was deleted
+  `write'  -- FILE has changed
+  `extend' -- FILE was extended
+  `attrib' -- a FILE attribute was changed
+  `link'   -- a FILE's link count was changed
+  `rename' -- FILE was moved to FILE1
+
+When any event happens, Emacs will call the CALLBACK function passing
+it a single argument EVENT, which is of the form
+
+  (DESCRIPTOR ACTIONS FILE [FILE1])
+
+DESCRIPTOR is the same object as the one returned by this function.
+ACTIONS is a list of events.
+
+FILE is the name of the file whose event is being reported.  FILE1
+will be reported only in case of the `rename' event.  This is possible
+only when the upper directory of the renamed file is watched.  */)
+  (Lisp_Object file, Lisp_Object flags, Lisp_Object callback)
+{
+  Lisp_Object watch_object, dir_list;
+  int fd, oflags;
+  u_short fflags = 0;
+  struct kevent kev;
+
+  /* Check parameters.  */
+  CHECK_STRING (file);
+  file = Fdirectory_file_name (Fexpand_file_name (file, Qnil));
+  if (NILP (Ffile_exists_p (file)))
+    report_file_error ("File does not exist", file);
+
+  CHECK_LIST (flags);
+
+  if (! FUNCTIONP (callback))
+    wrong_type_argument (Qinvalid_function, callback);
+
+  if (kqueuefd < 0)
+    {
+      /* Create kqueue descriptor.  */
+      kqueuefd = kqueue ();
+      if (kqueuefd < 0)
+       report_file_notify_error ("File watching is not available", Qnil);
+
+      /* Start monitoring for possible I/O.  */
+      add_read_fd (kqueuefd, kqueue_callback, NULL);
+
+      watch_list = Qnil;
+    }
+
+  /* Open file.  */
+  file = ENCODE_FILE (file);
+  oflags = O_NONBLOCK;
+#if O_EVTONLY
+  oflags |= O_EVTONLY;
+#else
+  oflags |= O_RDONLY;
+#endif
+#if O_SYMLINK
+    oflags |= O_SYMLINK;
+#else
+    oflags |= O_NOFOLLOW;
+#endif
+  fd = emacs_open (SSDATA (file), oflags, 0);
+  if (fd == -1)
+    report_file_error ("File cannot be opened", file);
+
+  /* Assemble filter flags  */
+  if (! NILP (Fmember (Qdelete, flags))) fflags |= NOTE_DELETE;
+  if (! NILP (Fmember (Qwrite, flags)))  fflags |= NOTE_WRITE;
+  if (! NILP (Fmember (Qextend, flags))) fflags |= NOTE_EXTEND;
+  if (! NILP (Fmember (Qattrib, flags))) fflags |= NOTE_ATTRIB;
+  if (! NILP (Fmember (Qlink, flags)))   fflags |= NOTE_LINK;
+  if (! NILP (Fmember (Qrename, flags))) fflags |= NOTE_RENAME;
+
+  /* Register event.  */
+  EV_SET (&kev, fd, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR,
+         fflags, 0, NULL);
+
+  if (kevent (kqueuefd, &kev, 1, NULL, 0, NULL) < 0) {
+    emacs_close (fd);
+    report_file_error ("Cannot watch file", file);
+  }
+
+  /* Store watch object in watch list.  */
+  Lisp_Object watch_descriptor = make_number (fd);
+  if (NILP (Ffile_directory_p (file)))
+    watch_object = list4 (watch_descriptor, file, flags, callback);
+  else {
+    dir_list = directory_files_internal (file, Qnil, Qnil, Qnil, 1, Qnil);
+    watch_object = list5 (watch_descriptor, file, flags, callback, dir_list);
+  }
+  watch_list = Fcons (watch_object, watch_list);
+
+  return watch_descriptor;
+}
+
+DEFUN ("kqueue-rm-watch", Fkqueue_rm_watch, Skqueue_rm_watch, 1, 1, 0,
+       doc: /* Remove an existing WATCH-DESCRIPTOR.
+
+WATCH-DESCRIPTOR should be an object returned by `kqueue-add-watch'.  */)
+     (Lisp_Object watch_descriptor)
+{
+  Lisp_Object watch_object = assq_no_quit (watch_descriptor, watch_list);
+
+  if (! CONSP (watch_object))
+    xsignal2 (Qfile_notify_error, build_string ("Not a watch descriptor"),
+             watch_descriptor);
+
+  eassert (INTEGERP (watch_descriptor));
+  int fd = XINT (watch_descriptor);
+  if ( fd >= 0)
+    emacs_close (fd);
+
+  /* Remove watch descriptor from watch list.  */
+  watch_list = Fdelq (watch_object, watch_list);
+
+  if (NILP (watch_list) && (kqueuefd >= 0)) {
+    delete_read_fd (kqueuefd);
+    emacs_close (kqueuefd);
+    kqueuefd = -1;
+  }
+
+  return Qt;
+}
+
+DEFUN ("kqueue-valid-p", Fkqueue_valid_p, Skqueue_valid_p, 1, 1, 0,
+       doc: /* "Check a watch specified by its WATCH-DESCRIPTOR.
+
+WATCH-DESCRIPTOR should be an object returned by `kqueue-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 `kqueue-rm-watch' also makes it
+invalid.  */)
+     (Lisp_Object watch_descriptor)
+{
+  return NILP (assq_no_quit (watch_descriptor, watch_list)) ? Qnil : Qt;
+}
+
+\f
+void
+globals_of_kqueue (void)
+{
+  watch_list = Qnil;
+}
+
+void
+syms_of_kqueue (void)
+{
+  defsubr (&Skqueue_add_watch);
+  defsubr (&Skqueue_rm_watch);
+  defsubr (&Skqueue_valid_p);
+
+  /* Event types.  */
+  DEFSYM (Qcreate, "create");
+  DEFSYM (Qdelete, "delete");  /* NOTE_DELETE  */
+  DEFSYM (Qwrite, "write");    /* NOTE_WRITE  */
+  DEFSYM (Qextend, "extend");  /* NOTE_EXTEND  */
+  DEFSYM (Qattrib, "attrib");  /* NOTE_ATTRIB  */
+  DEFSYM (Qlink, "link");      /* NOTE_LINK  */
+  DEFSYM (Qrename, "rename");  /* NOTE_RENAME  */
+
+  staticpro (&watch_list);
+
+  Fprovide (intern_c_string ("kqueue"), Qnil);
+}
+
+#endif /* HAVE_KQUEUE  */
+
+/* PROBLEMS
+   * https://bugs.launchpad.net/ubuntu/+source/libkqueue/+bug/1514837
+     prevents tests on Ubuntu.  */
index 995760a50198a07339916b711a9e1b31e2134aea..ff88605fc9f425de55d76cc668d06342f8d8b6bb 100644 (file)
@@ -4313,17 +4313,23 @@ extern void init_font (void);
 extern void syms_of_fontset (void);
 #endif
 
+/* Defined in inotify.c */
+#ifdef HAVE_INOTIFY
+extern void syms_of_inotify (void);
+#endif
+
+/* Defined in kqueue.c */
+#ifdef HAVE_KQUEUE
+extern void globals_of_kqueue (void);
+extern void syms_of_kqueue (void);
+#endif
+
 /* Defined in gfilenotify.c */
 #ifdef HAVE_GFILENOTIFY
 extern void globals_of_gfilenotify (void);
 extern void syms_of_gfilenotify (void);
 #endif
 
-/* Defined in inotify.c */
-#ifdef HAVE_INOTIFY
-extern void syms_of_inotify (void);
-#endif
-
 #ifdef HAVE_W32NOTIFY
 /* Defined on w32notify.c.  */
 extern void syms_of_w32notify (void);
similarity index 76%
rename from test/automated/Makefile.in
rename to test/Makefile.in
index 41f54f8aa69a061b4f32bbfc593d90c4d9cd825a..1e76675ac76207cdd2e1d1c9bdb709c5c4cb3e55 100644 (file)
@@ -37,7 +37,7 @@ SEPCHAR = @SEPCHAR@
 # We never change directory before running Emacs, so a relative file
 # name is fine, and makes life easier.  If we need to change
 # directory, we can use emacs --chdir.
-EMACS = ../../src/emacs
+EMACS = ../src/emacs
 
 EMACS_EXTRAOPT=
 
@@ -87,7 +87,7 @@ WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo $$stat: $@
 ## 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!
-%.log: ${srcdir}/%.el
+%.log: %.el
        @if grep '^;.*no-byte-compile: t' $< > /dev/null; then \
          loadfile=$<; \
        else \
@@ -96,12 +96,18 @@ WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo $$stat: $@
        fi; \
        echo Testing $$loadfile; \
        stat=OK ; \
+       mkdir --parents $(dir $@) ; \
        $(emacs) -l ert -l $$loadfile \
          -f ert-run-tests-batch-and-exit ${WRITE_LOG}
 
-ELFILES = $(sort $(wildcard ${srcdir}/*.el))
-LOGFILES = $(patsubst %.el,%.log,$(notdir ${ELFILES}))
-TESTS = ${LOGFILES:.log=}
+ELFILES = $(shell find ${srcdir} -path "${srcdir}/manual" -prune -o \
+               -path "*resources" -prune -o -name "*el" -print)
+## .elc files may be in a different directory for out of source builds
+ELCFILES = $(patsubst %.el,%.elc, \
+               $(patsubst $(srcdir)%,.%,$(ELFILES)))
+LOGFILES = $(patsubst %.elc,%.log,${ELCFILES})
+LOGSAVEFILES  = $(patsubst %.elc,%.log~,${ELCFILES})
+TESTS = $(subst ${srcdir}/,,$(LOGFILES:.log=))
 
 ## If we have to interrupt a hanging test, preserve the log so we can
 ## see what the problem was.
@@ -110,18 +116,27 @@ TESTS = ${LOGFILES:.log=}
 .PHONY: ${TESTS}
 
 ## The short aliases that always re-run the tests, with no logging.
+## Define an alias both with and without the directory name for ease
+## of use.
 define test_template
 $(1):
-       @test ! -f $(1).log || mv $(1).log $(1).log~
-       @${MAKE} $(1).log WRITE_LOG=
+       @test ! -f ./$(1).log || mv ./$(1).log ./$(1).log~
+       @${MAKE} ./$(1).log WRITE_LOG=
+
+$(notdir $(1)): $(1)
 endef
 
 $(foreach test,${TESTS},$(eval $(call test_template,${test})))
 
+## Include dependencies between test files and the files they test.
+## We do this without the file and eval directly, but then we would
+## have to run Emacs for every make invocation, and it might not be
+## available during clean.
+-include make-test-deps.mk
 
 ## Re-run all the tests every time.
 check:
-       -@for f in *.log; do test ! -f $$f || mv $$f $$f~; done
+       -@for f in $(LOGFILES); do test ! -f $$f || mv $$f $$f~; done
        @${MAKE} check-maybe
 
 ## Only re-run tests whose .log is older than the test.
@@ -132,14 +147,19 @@ check-maybe: ${LOGFILES}
 .PHONY: mostlyclean clean bootstrap-clean distclean maintainer-clean
 
 clean mostlyclean:
-       -rm -f *.log *.log~
+       -rm -f ${LOGFILES} ${LOGSAVEFILES}
+       -rm make-test-deps.mk
 
 bootstrap-clean: clean
-       -rm -f ${srcdir}/*.elc
+       -rm -f ${ELCFILES}
 
 distclean: clean
        rm -f Makefile
 
 maintainer-clean: distclean bootstrap-clean
 
+make-test-deps.mk: $(ELFILES) make-test-deps.emacs-lisp
+       $(EMACS) --batch -l $(srcdir)/make-test-deps.emacs-lisp \
+       --eval "(make-test-deps \"$(srcdir)\")" \
+       2> $@
 # Makefile ends here.
diff --git a/test/file-organisation.org b/test/file-organisation.org
new file mode 100644 (file)
index 0000000..b754000
--- /dev/null
@@ -0,0 +1,54 @@
+#+TITLE: The Location of Emacs-Lisp Tests
+
+
+
+* The Main Emacs Repository
+
+The Emacs repository contains a very large number of Emacs-Lisp files, many of
+which pre-date both formal package support for Emacs and automated unit
+testing.
+
+All paths are relative to the Emacs root directory.
+
+** Source
+
+Lisp files are stored in the ~lisp~ directory or its sub-directories.
+Sub-directories are in many cases themed after packages (~gnus~, ~org~,
+~calc~), related functionality (~net~, ~emacs-lisp~, ~progmodes~) or status
+(~obsolete~).
+
+C source is stored in the ~src~ directory, which is flat.
+
+** Test Files
+
+Automated tests should be stored in the ~test/automated/lisp~ directory. Tests
+should reflect the directory structure of the source tree; so tests for files
+in the ~emacs-lisp~ source directory should reside in the
+~test/lisp/emacs-lisp~ directory.
+
+Tests should normally reside in a file with ~-tests~ added to the name of
+the tested source file; hence ~ert.el~ is tested in ~ert-tests.el~, or
+~pcase.el~ is tested in ~pcase-tests.el~. Exceptionally, tests for a
+single feature may be placed into multiple files of any name which are
+themselves placed in a directory named after the feature with ~-tests~
+appended, such as ~/test/lisp/emacs-lisp/eieio-tests~
+
+Where features of the C source are tested using Emacs-Lisp test files, these
+should reside in ~/test/src~ and be named after the C file.
+
+A few test suites which predate this scheme and do not fit cleanly
+into it are placed in ~/test/lisp/legacy~.
+
+There are also some test materials that cannot be run automatically
+(i.e. via ert). These should be placed in ~/test/manual~
+
+** Resource Files
+
+Resource files for tests (containing test data) should reside in a directory
+named after the feature with a ~-resources~ suffix, and located in the same
+directory as the feature. Hence, the lisp file ~flymake.el~ should have test
+files in ~/test/automated/lisp/progmodes/flymake-tests.el~ should reside in a
+directory called ~/test/automated/lisp/progmodes/flymake-resources~.
+
+No guidance is given for the organisation of resource files inside the
+~-resource~ directory; files can be organised at the author's discretion.
similarity index 73%
rename from test/automated/abbrev-tests.el
rename to test/lisp/abbrev-tests.el
index 6163e0b2c397dd26d354e1f6bf72ed18bd032fe2..37917ec53536911ed07a36f42c727d8c6527f6bc 100644 (file)
@@ -1,4 +1,4 @@
-;;; abbrev-tests.el --- Test suite for abbrevs.
+;;; abbrev-tests.el --- Test suite for abbrevs  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2015 Free Software Foundation, Inc.
 
   (abbrev-table-put ert-test-abbrevs :ert-test "ert-test-value")
   ert-test-abbrevs)
 
+(ert-deftest abbrev-table-p-test ()
+  (should-not (abbrev-table-p 42))
+  (should-not (abbrev-table-p "aoeu"))
+  (should-not (abbrev-table-p '()))
+  (should-not (abbrev-table-p []))
+  ;; Missing :abbrev-table-modiff counter:
+  (should-not (abbrev-table-p (obarray-make)))
+  (let* ((table (obarray-make)))
+    (abbrev-table-put table :abbrev-table-modiff 42)
+    (should (abbrev-table-p table))))
+
+(ert-deftest abbrev-make-abbrev-table-test ()
+  ;; Table without properties:
+  (let ((table (make-abbrev-table)))
+    (should (abbrev-table-p table))
+    (should (= (length table) obarray-default-size)))
+  ;; Table with one property 'foo with value 'bar:
+  (let ((table (make-abbrev-table '(foo bar))))
+    (should (abbrev-table-p table))
+    (should (= (length table) obarray-default-size))
+    (should (eq (abbrev-table-get table 'foo) 'bar))))
+
+(ert-deftest abbrev-table-get-put-test ()
+  (let ((table (make-abbrev-table)))
+    (should-not (abbrev-table-get table 'foo))
+    (should (= (abbrev-table-put table 'foo 42) 42))
+    (should (= (abbrev-table-get table 'foo) 42))
+    (should (eq (abbrev-table-put table 'foo 'bar) 'bar))
+    (should (eq (abbrev-table-get table 'foo) 'bar))))
+
 (ert-deftest copy-abbrev-table-test ()
   (defvar foo-abbrev-table nil)         ; Avoid compiler warning
   (define-abbrev-table 'foo-abbrev-table
     (should (equal t (abbrev-table-empty-p ert-test-abbrevs)))))
 
 (provide 'abbrev-tests)
-
 ;;; abbrev-tests.el ends here
similarity index 99%
rename from test/automated/auto-revert-tests.el
rename to test/lisp/autorevert-tests.el
index e03ed8cb68777cb2a24c3c364d134605df1581ec..043f80de49e85d44b78e5790d78e3d6be4e88bad 100644 (file)
           ;; Strange, that `copy-directory' does not work as expected.
           ;; The following shell command is not portable on all
           ;; platforms, unfortunately.
-          (shell-command (format "%s -f %s/* %s" cp tmpdir2 tmpdir1))
+          (shell-command (format "%s %s/* %s" cp tmpdir2 tmpdir1))
 
           ;; Check, that the buffers have been reverted.
           (dolist (buf (list buf1 buf2))
diff --git a/test/lisp/dired-tests.el b/test/lisp/dired-tests.el
new file mode 100644 (file)
index 0000000..ff6c88f
--- /dev/null
@@ -0,0 +1,35 @@
+;;; dired-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'dired)
+
+
+(ert-deftest dired-autoload ()
+  "Tests to see whether dired-x has been autoloaded"
+  (should
+   (fboundp 'dired-jump))
+  (should
+   (autoloadp
+    (symbol-function
+     'dired-jump))))
+
+(provide 'dired-tests)
+;; dired-tests.el ends here
similarity index 99%
rename from test/automated/eieio-tests.el
rename to test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
index 915532b299cbf282c8859c0344737e78d0965f62..3a181be5071c02cf2fabcefa3b72de6110cd9240 100644 (file)
@@ -895,6 +895,12 @@ Subclasses to override slot attributes.")
 (ert-deftest eieio-test-37-obsolete-name-in-constructor ()
   (should (equal (eieio--testing "toto") '("toto" 2))))
 
+(ert-deftest eieio-autoload ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'eieio--defalias)))
+
+
 (provide 'eieio-tests)
 
 ;;; eieio-tests.el ends here
similarity index 96%
rename from test/automated/package-test.el
rename to test/lisp/emacs-lisp/package-tests.el
index 8401d1879aec4eddc2d232e8b2557a10b40e9e8f..7206084f3246a588ea25ab82fc88c74f80b32dec 100644 (file)
@@ -97,7 +97,7 @@
                                (multi-file (0 1))))
   "`package-desc' used for testing dependencies.")
 
-(defvar package-test-data-dir (expand-file-name "data/package" package-test-file-dir)
+(defvar package-test-data-dir (expand-file-name "package-resources" package-test-file-dir)
   "Base directory of package test files.")
 
 (defvar package-test-fake-contents-file
@@ -190,18 +190,18 @@ Must called from within a `tar-mode' buffer."
 
 (ert-deftest package-test-desc-from-buffer ()
   "Parse an elisp buffer to get a `package-desc' object."
-  (with-package-test (:basedir "data/package" :file "simple-single-1.3.el")
+  (with-package-test (:basedir "package-resources" :file "simple-single-1.3.el")
     (should (equal (package-buffer-info) simple-single-desc)))
-  (with-package-test (:basedir "data/package" :file "simple-depend-1.0.el")
+  (with-package-test (:basedir "package-resources" :file "simple-depend-1.0.el")
     (should (equal (package-buffer-info) simple-depend-desc)))
-  (with-package-test (:basedir "data/package"
+  (with-package-test (:basedir "package-resources"
                                :file "multi-file-0.2.3.tar")
     (tar-mode)
     (should (equal (package-tar-file-info) multi-file-desc))))
 
 (ert-deftest package-test-install-single ()
   "Install a single file without using an archive."
-  (with-package-test (:basedir "data/package" :file "simple-single-1.3.el")
+  (with-package-test (:basedir "package-resources" :file "simple-single-1.3.el")
     (should (package-install-from-buffer))
     (package-initialize)
     (should (package-installed-p 'simple-single))
@@ -283,7 +283,7 @@ Must called from within a `tar-mode' buffer."
 (ert-deftest package-test-install-prioritized ()
   "Install a lower version from a higher-prioritized archive."
   (with-package-test ()
-    (let* ((newer-version (expand-file-name "data/package/newer-versions"
+    (let* ((newer-version (expand-file-name "package-resources/newer-versions"
                                             package-test-file-dir))
            (package-archives `(("older" . ,package-test-data-dir)
                                ("newer" . ,newer-version)))
@@ -299,7 +299,7 @@ Must called from within a `tar-mode' buffer."
 
 (ert-deftest package-test-install-multifile ()
   "Check properties of the installed multi-file package."
-  (with-package-test (:basedir "data/package" :install '(multi-file))
+  (with-package-test (:basedir "package-resources" :install '(multi-file))
     (let ((autoload-file
            (expand-file-name "multi-file-autoloads.el"
                              (expand-file-name
@@ -350,7 +350,7 @@ Must called from within a `tar-mode' buffer."
       (package-menu-execute)
       (should (package-installed-p 'simple-single))
       (let ((package-test-data-dir
-             (expand-file-name "data/package/newer-versions" package-test-file-dir)))
+             (expand-file-name "package-resources/newer-versions" package-test-file-dir)))
         (setq package-archives `(("gnu" . ,package-test-data-dir)))
         (package-menu-refresh)
 
@@ -470,7 +470,7 @@ Must called from within a `tar-mode' buffer."
                     (delete-directory homedir t)))))
   (let* ((keyring (expand-file-name "key.pub" package-test-data-dir))
         (package-test-data-dir
-          (expand-file-name "data/package/signed" package-test-file-dir)))
+          (expand-file-name "package-resources/signed" package-test-file-dir)))
     (with-package-test ()
       (package-initialize)
       (package-import-keyring keyring)
@@ -522,7 +522,7 @@ Must called from within a `tar-mode' buffer."
 
 (ert-deftest package-x-test-upload-buffer ()
   "Test creating an \"archive-contents\" file"
-  (with-package-test (:basedir "data/package"
+  (with-package-test (:basedir "package-resources"
                                :file "simple-single-1.3.el"
                                :upload-base t)
     (package-upload-buffer)
@@ -546,7 +546,7 @@ Must called from within a `tar-mode' buffer."
 
 (ert-deftest package-x-test-upload-new-version ()
   "Test uploading a new version of a package"
-  (with-package-test (:basedir "data/package"
+  (with-package-test (:basedir "package-resources"
                                :file "simple-single-1.3.el"
                                :upload-base t)
     (package-upload-buffer)
@@ -613,6 +613,7 @@ Must called from within a `tar-mode' buffer."
                simple-depend-desc-2)))
     (should
      (equal (package--sort-by-dependence delete-list)
+
             (list simple-depend-desc-2 simple-depend-desc-1 new-pkg-desc
                   multi-file-desc simple-depend-desc simple-single-desc)))
     (should
similarity index 50%
rename from test/automated/file-notify-tests.el
rename to test/lisp/filenotify-tests.el
index 67e929a647728d2f3fbb73633131662d31846182..d6322c22c0ecd7ef166d8970b135a4088f4f8b53 100644 (file)
 (defvar file-notify--test-results nil)
 (defvar file-notify--test-event nil)
 (defvar file-notify--test-events nil)
-(defvar file-notify--test-expected-events nil)
 
 (defun file-notify--test-timeout ()
   "Timeout to wait for arriving events, in seconds."
-  (if (file-remote-p temporary-file-directory) 6 3))
+  (cond
+   ((file-remote-p temporary-file-directory) 6)
+   ((string-equal (file-notify--test-library) "w32notify") 20)
+   ((eq system-type 'cygwin) 10)
+   (t 3)))
 
 (defun file-notify--test-cleanup ()
   "Cleanup after a test."
@@ -89,8 +92,7 @@
         file-notify--test-tmpfile1 nil
         file-notify--test-desc nil
         file-notify--test-results nil
-        file-notify--test-events nil
-        file-notify--test-expected-events nil)
+        file-notify--test-events nil)
   (when file-notify--test-event
     (error "file-notify--test-event should not be set but bound dynamically")))
 
@@ -133,6 +135,18 @@ being the result.")
   ;; Return result.
   (cdr file-notify--test-remote-enabled-checked))
 
+(defun file-notify--test-library ()
+  "The used libray for the test, as string.
+In the remote case, it is the process name which runs on the
+remote host, or nil."
+  (if (null (file-remote-p temporary-file-directory))
+      (symbol-name file-notify--library)
+    (and (consp file-notify--test-remote-enabled-checked)
+        (processp (cdr file-notify--test-remote-enabled-checked))
+        (replace-regexp-in-string
+         "<[[:digit:]]+>\\'" ""
+         (process-name (cdr file-notify--test-remote-enabled-checked))))))
+
 (defmacro file-notify--deftest-remote (test docstring)
   "Define ert `TEST-remote' for remote files."
   (declare (indent 1))
@@ -150,12 +164,7 @@ being the result.")
   "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)))))
+  (message "Library: `%s'" (file-notify--test-library))
   (should
    (setq file-notify--test-desc
          (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
@@ -189,12 +198,13 @@ being the result.")
          (file-notify-add-watch
           temporary-file-directory '(change attribute-change) 'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
-  ;; The file does not need to exist, just the upper directory.
+  (write-region "any text" nil file-notify--test-tmpfile nil 'no-message)
   (should
    (setq file-notify--test-desc
          (file-notify-add-watch
           file-notify--test-tmpfile '(change attribute-change) 'ignore)))
   (file-notify-rm-watch file-notify--test-desc)
+  (delete-file file-notify--test-tmpfile)
 
   ;; Check error handling.
   (should-error (file-notify-add-watch 1 2 3 4)
@@ -235,16 +245,17 @@ is bound somewhere."
   (should
    (or (string-equal (file-notify--event-file-name file-notify--test-event)
                     file-notify--test-tmpfile)
-       (string-equal (directory-file-name
-                     (file-name-directory
-                      (file-notify--event-file-name file-notify--test-event)))
-                    file-notify--test-tmpfile)))
+       (string-equal (file-notify--event-file-name file-notify--test-event)
+                    file-notify--test-tmpfile1)
+       (string-equal (file-notify--event-file-name file-notify--test-event)
+                    temporary-file-directory)))
   ;; Check the second file name if exists.
   (when (eq (nth 1 file-notify--test-event) 'renamed)
     (should
-     (string-equal
-      (file-notify--event-file1-name file-notify--test-event)
-      file-notify--test-tmpfile1))))
+     (or (string-equal (file-notify--event-file1-name file-notify--test-event)
+                      file-notify--test-tmpfile1)
+        (string-equal (file-notify--event-file1-name file-notify--test-event)
+                      temporary-file-directory)))))
 
 (defun file-notify--test-event-handler (event)
   "Run a test over FILE-NOTIFY--TEST-EVENT.
@@ -253,7 +264,7 @@ 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))))
-    ;; Do not add temporary files, this would confuse the checks.
+    ;; Do not add lock files, this would confuse the checks.
     (unless (string-match
             (regexp-quote ".#")
             (file-notify--event-file-name file-notify--test-event))
@@ -277,137 +288,246 @@ TIMEOUT is the maximum time to wait for, in seconds."
 
 (defmacro file-notify--test-with-events (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."
+EVENTS is either a simple list of events, or a list of lists of
+events, which represent different possible results.  Don't wait
+longer than timeout seconds for the events to be delivered."
   (declare (indent 1))
   (let ((outer (make-symbol "outer")))
-    `(let ((,outer file-notify--test-events))
-       (setq file-notify--test-expected-events
-            (append file-notify--test-expected-events ,events))
+    `(let* ((,outer file-notify--test-events)
+            (events (if (consp (car ,events)) ,events (list ,events)))
+            (max-length (apply 'max (mapcar 'length events)))
+            create-lockfiles result)
+       ;; Flush pending events.
+       (file-notify--wait-for-events
+        (file-notify--test-timeout)
+        (input-pending-p))
        (let (file-notify--test-events)
          ,@body
          (file-notify--wait-for-events
-          (file-notify--test-timeout)
-          (= (length ,events) (length file-notify--test-events)))
-         (should (equal ,events (mapcar #'cadr file-notify--test-events)))
+          ;; More events need more time.  Use some fudge factor.
+          (* (ceiling max-length 100) (file-notify--test-timeout))
+          (= max-length (length file-notify--test-events)))
+         ;; One of the possible results shall match.
+         (should
+          (dolist (elt events result)
+            (setq result
+                  (or result
+                      (equal elt (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/change/removal notifications."
   (skip-unless (file-notify--test-local-enabled))
-  ;; Under cygwin there are so bad timings that it doesn't make sense to test.
-  (skip-unless (not (eq system-type 'cygwin)))
-
-  (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
-       file-notify--test-tmpfile1 (file-notify--test-make-temp-name))
 
   (unwind-protect
       (progn
-        ;; Check creation, change and deletion.
-       (setq file-notify--test-desc
-              (file-notify-add-watch
-               file-notify--test-tmpfile
-               '(change) 'file-notify--test-event-handler))
-        (file-notify--test-with-events '(created changed deleted)
+        ;; Check file creation, change and deletion.  It doesn't work
+        ;; for cygwin and kqueue, because we don't use an implicit
+        ;; directory monitor (kqueue), or the timings are too bad (cygwin).
+        (unless (or (eq system-type 'cygwin)
+                   (string-equal (file-notify--test-library) "kqueue"))
+          (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
+          (should
+           (setq file-notify--test-desc
+                 (file-notify-add-watch
+                  file-notify--test-tmpfile
+                  '(change) 'file-notify--test-event-handler)))
+          (file-notify--test-with-events
+              (cond
+               ;; cygwin recognizes only `deleted' and `stopped' events.
+               ((eq system-type 'cygwin)
+                '(deleted stopped))
+               (t '(created changed deleted stopped)))
+            (write-region
+             "another text" nil file-notify--test-tmpfile nil 'no-message)
+            (read-event nil nil 0.1)
+            (delete-file file-notify--test-tmpfile))
+          ;; `file-notify-rm-watch' fires the `stopped' event.  Suppress it.
+          (let (file-notify--test-events)
+            (file-notify-rm-watch file-notify--test-desc)))
+
+        ;; Check file change and deletion.
+       (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
+        (write-region "any text" nil file-notify--test-tmpfile nil 'no-message)
+       (should
+        (setq file-notify--test-desc
+              (file-notify-add-watch
+               file-notify--test-tmpfile
+               '(change) 'file-notify--test-event-handler)))
+        (file-notify--test-with-events
+           (cond
+            ;; cygwin recognizes only `deleted' and `stopped' events.
+            ((eq system-type 'cygwin)
+             '(deleted stopped))
+             ;; inotify and kqueue raise just one `changed' event.
+             ((or (string-equal "inotify" (file-notify--test-library))
+                  (string-equal "kqueue" (file-notify--test-library)))
+             '(changed deleted stopped))
+             ;; gfilenotify raises one or two `changed' events
+             ;; randomly, no chance to test.  So we accept both cases.
+             ((string-equal "gfilenotify" (file-notify--test-library))
+              '((changed deleted stopped)
+                (changed changed deleted stopped)))
+            (t '(changed changed deleted stopped)))
+          (read-event nil nil 0.1)
           (write-region
-           "any text" nil file-notify--test-tmpfile nil 'no-message)
+           "another text" nil file-notify--test-tmpfile nil 'no-message)
+          (read-event nil nil 0.1)
           (delete-file file-notify--test-tmpfile))
        ;; `file-notify-rm-watch' fires the `stopped' event.  Suppress it.
        (let (file-notify--test-events)
          (file-notify-rm-watch file-notify--test-desc))
 
-        ;; Check creation, change and deletion.  There must be a
-        ;; `stopped' event when deleting the directory.  It doesn't
-        ;; work for w32notify.
-        (unless (eq file-notify--library 'w32notify)
-         (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))
+        ;; Check file creation, change and deletion when watching a
+        ;; directory.  There must be a `stopped' event when deleting
+        ;; the directory.
+       (let ((temporary-file-directory
+              (make-temp-file "file-notify-test-parent" t)))
+         (should
+          (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
+                file-notify--test-desc
+                (file-notify-add-watch
+                 temporary-file-directory
+                 '(change) 'file-notify--test-event-handler)))
          (file-notify--test-with-events
-             ;; There are two `deleted' events, for the file and for
-             ;; the directory.
-             '(created changed deleted deleted stopped)
+             (cond
+              ;; w32notify does raise a `stopped' event when a
+              ;; watched directory is deleted.
+              ((string-equal (file-notify--test-library) "w32notify")
+               '(created changed deleted))
+              ;; cygwin recognizes only `deleted' and `stopped' events.
+              ((eq system-type 'cygwin)
+               '(deleted stopped))
+              ;; There are two `deleted' events, for the file and for
+              ;; the directory.  Except for kqueue.
+              ((string-equal (file-notify--test-library) "kqueue")
+               '(created changed deleted stopped))
+              (t '(created changed deleted deleted stopped)))
+           (read-event nil nil 0.1)
            (write-region
-            "any text" nil (expand-file-name "foo" file-notify--test-tmpfile)
-            nil 'no-message)
-           (delete-directory file-notify--test-tmpfile 'recursive))
+            "any text" nil file-notify--test-tmpfile nil 'no-message)
+           (read-event nil nil 0.1)
+           (delete-directory temporary-file-directory 'recursive))
          ;; `file-notify-rm-watch' fires the `stopped' event.  Suppress it.
          (let (file-notify--test-events)
            (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)
-        (file-notify--test-with-events
-            ;; 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' fires the `stopped' event.  Suppress it.
-       (let (file-notify--test-events)
-         (file-notify-rm-watch file-notify--test-desc))
+        ;; Check copy of files inside a directory.
+       (let ((temporary-file-directory
+              (make-temp-file "file-notify-test-parent" t)))
+         (should
+          (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
+                 temporary-file-directory
+                 '(change) 'file-notify--test-event-handler)))
+         (file-notify--test-with-events
+             (cond
+              ;; w32notify does not distinguish between `changed' and
+              ;; `attribute-changed'.
+              ((string-equal (file-notify--test-library) "w32notify")
+               '(created changed created changed changed changed changed
+                 deleted deleted))
+              ;; cygwin recognizes only `deleted' and `stopped' events.
+              ((eq system-type 'cygwin)
+               '(deleted stopped))
+              ;; There are three `deleted' events, for two files and
+              ;; for the directory.  Except for kqueue.
+              ((string-equal (file-notify--test-library) "kqueue")
+               '(created changed created changed deleted stopped))
+              (t '(created changed created changed
+                   deleted deleted deleted stopped)))
+           (read-event nil nil 0.1)
+           (write-region
+            "any text" nil file-notify--test-tmpfile nil 'no-message)
+           (read-event nil nil 0.1)
+           (copy-file file-notify--test-tmpfile file-notify--test-tmpfile1)
+           ;; The next two events shall not be visible.
+           (read-event nil nil 0.1)
+           (set-file-modes file-notify--test-tmpfile 000)
+           (read-event nil nil 0.1)
+           (set-file-times file-notify--test-tmpfile '(0 0))
+           (read-event nil nil 0.1)
+           (delete-directory temporary-file-directory 'recursive))
+         ;; `file-notify-rm-watch' fires the `stopped' event.  Suppress it.
+         (let (file-notify--test-events)
+           (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 '(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' fires the `stopped' event.  Suppress it.
-       (let (file-notify--test-events)
-         (file-notify-rm-watch file-notify--test-desc))
+        ;; Check rename of files inside a directory.
+       (let ((temporary-file-directory
+              (make-temp-file "file-notify-test-parent" t)))
+         (should
+          (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
+                 temporary-file-directory
+                 '(change) 'file-notify--test-event-handler)))
+         (file-notify--test-with-events
+             (cond
+              ;; w32notify does not distinguish between `changed' and
+              ;; `attribute-changed'.
+              ((string-equal (file-notify--test-library) "w32notify")
+               '(created changed renamed deleted))
+              ;; cygwin recognizes only `deleted' and `stopped' events.
+              ((eq system-type 'cygwin)
+               '(deleted stopped))
+              ;; There are two `deleted' events, for the file and for
+              ;; the directory.  Except for kqueue.
+              ((string-equal (file-notify--test-library) "kqueue")
+               '(created changed renamed deleted stopped))
+              (t '(created changed renamed deleted deleted stopped)))
+           (read-event nil nil 0.1)
+           (write-region
+            "any text" nil file-notify--test-tmpfile nil 'no-message)
+           (read-event nil nil 0.1)
+           (rename-file file-notify--test-tmpfile file-notify--test-tmpfile1)
+           ;; After the rename, we won't get events anymore.
+           (read-event nil nil 0.1)
+           (delete-directory temporary-file-directory 'recursive))
+         ;; `file-notify-rm-watch' fires the `stopped' event.  Suppress it.
+         (let (file-notify--test-events)
+           (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
-              (if (file-remote-p temporary-file-directory)
-                  ;; In the remote case, `write-region' raises also an
-                  ;; `attribute-changed' event.
-                  '(attribute-changed attribute-changed attribute-changed)
-                '(attribute-changed attribute-changed))
-            ;; We must use short delays between the operations.
-            ;; Otherwise, not all events arrive us in the remote case.
-            (write-region
-             "any text" nil file-notify--test-tmpfile nil 'no-message)
-            (read-event nil nil 0.1)
-            (set-file-modes file-notify--test-tmpfile 000)
-            (read-event nil nil 0.1)
-            (set-file-times file-notify--test-tmpfile '(0 0))
-            (read-event nil nil 0.1)
-            (delete-file file-notify--test-tmpfile))
+        ;; Check attribute change.  Does not work for cygwin.
+       (unless (eq system-type 'cygwin)
+         (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
+         (write-region
+          "any text" nil file-notify--test-tmpfile nil 'no-message)
+         (should
+          (setq file-notify--test-desc
+                (file-notify-add-watch
+                 file-notify--test-tmpfile
+                 '(attribute-change) 'file-notify--test-event-handler)))
+         (file-notify--test-with-events
+             (cond
+              ;; w32notify does not distinguish between `changed' and
+              ;; `attribute-changed'.
+              ((string-equal (file-notify--test-library) "w32notify")
+               '(changed changed changed changed))
+              ;; For kqueue and in the remote case, `write-region'
+              ;; raises also an `attribute-changed' event.
+              ((or (string-equal (file-notify--test-library) "kqueue")
+                   (file-remote-p temporary-file-directory))
+               '(attribute-changed attribute-changed attribute-changed))
+              (t '(attribute-changed attribute-changed)))
+           (read-event nil nil 0.1)
+           (write-region
+            "any text" nil file-notify--test-tmpfile nil 'no-message)
+           (read-event nil nil 0.1)
+           (set-file-modes file-notify--test-tmpfile 000)
+           (read-event nil nil 0.1)
+           (set-file-times file-notify--test-tmpfile '(0 0))
+           (read-event nil nil 0.1)
+           (delete-file file-notify--test-tmpfile))
          ;; `file-notify-rm-watch' fires the `stopped' event.  Suppress it.
          (let (file-notify--test-events)
            (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)
-                      file-notify--test-expected-events))
         (should file-notify--test-results)
         (dolist (result file-notify--test-results)
           (when (ert-test-failed-p result)
@@ -475,28 +595,31 @@ Don't wait longer than timeout seconds for the events to be delivered."
            (should (string-match "another text" (buffer-string)))
 
             ;; Stop file notification.  Autorevert shall still work via polling.
-           (file-notify-rm-watch auto-revert-notify-watch-descriptor)
-            (file-notify--wait-for-events
-             timeout (null auto-revert-use-notify))
-           (should-not auto-revert-use-notify)
-           (should-not auto-revert-notify-watch-descriptor)
-
-           ;; Modify file.  We wait for two seconds, in order to have
-           ;; another timestamp.  One second seems to be too short.
-            (with-current-buffer (get-buffer-create "*Messages*")
-              (narrow-to-region (point-max) (point-max)))
-           (sleep-for 2)
-            (write-region
-             "foo bla" nil file-notify--test-tmpfile nil 'no-message)
-
-           ;; Check, that the buffer has been reverted.
-           (with-current-buffer (get-buffer-create "*Messages*")
+           ;; It doesn't work for `w32notify'.
+           (unless (string-equal (file-notify--test-library) "w32notify")
+             (file-notify-rm-watch auto-revert-notify-watch-descriptor)
              (file-notify--wait-for-events
-              timeout
-              (string-match
-                (format-message "Reverting buffer `%s'." (buffer-name buf))
-                (buffer-string))))
-           (should (string-match "foo bla" (buffer-string)))))
+              timeout (null auto-revert-use-notify))
+             (should-not auto-revert-use-notify)
+             (should-not auto-revert-notify-watch-descriptor)
+
+             ;; Modify file.  We wait for two seconds, in order to
+             ;; have another timestamp.  One second seems to be too
+             ;; short.
+             (with-current-buffer (get-buffer-create "*Messages*")
+               (narrow-to-region (point-max) (point-max)))
+             (sleep-for 2)
+             (write-region
+              "foo bla" nil file-notify--test-tmpfile nil 'no-message)
+
+             ;; Check, that the buffer has been reverted.
+             (with-current-buffer (get-buffer-create "*Messages*")
+               (file-notify--wait-for-events
+                timeout
+                (string-match
+                 (format-message "Reverting buffer `%s'." (buffer-name buf))
+                 (buffer-string))))
+             (should (string-match "foo bla" (buffer-string))))))
 
       ;; Cleanup.
       (with-current-buffer "*Messages*" (widen))
@@ -509,51 +632,94 @@ Don't wait longer than timeout seconds for the events to be delivered."
 (ert-deftest file-notify-test04-file-validity ()
   "Check `file-notify-valid-p' for files."
   (skip-unless (file-notify--test-local-enabled))
-  ;; Under cygwin there are so bad timings that it doesn't make sense to test.
-  (skip-unless (not (eq system-type 'cygwin)))
 
   (unwind-protect
       (progn
-        (setq file-notify--test-tmpfile (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 '(created changed deleted)
+        (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
+       (write-region "any text" nil file-notify--test-tmpfile nil 'no-message)
+       (should
+        (setq file-notify--test-desc
+              (file-notify-add-watch
+               file-notify--test-tmpfile
+               '(change) #'file-notify--test-event-handler)))
+        (should (file-notify-valid-p file-notify--test-desc))
+       ;; After calling `file-notify-rm-watch', the descriptor is not
+       ;; valid anymore.
+        (file-notify-rm-watch file-notify--test-desc)
+        (should-not (file-notify-valid-p file-notify--test-desc))
+       (delete-file file-notify--test-tmpfile))
+
+    ;; Cleanup.
+    (file-notify--test-cleanup))
+
+  (unwind-protect
+      (progn
+        (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
+       (write-region "any text" nil file-notify--test-tmpfile nil 'no-message)
+       (should
+        (setq file-notify--test-desc
+              (file-notify-add-watch
+               file-notify--test-tmpfile
+               '(change) #'file-notify--test-event-handler)))
+        (file-notify--test-with-events
+            (cond
+             ;; cygwin recognizes only `deleted' and `stopped' events.
+            ((eq system-type 'cygwin)
+             '(deleted stopped))
+             ;; inotify and kqueue raise just one `changed' event.
+             ((or (string-equal "inotify" (file-notify--test-library))
+                  (string-equal "kqueue" (file-notify--test-library)))
+             '(changed deleted stopped))
+             ;; gfilenotify raises one or two `changed' events
+             ;; randomly, no chance to test.  So we accept both cases.
+             ((string-equal "gfilenotify" (file-notify--test-library))
+              '((changed deleted stopped)
+                (changed changed deleted stopped)))
+            (t '(changed changed deleted stopped)))
           (should (file-notify-valid-p file-notify--test-desc))
+         (read-event nil nil 0.1)
           (write-region
-           "any text" nil file-notify--test-tmpfile nil 'no-message)
+           "another text" nil file-notify--test-tmpfile nil 'no-message)
+         (read-event nil nil 0.1)
          (delete-file file-notify--test-tmpfile))
-       ;; After deleting the file, the descriptor is still valid.
-        (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)))
+       ;; After deleting the file, the descriptor is not valid anymore.
+        (should-not (file-notify-valid-p file-notify--test-desc))
+        (file-notify-rm-watch 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))
-      (unless (eq file-notify--library 'w32notify)
-        (let ((temporary-file-directory
+      ;; w32notify does not send a `stopped' event when deleting a
+      ;; directory.  The test does not work, therefore.
+      (unless (string-equal (file-notify--test-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)
-                file-notify--test-desc
-                (file-notify-add-watch
-                 file-notify--test-tmpfile
-                 '(change) #'file-notify--test-event-handler))
-          (file-notify--test-with-events '(created changed deleted stopped)
-            (should (file-notify-valid-p file-notify--test-desc))
-            (write-region
-             "any text" nil file-notify--test-tmpfile nil 'no-message)
+         (should
+          (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
+                file-notify--test-desc
+                (file-notify-add-watch
+                 temporary-file-directory
+                 '(change) #'file-notify--test-event-handler)))
+         (file-notify--test-with-events
+             (cond
+              ;; cygwin recognizes only `deleted' and `stopped' events.
+              ((eq system-type 'cygwin)
+               '(deleted stopped))
+              ;; There are two `deleted' events, for the file and for
+              ;; the directory.  Except for kqueue.
+              ((string-equal (file-notify--test-library) "kqueue")
+               '(created changed deleted stopped))
+              (t '(created changed deleted deleted stopped)))
+           (should (file-notify-valid-p file-notify--test-desc))
+           (read-event nil nil 0.1)
+           (write-region
+            "any text" nil file-notify--test-tmpfile nil 'no-message)
+           (read-event nil nil 0.1)
            (delete-directory temporary-file-directory t))
-          ;; After deleting the parent directory, the descriptor must
-          ;; not be valid anymore.
-          (should-not (file-notify-valid-p file-notify--test-desc))))
+         ;; After deleting the parent directory, the descriptor must
+         ;; not be valid anymore.
+         (should-not (file-notify-valid-p file-notify--test-desc))))
 
     ;; Cleanup.
     (file-notify--test-cleanup)))
@@ -570,10 +736,11 @@ Don't wait longer than timeout seconds for the events to be delivered."
         (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
+        (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.
@@ -589,20 +756,22 @@ Don't wait longer than timeout seconds for the events to be delivered."
   (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))
+      (unless (and noninteractive
+                  (string-equal (file-notify--test-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
+        (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)
+        (file-notify--test-timeout)
         (not (file-notify-valid-p file-notify--test-desc)))
         (should-not (file-notify-valid-p file-notify--test-desc)))
 
@@ -612,6 +781,61 @@ Don't wait longer than timeout seconds for the events to be delivered."
 (file-notify--deftest-remote file-notify-test05-dir-validity
   "Check `file-notify-valid-p' via file notification for remote directories.")
 
+(ert-deftest file-notify-test06-many-events ()
+  "Check that events are not dropped."
+  (skip-unless (file-notify--test-local-enabled))
+  ;; Under cygwin events arrive in random order.  Impossible to define a test.
+  (skip-unless (not (eq system-type 'cygwin)))
+
+  (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
+  (make-directory file-notify--test-tmpfile)
+  (should
+   (setq file-notify--test-desc
+        (file-notify-add-watch
+         file-notify--test-tmpfile
+         '(change) 'file-notify--test-event-handler)))
+  (unwind-protect
+      (let ((n 1000)
+            source-file-list target-file-list
+            (default-directory file-notify--test-tmpfile))
+        (dotimes (i n)
+         ;; It matters which direction we rename, at least for
+         ;; kqueue.  This backend parses directories in alphabetic
+         ;; order (x%d before y%d).  So we rename both directions.
+         (if (zerop (mod i 2))
+             (progn
+               (push (expand-file-name (format "x%d" i)) source-file-list)
+               (push (expand-file-name (format "y%d" i)) target-file-list))
+           (push (expand-file-name (format "y%d" i)) source-file-list)
+           (push (expand-file-name (format "x%d" i)) target-file-list)))
+        (file-notify--test-with-events (make-list (+ n n) 'created)
+          (let ((source-file-list source-file-list)
+                (target-file-list target-file-list))
+            (while (and source-file-list target-file-list)
+              (read-event nil nil 0.1)
+              (write-region "" nil (pop source-file-list) nil 'no-message)
+              (read-event nil nil 0.1)
+              (write-region "" nil (pop target-file-list) nil 'no-message))))
+        (file-notify--test-with-events
+           (cond
+            ;; w32notify fires both `deleted' and `renamed' events.
+            ((string-equal (file-notify--test-library) "w32notify")
+             (let (r)
+               (dotimes (_i n r)
+                 (setq r (append '(deleted renamed) r)))))
+            (t (make-list n 'renamed)))
+          (let ((source-file-list source-file-list)
+                (target-file-list target-file-list))
+            (while (and source-file-list target-file-list)
+              (rename-file (pop source-file-list) (pop target-file-list) t))))
+        (file-notify--test-with-events (make-list n 'deleted)
+          (dolist (file target-file-list)
+            (delete-file file))))
+    (file-notify--test-cleanup)))
+
+(file-notify--deftest-remote file-notify-test06-many-events
+   "Check that events are not dropped for remote directories.")
+
 (defun file-notify-test-all (&optional interactive)
   "Run all tests for \\[file-notify]."
   (interactive "p")
@@ -622,7 +846,7 @@ Don't wait longer than timeout seconds for the events to be delivered."
 ;; TODO:
 
 ;; * For w32notify, no stopped events arrive when a directory is removed.
-;; * Try to handle arriving events under cygwin reliably.
+;; * Check, why cygwin recognizes only `deleted' and `stopped' events.
 
 (provide 'file-notify-tests)
 ;;; file-notify-tests.el ends here
diff --git a/test/lisp/htmlfontify-tests.el b/test/lisp/htmlfontify-tests.el
new file mode 100644 (file)
index 0000000..a5a92fa
--- /dev/null
@@ -0,0 +1,34 @@
+;;; htmlfontify-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'htmlfontify)
+
+(ert-deftest htmlfontify-autoload ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'htmlfontify-load-rgb-file))
+  (should
+   (autoloadp
+    (symbol-function
+     'htmlfontify-load-rgb-file))))
+
+(provide 'htmlfontify-tests)
+;; htmlfontify-tests.el ends here
diff --git a/test/lisp/ibuffer-tests.el b/test/lisp/ibuffer-tests.el
new file mode 100644 (file)
index 0000000..c813e71
--- /dev/null
@@ -0,0 +1,34 @@
+;;; ibuffer-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'ibuffer)
+
+(ert-deftest ibuffer-autoload ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'ibuffer-mark-unsaved-buffers))
+  (should
+   (autoloadp
+    (symbol-function
+     'ibuffer-mark-unsaved-buffers))))
+
+(provide 'ibuffer-tests)
+;; ibuffer-tests.el ends here
diff --git a/test/lisp/mail/rmail-tests.el b/test/lisp/mail/rmail-tests.el
new file mode 100644 (file)
index 0000000..ed481d0
--- /dev/null
@@ -0,0 +1,35 @@
+;;; rmail-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'rmail)
+
+
+(ert-deftest rmail-autoload ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'rmail-edit-current-message))
+  (should
+   (autoloadp
+    (symbol-function
+     'rmail-edit-current-message))))
+
+(provide 'rmail-tests)
+;; rmail-tests.el ends here
similarity index 95%
rename from test/automated/elisp-mode-tests.el
rename to test/lisp/progmodes/elisp-mode-tests.el
index b44e549e8845605d68561dc59745606f1a815e41..2d0452f69d787508c5bbfd9b73130544b3286bfb 100644 (file)
@@ -244,7 +244,7 @@ to (xref-elisp-test-descr-to-target xref)."
     (xref-make "(cl-defstruct (xref-elisp-location (:constructor xref-make-elisp-location)))"
                (xref-make-elisp-location
                 'xref-elisp-location 'define-type
-                (expand-file-name "../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
+                (expand-file-name "../../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
     ;; It's not worth adding another special case to `xref-elisp-test-descr-to-target' for this
     "(cl-defstruct (xref-elisp-location")
    ))
@@ -255,11 +255,11 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(defalias Buffer-menu-sort)"
              (xref-make-elisp-location
               'Buffer-menu-sort 'defalias
-              (expand-file-name "../../lisp/buff-menu.elc" emacs-test-dir)))
+              (expand-file-name "../../../lisp/buff-menu.elc" emacs-test-dir)))
    (xref-make "(defun tabulated-list-sort)"
              (xref-make-elisp-location
               'tabulated-list-sort nil
-              (expand-file-name "../../lisp/emacs-lisp/tabulated-list.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/emacs-lisp/tabulated-list.el" emacs-test-dir)))
    ))
 
 ;; FIXME: defconst
@@ -406,27 +406,27 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(cl-defgeneric xref-location-marker)"
              (xref-make-elisp-location
               'xref-location-marker 'cl-defgeneric
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-elisp-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-elisp-location) 'cl-defmethod
-              (expand-file-name "../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-file-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-file-location) 'cl-defmethod
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-buffer-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-buffer-location) 'cl-defmethod
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-bogus-location)))"
              (xref-make-elisp-location
               '(xref-location-marker xref-bogus-location) 'cl-defmethod
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
    (xref-make "(cl-defmethod xref-location-marker ((l xref-etags-location)))"
               (xref-make-elisp-location
                '(xref-location-marker xref-etags-location) 'cl-defmethod
-               (expand-file-name "../../lisp/progmodes/etags.el" emacs-test-dir)))
+               (expand-file-name "../../../lisp/progmodes/etags.el" emacs-test-dir)))
    ))
 
 (xref-elisp-deftest find-defs-defgeneric-eval
@@ -528,7 +528,7 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(defun xref-find-definitions)"
              (xref-make-elisp-location
               'xref-find-definitions nil
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))))
 
 (xref-elisp-deftest find-defs-defun-eval
   (elisp--xref-find-definitions (eval '(defun stephe-leake-defun ())))
@@ -561,7 +561,7 @@ to (xref-elisp-test-descr-to-target xref)."
     (xref-make "(defun abbrev-mode)"
                (xref-make-elisp-location
                 'abbrev-mode nil
-                (expand-file-name "../../lisp/abbrev.el" emacs-test-dir)))
+                (expand-file-name "../../../lisp/abbrev.el" emacs-test-dir)))
     "(define-minor-mode abbrev-mode"))
   )
 
@@ -582,7 +582,7 @@ to (xref-elisp-test-descr-to-target xref)."
     (xref-make "(defun compilation-minor-mode)"
                (xref-make-elisp-location
                 'compilation-minor-mode nil
-                (expand-file-name "../../lisp/progmodes/compile.el" emacs-test-dir)))
+                (expand-file-name "../../../lisp/progmodes/compile.el" emacs-test-dir)))
     "(define-minor-mode compilation-minor-mode")
    ))
 
@@ -592,7 +592,7 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(defvar xref--marker-ring)"
              (xref-make-elisp-location
               'xref--marker-ring 'defvar
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
     ))
 
 (xref-elisp-deftest find-defs-defvar-c
@@ -615,11 +615,11 @@ to (xref-elisp-test-descr-to-target xref)."
    (xref-make "(defvar font-lock-keyword-face)"
              (xref-make-elisp-location
               'font-lock-keyword-face 'defvar
-              (expand-file-name "../../lisp/font-lock.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/font-lock.el" emacs-test-dir)))
    (xref-make "(defface font-lock-keyword-face)"
              (xref-make-elisp-location
               'font-lock-keyword-face 'defface
-              (expand-file-name "../../lisp/font-lock.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/font-lock.el" emacs-test-dir)))
    ))
 
 (xref-elisp-deftest find-defs-face-eval
@@ -633,7 +633,7 @@ to (xref-elisp-test-descr-to-target xref)."
     (xref-make "(feature xref)"
              (xref-make-elisp-location
               'xref 'feature
-              (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
+              (expand-file-name "../../../lisp/progmodes/xref.el" emacs-test-dir)))
     ";;; Code:")
    ))
 
similarity index 97%
rename from test/automated/flymake-tests.el
rename to test/lisp/progmodes/flymake-tests.el
index 11231bc3f7a2e03e80f55ecf73de0da56bbfeb83..1d8c12c065501e862bcb2f93dfd7e6ca7096f8bc 100644 (file)
@@ -26,7 +26,7 @@
 (require 'flymake)
 
 (defvar flymake-tests-data-directory
-  (expand-file-name "data/flymake" (getenv "EMACS_TEST_DIRECTORY"))
+  (expand-file-name "lisp/progmodes/flymake-resources" (getenv "EMACS_TEST_DIRECTORY"))
   "Directory containing flymake test data.")
 
 \f
diff --git a/test/lisp/ps-print-tests.el b/test/lisp/ps-print-tests.el
new file mode 100644 (file)
index 0000000..67c3fbb
--- /dev/null
@@ -0,0 +1,36 @@
+;;; ps-print-tests.el --- Test suite for ps-print.el  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Phillip Lord <phillip.lord@russet.org.uk>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+(require 'ps-print)
+(require 'ert)
+
+;;; Autoload tests
+(ert-deftest ps-mule-autoload ()
+  "Tests to see whether ps-mule has been autoloaded"
+  (should
+   (fboundp 'ps-mule-initialize))
+  (should
+   (autoloadp
+    (symbol-function
+     'ps-mule-initialize))))
similarity index 96%
rename from test/automated/reftex-tests.el
rename to test/lisp/textmodes/reftex-tests.el
index 962e39ff38ed071d257a3107072abd7d0901450d..a7af58f74c091058a3b938406398c9eec0ea8441 100644 (file)
     (should (string= (reftex-format-citation entry "%l:%A:%y:%t %j %P %a")
                      "Foo13:Jane Roe:2013:Some Article Some Journal 1 Jane Roe, John Doe \\& Jane Taxpayer"))))
 
+
+;;; Autoload tests
+
+;; Test to check whether reftex autoloading mechanisms are working
+;; correctly.
+(ert-deftest reftex-autoload-auc ()
+  "Tests to see whether reftex-auc has been autoloaded"
+  (should
+   (fboundp 'reftex-arg-label))
+  (should
+   (autoloadp
+    (symbol-function
+     'reftex-arg-label))))
+
+
 (provide 'reftex-tests)
 ;;; reftex-tests.el ends here.
diff --git a/test/lisp/url/url-parse-tests.el b/test/lisp/url/url-parse-tests.el
new file mode 100644 (file)
index 0000000..154e091
--- /dev/null
@@ -0,0 +1,167 @@
+;;; url-parse-tests.el --- Test suite for URI/URL parsing.
+
+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
+
+;; Author: Alain Schneble <a.s@realize.ch>
+;; Version: 1.0
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Test cases covering generic URI syntax as described in RFC3986,
+;; section 3. Syntax Components and 4. Usage. See also appendix
+;; A. Collected ABNF for URI, as the example given here are all
+;; productions of this grammar.
+
+;; Each tests parses a given URI string - whether relative or absolute -
+;; using `url-generic-parse-url' and compares the constructed
+;; URL-struct (Actual) against a manually `url-parse-make-urlobj'-
+;; constructed URL-struct (Expected).
+
+;;; Code:
+
+(require 'url-parse)
+(require 'ert)
+
+(ert-deftest url-generic-parse-url/generic-uri-examples ()
+  "RFC 3986, section 1.1.2. Examples / Example illustrating several URI schemes and variations in their common syntax components"
+  (should (equal (url-generic-parse-url "ftp://ftp.is.co.za/rfc/rfc1808.txt") (url-parse-make-urlobj "ftp" nil nil "ftp.is.co.za" nil "/rfc/rfc1808.txt" nil nil t)))
+  (should (equal (url-generic-parse-url "http://www.ietf.org/rfc/rfc2396.txt") (url-parse-make-urlobj "http" nil nil "www.ietf.org" nil "/rfc/rfc2396.txt" nil nil t)))
+  (should (equal (url-generic-parse-url "ldap://[2001:db8::7]/c=GB?objectClass?one") (url-parse-make-urlobj "ldap" nil nil "[2001:db8::7]" nil "/c=GB?objectClass?one" nil nil t)))
+  (should (equal (url-generic-parse-url "mailto:John.Doe@example.com") (url-parse-make-urlobj "mailto" nil nil nil nil "John.Doe@example.com" nil nil nil)))
+  (should (equal (url-generic-parse-url "news:comp.infosystems.www.servers.unix") (url-parse-make-urlobj "news" nil nil nil nil "comp.infosystems.www.servers.unix" nil nil nil)))
+  (should (equal (url-generic-parse-url "tel:+1-816-555-1212") (url-parse-make-urlobj "tel" nil nil nil nil "+1-816-555-1212" nil nil nil)))
+  (should (equal (url-generic-parse-url "telnet://192.0.2.16:80/") (url-parse-make-urlobj "telnet" nil nil "192.0.2.16" 80 "/" nil nil t)))
+  (should (equal (url-generic-parse-url "urn:oasis:names:specification:docbook:dtd:xml:4.1.2") (url-parse-make-urlobj "urn" nil nil nil nil "oasis:names:specification:docbook:dtd:xml:4.1.2" nil nil nil))))
+
+(ert-deftest url-generic-parse-url/generic-uri ()
+  "RFC 3986, section 3. Syntax Components / generic URI syntax"
+  ;; empty path
+  (should (equal (url-generic-parse-url "http://host#") (url-parse-make-urlobj "http" nil nil "host" nil "" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host?#") (url-parse-make-urlobj "http" nil nil "host" nil "?" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host?query#") (url-parse-make-urlobj "http" nil nil "host" nil "?query" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host?#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "?" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host?query#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "?query" "fragment" nil t)))
+  ;; absolute path /
+  (should (equal (url-generic-parse-url "http://host/#") (url-parse-make-urlobj "http" nil nil "host" nil "/" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/?#") (url-parse-make-urlobj "http" nil nil "host" nil "/?" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/?query#") (url-parse-make-urlobj "http" nil nil "host" nil "/?query" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/?#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/?" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/?query#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/?query" "fragment" nil t)))
+  ;; absolute path /foo
+  (should (equal (url-generic-parse-url "http://host/foo#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo?#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo?" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo?query#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo?query" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo?#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo?" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo?query#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo?query" "fragment" nil t)))
+  ;; absolute path /foo/
+  (should (equal (url-generic-parse-url "http://host/foo/#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/?#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/?" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/?query#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/?query" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/?#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/?" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/?query#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/?query" "fragment" nil t)))
+  ;; absolute path /foo/bar
+  (should (equal (url-generic-parse-url "http://host/foo/bar#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar?#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar?" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar?query#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar?query" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar?#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar?" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar?query#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar?query" "fragment" nil t)))
+  ;; absolute path /foo/bar/
+  (should (equal (url-generic-parse-url "http://host/foo/bar/#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar/" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar/#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar/" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar/?#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar/?" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar/?query#") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar/?query" "" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar/?#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar/?" "fragment" nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar/?query#fragment") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar/?query" "fragment" nil t)))
+  ;; for more examples of URIs without fragments, see tests covering section 4.3. Absolute URI
+  )
+
+(ert-deftest url-generic-parse-url/network-path-reference ()
+  "RFC 3986, section 4.2. Relative Reference / network-path reference: a relative reference that begins with two slash characters"
+  (should (equal (url-generic-parse-url "//host") (url-parse-make-urlobj nil nil nil "host" nil "" nil nil t)))
+  (should (equal (url-generic-parse-url "//host/") (url-parse-make-urlobj nil nil nil "host" nil "/" nil nil t)))
+  (should (equal (url-generic-parse-url "//host/foo") (url-parse-make-urlobj nil nil nil "host" nil "/foo" nil nil t)))
+  (should (equal (url-generic-parse-url "//host/foo/bar") (url-parse-make-urlobj nil nil nil "host" nil "/foo/bar" nil nil t)))
+  (should (equal (url-generic-parse-url "//host/foo/bar/") (url-parse-make-urlobj nil nil nil "host" nil "/foo/bar/" nil nil t))))
+
+(ert-deftest url-generic-parse-url/absolute-path-reference ()
+  "RFC 3986, section 4.2. Relative Reference / absolute-path reference: a relative reference that begins with a single slash character"
+  (should (equal (url-generic-parse-url "/") (url-parse-make-urlobj nil nil nil nil nil "/" nil nil nil)))
+  (should (equal (url-generic-parse-url "/foo") (url-parse-make-urlobj nil nil nil nil nil "/foo" nil nil nil)))
+  (should (equal (url-generic-parse-url "/foo/bar") (url-parse-make-urlobj nil nil nil nil nil "/foo/bar" nil nil nil)))
+  (should (equal (url-generic-parse-url "/foo/bar/") (url-parse-make-urlobj nil nil nil nil nil "/foo/bar/" nil nil nil)))
+  (should (equal (url-generic-parse-url "/foo/bar#") (url-parse-make-urlobj nil nil nil nil nil "/foo/bar" "" nil nil)))
+  (should (equal (url-generic-parse-url "/foo/bar/#") (url-parse-make-urlobj nil nil nil nil nil "/foo/bar/" "" nil nil))))
+
+(ert-deftest url-generic-parse-url/relative-path-reference ()
+  "RFC 3986, section 4.2. Relative Reference / relative-path reference: a relative reference that does not begin with a slash character"
+  (should (equal (url-generic-parse-url "foo") (url-parse-make-urlobj nil nil nil nil nil "foo" nil nil nil)))
+  (should (equal (url-generic-parse-url "foo/bar") (url-parse-make-urlobj nil nil nil nil nil "foo/bar" nil nil nil)))
+  (should (equal (url-generic-parse-url "foo/bar/") (url-parse-make-urlobj nil nil nil nil nil "foo/bar/" nil nil nil)))
+  (should (equal (url-generic-parse-url "./foo") (url-parse-make-urlobj nil nil nil nil nil "./foo" nil nil nil)))
+  (should (equal (url-generic-parse-url "./foo/bar") (url-parse-make-urlobj nil nil nil nil nil "./foo/bar" nil nil nil)))
+  (should (equal (url-generic-parse-url "./foo/bar/") (url-parse-make-urlobj nil nil nil nil nil "./foo/bar/" nil nil nil)))
+  (should (equal (url-generic-parse-url "../foo") (url-parse-make-urlobj nil nil nil nil nil "../foo" nil nil nil)))
+  (should (equal (url-generic-parse-url "../foo/bar") (url-parse-make-urlobj nil nil nil nil nil "../foo/bar" nil nil nil)))
+  (should (equal (url-generic-parse-url "../foo/bar/") (url-parse-make-urlobj nil nil nil nil nil "../foo/bar/" nil nil nil)))
+  (should (equal (url-generic-parse-url "./this:that") (url-parse-make-urlobj nil nil nil nil nil "./this:that" nil nil nil)))
+  ;; for more examples of relative-path references, see tests covering section 4.4. Same-Document Reference
+  )
+
+(ert-deftest url-generic-parse-url/absolute-uri ()
+  "RFC 3986, section 4.3. Absolute URI / absolute URI: absolute form of a URI without a fragment identifier"
+  ;; empty path
+  (should (equal (url-generic-parse-url "http://host") (url-parse-make-urlobj "http" nil nil "host" nil "" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host?") (url-parse-make-urlobj "http" nil nil "host" nil "?" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host?query") (url-parse-make-urlobj "http" nil nil "host" nil "?query" nil nil t)))
+  ;; absolute path /
+  (should (equal (url-generic-parse-url "http://host/") (url-parse-make-urlobj "http" nil nil "host" nil "/" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/?") (url-parse-make-urlobj "http" nil nil "host" nil "/?" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/?query") (url-parse-make-urlobj "http" nil nil "host" nil "/?query" nil nil t)))
+  ;; absolute path /foo
+  (should (equal (url-generic-parse-url "http://host/foo") (url-parse-make-urlobj "http" nil nil "host" nil "/foo" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo?") (url-parse-make-urlobj "http" nil nil "host" nil "/foo?" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo?query") (url-parse-make-urlobj "http" nil nil "host" nil "/foo?query" nil nil t)))
+  ;; absolute path /foo/
+  (should (equal (url-generic-parse-url "http://host/foo/") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/?") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/?" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/?query") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/?query" nil nil t)))
+  ;; absolute path /foo/bar
+  (should (equal (url-generic-parse-url "http://host/foo/bar") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar?") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar?" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar?query") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar?query" nil nil t)))
+  ;; absolute path /foo/bar/
+  (should (equal (url-generic-parse-url "http://host/foo/bar/") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar/" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar/?") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar/?" nil nil t)))
+  (should (equal (url-generic-parse-url "http://host/foo/bar/?query") (url-parse-make-urlobj "http" nil nil "host" nil "/foo/bar/?query" nil nil t)))
+  ;; example mentioned in RFC3986, section 5.4. Reference Resolution Examples
+  (should (equal (url-generic-parse-url "http://a/b/c/d;p?q") (url-parse-make-urlobj "http" nil nil "a" nil "/b/c/d;p?q" nil nil t))))
+
+(ert-deftest url-generic-parse-url/same-decument-reference ()
+  "RFC 3986, section 4.4. Same-Document Reference / same-document reference: empty or number sign (\"#\") followed by a fragment identifier"
+  (should (equal (url-generic-parse-url "") (url-parse-make-urlobj nil nil nil nil nil "" nil nil nil)))
+  (should (equal (url-generic-parse-url "#") (url-parse-make-urlobj nil nil nil nil nil "" "" nil nil)))
+  (should (equal (url-generic-parse-url "#foo") (url-parse-make-urlobj nil nil nil nil nil "" "foo" nil nil))))
+
+(provide 'url-parse-tests)
+
+;;; url-parse-tests.el ends here
diff --git a/test/make-test-deps.emacs-lisp b/test/make-test-deps.emacs-lisp
new file mode 100644 (file)
index 0000000..3af0685
--- /dev/null
@@ -0,0 +1,98 @@
+;; -*- emacs-lisp -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file generates dependencies between test files and the files
+;; that they test.
+
+;; It has an .emacs-lisp extension because it makes the Makefile easier!
+
+(require 'seq)
+
+(defun make-test-deps (src-dir)
+  (let ((src-dir (file-truename src-dir)))
+    (message
+     "%s"
+     (concat
+      (make-test-deps-lisp src-dir)
+      (make-test-deps-src src-dir)))))
+
+(defun make-test-deps-lisp (src-dir)
+  (mapconcat
+   (lambda (file-without-suffix)
+     (format "./%s-tests.log: %s/../%s.el\n"
+             file-without-suffix
+             src-dir
+             file-without-suffix))
+   (make-test-test-files src-dir "lisp") ""))
+
+(defun make-test-deps-src (src-dir)
+  (mapconcat
+   (lambda (file-without-suffix)
+     (format "./%s-tests.log: %s/../%s.c\n"
+             file-without-suffix
+             src-dir
+             file-without-suffix))
+   (make-test-test-files src-dir "src") ""))
+
+(defun make-test-test-files (src-dir sub-src-dir)
+  (make-test-munge-files
+   src-dir
+   (directory-files-recursively
+    (concat src-dir "/"  sub-src-dir)
+    ".*-tests.el$")))
+
+(defun make-test-munge-files (src-dir files)
+  (make-test-sans-suffix
+   (make-test-de-stem
+    src-dir
+    (make-test-no-legacy
+     (make-test-no-test-dir
+      (make-test-no-resources
+       files))))))
+
+(defun make-test-sans-suffix (files)
+  (mapcar
+   (lambda (file)
+     (substring file 0 -9))
+   files))
+
+(defun make-test-de-stem (stem files)
+  (mapcar
+   (lambda (file)
+     (substring
+      file
+      (+ 1 (length stem))))
+   files))
+
+(defun make-test-no-legacy (list)
+  (make-test-remove list "legacy/"))
+
+(defun make-test-no-resources (list)
+  (make-test-remove list "-resources/"))
+
+(defun make-test-no-test-dir (list)
+  (make-test-remove list "-tests/"))
+
+(defun make-test-remove (list match)
+  (seq-remove
+   (lambda (file)
+     (string-match-p match file))
+   list))
similarity index 100%
rename from test/biditest.el
rename to test/manual/biditest.el
similarity index 98%
rename from test/etags/Makefile
rename to test/manual/etags/Makefile
index 00d5b9f52b215be1a30bf268c0e0dd9359e30db1..4d9f358c8ed8c748f8c9fc122f832a37bb81d074 100644 (file)
@@ -32,8 +32,8 @@ SRCS=${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
      ${RBSRC} ${TEXSRC} ${YSRC}
 NONSRCS=./f-src/entry.strange ./erl-src/lists.erl ./cp-src/clheir.hpp.gz
 
-ETAGS_PROG=../../lib-src/etags
-CTAGS_PROG=../../lib-src/ctags
+ETAGS_PROG=../../../lib-src/etags
+CTAGS_PROG=../../../lib-src/ctags
 
 REGEX=/[ \t]*DEFVAR_[A-Z_ \t\n(]+"\([^"]+\)"/
 xx="this line is here because of a fontlock bug
similarity index 100%
rename from test/indent/js.js
rename to test/manual/indent/js.js
similarity index 100%
rename from test/rmailmm.el
rename to test/manual/rmailmm.el
similarity index 93%
rename from test/automated/finalizer-tests.el
rename to test/src/alloc-tests.el
index 218df05e42614eca26694e031238f766c7044dce..c0fe0f33cb9eb58ba63ab890d94d0319a1d1c210 100644 (file)
@@ -1,4 +1,4 @@
-;;; finalizer-tests.el --- Finalizer tests -*- lexical-binding: t -*-
+;;; alloc-tests.el --- alloc tests -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015 Free Software Foundation, Inc.
 
similarity index 92%
rename from test/automated/zlib-tests.el
rename to test/src/decompress-tests.el
index c6c084dd69f8e76a9755e1749340eef45bb08787..1eea673121cf4bbc97a0366c9fc5baef7e803a51 100644 (file)
@@ -1,4 +1,4 @@
-;;; zlib-tests.el --- Test suite for zlib.
+;;; decompress-tests.el --- Test suite for decompress.
 
 ;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
@@ -40,6 +40,6 @@
               (buffer-string))
             "foo\n"))))
 
-(provide 'zlib-tests)
+(provide 'decompress-tests)
 
-;;; zlib-tests.el ends here.
+;;; decompress-tests.el ends here.